From ed7b2022b7f68dcd35a6654bd617596fc4883eef Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 20 Jun 2020 20:40:30 -0500 Subject: [PATCH] Bringing back Tuinity! \o/ --- Paper | 2 +- current-paper | 2 +- patches/api/0001-Tuinity-API-Changes.patch | 61 + ...{0001-Rebrand.patch => 0002-Rebrand.patch} | 26 +- ...s.patch => 0003-Purpur-config-files.patch} | 10 +- ...s.patch => 0004-Default-permissions.patch} | 4 +- ...004-Ridables.patch => 0005-Ridables.patch} | 4 +- ...ntless-annotations-and-deprecations.patch} | 6 +- ...ch => 0007-Allow-inventory-resizing.patch} | 4 +- ...API.patch => 0008-Implement-AFK-API.patch} | 4 +- ... => 0009-Add-EntityPortalReadyEvent.patch} | 4 +- ...atch => 0010-Bring-back-server-name.patch} | 8 +- ...ement-LivingEntity-safeFallDistance.patch} | 4 +- ...tch => 0012-Add-ExecuteCommandEvent.patch} | 4 +- ...> 0013-Implement-ChunkTooLargeEvent.patch} | 4 +- ...=> 0014-Implement-lagging-threshold.patch} | 8 +- ...h => 0015-Advancement-API-Additions.patch} | 4 +- ...Implement-ItemFactory-getMonsterEgg.patch} | 4 +- ...nt-PlayerSetSpawnerTypeWithEggEvent.patch} | 4 +- ...ch => 0018-Add-MonsterEggSpawnEvent.patch} | 4 +- ...tch => 0019-Add-ThrownEggHatchEvent.patch} | 4 +- ...PI.patch => 0020-Add-moon-phase-API.patch} | 4 +- ...21-Add-API-for-Villager-resetOffers.patch} | 6 +- ...022-Expose-getItemStack-for-Trident.patch} | 4 +- ...PI.patch => 0023-Add-more-llama-API.patch} | 4 +- ...I.patch => 0024-Add-more-evoker-API.patch} | 4 +- ...-Add-getPlacementBlockData-to-World.patch} | 4 +- ...PickupItemAnimation-to-LivingEntity.patch} | 4 +- ...getPlayer-to-SkeletonHorseTrapEvent.patch} | 4 +- ...Add-LootableInventoryFirstFillEvent.patch} | 4 +- ...tyCreatePortalEvent-for-EnderDragon.patch} | 4 +- ...h => 0030-Implement-EntityMoveEvent.patch} | 4 +- ...1-Add-ItemStack-convenience-methods.patch} | 4 +- ...ent.patch => 0032-Add-BellRingEvent.patch} | 4 +- ...-Configurable-enchantment-max-level.patch} | 4 +- ...s.patch => 0034-More-anvil-controls.patch} | 4 +- ...tch => 0035-PlayerItemCooldownEvent.patch} | 4 +- ...ch => 0036-Player-invulnerabilities.patch} | 4 +- ... => 0037-Add-PrepareGrindstoneEvent.patch} | 2 +- .../server/0001-Tuinity-Server-Changes.patch | 6978 +++++++++++++++++ ...{0001-Rebrand.patch => 0002-Rebrand.patch} | 67 +- ...s.patch => 0003-Purpur-config-files.patch} | 42 +- ...s-stuff.patch => 0004-Timings-stuff.patch} | 20 +- ...fixes.patch => 0005-decompile-fixes.patch} | 180 +- ...0006-Add-language-asset-purpur.lang.patch} | 10 +- ...-vanilla-command-permission-handler.patch} | 8 +- ....patch => 0008-Host-our-own-timings.patch} | 6 +- ...008-Ridables.patch => 0009-Ridables.patch} | 250 +- ...settings-suppressing-pointless-logs.patch} | 14 +- ...> 0011-Disable-outdated-build-check.patch} | 8 +- ... 0012-Add-obfhelpers-for-plugin-use.patch} | 10 +- ...s.patch => 0013-Silk-touch-spawners.patch} | 12 +- ...nts-AI.patch => 0014-Give-giants-AI.patch} | 10 +- ...tch => 0015-Illusioners-AI-settings.patch} | 8 +- ...> 0016-Zombie-horse-naturally-spawn.patch} | 8 +- ...017-Charged-creeper-naturally-spawn.patch} | 8 +- ...it-naturally-spawn-toast-and-killer.patch} | 8 +- ....patch => 0019-Cat-spawning-options.patch} | 8 +- ...ck-cat-types-spawning-in-swamp-huts.patch} | 6 +- ...ms.patch => 0021-Cows-eat-mushrooms.patch} | 18 +- ...ow-rotation-when-shearing-mooshroom.patch} | 6 +- ...patch => 0023-Pigs-give-saddle-back.patch} | 8 +- ...d-to-crystals-and-crystals-shoot-ph.patch} | 20 +- ...5-Snowman-drop-and-put-back-pumpkin.patch} | 8 +- ...> 0026-Ender-dragon-always-drop-egg.patch} | 8 +- ...7-Ender-dragon-always-drop-full-exp.patch} | 8 +- ... 0028-Signs-editable-on-right-click.patch} | 10 +- ...er-showing-in-ping-before-server-fu.patch} | 6 +- ...patch => 0030-Make-Iron-Golems-Swim.patch} | 8 +- ...oisten-from-water-directly-under-it.patch} | 8 +- ...atch => 0032-Controllable-Minecarts.patch} | 14 +- ...tch => 0033-Signs-allow-color-codes.patch} | 12 +- ...=> 0034-Campfires-have-regen-effect.patch} | 16 +- ...ble-loot-drops-on-death-by-cramming.patch} | 8 +- ... => 0036-Campfires-burn-out-in-rain.patch} | 12 +- ...-Campfires-should-fall-with-gravity.patch} | 8 +- ...38-Dont-send-useless-entity-packets.patch} | 14 +- ...API.patch => 0039-Implement-AFK-API.patch} | 34 +- ...tion-to-toggle-milk-curing-bad-omen.patch} | 8 +- ...-mends-most-damages-equipment-first.patch} | 12 +- ...atch => 0042-Tulips-change-fox-type.patch} | 10 +- ...-Pillager-limits-and-leaders-chance.patch} | 10 +- ...r.patch => 0044-Make-the-GUI-better.patch} | 44 +- ...45-Players-should-not-cram-to-death.patch} | 4 +- ... => 0046-Add-EntityPortalReadyEvent.patch} | 16 +- ...h => 0047-Implement-elytra-settings.patch} | 31 +- ...Add-blacklist-option-for-grindstone.patch} | 10 +- ...=> 0049-Implement-lagging-threshold.patch} | 12 +- ...t-configurable-villager-brain-ticks.patch} | 8 +- ...-for-zombies-targetting-turtle-eggs.patch} | 8 +- ...52-Implement-bamboo-growth-settings.patch} | 8 +- ...should-not-bypass-cramming-gamerule.patch} | 42 +- ...0054-Option-for-slimes-not-pushable.patch} | 12 +- ...atch => 0055-Bring-back-server-name.patch} | 10 +- ...spenser-curse-of-binding-protection.patch} | 10 +- ...ement-LivingEntity-safeFallDistance.patch} | 12 +- ...-for-boats-to-eject-players-on-land.patch} | 8 +- ...h => 0059-Advancement-API-Additions.patch} | 16 +- ...ption-to-set-armorstand-step-height.patch} | 8 +- ...Implement-ItemFactory-getMonsterEgg.patch} | 8 +- ...0062-Alternative-Keepalive-Handling.patch} | 10 +- ...nt-PlayerSetSpawnerTypeWithEggEvent.patch} | 6 +- ...PI.patch => 0064-Add-moon-phase-API.patch} | 6 +- ...-Add-getPlacementBlockData-to-World.patch} | 12 +- ...s.patch => 0066-Barrels-have-6-rows.patch} | 10 +- ...-Enderchest-6-rows-plus-permissions.patch} | 16 +- ...068-Add-5-second-tps-average-in-tps.patch} | 10 +- ...PickupItemAnimation-to-LivingEntity.patch} | 6 +- ...I.patch => 0070-Add-more-evoker-API.patch} | 8 +- ...71-Add-API-for-Villager-resetOffers.patch} | 12 +- ...PI.patch => 0072-Add-more-llama-API.patch} | 10 +- ...speed-multiplier-using-values-betwe.patch} | 8 +- ...tch => 0074-Implement-infinite-lava.patch} | 12 +- ...075-Expose-getItemStack-for-Trident.patch} | 8 +- ...=> 0076-Despawn-egg-hatches-chicken.patch} | 8 +- ...eEvent-not-firing-for-all-use-cases.patch} | 12 +- ...ons.patch => 0078-Add-sleep-options.patch} | 8 +- ...79-Option-for-hay-block-fall-damage.patch} | 8 +- ...getPlayer-to-SkeletonHorseTrapEvent.patch} | 6 +- ...Add-LootableInventoryFirstFillEvent.patch} | 8 +- ...082-Villagers-follow-emerald-blocks.patch} | 12 +- ...dd-player-death-exp-control-options.patch} | 8 +- ... 0084-Add-permission-for-F3-N-debug.patch} | 4 +- ...ch => 0085-Allow-leashing-villagers.patch} | 12 +- ...rable-search-radius-for-villagers-t.patch} | 8 +- ...7-Make-lava-flow-speed-configurable.patch} | 10 +- ...skeleton-takes-wither-damage-option.patch} | 8 +- ...> 0089-UPnP-Port-Forwarding-Service.patch} | 20 +- ...h => 0090-Implement-EntityMoveEvent.patch} | 6 +- ...-disable-saving-projectiles-to-disk.patch} | 24 +- ...092-Implement-bed-explosion-options.patch} | 8 +- ...tch => 0093-Add-item-entity-options.patch} | 12 +- ...tural-spawns-per-biome-configurable.patch} | 162 +- ...095-Configurable-void-damage-height.patch} | 10 +- ...096-Fix-the-dead-lagging-the-server.patch} | 10 +- ...mand.patch => 0097-Add-ping-command.patch} | 14 +- ...ow-loyalty-on-tridents-to-work-in-t.patch} | 8 +- ...> 0099-Configurable-server-mod-name.patch} | 12 +- ...ould-check-if-entity-can-use-portal.patch} | 6 +- ...ch => 0101-Configurable-TPS-Catchup.patch} | 6 +- ...patch => 0102-Breedable-Polar-Bears.patch} | 8 +- ...=> 0103-Configurable-jockey-options.patch} | 16 +- ...-Configurable-enchantment-max-level.patch} | 68 +- ....patch => 0105-Optimize-Chunk-Ticks.patch} | 10 +- ...figurable-beehive-generation-chance.patch} | 10 +- ...tch => 0107-Add-more-timings-timers.patch} | 20 +- ...Skip-events-if-there-s-no-listeners.patch} | 6 +- ...g-stick-should-not-update-neighbors.patch} | 6 +- ...erman-and-creeper-griefing-controls.patch} | 10 +- ...atch => 0111-Chickens-can-retaliate.patch} | 8 +- ...p-loot-bypass-mob-griefing-gamerule.patch} | 8 +- ...s.patch => 0113-More-anvil-controls.patch} | 6 +- ...ng-can-bypass-mob-griefing-gamerule.patch} | 8 +- ...ch => 0115-Player-invulnerabilities.patch} | 14 +- ...ot-strip-colors-from-death-messages.patch} | 4 +- ... => 0117-Add-PrepareGrindstoneEvent.patch} | 6 +- ...tch => 0118-Fix-reloading-paper.yml.patch} | 4 +- ...ays-increment-arrow-despawn-counter.patch} | 4 +- ...72-Fix-Add-turtle-egg-block-options.patch} | 6 +- ... 0121-MC-4-Fix-Item-position-desync.patch} | 10 +- ...0122-MC-56653-Fix-pig-zombies-aggro.patch} | 6 +- ...h => 0123-EMC-MonsterEggSpawn-Event.patch} | 4 +- ...h => 0124-PaperPR-Add-BellRingEvent.patch} | 4 +- .../0124-PaperPR-Per-World-Spawn-limits.patch | 53 - .../0126-PaperPR-3550-Fix-more-exploits.patch | 206 - ... 0126-YAPFA-Disable-mojang-profiler.patch} | 18 +- ...ble-to-execute-tasks-on-the-main-ser.patch | 29 - 167 files changed, 8135 insertions(+), 1402 deletions(-) create mode 100644 patches/api/0001-Tuinity-API-Changes.patch rename patches/api/{0001-Rebrand.patch => 0002-Rebrand.patch} (68%) rename patches/api/{0002-Purpur-config-files.patch => 0003-Purpur-config-files.patch} (80%) rename patches/api/{0003-Default-permissions.patch => 0004-Default-permissions.patch} (98%) rename patches/api/{0004-Ridables.patch => 0005-Ridables.patch} (98%) rename patches/api/{0005-Remove-pointless-annotations-and-deprecations.patch => 0006-Remove-pointless-annotations-and-deprecations.patch} (98%) rename patches/api/{0006-Allow-inventory-resizing.patch => 0007-Allow-inventory-resizing.patch} (93%) rename patches/api/{0007-Implement-AFK-API.patch => 0008-Implement-AFK-API.patch} (97%) rename patches/api/{0008-Add-EntityPortalReadyEvent.patch => 0009-Add-EntityPortalReadyEvent.patch} (95%) rename patches/api/{0009-Bring-back-server-name.patch => 0010-Bring-back-server-name.patch} (88%) rename patches/api/{0010-Implement-LivingEntity-safeFallDistance.patch => 0011-Implement-LivingEntity-safeFallDistance.patch} (94%) rename patches/api/{0011-Add-ExecuteCommandEvent.patch => 0012-Add-ExecuteCommandEvent.patch} (98%) rename patches/api/{0012-Implement-ChunkTooLargeEvent.patch => 0013-Implement-ChunkTooLargeEvent.patch} (97%) rename patches/api/{0013-Implement-lagging-threshold.patch => 0014-Implement-lagging-threshold.patch} (88%) rename patches/api/{0014-Advancement-API-Additions.patch => 0015-Advancement-API-Additions.patch} (98%) rename patches/api/{0015-Implement-ItemFactory-getMonsterEgg.patch => 0016-Implement-ItemFactory-getMonsterEgg.patch} (93%) rename patches/api/{0016-Implement-PlayerSetSpawnerTypeWithEggEvent.patch => 0017-Implement-PlayerSetSpawnerTypeWithEggEvent.patch} (97%) rename patches/api/{0017-Add-MonsterEggSpawnEvent.patch => 0018-Add-MonsterEggSpawnEvent.patch} (97%) rename patches/api/{0018-Add-ThrownEggHatchEvent.patch => 0019-Add-ThrownEggHatchEvent.patch} (98%) rename patches/api/{0019-Add-moon-phase-API.patch => 0020-Add-moon-phase-API.patch} (96%) rename patches/api/{0020-Add-API-for-Villager-resetOffers.patch => 0021-Add-API-for-Villager-resetOffers.patch} (88%) rename patches/api/{0021-Expose-getItemStack-for-Trident.patch => 0022-Expose-getItemStack-for-Trident.patch} (93%) rename patches/api/{0022-Add-more-llama-API.patch => 0023-Add-more-llama-API.patch} (98%) rename patches/api/{0023-Add-more-evoker-API.patch => 0024-Add-more-evoker-API.patch} (93%) rename patches/api/{0024-Add-getPlacementBlockData-to-World.patch => 0025-Add-getPlacementBlockData-to-World.patch} (93%) rename patches/api/{0025-Add-playPickupItemAnimation-to-LivingEntity.patch => 0026-Add-playPickupItemAnimation-to-LivingEntity.patch} (94%) rename patches/api/{0026-Add-getPlayer-to-SkeletonHorseTrapEvent.patch => 0027-Add-getPlayer-to-SkeletonHorseTrapEvent.patch} (96%) rename patches/api/{0027-Add-LootableInventoryFirstFillEvent.patch => 0028-Add-LootableInventoryFirstFillEvent.patch} (96%) rename patches/api/{0028-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch => 0029-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch} (95%) rename patches/api/{0029-Implement-EntityMoveEvent.patch => 0030-Implement-EntityMoveEvent.patch} (97%) rename patches/api/{0030-Add-ItemStack-convenience-methods.patch => 0031-Add-ItemStack-convenience-methods.patch} (99%) rename patches/api/{0031-Add-BellRingEvent.patch => 0032-Add-BellRingEvent.patch} (96%) rename patches/api/{0032-Configurable-enchantment-max-level.patch => 0033-Configurable-enchantment-max-level.patch} (96%) rename patches/api/{0033-More-anvil-controls.patch => 0034-More-anvil-controls.patch} (98%) rename patches/api/{0034-PlayerItemCooldownEvent.patch => 0035-PlayerItemCooldownEvent.patch} (97%) rename patches/api/{0035-Player-invulnerabilities.patch => 0036-Player-invulnerabilities.patch} (94%) rename patches/api/{0036-Add-PrepareGrindstoneEvent.patch => 0037-Add-PrepareGrindstoneEvent.patch} (96%) create mode 100644 patches/server/0001-Tuinity-Server-Changes.patch rename patches/server/{0001-Rebrand.patch => 0002-Rebrand.patch} (84%) rename patches/server/{0002-Purpur-config-files.patch => 0003-Purpur-config-files.patch} (93%) rename patches/server/{0003-Timings-stuff.patch => 0004-Timings-stuff.patch} (78%) rename patches/server/{0004-decompile-fixes.patch => 0005-decompile-fixes.patch} (97%) rename patches/server/{0005-Add-language-asset-purpur.lang.patch => 0006-Add-language-asset-purpur.lang.patch} (96%) rename patches/server/{0006-Fix-vanilla-command-permission-handler.patch => 0007-Fix-vanilla-command-permission-handler.patch} (92%) rename patches/server/{0007-Host-our-own-timings.patch => 0008-Host-our-own-timings.patch} (87%) rename patches/server/{0008-Ridables.patch => 0009-Ridables.patch} (98%) rename patches/server/{0009-Logger-settings-suppressing-pointless-logs.patch => 0010-Logger-settings-suppressing-pointless-logs.patch} (95%) rename patches/server/{0010-Disable-outdated-build-check.patch => 0011-Disable-outdated-build-check.patch} (88%) rename patches/server/{0011-Add-obfhelpers-for-plugin-use.patch => 0012-Add-obfhelpers-for-plugin-use.patch} (93%) rename patches/server/{0012-Silk-touch-spawners.patch => 0013-Silk-touch-spawners.patch} (95%) rename patches/server/{0013-Give-giants-AI.patch => 0014-Give-giants-AI.patch} (97%) rename patches/server/{0014-Illusioners-AI-settings.patch => 0015-Illusioners-AI-settings.patch} (95%) rename patches/server/{0015-Zombie-horse-naturally-spawn.patch => 0016-Zombie-horse-naturally-spawn.patch} (94%) rename patches/server/{0016-Charged-creeper-naturally-spawn.patch => 0017-Charged-creeper-naturally-spawn.patch} (94%) rename patches/server/{0017-Rabbit-naturally-spawn-toast-and-killer.patch => 0018-Rabbit-naturally-spawn-toast-and-killer.patch} (95%) rename patches/server/{0018-Cat-spawning-options.patch => 0019-Cat-spawning-options.patch} (96%) rename patches/server/{0019-Fix-non-black-cat-types-spawning-in-swamp-huts.patch => 0020-Fix-non-black-cat-types-spawning-in-swamp-huts.patch} (91%) rename patches/server/{0020-Cows-eat-mushrooms.patch => 0021-Cows-eat-mushrooms.patch} (94%) rename patches/server/{0021-Fix-cow-rotation-when-shearing-mooshroom.patch => 0022-Fix-cow-rotation-when-shearing-mooshroom.patch} (93%) rename patches/server/{0022-Pigs-give-saddle-back.patch => 0023-Pigs-give-saddle-back.patch} (93%) rename patches/server/{0023-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch => 0024-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch} (97%) rename patches/server/{0024-Snowman-drop-and-put-back-pumpkin.patch => 0025-Snowman-drop-and-put-back-pumpkin.patch} (96%) rename patches/server/{0025-Ender-dragon-always-drop-egg.patch => 0026-Ender-dragon-always-drop-egg.patch} (95%) rename patches/server/{0026-Ender-dragon-always-drop-full-exp.patch => 0027-Ender-dragon-always-drop-full-exp.patch} (94%) rename patches/server/{0027-Signs-editable-on-right-click.patch => 0028-Signs-editable-on-right-click.patch} (94%) rename patches/server/{0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch => 0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch} (91%) rename patches/server/{0029-Make-Iron-Golems-Swim.patch => 0030-Make-Iron-Golems-Swim.patch} (93%) rename patches/server/{0030-Allow-soil-to-moisten-from-water-directly-under-it.patch => 0031-Allow-soil-to-moisten-from-water-directly-under-it.patch} (94%) rename patches/server/{0031-Controllable-Minecarts.patch => 0032-Controllable-Minecarts.patch} (96%) rename patches/server/{0032-Signs-allow-color-codes.patch => 0033-Signs-allow-color-codes.patch} (94%) rename patches/server/{0033-Campfires-have-regen-effect.patch => 0034-Campfires-have-regen-effect.patch} (97%) rename patches/server/{0034-Disable-loot-drops-on-death-by-cramming.patch => 0035-Disable-loot-drops-on-death-by-cramming.patch} (94%) rename patches/server/{0035-Campfires-burn-out-in-rain.patch => 0036-Campfires-burn-out-in-rain.patch} (94%) rename patches/server/{0036-Campfires-should-fall-with-gravity.patch => 0037-Campfires-should-fall-with-gravity.patch} (97%) rename patches/server/{0037-Dont-send-useless-entity-packets.patch => 0038-Dont-send-useless-entity-packets.patch} (93%) rename patches/server/{0038-Implement-AFK-API.patch => 0039-Implement-AFK-API.patch} (94%) rename patches/server/{0039-Option-to-toggle-milk-curing-bad-omen.patch => 0040-Option-to-toggle-milk-curing-bad-omen.patch} (94%) rename patches/server/{0040-Mending-mends-most-damages-equipment-first.patch => 0041-Mending-mends-most-damages-equipment-first.patch} (96%) rename patches/server/{0041-Tulips-change-fox-type.patch => 0042-Tulips-change-fox-type.patch} (96%) rename patches/server/{0042-Pillager-limits-and-leaders-chance.patch => 0043-Pillager-limits-and-leaders-chance.patch} (96%) rename patches/server/{0043-Make-the-GUI-better.patch => 0044-Make-the-GUI-better.patch} (98%) rename patches/server/{0044-Players-should-not-cram-to-death.patch => 0045-Players-should-not-cram-to-death.patch} (91%) rename patches/server/{0045-Add-EntityPortalReadyEvent.patch => 0046-Add-EntityPortalReadyEvent.patch} (93%) rename patches/server/{0046-Implement-elytra-settings.patch => 0047-Implement-elytra-settings.patch} (88%) rename patches/server/{0047-Add-blacklist-option-for-grindstone.patch => 0048-Add-blacklist-option-for-grindstone.patch} (96%) rename patches/server/{0048-Implement-lagging-threshold.patch => 0049-Implement-lagging-threshold.patch} (90%) rename patches/server/{0049-Implement-configurable-villager-brain-ticks.patch => 0050-Implement-configurable-villager-brain-ticks.patch} (95%) rename patches/server/{0050-Add-option-for-zombies-targetting-turtle-eggs.patch => 0051-Add-option-for-zombies-targetting-turtle-eggs.patch} (94%) rename patches/server/{0051-Implement-bamboo-growth-settings.patch => 0052-Implement-bamboo-growth-settings.patch} (97%) rename patches/server/{0052-Climbing-should-not-bypass-cramming-gamerule.patch => 0053-Climbing-should-not-bypass-cramming-gamerule.patch} (87%) rename patches/server/{0053-Option-for-slimes-not-pushable.patch => 0054-Option-for-slimes-not-pushable.patch} (91%) rename patches/server/{0054-Bring-back-server-name.patch => 0055-Bring-back-server-name.patch} (89%) rename patches/server/{0055-Dispenser-curse-of-binding-protection.patch => 0056-Dispenser-curse-of-binding-protection.patch} (94%) rename patches/server/{0056-Implement-LivingEntity-safeFallDistance.patch => 0057-Implement-LivingEntity-safeFallDistance.patch} (94%) rename patches/server/{0057-Add-option-for-boats-to-eject-players-on-land.patch => 0058-Add-option-for-boats-to-eject-players-on-land.patch} (94%) rename patches/server/{0058-Advancement-API-Additions.patch => 0059-Advancement-API-Additions.patch} (96%) rename patches/server/{0059-Add-option-to-set-armorstand-step-height.patch => 0060-Add-option-to-set-armorstand-step-height.patch} (94%) rename patches/server/{0060-Implement-ItemFactory-getMonsterEgg.patch => 0061-Implement-ItemFactory-getMonsterEgg.patch} (93%) rename patches/server/{0061-Alternative-Keepalive-Handling.patch => 0062-Alternative-Keepalive-Handling.patch} (95%) rename patches/server/{0062-Implement-PlayerSetSpawnerTypeWithEggEvent.patch => 0063-Implement-PlayerSetSpawnerTypeWithEggEvent.patch} (95%) rename patches/server/{0063-Add-moon-phase-API.patch => 0064-Add-moon-phase-API.patch} (85%) rename patches/server/{0064-Add-getPlacementBlockData-to-World.patch => 0065-Add-getPlacementBlockData-to-World.patch} (93%) rename patches/server/{0065-Barrels-have-6-rows.patch => 0066-Barrels-have-6-rows.patch} (95%) rename patches/server/{0066-Enderchest-6-rows-plus-permissions.patch => 0067-Enderchest-6-rows-plus-permissions.patch} (96%) rename patches/server/{0067-Add-5-second-tps-average-in-tps.patch => 0068-Add-5-second-tps-average-in-tps.patch} (94%) rename patches/server/{0068-Add-playPickupItemAnimation-to-LivingEntity.patch => 0069-Add-playPickupItemAnimation-to-LivingEntity.patch} (90%) rename patches/server/{0069-Add-more-evoker-API.patch => 0070-Add-more-evoker-API.patch} (93%) rename patches/server/{0070-Add-API-for-Villager-resetOffers.patch => 0071-Add-API-for-Villager-resetOffers.patch} (87%) rename patches/server/{0071-Add-more-llama-API.patch => 0072-Add-more-llama-API.patch} (97%) rename patches/server/{0072-Fix-furnace-cook-speed-multiplier-using-values-betwe.patch => 0073-Fix-furnace-cook-speed-multiplier-using-values-betwe.patch} (88%) rename patches/server/{0073-Implement-infinite-lava.patch => 0074-Implement-infinite-lava.patch} (94%) rename patches/server/{0074-Expose-getItemStack-for-Trident.patch => 0075-Expose-getItemStack-for-Trident.patch} (91%) rename patches/server/{0075-Despawn-egg-hatches-chicken.patch => 0076-Despawn-egg-hatches-chicken.patch} (95%) rename patches/server/{0076-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch => 0077-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch} (89%) rename patches/server/{0077-Add-sleep-options.patch => 0078-Add-sleep-options.patch} (96%) rename patches/server/{0078-Option-for-hay-block-fall-damage.patch => 0079-Option-for-hay-block-fall-damage.patch} (91%) rename patches/server/{0079-Add-getPlayer-to-SkeletonHorseTrapEvent.patch => 0080-Add-getPlayer-to-SkeletonHorseTrapEvent.patch} (94%) rename patches/server/{0080-Add-LootableInventoryFirstFillEvent.patch => 0081-Add-LootableInventoryFirstFillEvent.patch} (94%) rename patches/server/{0081-Villagers-follow-emerald-blocks.patch => 0082-Villagers-follow-emerald-blocks.patch} (95%) rename patches/server/{0082-Add-player-death-exp-control-options.patch => 0083-Add-player-death-exp-control-options.patch} (95%) rename patches/server/{0083-Add-permission-for-F3-N-debug.patch => 0084-Add-permission-for-F3-N-debug.patch} (89%) rename patches/server/{0084-Allow-leashing-villagers.patch => 0085-Allow-leashing-villagers.patch} (95%) rename patches/server/{0085-Implement-configurable-search-radius-for-villagers-t.patch => 0086-Implement-configurable-search-radius-for-villagers-t.patch} (94%) rename patches/server/{0086-Make-lava-flow-speed-configurable.patch => 0087-Make-lava-flow-speed-configurable.patch} (92%) rename patches/server/{0087-Add-wither-skeleton-takes-wither-damage-option.patch => 0088-Add-wither-skeleton-takes-wither-damage-option.patch} (93%) rename patches/server/{0088-UPnP-Port-Forwarding-Service.patch => 0089-UPnP-Port-Forwarding-Service.patch} (95%) rename patches/server/{0089-Implement-EntityMoveEvent.patch => 0090-Implement-EntityMoveEvent.patch} (94%) rename patches/server/{0090-Add-option-to-disable-saving-projectiles-to-disk.patch => 0091-Add-option-to-disable-saving-projectiles-to-disk.patch} (94%) rename patches/server/{0091-Implement-bed-explosion-options.patch => 0092-Implement-bed-explosion-options.patch} (95%) rename patches/server/{0092-Add-item-entity-options.patch => 0093-Add-item-entity-options.patch} (96%) rename patches/server/{0093-Make-natural-spawns-per-biome-configurable.patch => 0094-Make-natural-spawns-per-biome-configurable.patch} (98%) rename patches/server/{0094-Configurable-void-damage-height.patch => 0095-Configurable-void-damage-height.patch} (91%) rename patches/server/{0095-Fix-the-dead-lagging-the-server.patch => 0096-Fix-the-dead-lagging-the-server.patch} (88%) rename patches/server/{0096-Add-ping-command.patch => 0097-Add-ping-command.patch} (96%) rename patches/server/{0097-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch => 0098-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch} (94%) rename patches/server/{0098-Configurable-server-mod-name.patch => 0099-Configurable-server-mod-name.patch} (82%) rename patches/server/{0099-End-gateway-should-check-if-entity-can-use-portal.patch => 0100-End-gateway-should-check-if-entity-can-use-portal.patch} (90%) rename patches/server/{0100-Configurable-TPS-Catchup.patch => 0101-Configurable-TPS-Catchup.patch} (94%) rename patches/server/{0101-Breedable-Polar-Bears.patch => 0102-Breedable-Polar-Bears.patch} (96%) rename patches/server/{0102-Configurable-jockey-options.patch => 0103-Configurable-jockey-options.patch} (97%) rename patches/server/{0103-Configurable-enchantment-max-level.patch => 0104-Configurable-enchantment-max-level.patch} (96%) rename patches/server/{0104-Optimize-Chunk-Ticks.patch => 0105-Optimize-Chunk-Ticks.patch} (95%) rename patches/server/{0105-Add-configurable-beehive-generation-chance.patch => 0106-Add-configurable-beehive-generation-chance.patch} (97%) rename patches/server/{0106-Add-more-timings-timers.patch => 0107-Add-more-timings-timers.patch} (95%) rename patches/server/{0107-Skip-events-if-there-s-no-listeners.patch => 0108-Skip-events-if-there-s-no-listeners.patch} (93%) rename patches/server/{0108-Debug-stick-should-not-update-neighbors.patch => 0109-Debug-stick-should-not-update-neighbors.patch} (90%) rename patches/server/{0109-Add-enderman-and-creeper-griefing-controls.patch => 0110-Add-enderman-and-creeper-griefing-controls.patch} (95%) rename patches/server/{0110-Chickens-can-retaliate.patch => 0111-Chickens-can-retaliate.patch} (96%) rename patches/server/{0111-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch => 0112-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch} (95%) rename patches/server/{0112-More-anvil-controls.patch => 0113-More-anvil-controls.patch} (98%) rename patches/server/{0113-Villagers-farming-can-bypass-mob-griefing-gamerule.patch => 0114-Villagers-farming-can-bypass-mob-griefing-gamerule.patch} (94%) rename patches/server/{0114-Player-invulnerabilities.patch => 0115-Player-invulnerabilities.patch} (96%) rename patches/server/{0115-Do-not-strip-colors-from-death-messages.patch => 0116-Do-not-strip-colors-from-death-messages.patch} (91%) rename patches/server/{0116-Add-PrepareGrindstoneEvent.patch => 0117-Add-PrepareGrindstoneEvent.patch} (93%) rename patches/server/{0117-Fix-reloading-paper.yml.patch => 0118-Fix-reloading-paper.yml.patch} (92%) rename patches/server/{0118-MC-125757-Fix-Always-increment-arrow-despawn-counter.patch => 0119-MC-125757-Fix-Always-increment-arrow-despawn-counter.patch} (95%) rename patches/server/{0119-MC-168772-Fix-Add-turtle-egg-block-options.patch => 0120-MC-168772-Fix-Add-turtle-egg-block-options.patch} (95%) rename patches/server/{0120-MC-4-Fix-Item-position-desync.patch => 0121-MC-4-Fix-Item-position-desync.patch} (93%) rename patches/server/{0121-MC-56653-Fix-pig-zombies-aggro.patch => 0122-MC-56653-Fix-pig-zombies-aggro.patch} (96%) rename patches/server/{0122-EMC-MonsterEggSpawn-Event.patch => 0123-EMC-MonsterEggSpawn-Event.patch} (97%) rename patches/server/{0123-PaperPR-Add-BellRingEvent.patch => 0124-PaperPR-Add-BellRingEvent.patch} (96%) delete mode 100644 patches/server/0124-PaperPR-Per-World-Spawn-limits.patch delete mode 100644 patches/server/0126-PaperPR-3550-Fix-more-exploits.patch rename patches/server/{0128-YAPFA-Disable-mojang-profiler.patch => 0126-YAPFA-Disable-mojang-profiler.patch} (94%) delete mode 100644 patches/server/0127-Tuinity-Always-able-to-execute-tasks-on-the-main-ser.patch diff --git a/Paper b/Paper index 9ffaa44ae..b6a25a535 160000 --- a/Paper +++ b/Paper @@ -1 +1 @@ -Subproject commit 9ffaa44ae1abc77f13d14804e718cb86012eac48 +Subproject commit b6a25a535679fb0911e6d570453ee15f785451cf diff --git a/current-paper b/current-paper index e6f63eae4..33b0af972 100644 --- a/current-paper +++ b/current-paper @@ -1 +1 @@ -1.15.2--bde4d33a1afce5fd1cbad2c640a028ab3ea7fd1c +1.15.2--c0ebfc0c574cd7fc7da69324fde9540e05fb6e03 diff --git a/patches/api/0001-Tuinity-API-Changes.patch b/patches/api/0001-Tuinity-API-Changes.patch new file mode 100644 index 000000000..fc0502712 --- /dev/null +++ b/patches/api/0001-Tuinity-API-Changes.patch @@ -0,0 +1,61 @@ +From 77e67dca85182e9899eba3e4065cabbe4e072e0d Mon Sep 17 00:00:00 2001 +From: Spottedleaf +Date: Fri, 14 Dec 2018 21:52:29 -0800 +Subject: [PATCH] Tuinity API Changes + +--- + pom.xml | 12 ++++++------ + src/main/java/org/bukkit/Server.java | 8 ++++++++ + 2 files changed, 14 insertions(+), 6 deletions(-) + +diff --git a/pom.xml b/pom.xml +index 20c473f52..a2387a667 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -3,18 +3,18 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + +- com.destroystokyo.paper +- paper-parent ++ com.tuinity ++ tuinity-parent + dev-SNAPSHOT ++ ../pom.xml + + +- com.destroystokyo.paper +- paper-api ++ tuinity-api + 1.15.2-R0.1-SNAPSHOT + jar + +- Paper-API +- https://github.com/PaperMC/Paper ++ Tuinity-API ++ https://github.com/Spottedleaf/Tuinity + An enhanced plugin API for Minecraft servers. + + +diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java +index cc06492f4..cf20e7541 100644 +--- a/src/main/java/org/bukkit/Server.java ++++ b/src/main/java/org/bukkit/Server.java +@@ -1396,6 +1396,14 @@ public interface Server extends PluginMessageRecipient { + } + // Paper end + ++ // Tuinity start - add config to timings report ++ @NotNull ++ public org.bukkit.configuration.file.YamlConfiguration getTuinityConfig() ++ { ++ throw new UnsupportedOperationException("Not supported yet."); ++ } ++ // Tuinity end - add config to timings report ++ + /** + * Sends the component to the player + * +-- +2.26.2 + diff --git a/patches/api/0001-Rebrand.patch b/patches/api/0002-Rebrand.patch similarity index 68% rename from patches/api/0001-Rebrand.patch rename to patches/api/0002-Rebrand.patch index 234097a90..fd04e9486 100644 --- a/patches/api/0001-Rebrand.patch +++ b/patches/api/0002-Rebrand.patch @@ -1,41 +1,41 @@ -From 10b95b9628987e16178899813700bf285e061904 Mon Sep 17 00:00:00 2001 +From e03b6ebdad870f7d6c849061daed7f715e496918 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 4 May 2019 00:57:16 -0500 Subject: [PATCH] Rebrand --- - pom.xml | 13 ++++++------- - 1 file changed, 6 insertions(+), 7 deletions(-) + pom.xml | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml -index 0629e1aa..920e904f 100644 +index a2387a667..c4b9414fb 100644 --- a/pom.xml +++ b/pom.xml -@@ -3,18 +3,17 @@ +@@ -3,18 +3,18 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 -- com.destroystokyo.paper -- paper-parent +- com.tuinity +- tuinity-parent + net.pl3x.purpur + purpur-parent dev-SNAPSHOT + ../pom.xml -- com.destroystokyo.paper -- paper-api +- tuinity-api + purpur-api 1.15.2-R0.1-SNAPSHOT jar -- Paper-API -- https://github.com/PaperMC/Paper +- Tuinity-API +- https://github.com/Spottedleaf/Tuinity + Purpur-API + https://github.com/pl3xgaming/Purpur An enhanced plugin API for Minecraft servers. -@@ -149,7 +148,7 @@ +@@ -149,7 +149,7 @@ @@ -45,5 +45,5 @@ index 0629e1aa..920e904f 100644 net.md-5 -- -2.24.0 +2.26.2 diff --git a/patches/api/0002-Purpur-config-files.patch b/patches/api/0003-Purpur-config-files.patch similarity index 80% rename from patches/api/0002-Purpur-config-files.patch rename to patches/api/0003-Purpur-config-files.patch index 01b27f77a..d7f330843 100644 --- a/patches/api/0002-Purpur-config-files.patch +++ b/patches/api/0003-Purpur-config-files.patch @@ -1,4 +1,4 @@ -From 48b6e33ffaa5a320da32cf4750a932c5018e7be4 Mon Sep 17 00:00:00 2001 +From bc7ef0c8f2a4e9310cac260ba83bd2534a77d49f Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 18 Feb 2020 20:30:03 -0600 Subject: [PATCH] Purpur config files @@ -8,12 +8,12 @@ Subject: [PATCH] Purpur config files 1 file changed, 12 insertions(+) diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index cc06492f4..47548dfd1 100644 +index cf20e7541..ab1d082a4 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1396,6 +1396,18 @@ public interface Server extends PluginMessageRecipient { +@@ -1404,6 +1404,18 @@ public interface Server extends PluginMessageRecipient { } - // Paper end + // Tuinity end - add config to timings report + // Purpur start + @NotNull @@ -31,5 +31,5 @@ index cc06492f4..47548dfd1 100644 * Sends the component to the player * -- -2.24.0 +2.26.2 diff --git a/patches/api/0003-Default-permissions.patch b/patches/api/0004-Default-permissions.patch similarity index 98% rename from patches/api/0003-Default-permissions.patch rename to patches/api/0004-Default-permissions.patch index 7e9fe5a2c..a3b55e079 100644 --- a/patches/api/0003-Default-permissions.patch +++ b/patches/api/0004-Default-permissions.patch @@ -1,4 +1,4 @@ -From fcb0b116da939c6649d1dad9ad8b0e1e01caaad0 Mon Sep 17 00:00:00 2001 +From 465547cca4e6f15f94abbc98fa5dbf0a5f7d2447 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 5 Jun 2020 23:32:38 -0500 Subject: [PATCH] Default permissions @@ -104,5 +104,5 @@ index 000000000..64fdd9230 + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0004-Ridables.patch b/patches/api/0005-Ridables.patch similarity index 98% rename from patches/api/0004-Ridables.patch rename to patches/api/0005-Ridables.patch index 8c4bad680..fe054cda4 100644 --- a/patches/api/0004-Ridables.patch +++ b/patches/api/0005-Ridables.patch @@ -1,4 +1,4 @@ -From 244a39dcd977b0b54ffd138085009d2721e5bb0b Mon Sep 17 00:00:00 2001 +From 0c20fdc1cc34d29b9135326be5db514107bb6766 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 4 May 2019 00:57:16 -0500 Subject: [PATCH] Ridables @@ -116,5 +116,5 @@ index 3f0f38031..25372c58b 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0005-Remove-pointless-annotations-and-deprecations.patch b/patches/api/0006-Remove-pointless-annotations-and-deprecations.patch similarity index 98% rename from patches/api/0005-Remove-pointless-annotations-and-deprecations.patch rename to patches/api/0006-Remove-pointless-annotations-and-deprecations.patch index dc55cfc4a..94bbf8116 100644 --- a/patches/api/0005-Remove-pointless-annotations-and-deprecations.patch +++ b/patches/api/0006-Remove-pointless-annotations-and-deprecations.patch @@ -1,4 +1,4 @@ -From 9e243d30a7d2f9800470b236133bd569226cfd76 Mon Sep 17 00:00:00 2001 +From acabe1261f9db72988a29d0d72ee138b7c0cf221 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 31 Dec 2019 23:00:07 -0600 Subject: [PATCH] Remove pointless annotations and deprecations @@ -32,7 +32,7 @@ index a9c10228e..780d603e4 100644 public static OfflinePlayer getOfflinePlayer(@NotNull String name) { return server.getOfflinePlayer(name); diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 47548dfd1..bbb2946f6 100644 +index ab1d082a4..a4cf71fb4 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -722,13 +722,10 @@ public interface Server extends PluginMessageRecipient { @@ -138,5 +138,5 @@ index a48be38b1..951b81e79 100644 // Timings history is broken in terms of nullability due to guavas Function defining that the param is NonNull "co/aikar/timings/TimingHistory$2", -- -2.24.0 +2.26.2 diff --git a/patches/api/0006-Allow-inventory-resizing.patch b/patches/api/0007-Allow-inventory-resizing.patch similarity index 93% rename from patches/api/0006-Allow-inventory-resizing.patch rename to patches/api/0007-Allow-inventory-resizing.patch index 7986c697c..e77a9bb43 100644 --- a/patches/api/0006-Allow-inventory-resizing.patch +++ b/patches/api/0007-Allow-inventory-resizing.patch @@ -1,4 +1,4 @@ -From b860c53732dcc50ee688d68df2d3ed0d1efa1ffd Mon Sep 17 00:00:00 2001 +From b188d7fb384b09a447261d6efcf8c65258799677 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 23 Jul 2019 06:50:55 -0500 Subject: [PATCH] Allow inventory resizing @@ -34,5 +34,5 @@ index 10c3b6d75..931e5ff7b 100644 return size; } -- -2.24.0 +2.26.2 diff --git a/patches/api/0007-Implement-AFK-API.patch b/patches/api/0008-Implement-AFK-API.patch similarity index 97% rename from patches/api/0007-Implement-AFK-API.patch rename to patches/api/0008-Implement-AFK-API.patch index e8c4a7bbb..577dc4095 100644 --- a/patches/api/0007-Implement-AFK-API.patch +++ b/patches/api/0008-Implement-AFK-API.patch @@ -1,4 +1,4 @@ -From d192e4cc90394aa17c1cfa500976776f0b3965cc Mon Sep 17 00:00:00 2001 +From d94af99f8daf2617cad173e2a3f6400b213e5ae1 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 10 Aug 2019 22:19:56 -0500 Subject: [PATCH] Implement AFK API @@ -116,5 +116,5 @@ index 787bb144b..edc481170 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0008-Add-EntityPortalReadyEvent.patch b/patches/api/0009-Add-EntityPortalReadyEvent.patch similarity index 95% rename from patches/api/0008-Add-EntityPortalReadyEvent.patch rename to patches/api/0009-Add-EntityPortalReadyEvent.patch index 73708e639..36ad3cc3d 100644 --- a/patches/api/0008-Add-EntityPortalReadyEvent.patch +++ b/patches/api/0009-Add-EntityPortalReadyEvent.patch @@ -1,4 +1,4 @@ -From b0d0d2d5b36808ff82897b476fc65c42856eb68c Mon Sep 17 00:00:00 2001 +From e503ea72858416dd97bd79c5aae85a2834f11195 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 11 Jan 2020 23:12:00 -0600 Subject: [PATCH] Add EntityPortalReadyEvent @@ -55,5 +55,5 @@ index 000000000..37f11c104 + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0009-Bring-back-server-name.patch b/patches/api/0010-Bring-back-server-name.patch similarity index 88% rename from patches/api/0009-Bring-back-server-name.patch rename to patches/api/0010-Bring-back-server-name.patch index 83708a150..72d038f3a 100644 --- a/patches/api/0009-Bring-back-server-name.patch +++ b/patches/api/0010-Bring-back-server-name.patch @@ -1,4 +1,4 @@ -From 52e2b60d44936185f0d0bc7782d92c3897124efb Mon Sep 17 00:00:00 2001 +From 53733732e9661eb0f898887c88afd73b93a808f6 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 26 May 2019 15:18:40 -0500 Subject: [PATCH] Bring back server name @@ -29,10 +29,10 @@ index 780d603e4..33ccf2979 100644 + // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index bbb2946f6..8d3501a67 100644 +index a4cf71fb4..adfa27be9 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1505,4 +1505,13 @@ public interface Server extends PluginMessageRecipient { +@@ -1513,4 +1513,13 @@ public interface Server extends PluginMessageRecipient { @NotNull com.destroystokyo.paper.entity.ai.MobGoals getMobGoals(); // Paper end @@ -47,5 +47,5 @@ index bbb2946f6..8d3501a67 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0010-Implement-LivingEntity-safeFallDistance.patch b/patches/api/0011-Implement-LivingEntity-safeFallDistance.patch similarity index 94% rename from patches/api/0010-Implement-LivingEntity-safeFallDistance.patch rename to patches/api/0011-Implement-LivingEntity-safeFallDistance.patch index 41acd123b..b89110ae1 100644 --- a/patches/api/0010-Implement-LivingEntity-safeFallDistance.patch +++ b/patches/api/0011-Implement-LivingEntity-safeFallDistance.patch @@ -1,4 +1,4 @@ -From ab5377b4d1787b79799fc577a6b701e2c0b43ad2 Mon Sep 17 00:00:00 2001 +From d74d33e1db952f3058834e45fc7ec553efa4d913 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 5 May 2019 12:58:19 -0500 Subject: [PATCH] Implement LivingEntity safeFallDistance @@ -33,5 +33,5 @@ index 7f73e4b92..1192fef87 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0011-Add-ExecuteCommandEvent.patch b/patches/api/0012-Add-ExecuteCommandEvent.patch similarity index 98% rename from patches/api/0011-Add-ExecuteCommandEvent.patch rename to patches/api/0012-Add-ExecuteCommandEvent.patch index d1fbadef3..a599b178b 100644 --- a/patches/api/0011-Add-ExecuteCommandEvent.patch +++ b/patches/api/0012-Add-ExecuteCommandEvent.patch @@ -1,4 +1,4 @@ -From aca26301e91a44fa401c316652ed9494de4aa205 Mon Sep 17 00:00:00 2001 +From 280f0a2c26874110fea70cc278976440c33f58e3 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 31 May 2019 00:08:28 -0500 Subject: [PATCH] Add ExecuteCommandEvent @@ -179,5 +179,5 @@ index 460fda05a..1e0eb0999 100644 } catch (CommandException ex) { server.getPluginManager().callEvent(new ServerExceptionEvent(new ServerCommandException(ex, target, sender, args))); // Paper -- -2.24.0 +2.26.2 diff --git a/patches/api/0012-Implement-ChunkTooLargeEvent.patch b/patches/api/0013-Implement-ChunkTooLargeEvent.patch similarity index 97% rename from patches/api/0012-Implement-ChunkTooLargeEvent.patch rename to patches/api/0013-Implement-ChunkTooLargeEvent.patch index 32f2f8320..47d4db63a 100644 --- a/patches/api/0012-Implement-ChunkTooLargeEvent.patch +++ b/patches/api/0013-Implement-ChunkTooLargeEvent.patch @@ -1,4 +1,4 @@ -From 9bd41fab2a13cd306731165a791de9d8169a8628 Mon Sep 17 00:00:00 2001 +From 97b09e0112fecb7c4bd3dacf078e7cedcf402cdd Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 12 Jul 2019 02:09:58 -0500 Subject: [PATCH] Implement ChunkTooLargeEvent @@ -124,5 +124,5 @@ index 000000000..f9d4a42c6 + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0013-Implement-lagging-threshold.patch b/patches/api/0014-Implement-lagging-threshold.patch similarity index 88% rename from patches/api/0013-Implement-lagging-threshold.patch rename to patches/api/0014-Implement-lagging-threshold.patch index 90fd4b3c6..07c6b2a6c 100644 --- a/patches/api/0013-Implement-lagging-threshold.patch +++ b/patches/api/0014-Implement-lagging-threshold.patch @@ -1,4 +1,4 @@ -From cfe065e413ad852a275616ea1658ef5c209f839e Mon Sep 17 00:00:00 2001 +From ca1fcc1af2f85b551bf7543deef46acea22634c4 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 23 Jul 2019 10:07:24 -0500 Subject: [PATCH] Implement lagging threshold @@ -28,10 +28,10 @@ index 33ccf2979..ee8fe48aa 100644 // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 8d3501a67..c35405e09 100644 +index adfa27be9..40bf67eb9 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1513,5 +1513,12 @@ public interface Server extends PluginMessageRecipient { +@@ -1521,5 +1521,12 @@ public interface Server extends PluginMessageRecipient { */ @NotNull String getServerName(); @@ -45,5 +45,5 @@ index 8d3501a67..c35405e09 100644 // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0014-Advancement-API-Additions.patch b/patches/api/0015-Advancement-API-Additions.patch similarity index 98% rename from patches/api/0014-Advancement-API-Additions.patch rename to patches/api/0015-Advancement-API-Additions.patch index f84af07f4..04af388e9 100644 --- a/patches/api/0014-Advancement-API-Additions.patch +++ b/patches/api/0015-Advancement-API-Additions.patch @@ -1,4 +1,4 @@ -From 996c2208e6062dd235ccad48041816023531476b Mon Sep 17 00:00:00 2001 +From a05e6fbef6eb46c46f84a91c09731a0d28ad8c2e Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 31 May 2019 21:24:21 -0500 Subject: [PATCH] Advancement API Additions @@ -129,5 +129,5 @@ index 000000000..d1757f3d4 + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0015-Implement-ItemFactory-getMonsterEgg.patch b/patches/api/0016-Implement-ItemFactory-getMonsterEgg.patch similarity index 93% rename from patches/api/0015-Implement-ItemFactory-getMonsterEgg.patch rename to patches/api/0016-Implement-ItemFactory-getMonsterEgg.patch index e8f2a9748..c1c0d99d3 100644 --- a/patches/api/0015-Implement-ItemFactory-getMonsterEgg.patch +++ b/patches/api/0016-Implement-ItemFactory-getMonsterEgg.patch @@ -1,4 +1,4 @@ -From 4fa191254a5a75875487f6d3dd1894eb4c6df5f9 Mon Sep 17 00:00:00 2001 +From 6736fb9a85fe44f9af5c97709ed00d248ae45d0d Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 5 Jul 2019 16:37:04 -0500 Subject: [PATCH] Implement ItemFactory#getMonsterEgg @@ -28,5 +28,5 @@ index 03ba22659..630c15d23 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0016-Implement-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/api/0017-Implement-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 97% rename from patches/api/0016-Implement-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/api/0017-Implement-PlayerSetSpawnerTypeWithEggEvent.patch index 73277c88e..6572f26d8 100644 --- a/patches/api/0016-Implement-PlayerSetSpawnerTypeWithEggEvent.patch +++ b/patches/api/0017-Implement-PlayerSetSpawnerTypeWithEggEvent.patch @@ -1,4 +1,4 @@ -From db64df6eac240df5ef5ffb979c84897365a7c719 Mon Sep 17 00:00:00 2001 +From ace36924c5ca7ff1d4ca22ede17a8fd5ba98c21d Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 5 Jul 2019 18:21:15 -0500 Subject: [PATCH] Implement PlayerSetSpawnerTypeWithEggEvent @@ -100,5 +100,5 @@ index 000000000..c050b75e9 + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0017-Add-MonsterEggSpawnEvent.patch b/patches/api/0018-Add-MonsterEggSpawnEvent.patch similarity index 97% rename from patches/api/0017-Add-MonsterEggSpawnEvent.patch rename to patches/api/0018-Add-MonsterEggSpawnEvent.patch index c22c0a36b..687d8c8b5 100644 --- a/patches/api/0017-Add-MonsterEggSpawnEvent.patch +++ b/patches/api/0018-Add-MonsterEggSpawnEvent.patch @@ -1,4 +1,4 @@ -From e97efd1ad4ced4cafe7a4e63313f4bfaa4a65b48 Mon Sep 17 00:00:00 2001 +From 58a00947d50d1e9be98cac3ed1d51ced2d3bfd79 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 03:20:49 -0500 Subject: [PATCH] Add MonsterEggSpawnEvent @@ -82,5 +82,5 @@ index 000000000..983d67234 + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0018-Add-ThrownEggHatchEvent.patch b/patches/api/0019-Add-ThrownEggHatchEvent.patch similarity index 98% rename from patches/api/0018-Add-ThrownEggHatchEvent.patch rename to patches/api/0019-Add-ThrownEggHatchEvent.patch index 609d64bfd..e249244ff 100644 --- a/patches/api/0018-Add-ThrownEggHatchEvent.patch +++ b/patches/api/0019-Add-ThrownEggHatchEvent.patch @@ -1,4 +1,4 @@ -From 4a52f4c95240b3e5eef7dacb98679f0a3334ccc6 Mon Sep 17 00:00:00 2001 +From 46a1c768adda232530d684c5ac49b69b6271cd04 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 03:27:55 -0500 Subject: [PATCH] Add ThrownEggHatchEvent @@ -128,5 +128,5 @@ index 000000000..815e871d0 + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0019-Add-moon-phase-API.patch b/patches/api/0020-Add-moon-phase-API.patch similarity index 96% rename from patches/api/0019-Add-moon-phase-API.patch rename to patches/api/0020-Add-moon-phase-API.patch index 56ee3b8be..5d367bb9b 100644 --- a/patches/api/0019-Add-moon-phase-API.patch +++ b/patches/api/0020-Add-moon-phase-API.patch @@ -1,4 +1,4 @@ -From c2bb18868ca7b9e0ece94f3c31f89f22f6b87741 Mon Sep 17 00:00:00 2001 +From 90c5505c1c2c90cc976c8eee480008146585fb72 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 1 Feb 2020 22:22:07 -0600 Subject: [PATCH] Add moon phase API @@ -73,5 +73,5 @@ index 9518da825..cf0d18283 100644 * Get the {@link DragonBattle} associated with this world. * -- -2.24.0 +2.26.2 diff --git a/patches/api/0020-Add-API-for-Villager-resetOffers.patch b/patches/api/0021-Add-API-for-Villager-resetOffers.patch similarity index 88% rename from patches/api/0020-Add-API-for-Villager-resetOffers.patch rename to patches/api/0021-Add-API-for-Villager-resetOffers.patch index c0c0ecd23..53a73e44d 100644 --- a/patches/api/0020-Add-API-for-Villager-resetOffers.patch +++ b/patches/api/0021-Add-API-for-Villager-resetOffers.patch @@ -1,4 +1,4 @@ -From ec6b4babc999b2955f641d2f76d4a569a39cbc2d Mon Sep 17 00:00:00 2001 +From 9ee7302f78720dc515a2bdcca1d53512de2ac975 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Mon, 7 Oct 2019 00:15:28 -0500 Subject: [PATCH] Add API for Villager#resetOffers() @@ -8,7 +8,7 @@ Subject: [PATCH] Add API for Villager#resetOffers() 1 file changed, 7 insertions(+) diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java -index e0a3285b8..32b8c4f20 100644 +index c8777a476..ed703af45 100644 --- a/src/main/java/org/bukkit/entity/Villager.java +++ b/src/main/java/org/bukkit/entity/Villager.java @@ -113,6 +113,13 @@ public interface Villager extends AbstractVillager { @@ -26,5 +26,5 @@ index e0a3285b8..32b8c4f20 100644 * Represents Villager type, usually corresponding to what biome they spawn * in. -- -2.24.0 +2.26.2 diff --git a/patches/api/0021-Expose-getItemStack-for-Trident.patch b/patches/api/0022-Expose-getItemStack-for-Trident.patch similarity index 93% rename from patches/api/0021-Expose-getItemStack-for-Trident.patch rename to patches/api/0022-Expose-getItemStack-for-Trident.patch index 431a366b4..3a89627c3 100644 --- a/patches/api/0021-Expose-getItemStack-for-Trident.patch +++ b/patches/api/0022-Expose-getItemStack-for-Trident.patch @@ -1,4 +1,4 @@ -From a9e3328e6d18bb2c42e14e3611056b738affd1ae Mon Sep 17 00:00:00 2001 +From b10537f51f8d4f030942dea51aa502c6d6aaa5ef Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 18 Oct 2019 22:19:31 -0500 Subject: [PATCH] Expose getItemStack for Trident @@ -28,5 +28,5 @@ index 3379ef9ba..27f19074e 100644 + // Purpur end +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0022-Add-more-llama-API.patch b/patches/api/0023-Add-more-llama-API.patch similarity index 98% rename from patches/api/0022-Add-more-llama-API.patch rename to patches/api/0023-Add-more-llama-API.patch index e4092851e..7d2d6ab3d 100644 --- a/patches/api/0022-Add-more-llama-API.patch +++ b/patches/api/0023-Add-more-llama-API.patch @@ -1,4 +1,4 @@ -From 154759ed781b9645ba80d194c97e49d9e158742d Mon Sep 17 00:00:00 2001 +From d75ef0f458af02fc39ab9fdd3cf6d58f1db2a18b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 18 Oct 2019 22:50:05 -0500 Subject: [PATCH] Add more llama API @@ -197,5 +197,5 @@ index d23226ccb..1ef9479c9 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0023-Add-more-evoker-API.patch b/patches/api/0024-Add-more-evoker-API.patch similarity index 93% rename from patches/api/0023-Add-more-evoker-API.patch rename to patches/api/0024-Add-more-evoker-API.patch index 4ec0f5718..9c04ff87c 100644 --- a/patches/api/0023-Add-more-evoker-API.patch +++ b/patches/api/0024-Add-more-evoker-API.patch @@ -1,4 +1,4 @@ -From a651a6dd989f77bc61059d86e10d251e7e49d6f8 Mon Sep 17 00:00:00 2001 +From f1460ea4bcb96dc7d46bc6d9792953cb0cd6edc9 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 00:28:53 -0500 Subject: [PATCH] Add more evoker API @@ -34,5 +34,5 @@ index f8d173adc..f2a03f7f8 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0024-Add-getPlacementBlockData-to-World.patch b/patches/api/0025-Add-getPlacementBlockData-to-World.patch similarity index 93% rename from patches/api/0024-Add-getPlacementBlockData-to-World.patch rename to patches/api/0025-Add-getPlacementBlockData-to-World.patch index 5fb92a0d9..3ce2db2f4 100644 --- a/patches/api/0024-Add-getPlacementBlockData-to-World.patch +++ b/patches/api/0025-Add-getPlacementBlockData-to-World.patch @@ -1,4 +1,4 @@ -From 4cb41b64730d11bfba0d7a44b8082491f935b895 Mon Sep 17 00:00:00 2001 +From dd653eeabfaf9d9f215bc3698a271fa4dead52ff Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 00:34:36 -0500 Subject: [PATCH] Add getPlacementBlockData to World @@ -29,5 +29,5 @@ index cf0d18283..3a7226cc9 100644 /** -- -2.24.0 +2.26.2 diff --git a/patches/api/0025-Add-playPickupItemAnimation-to-LivingEntity.patch b/patches/api/0026-Add-playPickupItemAnimation-to-LivingEntity.patch similarity index 94% rename from patches/api/0025-Add-playPickupItemAnimation-to-LivingEntity.patch rename to patches/api/0026-Add-playPickupItemAnimation-to-LivingEntity.patch index f38a219db..ae407d4fd 100644 --- a/patches/api/0025-Add-playPickupItemAnimation-to-LivingEntity.patch +++ b/patches/api/0026-Add-playPickupItemAnimation-to-LivingEntity.patch @@ -1,4 +1,4 @@ -From 684d1e754fa64fd31f343afff163cdd5289401a1 Mon Sep 17 00:00:00 2001 +From 4f79e986c51d57b1174dcb9a31e3160c12ce6f16 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 02:25:05 -0500 Subject: [PATCH] Add playPickupItemAnimation to LivingEntity @@ -35,5 +35,5 @@ index 1192fef87..2a713adb5 100644 // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0026-Add-getPlayer-to-SkeletonHorseTrapEvent.patch b/patches/api/0027-Add-getPlayer-to-SkeletonHorseTrapEvent.patch similarity index 96% rename from patches/api/0026-Add-getPlayer-to-SkeletonHorseTrapEvent.patch rename to patches/api/0027-Add-getPlayer-to-SkeletonHorseTrapEvent.patch index 6e56f8ca4..9cfb2321f 100644 --- a/patches/api/0026-Add-getPlayer-to-SkeletonHorseTrapEvent.patch +++ b/patches/api/0027-Add-getPlayer-to-SkeletonHorseTrapEvent.patch @@ -1,4 +1,4 @@ -From bc4f165482c762fb8a248d5ad818026249931106 Mon Sep 17 00:00:00 2001 +From de027d01bb94d9a600a8137ecbb99bf13a86ce1e Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 02:35:24 -0500 Subject: [PATCH] Add getPlayer to SkeletonHorseTrapEvent @@ -64,5 +64,5 @@ index d79dbcd68..1ed3ea8fa 100644 public boolean isCancelled() { return cancelled; -- -2.24.0 +2.26.2 diff --git a/patches/api/0027-Add-LootableInventoryFirstFillEvent.patch b/patches/api/0028-Add-LootableInventoryFirstFillEvent.patch similarity index 96% rename from patches/api/0027-Add-LootableInventoryFirstFillEvent.patch rename to patches/api/0028-Add-LootableInventoryFirstFillEvent.patch index 141a998f6..32a2dd61d 100644 --- a/patches/api/0027-Add-LootableInventoryFirstFillEvent.patch +++ b/patches/api/0028-Add-LootableInventoryFirstFillEvent.patch @@ -1,4 +1,4 @@ -From a6b7baf884b0f030fbeab42431e1b684b9738f82 Mon Sep 17 00:00:00 2001 +From 36b168a9396d76dc6db8cbbf72597dd8bc6eb461 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 02:43:10 -0500 Subject: [PATCH] Add LootableInventoryFirstFillEvent @@ -57,5 +57,5 @@ index 000000000..ef8eafb7c + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0028-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch b/patches/api/0029-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch similarity index 95% rename from patches/api/0028-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch rename to patches/api/0029-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch index b67636cbf..a794dedfa 100644 --- a/patches/api/0028-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch +++ b/patches/api/0029-Add-back-EntityCreatePortalEvent-for-EnderDragon.patch @@ -1,4 +1,4 @@ -From b23a0b1db85293433f6e4ceb2dd91d47457a5ab9 Mon Sep 17 00:00:00 2001 +From 8eb94328a7cc4e037d4cb02d747e278f456e2d64 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 03:53:46 -0500 Subject: [PATCH] Add back EntityCreatePortalEvent for EnderDragon @@ -43,5 +43,5 @@ index 397baaefd..7456240b4 100644 private static final HandlerList handlers = new HandlerList(); private final List blocks; -- -2.24.0 +2.26.2 diff --git a/patches/api/0029-Implement-EntityMoveEvent.patch b/patches/api/0030-Implement-EntityMoveEvent.patch similarity index 97% rename from patches/api/0029-Implement-EntityMoveEvent.patch rename to patches/api/0030-Implement-EntityMoveEvent.patch index 193d10e72..016f003fa 100644 --- a/patches/api/0029-Implement-EntityMoveEvent.patch +++ b/patches/api/0030-Implement-EntityMoveEvent.patch @@ -1,4 +1,4 @@ -From 66ccfdac58253025a3e7cb057c2a720cb092cdf5 Mon Sep 17 00:00:00 2001 +From 836041611bf7c8384dbc7234ad9c2f14a572561a Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 11 Feb 2020 21:56:38 -0600 Subject: [PATCH] Implement EntityMoveEvent @@ -110,5 +110,5 @@ index 000000000..c48c525b8 + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0030-Add-ItemStack-convenience-methods.patch b/patches/api/0031-Add-ItemStack-convenience-methods.patch similarity index 99% rename from patches/api/0030-Add-ItemStack-convenience-methods.patch rename to patches/api/0031-Add-ItemStack-convenience-methods.patch index 6b50ca3a6..b1c78a511 100644 --- a/patches/api/0030-Add-ItemStack-convenience-methods.patch +++ b/patches/api/0031-Add-ItemStack-convenience-methods.patch @@ -1,4 +1,4 @@ -From 58254a816dcf9a6ef514f8009aa134c601a952e9 Mon Sep 17 00:00:00 2001 +From d1a2366614a9a590a5dc8472d257294e75143af5 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 15 Mar 2020 20:52:12 -0500 Subject: [PATCH] Add ItemStack convenience methods @@ -685,5 +685,5 @@ index a8ade268c..cdc62301e 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0031-Add-BellRingEvent.patch b/patches/api/0032-Add-BellRingEvent.patch similarity index 96% rename from patches/api/0031-Add-BellRingEvent.patch rename to patches/api/0032-Add-BellRingEvent.patch index 100789295..365c57da4 100644 --- a/patches/api/0031-Add-BellRingEvent.patch +++ b/patches/api/0032-Add-BellRingEvent.patch @@ -1,4 +1,4 @@ -From 9354371c4d4a325cb90ce9a5fba2af8fec35cfc1 Mon Sep 17 00:00:00 2001 +From 015d95baa403e56a5b9f9c27fd3fa09817a25cfc Mon Sep 17 00:00:00 2001 From: Eearslya Sleiarion Date: Mon, 24 Jun 2019 21:27:39 -0700 Subject: [PATCH] Add BellRingEvent @@ -71,5 +71,5 @@ index 000000000..7b4de3f0a + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0032-Configurable-enchantment-max-level.patch b/patches/api/0033-Configurable-enchantment-max-level.patch similarity index 96% rename from patches/api/0032-Configurable-enchantment-max-level.patch rename to patches/api/0033-Configurable-enchantment-max-level.patch index e01e75da4..df6b82294 100644 --- a/patches/api/0032-Configurable-enchantment-max-level.patch +++ b/patches/api/0033-Configurable-enchantment-max-level.patch @@ -1,4 +1,4 @@ -From db5911ff958d4e38e90f0261d8a10d484fecaa8b Mon Sep 17 00:00:00 2001 +From 28922f0b553d8b6c279808253b46ea87b7f02f70 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Wed, 1 Apr 2020 19:18:29 -0500 Subject: [PATCH] Configurable enchantment max level @@ -47,5 +47,5 @@ index 9566e4306..67e31fee3 100644 public int getStartLevel() { return getEnchantment().getStartLevel(); -- -2.24.0 +2.26.2 diff --git a/patches/api/0033-More-anvil-controls.patch b/patches/api/0034-More-anvil-controls.patch similarity index 98% rename from patches/api/0033-More-anvil-controls.patch rename to patches/api/0034-More-anvil-controls.patch index ec7111e31..8438b0be7 100644 --- a/patches/api/0033-More-anvil-controls.patch +++ b/patches/api/0034-More-anvil-controls.patch @@ -1,4 +1,4 @@ -From 0958a5c5b5440ad1a1b1f7514e62a3e5686daf84 Mon Sep 17 00:00:00 2001 +From 9171a6d0bed6ece643c54618dec8c98a80b8bd9b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 19 Apr 2020 00:25:09 -0500 Subject: [PATCH] More anvil controls @@ -130,5 +130,5 @@ index b95e563b5..435026e53 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0034-PlayerItemCooldownEvent.patch b/patches/api/0035-PlayerItemCooldownEvent.patch similarity index 97% rename from patches/api/0034-PlayerItemCooldownEvent.patch rename to patches/api/0035-PlayerItemCooldownEvent.patch index 42b74f9d2..bfc7b41d0 100644 --- a/patches/api/0034-PlayerItemCooldownEvent.patch +++ b/patches/api/0035-PlayerItemCooldownEvent.patch @@ -1,4 +1,4 @@ -From 30aebb656ea25f132f67e53b71b19dd637b9d4ab Mon Sep 17 00:00:00 2001 +From ab076fda79e34461e2877a473ecbde07c5f6eebb Mon Sep 17 00:00:00 2001 From: KennyTV Date: Mon, 20 Apr 2020 13:57:13 +0200 Subject: [PATCH] PlayerItemCooldownEvent @@ -92,5 +92,5 @@ index 000000000..2002909f3 + } +} -- -2.24.0 +2.26.2 diff --git a/patches/api/0035-Player-invulnerabilities.patch b/patches/api/0036-Player-invulnerabilities.patch similarity index 94% rename from patches/api/0035-Player-invulnerabilities.patch rename to patches/api/0036-Player-invulnerabilities.patch index 1c8c61966..731fc6e3d 100644 --- a/patches/api/0035-Player-invulnerabilities.patch +++ b/patches/api/0036-Player-invulnerabilities.patch @@ -1,4 +1,4 @@ -From 29276798dffd01fafad4695981c22f9de86a3c9d Mon Sep 17 00:00:00 2001 +From 476e11ba739b06424b4e344f77e4eabd1afad412 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 2 May 2020 20:55:31 -0500 Subject: [PATCH] Player invulnerabilities @@ -39,5 +39,5 @@ index edc481170..5d77b71d1 100644 // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/api/0036-Add-PrepareGrindstoneEvent.patch b/patches/api/0037-Add-PrepareGrindstoneEvent.patch similarity index 96% rename from patches/api/0036-Add-PrepareGrindstoneEvent.patch rename to patches/api/0037-Add-PrepareGrindstoneEvent.patch index 88e546250..69037fa3d 100644 --- a/patches/api/0036-Add-PrepareGrindstoneEvent.patch +++ b/patches/api/0037-Add-PrepareGrindstoneEvent.patch @@ -1,4 +1,4 @@ -From e3ed5a4be485106d4b899db2d82f12ae5a11bca4 Mon Sep 17 00:00:00 2001 +From 3ecd78a2fc6828c6ae662179c82a2948593640c9 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 18 Jun 2020 23:29:43 -0500 Subject: [PATCH] Add PrepareGrindstoneEvent diff --git a/patches/server/0001-Tuinity-Server-Changes.patch b/patches/server/0001-Tuinity-Server-Changes.patch new file mode 100644 index 000000000..a686ae6dc --- /dev/null +++ b/patches/server/0001-Tuinity-Server-Changes.patch @@ -0,0 +1,6978 @@ +From 09137fe67786a8988d86e3965fa49639c4792903 Mon Sep 17 00:00:00 2001 +From: Spottedleaf +Date: Fri, 14 Dec 2018 21:53:58 -0800 +Subject: [PATCH] Tuinity Server Changes + +--- + pom.xml | 23 +- + .../co/aikar/timings/MinecraftTimings.java | 2 + + .../java/co/aikar/timings/TimingsExport.java | 3 +- + .../paper/PaperVersionFetcher.java | 11 +- + .../paper/server/ticklist/PaperTickList.java | 9 + + .../chunk/SingleThreadChunkRegionManager.java | 159 ++++++ + .../tuinity/tuinity/config/TuinityConfig.java | 277 ++++++++++ + .../com/tuinity/tuinity/util/CachedLists.java | 53 ++ + .../com/tuinity/tuinity/util/TickThread.java | 41 ++ + .../IteratorSafeOrderedReferenceSet.java | 265 +++++++++ + .../tuinity/tuinity/voxel/AABBVoxelShape.java | 246 +++++++++ + .../net/minecraft/server/AxisAlignedBB.java | 115 ++++ + .../java/net/minecraft/server/BiomeBase.java | 12 + + .../java/net/minecraft/server/BlockChest.java | 4 +- + .../net/minecraft/server/BlockPiston.java | 31 +- + .../minecraft/server/BlockPistonMoving.java | 7 +- + src/main/java/net/minecraft/server/Chunk.java | 37 ++ + .../java/net/minecraft/server/ChunkMap.java | 1 + + .../minecraft/server/ChunkMapDistance.java | 94 +++- + .../minecraft/server/ChunkProviderServer.java | 278 ++++++++-- + .../minecraft/server/ChunkRegionLoader.java | 12 +- + .../net/minecraft/server/ChunkSection.java | 1 + + .../net/minecraft/server/ChunkStatus.java | 4 +- + .../minecraft/server/DataPaletteBlock.java | 1 + + .../net/minecraft/server/DedicatedServer.java | 1 + + src/main/java/net/minecraft/server/EULA.java | 2 +- + .../java/net/minecraft/server/Entity.java | 204 ++++++- + .../net/minecraft/server/EntityLiving.java | 9 +- + .../minecraft/server/EntityTrackerEntry.java | 1 + + .../java/net/minecraft/server/HeightMap.java | 5 +- + .../java/net/minecraft/server/IBlockData.java | 12 + + .../minecraft/server/ICollisionAccess.java | 39 +- + .../minecraft/server/LightEngineStorage.java | 5 +- + .../java/net/minecraft/server/MCUtil.java | 14 + + .../net/minecraft/server/MinecraftServer.java | 110 +++- + .../net/minecraft/server/NetworkManager.java | 59 +- + .../server/PacketPlayOutMapChunk.java | 117 ++-- + .../minecraft/server/PathfinderNormal.java | 13 +- + .../net/minecraft/server/PlayerChunk.java | 37 +- + .../net/minecraft/server/PlayerChunkMap.java | 64 ++- + .../minecraft/server/PlayerConnection.java | 34 +- + .../server/PlayerConnectionUtils.java | 26 + + .../server/PlayerInteractManager.java | 53 +- + .../java/net/minecraft/server/ProtoChunk.java | 16 +- + .../java/net/minecraft/server/RegionFile.java | 468 +++++++++++++++- + .../minecraft/server/RegionFileBitSet.java | 26 +- + .../net/minecraft/server/RegionFileCache.java | 45 +- + .../server/RegionFileCompression.java | 7 +- + .../java/net/minecraft/server/Ticket.java | 11 +- + .../java/net/minecraft/server/TicketType.java | 3 +- + .../java/net/minecraft/server/TileEntity.java | 49 +- + .../minecraft/server/TileEntityBeacon.java | 26 +- + .../minecraft/server/TileEntityBeehive.java | 7 + + .../server/TileEntityBrewingStand.java | 26 +- + .../net/minecraft/server/TileEntityChest.java | 16 + + .../minecraft/server/TileEntityConduit.java | 21 +- + .../minecraft/server/TileEntityFurnace.java | 26 +- + .../minecraft/server/TileEntityJukeBox.java | 7 + + .../minecraft/server/TileEntityLectern.java | 51 +- + .../minecraft/server/TileEntityPiston.java | 66 ++- + src/main/java/net/minecraft/server/Vec3D.java | 5 +- + .../net/minecraft/server/VillagePlace.java | 2 +- + .../java/net/minecraft/server/VoxelShape.java | 11 +- + .../net/minecraft/server/VoxelShapeArray.java | 72 +++ + .../net/minecraft/server/VoxelShapes.java | 79 ++- + src/main/java/net/minecraft/server/World.java | 41 +- + .../net/minecraft/server/WorldBorder.java | 37 +- + .../net/minecraft/server/WorldServer.java | 517 +++++++++++++++++- + .../net/minecraft/server/WorldUpgrader.java | 2 +- + .../craftbukkit/CraftChunkSnapshot.java | 2 +- + .../org/bukkit/craftbukkit/CraftServer.java | 17 +- + .../org/bukkit/craftbukkit/CraftWorld.java | 19 +- + .../java/org/bukkit/craftbukkit/Main.java | 9 +- + .../bukkit/craftbukkit/block/CraftBlock.java | 21 +- + .../craftbukkit/block/CraftBlockState.java | 2 +- + .../block/data/CraftBlockData.java | 2 +- + .../craftbukkit/entity/CraftEntity.java | 31 ++ + .../craftbukkit/generator/CraftChunkData.java | 2 +- + .../scoreboard/CraftScoreboardManager.java | 9 + + .../bukkit/craftbukkit/util/UnsafeList.java | 26 + + .../bukkit/craftbukkit/util/Versioning.java | 2 +- + src/main/java/org/spigotmc/AsyncCatcher.java | 2 +- + .../java/org/spigotmc/WatchdogThread.java | 79 +++ + 83 files changed, 3967 insertions(+), 384 deletions(-) + create mode 100644 src/main/java/com/tuinity/tuinity/chunk/SingleThreadChunkRegionManager.java + create mode 100644 src/main/java/com/tuinity/tuinity/config/TuinityConfig.java + create mode 100644 src/main/java/com/tuinity/tuinity/util/CachedLists.java + create mode 100644 src/main/java/com/tuinity/tuinity/util/TickThread.java + create mode 100644 src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java + create mode 100644 src/main/java/com/tuinity/tuinity/voxel/AABBVoxelShape.java + +diff --git a/pom.xml b/pom.xml +index e4c63bb76..66517f30f 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -1,12 +1,11 @@ +- + 4.0.0 +- paper ++ tuinity + jar + 1.15.2-R0.1-SNAPSHOT +- Paper +- https://papermc.io +- ++ Tuinity-Server ++ https://github.com/Spottedleaf/Tuinity + + + UTF-8 +@@ -18,16 +17,16 @@ + + + +- com.destroystokyo.paper +- paper-parent ++ com.tuinity ++ tuinity-parent + dev-SNAPSHOT + ../pom.xml + + + + +- com.destroystokyo.paper +- paper-api ++ com.tuinity ++ tuinity-api + ${project.version} + compile + +@@ -164,15 +163,15 @@ + + + +- paper-${minecraft.version} +- clean install ++ tuinity-${minecraft.version} ++ install + + + com.lukegb.mojo + gitdescribe-maven-plugin + 1.3 + +- git-Paper- ++ git-Tuinity- + .. + + +diff --git a/src/main/java/co/aikar/timings/MinecraftTimings.java b/src/main/java/co/aikar/timings/MinecraftTimings.java +index dd0722397..2966c5731 100644 +--- a/src/main/java/co/aikar/timings/MinecraftTimings.java ++++ b/src/main/java/co/aikar/timings/MinecraftTimings.java +@@ -43,6 +43,8 @@ public final class MinecraftTimings { + public static final Timing antiXrayUpdateTimer = Timings.ofSafe("anti-xray - update"); + public static final Timing antiXrayObfuscateTimer = Timings.ofSafe("anti-xray - obfuscate"); + ++ public static final Timing scoreboardScoreSearch = Timings.ofSafe("Scoreboard score search"); // Tuinity - add timings for scoreboard search ++ + private static final Map, String> taskNameCache = new MapMaker().weakKeys().makeMap(); + + private MinecraftTimings() {} +diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java +index a3b41ce5f..b09981e9b 100644 +--- a/src/main/java/co/aikar/timings/TimingsExport.java ++++ b/src/main/java/co/aikar/timings/TimingsExport.java +@@ -229,7 +229,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)), // Tuinity - add config to timings report ++ pair("tuinity", mapAsJSON(Bukkit.spigot().getTuinityConfig(), null)) // Tuinity - add config to timings report + )); + + new TimingsExport(listeners, parent, history).start(); +diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +index 49a38c660..255bbd6e4 100644 +--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java ++++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +@@ -24,8 +24,8 @@ public class PaperVersionFetcher implements VersionFetcher { + @Nonnull + @Override + public String getVersionMessage(@Nonnull String serverVersion) { +- String[] parts = serverVersion.substring("git-Paper-".length()).split("[-\\s]"); +- String updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[0]); ++ String[] parts = serverVersion.substring("git-Tuinity-".length()).split("[-\\s]"); // Tuinity ++ String updateMessage = getUpdateStatusMessage("Spottedleaf/Tuinity", GITHUB_BRANCH_NAME, parts[0]); // Tuinity + String history = getHistory(); + + return history != null ? history + "\n" + updateMessage : updateMessage; +@@ -49,13 +49,10 @@ public class PaperVersionFetcher implements VersionFetcher { + + private static String getUpdateStatusMessage(@Nonnull String repo, @Nonnull String branch, @Nonnull String versionInfo) { + int distance; +- try { +- int jenkinsBuild = Integer.parseInt(versionInfo); +- distance = fetchDistanceFromSiteApi(jenkinsBuild, getMinecraftVersion()); +- } catch (NumberFormatException ignored) { ++ // Tuinity - we don't have jenkins setup + versionInfo = versionInfo.replace("\"", ""); + distance = fetchDistanceFromGitHub(repo, branch, versionInfo); +- } ++ // Tuinity - we don't have jenkins setup + + switch (distance) { + case -1: +diff --git a/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java b/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java +index ce653f6b4..a08bfb4b3 100644 +--- a/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java ++++ b/src/main/java/com/destroystokyo/paper/server/ticklist/PaperTickList.java +@@ -189,6 +189,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + } + + public void onChunkSetTicking(final int chunkX, final int chunkZ) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list chunk ticking update"); // Tuinity - soft async catcher + final ArrayList> pending = this.pendingChunkTickLoad.remove(MCUtil.getCoordinateKey(chunkX, chunkZ)); + if (pending == null) { + return; +@@ -269,6 +270,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + + @Override + public void tick() { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list tick"); // Tuinity - soft async catcher + final ChunkProviderServer chunkProvider = this.world.getChunkProvider(); + + this.world.getMethodProfiler().enter("cleaning"); +@@ -297,6 +299,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + if (toTick.tickState == STATE_TICKING) { + toTick.tickState = STATE_TICKED; + } // else it's STATE_CANCELLED_TICK ++ MinecraftServer.getServer().executeMidTickTasks(); // Tuinity - exec chunk tasks during world tick + } else { + // re-schedule eventually + toTick.tickState = STATE_SCHEDULED; +@@ -414,6 +417,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + } + + public void schedule(final BlockPosition pos, final T data, final long targetTick, final TickListPriority priority) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list schedule"); // Tuinity - soft async catcher + final NextTickListEntry entry = new NextTickListEntry<>(pos, data, targetTick, priority); + if (this.excludeFromScheduling.test(entry.getData())) { + return; +@@ -473,6 +477,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + + @Override + public List> getEntriesInBoundingBox(final StructureBoundingBox structureboundingbox, final boolean removeReturned, final boolean excludeTicked) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list get in bounding box"); // Tuinity - soft async catcher + if (structureboundingbox.getMinX() == structureboundingbox.getMaxX() || structureboundingbox.getMinZ() == structureboundingbox.getMaxZ()) { + return Collections.emptyList(); // vanilla behaviour, check isBlockInSortof above + } +@@ -529,6 +534,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + + @Override + public void copy(StructureBoundingBox structureboundingbox, BlockPosition blockposition) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list copy"); // Tuinity - soft async catcher + // start copy from TickListServer // TODO check on update + List> list = this.getEntriesInBoundingBox(structureboundingbox, false, false); + Iterator> iterator = list.iterator(); +@@ -548,6 +554,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + + @Override + public List> getEntriesInChunk(ChunkCoordIntPair chunkPos, boolean removeReturned, boolean excludeTicked) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list get"); // Tuinity - soft async catcher + // Vanilla DOES get the entries 2 blocks out of the chunk too, but that doesn't matter since we ignore chunks + // not at ticking status, and ticking status requires neighbours loaded + // so with this method we will reduce scheduler churning +@@ -579,6 +586,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + + @Override + public NBTTagList serialize(ChunkCoordIntPair chunkcoordintpair) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list serialize"); // Tuinity - soft async catcher + // start copy from TickListServer // TODO check on update + List> list = this.getEntriesInChunk(chunkcoordintpair, false, true); + +@@ -588,6 +596,7 @@ public final class PaperTickList extends TickListServer { // extend to avo + + @Override + public int getTotalScheduledEntries() { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("async tick list get size"); // Tuinity - soft async catcher + // good thing this is only used in debug reports // TODO check on update + int ret = 0; + +diff --git a/src/main/java/com/tuinity/tuinity/chunk/SingleThreadChunkRegionManager.java b/src/main/java/com/tuinity/tuinity/chunk/SingleThreadChunkRegionManager.java +new file mode 100644 +index 000000000..97c4100c5 +--- /dev/null ++++ b/src/main/java/com/tuinity/tuinity/chunk/SingleThreadChunkRegionManager.java +@@ -0,0 +1,159 @@ ++package com.tuinity.tuinity.chunk; ++ ++import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; ++import it.unimi.dsi.fastutil.longs.LongIterator; ++import it.unimi.dsi.fastutil.longs.LongOpenHashSet; ++import net.minecraft.server.MCUtil; ++import net.minecraft.server.WorldServer; ++import java.util.List; ++ ++public final class SingleThreadChunkRegionManager { ++ ++ static final int REGION_SECTION_MERGE_RADIUS = 1; ++ ++ static final int REGION_SECTION_CHUNK_SIZE = 8; ++ static final int REGION_SECTION_CHUNK_SIZE_SHIFT = 3; ++ ++ final Long2ObjectOpenHashMap regionsBySection = new Long2ObjectOpenHashMap<>(4096, 0.25f); ++ final LongOpenHashSet chunks = new LongOpenHashSet(8192, 0.25f); ++ ++ public final WorldServer world; ++ ++ public SingleThreadChunkRegionManager(final WorldServer world) { ++ this.world = world; ++ } ++ ++ public void addChunk(final int chunkX, final int chunkZ) { ++ this.addChunk(chunkX, chunkZ, true); ++ } ++ ++ void addChunk(final int chunkX, final int chunkZ, boolean addToChunks) { ++ final long coordinate = MCUtil.getCoordinateKey(chunkX, chunkZ); ++ final long sectionPos = MCUtil.getCoordinateKey(chunkX >> REGION_SECTION_CHUNK_SIZE_SHIFT, chunkZ >> REGION_SECTION_CHUNK_SIZE_SHIFT); ++ if (addToChunks) { ++ this.chunks.add(coordinate); ++ } ++ ++ // merge nearby regions first ++ ++ // gather regions to merge ++ ++ SingleThreadChunkRegionManager.ChunkRegion mergeIntoCandidate = null; ++ int mergeCandidateChunkCount = -1; ++ ++ List toMerge = null; ++ ++ final int regionSectionX = chunkX >> REGION_SECTION_CHUNK_SIZE_SHIFT; ++ final int regionSectionZ = chunkZ >> REGION_SECTION_CHUNK_SIZE_SHIFT; ++ ++ final int checkXStart = regionSectionX - REGION_SECTION_MERGE_RADIUS; ++ final int checkZStart = regionSectionZ - REGION_SECTION_MERGE_RADIUS; ++ final int checkXEnd = regionSectionX + REGION_SECTION_MERGE_RADIUS; ++ final int checkZEnd = regionSectionZ + REGION_SECTION_MERGE_RADIUS; ++ ++ // select the ideal region to merge into ++ for (int checkX = checkXStart; checkX <= checkXEnd; ++checkX) { ++ for (int checkZ = checkZStart; checkZ <= checkZEnd; ++checkZ) { ++ final SingleThreadChunkRegionManager.ChunkRegion region = this.regionsBySection.get(MCUtil.getCoordinateKey(checkX, checkZ)); ++ if (region == null) { ++ continue; ++ } ++ ++ final int coordinateSize = region.coordinates.size(); ++ if (coordinateSize > mergeCandidateChunkCount) { ++ mergeIntoCandidate = region; ++ mergeCandidateChunkCount = coordinateSize; ++ } ++ if (toMerge == null) { ++ toMerge = new java.util.ArrayList<>(4); ++ toMerge.add(region); ++ } ++ } ++ } ++ ++ // merge ++ if (toMerge != null) { ++ for (int i = 0, len = toMerge.size(); i < len; ++i) { ++ final SingleThreadChunkRegionManager.ChunkRegion needsMerge = toMerge.get(i); ++ if (needsMerge == mergeIntoCandidate) { ++ continue; ++ } ++ // this function forwards the sections ++ needsMerge.mergeInto(this, mergeIntoCandidate); ++ } ++ } else { ++ mergeIntoCandidate = new ChunkRegion(); ++ } ++ ++ mergeIntoCandidate.addChunk(coordinate); ++ if (mergeIntoCandidate.addSection(sectionPos)) { ++ this.regionsBySection.put(sectionPos, mergeIntoCandidate); ++ } ++ } ++ ++ public void removeChunk(final int chunkX, final int chunkZ) { ++ final long coordinate = MCUtil.getCoordinateKey(chunkX, chunkZ); ++ final long sectionPos = MCUtil.getCoordinateKey(chunkX >> REGION_SECTION_CHUNK_SIZE_SHIFT, chunkZ >> REGION_SECTION_CHUNK_SIZE_SHIFT); ++ this.chunks.remove(coordinate); ++ ++ final SingleThreadChunkRegionManager.ChunkRegion region = this.regionsBySection.get(sectionPos); ++ if (region == null) { ++ throw new IllegalStateException("Cannot remove chunk form no region"); ++ } ++ ++ if (!region.removeChunk(coordinate)) { ++ throw new IllegalStateException("Cannot remove chunk from region, has no chunk"); ++ } ++ } ++ ++ public void recalculateRegions() { ++ this.regionsBySection.clear(); ++ for (final LongIterator iterator = this.chunks.iterator(); iterator.hasNext();) { ++ final long coordinate = iterator.nextLong(); ++ this.addChunk(MCUtil.getCoordinateX(coordinate), MCUtil.getCoordinateZ(coordinate), false); ++ } ++ } ++ ++ static final class ChunkRegion { ++ private final LongOpenHashSet coordinates = new LongOpenHashSet(); ++ private final LongOpenHashSet sections = new LongOpenHashSet(); ++ private boolean dead; ++ ++ public void mergeInto(final SingleThreadChunkRegionManager regionManager, final ChunkRegion region) { ++ if (region.dead) { ++ throw new IllegalStateException("Attempting to merge into a dead region"); ++ } else if (this.dead) { ++ throw new IllegalStateException("Attempting to merge from a dead region"); ++ } ++ ++ for (final LongIterator iterator = this.coordinates.iterator(); iterator.hasNext();) { ++ final long coordinate = iterator.nextLong(); ++ if (!region.addChunk(coordinate)) { ++ throw new IllegalStateException("Regions cannot share chunks"); ++ } ++ } ++ ++ for (final LongIterator iterator = this.sections.iterator(); iterator.hasNext();) { ++ regionManager.regionsBySection.replace(iterator.nextLong(), region); ++ } ++ ++ this.dead = true; ++ } ++ ++ boolean addSection(final long sectionPos) { ++ return this.sections.add(sectionPos); ++ } ++ ++ boolean removeSection(final long sectionPos) { ++ return this.sections.remove(sectionPos); ++ } ++ ++ boolean addChunk(final long coordinate) { ++ return this.coordinates.add(coordinate); ++ } ++ ++ boolean removeChunk(final long coordinate) { ++ return this.coordinates.remove(coordinate); ++ } ++ } ++} +\ No newline at end of file +diff --git a/src/main/java/com/tuinity/tuinity/config/TuinityConfig.java b/src/main/java/com/tuinity/tuinity/config/TuinityConfig.java +new file mode 100644 +index 000000000..1ae1fd750 +--- /dev/null ++++ b/src/main/java/com/tuinity/tuinity/config/TuinityConfig.java +@@ -0,0 +1,277 @@ ++package com.tuinity.tuinity.config; ++ ++import com.destroystokyo.paper.util.SneakyThrow; ++import net.minecraft.server.TicketType; ++import org.bukkit.Bukkit; ++import org.bukkit.configuration.ConfigurationSection; ++import org.bukkit.configuration.file.YamlConfiguration; ++import java.io.File; ++import java.lang.reflect.Method; ++import java.lang.reflect.Modifier; ++import java.util.List; ++import java.util.logging.Level; ++ ++public final class TuinityConfig { ++ ++ public static final String CONFIG_HEADER = "Configuration file for Tuinity."; ++ public static final int CURRENT_CONFIG_VERSION = 2; ++ ++ private static final Object[] EMPTY = new Object[0]; ++ ++ private static File configFile; ++ public static YamlConfiguration config; ++ private static int configVersion; ++ ++ public static void init(final File file) { ++ // TODO remove this in the future... ++ final File tuinityConfig = new File(file.getParent(), "tuinity.yml"); ++ if (!tuinityConfig.exists()) { ++ final File oldConfig = new File(file.getParent(), "concrete.yml"); ++ oldConfig.renameTo(tuinityConfig); ++ } ++ TuinityConfig.configFile = file; ++ final YamlConfiguration config = new YamlConfiguration(); ++ config.options().header(CONFIG_HEADER); ++ config.options().copyDefaults(true); ++ ++ if (!file.exists()) { ++ try { ++ file.createNewFile(); ++ } catch (final Exception ex) { ++ Bukkit.getLogger().log(Level.SEVERE, "Failure to create tuinity config", ex); ++ } ++ } else { ++ try { ++ config.load(file); ++ } catch (final Exception ex) { ++ Bukkit.getLogger().log(Level.SEVERE, "Failure to load tuinity config", ex); ++ SneakyThrow.sneaky(ex); /* Rethrow, this is critical */ ++ throw new RuntimeException(ex); // unreachable ++ } ++ } ++ ++ TuinityConfig.load(config); ++ } ++ ++ public static void load(final YamlConfiguration config) { ++ TuinityConfig.config = config; ++ TuinityConfig.configVersion = TuinityConfig.getInt("config-version-please-do-not-modify-me", CURRENT_CONFIG_VERSION); ++ TuinityConfig.set("config-version-please-do-not-modify-me", CURRENT_CONFIG_VERSION); ++ ++ for (final Method method : TuinityConfig.class.getDeclaredMethods()) { ++ if (method.getReturnType() != void.class || method.getParameterCount() != 0 || ++ !Modifier.isPrivate(method.getModifiers()) || !Modifier.isStatic(method.getModifiers())) { ++ continue; ++ } ++ ++ try { ++ method.setAccessible(true); ++ method.invoke(null, EMPTY); ++ } catch (final Exception ex) { ++ SneakyThrow.sneaky(ex); /* Rethrow, this is critical */ ++ throw new RuntimeException(ex); // unreachable ++ } ++ } ++ ++ /* We re-save to add new options */ ++ try { ++ config.save(TuinityConfig.configFile); ++ } catch (final Exception ex) { ++ Bukkit.getLogger().log(Level.SEVERE, "Unable to save tuinity config", ex); ++ } ++ } ++ ++ static void set(final String path, final Object value) { ++ TuinityConfig.config.set(path, value); ++ } ++ ++ static boolean getBoolean(final String path, final boolean dfl) { ++ TuinityConfig.config.addDefault(path, Boolean.valueOf(dfl)); ++ return TuinityConfig.config.getBoolean(path, dfl); ++ } ++ ++ static int getInt(final String path, final int dfl) { ++ TuinityConfig.config.addDefault(path, Integer.valueOf(dfl)); ++ return TuinityConfig.config.getInt(path, dfl); ++ } ++ ++ static long getLong(final String path, final long dfl) { ++ TuinityConfig.config.addDefault(path, Long.valueOf(dfl)); ++ return TuinityConfig.config.getLong(path, dfl); ++ } ++ ++ static double getDouble(final String path, final double dfl) { ++ TuinityConfig.config.addDefault(path, Double.valueOf(dfl)); ++ return TuinityConfig.config.getDouble(path, dfl); ++ } ++ ++ public static boolean tickWorldsInParallel; ++ ++ /** ++ * if tickWorldsInParallel == true, then this value is used as a default only for worlds ++ */ ++ public static int tickThreads; ++ ++ /* ++ private static void worldticking() { ++ tickWorldsInParallel = TuinityConfig.getBoolean("tick-worlds-in-parallel", false); ++ tickThreads = TuinityConfig.getInt("server-tick-threads", 1); // will be 4 in the future ++ }*/ ++ ++ public static int delayChunkUnloadsBy; ++ ++ private static void delayChunkUnloadsBy() { ++ delayChunkUnloadsBy = TuinityConfig.getInt("delay-chunkunloads-by", 1) * 20; ++ if (delayChunkUnloadsBy >= 0) { ++ TicketType.DELAYED_UNLOAD.loadPeriod = delayChunkUnloadsBy; ++ } ++ } ++ ++ public static boolean lagCompensateBlockBreaking; ++ ++ private static void lagCompensateBlockBreaking() { ++ lagCompensateBlockBreaking = TuinityConfig.getBoolean("lag-compensate-block-breaking", true); ++ } ++ ++ public static boolean pistonsCanPushTileEntities; ++ ++ private static void pistonsCanPushTileEntities() { ++ pistonsCanPushTileEntities = TuinityConfig.getBoolean("pistons-can-push-tile-entities", false); ++ } ++ ++ public static final class WorldConfig { ++ ++ public final String worldName; ++ public ConfigurationSection config; ++ ConfigurationSection worldDefaults; ++ ++ public WorldConfig(final String worldName) { ++ this.worldName = worldName; ++ this.init(); ++ } ++ ++ public void init() { ++ this.worldDefaults = TuinityConfig.config.getConfigurationSection("world-settings.default"); ++ if (this.worldDefaults == null) { ++ this.worldDefaults = TuinityConfig.config.createSection("world-settings.default"); ++ } ++ ++ String worldSectionPath = TuinityConfig.configVersion < 1 ? this.worldName : "world-settings.".concat(this.worldName); ++ ConfigurationSection section = TuinityConfig.config.getConfigurationSection(worldSectionPath); ++ if (section == null) { ++ section = TuinityConfig.config.createSection(worldSectionPath); ++ } ++ TuinityConfig.config.set(worldSectionPath, section); ++ ++ this.load(section); ++ } ++ ++ public void load(final ConfigurationSection config) { ++ this.config = config; ++ ++ for (final Method method : TuinityConfig.WorldConfig.class.getDeclaredMethods()) { ++ if (method.getReturnType() != void.class || method.getParameterCount() != 0 || ++ !Modifier.isPrivate(method.getModifiers()) || Modifier.isStatic(method.getModifiers())) { ++ continue; ++ } ++ ++ try { ++ method.setAccessible(true); ++ method.invoke(this, EMPTY); ++ } catch (final Exception ex) { ++ SneakyThrow.sneaky(ex); /* Rethrow, this is critical */ ++ throw new RuntimeException(ex); // unreachable ++ } ++ } ++ ++ if (TuinityConfig.configVersion < 1) { ++ ConfigurationSection oldSection = TuinityConfig.config.getConfigurationSection(this.worldName); ++ TuinityConfig.config.set("world-settings.".concat(this.worldName), oldSection); ++ TuinityConfig.config.set(this.worldName, null); ++ } ++ ++ /* We re-save to add new options */ ++ try { ++ TuinityConfig.config.save(TuinityConfig.configFile); ++ } catch (final Exception ex) { ++ Bukkit.getLogger().log(Level.SEVERE, "Unable to save tuinity config", ex); ++ } ++ } ++ ++ /** ++ * update world defaults for the specified path, but also sets this world's config value for the path ++ * if it exists ++ */ ++ void set(final String path, final Object val) { ++ this.worldDefaults.set(path, val); ++ if (this.config.get(path) != null) { ++ this.config.set(path, val); ++ } ++ } ++ ++ boolean getBoolean(final String path, final boolean dfl) { ++ this.worldDefaults.addDefault(path, Boolean.valueOf(dfl)); ++ if (TuinityConfig.configVersion < 1) { ++ if (this.config.getBoolean(path) == dfl) { ++ this.config.set(path, null); ++ } ++ } ++ return this.config.getBoolean(path, this.worldDefaults.getBoolean(path)); ++ } ++ ++ int getInt(final String path, final int dfl) { ++ this.worldDefaults.addDefault(path, Integer.valueOf(dfl)); ++ if (TuinityConfig.configVersion < 1) { ++ if (this.config.getInt(path) == dfl) { ++ this.config.set(path, null); ++ } ++ } ++ return this.config.getInt(path, this.worldDefaults.getInt(path)); ++ } ++ ++ long getLong(final String path, final long dfl) { ++ this.worldDefaults.addDefault(path, Long.valueOf(dfl)); ++ if (TuinityConfig.configVersion < 1) { ++ if (this.config.getLong(path) == dfl) { ++ this.config.set(path, null); ++ } ++ } ++ return this.config.getLong(path, this.worldDefaults.getLong(path)); ++ } ++ ++ double getDouble(final String path, final double dfl) { ++ this.worldDefaults.addDefault(path, Double.valueOf(dfl)); ++ if (TuinityConfig.configVersion < 1) { ++ if (this.config.getDouble(path) == dfl) { ++ this.config.set(path, null); ++ } ++ } ++ return this.config.getDouble(path, this.worldDefaults.getDouble(path)); ++ } ++ ++ /** ignored if {@link TuinityConfig#tickWorldsInParallel} == false */ ++ public int threads; ++ ++ /* ++ private void worldthreading() { ++ final int threads = this.getInt("tick-threads", -1); ++ this.threads = threads == -1 ? TuinityConfig.tickThreads : threads; ++ }*/ ++ ++ public int spawnLimitMonsters; ++ public int spawnLimitAnimals; ++ public int spawnLimitWaterAnimals; ++ public int spawnLimitAmbient; ++ ++ private void perWorldSpawnLimit() { ++ final String path = "spawn-limits"; ++ ++ this.spawnLimitMonsters = this.getInt(path + ".monsters", -1); ++ this.spawnLimitAnimals = this.getInt(path + ".animals", -1); ++ this.spawnLimitWaterAnimals = this.getInt(path + ".water-animals", -1); ++ this.spawnLimitAmbient = this.getInt(path + ".ambient", -1); ++ } ++ ++ } ++ ++} +\ No newline at end of file +diff --git a/src/main/java/com/tuinity/tuinity/util/CachedLists.java b/src/main/java/com/tuinity/tuinity/util/CachedLists.java +new file mode 100644 +index 000000000..a54f516ba +--- /dev/null ++++ b/src/main/java/com/tuinity/tuinity/util/CachedLists.java +@@ -0,0 +1,53 @@ ++package com.tuinity.tuinity.util; ++ ++import net.minecraft.server.AxisAlignedBB; ++import net.minecraft.server.Entity; ++import org.bukkit.Bukkit; ++import org.bukkit.craftbukkit.util.UnsafeList; ++import java.util.List; ++ ++public class CachedLists { ++ ++ static final UnsafeList TEMP_COLLISION_LIST = new UnsafeList<>(1024); ++ static boolean tempCollisionListInUse; ++ ++ public static List getTempCollisionList() { ++ if (!Bukkit.isPrimaryThread() || tempCollisionListInUse) { ++ return new UnsafeList<>(16); ++ } ++ tempCollisionListInUse = true; ++ return TEMP_COLLISION_LIST; ++ } ++ ++ public static void returnTempCollisionList(List list) { ++ if (list != TEMP_COLLISION_LIST) { ++ return; ++ } ++ ((UnsafeList)list).setSize(0); ++ tempCollisionListInUse = false; ++ } ++ ++ static final UnsafeList TEMP_GET_ENTITIES_LIST = new UnsafeList<>(1024); ++ static boolean tempGetEntitiesListInUse; ++ ++ public static List getTempGetEntitiesList() { ++ if (!Bukkit.isPrimaryThread() || tempGetEntitiesListInUse) { ++ return new UnsafeList<>(16); ++ } ++ tempGetEntitiesListInUse = true; ++ return TEMP_GET_ENTITIES_LIST; ++ } ++ ++ public static void returnTempGetEntitiesList(List list) { ++ if (list != TEMP_GET_ENTITIES_LIST) { ++ return; ++ } ++ ((UnsafeList)list).setSize(0); ++ tempGetEntitiesListInUse = false; ++ } ++ ++ public static void reset() { ++ TEMP_COLLISION_LIST.completeReset(); ++ TEMP_GET_ENTITIES_LIST.completeReset(); ++ } ++} +diff --git a/src/main/java/com/tuinity/tuinity/util/TickThread.java b/src/main/java/com/tuinity/tuinity/util/TickThread.java +new file mode 100644 +index 000000000..08ed24325 +--- /dev/null ++++ b/src/main/java/com/tuinity/tuinity/util/TickThread.java +@@ -0,0 +1,41 @@ ++package com.tuinity.tuinity.util; ++ ++import net.minecraft.server.MinecraftServer; ++import org.bukkit.Bukkit; ++ ++public final class TickThread extends Thread { ++ ++ public static final boolean STRICT_THREAD_CHECKS = Boolean.getBoolean("tuinity.strict-thread-checks"); ++ ++ static { ++ if (STRICT_THREAD_CHECKS) { ++ MinecraftServer.LOGGER.warn("Strict thread checks enabled - performance may suffer"); ++ } ++ } ++ ++ public static void softEnsureTickThread(final String reason) { ++ if (!STRICT_THREAD_CHECKS) { ++ return; ++ } ++ ensureTickThread(reason); ++ } ++ ++ ++ public static void ensureTickThread(final String reason) { ++ if (!Bukkit.isPrimaryThread()) { ++ MinecraftServer.LOGGER.fatal("Thread " + Thread.currentThread().getName() + " failed main thread check: " + reason, new Throwable()); ++ throw new IllegalStateException(reason); ++ } ++ } ++ ++ public final int id; /* We don't override getId as the spec requires that it be unique (with respect to all other threads) */ ++ ++ public TickThread(final Runnable run, final String name, final int id) { ++ super(run, name); ++ this.id = id; ++ } ++ ++ public static TickThread getCurrentTickThread() { ++ return (TickThread)Thread.currentThread(); ++ } ++} +\ No newline at end of file +diff --git a/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java +new file mode 100644 +index 000000000..e12d09645 +--- /dev/null ++++ b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java +@@ -0,0 +1,265 @@ ++package com.tuinity.tuinity.util.maplist; ++ ++import it.unimi.dsi.fastutil.objects.Reference2IntLinkedOpenHashMap; ++import it.unimi.dsi.fastutil.objects.Reference2IntMap; ++import it.unimi.dsi.fastutil.objects.ReferenceLinkedOpenHashSet; ++import java.util.Arrays; ++import java.util.NoSuchElementException; ++ ++public final class IteratorSafeOrderedReferenceSet { ++ ++ protected final Reference2IntLinkedOpenHashMap indexMap; ++ protected int firstInvalidIndex = -1; ++ ++ protected final ReferenceLinkedOpenHashSet pendingAdditions; ++ ++ /* list impl */ ++ protected E[] listElements; ++ protected int listSize; ++ ++ protected final double maxFragFactor; ++ ++ protected int iteratorCount; ++ ++ public IteratorSafeOrderedReferenceSet() { ++ this(16, 0.75f, 16, 0.2); ++ } ++ ++ public IteratorSafeOrderedReferenceSet(final int setCapacity, final float setLoadFactor, final int arrayCapacity, final double maxFragFactor) { ++ this.indexMap = new Reference2IntLinkedOpenHashMap<>(setCapacity, setLoadFactor); ++ this.indexMap.defaultReturnValue(-1); ++ this.pendingAdditions = new ReferenceLinkedOpenHashSet<>(); ++ this.maxFragFactor = maxFragFactor; ++ this.listElements = (E[])new Object[arrayCapacity]; ++ } ++ ++ protected final double getFragFactor() { ++ return 1.0 - ((double)this.indexMap.size() / (double)this.listSize); ++ } ++ ++ public int createRawIterator() { ++ ++this.iteratorCount; ++ if (this.indexMap.isEmpty()) { ++ return -1; ++ } else { ++ return this.firstInvalidIndex == 0 ? this.indexMap.getInt(this.indexMap.firstKey()) : 0; ++ } ++ } ++ ++ public int advanceRawIterator(final int index) { ++ final E[] elements = this.listElements; ++ int ret = index + 1; ++ for (int len = this.listSize; ret < len; ++ret) { ++ if (elements[ret] != null) { ++ return ret; ++ } ++ } ++ ++ return -1; ++ } ++ ++ public void finishRawIterator() { ++ if (--this.iteratorCount == 0) { ++ if (this.getFragFactor() >= this.maxFragFactor) { ++ this.defrag(); ++ } ++ if (!this.pendingAdditions.isEmpty()) { ++ int index = this.listSize; ++ int neededLen = index + this.pendingAdditions.size(); ++ ++ if (neededLen < 0) { ++ throw new IllegalStateException("Too large"); ++ } ++ ++ if (neededLen > this.listElements.length) { ++ this.listElements = Arrays.copyOf(this.listElements, neededLen * 2); ++ } ++ ++ final E[] elements = this.listElements; ++ java.util.Iterator iterator = this.pendingAdditions.iterator(); ++ for (int i = index; i < neededLen; ++i) { ++ final E element = iterator.next(); ++ elements[i] = element; ++ this.indexMap.put(element, i); ++ } ++ ++ this.pendingAdditions.clear(); ++ this.listSize = neededLen; ++ } ++ } ++ } ++ ++ public boolean remove(final E element) { ++ final int index = this.indexMap.removeInt(element); ++ if (index >= 0) { ++ if (this.firstInvalidIndex < 0 || index < this.firstInvalidIndex) { ++ this.firstInvalidIndex = index; ++ } ++ this.listElements[index] = null; ++ return true; ++ } else { ++ return this.pendingAdditions.remove(element); ++ } ++ } ++ ++ public boolean add(final E element) { ++ if (this.iteratorCount > 0) { ++ if (this.indexMap.containsKey(element)) { ++ return true; ++ } ++ return this.pendingAdditions.add(element); ++ } else { ++ final int listSize = this.listSize; ++ ++ final int previous = this.indexMap.putIfAbsent(element, listSize); ++ if (previous != -1) { ++ return false; ++ } ++ ++ if (listSize >= this.listElements.length) { ++ this.listElements = Arrays.copyOf(this.listElements, listSize * 2); ++ } ++ this.listElements[listSize] = element; ++ this.listSize = listSize + 1; ++ ++ return true; ++ } ++ } ++ ++ protected void defrag() { ++ if (this.firstInvalidIndex < 0) { ++ return; // nothing to do ++ } ++ ++ if (this.indexMap.isEmpty()) { ++ Arrays.fill(this.listElements, 0, this.listSize, null); ++ this.listSize = 0; ++ this.firstInvalidIndex = -1; ++ return; ++ } ++ ++ final E[] backingArray = this.listElements; ++ ++ int lastValidIndex; ++ java.util.Iterator> iterator; ++ ++ if (this.firstInvalidIndex == 0) { ++ iterator = this.indexMap.reference2IntEntrySet().fastIterator(); ++ lastValidIndex = 0; ++ } else { ++ lastValidIndex = this.firstInvalidIndex; ++ final E key = backingArray[lastValidIndex - 1]; ++ iterator = this.indexMap.reference2IntEntrySet().fastIterator(new Reference2IntMap.Entry() { ++ @Override ++ public int getIntValue() { ++ throw new UnsupportedOperationException(); ++ } ++ ++ @Override ++ public int setValue(int i) { ++ throw new UnsupportedOperationException(); ++ } ++ ++ @Override ++ public E getKey() { ++ return key; ++ } ++ }); ++ } ++ ++ while (iterator.hasNext()) { ++ final Reference2IntMap.Entry entry = iterator.next(); ++ ++ final int newIndex = lastValidIndex++; ++ backingArray[newIndex] = entry.getKey(); ++ entry.setValue(newIndex); ++ } ++ ++ // cleanup end ++ Arrays.fill(backingArray, lastValidIndex, this.listSize, null); ++ this.listSize = lastValidIndex; ++ this.firstInvalidIndex = -1; ++ } ++ ++ public E rawGet(final int index) { ++ return this.listElements[index]; ++ } ++ ++ public int size() { ++ // always returns the correct amount - listSize can be different ++ return this.indexMap.size(); ++ } ++ ++ public IteratorSafeOrderedReferenceSet.Iterator iterator() { ++ ++this.iteratorCount; ++ return new BaseIterator<>(this); ++ } ++ ++ public static interface Iterator extends java.util.Iterator { ++ ++ public void finishedIterating(); ++ ++ } ++ ++ protected static final class BaseIterator implements IteratorSafeOrderedReferenceSet.Iterator { ++ ++ protected final IteratorSafeOrderedReferenceSet set; ++ protected int nextIndex; ++ protected E currentValue; ++ protected boolean finished; ++ ++ protected BaseIterator(final IteratorSafeOrderedReferenceSet set) { ++ this.set = set; ++ } ++ ++ @Override ++ public boolean hasNext() { ++ if (this.finished) { ++ return false; ++ } ++ if (this.currentValue != null) { ++ return true; ++ } ++ ++ final E[] elements = this.set.listElements; ++ int index, len; ++ for (index = this.nextIndex, len = this.set.listSize; index < len; ++index) { ++ final E element = elements[index]; ++ if (element != null) { ++ this.currentValue = element; ++ this.nextIndex = index + 1; ++ return true; ++ } ++ } ++ ++ this.nextIndex = index; ++ return false; ++ } ++ ++ @Override ++ public E next() { ++ if (!this.hasNext()) { ++ throw new NoSuchElementException(); ++ } ++ final E ret = this.currentValue; ++ ++ this.currentValue = null; ++ ++ return ret; ++ } ++ ++ @Override ++ public void remove() { ++ throw new UnsupportedOperationException(); ++ } ++ ++ @Override ++ public void finishedIterating() { ++ if (this.finished) { ++ throw new IllegalStateException(); ++ } ++ this.finished = true; ++ this.set.finishRawIterator(); ++ } ++ } ++} +diff --git a/src/main/java/com/tuinity/tuinity/voxel/AABBVoxelShape.java b/src/main/java/com/tuinity/tuinity/voxel/AABBVoxelShape.java +new file mode 100644 +index 000000000..76593df29 +--- /dev/null ++++ b/src/main/java/com/tuinity/tuinity/voxel/AABBVoxelShape.java +@@ -0,0 +1,246 @@ ++package com.tuinity.tuinity.voxel; ++ ++import it.unimi.dsi.fastutil.doubles.DoubleArrayList; ++import it.unimi.dsi.fastutil.doubles.DoubleList; ++import net.minecraft.server.AxisAlignedBB; ++import net.minecraft.server.EnumDirection; ++import net.minecraft.server.VoxelShape; ++import net.minecraft.server.VoxelShapes; ++import java.util.ArrayList; ++import java.util.List; ++ ++public final class AABBVoxelShape extends VoxelShape { ++ ++ public final AxisAlignedBB aabb; ++ private boolean isEmpty; ++ ++ public AABBVoxelShape(AxisAlignedBB aabb) { ++ super(VoxelShapes.getFullUnoptimisedCube().getShape()); ++ this.aabb = aabb; ++ this.isEmpty = (fuzzyEquals(aabb.minX, aabb.maxX) && fuzzyEquals(aabb.minY, aabb.maxY) && fuzzyEquals(aabb.minZ, aabb.maxZ)); ++ } ++ ++ static boolean fuzzyEquals(double d0, double d1) { ++ return Math.abs(d0 - d1) <= 1.0e-7; ++ } ++ ++ @Override ++ public boolean isEmpty() { ++ return this.isEmpty; ++ } ++ ++ @Override ++ public double b(EnumDirection.EnumAxis enumdirection_enumaxis) { // getMin ++ switch (enumdirection_enumaxis.ordinal()) { ++ case 0: ++ return this.aabb.minX; ++ case 1: ++ return this.aabb.minY; ++ case 2: ++ return this.aabb.minZ; ++ default: ++ throw new IllegalStateException("Unknown axis requested"); ++ } ++ } ++ ++ @Override ++ public double c(EnumDirection.EnumAxis enumdirection_enumaxis) { //getMax ++ switch (enumdirection_enumaxis.ordinal()) { ++ case 0: ++ return this.aabb.maxX; ++ case 1: ++ return this.aabb.maxY; ++ case 2: ++ return this.aabb.maxZ; ++ default: ++ throw new IllegalStateException("Unknown axis requested"); ++ } ++ } ++ ++ @Override ++ public AxisAlignedBB getBoundingBox() { // rets bounding box enclosing this entire shape ++ return this.aabb; ++ } ++ ++ // enum direction axis is from 0 -> 2, so we keep the lower bits for direction axis. ++ @Override ++ protected double a(EnumDirection.EnumAxis enumdirection_enumaxis, int i) { // getPointFromIndex ++ switch (enumdirection_enumaxis.ordinal() | (i << 2)) { ++ case (0 | (0 << 2)): ++ return this.aabb.minX; ++ case (1 | (0 << 2)): ++ return this.aabb.minY; ++ case (2 | (0 << 2)): ++ return this.aabb.minZ; ++ case (0 | (1 << 2)): ++ return this.aabb.maxX; ++ case (1 | (1 << 2)): ++ return this.aabb.maxY; ++ case (2 | (1 << 2)): ++ return this.aabb.maxZ; ++ default: ++ throw new IllegalStateException("Unknown axis requested"); ++ } ++ } ++ ++ private DoubleList cachedListX; ++ private DoubleList cachedListY; ++ private DoubleList cachedListZ; ++ ++ @Override ++ protected DoubleList a(EnumDirection.EnumAxis enumdirection_enumaxis) { // getPoints ++ switch (enumdirection_enumaxis.ordinal()) { ++ case 0: ++ return this.cachedListX == null ? this.cachedListX = DoubleArrayList.wrap(new double[] { this.aabb.minX, this.aabb.maxX }) : this.cachedListX; ++ case 1: ++ return this.cachedListY == null ? this.cachedListY = DoubleArrayList.wrap(new double[] { this.aabb.minY, this.aabb.maxY }) : this.cachedListY; ++ case 2: ++ return this.cachedListZ == null ? this.cachedListZ = DoubleArrayList.wrap(new double[] { this.aabb.minZ, this.aabb.maxZ }) : this.cachedListZ; ++ default: ++ throw new IllegalStateException("Unknown axis requested"); ++ } ++ } ++ ++ @Override ++ public VoxelShape a(double d0, double d1, double d2) { // createOffset ++ return new AABBVoxelShape(this.aabb.offset(d0, d1, d2)); ++ } ++ ++ @Override ++ public VoxelShape c() { // simplify ++ return this; ++ } ++ ++ @Override ++ public void b(VoxelShapes.a voxelshapes_a) { // forEachAABB ++ voxelshapes_a.consume(this.aabb.minX, this.aabb.minY, this.aabb.minZ, this.aabb.maxX, this.aabb.maxY, this.aabb.maxZ); ++ } ++ ++ @Override ++ public List d() { // getAABBs ++ List ret = new ArrayList<>(1); ++ ret.add(this.aabb); ++ return ret; ++ } ++ ++ @Override ++ protected int a(EnumDirection.EnumAxis enumdirection_enumaxis, double d0) { // findPointIndexAfterOffset ++ switch (enumdirection_enumaxis.ordinal()) { ++ case 0: ++ return d0 < this.aabb.maxX ? (d0 < this.aabb.minX ? -1 : 0) : 1; ++ case 1: ++ return d0 < this.aabb.maxY ? (d0 < this.aabb.minY ? -1 : 0) : 1; ++ case 2: ++ return d0 < this.aabb.maxZ ? (d0 < this.aabb.minZ ? -1 : 0) : 1; ++ default: ++ throw new IllegalStateException("Unknown axis requested"); ++ } ++ } ++ ++ @Override ++ protected boolean b(double d0, double d1, double d2) { // containsPoint ++ return this.aabb.contains(d0, d1, d2); ++ } ++ ++ @Override ++ public VoxelShape a(EnumDirection enumdirection) { // unknown ++ return super.a(enumdirection); ++ } ++ ++ @Override ++ public double a(EnumDirection.EnumAxis enumdirection_enumaxis, AxisAlignedBB axisalignedbb, double d0) { // collide ++ if (this.isEmpty) { ++ return d0; ++ } ++ if (Math.abs(d0) < 1.0e-7) { ++ return 0.0; ++ } ++ switch (enumdirection_enumaxis.ordinal()) { ++ case 0: ++ return this.collideX(axisalignedbb, d0); ++ case 1: ++ return this.collideY(axisalignedbb, d0); ++ case 2: ++ return this.collideZ(axisalignedbb, d0); ++ default: ++ throw new IllegalStateException("Unknown axis requested"); ++ } ++ } ++ ++ // collideX, collideY, collideZ are copied from 1.12 src and remapped ++ // so the code all belongs to mojang ++ ++ public double collideX(AxisAlignedBB axisalignedbb, double d0) { ++ if (axisalignedbb.maxY > this.aabb.minY && axisalignedbb.minY < this.aabb.maxY ++ && axisalignedbb.maxZ > this.aabb.minZ && axisalignedbb.minZ < this.aabb.maxZ) { ++ double d1; ++ ++ if (d0 > 0.0D && axisalignedbb.maxX <= this.aabb.minX) { ++ d1 = this.aabb.minX - axisalignedbb.maxX; ++ if (d1 < d0) { ++ d0 = d1; ++ } ++ } else if (d0 < 0.0D && axisalignedbb.minX >= this.aabb.maxX) { ++ d1 = this.aabb.maxX - axisalignedbb.minX; ++ if (d1 > d0) { ++ d0 = d1; ++ } ++ } ++ ++ return d0; ++ } else { ++ return d0; ++ } ++ } ++ ++ public double collideY(AxisAlignedBB axisalignedbb, double d0) { ++ if (axisalignedbb.maxX > this.aabb.minX && axisalignedbb.minX < this.aabb.maxX ++ && axisalignedbb.maxZ > this.aabb.minZ && axisalignedbb.minZ < this.aabb.maxZ) { ++ double d1; ++ ++ if (d0 > 0.0D && axisalignedbb.maxY <= this.aabb.minY) { ++ d1 = this.aabb.minY - axisalignedbb.maxY; ++ if (d1 < d0) { ++ d0 = d1; ++ } ++ } else if (d0 < 0.0D && axisalignedbb.minY >= this.aabb.maxY) { ++ d1 = this.aabb.maxY - axisalignedbb.minY; ++ if (d1 > d0) { ++ d0 = d1; ++ } ++ } ++ ++ return d0; ++ } else { ++ return d0; ++ } ++ } ++ ++ public double collideZ(AxisAlignedBB axisalignedbb, double d0) { ++ if (axisalignedbb.maxX > this.aabb.minX && axisalignedbb.minX < this.aabb.maxX ++ && axisalignedbb.maxY > this.aabb.minY && axisalignedbb.minY < this.aabb.maxY) { ++ double d1; ++ ++ if (d0 > 0.0D && axisalignedbb.maxZ <= this.aabb.minZ) { ++ d1 = this.aabb.minZ - axisalignedbb.maxZ; ++ if (d1 < d0) { ++ d0 = d1; ++ } ++ } else if (d0 < 0.0D && axisalignedbb.minZ >= this.aabb.maxZ) { ++ d1 = this.aabb.maxZ - axisalignedbb.minZ; ++ if (d1 > d0) { ++ d0 = d1; ++ } ++ } ++ ++ return d0; ++ } else { ++ return d0; ++ } ++ } ++ ++ @Override ++ public boolean intersects(AxisAlignedBB axisalingedbb) { ++ return this.aabb.intersects(axisalingedbb); ++ } ++} +diff --git a/src/main/java/net/minecraft/server/AxisAlignedBB.java b/src/main/java/net/minecraft/server/AxisAlignedBB.java +index 1a466e929..688c5b1bd 100644 +--- a/src/main/java/net/minecraft/server/AxisAlignedBB.java ++++ b/src/main/java/net/minecraft/server/AxisAlignedBB.java +@@ -13,6 +13,118 @@ public class AxisAlignedBB { + public final double maxY; + public final double maxZ; + ++ // Tuinity start ++ public final boolean isEmpty() { ++ return (this.maxX - this.minX) < 1.0E-7 && (this.maxY - this.minY) < 1.0E-7 && (this.maxZ - this.minZ) < 1.0E-7; ++ } ++ ++ public static AxisAlignedBB getBoxForChunk(int chunkX, int chunkZ) { ++ double x = (double)(chunkX << 4); ++ double z = (double)(chunkZ << 4); ++ return new AxisAlignedBB(x - 1.0E-7, 0.0, z - 1.0E-7, x + (16.0 + 1.0E-7), 255.0, z + (16.0 + 1.0E-7), false); ++ } ++ ++ // collideX, collideY, collideZ are copied from 1.12 src ++ // so the code all belongs to mojang ++ public double collideX(AxisAlignedBB axisalignedbb, double d0) { ++ if (axisalignedbb.maxY > this.minY && axisalignedbb.minY < this.maxY ++ && axisalignedbb.maxZ > this.minZ && axisalignedbb.minZ < this.maxZ) { ++ double d1; ++ ++ if (d0 > 0.0D && axisalignedbb.maxX <= this.minX) { ++ d1 = this.minX - axisalignedbb.maxX; ++ if (d1 < d0) { ++ d0 = d1; ++ } ++ } else if (d0 < 0.0D && axisalignedbb.minX >= this.maxX) { ++ d1 = this.maxX - axisalignedbb.minX; ++ if (d1 > d0) { ++ d0 = d1; ++ } ++ } ++ ++ return d0; ++ } else { ++ return d0; ++ } ++ } ++ ++ public double collideY(AxisAlignedBB axisalignedbb, double d0) { ++ if (axisalignedbb.maxX > this.minX && axisalignedbb.minX < this.maxX ++ && axisalignedbb.maxZ > this.minZ && axisalignedbb.minZ < this.maxZ) { ++ double d1; ++ ++ if (d0 > 0.0D && axisalignedbb.maxY <= this.minY) { ++ d1 = this.minY - axisalignedbb.maxY; ++ if (d1 < d0) { ++ d0 = d1; ++ } ++ } else if (d0 < 0.0D && axisalignedbb.minY >= this.maxY) { ++ d1 = this.maxY - axisalignedbb.minY; ++ if (d1 > d0) { ++ d0 = d1; ++ } ++ } ++ ++ return d0; ++ } else { ++ return d0; ++ } ++ } ++ ++ public double collideZ(AxisAlignedBB axisalignedbb, double d0) { ++ if (axisalignedbb.maxX > this.minX && axisalignedbb.minX < this.maxX ++ && axisalignedbb.maxY > this.minY && axisalignedbb.minY < this.maxY) { ++ double d1; ++ ++ if (d0 > 0.0D && axisalignedbb.maxZ <= this.minZ) { ++ d1 = this.minZ - axisalignedbb.maxZ; ++ if (d1 < d0) { ++ d0 = d1; ++ } ++ } else if (d0 < 0.0D && axisalignedbb.minZ >= this.maxZ) { ++ d1 = this.maxZ - axisalignedbb.minZ; ++ if (d1 > d0) { ++ d0 = d1; ++ } ++ } ++ ++ return d0; ++ } else { ++ return d0; ++ } ++ } ++ ++ public final AxisAlignedBB offsetX(double dx) { ++ return new AxisAlignedBB(this.minX + dx, this.minY, this.minZ, this.maxX + dx, this.maxY, this.maxZ, false); ++ } ++ ++ public final AxisAlignedBB offsetY(double dy) { ++ return new AxisAlignedBB(this.minX, this.minY + dy, this.minZ, this.maxX, this.maxY + dy, this.maxZ, false); ++ } ++ ++ public final AxisAlignedBB offsetZ(double dz) { ++ return new AxisAlignedBB(this.minX, this.minY, this.minZ + dz, this.maxX, this.maxY, this.maxZ + dz, false); ++ } ++ ++ public AxisAlignedBB(double d0, double d1, double d2, double d3, double d4, double d5, boolean dummy) { ++ this.minX = d0; ++ this.minY = d1; ++ this.minZ = d2; ++ this.maxX = d3; ++ this.maxY = d4; ++ this.maxZ = d5; ++ } ++ ++ public final AxisAlignedBB expandUpwards(double dy) { ++ return new AxisAlignedBB(this.minX, this.minY, this.minZ, this.maxX, this.maxY + dy, this.maxZ, false); ++ } ++ ++ public final AxisAlignedBB expandUpwardsAndCutBelow(double dy) { ++ return new AxisAlignedBB(this.minX, this.maxY, this.minZ, this.maxX, this.maxY + dy, this.maxZ, false); ++ } ++ // Tuinity end ++ + public AxisAlignedBB(double d0, double d1, double d2, double d3, double d4, double d5) { + this.minX = Math.min(d0, d3); + this.minY = Math.min(d1, d4); +@@ -181,6 +293,7 @@ public class AxisAlignedBB { + return new AxisAlignedBB(d0, d1, d2, d3, d4, d5); + } + ++ public final AxisAlignedBB offset(double d0, double d1, double d2) { return this.d(d0, d1, d2); } // Tuinity - OBFHELPER + public AxisAlignedBB d(double d0, double d1, double d2) { + return new AxisAlignedBB(this.minX + d0, this.minY + d1, this.minZ + d2, this.maxX + d0, this.maxY + d1, this.maxZ + d2); + } +@@ -189,6 +302,7 @@ public class AxisAlignedBB { + return new AxisAlignedBB(this.minX + (double) blockposition.getX(), this.minY + (double) blockposition.getY(), this.minZ + (double) blockposition.getZ(), this.maxX + (double) blockposition.getX(), this.maxY + (double) blockposition.getY(), this.maxZ + (double) blockposition.getZ()); + } + ++ public final AxisAlignedBB offset(Vec3D vec3d) { return this.b(vec3d); } // Tuinity - OBFHELPER + public AxisAlignedBB b(Vec3D vec3d) { + return this.d(vec3d.x, vec3d.y, vec3d.z); + } +@@ -208,6 +322,7 @@ public class AxisAlignedBB { + return this.e(vec3d.x, vec3d.y, vec3d.z); + } + ++ public final boolean contains(double d0, double d1, double d2) { return this.e(d0, d1, d2); } // Tuinity - OBFHELPER + public boolean e(double d0, double d1, double d2) { + return d0 >= this.minX && d0 < this.maxX && d1 >= this.minY && d1 < this.maxY && d2 >= this.minZ && d2 < this.maxZ; + } +diff --git a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java +index 0102a170d..ef6c85557 100644 +--- a/src/main/java/net/minecraft/server/BiomeBase.java ++++ b/src/main/java/net/minecraft/server/BiomeBase.java +@@ -61,6 +61,18 @@ public abstract class BiomeBase { + return new WorldGenCarverWrapper<>(worldgencarverabstract, c0); + } + ++ // Tuinity start - optimise biome conversion ++ private org.bukkit.block.Biome bukkitBiome; ++ ++ public final org.bukkit.block.Biome getBukkitBiome() { ++ if (this.bukkitBiome == null) { ++ this.bukkitBiome = org.bukkit.block.Biome.valueOf(IRegistry.BIOME.getKey(this).getKey().toUpperCase(java.util.Locale.ENGLISH)); ++ } ++ ++ return this.bukkitBiome; ++ } ++ // Tuinity end - optimise biome conversion ++ + protected BiomeBase(BiomeBase.a biomebase_a) { + if (biomebase_a.a != null && biomebase_a.b != null && biomebase_a.c != null && biomebase_a.d != null && biomebase_a.e != null && biomebase_a.f != null && biomebase_a.g != null && biomebase_a.h != null && biomebase_a.i != null) { + this.n = biomebase_a.a; +diff --git a/src/main/java/net/minecraft/server/BlockChest.java b/src/main/java/net/minecraft/server/BlockChest.java +index 72fb92f7c..6ea29ffc0 100644 +--- a/src/main/java/net/minecraft/server/BlockChest.java ++++ b/src/main/java/net/minecraft/server/BlockChest.java +@@ -10,7 +10,7 @@ import javax.annotation.Nullable; + public class BlockChest extends BlockChestAbstract implements IBlockWaterlogged { + + public static final BlockStateDirection FACING = BlockFacingHorizontal.FACING; +- public static final BlockStateEnum c = BlockProperties.ay; ++ public static final BlockStateEnum c = BlockProperties.ay; public static final BlockStateEnum getChestTypeEnum() { return BlockChest.c; } // Tuinity - OBFHELPER + public static final BlockStateBoolean d = BlockProperties.C; + protected static final VoxelShape e = Block.a(1.0D, 0.0D, 0.0D, 15.0D, 14.0D, 15.0D); + protected static final VoxelShape f = Block.a(1.0D, 0.0D, 1.0D, 15.0D, 14.0D, 16.0D); +@@ -195,7 +195,7 @@ public class BlockChest extends BlockChestAbstract implements I + @Override + public void remove(IBlockData iblockdata, World world, BlockPosition blockposition, IBlockData iblockdata1, boolean flag) { + if (iblockdata.getBlock() != iblockdata1.getBlock()) { +- TileEntity tileentity = world.getTileEntity(blockposition); ++ TileEntity tileentity = world.getTileEntity(blockposition, false); // Tuinity - block has since changed. + + if (tileentity instanceof IInventory) { + InventoryUtils.dropInventory(world, blockposition, (IInventory) tileentity); +diff --git a/src/main/java/net/minecraft/server/BlockPiston.java b/src/main/java/net/minecraft/server/BlockPiston.java +index f90ac88d3..8312ed779 100644 +--- a/src/main/java/net/minecraft/server/BlockPiston.java ++++ b/src/main/java/net/minecraft/server/BlockPiston.java +@@ -279,8 +279,10 @@ public class BlockPiston extends BlockDirectional { + } else if ((Boolean) iblockdata.get(BlockPiston.EXTENDED)) { + return false; + } +- +- return !block.isTileEntity(); ++ // Tuinity start - pushable TE's ++ TileEntity tileEntity; ++ return !block.isTileEntity() || ((tileEntity = world.getTileEntity(blockposition)) != null && tileEntity.isPushable()); ++ // Tuinity end - pushable TE's + } else { + return false; + } +@@ -377,7 +379,7 @@ public class BlockPiston extends BlockDirectional { + + for (k = list.size() - 1; k >= 0; --k) { + // Paper start - fix a variety of piston desync dupes +- boolean allowDesync = com.destroystokyo.paper.PaperConfig.allowPistonDuplication; ++ boolean allowDesync = com.destroystokyo.paper.PaperConfig.allowPistonDuplication && !list1.get(k).getBlock().isTileEntity(); // Tuinity - pushable TE's + BlockPosition oldPos = blockposition3 = (BlockPosition) list.get(k); + iblockdata1 = allowDesync ? world.getType(oldPos) : null; + // Paper end - fix a variety of piston desync dupes +@@ -389,10 +391,29 @@ public class BlockPiston extends BlockDirectional { + iblockdata1 = world.getType(oldPos); + map.replace(oldPos, iblockdata1); + } +- world.setTileEntity(blockposition3, BlockPistonMoving.a(allowDesync ? list1.get(k) : iblockdata1, enumdirection, flag, false)); ++ // Tuinity start - pushable TE's ++ TileEntity tileEntity = world.getTileEntity(oldPos); ++ if (tileEntity != null) { ++ if (!tileEntity.isPushable()) { ++ tileEntity = null; ++ } else { ++ // ensure the death of world tied state ++ if (tileEntity instanceof IInventory) { ++ MCUtil.closeInventory((IInventory)tileEntity, org.bukkit.event.inventory.InventoryCloseEvent.Reason.CANT_USE); ++ } ++ if (tileEntity instanceof TileEntityLectern) { ++ MCUtil.closeInventory(((TileEntityLectern)tileEntity).inventory, org.bukkit.event.inventory.InventoryCloseEvent.Reason.CANT_USE); ++ } ++ ++ // now copy ++ tileEntity = tileEntity.createCopyForPush((WorldServer)world, oldPos, blockposition3, iblockdata1); ++ } ++ } ++ // Tuinity end - pushable TE's + if (!allowDesync) { +- world.setTypeAndData(oldPos, Blocks.AIR.getBlockData(), 4 | 16 | 1024); // set air to prevent later physics updates from seeing this block ++ world.setTypeAndDataRaw(oldPos, Blocks.AIR.getBlockData(), null); // Tuinity - don't fire logic for removing the old block + } ++ world.setTileEntity(blockposition3, BlockPistonMoving.createPistonTile(allowDesync ? list1.get(k) : iblockdata1, enumdirection, flag, false, tileEntity)); // Tuinity - pushable TE's + // Paper end - fix a variety of piston desync dupes + --j; + aiblockdata[j] = iblockdata1; +diff --git a/src/main/java/net/minecraft/server/BlockPistonMoving.java b/src/main/java/net/minecraft/server/BlockPistonMoving.java +index 809ee9f9a..805fc6b88 100644 +--- a/src/main/java/net/minecraft/server/BlockPistonMoving.java ++++ b/src/main/java/net/minecraft/server/BlockPistonMoving.java +@@ -21,7 +21,12 @@ public class BlockPistonMoving extends BlockTileEntity { + } + + public static TileEntity a(IBlockData iblockdata, EnumDirection enumdirection, boolean flag, boolean flag1) { +- return new TileEntityPiston(iblockdata, enumdirection, flag, flag1); ++ // Tuinity start - add tileEntity parameter ++ return createPistonTile(iblockdata, enumdirection, flag, flag1, null); ++ } ++ public static TileEntity createPistonTile(IBlockData iblockdata, EnumDirection enumdirection, boolean flag, boolean flag1, TileEntity tileEntity) { ++ return new TileEntityPiston(iblockdata, enumdirection, flag, flag1, tileEntity); ++ // Tuinity end - add tileEntity parameter + } + + @Override +diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java +index d7beb47d9..5a360fdca 100644 +--- a/src/main/java/net/minecraft/server/Chunk.java ++++ b/src/main/java/net/minecraft/server/Chunk.java +@@ -509,8 +509,35 @@ public class Chunk implements IChunkAccess { + return this.setType(blockposition, iblockdata, flag, true); + } + ++ // Tuinity start ++ final void setTypeAndDataRaw(BlockPosition blockposition, IBlockData iblockdata) { ++ // copied from setType ++ int i = blockposition.getX() & 15; ++ int j = blockposition.getY(); ++ int k = blockposition.getZ() & 15; ++ ChunkSection chunksection = this.sections[j >> 4]; ++ ++ if (chunksection == Chunk.a) { ++ if (iblockdata.isAir()) { ++ return; ++ } ++ ++ chunksection = new ChunkSection(j >> 4 << 4, this, this.world, true); // Paper - Anti-Xray - Add parameters ++ this.sections[j >> 4] = chunksection; ++ } ++ ++ chunksection.setType(i, j & 15, k, iblockdata); ++ } ++ // Tuinity end ++ + @Nullable + public IBlockData setType(BlockPosition blockposition, IBlockData iblockdata, boolean flag, boolean doPlace) { ++ // Tuinity start - add tileEntity parameter ++ return this.setType(blockposition, iblockdata, flag, doPlace, null); ++ } ++ @Nullable ++ public IBlockData setType(BlockPosition blockposition, IBlockData iblockdata, boolean flag, boolean doPlace, TileEntity newTileEntity) { ++ // Tuinity end - add tileEntity parameter + // CraftBukkit end + int i = blockposition.getX() & 15; + int j = blockposition.getY(); +@@ -569,6 +596,10 @@ public class Chunk implements IChunkAccess { + } + + if (block instanceof ITileEntity) { ++ // Tuinity start - add tileEntity parameter ++ if (newTileEntity != null) { ++ this.world.setTileEntity(blockposition, newTileEntity); ++ } else { // Tuinity end - add tileEntity parameter + tileentity = this.a(blockposition, Chunk.EnumTileEntityState.CHECK); + if (tileentity == null) { + tileentity = ((ITileEntity) block).createTile(this.world); +@@ -576,6 +607,7 @@ public class Chunk implements IChunkAccess { + } else { + tileentity.invalidateBlockCache(); + } ++ } // Tuinity - add tileEntity parameter + } + + this.s = true; +@@ -591,6 +623,7 @@ public class Chunk implements IChunkAccess { + + @Override + public void a(Entity entity) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async addEntity call"); // Tuinity + this.q = true; + int i = MathHelper.floor(entity.locX() / 16.0D); + int j = MathHelper.floor(entity.locZ() / 16.0D); +@@ -660,6 +693,7 @@ public class Chunk implements IChunkAccess { + } + + public void a(Entity entity, int i) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async removeEntity call"); // Tuinity + if (i < 0) { + i = 0; + } +@@ -917,6 +951,7 @@ public class Chunk implements IChunkAccess { + } + + public void a(@Nullable Entity entity, AxisAlignedBB axisalignedbb, List list, @Nullable Predicate predicate) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async getEntities call"); // Tuinity + int i = MathHelper.floor((axisalignedbb.minY - 2.0D) / 16.0D); + int j = MathHelper.floor((axisalignedbb.maxY + 2.0D) / 16.0D); + +@@ -956,6 +991,7 @@ public class Chunk implements IChunkAccess { + } + + public void a(@Nullable EntityTypes entitytypes, AxisAlignedBB axisalignedbb, List list, Predicate predicate) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async getEntities call"); // Tuinity + int i = MathHelper.floor((axisalignedbb.minY - 2.0D) / 16.0D); + int j = MathHelper.floor((axisalignedbb.maxY + 2.0D) / 16.0D); + +@@ -986,6 +1022,7 @@ public class Chunk implements IChunkAccess { + } + + public void a(Class oclass, AxisAlignedBB axisalignedbb, List list, @Nullable Predicate predicate) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async getEntities call"); // Tuinity + int i = MathHelper.floor((axisalignedbb.minY - 2.0D) / 16.0D); + int j = MathHelper.floor((axisalignedbb.maxY + 2.0D) / 16.0D); + +diff --git a/src/main/java/net/minecraft/server/ChunkMap.java b/src/main/java/net/minecraft/server/ChunkMap.java +index 55f9f4e6e..15f0f86a3 100644 +--- a/src/main/java/net/minecraft/server/ChunkMap.java ++++ b/src/main/java/net/minecraft/server/ChunkMap.java +@@ -68,6 +68,7 @@ public abstract class ChunkMap extends LightEngineGraph { + + protected abstract int b(long i); + ++ public final void update(long coordinate, int level, boolean increaseInLevel) { this.b(coordinate, level, increaseInLevel); } // Tuinity - OBFHELPER + public void b(long i, int j, boolean flag) { + this.a(ChunkCoordIntPair.a, i, j, flag); + } +diff --git a/src/main/java/net/minecraft/server/ChunkMapDistance.java b/src/main/java/net/minecraft/server/ChunkMapDistance.java +index a013753bd..26994b478 100644 +--- a/src/main/java/net/minecraft/server/ChunkMapDistance.java ++++ b/src/main/java/net/minecraft/server/ChunkMapDistance.java +@@ -31,7 +31,7 @@ public abstract class ChunkMapDistance { + private static final int b = 33 + ChunkStatus.a(ChunkStatus.FULL) - 2; + private final Long2ObjectMap> c = new Long2ObjectOpenHashMap(); + public final Long2ObjectOpenHashMap>> tickets = new Long2ObjectOpenHashMap(); +- private final ChunkMapDistance.a e = new ChunkMapDistance.a(); ++ private final ChunkMapDistance.a e = new ChunkMapDistance.a(); final ChunkMapDistance.a getTicketTracker() { return this.e; } // Tuinity - OBFHELPER + public static final int MOB_SPAWN_RANGE = 8; //private final ChunkMapDistance.b f = new ChunkMapDistance.b(8); // Paper - no longer used + private final ChunkMapDistance.c g = new ChunkMapDistance.c(33); + // Paper start use a queue, but still keep unique requirement +@@ -53,6 +53,47 @@ public abstract class ChunkMapDistance { + + PlayerChunkMap chunkMap; // Paper + ++ // Tuinity start - delay chunk unloads ++ private long nextUnloadId; // delay chunk unloads ++ private final Long2ObjectOpenHashMap> delayedChunks = new Long2ObjectOpenHashMap<>(); ++ public final void removeTickets(long chunk, TicketType type) { ++ ArraySetSorted> tickets = this.tickets.get(chunk); ++ if (tickets == null) { ++ return; ++ } ++ if (type == TicketType.DELAYED_UNLOAD) { ++ this.delayedChunks.remove(chunk); ++ } ++ boolean changed = tickets.removeIf((Ticket ticket) -> { ++ return ticket.getTicketType() == type; ++ }); ++ if (changed) { ++ this.getTicketTracker().update(chunk, getLowestTicketLevel(tickets), false); ++ } ++ } ++ ++ private final java.util.function.LongFunction> computeFuntion = (long key) -> { ++ Ticket ret = new Ticket<>(TicketType.DELAYED_UNLOAD, -1, ++ChunkMapDistance.this.nextUnloadId); ++ ret.isCached = true; ++ return ret; ++ }; ++ ++ private void computeDelayedTicketFor(long chunk, int removedLevel, ArraySetSorted> tickets) { ++ int lowestLevel = getLowestTicketLevel(tickets); ++ if (removedLevel > lowestLevel) { ++ return; ++ } ++ final Ticket ticket = this.delayedChunks.computeIfAbsent(chunk, this.computeFuntion); ++ if (ticket.getTicketLevel() != -1) { ++ // since we modify data used in sorting, we need to remove before ++ tickets.remove(ticket); ++ } ++ ticket.setCreationTick(this.currentTick); ++ ticket.setTicketLevel(removedLevel); ++ tickets.add(ticket); // re-add with new expire time and ticket level ++ } ++ // Tuinity end - delay chunk unloads ++ + protected ChunkMapDistance(Executor executor, Executor executor1) { + executor1.getClass(); + Mailbox mailbox = Mailbox.a("player ticket throttler", executor1::execute); +@@ -65,15 +106,34 @@ public abstract class ChunkMapDistance { + } + + protected void purgeTickets() { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async purge tickets"); // Tuinity + ++this.currentTick; + ObjectIterator objectiterator = this.tickets.long2ObjectEntrySet().fastIterator(); + ++ int[] tempLevel = new int[] { PlayerChunkMap.GOLDEN_TICKET + 1 }; // Tuinity - delay chunk unloads + while (objectiterator.hasNext()) { + Entry>> entry = (Entry) objectiterator.next(); + + if ((entry.getValue()).removeIf((ticket) -> { // CraftBukkit - decompile error +- return ticket.b(this.currentTick); ++ // Tuinity start - delay chunk unloads ++ boolean ret = ticket.isExpired(this.currentTick); ++ if (com.tuinity.tuinity.config.TuinityConfig.delayChunkUnloadsBy <= 0) { ++ return ret; ++ } ++ if (ret && ticket.getTicketType() != TicketType.DELAYED_UNLOAD && ticket.getTicketLevel() < tempLevel[0]) { ++ tempLevel[0] = ticket.getTicketLevel(); ++ } ++ if (ticket.getTicketType() == TicketType.DELAYED_UNLOAD && ticket.isCached) { ++ this.delayedChunks.remove(entry.getLongKey(), ticket); // clean up ticket... ++ } ++ return ret; ++ // Tuinity end - delay chunk unloads + })) { ++ // Tuinity start - delay chunk unloads ++ if (tempLevel[0] < (PlayerChunkMap.GOLDEN_TICKET + 1)) { ++ this.computeDelayedTicketFor(entry.getLongKey(), tempLevel[0], entry.getValue()); ++ } ++ // Tuinity end - delay chunk unloads + this.e.b(entry.getLongKey(), a((ArraySetSorted) entry.getValue()), false); + } + +@@ -84,6 +144,7 @@ public abstract class ChunkMapDistance { + + } + ++ private static int getLowestTicketLevel(ArraySetSorted> arraysetsorted) { return a(arraysetsorted); } // Tuinity - OBFHELPER + private static int a(ArraySetSorted> arraysetsorted) { + AsyncCatcher.catchOp("ChunkMapDistance::getHighestTicketLevel"); // Paper + return !arraysetsorted.isEmpty() ? ((Ticket) arraysetsorted.b()).b() : PlayerChunkMap.GOLDEN_TICKET + 1; +@@ -98,6 +159,7 @@ public abstract class ChunkMapDistance { + protected abstract PlayerChunk a(long i, int j, @Nullable PlayerChunk playerchunk, int k); + + public boolean a(PlayerChunkMap playerchunkmap) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Cannot tick ChunkMapDistance off of the main-thread");// Tuinity + //this.f.a(); // Paper - no longer used + AsyncCatcher.catchOp("DistanceManagerTick"); + this.g.a(); +@@ -176,27 +238,11 @@ public abstract class ChunkMapDistance { + boolean removed = false; // CraftBukkit + if (arraysetsorted.remove(ticket)) { + removed = true; // CraftBukkit +- // Paper start - delay chunk unloads for player tickets +- long delayChunkUnloadsBy = chunkMap.world.paperConfig.delayChunkUnloadsBy; +- if (ticket.getTicketType() == TicketType.PLAYER && delayChunkUnloadsBy > 0) { +- boolean hasPlayer = false; +- for (Ticket ticket1 : arraysetsorted) { +- if (ticket1.getTicketType() == TicketType.PLAYER) { +- hasPlayer = true; +- break; +- } +- } +- PlayerChunk playerChunk = chunkMap.getUpdatingChunk(i); +- if (!hasPlayer && playerChunk != null && playerChunk.isFullChunkReady()) { +- Ticket delayUnload = new Ticket(TicketType.DELAY_UNLOAD, 33, i); +- delayUnload.delayUnloadBy = delayChunkUnloadsBy; +- delayUnload.setCurrentTick(this.currentTick); +- arraysetsorted.remove(delayUnload); +- // refresh ticket +- arraysetsorted.add(delayUnload); +- } ++ // Tuinity start - delay chunk unloads ++ if (com.tuinity.tuinity.config.TuinityConfig.delayChunkUnloadsBy > 0 && ticket.getTicketType() != TicketType.DELAYED_UNLOAD) { ++ this.computeDelayedTicketFor(i, ticket.getTicketLevel(), arraysetsorted); + } +- // Paper end ++ // Tuinity end - delay chunk unloads + } + + if (arraysetsorted.isEmpty()) { +@@ -347,6 +393,7 @@ public abstract class ChunkMapDistance { + } + + private ArraySetSorted> e(long i) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async tickets compute"); // Tuinity + return (ArraySetSorted) this.tickets.computeIfAbsent(i, (j) -> { + return ArraySetSorted.a(4); + }); +@@ -364,6 +411,7 @@ public abstract class ChunkMapDistance { + } + + public void a(SectionPosition sectionposition, EntityPlayer entityplayer) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async player add"); // Tuinity + long i = sectionposition.u().pair(); + + ((ObjectSet) this.c.computeIfAbsent(i, (j) -> { +@@ -374,6 +422,7 @@ public abstract class ChunkMapDistance { + } + + public void b(SectionPosition sectionposition, EntityPlayer entityplayer) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async player remove"); // Tuinity + long i = sectionposition.u().pair(); + ObjectSet objectset = (ObjectSet) this.c.get(i); + +@@ -423,6 +472,7 @@ public abstract class ChunkMapDistance { + + // CraftBukkit start + public void removeAllTicketsFor(TicketType ticketType, int ticketLevel, T ticketIdentifier) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async ticket remove"); // Tuinity + Ticket target = new Ticket<>(ticketType, ticketLevel, ticketIdentifier); + + for (java.util.Iterator>>> iterator = this.tickets.long2ObjectEntrySet().fastIterator(); iterator.hasNext();) { +diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java +index 75c22a3f4..24af59962 100644 +--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java ++++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java +@@ -118,7 +118,7 @@ public class ChunkProviderServer extends IChunkProvider { + return (Chunk)this.getChunkAt(x, z, ChunkStatus.FULL, true); + } + +- private long chunkFutureAwaitCounter; ++ long chunkFutureAwaitCounter; // Tuinity - private -> package private + + public void getEntityTickingChunkAsync(int x, int z, java.util.function.Consumer onLoad) { + if (Thread.currentThread() != this.serverThread) { +@@ -180,9 +180,9 @@ public class ChunkProviderServer extends IChunkProvider { + + try { + if (onLoad != null) { +- playerChunkMap.callbackExecutor.execute(() -> { ++ // Tuinity - revert incorrect use of callback executor + onLoad.accept(either == null ? null : either.left().orElse(null)); // indicate failure to the callback. +- }); ++ // Tuinity - revert incorrect use of callback executor + } + } catch (Throwable thr) { + if (thr instanceof ThreadDeath) { +@@ -207,6 +207,163 @@ public class ChunkProviderServer extends IChunkProvider { + } + // Paper end - rewrite ticklistserver + ++ // Tuinity start ++ // this will try to avoid chunk neighbours for lighting ++ public final IChunkAccess getFullStatusChunkAt(int chunkX, int chunkZ) { ++ Chunk ifLoaded = this.getChunkAtIfLoadedImmediately(chunkX, chunkZ); ++ if (ifLoaded != null) { ++ return ifLoaded; ++ } ++ ++ IChunkAccess empty = this.getChunkAt(chunkX, chunkZ, ChunkStatus.EMPTY, true); ++ if (empty != null && empty.getChunkStatus() == ChunkStatus.FULL) { ++ return empty; ++ } ++ return this.getChunkAt(chunkX, chunkZ, ChunkStatus.FULL, true); ++ } ++ ++ public final IChunkAccess getFullStatusChunkAtIfLoaded(int chunkX, int chunkZ) { ++ Chunk ifLoaded = this.getChunkAtIfLoadedImmediately(chunkX, chunkZ); ++ if (ifLoaded != null) { ++ return ifLoaded; ++ } ++ ++ IChunkAccess ret = this.getChunkAtImmediately(chunkX, chunkZ); ++ if (ret != null && ret.getChunkStatus() == ChunkStatus.FULL) { ++ return ret; ++ } else { ++ return null; ++ } ++ } ++ ++ void getChunkAtAsynchronously(int chunkX, int chunkZ, int ticketLevel, ++ java.util.function.Consumer consumer) { ++ this.getChunkAtAsynchronously(chunkX, chunkZ, ticketLevel, (PlayerChunk playerChunk) -> { ++ if (ticketLevel <= 33) { ++ return (CompletableFuture)playerChunk.getFullChunkFuture(); ++ } else { ++ return playerChunk.getOrCreateFuture(PlayerChunk.getChunkStatus(ticketLevel), ChunkProviderServer.this.playerChunkMap); ++ } ++ }, consumer); ++ } ++ ++ void getChunkAtAsynchronously(int chunkX, int chunkZ, int ticketLevel, ++ java.util.function.Function>> function, ++ java.util.function.Consumer consumer) { ++ if (Thread.currentThread() != this.serverThread) { ++ throw new IllegalStateException(); ++ } ++ ChunkCoordIntPair chunkPos = new ChunkCoordIntPair(chunkX, chunkZ); ++ Long identifier = Long.valueOf(this.chunkFutureAwaitCounter++); ++ this.addTicketAtLevel(TicketType.FUTURE_AWAIT, chunkPos, ticketLevel, identifier); ++ this.tickDistanceManager(); ++ ++ PlayerChunk chunk = this.playerChunkMap.getUpdatingChunk(chunkPos.pair()); ++ ++ if (chunk == null) { ++ throw new IllegalStateException("Expected playerchunk " + chunkPos + " in world '" + this.world.getWorld().getName() + "'"); ++ } ++ ++ CompletableFuture> future = function.apply(chunk); ++ ++ future.whenCompleteAsync((either, throwable) -> { ++ try { ++ if (throwable != null) { ++ if (throwable instanceof ThreadDeath) { ++ throw (ThreadDeath)throwable; ++ } ++ MinecraftServer.LOGGER.fatal("Failed to complete future await for chunk " + chunkPos.toString() + " in world '" + ChunkProviderServer.this.world.getWorld().getName() + "'", throwable); ++ } else if (either.right().isPresent()) { ++ MinecraftServer.LOGGER.fatal("Failed to complete future await for chunk " + chunkPos.toString() + " in world '" + ChunkProviderServer.this.world.getWorld().getName() + "': " + either.right().get().toString()); ++ } ++ ++ try { ++ if (consumer != null) { ++ consumer.accept(either == null ? null : either.left().orElse(null)); // indicate failure to the callback. ++ } ++ } catch (Throwable thr) { ++ if (thr instanceof ThreadDeath) { ++ throw (ThreadDeath)thr; ++ } ++ MinecraftServer.LOGGER.fatal("Load callback for future await failed " + chunkPos.toString() + " in world '" + ChunkProviderServer.this.world.getWorld().getName() + "'", thr); ++ return; ++ } ++ } finally { ++ // due to odd behaviour with CB unload implementation we need to have these AFTER the load callback. ++ ChunkProviderServer.this.addTicketAtLevel(TicketType.UNKNOWN, chunkPos, ticketLevel, chunkPos); ++ ChunkProviderServer.this.removeTicketAtLevel(TicketType.FUTURE_AWAIT, chunkPos, ticketLevel, identifier); ++ } ++ }, this.serverThreadQueue); ++ } ++ ++ void chunkLoadAccept(int chunkX, int chunkZ, IChunkAccess chunk, java.util.function.Consumer consumer) { ++ try { ++ consumer.accept(chunk); ++ } catch (Throwable throwable) { ++ if (throwable instanceof ThreadDeath) { ++ throw (ThreadDeath)throwable; ++ } ++ MinecraftServer.LOGGER.error("Load callback for chunk " + chunkX + "," + chunkZ + " in world '" + this.world.getWorld().getName() + "' threw an exception", throwable); ++ } ++ } ++ ++ public final void getChunkAtAsynchronously(int chunkX, int chunkZ, ChunkStatus status, boolean gen, boolean allowSubTicketLevel, java.util.function.Consumer onLoad) { ++ // try to fire sync ++ int chunkStatusTicketLevel = 33 + ChunkStatus.getTicketLevelOffset(status); ++ IChunkAccess immediate = this.getChunkAtImmediately(chunkX, chunkZ); ++ if (immediate != null) { ++ if (allowSubTicketLevel || this.playerChunkMap.getUpdatingChunk(MCUtil.getCoordinateKey(chunkX, chunkZ)).getTicketLevel() <= chunkStatusTicketLevel) { ++ if (immediate.getChunkStatus().isAtLeastStatus(status)) { ++ this.chunkLoadAccept(chunkX, chunkZ, immediate, onLoad); ++ } else { ++ if (gen) { ++ this.getChunkAtAsynchronously(chunkX, chunkZ, chunkStatusTicketLevel, onLoad); ++ } else { ++ this.chunkLoadAccept(chunkX, chunkZ, null, onLoad); ++ } ++ } ++ } else { ++ if (gen || immediate.getChunkStatus().isAtLeastStatus(status)) { ++ this.getChunkAtAsynchronously(chunkX, chunkZ, chunkStatusTicketLevel, onLoad); ++ } else { ++ this.chunkLoadAccept(chunkX, chunkZ, null, onLoad); ++ } ++ } ++ return; ++ } ++ ++ // need to fire async ++ ++ if (gen && !allowSubTicketLevel) { ++ this.getChunkAtAsynchronously(chunkX, chunkZ, chunkStatusTicketLevel, onLoad); ++ return; ++ } ++ ++ this.getChunkAtAsynchronously(chunkX, chunkZ, 33 + ChunkStatus.getTicketLevelOffset(ChunkStatus.EMPTY), (IChunkAccess chunk) -> { ++ if (chunk == null) { ++ throw new IllegalStateException("Chunk cannot be null"); ++ } ++ ++ if (!chunk.getChunkStatus().isAtLeastStatus(status)) { ++ if (gen) { ++ this.getChunkAtAsynchronously(chunkX, chunkZ, chunkStatusTicketLevel, onLoad); ++ return; ++ } else { ++ ChunkProviderServer.this.chunkLoadAccept(chunkX, chunkZ, null, onLoad); ++ return; ++ } ++ } else { ++ if (allowSubTicketLevel) { ++ ChunkProviderServer.this.chunkLoadAccept(chunkX, chunkZ, chunk, onLoad); ++ return; ++ } else { ++ this.getChunkAtAsynchronously(chunkX, chunkZ, chunkStatusTicketLevel, onLoad); ++ return; ++ } ++ } ++ }); ++ } ++ // Tuinity end + + public ChunkProviderServer(WorldServer worldserver, File file, DataFixer datafixer, DefinedStructureManager definedstructuremanager, Executor executor, ChunkGenerator chunkgenerator, int i, WorldLoadListener worldloadlistener, Supplier supplier) { + this.world = worldserver; +@@ -533,6 +690,8 @@ public class ChunkProviderServer extends IChunkProvider { + Arrays.fill(this.cacheChunk, (Object) null); + } + ++ private long syncLoadCounter; // Tuinity - prevent plugin unloads from removing our ticket ++ + private CompletableFuture> getChunkFutureMainThread(int i, int j, ChunkStatus chunkstatus, boolean flag) { + // Paper start - add isUrgent - old sig left in place for dirty nms plugins + return getChunkFutureMainThread(i, j, chunkstatus, flag, false); +@@ -551,9 +710,12 @@ public class ChunkProviderServer extends IChunkProvider { + PlayerChunk.State currentChunkState = PlayerChunk.getChunkState(playerchunk.getTicketLevel()); + currentlyUnloading = (oldChunkState.isAtLeast(PlayerChunk.State.BORDER) && !currentChunkState.isAtLeast(PlayerChunk.State.BORDER)); + } ++ final Long identifier; // Tuinity - prevent plugin unloads from removing our ticket + if (flag && !currentlyUnloading) { + // CraftBukkit end + this.chunkMapDistance.a(TicketType.UNKNOWN, chunkcoordintpair, l, chunkcoordintpair); ++ identifier = Long.valueOf(this.syncLoadCounter++); // Tuinity - prevent plugin unloads from removing our ticket ++ this.chunkMapDistance.addTicketAtLevel(TicketType.REQUIRED_LOAD, chunkcoordintpair, l, identifier); // Tuinity - prevent plugin unloads from removing our ticket + if (isUrgent) this.chunkMapDistance.markUrgent(chunkcoordintpair); // Paper + if (this.a(playerchunk, l)) { + GameProfilerFiller gameprofilerfiller = this.world.getMethodProfiler(); +@@ -564,12 +726,20 @@ public class ChunkProviderServer extends IChunkProvider { + playerchunk = this.getChunk(k); + gameprofilerfiller.exit(); + if (this.a(playerchunk, l)) { ++ this.chunkMapDistance.removeTicketAtLevel(TicketType.REQUIRED_LOAD, chunkcoordintpair, l, identifier); // Tuinity + throw (IllegalStateException) SystemUtils.c(new IllegalStateException("No chunk holder after ticket has been added")); + } + } +- } ++ } else { identifier = null; } // Tuinity - prevent plugin unloads from removing our ticket + // Paper start + CompletableFuture> future = this.a(playerchunk, l) ? PlayerChunk.UNLOADED_CHUNK_ACCESS_FUTURE : playerchunk.a(chunkstatus, this.playerChunkMap); ++ // Tuinity start - prevent plugin unloads from removing our ticket ++ if (flag && !currentlyUnloading) { ++ future.thenAcceptAsync((either) -> { ++ ChunkProviderServer.this.chunkMapDistance.removeTicketAtLevel(TicketType.REQUIRED_LOAD, chunkcoordintpair, l, identifier); ++ }, ChunkProviderServer.this.serverThreadQueue); ++ } ++ // Tuinity end - prevent plugin unloads from removing our ticket + if (isUrgent) { + future.thenAccept(either -> this.chunkMapDistance.clearUrgent(chunkcoordintpair)); + } +@@ -731,7 +901,7 @@ public class ChunkProviderServer extends IChunkProvider { + this.world.getMethodProfiler().enter("purge"); + this.world.timings.doChunkMap.startTiming(); // Spigot + this.chunkMapDistance.purgeTickets(); +- this.world.getMinecraftServer().midTickLoadChunks(); // Paper ++ // Tuinity - replace logic + this.tickDistanceManager(); + this.world.timings.doChunkMap.stopTiming(); // Spigot + this.world.getMethodProfiler().exitEnter("chunks"); +@@ -741,12 +911,22 @@ public class ChunkProviderServer extends IChunkProvider { + this.world.timings.doChunkUnload.startTiming(); // Spigot + this.world.getMethodProfiler().exitEnter("unload"); + this.playerChunkMap.unloadChunks(booleansupplier); +- this.world.getMinecraftServer().midTickLoadChunks(); // Paper ++ // Tuinity - replace logic + this.world.timings.doChunkUnload.stopTiming(); // Spigot + this.world.getMethodProfiler().exit(); + this.clearCache(); + } + ++ // Tuinity start - optimise chunk tick iteration ++ // We need this here because since we remove the COW op for chunk map, we also remove ++ // the iterator safety of the visible map - meaning the only way for us to still ++ // iterate is to use a copy. Not acceptable at all, so here we hack in an iterable safe ++ // chunk map that will give the same behaviour as previous - without COW. ++ final com.destroystokyo.paper.util.maplist.ChunkList entityTickingChunks = new com.destroystokyo.paper.util.maplist.ChunkList(); ++ boolean isTickingChunks; ++ final it.unimi.dsi.fastutil.objects.Object2BooleanLinkedOpenHashMap pendingEntityTickingChunkChanges = new it.unimi.dsi.fastutil.objects.Object2BooleanLinkedOpenHashMap<>(16, 0.8f); ++ // Tuinity end - optimise chunk tick iteration ++ + private void tickChunks() { + long i = this.world.getTime(); + long j = i - this.lastTickTime; +@@ -822,11 +1002,12 @@ public class ChunkProviderServer extends IChunkProvider { + this.world.timings.countNaturalMobs.stopTiming(); // Paper - timings + this.world.getMethodProfiler().exit(); + // Paper - replaced by above +- final int[] chunksTicked = {0}; this.playerChunkMap.forEachVisibleChunk((playerchunk) -> { // Paper - safe iterator incase chunk loads, also no wrapping +- Optional optional = ((Either) playerchunk.b().getNow(PlayerChunk.UNLOADED_CHUNK)).left(); +- +- if (optional.isPresent()) { +- Chunk chunk = (Chunk) optional.get(); ++ // Tuinity start - optimise chunk tick iteration ++ this.isTickingChunks = true; ++ for (Chunk chunk : this.entityTickingChunks) { ++ PlayerChunk playerchunk = chunk.playerChunk; ++ if (playerchunk != null) { // make sure load event has been called along with the load logic we put there ++ // Tuinity end - optimise chunk tick iteration + + this.world.getMethodProfiler().enter("broadcast"); + this.world.timings.broadcastChunkUpdates.startTiming(); // Paper - timings +@@ -905,10 +1086,26 @@ public class ChunkProviderServer extends IChunkProvider { + this.world.timings.chunkTicks.startTiming(); // Spigot // Paper + this.world.a(chunk, k); + this.world.timings.chunkTicks.stopTiming(); // Spigot // Paper +- if (chunksTicked[0]++ % 10 == 0) this.world.getMinecraftServer().midTickLoadChunks(); // Paper ++ MinecraftServer.getServer().executeMidTickTasks(); // Tuinity - exec chunk tasks during world tick + } + } +- }); ++ } // Tuinity start - optimise chunk tick iteration ++ this.isTickingChunks = false; ++ if (!this.pendingEntityTickingChunkChanges.isEmpty()) { ++ // iterate backwards: fastutil maps have better remove times when iterating backwards ++ // (this is due to the fact that we likely wont shift entries on remove calls) ++ for (it.unimi.dsi.fastutil.objects.ObjectBidirectionalIterator> iterator = this.pendingEntityTickingChunkChanges.object2BooleanEntrySet().fastIterator(this.pendingEntityTickingChunkChanges.object2BooleanEntrySet().last()); iterator.hasPrevious();) { ++ it.unimi.dsi.fastutil.objects.Object2BooleanMap.Entry entry = iterator.previous(); ++ ++ if (entry.getBooleanValue()) { ++ this.entityTickingChunks.add(entry.getKey()); ++ } else { ++ this.entityTickingChunks.remove(entry.getKey()); ++ } ++ iterator.remove(); ++ } ++ } ++ // Tuinity end - optimise chunk tick iteration + this.world.getMethodProfiler().enter("customSpawners"); + if (flag1) { + try (co.aikar.timings.Timing ignored = this.world.timings.miscMobSpawning.startTiming()) { // Paper - timings +@@ -920,7 +1117,25 @@ public class ChunkProviderServer extends IChunkProvider { + this.world.getMethodProfiler().exit(); + } + ++ // Tuinity start - controlled flush for entity tracker packets ++ List disabledFlushes = new java.util.ArrayList<>(this.world.getPlayers().size()); ++ for (EntityPlayer player : this.world.getPlayers()) { ++ PlayerConnection connection = player.playerConnection; ++ if (connection != null) { ++ connection.networkManager.disableAutomaticFlush(); ++ disabledFlushes.add(connection.networkManager); ++ } ++ } ++ try { ++ // Tuinity end - controlled flush for entity tracker packets + this.playerChunkMap.g(); ++ // Tuinity start - controlled flush for entity tracker packets ++ } finally { ++ for (NetworkManager networkManager : disabledFlushes) { ++ networkManager.enableAutomaticFlush(); ++ } ++ } ++ // Tuinity end - controlled flush for entity tracker packets + } + + @Override +@@ -1046,44 +1261,11 @@ public class ChunkProviderServer extends IChunkProvider { + ChunkProviderServer.this.world.getMethodProfiler().c("runTask"); + super.executeTask(runnable); + } +- +- // Paper start +- private long lastMidTickChunkTask = 0; +- public boolean pollChunkLoadTasks() { +- if (com.destroystokyo.paper.io.chunk.ChunkTaskManager.pollChunkWaitQueue() || ChunkProviderServer.this.world.asyncChunkTaskManager.pollNextChunkTask()) { +- try { +- ChunkProviderServer.this.tickDistanceManager(); +- } finally { +- // from below: process pending Chunk loadCallback() and unloadCallback() after each run task +- playerChunkMap.callbackExecutor.run(); +- } +- return true; +- } +- return false; +- } +- public void midTickLoadChunks() { +- MinecraftServer server = ChunkProviderServer.this.world.getMinecraftServer(); +- // always try to load chunks, restrain generation/other updates only. don't count these towards tick count +- //noinspection StatementWithEmptyBody +- while (pollChunkLoadTasks()) {} +- +- if (System.nanoTime() - lastMidTickChunkTask < 200000) { +- return; +- } +- +- for (;server.midTickChunksTasksRan < com.destroystokyo.paper.PaperConfig.midTickChunkTasks && server.canSleepForTick();) { +- if (this.executeNext()) { +- server.midTickChunksTasksRan++; +- lastMidTickChunkTask = System.nanoTime(); +- } else { +- break; +- } +- } +- } +- // Paper end ++ // Tuinity - replace logic + + @Override + protected boolean executeNext() { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Cannot execute chunk tasks off-main thread");// Tuinity + // CraftBukkit start - process pending Chunk loadCallback() and unloadCallback() after each run task + try { + boolean execChunkTask = com.destroystokyo.paper.io.chunk.ChunkTaskManager.pollChunkWaitQueue() || ChunkProviderServer.this.world.asyncChunkTaskManager.pollNextChunkTask(); // Paper +diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java +index 1685237df..20b6b58bd 100644 +--- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java ++++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java +@@ -23,6 +23,14 @@ public class ChunkRegionLoader { + + private static final Logger LOGGER = LogManager.getLogger(); + ++ // Tuinity start ++ // TODO: Check on update ++ public static long getLastWorldSaveTime(NBTTagCompound chunkData) { ++ NBTTagCompound levelData = chunkData.getCompound("Level"); ++ return levelData.getLong("LastUpdate"); ++ } ++ // Tuinity end ++ + // Paper start - guard against serializing mismatching coordinates + // TODO Note: This needs to be re-checked each update + public static ChunkCoordIntPair getChunkCoordinate(NBTTagCompound chunkData) { +@@ -375,10 +383,10 @@ public class ChunkRegionLoader { + NBTTagCompound nbttagcompound1 = new NBTTagCompound(); + + nbttagcompound.setInt("DataVersion", SharedConstants.getGameVersion().getWorldVersion()); +- nbttagcompound.set("Level", nbttagcompound1); ++ nbttagcompound.set("Level", nbttagcompound1); // Tuinity - diff on change + nbttagcompound1.setInt("xPos", chunkcoordintpair.x); + nbttagcompound1.setInt("zPos", chunkcoordintpair.z); +- nbttagcompound1.setLong("LastUpdate", asyncsavedata != null ? asyncsavedata.worldTime : worldserver.getTime()); // Paper - async chunk unloading ++ nbttagcompound1.setLong("LastUpdate", asyncsavedata != null ? asyncsavedata.worldTime : worldserver.getTime()); // Paper - async chunk unloading // Tuinity - diff on change + nbttagcompound1.setLong("InhabitedTime", ichunkaccess.getInhabitedTime()); + nbttagcompound1.setString("Status", ichunkaccess.getChunkStatus().d()); + ChunkConverter chunkconverter = ichunkaccess.p(); +diff --git a/src/main/java/net/minecraft/server/ChunkSection.java b/src/main/java/net/minecraft/server/ChunkSection.java +index 4dcb111c7..2f56b12d9 100644 +--- a/src/main/java/net/minecraft/server/ChunkSection.java ++++ b/src/main/java/net/minecraft/server/ChunkSection.java +@@ -95,6 +95,7 @@ public class ChunkSection { + return iblockdata1; + } + ++ public final boolean isFullOfAir() { return this.c(); } // Tuinity - OBFHELPER + public boolean c() { + return this.nonEmptyBlockCount == 0; + } +diff --git a/src/main/java/net/minecraft/server/ChunkStatus.java b/src/main/java/net/minecraft/server/ChunkStatus.java +index 40ce30cdc..3ba8481de 100644 +--- a/src/main/java/net/minecraft/server/ChunkStatus.java ++++ b/src/main/java/net/minecraft/server/ChunkStatus.java +@@ -103,7 +103,7 @@ public class ChunkStatus { + private final ChunkStatus.c w; + private final int x; + private final ChunkStatus.Type y; +- private final EnumSet z; ++ private final EnumSet z; public final HeightMap.Type[] heightMaps; // Tuinity + + private static CompletableFuture> a(ChunkStatus chunkstatus, LightEngineThreaded lightenginethreaded, IChunkAccess ichunkaccess) { + boolean flag = a(chunkstatus, ichunkaccess); +@@ -165,7 +165,7 @@ public class ChunkStatus { + this.w = chunkstatus_c; + this.x = i; + this.y = chunkstatus_type; +- this.z = enumset; ++ this.z = enumset; this.heightMaps = new java.util.ArrayList<>(this.z).toArray(new HeightMap.Type[0]); // Tuinity + this.t = chunkstatus == null ? 0 : chunkstatus.c() + 1; + } + +diff --git a/src/main/java/net/minecraft/server/DataPaletteBlock.java b/src/main/java/net/minecraft/server/DataPaletteBlock.java +index 81362de54..599ce8062 100644 +--- a/src/main/java/net/minecraft/server/DataPaletteBlock.java ++++ b/src/main/java/net/minecraft/server/DataPaletteBlock.java +@@ -164,6 +164,7 @@ public class DataPaletteBlock implements DataPaletteExpandable { + return this.a(j << 8 | k << 4 | i); // Paper - inline + } + ++ public final T rawGet(int index) { return this.a(index); } // Tuinity - OBFHELPER + protected T a(int i) { + T t0 = this.h.a(this.a.a(i)); + +diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java +index 32cd645ab..1f1243ae8 100644 +--- a/src/main/java/net/minecraft/server/DedicatedServer.java ++++ b/src/main/java/net/minecraft/server/DedicatedServer.java +@@ -194,6 +194,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer + com.destroystokyo.paper.PaperConfig.registerCommands(); + com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // load version history now + // Paper end ++ com.tuinity.tuinity.config.TuinityConfig.init((File) options.valueOf("tuinity-settings")); // Tuinity - Server Config + + this.setSpawnAnimals(dedicatedserverproperties.spawnAnimals); + this.setSpawnNPCs(dedicatedserverproperties.spawnNpcs); +diff --git a/src/main/java/net/minecraft/server/EULA.java b/src/main/java/net/minecraft/server/EULA.java +index cf00f35a5..e54730f09 100644 +--- a/src/main/java/net/minecraft/server/EULA.java ++++ b/src/main/java/net/minecraft/server/EULA.java +@@ -70,7 +70,7 @@ public class EULA { + Properties properties = new Properties(); + + properties.setProperty("eula", "false"); +- properties.store(outputstream, "By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).\nYou also agree that tacos are tasty, and the best food in the world."); // Paper - fix lag; ++ properties.store(outputstream, "By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula)."); // Paper - fix lag; // Tuinity - Tacos are disgusting + } catch (Throwable throwable1) { + throwable = throwable1; + throw throwable1; +diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java +index e0ab058bf..37f854764 100644 +--- a/src/main/java/net/minecraft/server/Entity.java ++++ b/src/main/java/net/minecraft/server/Entity.java +@@ -137,7 +137,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + public double E; + public double F; + public double G; +- public float H; ++ public float H; public final float getStepHeight() { return this.H; } // Tuinity - OBFHELPER + public boolean noclip; + public float J; + protected final Random random; +@@ -211,6 +211,14 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + } + // CraftBukkit end + ++ // Tuinity start ++ public final AxisAlignedBB getBoundingBoxAt(double x, double y, double z) { ++ double widthHalf = (double)this.size.width / 2.0; ++ double height = (double)this.size.height; ++ return new AxisAlignedBB(x - widthHalf, y, z - widthHalf, x + widthHalf, y + height, z + widthHalf); ++ } ++ // Tuinity end ++ + // Paper start + /** + * Overriding this field will cause memory leaks. +@@ -601,7 +609,44 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + return this.world.getCubes(this, axisalignedbb) && !this.world.containsLiquid(axisalignedbb); + } + ++ // Tuinity start - detailed watchdog information ++ private Vec3D moveVector; ++ private double moveStartX; ++ private double moveStartY; ++ private double moveStartZ; ++ ++ public final Vec3D getMoveVector() { ++ return this.moveVector; ++ } ++ ++ public final double getMoveStartX() { ++ return this.moveStartX; ++ } ++ ++ public final double getMoveStartY() { ++ return this.moveStartY; ++ } ++ ++ public final double getMoveStartZ() { ++ return this.moveStartZ; ++ } ++ // Tuinity end - detailed watchdog information ++ ++ boolean collidedOnSomething; // Tuinity - optimise collisions ++ boolean requiredRelaxedCollisionCheck; // Tuinity - optimise collisions ++ + public void move(EnumMoveType enummovetype, Vec3D vec3d) { ++ // Tuinity start - detailed watchdog information ++ com.tuinity.tuinity.util.TickThread.ensureTickThread("Cannot move an entity off-main"); ++ synchronized (this.posLock) { ++ this.moveStartX = this.locX(); ++ this.moveStartY = this.locY(); ++ this.moveStartZ = this.locZ(); ++ this.moveVector = vec3d; ++ } ++ this.collidedOnSomething = false; // Tuinity - optimise collisions ++ try { ++ // Tuinity end - detailed watchdog information + if (this.noclip) { + this.a(this.getBoundingBox().b(vec3d)); + this.recalcPosition(); +@@ -629,7 +674,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + // Paper end + + vec3d = this.a(vec3d, enummovetype); +- Vec3D vec3d1 = this.e(vec3d); ++ Vec3D vec3d1 = !this.requiredRelaxedCollisionCheck ? this.performCollision(vec3d) : this.performCollision(vec3d, 0.0625); // Tuinity - optimise collisions ++ this.collidedOnSomething = !vec3d.equals(vec3d1); // Tuinity - optimise collisions + + if (vec3d1.g() > 1.0E-7D) { + this.a(this.getBoundingBox().b(vec3d1)); +@@ -761,6 +807,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + + this.world.getMethodProfiler().exit(); + } ++ // Tuinity start - detailed watchdog information ++ } finally { ++ synchronized (this.posLock) { // Tuinity ++ this.moveVector = null; ++ } // Tuinity ++ } ++ // Tuinity end - detailed watchdog information + } + + protected BlockPosition ag() { +@@ -841,6 +894,138 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + return d0; + } + ++ // Tuinity start - optimise entity movement ++ private static double performCollisionsX(AxisAlignedBB currentBoundingBox, double value, List potentialCollisions) { ++ for (int i = 0, len = potentialCollisions.size(); i < len; ++i) { ++ if (Math.abs(value) < 1.0E-7) { ++ return 0.0; ++ } ++ AxisAlignedBB target = potentialCollisions.get(i); ++ value = target.collideX(currentBoundingBox, value); ++ } ++ ++ return value; ++ } ++ ++ private static double performCollisionsY(AxisAlignedBB currentBoundingBox, double value, List potentialCollisions) { ++ for (int i = 0, len = potentialCollisions.size(); i < len; ++i) { ++ if (Math.abs(value) < 1.0E-7) { ++ return 0.0; ++ } ++ AxisAlignedBB target = potentialCollisions.get(i); ++ value = target.collideY(currentBoundingBox, value); ++ } ++ ++ return value; ++ } ++ ++ private static double performCollisionsZ(AxisAlignedBB currentBoundingBox, double value, List potentialCollisions) { ++ for (int i = 0, len = potentialCollisions.size(); i < len; ++i) { ++ if (Math.abs(value) < 1.0E-7) { ++ return 0.0; ++ } ++ AxisAlignedBB target = potentialCollisions.get(i); ++ value = target.collideZ(currentBoundingBox, value); ++ } ++ ++ return value; ++ } ++ ++ private static Vec3D performCollisions(Vec3D moveVector, AxisAlignedBB axisalignedbb, List potentialCollisions) { ++ double x = moveVector.x; ++ double y = moveVector.y; ++ double z = moveVector.z; ++ ++ if (y != 0.0) { ++ y = Entity.performCollisionsY(axisalignedbb, y, potentialCollisions); ++ if (y != 0.0) { ++ axisalignedbb = axisalignedbb.offsetY(y); ++ } ++ } ++ ++ boolean xSmaller = Math.abs(x) < Math.abs(z); ++ ++ if (xSmaller && z != 0.0) { ++ z = Entity.performCollisionsZ(axisalignedbb, z, potentialCollisions); ++ if (z != 0.0) { ++ axisalignedbb = axisalignedbb.offsetZ(z); ++ } ++ } ++ ++ if (x != 0.0) { ++ x = Entity.performCollisionsX(axisalignedbb, x, potentialCollisions); ++ if (!xSmaller && x != 0.0) { ++ axisalignedbb = axisalignedbb.offsetX(x); ++ } ++ } ++ ++ if (!xSmaller && z != 0.0) { ++ z = Entity.performCollisionsZ(axisalignedbb, z, potentialCollisions); ++ } ++ ++ return new Vec3D(x, y, z); ++ } ++ ++ Vec3D performCollision(Vec3D moveVector) { ++ return this.performCollision(moveVector, 0.0); ++ } ++ Vec3D performCollision(Vec3D moveVector, double contractAmount) { ++ if (moveVector.getX() == 0.0 && moveVector.getY() == 0.0 && moveVector.getZ() == 0.0) { ++ return moveVector; ++ } ++ ++ WorldServer world = ((WorldServer)this.world); ++ AxisAlignedBB currBoundingBox = contractAmount == 0.0 ? this.getBoundingBox() : this.getBoundingBox().grow(-contractAmount); ++ ++ List potentialCollisions = com.tuinity.tuinity.util.CachedLists.getTempCollisionList(); ++ try { ++ // We take a fat guess that we actually need to do the step height checks. ++ // So we collect all of the AABB's we would ever need into one list, and use that list ++ // for every collision check we want. ++ AxisAlignedBB collisionBox; ++ double stepHeight = (double) this.getStepHeight(); ++ if ((this.onGround || (moveVector.y < 0.0)) && (moveVector.x != 0.0 || moveVector.z != 0.0)) { ++ // don't bother getting the collisions if we don't need them. ++ if (moveVector.y <= 0.0) { ++ collisionBox = currBoundingBox.expand(moveVector.x, moveVector.y, moveVector.z).expandUpwards(stepHeight); ++ } else { ++ collisionBox = currBoundingBox.expand(moveVector.x, Math.max(stepHeight, moveVector.y), moveVector.z); ++ } ++ } else { ++ collisionBox = currBoundingBox.expand(moveVector.x, moveVector.y, moveVector.z); ++ } ++ world.getCollisions(this, collisionBox, potentialCollisions, false); ++ ++ Vec3D limitedMoveVector = Entity.performCollisions(moveVector, currBoundingBox, potentialCollisions); ++ ++ if (stepHeight > 0.0 ++ && (this.onGround || (limitedMoveVector.y != moveVector.y && moveVector.y < 0.0)) ++ && (limitedMoveVector.x != moveVector.x || limitedMoveVector.z != moveVector.z)) { ++ Vec3D vec3d2 = Entity.performCollisions(new Vec3D(moveVector.x, stepHeight, moveVector.z), currBoundingBox, potentialCollisions); ++ Vec3D vec3d3 = Entity.performCollisions(new Vec3D(0.0, stepHeight, 0.0), currBoundingBox.expand(moveVector.x, 0.0, moveVector.z), potentialCollisions); ++ ++ if (vec3d3.y < stepHeight) { ++ Vec3D vec3d4 = Entity.performCollisions(new Vec3D(moveVector.x, 0.0D, moveVector.z), currBoundingBox.offset(vec3d3), potentialCollisions); ++ ++ if (Entity.getXZSquared(vec3d4) > Entity.getXZSquared(vec3d2)) { ++ vec3d2 = vec3d4; ++ } ++ } ++ ++ if (Entity.getXZSquared(vec3d2) > Entity.getXZSquared(limitedMoveVector)) { ++ return vec3d2.add(Entity.performCollisions(new Vec3D(0.0D, -vec3d2.y + moveVector.y, 0.0D), currBoundingBox.offset(vec3d2), potentialCollisions)); ++ } ++ ++ return limitedMoveVector; ++ } else { ++ return limitedMoveVector; ++ } ++ } finally { ++ com.tuinity.tuinity.util.CachedLists.returnTempCollisionList(potentialCollisions); ++ } ++ } ++ // Tuinity end - optimise entity movement ++ + private Vec3D e(Vec3D vec3d) { + AxisAlignedBB axisalignedbb = this.getBoundingBox(); + VoxelShapeCollision voxelshapecollision = VoxelShapeCollision.a(this); +@@ -874,6 +1059,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + return vec3d1; + } + ++ public static double getXZSquared(Vec3D vec3d) { return Entity.b(vec3d); } // Tuinity - OBFHELPER + public static double b(Vec3D vec3d) { + return vec3d.x * vec3d.x + vec3d.z * vec3d.z; + } +@@ -1138,8 +1324,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + } + + public final AxisAlignedBB getCollisionBox(){return au();} //Paper - OBFHELPER +- @Nullable +- public AxisAlignedBB au() { ++ @Nullable public final AxisAlignedBB getHardCollisionBox() { return this.au(); } // Tuinity - OBFHELPER ++ @Nullable public AxisAlignedBB au() { // Tuinity - OBFHELPER + return null; + } + +@@ -2057,8 +2243,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + } + + public final AxisAlignedBB getHardCollisionBox(Entity entity){ return j(entity);}//Paper - OBFHELPER +- @Nullable +- public AxisAlignedBB j(Entity entity) { ++ @Nullable public AxisAlignedBB getHardCollisionBoxWith(Entity entity) { return this.j(entity); } // Tuinity - OBFHELPER ++ @Nullable public AxisAlignedBB j(Entity entity) { // Tuinity - OBFHELPER + return null; + } + +@@ -3388,12 +3574,16 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + return new Vec3D(this.locX, this.locY, this.locZ); + } + ++ public final Object posLock = new Object(); // Tuinity - log detailed entity tick information ++ + public Vec3D getMot() { + return this.mot; + } + + public void setMot(Vec3D vec3d) { ++ synchronized (this.posLock) { // Tuinity + this.mot = vec3d; ++ } // Tuinity + } + + public void setMot(double d0, double d1, double d2) { +@@ -3449,9 +3639,11 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + this.setBoundingBox(new AxisAlignedBB(d0 - (double) f, d1, d2 - (double) f, d0 + (double) f, d1 + (double) f1, d2 + (double) f)); + } + // Paper end ++ synchronized (this.posLock) { // Tuinity + this.locX = d0; + this.locY = d1; + this.locZ = d2; ++ } // Tuinity + } + + public void checkDespawn() {} +diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java +index 3fc2360a1..a245cfab6 100644 +--- a/src/main/java/net/minecraft/server/EntityLiving.java ++++ b/src/main/java/net/minecraft/server/EntityLiving.java +@@ -2682,7 +2682,11 @@ public abstract class EntityLiving extends Entity { + return; + } + // Paper - end don't run getEntities if we're not going to use its result +- List list = this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.a(this)); ++ // Tuinity start - reduce memory allocation from collideNearby ++ List list = com.tuinity.tuinity.util.CachedLists.getTempGetEntitiesList(); ++ this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.a(this), list); ++ try { ++ // Tuinity end - reduce memory allocation from collideNearby + + if (!list.isEmpty()) { + // Paper - move up +@@ -2711,6 +2715,9 @@ public abstract class EntityLiving extends Entity { + this.C(entity); + } + } ++ } finally { // Tuinity start - reduce memory allocation from collideNearby ++ com.tuinity.tuinity.util.CachedLists.returnTempGetEntitiesList(list); ++ } // Tuinity end - reduce memory allocation from collideNearby + + } + +diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java +index 5cc89c0cf..1bd703848 100644 +--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java ++++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java +@@ -72,6 +72,7 @@ public class EntityTrackerEntry { + + public final void tick() { this.a(); } // Paper - OBFHELPER + public void a() { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Tracker update"); // Tuinity + List list = this.tracker.getPassengers(); + + if (!list.equals(this.p)) { +diff --git a/src/main/java/net/minecraft/server/HeightMap.java b/src/main/java/net/minecraft/server/HeightMap.java +index 29cb545a8..aa7339610 100644 +--- a/src/main/java/net/minecraft/server/HeightMap.java ++++ b/src/main/java/net/minecraft/server/HeightMap.java +@@ -119,6 +119,7 @@ public class HeightMap { + } + } + ++ public final int get(int x, int z) { return this.a(x, z); } // Tuinity - OBFHELPER + public int a(int i, int j) { + return this.a(c(i, j)); + } +@@ -154,7 +155,7 @@ public class HeightMap { + private final String g; + private final HeightMap.Use h; + private final Predicate i; +- private static final Map j = (Map) SystemUtils.a((Object) Maps.newHashMap(), (hashmap) -> { ++ private static final Map j = SystemUtils.a(Maps.newHashMap(), (hashmap) -> { // Tuinity - decompile fix + HeightMap.Type[] aheightmap_type = values(); + int i = aheightmap_type.length; + +@@ -166,7 +167,7 @@ public class HeightMap { + + }); + +- private Type(String s, HeightMap.Use heightmap_use, Predicate predicate) { ++ private Type(String s, HeightMap.Use heightmap_use, Predicate predicate) { // Tuinity - decompile fix + this.g = s; + this.h = heightmap_use; + this.i = predicate; +diff --git a/src/main/java/net/minecraft/server/IBlockData.java b/src/main/java/net/minecraft/server/IBlockData.java +index b39554faf..41cac2741 100644 +--- a/src/main/java/net/minecraft/server/IBlockData.java ++++ b/src/main/java/net/minecraft/server/IBlockData.java +@@ -26,6 +26,18 @@ public class IBlockData extends BlockDataAbstract implements + private final boolean isTicking; // Paper + private final boolean canOcclude; // Paper + ++ // Tuinity start - optimise getType calls ++ org.bukkit.Material cachedMaterial; ++ ++ public final org.bukkit.Material getBukkitMaterial() { ++ if (this.cachedMaterial == null) { ++ this.cachedMaterial = org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(this.getBlock()); ++ } ++ ++ return this.cachedMaterial; ++ } ++ // Tuinity end - optimise getType calls ++ + public IBlockData(Block block, ImmutableMap, Comparable> immutablemap) { + super(block, immutablemap); + this.d = block.a(this); +diff --git a/src/main/java/net/minecraft/server/ICollisionAccess.java b/src/main/java/net/minecraft/server/ICollisionAccess.java +index 63dd5e98b..2001c2a39 100644 +--- a/src/main/java/net/minecraft/server/ICollisionAccess.java ++++ b/src/main/java/net/minecraft/server/ICollisionAccess.java +@@ -43,6 +43,11 @@ public interface ICollisionAccess extends IBlockAccess { + } + + default boolean a(@Nullable Entity entity, AxisAlignedBB axisalignedbb, Set set) { ++ // Tuinity start - allow overriding in WorldServer ++ return this.getCubes(entity, axisalignedbb, set); ++ } ++ default boolean getCubes(@Nullable Entity entity, AxisAlignedBB axisalignedbb, Set set) { ++ // Tuinity end - allow overriding in WorldServer + try { if (entity != null) entity.collisionLoadChunks = true; // Paper + // Paper start - reduce stream usage + java.util.List blockCollisions = getBlockCollision(entity, axisalignedbb, true); +@@ -96,10 +101,9 @@ public interface ICollisionAccess extends IBlockAccess { + if (entity != null) { + // Paper end + //VoxelShape voxelshape1 = ICollisionAccess.this.getWorldBorder().a(); // Paper - only make if collides +- boolean flag = !ICollisionAccess.this.getWorldBorder().isInBounds(entity.getBoundingBox().shrink(1.0E-7D)); // Paper +- boolean flag1 = !ICollisionAccess.this.getWorldBorder().isInBounds(entity.getBoundingBox().g(1.0E-7D)); // Paper ++ // Tuinity - optimise voxelshapes + +- if (!flag && flag1) { ++ if (ICollisionAccess.this.getWorldBorder().isCollidingOnBorderEdge(entity.getBoundingBox())) { // Tuinity - optimise voxelshapes + collisions.add(ICollisionAccess.this.getWorldBorder().a());// Paper + if (returnFast) return collisions; + } +@@ -112,26 +116,15 @@ public interface ICollisionAccess extends IBlockAccess { + int j2 = cursorposition.e(); + + if (j2 != 3) { +- // Paper start - ensure we don't load chunks +- //int k2 = k1 >> 4; +- //int l2 = i2 >> 4; +- boolean far = entity != null && MCUtil.distanceSq(entity.locX(), y, entity.locZ(), x, y, z) > 14; +- blockposition_mutableblockposition.setValues(x, y, z); +- +- boolean isRegionLimited = ICollisionAccess.this instanceof RegionLimitedWorldAccess; +- IBlockData iblockdata = isRegionLimited ? Blocks.VOID_AIR.getBlockData() : ((!far && entity instanceof EntityPlayer) || (entity != null && entity.collisionLoadChunks) +- ? ICollisionAccess.this.getType(blockposition_mutableblockposition) +- : ICollisionAccess.this.getTypeIfLoaded(blockposition_mutableblockposition) +- ); +- if (iblockdata == null) { +- if (!(entity instanceof EntityPlayer) || entity.world.paperConfig.preventMovingIntoUnloadedChunks) { +- collisions.add(VoxelShapes.of(far ? entity.getBoundingBox() : new AxisAlignedBB(new BlockPosition(x, y, z)))); +- if (returnFast) return collisions; +- } +- } else { +- //blockposition_mutableblockposition.d(k1, l1, i2); // moved up +- //IBlockData iblockdata = iblockaccess.getType(blockposition_mutableblockposition); // moved up +- // Paper end ++ // Tuinity start - revert to vanilla ++ int k2 = k1 >> 4; ++ int l2 = i2 >> 4; ++ IBlockAccess iblockaccess = ICollisionAccess.this.c(k2, l2); ++ ++ if (iblockaccess != null) { ++ blockposition_mutableblockposition.d(k1, l1, i2); ++ IBlockData iblockdata = iblockaccess.getType(blockposition_mutableblockposition); ++ // Tuinity end - revert to vanilla + + if (!iblockdata.isAir() && (j2 != 1 || iblockdata.f()) && (j2 != 2 || iblockdata.getBlock() == Blocks.MOVING_PISTON)) { // Paper - fast track air + VoxelShape voxelshape2 = iblockdata.b((IBlockAccess) ICollisionAccess.this, blockposition_mutableblockposition, voxelshapecollision); +diff --git a/src/main/java/net/minecraft/server/LightEngineStorage.java b/src/main/java/net/minecraft/server/LightEngineStorage.java +index f2575fb69..89985a61e 100644 +--- a/src/main/java/net/minecraft/server/LightEngineStorage.java ++++ b/src/main/java/net/minecraft/server/LightEngineStorage.java +@@ -23,7 +23,8 @@ public abstract class LightEngineStorage> e + protected final M f; protected final M updating; // Paper - diff on change, should be "updating" + protected final LongSet g = new LongOpenHashSet(); + protected final LongSet h = new LongOpenHashSet(); LongSet dirty = h; // Paper - OBFHELPER +- protected final Long2ObjectMap i = Long2ObjectMaps.synchronize(new Long2ObjectOpenHashMap()); ++ protected final Long2ObjectOpenHashMap i_synchronized_map_real = new Long2ObjectOpenHashMap<>(); // Tuinity - store wrapped map, we need fastIterator ++ protected final Long2ObjectMap i = Long2ObjectMaps.synchronize(this.i_synchronized_map_real); // Tuinity - store wrapped map, we need fastIterator + private final LongSet n = new LongOpenHashSet(); + private final LongSet o = new LongOpenHashSet(); + protected volatile boolean j; +@@ -246,7 +247,7 @@ public abstract class LightEngineStorage> e + + this.o.clear(); + this.j = false; +- ObjectIterator> objectiterator = Long2ObjectMaps.fastIterator(this.i); // Paper ++ ObjectIterator objectiterator = this.i_synchronized_map_real.long2ObjectEntrySet().fastIterator(); // Tuinity - use fast iterator to reduce entry creation - remove paper diff, it's ineffective + + Entry entry; + long j; +diff --git a/src/main/java/net/minecraft/server/MCUtil.java b/src/main/java/net/minecraft/server/MCUtil.java +index 87d580021..973bdd25c 100644 +--- a/src/main/java/net/minecraft/server/MCUtil.java ++++ b/src/main/java/net/minecraft/server/MCUtil.java +@@ -48,6 +48,20 @@ public final class MCUtil { + new ThreadFactoryBuilder().setNameFormat("Paper Object Cleaner").build() + ); + ++ // Tuinity start ++ private static org.bukkit.entity.HumanEntity[] EMPTY_HUMAN_ARRAY = new org.bukkit.entity.HumanEntity[0]; ++ public static void closeInventory(IInventory inventory, org.bukkit.event.inventory.InventoryCloseEvent.Reason reason) { ++ List viewers = inventory.getViewers(); ++ if (viewers.isEmpty()) { ++ return; ++ } ++ ++ for (org.bukkit.entity.HumanEntity viewer : viewers.toArray(EMPTY_HUMAN_ARRAY)) { ++ viewer.closeInventory(reason); ++ } ++ } ++ // Tuinity end ++ + public static final long INVALID_CHUNK_KEY = getCoordinateKey(Integer.MAX_VALUE, Integer.MAX_VALUE); + + +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index 4ab657903..3c9392077 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -954,7 +954,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant worlds = (List)this.getWorlds(); // PaperWorldMap makes this a list. ++ for (int i = 0; i < worlds.size(); ++i) { ++ WorldServer world = worlds.get(i); ++ long currTime = System.nanoTime(); ++ if (currTime - world.lastMidTickExecuteFailure <= TASK_EXECUTION_FAILURE_BACKOFF) { ++ continue; ++ } ++ if (!world.getChunkProvider().runTasks()) { ++ // we need to back off if this fails ++ world.lastMidTickExecuteFailure = currTime; ++ } else { ++ executed = true; ++ } ++ } ++ ++ return executed; ++ } ++ ++ public final void executeMidTickTasks() { ++ org.spigotmc.AsyncCatcher.catchOp("mid tick chunk task execution"); ++ long startTime = System.nanoTime(); ++ if ((startTime - lastMidTickExecute) <= CHUNK_TASK_QUEUE_BACKOFF_MIN_TIME || (startTime - lastMidTickExecuteFailure) <= TASK_EXECUTION_FAILURE_BACKOFF) { ++ // it's shown to be bad to constantly hit the queue (chunk loads slow to a crawl), even if no tasks are executed. ++ // so, backoff to prevent this ++ return; ++ } ++ ++ co.aikar.timings.MinecraftTimings.midTickChunkTasks.startTiming(); ++ try { ++ for (;;) { ++ boolean moreTasks = this.tickMidTickTasks(); ++ long currTime = System.nanoTime(); ++ long diff = currTime - startTime; ++ ++ if (!moreTasks || diff >= MAX_CHUNK_EXEC_TIME) { ++ if (!moreTasks) { ++ lastMidTickExecuteFailure = currTime; ++ } ++ ++ // note: negative values reduce the time ++ long overuse = diff - MAX_CHUNK_EXEC_TIME; ++ if (overuse >= (10L * 1000L * 1000L)) { // 10ms ++ // make sure something like a GC or dumb plugin doesn't screw us over... ++ overuse = 10L * 1000L * 1000L; // 10ms ++ } ++ ++ double overuseCount = (double)overuse/(double)MAX_CHUNK_EXEC_TIME; ++ long extraSleep = (long)Math.round(overuseCount*CHUNK_TASK_QUEUE_BACKOFF_MIN_TIME); ++ ++ lastMidTickExecute = currTime + extraSleep; ++ return; ++ } ++ } ++ } finally { ++ co.aikar.timings.MinecraftTimings.midTickChunkTasks.stopTiming(); ++ } ++ } ++ // Tuinity end - execute chunk tasks mid tick ++ + private void executeModerately() { + this.executeAll(); + java.util.concurrent.locks.LockSupport.parkNanos("executing tasks", 1000L); +@@ -1061,22 +1133,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant { +- midTickLoadChunks(); // will only do loads since we are still considered !canSleepForTick ++ // Tuinity - replace logic + return !this.canOversleep(); + }); + isOversleep = false;MinecraftTimings.serverOversleep.stopTiming(); +@@ -1233,6 +1291,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant // Spigot - Spigot > // CraftBukkit - cb > vanilla! ++ return "Tuinity"; // Tuinity //Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! + } + + public CrashReport b(CrashReport crashreport) { +diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java +index 32886109d..5578818a0 100644 +--- a/src/main/java/net/minecraft/server/NetworkManager.java ++++ b/src/main/java/net/minecraft/server/NetworkManager.java +@@ -70,6 +70,39 @@ public class NetworkManager extends SimpleChannelInboundHandler> { + EnumProtocol protocol; + // Paper end + ++ // Tuinity start - allow controlled flushing ++ volatile boolean canFlush = true; ++ private final java.util.concurrent.atomic.AtomicInteger packetWrites = new java.util.concurrent.atomic.AtomicInteger(); ++ private int flushPacketsStart; ++ private final Object flushLock = new Object(); ++ ++ void disableAutomaticFlush() { ++ synchronized (this.flushLock) { ++ this.flushPacketsStart = this.packetWrites.get(); // must be volatile and before canFlush = false ++ this.canFlush = false; ++ } ++ } ++ ++ void enableAutomaticFlush() { ++ synchronized (this.flushLock) { ++ this.canFlush = true; ++ if (this.packetWrites.get() != this.flushPacketsStart) { // must be after canFlush = true ++ this.flush(); // only make the flush call if we need to ++ } ++ } ++ } ++ ++ private final void flush() { ++ if (this.channel.eventLoop().inEventLoop()) { ++ this.channel.flush(); ++ } else { ++ this.channel.eventLoop().execute(() -> { ++ this.channel.flush(); ++ }); ++ } ++ } ++ // Tuinity end - allow controlled flushing ++ + public NetworkManager(EnumProtocolDirection enumprotocoldirection) { + this.h = enumprotocoldirection; + } +@@ -217,7 +250,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { + MCUtil.isMainThread() && packet.isReady() && this.packetQueue.isEmpty() && + (packet.getExtraPackets() == null || packet.getExtraPackets().isEmpty()) + ))) { +- this.dispatchPacket(packet, genericfuturelistener); ++ this.writePacket(packet, genericfuturelistener, null); // Tuinity + return; + } + // write the packets to the queue, then flush - antixray hooks there already +@@ -243,6 +276,14 @@ public class NetworkManager extends SimpleChannelInboundHandler> { + + private void dispatchPacket(Packet packet, @Nullable GenericFutureListener> genericFutureListener) { this.b(packet, genericFutureListener); } // Paper - OBFHELPER + private void b(Packet packet, @Nullable GenericFutureListener> genericfuturelistener) { ++ // Tuinity start - add flush parameter ++ this.writePacket(packet, genericfuturelistener, Boolean.TRUE); ++ } ++ private void writePacket(Packet packet, @Nullable GenericFutureListener> genericfuturelistener, Boolean flushConditional) { ++ this.packetWrites.getAndIncrement(); // must be befeore using canFlush ++ boolean effectiveFlush = flushConditional == null ? this.canFlush : flushConditional.booleanValue(); ++ final boolean flush = effectiveFlush || packet instanceof PacketPlayOutKeepAlive || packet instanceof PacketPlayOutKickDisconnect; // no delay for certain packets ++ // Tuinity end - add flush parameter + EnumProtocol enumprotocol = EnumProtocol.a(packet); + EnumProtocol enumprotocol1 = (EnumProtocol) this.channel.attr(NetworkManager.c).get(); + +@@ -265,7 +306,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { + try { + // Paper end + +- ChannelFuture channelfuture = this.channel.writeAndFlush(packet); ++ ChannelFuture channelfuture = (flush) ? this.channel.writeAndFlush(packet) : this.channel.write(packet); // Tuinity - add flush parameter + + if (genericfuturelistener != null) { + channelfuture.addListener(genericfuturelistener); +@@ -297,7 +338,7 @@ public class NetworkManager extends SimpleChannelInboundHandler> { + } + try { + // Paper end +- ChannelFuture channelfuture1 = this.channel.writeAndFlush(packet); ++ ChannelFuture channelfuture1 = (flush) ? this.channel.writeAndFlush(packet) : this.channel.write(packet); // Tuinity - add flush parameter + + + if (genericfuturelistener != null) { +@@ -340,6 +381,8 @@ public class NetworkManager extends SimpleChannelInboundHandler> { + } + private boolean processQueue() { + if (this.packetQueue.isEmpty()) return true; ++ final boolean needsFlush = this.canFlush; // Tuinity - make only one flush call per sendPacketQueue() call ++ boolean hasWrotePacket = false; + // If we are on main, we are safe here in that nothing else should be processing queue off main anymore + // But if we are not on main due to login/status, the parent is synchronized on packetQueue + java.util.Iterator iterator = this.packetQueue.iterator(); +@@ -347,16 +390,22 @@ public class NetworkManager extends SimpleChannelInboundHandler> { + NetworkManager.QueuedPacket queued = iterator.next(); // poll -> peek + + // Fix NPE (Spigot bug caused by handleDisconnection()) +- if (queued == null) { ++ if (false && queued == null) { // Tuinity - diff on change, this logic is redundant: iterator guarantees ret of an element - on change, hook the flush logic here + return true; + } + + Packet packet = queued.getPacket(); + if (!packet.isReady()) { ++ // Tuinity start - make only one flush call per sendPacketQueue() call ++ if (hasWrotePacket && (needsFlush || this.canFlush)) { ++ this.flush(); ++ } ++ // Tuinity end - make only one flush call per sendPacketQueue() call + return false; + } else { + iterator.remove(); +- this.dispatchPacket(packet, queued.getGenericFutureListener()); ++ this.writePacket(packet, queued.getGenericFutureListener(), (!iterator.hasNext() && (needsFlush || this.canFlush)) ? Boolean.TRUE : Boolean.FALSE); // Tuinity - make only one flush call per sendPacketQueue() call ++ hasWrotePacket = true; // Tuinity - make only one flush call per sendPacketQueue() call + } + } + return true; +diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java +index 9b608d738..bf24cb0d2 100644 +--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java ++++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java +@@ -19,7 +19,7 @@ public class PacketPlayOutMapChunk implements Packet { + @Nullable + private BiomeStorage e; + private byte[] f; private byte[] getData() { return this.f; } // Paper - OBFHELPER +- private List g; ++ private List g; private List getTileEntityData() { return this.g; } // Tuinity - OBFHELPER + private boolean h; + private volatile boolean ready; // Paper - Async-Anti-Xray - Ready flag for the network manager + +@@ -31,14 +31,16 @@ public class PacketPlayOutMapChunk implements Packet { + + // Paper start + private final java.util.List extraPackets = new java.util.ArrayList<>(); +- private static final int TE_LIMIT = Integer.getInteger("Paper.excessiveTELimit", 750); ++ private static final int TE_LIMIT = Integer.getInteger("tuinity.excessive-te-limit", 750); // Tuinity - handle oversized chunk data packets more robustly ++ private static final int TE_SPLIT_LIMIT = Math.max(4096 + 1, Integer.getInteger("tuinity.te-split-limit", 15_000)); // Tuinity - handle oversized chunk data packets more robustly ++ private boolean mustSplit; // Tuinity - handle oversized chunk data packets more robustly + + @Override + public java.util.List getExtraPackets() { + return extraPackets; + } + // Paper end +- public PacketPlayOutMapChunk(Chunk chunk, int i) { ++ public PacketPlayOutMapChunk(Chunk chunk, int i) { final int chunkSectionBitSet = i; // Tuinity - handle oversized chunk data packets more robustly + ChunkPacketInfo chunkPacketInfo = chunk.world.chunkPacketBlockController.getChunkPacketInfo(this, chunk, i); // Paper - Anti-Xray - Add chunk packet info + ChunkCoordIntPair chunkcoordintpair = chunk.getPos(); + +@@ -46,31 +48,12 @@ public class PacketPlayOutMapChunk implements Packet { + this.b = chunkcoordintpair.z; + this.h = i == 65535; + this.d = new NBTTagCompound(); +- Iterator iterator = chunk.f().iterator(); +- +- Entry entry; +- +- while (iterator.hasNext()) { +- entry = (Entry) iterator.next(); +- if (((HeightMap.Type) entry.getKey()).b()) { +- this.d.set(((HeightMap.Type) entry.getKey()).a(), new NBTTagLongArray(((HeightMap) entry.getValue()).a())); +- } +- } +- +- if (this.h) { +- this.e = chunk.getBiomeIndex().b(); +- } +- +- this.f = new byte[this.a(chunk, i)]; +- // Paper start - Anti-Xray - Add chunk packet info +- if (chunkPacketInfo != null) { +- chunkPacketInfo.setData(this.getData()); +- } +- this.c = this.writeChunk(new PacketDataSerializer(this.j()), chunk, i, chunkPacketInfo); +- // Paper end ++ // Tuinity start - improve oversized chunk data packet handling ++ // move the TE code up here so we can decide whether to split before writing + this.g = Lists.newArrayList(); +- iterator = chunk.getTileEntities().entrySet().iterator(); +- int totalTileEntities = 0; // Paper ++ Iterator iterator = chunk.getTileEntities().entrySet().iterator(); ++ Entry entry; ++ int totalTileEntities = 0; // Paper // Tuinity + + while (iterator.hasNext()) { + entry = (Entry) iterator.next(); +@@ -79,14 +62,23 @@ public class PacketPlayOutMapChunk implements Packet { + int j = blockposition.getY() >> 4; + + if (this.f() || (i & 1 << j) != 0) { +- // Paper start - improve oversized chunk data packet handling +- if (++totalTileEntities > TE_LIMIT) { ++ // Paper start - send signs separately ++ // Tuinity start - improve oversized chunk data packet handling ++ ++totalTileEntities; ++ if (totalTileEntities > TE_SPLIT_LIMIT) { ++ this.mustSplit = true; ++ this.getTileEntityData().clear(); ++ this.extraPackets.clear(); ++ break; ++ } ++ if (totalTileEntities > TE_LIMIT) { + PacketPlayOutTileEntityData updatePacket = tileentity.getUpdatePacket(); + if (updatePacket != null) { + this.extraPackets.add(updatePacket); + continue; + } + } ++ // Tuinity end + // Paper end + NBTTagCompound nbttagcompound = tileentity.b(); + if (tileentity instanceof TileEntitySkull) { TileEntitySkull.sanitizeTileEntityUUID(nbttagcompound); } // Paper +@@ -94,7 +86,70 @@ public class PacketPlayOutMapChunk implements Packet { + this.g.add(nbttagcompound); + } + } ++ iterator = chunk.f().iterator(); ++ // Tuinity end ++ ++ while (iterator.hasNext()) { ++ entry = (Entry) iterator.next(); ++ if (((HeightMap.Type) entry.getKey()).b()) { ++ this.d.set(((HeightMap.Type) entry.getKey()).a(), new NBTTagLongArray(((HeightMap) entry.getValue()).a())); ++ } ++ } ++ ++ if (this.h) { ++ this.e = chunk.getBiomeIndex().b(); ++ } ++ ++ this.f = new byte[this.a(chunk, i)]; ++ // Paper start - Anti-Xray - Add chunk packet info ++ if (chunkPacketInfo != null) { ++ chunkPacketInfo.setData(this.getData()); ++ } ++ this.c = this.writeChunk(new PacketDataSerializer(this.j()), chunk, i, chunkPacketInfo); ++ // Paper end ++ // Tuinity start - improve oversized chunk data packet handling ++ // move the TE code up here so we can decide whether to split before writing ++// this.g = Lists.newArrayList(); ++// iterator = chunk.getTileEntities().entrySet().iterator(); ++// int totalTileEntities = 0; // Paper ++// ++// while (iterator.hasNext()) { ++// entry = (Entry) iterator.next(); ++// BlockPosition blockposition = (BlockPosition) entry.getKey(); ++// TileEntity tileentity = (TileEntity) entry.getValue(); ++// int j = blockposition.getY() >> 4; ++// ++// if (this.f() || (i & 1 << j) != 0) { ++// // Paper start - improve oversized chunk data packet handling ++// if (++totalTileEntities > TE_LIMIT) { ++// PacketPlayOutTileEntityData updatePacket = tileentity.getUpdatePacket(); ++// if (updatePacket != null) { ++// this.extraPackets.add(updatePacket); ++// continue; ++// } ++// } ++// // Paper end ++// NBTTagCompound nbttagcompound = tileentity.b(); ++// if (tileentity instanceof TileEntitySkull) { TileEntitySkull.sanitizeTileEntityUUID(nbttagcompound); } // Paper ++// ++// this.g.add(nbttagcompound); ++// } ++// } ++ // Tuinity end - improve oversized chunk data packet handling + chunk.world.chunkPacketBlockController.modifyBlocks(this, chunkPacketInfo); // Paper - Anti-Xray - Modify blocks ++ // Tuinity start - improve oversized chunk data packet handling ++ if (this.mustSplit) { ++ int chunkSectionBitSetCopy = chunkSectionBitSet; ++ for (int a = 0, len = Integer.bitCount(chunkSectionBitSet); a < len; ++a) { ++ int trailingBit = com.destroystokyo.paper.util.math.IntegerUtil.getTrailingBit(chunkSectionBitSetCopy); ++ int sectionIndex = Integer.numberOfTrailingZeros(trailingBit); ++ chunkSectionBitSetCopy ^= trailingBit; // move on to the next ++ ++ if (chunk.getSections()[sectionIndex] != null) { ++ this.extraPackets.add(new PacketPlayOutMapChunk(chunk, trailingBit)); ++ } ++ } ++ } // Tuinity end - improve oversized chunk data packet handling + } + + // Paper start - Async-Anti-Xray - Getter and Setter for the ready flag +@@ -185,7 +240,7 @@ public class PacketPlayOutMapChunk implements Packet { + for (int l = achunksection.length; k < l; ++k) { + ChunkSection chunksection = achunksection[k]; + +- if (chunksection != Chunk.a && (!this.f() || !chunksection.c()) && (i & 1 << k) != 0) { ++ if ((!this.mustSplit && chunksection != Chunk.a) && (!this.f() || !chunksection.c()) && (i & 1 << k) != 0) { // Tuinity - improve oversized chunk data packet handling + j |= 1 << k; + chunksection.writeChunkSection(packetdataserializer, chunkPacketInfo); // Paper - Anti-Xray - Add chunk packet info + } +@@ -202,7 +257,7 @@ public class PacketPlayOutMapChunk implements Packet { + for (int l = achunksection.length; k < l; ++k) { + ChunkSection chunksection = achunksection[k]; + +- if (chunksection != Chunk.a && (!this.f() || !chunksection.c()) && (i & 1 << k) != 0) { ++ if ((!this.mustSplit && chunksection != Chunk.a) && (!this.f() || !chunksection.c()) && (i & 1 << k) != 0) { + j += chunksection.j(); + } + } +diff --git a/src/main/java/net/minecraft/server/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java +index 4240ca81c..61e4dbcd4 100644 +--- a/src/main/java/net/minecraft/server/PathfinderNormal.java ++++ b/src/main/java/net/minecraft/server/PathfinderNormal.java +@@ -444,7 +444,11 @@ public class PathfinderNormal extends PathfinderAbstract { + } + + protected static PathType c(IBlockAccess iblockaccess, int i, int j, int k) { +- BlockPosition blockposition = new BlockPosition(i, j, k); ++ // Tuinity start - reduce blockpos allocation ++ BlockPosition.PooledBlockPosition blockposition = BlockPosition.PooledBlockPosition.acquire(); ++ try { ++ blockposition.setValues(i, j, k); ++ // Tuinity end - reduce blockpos allocation + IBlockData iblockdata = iblockaccess.getTypeIfLoaded(blockposition); // Paper + if (iblockdata == null) return PathType.BLOCKED; // Paper + Block block = iblockdata.getBlock(); +@@ -474,7 +478,7 @@ public class PathfinderNormal extends PathfinderAbstract { + } else if (block instanceof BlockLeaves) { + return PathType.LEAVES; + } else if (!block.a(TagsBlock.FENCES) && !block.a(TagsBlock.WALLS) && (!(block instanceof BlockFenceGate) || (Boolean) iblockdata.get(BlockFenceGate.OPEN))) { +- Fluid fluid = iblockaccess.getFluid(blockposition); ++ Fluid fluid = iblockdata.getFluid(); // Tuinity - optimise out world#getFluid + + return fluid.a(TagsFluid.WATER) ? PathType.WATER : (fluid.a(TagsFluid.LAVA) ? PathType.LAVA : (iblockdata.a(iblockaccess, blockposition, PathMode.LAND) ? PathType.OPEN : PathType.BLOCKED)); + } else { +@@ -483,5 +487,10 @@ public class PathfinderNormal extends PathfinderAbstract { + } else { + return PathType.TRAPDOOR; + } ++ // Tuinity start - reduce blockpos allocation ++ } finally { ++ blockposition.close(); ++ } ++ // Tuinity end - reduce blockpos allocation + } + } +diff --git a/src/main/java/net/minecraft/server/PlayerChunk.java b/src/main/java/net/minecraft/server/PlayerChunk.java +index 9c1be2e2d..7e24de37b 100644 +--- a/src/main/java/net/minecraft/server/PlayerChunk.java ++++ b/src/main/java/net/minecraft/server/PlayerChunk.java +@@ -504,6 +504,7 @@ public class PlayerChunk { + // Paper end - per player view distance + } + ++ public final CompletableFuture> getOrCreateFuture(ChunkStatus chunkstatus, PlayerChunkMap playerchunkmap) { return this.a(chunkstatus, playerchunkmap); } // Tuinity - OBFHELPER + public CompletableFuture> a(ChunkStatus chunkstatus, PlayerChunkMap playerchunkmap) { + int i = chunkstatus.c(); + CompletableFuture> completablefuture = (CompletableFuture) this.statusFutures.get(i); +@@ -559,6 +560,7 @@ public class PlayerChunk { + } + + protected void a(PlayerChunkMap playerchunkmap) { ++ com.tuinity.tuinity.util.TickThread.ensureTickThread("Async ticket level update"); // Tuinity + ChunkStatus chunkstatus = getChunkStatus(this.oldTicketLevel); + ChunkStatus chunkstatus1 = getChunkStatus(this.ticketLevel); + boolean flag = this.oldTicketLevel <= PlayerChunkMap.GOLDEN_TICKET; +@@ -568,7 +570,8 @@ public class PlayerChunk { + // CraftBukkit start + // ChunkUnloadEvent: Called before the chunk is unloaded: isChunkLoaded is still true and chunk can still be modified by plugins. + if (playerchunk_state.isAtLeast(PlayerChunk.State.BORDER) && !playerchunk_state1.isAtLeast(PlayerChunk.State.BORDER)) { +- this.getStatusFutureUncheckedMain(ChunkStatus.FULL).thenAccept((either) -> { // Paper - ensure main ++ this.getStatusFutureUnchecked(ChunkStatus.FULL).thenAccept((either) -> { // Paper - ensure main // Tuinity - is always on main ++ com.tuinity.tuinity.util.TickThread.ensureTickThread("Async full status chunk future completion"); // Tuinity + Chunk chunk = (Chunk)either.left().orElse(null); + if (chunk != null) { + playerchunkmap.callbackExecutor.execute(() -> { +@@ -633,7 +636,8 @@ public class PlayerChunk { + if (!flag2 && flag3) { + // Paper start - cache ticking ready status + int expectCreateCount = ++this.fullChunkCreateCount; +- this.fullChunkFuture = playerchunkmap.b(this); MCUtil.ensureMain(this.fullChunkFuture).thenAccept((either) -> { // Paper - ensure main ++ this.fullChunkFuture = playerchunkmap.b(this); this.fullChunkFuture.thenAccept((either) -> { // Paper - ensure main // Tuinity - always fired on main ++ com.tuinity.tuinity.util.TickThread.ensureTickThread("Async full chunk future completion"); // Tuinity + if (either.left().isPresent() && PlayerChunk.this.fullChunkCreateCount == expectCreateCount) { + // note: Here is a very good place to add callbacks to logic waiting on this. + Chunk fullChunk = either.left().get(); +@@ -664,7 +668,8 @@ public class PlayerChunk { + + if (!flag4 && flag5) { + // Paper start - cache ticking ready status +- this.tickingFuture = playerchunkmap.a(this); MCUtil.ensureMain(this.tickingFuture).thenAccept((either) -> { // Paper - ensure main ++ this.tickingFuture = playerchunkmap.a(this); this.tickingFuture.thenAccept((either) -> { // Paper - ensure main // Tuinity - always completed on main ++ com.tuinity.tuinity.util.TickThread.ensureTickThread("Async ticking chunk future completion"); // Tuinity + if (either.left().isPresent()) { + // note: Here is a very good place to add callbacks to logic waiting on this. + Chunk tickingChunk = either.left().get(); +@@ -695,12 +700,20 @@ public class PlayerChunk { + } + + // Paper start - cache ticking ready status +- this.entityTickingFuture = playerchunkmap.b(this.location); MCUtil.ensureMain(this.entityTickingFuture).thenAccept((either) -> { // Paper ensureMain ++ this.entityTickingFuture = playerchunkmap.b(this.location); this.entityTickingFuture.thenAccept((either) -> { // Paper ensureMain // Tuinity - always completed on main ++ com.tuinity.tuinity.util.TickThread.ensureTickThread("Async entity ticking chunk future completion"); // Tuinity + if (either.left().isPresent()) { + // note: Here is a very good place to add callbacks to logic waiting on this. + Chunk entityTickingChunk = either.left().get(); + PlayerChunk.this.isEntityTickingReady = true; +- ++ // Tuinity start - optimise chunk tick iteration ++ ChunkProviderServer chunkProvider = PlayerChunk.this.chunkMap.world.getChunkProvider(); ++ if (chunkProvider.isTickingChunks) { ++ chunkProvider.pendingEntityTickingChunkChanges.put(entityTickingChunk, true); ++ } else { ++ chunkProvider.entityTickingChunks.add(entityTickingChunk); ++ } ++ // Tuinity end - optimise chunk tick iteration + + + +@@ -712,6 +725,17 @@ public class PlayerChunk { + + if (flag6 && !flag7) { + this.entityTickingFuture.complete(PlayerChunk.UNLOADED_CHUNK); this.isEntityTickingReady = false; // Paper - cache chunk ticking stage ++ // Tuinity start - optimise chunk tick iteration ++ ChunkProviderServer chunkProvider = PlayerChunk.this.chunkMap.world.getChunkProvider(); ++ Chunk chunk = this.getFullChunkIfCached(); ++ if (chunk != null) { ++ if (chunkProvider.isTickingChunks) { ++ chunkProvider.pendingEntityTickingChunkChanges.put(chunk, false); ++ } else { ++ chunkProvider.entityTickingChunks.remove(chunk); ++ } ++ } ++ // Tuinity end - optimise chunk tick iteration + this.entityTickingFuture = PlayerChunk.UNLOADED_CHUNK_FUTURE; + } + // Paper start - raise IO/load priority if priority changes, use our preferred priority +@@ -737,7 +761,8 @@ public class PlayerChunk { + // CraftBukkit start + // ChunkLoadEvent: Called after the chunk is loaded: isChunkLoaded returns true and chunk is ready to be modified by plugins. + if (!playerchunk_state.isAtLeast(PlayerChunk.State.BORDER) && playerchunk_state1.isAtLeast(PlayerChunk.State.BORDER)) { +- this.getStatusFutureUncheckedMain(ChunkStatus.FULL).thenAccept((either) -> { // Paper - ensure main ++ this.getStatusFutureUnchecked(ChunkStatus.FULL).thenAccept((either) -> { // Paper - ensure main // Tuinity - is always on main ++ com.tuinity.tuinity.util.TickThread.ensureTickThread("Async full status chunk future completion"); // Tuinity + Chunk chunk = (Chunk)either.left().orElse(null); + if (chunk != null) { + playerchunkmap.callbackExecutor.execute(() -> { +diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java +index 8abf276a3..13f5857ae 100644 +--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java ++++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java +@@ -117,31 +117,28 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + // CraftBukkit start - recursion-safe executor for Chunk loadCallback() and unloadCallback() + public final CallbackExecutor callbackExecutor = new CallbackExecutor(); + public static final class CallbackExecutor implements java.util.concurrent.Executor, Runnable { +- +- // Paper start - replace impl with recursive safe multi entry queue +- // it's possible to schedule multiple tasks currently, so it's vital we change this impl +- // If we recurse into the executor again, we will append to another queue, ensuring task order consistency +- private java.util.ArrayDeque queued = new java.util.ArrayDeque<>(); ++ // Tuinity start - revert paper's change ++ private Runnable queued; + + @Override + public void execute(Runnable runnable) { + AsyncCatcher.catchOp("Callback Executor execute"); +- if (queued == null) { +- queued = new java.util.ArrayDeque<>(); ++ if (queued != null) { ++ MinecraftServer.LOGGER.fatal("Failed to schedule runnable", new IllegalStateException("Already queued")); // Paper - make sure this is printed ++ throw new IllegalStateException("Already queued"); + } +- queued.add(runnable); ++ queued = runnable; + } ++ // Tuinity end - revert paper's change + + @Override + public void run() { + AsyncCatcher.catchOp("Callback Executor run"); +- if (queued == null) { +- return; +- } +- java.util.ArrayDeque queue = queued; ++ // Tuinity start - revert paper's change ++ Runnable task = queued; + queued = null; +- Runnable task; +- while ((task = queue.pollFirst()) != null) { ++ if (task != null) { ++ // Tuinity end - revert paper's change + task.run(); + } + } +@@ -192,6 +189,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + // Paper end - no-tick view distance + + void addPlayerToDistanceMaps(EntityPlayer player) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Cannot update distance maps off of the main thread"); // Tuinity + int chunkX = MCUtil.getChunkCoordinate(player.locX()); + int chunkZ = MCUtil.getChunkCoordinate(player.locZ()); + // Note: players need to be explicitly added to distance maps before they can be updated +@@ -222,6 +220,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + } + + void removePlayerFromDistanceMaps(EntityPlayer player) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Cannot update distance maps off of the main thread"); // Tuinity + // Paper start - use distance map to optimise tracker + for (int i = 0, len = TRACKING_RANGE_TYPES.length; i < len; ++i) { + this.playerEntityTrackerTrackMaps[i].remove(player); +@@ -239,6 +238,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + } + + void updateMaps(EntityPlayer player) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Cannot update distance maps off of the main thread"); // Tuinity + int chunkX = MCUtil.getChunkCoordinate(player.locX()); + int chunkZ = MCUtil.getChunkCoordinate(player.locZ()); + // Note: players need to be explicitly added to distance maps before they can be updated +@@ -722,6 +722,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + + @Nullable + private PlayerChunk a(long i, int j, @Nullable PlayerChunk playerchunk, int k) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Chunk holder update"); // Tuinity + if (k > PlayerChunkMap.GOLDEN_TICKET && j > PlayerChunkMap.GOLDEN_TICKET) { + return playerchunk; + } else { +@@ -935,7 +936,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + } + + com.destroystokyo.paper.io.PaperFileIOThread.Holder.INSTANCE.scheduleSave(this.world, chunkPos.x, chunkPos.z, +- poiData, null, com.destroystokyo.paper.io.PrioritizedTaskQueue.LOW_PRIORITY); ++ poiData, null, com.destroystokyo.paper.io.PrioritizedTaskQueue.NORMAL_PRIORITY); // Tuinity - use normal priority + + if (!chunk.isNeedsSaving()) { + return; +@@ -969,7 +970,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + asyncSaveData = ChunkRegionLoader.getAsyncSaveData(this.world, chunk); + } + +- this.world.asyncChunkTaskManager.scheduleChunkSave(chunkPos.x, chunkPos.z, com.destroystokyo.paper.io.PrioritizedTaskQueue.LOW_PRIORITY, ++ this.world.asyncChunkTaskManager.scheduleChunkSave(chunkPos.x, chunkPos.z, com.destroystokyo.paper.io.PrioritizedTaskQueue.NORMAL_PRIORITY, // Tuinity - use normal priority + asyncSaveData, chunk); + + chunk.setLastSaved(this.world.getTime()); +@@ -1024,6 +1025,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + } + + protected boolean b() { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Cannot update visibleChunks off of the main thread"); // Tuinity + if (!this.updatingChunksModified) { + return false; + } else { +@@ -1201,7 +1203,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + } + // Paper end + this.mailboxWorldGen.a(ChunkTaskQueueSorter.a(playerchunk, runnable)); // CraftBukkit - decompile error +- }); ++ }).thenComposeAsync((either) -> { // Tuinity start - force competion on the main thread ++ return CompletableFuture.completedFuture(either); ++ }, this.mainInvokingExecutor); ++ // Tuinity end - force competion on the main thread + } + + protected void c(ChunkCoordIntPair chunkcoordintpair) { +@@ -1429,6 +1434,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + } + + public final void setViewDistance(int i) { // Paper - public ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Cannot update view distance off of the main thread"); // Tuinity + int j = MathHelper.clamp(i + 1, 3, 33); // Paper - diff on change, these make the lower view distance limit 2 and the upper 32 + + if (j != this.viewDistance) { +@@ -1442,6 +1448,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + + // Paper start - no-tick view distance + public final void setNoTickViewDistance(int viewDistance) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Cannot update view distance off of the main thread"); // Tuinity + viewDistance = viewDistance == -1 ? -1 : MathHelper.clamp(viewDistance, 2, 32); + + this.noTickViewDistance = viewDistance; +@@ -1971,23 +1978,20 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + private final void processTrackQueue() { + this.world.timings.tracker1.startTiming(); + try { +- for (EntityTracker tracker : this.trackedEntities.values()) { +- // update tracker entry +- tracker.updatePlayers(tracker.tracker.getPlayersInTrackRange()); ++ for (Chunk chunk : this.world.getChunkProvider().entityTickingChunks) { ++ Entity[] entities = chunk.entities.getRawData(); ++ for (int i = 0, len = chunk.entities.size(); i < len; ++i) { ++ Entity entity = entities[i]; ++ EntityTracker tracker = this.trackedEntities.get(entity.getId()); ++ if (tracker != null) { ++ tracker.updatePlayers(tracker.tracker.getPlayersInTrackRange()); ++ tracker.trackerEntry.tick(); ++ } ++ } + } + } finally { + this.world.timings.tracker1.stopTiming(); + } +- +- +- this.world.timings.tracker2.startTiming(); +- try { +- for (EntityTracker tracker : this.trackedEntities.values()) { +- tracker.trackerEntry.tick(); +- } +- } finally { +- this.world.timings.tracker2.stopTiming(); +- } + } + // Paper end - optimised tracker + +diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java +index 3e5dea60f..1859cd296 100644 +--- a/src/main/java/net/minecraft/server/PlayerConnection.java ++++ b/src/main/java/net/minecraft/server/PlayerConnection.java +@@ -323,19 +323,24 @@ public class PlayerConnection implements PacketListenerPlayIn { + + if (entity != this.player && entity.getRidingPassenger() == this.player && entity == this.r) { + WorldServer worldserver = this.player.getWorldServer(); +- double d0 = entity.locX(); +- double d1 = entity.locY(); +- double d2 = entity.locZ(); +- double d3 = packetplayinvehiclemove.getX(); +- double d4 = packetplayinvehiclemove.getY(); +- double d5 = packetplayinvehiclemove.getZ(); ++ double d0 = entity.locX();double fromX = d0; // Tuinity - OBFHELPER ++ double d1 = entity.locY();double fromY = d1; // Tuinity - OBFHELPER ++ double d2 = entity.locZ();double fromZ = d2; // Tuinity - OBFHELPER ++ double d3 = packetplayinvehiclemove.getX();double toX = d3; // Tuinity - OBFHELPER ++ double d4 = packetplayinvehiclemove.getY();double toY = d4; // Tuinity - OBFHELPER ++ double d5 = packetplayinvehiclemove.getZ();double toZ = d5; // Tuinity - OBFHELPER + float f = packetplayinvehiclemove.getYaw(); + float f1 = packetplayinvehiclemove.getPitch(); + double d6 = d3 - this.s; + double d7 = d4 - this.t; + double d8 = d5 - this.u; + double d9 = entity.getMot().g(); +- double d10 = d6 * d6 + d7 * d7 + d8 * d8; ++ // Tuinity start - fix large move vectors killing the server ++ double currDeltaX = toX - fromX; ++ double currDeltaY = toY - fromY; ++ double currDeltaZ = toZ - fromZ; ++ double d10 = Math.max(d6 * d6 + d7 * d7 + d8 * d8, (currDeltaX * currDeltaX + currDeltaY * currDeltaY + currDeltaZ * currDeltaZ) - 1); ++ // Tuinity end - fix large move vectors killing the server + + + // CraftBukkit start - handle custom speeds and skipped ticks +@@ -364,7 +369,9 @@ public class PlayerConnection implements PacketListenerPlayIn { + speed *= 2f; // TODO: Get the speed of the vehicle instead of the player + + // Paper start - Prevent moving into unloaded chunks +- if (player.world.paperConfig.preventMovingIntoUnloadedChunks && worldserver.getChunkIfLoadedImmediately((int) Math.floor(packetplayinvehiclemove.getX()) >> 4, (int) Math.floor(packetplayinvehiclemove.getZ()) >> 4) == null) { ++ if (player.world.paperConfig.preventMovingIntoUnloadedChunks // Tuinity - improve this check ++ && (!worldserver.areChunksLoadedForMove(this.player.getBoundingBoxAt(this.player.locX(), this.player.locY(), this.player.locZ()).expand(toX - this.player.locX(), toY - this.player.locY(), toZ - this.player.locZ()))) // Tuinity - improve this check ++ || !worldserver.areChunksLoadedForMove(entity.getBoundingBoxAt(entity.locX(), entity.locY(), entity.locZ()).expand(toX - entity.locX(), toY - entity.locY(), toZ - entity.locZ()))) { // Tuinity - improve this check + this.networkManager.sendPacket(new PacketPlayOutVehicleMove(entity)); + return; + } +@@ -981,7 +988,7 @@ public class PlayerConnection implements PacketListenerPlayIn { + double d2 = this.player.locZ(); + double d3 = this.player.locY(); + double d4 = packetplayinflying.a(this.player.locX());double toX = d4; // Paper - OBFHELPER +- double d5 = packetplayinflying.b(this.player.locY()); ++ double d5 = packetplayinflying.b(this.player.locY());double toY = d5; // Tuinity - OBFHELPER + double d6 = packetplayinflying.c(this.player.locZ());double toZ = d6; // Paper - OBFHELPER + float f = packetplayinflying.a(this.player.yaw); + float f1 = packetplayinflying.b(this.player.pitch); +@@ -989,7 +996,12 @@ public class PlayerConnection implements PacketListenerPlayIn { + double d8 = d5 - this.m; + double d9 = d6 - this.n; + double d10 = this.player.getMot().g(); +- double d11 = d7 * d7 + d8 * d8 + d9 * d9; ++ // Tuinity start - fix large move vectors killing the server ++ double currDeltaX = toX - prevX; ++ double currDeltaY = toY - prevY; ++ double currDeltaZ = toZ - prevZ; ++ double d11 = Math.max(d7 * d7 + d8 * d8 + d9 * d9, (currDeltaX * currDeltaX + currDeltaY * currDeltaY + currDeltaZ * currDeltaZ) - 1); ++ // Tuinity end - fix large move vectors killing the server + + if (this.player.isSleeping()) { + if (d11 > 1.0D) { +@@ -1022,7 +1034,7 @@ public class PlayerConnection implements PacketListenerPlayIn { + speed = player.abilities.walkSpeed * 10f; + } + // Paper start - Prevent moving into unloaded chunks +- if (player.world.paperConfig.preventMovingIntoUnloadedChunks && (this.player.locX() != toX || this.player.locZ() != toZ) && worldserver.getChunkIfLoadedImmediately((int) Math.floor(toX) >> 4, (int) Math.floor(toZ) >> 4) == null) { // Paper - use getIfLoadedImmediately ++ if (player.world.paperConfig.preventMovingIntoUnloadedChunks && !((WorldServer)this.player.world).areChunksLoadedForMove(this.player.getBoundingBoxAt(this.player.locX(), this.player.locY(), this.player.locZ()).expand(toX - this.player.locX(), toY - this.player.locY(), toZ - this.player.locZ()))) { // Paper - use getIfLoadedImmediately // Tuinity - improve this check + this.internalTeleport(this.player.locX(), this.player.locY(), this.player.locZ(), this.player.yaw, this.player.pitch, Collections.emptySet()); + return; + } +diff --git a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java +index eb3269e0e..d9c9d01ae 100644 +--- a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java ++++ b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java +@@ -13,10 +13,30 @@ public class PlayerConnectionUtils { + ensureMainThread(packet, t0, (IAsyncTaskHandler) worldserver.getMinecraftServer()); + } + ++ // Tuinity start - detailed watchdog information ++ private static final java.util.concurrent.ConcurrentLinkedDeque packetProcessing = new java.util.concurrent.ConcurrentLinkedDeque<>(); ++ private static final java.util.concurrent.atomic.AtomicLong totalMainThreadPacketsProcessed = new java.util.concurrent.atomic.AtomicLong(); ++ ++ public static long getTotalProcessedPackets() { ++ return totalMainThreadPacketsProcessed.get(); ++ } ++ ++ public static java.util.List getCurrentPacketProcessors() { ++ java.util.List ret = new java.util.ArrayList<>(4); ++ for (PacketListener listener : packetProcessing) { ++ ret.add(listener); ++ } ++ ++ return ret; ++ } ++ // Tuinity end - detailed watchdog information ++ + public static void ensureMainThread(Packet packet, T t0, IAsyncTaskHandler iasynctaskhandler) throws CancelledPacketHandleException { + if (!iasynctaskhandler.isMainThread()) { + Timing timing = MinecraftTimings.getPacketTiming(packet); // Paper - timings + iasynctaskhandler.execute(() -> { ++ packetProcessing.push(t0); // Tuinity - detailed watchdog information ++ try { // Tuinity - detailed watchdog information + if (MinecraftServer.getServer().hasStopped() || (t0 instanceof PlayerConnection && ((PlayerConnection) t0).processedDisconnect)) return; // CraftBukkit, MC-142590 + if (t0.a().isConnected()) { + try (Timing ignored = timing.startTiming()) { // Paper - timings +@@ -25,6 +45,12 @@ public class PlayerConnectionUtils { + } else { + PlayerConnectionUtils.LOGGER.debug("Ignoring packet due to disconnection: " + packet); + } ++ // Tuinity start - detailed watchdog information ++ } finally { ++ totalMainThreadPacketsProcessed.getAndIncrement(); ++ packetProcessing.pop(); ++ } ++ // Tuinity end - detailed watchdog information + + }); + throw CancelledPacketHandleException.INSTANCE; +diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java +index 6df843461..272c1f0ea 100644 +--- a/src/main/java/net/minecraft/server/PlayerInteractManager.java ++++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java +@@ -20,14 +20,29 @@ public class PlayerInteractManager { + public EntityPlayer player; + private EnumGamemode gamemode; + private boolean e; +- private int lastDigTick; ++ private int lastDigTick; private long lastDigTime; // Tuinity - lag compensate block breaking + private BlockPosition g; + private int currentTick; +- private boolean i; ++ private boolean i; private final boolean hasDestroyedTooFast() { return this.i; } // Tuinity - OBFHELPER + private BlockPosition j; +- private int k; ++ private int k; private final int getHasDestroyedTooFastStartTick() { return this.k; } // Tuinity - OBFHELPER ++ private long hasDestroyedTooFastStartTime; // Tuinity - lag compensate block breaking + private int l; + ++ // Tuinity start - lag compensate block breaking ++ private int getTimeDiggingLagCompensate() { ++ int lagCompensated = (int)((System.nanoTime() - this.lastDigTime) / (50L * 1000L * 1000L)); ++ int tickDiff = this.currentTick - this.lastDigTick; ++ return (com.tuinity.tuinity.config.TuinityConfig.lagCompensateBlockBreaking && lagCompensated > (tickDiff + 1)) ? lagCompensated : tickDiff; // add one to ensure we don't lag compensate unless we need to ++ } ++ ++ private int getTimeDiggingTooFastLagCompensate() { ++ int lagCompensated = (int)((System.nanoTime() - this.hasDestroyedTooFastStartTime) / (50L * 1000L * 1000L)); ++ int tickDiff = this.currentTick - this.getHasDestroyedTooFastStartTick(); ++ return (com.tuinity.tuinity.config.TuinityConfig.lagCompensateBlockBreaking && lagCompensated > (tickDiff + 1)) ? lagCompensated : tickDiff; // add one to ensure we don't lag compensate unless we need to ++ } ++ // Tuinity end ++ + public PlayerInteractManager(WorldServer worldserver) { + this.gamemode = EnumGamemode.NOT_SET; + this.g = BlockPosition.ZERO; +@@ -73,7 +88,7 @@ public class PlayerInteractManager { + if (iblockdata == null || iblockdata.isAir()) { // Paper + this.i = false; + } else { +- float f = this.a(iblockdata, this.j, this.k); ++ float f = this.updateBlockBreakAnimation(iblockdata, this.j, this.getTimeDiggingTooFastLagCompensate()); // Tuinity - lag compensate destroying blocks + + if (f >= 1.0F) { + this.i = false; +@@ -93,7 +108,7 @@ public class PlayerInteractManager { + this.l = -1; + this.e = false; + } else { +- this.a(iblockdata, this.g, this.lastDigTick); ++ this.updateBlockBreakAnimation(iblockdata, this.g, this.getTimeDiggingLagCompensate()); // Tuinity - lag compensate destroying blocks + } + } + +@@ -101,6 +116,12 @@ public class PlayerInteractManager { + + private float a(IBlockData iblockdata, BlockPosition blockposition, int i) { + int j = this.currentTick - i; ++ // Tuinity start - change i (startTime) to totalTime ++ return this.updateBlockBreakAnimation(iblockdata, blockposition, j); ++ } ++ private float updateBlockBreakAnimation(IBlockData iblockdata, BlockPosition blockposition, int totalTime) { ++ int j = totalTime; ++ // Tuinity end + float f = iblockdata.getDamage(this.player, this.player.world, blockposition) * (float) (j + 1); + int k = (int) (f * 10.0F); + +@@ -174,7 +195,7 @@ public class PlayerInteractManager { + } + + // this.world.douseFire((EntityHuman) null, blockposition, enumdirection); // CraftBukkit - Moved down +- this.lastDigTick = this.currentTick; ++ this.lastDigTick = this.currentTick; this.lastDigTime = System.nanoTime(); // Tuinity - lag compensate block breaking + float f = 1.0F; + + iblockdata = this.world.getType(blockposition); +@@ -229,12 +250,12 @@ public class PlayerInteractManager { + int j = (int) (f * 10.0F); + + this.world.a(this.player.getId(), blockposition, j); +- this.player.playerConnection.sendPacket(new PacketPlayOutBlockBreak(blockposition, this.world.getType(blockposition), packetplayinblockdig_enumplayerdigtype, true, "actual start of destroying")); ++ if (!com.tuinity.tuinity.config.TuinityConfig.lagCompensateBlockBreaking) this.player.playerConnection.sendPacket(new PacketPlayOutBlockBreak(blockposition, this.world.getType(blockposition), packetplayinblockdig_enumplayerdigtype, true, "actual start of destroying")); // Tuinity - on lagging servers this can cause the client to think it's only just started to destroy a block when it already has/will + this.l = j; + } + } else if (packetplayinblockdig_enumplayerdigtype == PacketPlayInBlockDig.EnumPlayerDigType.STOP_DESTROY_BLOCK) { + if (blockposition.equals(this.g)) { +- int k = this.currentTick - this.lastDigTick; ++ int k = this.getTimeDiggingLagCompensate(); // Tuinity - lag compensate block breaking + + iblockdata = this.world.getType(blockposition); + if (!iblockdata.isAir()) { +@@ -251,12 +272,18 @@ public class PlayerInteractManager { + this.e = false; + this.i = true; + this.j = blockposition; +- this.k = this.lastDigTick; ++ this.k = this.lastDigTick; this.hasDestroyedTooFastStartTime = this.lastDigTime; // Tuinity - lag compensate block breaking + } + } + } + ++ // Tuinity start - this can cause clients on a lagging server to think they're not currently destroying a block ++ if (com.tuinity.tuinity.config.TuinityConfig.lagCompensateBlockBreaking) { ++ this.player.playerConnection.sendPacket(new PacketPlayOutBlockChange(this.world, blockposition)); ++ } else { + this.player.playerConnection.sendPacket(new PacketPlayOutBlockBreak(blockposition, this.world.getType(blockposition), packetplayinblockdig_enumplayerdigtype, true, "stopped destroying")); ++ } ++ // Tuinity end - this can cause clients on a lagging server to think they're not currently destroying a block + } else if (packetplayinblockdig_enumplayerdigtype == PacketPlayInBlockDig.EnumPlayerDigType.ABORT_DESTROY_BLOCK) { + this.e = false; + if (!Objects.equals(this.g, blockposition) && !BlockPosition.ZERO.equals(this.g)) { // Paper +@@ -268,7 +295,7 @@ public class PlayerInteractManager { + } + + this.world.a(this.player.getId(), blockposition, -1); +- this.player.playerConnection.sendPacket(new PacketPlayOutBlockBreak(blockposition, this.world.getType(blockposition), packetplayinblockdig_enumplayerdigtype, true, "aborted destroying")); ++ if (!com.tuinity.tuinity.config.TuinityConfig.lagCompensateBlockBreaking) this.player.playerConnection.sendPacket(new PacketPlayOutBlockBreak(blockposition, this.world.getType(blockposition), packetplayinblockdig_enumplayerdigtype, true, "aborted destroying")); // Tuinity - this can cause clients on a lagging server to think they stopped destroying a block they're currently destroying + } + + } +@@ -278,7 +305,13 @@ public class PlayerInteractManager { + + public void a(BlockPosition blockposition, PacketPlayInBlockDig.EnumPlayerDigType packetplayinblockdig_enumplayerdigtype, String s) { + if (this.breakBlock(blockposition)) { ++ // Tuinity start - this can cause clients on a lagging server to think they're not currently destroying a block ++ if (com.tuinity.tuinity.config.TuinityConfig.lagCompensateBlockBreaking) { ++ this.player.playerConnection.sendPacket(new PacketPlayOutBlockChange(this.world, blockposition)); ++ } else { + this.player.playerConnection.sendPacket(new PacketPlayOutBlockBreak(blockposition, this.world.getType(blockposition), packetplayinblockdig_enumplayerdigtype, true, s)); ++ } ++ // Tuinity end - this can cause clients on a lagging server to think they're not currently destroying a block + } else { + this.player.playerConnection.sendPacket(new PacketPlayOutBlockChange(this.world, blockposition)); // CraftBukkit - SPIGOT-5196 + } +diff --git a/src/main/java/net/minecraft/server/ProtoChunk.java b/src/main/java/net/minecraft/server/ProtoChunk.java +index 2eb14bbf8..2be0b0803 100644 +--- a/src/main/java/net/minecraft/server/ProtoChunk.java ++++ b/src/main/java/net/minecraft/server/ProtoChunk.java +@@ -179,14 +179,11 @@ public class ProtoChunk implements IChunkAccess { + lightengine.a(blockposition); + } + +- EnumSet enumset = this.getChunkStatus().h(); ++ HeightMap.Type[] enumset = this.getChunkStatus().heightMaps; // Tuinity - reduce iterator creation + EnumSet enumset1 = null; +- Iterator iterator = enumset.iterator(); ++ // Tuinity - reduce iterator creation + +- HeightMap.Type heightmap_type; +- +- while (iterator.hasNext()) { +- heightmap_type = (HeightMap.Type) iterator.next(); ++ for (HeightMap.Type heightmap_type : enumset) { // Tuinity - reduce iterator creation + HeightMap heightmap = (HeightMap) this.f.get(heightmap_type); + + if (heightmap == null) { +@@ -202,10 +199,9 @@ public class ProtoChunk implements IChunkAccess { + HeightMap.a(this, enumset1); + } + +- iterator = enumset.iterator(); +- +- while (iterator.hasNext()) { +- heightmap_type = (HeightMap.Type) iterator.next(); ++ // Tuinity start - reduce iterator creation ++ for (HeightMap.Type heightmap_type : enumset) { ++ // Tuinity end - reduce iterator creation + ((HeightMap) this.f.get(heightmap_type)).a(i & 15, j, k & 15, iblockdata); + } + +diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java +index df728e2c0..a66b02baa 100644 +--- a/src/main/java/net/minecraft/server/RegionFile.java ++++ b/src/main/java/net/minecraft/server/RegionFile.java +@@ -28,14 +28,349 @@ public class RegionFile implements AutoCloseable { + private static final Logger LOGGER = LogManager.getLogger(); + private static final ByteBuffer b = ByteBuffer.allocateDirect(1); + private final FileChannel dataFile; +- private final java.nio.file.Path d; +- private final RegionFileCompression e; ++ private final java.nio.file.Path d; private final java.nio.file.Path getContainingDataFolder() { return this.d; } // Tuinity - OBFHELPER ++ private final RegionFileCompression e; private final RegionFileCompression getRegionFileCompression() { return this.e; } // Tuinity - OBFHELPER + private final ByteBuffer f; +- private final IntBuffer g; +- private final IntBuffer h; ++ private final IntBuffer g; private final IntBuffer getOffsets() { return this.g; } // Tuinity - OBFHELPER ++ private final IntBuffer h; private final IntBuffer getTimestamps() { return this.h; } // Tuinity - OBFHELPER + private final RegionFileBitSet freeSectors; + public final File file; + ++ // Tuinity start - try to recover from RegionFile header corruption ++ private static long roundToSectors(long bytes) { ++ long sectors = bytes >>> 12; // 4096 = 2^12 ++ long remainingBytes = bytes & 4095; ++ long sign = -remainingBytes; // sign is 1 if nonzero ++ return sectors + (sign >>> 63); ++ } ++ ++ private static final NBTTagCompound OVERSIZED_COMPOUND = new NBTTagCompound(); ++ ++ private NBTTagCompound attemptRead(long sector, int chunkDataLength, long fileLength) throws IOException { ++ try { ++ if (chunkDataLength < 0) { ++ return null; ++ } ++ ++ long offset = sector * 4096L + 4L; // offset for chunk data ++ ++ if ((offset + chunkDataLength) > fileLength) { ++ return null; ++ } ++ ++ ByteBuffer chunkData = ByteBuffer.allocate(chunkDataLength); ++ if (chunkDataLength != this.dataFile.read(chunkData, offset)) { ++ return null; ++ } ++ ++ ((java.nio.Buffer)chunkData).flip(); ++ ++ byte compressionType = chunkData.get(); ++ if (compressionType < 0) { // compressionType & 128 != 0 ++ // oversized chunk ++ return OVERSIZED_COMPOUND; ++ } ++ ++ RegionFileCompression compression = RegionFileCompression.getByType(compressionType); ++ if (compression == null) { ++ return null; ++ } ++ ++ InputStream input = compression.wrap(new ByteArrayInputStream(chunkData.array(), chunkData.position(), chunkDataLength - chunkData.position())); ++ ++ return NBTCompressedStreamTools.readNBT(new DataInputStream(new BufferedInputStream(input))); ++ } catch (Exception ex) { ++ return null; ++ } ++ } ++ ++ private int getLength(long sector) throws IOException { ++ ByteBuffer length = ByteBuffer.allocate(4); ++ if (4 != this.dataFile.read(length, sector * 4096L)) { ++ return -1; ++ } ++ ++ return length.getInt(0); ++ } ++ ++ private void backupRegionFile() { ++ File backup = new File(this.file.getParent(), this.file.getName() + "." + new java.util.Random().nextLong() + ".backup"); ++ this.backupRegionFile(backup); ++ } ++ ++ private void backupRegionFile(File to) { ++ try { ++ this.dataFile.force(true); ++ MinecraftServer.LOGGER.warn("Backing up regionfile \"" + this.file.getAbsolutePath() + "\" to " + to.getAbsolutePath()); ++ java.nio.file.Files.copy(this.file.toPath(), to.toPath()); ++ MinecraftServer.LOGGER.warn("Backed up the regionfile to " + to.getAbsolutePath()); ++ } catch (IOException ex) { ++ MinecraftServer.LOGGER.error("Failed to backup to " + to.getAbsolutePath(), ex); ++ } ++ } ++ ++ // note: only call for CHUNK regionfiles ++ void recalculateHeader() throws IOException { ++ if (!this.canRecalcHeader) { ++ return; ++ } ++ synchronized (this) { ++ MinecraftServer.LOGGER.warn("Corrupt regionfile header detected! Attempting to re-calculate header offsets for regionfile " + this.file.getAbsolutePath(), new Throwable()); ++ ++ // try to backup file so maybe it could be sent to us for further investigation ++ ++ this.backupRegionFile(); ++ NBTTagCompound[] compounds = new NBTTagCompound[32 * 32]; // only in the regionfile (i.e exclude mojang/aikar oversized data) ++ int[] rawLengths = new int[32 * 32]; // length of chunk data including 4 byte length field, bytes ++ int[] sectorOffsets = new int[32 * 32]; // in sectors ++ boolean[] hasAikarOversized = new boolean[32 * 32]; ++ ++ long fileLength = this.dataFile.size(); ++ long totalSectors = roundToSectors(fileLength); ++ ++ // search the regionfile from start to finish for the most up-to-date chunk data ++ ++ for (long i = 2, maxSector = Math.min((long)(Integer.MAX_VALUE >>> 8), totalSectors); i < maxSector; ++i) { // first two sectors are header, skip ++ int chunkDataLength = this.getLength(i); ++ NBTTagCompound compound = this.attemptRead(i, chunkDataLength, fileLength); ++ if (compound == null || compound == OVERSIZED_COMPOUND) { ++ continue; ++ } ++ ++ ChunkCoordIntPair chunkPos = ChunkRegionLoader.getChunkCoordinate(compound); ++ int location = (chunkPos.x & 31) | ((chunkPos.z & 31) << 5); ++ ++ NBTTagCompound otherCompound = compounds[location]; ++ ++ if (otherCompound != null && ChunkRegionLoader.getLastWorldSaveTime(otherCompound) > ChunkRegionLoader.getLastWorldSaveTime(compound)) { ++ continue; // don't overwrite newer data. ++ } ++ ++ // aikar oversized? ++ File aikarOversizedFile = this.getOversizedFile(chunkPos.x, chunkPos.z); ++ boolean isAikarOversized = false; ++ if (aikarOversizedFile.exists()) { ++ try { ++ NBTTagCompound aikarOversizedCompound = this.getOversizedData(chunkPos.x, chunkPos.z); ++ if (ChunkRegionLoader.getLastWorldSaveTime(compound) == ChunkRegionLoader.getLastWorldSaveTime(aikarOversizedCompound)) { ++ // best we got for an id. hope it's good enough ++ isAikarOversized = true; ++ } ++ } catch (Exception ex) { ++ MinecraftServer.LOGGER.error("Failed to read aikar oversized data for absolute chunk (" + chunkPos.x + "," + chunkPos.z + ") in regionfile " + this.file.getAbsolutePath() + ", oversized data for this chunk will be lost", ex); ++ // fall through, if we can't read aikar oversized we can't risk corrupting chunk data ++ } ++ } ++ ++ hasAikarOversized[location] = isAikarOversized; ++ compounds[location] = compound; ++ rawLengths[location] = chunkDataLength + 4; ++ sectorOffsets[location] = (int)i; ++ ++ int chunkSectorLength = (int)roundToSectors(rawLengths[location]); ++ i += chunkSectorLength; ++ --i; // gets incremented next iteration ++ } ++ ++ // forge style oversized data is already handled by the local search, and aikar data we just hope ++ // we get it right as aikar data has no identifiers we could use to try and find its corresponding ++ // local data compound ++ ++ java.nio.file.Path containingFolder = this.getContainingDataFolder(); ++ File[] regionFiles = containingFolder.toFile().listFiles(); ++ boolean[] oversized = new boolean[32 * 32]; ++ RegionFileCompression[] oversizedCompressionTypes = new RegionFileCompression[32 * 32]; ++ ++ if (regionFiles != null) { ++ ChunkCoordIntPair ourLowerLeftPosition = RegionFileCache.getRegionFileCoordinates(this.file); ++ ++ if (ourLowerLeftPosition == null) { ++ MinecraftServer.LOGGER.fatal("Unable to get chunk location of regionfile " + this.file.getAbsolutePath() + ", cannot recover oversized chunks"); ++ } else { ++ int lowerXBound = ourLowerLeftPosition.x; // inclusive ++ int lowerZBound = ourLowerLeftPosition.z; // inclusive ++ int upperXBound = lowerXBound + 32 - 1; // inclusive ++ int upperZBound = lowerZBound + 32 - 1; // inclusive ++ ++ // read mojang oversized data ++ for (File regionFile : regionFiles) { ++ ChunkCoordIntPair oversizedCoords = getOversizedChunkPair(regionFile); ++ if (oversizedCoords == null) { ++ continue; ++ } ++ ++ if ((oversizedCoords.x < lowerXBound || oversizedCoords.x > upperXBound) || (oversizedCoords.z < lowerZBound || oversizedCoords.z > upperZBound)) { ++ continue; // not in our regionfile ++ } ++ ++ // ensure oversized data is valid & is newer than data in the regionfile ++ ++ int location = (oversizedCoords.x & 31) | ((oversizedCoords.z & 31) << 5); ++ ++ byte[] chunkData; ++ try { ++ chunkData = Files.readAllBytes(regionFile.toPath()); ++ } catch (Exception ex) { ++ MinecraftServer.LOGGER.error("Failed to read oversized chunk data in file " + regionFile.getAbsolutePath(), ex); ++ continue; ++ } ++ ++ NBTTagCompound compound = null; ++ ++ // We do not know the compression type, as it's stored in the regionfile. So we need to try all of them ++ RegionFileCompression compression = null; ++ for (RegionFileCompression compressionType : RegionFileCompression.getCompressionTypes().values()) { ++ try { ++ DataInputStream in = new DataInputStream(new BufferedInputStream(compressionType.wrap(new ByteArrayInputStream(chunkData)))); // typical java ++ compound = NBTCompressedStreamTools.readNBT(in); ++ compression = compressionType; ++ break; // reaches here iff readNBT does not throw ++ } catch (Exception ex) { ++ continue; ++ } ++ } ++ ++ if (compound == null) { ++ MinecraftServer.LOGGER.error("Failed to read oversized chunk data in file " + regionFile.getAbsolutePath() + ", it's corrupt. Its data will be lost"); ++ continue; ++ } ++ ++ if (compounds[location] == null || ChunkRegionLoader.getLastWorldSaveTime(compound) > ChunkRegionLoader.getLastWorldSaveTime(compounds[location])) { ++ oversized[location] = true; ++ oversizedCompressionTypes[location] = compression; ++ } ++ } ++ } ++ } ++ ++ // now we need to calculate a new offset header ++ ++ int[] calculatedOffsets = new int[32 * 32]; ++ RegionFileBitSet newSectorAllocations = new RegionFileBitSet(); ++ newSectorAllocations.allocate(0, 2); // make space for header ++ ++ // allocate sectors for normal chunks ++ ++ for (int chunkX = 0; chunkX < 32; ++chunkX) { ++ for (int chunkZ = 0; chunkZ < 32; ++chunkZ) { ++ int location = chunkX | (chunkZ << 5); ++ ++ if (oversized[location]) { ++ continue; ++ } ++ ++ int rawLength = rawLengths[location]; // bytes ++ int sectorOffset = sectorOffsets[location]; // sectors ++ int sectorLength = (int)roundToSectors(rawLength); ++ ++ if (newSectorAllocations.tryAllocate(sectorOffset, sectorLength)) { ++ calculatedOffsets[location] = sectorOffset << 8 | (sectorLength > 255 ? 255 : sectorLength); // support forge style oversized ++ } else { ++ MinecraftServer.LOGGER.error("Failed to allocate space for local chunk (overlapping data??) at (" + chunkX + "," + chunkZ + ") in regionfile " + this.file.getAbsolutePath() + ", chunk will be regenerated"); ++ } ++ } ++ } ++ ++ // allocate sectors for oversized chunks ++ ++ for (int chunkX = 0; chunkX < 32; ++chunkX) { ++ for (int chunkZ = 0; chunkZ < 32; ++chunkZ) { ++ int location = chunkX | (chunkZ << 5); ++ ++ if (!oversized[location]) { ++ continue; ++ } ++ ++ int sectorOffset = newSectorAllocations.allocateNewSpace(1); ++ int sectorLength = 1; ++ ++ try { ++ this.dataFile.write(this.getOversizedChunkHolderData(oversizedCompressionTypes[location]), sectorOffset * 4096); ++ // only allocate in the new offsets if the write succeeds ++ calculatedOffsets[location] = sectorOffset << 8 | (sectorLength > 255 ? 255 : sectorLength); // support forge style oversized ++ } catch (IOException ex) { ++ newSectorAllocations.free(sectorOffset, sectorLength); ++ MinecraftServer.LOGGER.error("Failed to write new oversized chunk data holder, local chunk at (" + chunkX + "," + chunkZ + ") in regionfile " + this.file.getAbsolutePath() + " will be regenerated"); ++ } ++ } ++ } ++ ++ // rewrite aikar oversized data ++ ++ this.oversizedCount = 0; ++ for (int chunkX = 0; chunkX < 32; ++chunkX) { ++ for (int chunkZ = 0; chunkZ < 32; ++chunkZ) { ++ int location = chunkX | (chunkZ << 5); ++ int isAikarOversized = hasAikarOversized[location] ? 1 : 0; ++ ++ this.oversizedCount += isAikarOversized; ++ this.oversized[location] = (byte)isAikarOversized; ++ } ++ } ++ ++ if (this.oversizedCount > 0) { ++ try { ++ this.writeOversizedMeta(); ++ } catch (Exception ex) { ++ MinecraftServer.LOGGER.error("Failed to write aikar oversized chunk meta, all aikar style oversized chunk data will be lost for regionfile " + this.file.getAbsolutePath(), ex); ++ this.getOversizedMetaFile().delete(); ++ } ++ } else { ++ this.getOversizedMetaFile().delete(); ++ } ++ ++ this.freeSectors.copyFrom(newSectorAllocations); ++ ++ // before we overwrite the old sectors, print a summary of the chunks that got changed. ++ ++ MinecraftServer.LOGGER.info("Starting summary of changes for regionfile " + this.file.getAbsolutePath()); ++ ++ for (int chunkX = 0; chunkX < 32; ++chunkX) { ++ for (int chunkZ = 0; chunkZ < 32; ++chunkZ) { ++ int location = chunkX | (chunkZ << 5); ++ ++ int oldOffset = this.getOffsets().get(location); ++ int newOffset = calculatedOffsets[location]; ++ ++ if (oldOffset == newOffset) { ++ continue; ++ } ++ ++ this.getOffsets().put(location, newOffset); // overwrite incorrect offset ++ ++ if (oldOffset == 0) { ++ // found lost data ++ MinecraftServer.LOGGER.info("Found missing data for local chunk (" + chunkX + "," + chunkZ + ") in regionfile " + this.file.getAbsolutePath()); ++ } else if (newOffset == 0) { ++ MinecraftServer.LOGGER.warn("Data for local chunk (" + chunkX + "," + chunkZ + ") could not be recovered in regionfile " + this.file.getAbsolutePath() + ", it will be regenerated"); ++ } else { ++ MinecraftServer.LOGGER.info("Local chunk (" + chunkX + "," + chunkZ + ") changed to point to newer data or correct chunk in regionfile " + this.file.getAbsolutePath()); ++ } ++ } ++ } ++ ++ MinecraftServer.LOGGER.info("End of change summary for regionfile " + this.file.getAbsolutePath()); ++ ++ // simply destroy the timestamp header, it's not used ++ ++ for (int i = 0; i < 32 * 32; ++i) { ++ this.getTimestamps().put(i, calculatedOffsets[i] != 0 ? (int)System.currentTimeMillis() : 0); // write a valid timestamp for valid chunks, I do not want to find out whatever dumb program actually checks this ++ } ++ ++ // write new header ++ try { ++ this.flushHeader(); ++ this.dataFile.force(true); // try to ensure it goes through... ++ MinecraftServer.LOGGER.info("Successfully wrote new header to disk for regionfile " + this.file.getAbsolutePath()); ++ } catch (IOException ex) { ++ MinecraftServer.LOGGER.fatal("Failed to write new header to disk for regionfile " + this.file.getAbsolutePath(), ex); ++ } ++ } ++ } ++ ++ final boolean canRecalcHeader; // final forces compile fail on new constructor ++ // Tuinity end ++ + public final java.util.concurrent.locks.ReentrantLock fileLock = new java.util.concurrent.locks.ReentrantLock(true); // Paper + + // Paper start - Cache chunk status +@@ -63,10 +398,21 @@ public class RegionFile implements AutoCloseable { + // Paper end + + public RegionFile(File file, File file1) throws IOException { +- this(file.toPath(), file1.toPath(), RegionFileCompression.b); ++ // Tuinity start - add header recalculation boolean ++ this(file, file1, false); ++ } ++ public RegionFile(File file, File file1, boolean canRecalcHeader) throws IOException { ++ this(file.toPath(), file1.toPath(), RegionFileCompression.b, canRecalcHeader); ++ // Tuinity end + } + + public RegionFile(java.nio.file.Path java_nio_file_path, java.nio.file.Path java_nio_file_path1, RegionFileCompression regionfilecompression) throws IOException { ++ // Tuinity start - add header recalculation boolean ++ this(java_nio_file_path, java_nio_file_path1, regionfilecompression, false); ++ } ++ public RegionFile(java.nio.file.Path java_nio_file_path, java.nio.file.Path java_nio_file_path1, RegionFileCompression regionfilecompression, boolean canRecalcHeader) throws IOException { ++ this.canRecalcHeader = canRecalcHeader; ++ // Tuinity end + this.file = java_nio_file_path.toFile(); // Paper + this.f = ByteBuffer.allocateDirect(8192); + initOversizedState(); +@@ -90,12 +436,15 @@ public class RegionFile implements AutoCloseable { + RegionFile.LOGGER.warn("Region file {} has truncated header: {}", java_nio_file_path, i); + } + +- for (int j = 0; j < 1024; ++j) { ++ boolean needsHeaderRecalc = false; // Tuinity - recalculate header on header corruption ++ boolean hasBackedUp = false; // Tuinity - recalculate header on header corruption ++ ++ for (int j = 0; j < 1024; ++j) { // Tuinity - diff on change, we expect j to be the header location + int k = this.g.get(j); + + if (k != 0) { +- int l = b(k); +- int i1 = a(k); ++ int l = b(k); // Tuinity - diff on change, we expect l to be offset in file ++ int i1 = a(k); // Tuinity - diff on change, we expect i1 to be sector length of region + // Spigot start + if (i1 == 255) { + // We're maxed out, so we need to read the proper length from the section +@@ -105,20 +454,87 @@ public class RegionFile implements AutoCloseable { + } + // Spigot end + +- this.freeSectors.a(l, i1); ++ // Tuinity start - recalculate header on header corruption ++ if (l < 0 || i1 < 0 || (l + i1) < 0) { ++ if (canRecalcHeader) { ++ MinecraftServer.LOGGER.error("Detected invalid header for regionfile " + this.file.getAbsolutePath() + "! Recalculating header..."); ++ needsHeaderRecalc = true; ++ break; ++ } else { ++ // location = chunkX | (chunkZ << 5); ++ MinecraftServer.LOGGER.fatal("Detected invalid header for regionfile " + this.file.getAbsolutePath() + ++ "! Cannot recalculate, removing local chunk (" + (j & 31) + "," + (j >>> 5) + ") from header"); ++ if (!hasBackedUp) { ++ hasBackedUp = true; ++ this.backupRegionFile(); ++ } ++ this.getTimestamps().put(j, 0); // be consistent, delete the timestamp too ++ this.getOffsets().put(j, 0); // delete the entry from header ++ continue; ++ } ++ } ++ boolean failedToAllocate = !this.freeSectors.tryAllocate(l, i1); ++ if (failedToAllocate && !canRecalcHeader) { ++ // location = chunkX | (chunkZ << 5); ++ MinecraftServer.LOGGER.fatal("Detected invalid header for regionfile " + this.file.getAbsolutePath() + ++ "! Cannot recalculate, removing local chunk (" + (j & 31) + "," + (j >>> 5) + ") from header"); ++ if (!hasBackedUp) { ++ hasBackedUp = true; ++ this.backupRegionFile(); ++ } ++ this.getTimestamps().put(j, 0); // be consistent, delete the timestamp too ++ this.getOffsets().put(j, 0); // delete the entry from header ++ continue; ++ } ++ needsHeaderRecalc |= failedToAllocate; ++ // Tuinity end - recalculate header on header corruption + } + } ++ ++ // Tuinity start - recalculate header on header corruption ++ // we move the recalc here so comparison to old header is correct when logging to console ++ if (needsHeaderRecalc) { // true if header gave us overlapping allocations ++ MinecraftServer.LOGGER.error("Recalculating regionfile " + this.file.getAbsolutePath() + ", header gave conflicting offsets & locations"); ++ this.recalculateHeader(); ++ } ++ // Tuinity end + } + + } + } + ++ private final java.nio.file.Path getOversizedChunkPath(ChunkCoordIntPair chunkcoordintpair) { return this.e(chunkcoordintpair); } // Tuinity - OBFHELPER + private java.nio.file.Path e(ChunkCoordIntPair chunkcoordintpair) { +- String s = "c." + chunkcoordintpair.x + "." + chunkcoordintpair.z + ".mcc"; ++ String s = "c." + chunkcoordintpair.x + "." + chunkcoordintpair.z + ".mcc"; // Tuinity - diff on change + + return this.d.resolve(s); + } + ++ // Tuinity start ++ private static ChunkCoordIntPair getOversizedChunkPair(File file) { ++ String fileName = file.getName(); ++ ++ if (!fileName.startsWith("c.") || !fileName.endsWith(".mcc")) { ++ return null; ++ } ++ ++ String[] split = fileName.split("\\."); ++ ++ if (split.length != 4) { ++ return null; ++ } ++ ++ try { ++ int x = Integer.parseInt(split[1]); ++ int z = Integer.parseInt(split[2]); ++ ++ return new ChunkCoordIntPair(x, z); ++ } catch (NumberFormatException ex) { ++ return null; ++ } ++ } ++ // Tuinity end ++ + @Nullable public synchronized DataInputStream getReadStream(ChunkCoordIntPair chunkCoordIntPair) throws IOException { return a(chunkCoordIntPair);} // Paper - OBFHELPER + @Nullable + public synchronized DataInputStream a(ChunkCoordIntPair chunkcoordintpair) throws IOException { +@@ -142,6 +558,12 @@ public class RegionFile implements AutoCloseable { + this.dataFile.read(bytebuffer, (long) (j * 4096)); + ((java.nio.Buffer) bytebuffer).flip(); + if (bytebuffer.remaining() < 5) { ++ // Tuinity start - recalculate header on regionfile corruption ++ if (this.canRecalcHeader) { ++ this.recalculateHeader(); ++ return this.getReadStream(chunkcoordintpair); ++ } ++ // Tuinity end + RegionFile.LOGGER.error("Chunk {} header is truncated: expected {} but read {}", chunkcoordintpair, l, bytebuffer.remaining()); + return null; + } else { +@@ -150,6 +572,12 @@ public class RegionFile implements AutoCloseable { + + if (i1 == 0) { + RegionFile.LOGGER.warn("Chunk {} is allocated, but stream is missing", chunkcoordintpair); ++ // Tuinity start - recalculate header on regionfile corruption ++ if (this.canRecalcHeader) { ++ this.recalculateHeader(); ++ return this.getReadStream(chunkcoordintpair); ++ } ++ // Tuinity end + return null; + } else { + int j1 = i1 - 1; +@@ -162,9 +590,21 @@ public class RegionFile implements AutoCloseable { + return this.a(chunkcoordintpair, b(b0)); + } else if (j1 > bytebuffer.remaining()) { + RegionFile.LOGGER.error("Chunk {} stream is truncated: expected {} but read {}", chunkcoordintpair, j1, bytebuffer.remaining()); ++ // Tuinity start - recalculate header on regionfile corruption ++ if (this.canRecalcHeader) { ++ this.recalculateHeader(); ++ return this.getReadStream(chunkcoordintpair); ++ } ++ // Tuinity end + return null; + } else if (j1 < 0) { + RegionFile.LOGGER.error("Declared size {} of chunk {} is negative", i1, chunkcoordintpair); ++ // Tuinity start - recalculate header on regionfile corruption ++ if (this.canRecalcHeader) { ++ this.recalculateHeader(); ++ return this.getReadStream(chunkcoordintpair); ++ } ++ // Tuinity end + return null; + } else { + return this.a(chunkcoordintpair, b0, a(bytebuffer, j1)); +@@ -323,10 +763,15 @@ public class RegionFile implements AutoCloseable { + } + + private ByteBuffer a() { ++ // Tuinity start - add compressionType param ++ return this.getOversizedChunkHolderData(this.getRegionFileCompression()); ++ } ++ private ByteBuffer getOversizedChunkHolderData(RegionFileCompression compressionType) { ++ // Tuinity end + ByteBuffer bytebuffer = ByteBuffer.allocate(5); + + bytebuffer.putInt(1); +- bytebuffer.put((byte) (this.e.a() | 128)); ++ bytebuffer.put((byte) (compressionType.a() | 128)); // Tuinity - replace with compressionType + ((java.nio.Buffer) bytebuffer).flip(); + return bytebuffer; + } +@@ -363,6 +808,7 @@ public class RegionFile implements AutoCloseable { + }; + } + ++ private final void flushHeader() throws IOException { this.b(); } // Tuinity - OBFHELPER + private void b() throws IOException { + ((java.nio.Buffer) this.f).position(0); + this.dataFile.write(this.f, 0L); +diff --git a/src/main/java/net/minecraft/server/RegionFileBitSet.java b/src/main/java/net/minecraft/server/RegionFileBitSet.java +index 1ebdf73cc..cfa3ecb03 100644 +--- a/src/main/java/net/minecraft/server/RegionFileBitSet.java ++++ b/src/main/java/net/minecraft/server/RegionFileBitSet.java +@@ -4,18 +4,42 @@ import java.util.BitSet; + + public class RegionFileBitSet { + +- private final BitSet a = new BitSet(); ++ private final BitSet a = new BitSet(); private final BitSet getBitset() { return this.a; } // Tuinity - OBFHELPER + + public RegionFileBitSet() {} + ++ public final void allocate(int from, int length) { this.a(from, length); } // Tuinity - OBFHELPER + public void a(int i, int j) { + this.a.set(i, i + j); + } + ++ public final void free(int from, int length) { this.b(from, length); } // Tuinity - OBFHELPER + public void b(int i, int j) { + this.a.clear(i, i + j); + } + ++ // Tuinity start ++ public final void copyFrom(RegionFileBitSet other) { ++ BitSet thisBitset = this.getBitset(); ++ BitSet otherBitset = other.getBitset(); ++ ++ for (int i = 0; i < Math.max(thisBitset.size(), otherBitset.size()); ++i) { ++ thisBitset.set(i, otherBitset.get(i)); ++ } ++ } ++ ++ public final boolean tryAllocate(int from, int length) { ++ BitSet bitset = this.getBitset(); ++ int firstSet = bitset.nextSetBit(from); ++ if (firstSet > 0 && firstSet < (from + length)) { ++ return false; ++ } ++ bitset.set(from, from + length); ++ return true; ++ } ++ // Tuinity end ++ ++ public final int allocateNewSpace(final int requiredLength) { return this.a(requiredLength); } // Tuinity - OBFHELPER + public int a(int i) { + int j = 0; + +diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java +index 72118a7dc..3eebeee4c 100644 +--- a/src/main/java/net/minecraft/server/RegionFileCache.java ++++ b/src/main/java/net/minecraft/server/RegionFileCache.java +@@ -18,6 +18,30 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final + this.b = file; + } + ++ // Tuinity start ++ public static ChunkCoordIntPair getRegionFileCoordinates(File file) { ++ String fileName = file.getName(); ++ if (!fileName.startsWith("r.") || !fileName.endsWith(".mca")) { ++ return null; ++ } ++ ++ String[] split = fileName.split("\\."); ++ ++ if (split.length != 4) { ++ return null; ++ } ++ ++ try { ++ int x = Integer.parseInt(split[1]); ++ int z = Integer.parseInt(split[2]); ++ ++ return new ChunkCoordIntPair(x << 5, z << 5); ++ } catch (NumberFormatException ex) { ++ return null; ++ } ++ } ++ // Tuinity end ++ + + // Paper start + public synchronized RegionFile getRegionFileIfLoaded(ChunkCoordIntPair chunkcoordintpair) { // Paper - synchronize for async io +@@ -51,9 +75,9 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final + this.b.mkdirs(); + } + +- File file = new File(this.b, "r." + chunkcoordintpair.getRegionX() + "." + chunkcoordintpair.getRegionZ() + ".mca"); ++ File file = new File(this.b, "r." + chunkcoordintpair.getRegionX() + "." + chunkcoordintpair.getRegionZ() + ".mca"); // Tuinity - diff on change + if (existingOnly && !file.exists()) return null; // CraftBukkit +- RegionFile regionfile1 = new RegionFile(file, this.b); ++ RegionFile regionfile1 = new RegionFile(file, this.b, this instanceof IChunkLoader); // Tuinity - allow for chunk regionfiles to regen header + + this.cache.putAndMoveToFirst(i, regionfile1); + // Paper start +@@ -142,6 +166,13 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final + return null; + } + // CraftBukkit end ++ // Tuinity start - Add regionfile parameter ++ return this.readFromRegionFile(regionfile, chunkcoordintpair); ++ } ++ private NBTTagCompound readFromRegionFile(RegionFile regionfile, ChunkCoordIntPair chunkcoordintpair) throws IOException { ++ // We add the regionfile parameter to avoid the potential deadlock (on fileLock) if we went back to obtain a regionfile ++ // if we decide to re-read ++ // Tuinity end + try { // Paper + DataInputStream datainputstream = regionfile.a(chunkcoordintpair); + // Paper start +@@ -157,6 +188,16 @@ public class RegionFileCache implements AutoCloseable { // Paper - no final + try { + if (datainputstream != null) { + nbttagcompound = NBTCompressedStreamTools.a(datainputstream); ++ // Tuinity start - recover from corrupt regionfile header ++ if (this instanceof IChunkLoader) { ++ ChunkCoordIntPair chunkPos = ChunkRegionLoader.getChunkCoordinate(nbttagcompound); ++ if (!chunkPos.equals(chunkcoordintpair)) { ++ regionfile.recalculateHeader(); ++ regionfile.fileLock.lock(); // otherwise we will unlock twice and only lock once. ++ return this.readFromRegionFile(regionfile, chunkcoordintpair); ++ } ++ } ++ // Tuinity end + return nbttagcompound; + } + +diff --git a/src/main/java/net/minecraft/server/RegionFileCompression.java b/src/main/java/net/minecraft/server/RegionFileCompression.java +index 3382d678e..29137f495 100644 +--- a/src/main/java/net/minecraft/server/RegionFileCompression.java ++++ b/src/main/java/net/minecraft/server/RegionFileCompression.java +@@ -13,7 +13,7 @@ import javax.annotation.Nullable; + + public class RegionFileCompression { + +- private static final Int2ObjectMap d = new Int2ObjectOpenHashMap(); ++ private static final Int2ObjectMap d = new Int2ObjectOpenHashMap(); static final Int2ObjectMap getCompressionTypes() { return RegionFileCompression.d; } // Tuinity - OBFHELPER + public static final RegionFileCompression a = a(new RegionFileCompression(1, GZIPInputStream::new, GZIPOutputStream::new)); + public static final RegionFileCompression b = a(new RegionFileCompression(2, InflaterInputStream::new, DeflaterOutputStream::new)); + public static final RegionFileCompression c = a(new RegionFileCompression(3, (inputstream) -> { +@@ -36,8 +36,8 @@ public class RegionFileCompression { + return regionfilecompression; + } + +- @Nullable +- public static RegionFileCompression a(int i) { ++ @Nullable public static RegionFileCompression getByType(int type) { return RegionFileCompression.a(type); } // Tuinity - OBFHELPER ++ @Nullable public static RegionFileCompression a(int i) { // Tuinity - OBFHELPER + return (RegionFileCompression) RegionFileCompression.d.get(i); + } + +@@ -53,6 +53,7 @@ public class RegionFileCompression { + return (OutputStream) this.g.wrap(outputstream); + } + ++ public final InputStream wrap(InputStream inputstream) throws IOException { return this.a(inputstream); } // Tuinity - OBFHELPER + public InputStream a(InputStream inputstream) throws IOException { + return (InputStream) this.f.wrap(inputstream); + } +diff --git a/src/main/java/net/minecraft/server/Ticket.java b/src/main/java/net/minecraft/server/Ticket.java +index c79aa4a80..36916459c 100644 +--- a/src/main/java/net/minecraft/server/Ticket.java ++++ b/src/main/java/net/minecraft/server/Ticket.java +@@ -5,17 +5,17 @@ import java.util.Objects; + public final class Ticket implements Comparable> { + + private final TicketType a; +- private final int b; ++ private int b; public final void setTicketLevel(final int value) { this.b = value; } // Tuinity - remove final, add set OBFHELPER + public final T identifier; public final T getObjectReason() { return this.identifier; } // Paper - OBFHELPER +- private long d; public final long getCreationTick() { return this.d; } // Paper - OBFHELPER ++ private long d; public final long getCreationTick() { return this.d; } public final void setCreationTick(final long value) { this.d = value; } // Paper - OBFHELPER // Tuinity - OBFHELPER + public int priority = 0; // Paper +- public long delayUnloadBy; // Paper ++ boolean isCached; // Tuinity - delay chunk unloads, this defends against really stupid plugins + + protected Ticket(TicketType tickettype, int i, T t0) { + this.a = tickettype; + this.b = i; + this.identifier = t0; +- this.delayUnloadBy = tickettype.loadPeriod; // Paper ++ // Tuinity - delay chunk unloads + } + + public int compareTo(Ticket ticket) { +@@ -64,8 +64,9 @@ public final class Ticket implements Comparable> { + this.d = i; + } + ++ protected final boolean isExpired(long time) { return this.b(time); } // Tuinity - OBFHELPER + protected boolean b(long i) { +- long j = delayUnloadBy; // Paper ++ long j = this.a.b(); // Tuinity - delay chunk unloads + + return j != 0L && i - this.d > j; + } +diff --git a/src/main/java/net/minecraft/server/TicketType.java b/src/main/java/net/minecraft/server/TicketType.java +index 5c789b25f..4657b05a4 100644 +--- a/src/main/java/net/minecraft/server/TicketType.java ++++ b/src/main/java/net/minecraft/server/TicketType.java +@@ -26,7 +26,8 @@ public class TicketType { + public static final TicketType ASYNC_LOAD = a("async_load", Long::compareTo); // Paper + public static final TicketType PRIORITY = a("priority", Comparator.comparingLong(ChunkCoordIntPair::pair), 300); // Paper + public static final TicketType URGENT = a("urgent", Comparator.comparingLong(ChunkCoordIntPair::pair), 300); // Paper +- public static final TicketType DELAY_UNLOAD = a("delay_unload", Long::compareTo, 300); // Paper ++ public static final TicketType DELAYED_UNLOAD = a("delayed_unload", Long::compareTo); // Tuinity - delay chunk unloads ++ public static final TicketType REQUIRED_LOAD = a("required_load", Long::compareTo); // Tuinity - make sure getChunkAt does not fail + + public static TicketType a(String s, Comparator comparator) { + return new TicketType<>(s, comparator, 0L); +diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java +index a8e64dfda..652ad383a 100644 +--- a/src/main/java/net/minecraft/server/TileEntity.java ++++ b/src/main/java/net/minecraft/server/TileEntity.java +@@ -12,7 +12,7 @@ import org.bukkit.inventory.InventoryHolder; + import co.aikar.timings.MinecraftTimings; // Paper + import co.aikar.timings.Timing; // Paper + +-public abstract class TileEntity implements KeyedObject { // Paper ++public abstract class TileEntity implements KeyedObject, Cloneable { // Paper // Tuinity + + public Timing tickTimer = MinecraftTimings.getTileEntityTimings(this); // Paper + // CraftBukkit start - data containers +@@ -27,7 +27,7 @@ public abstract class TileEntity implements KeyedObject { // Paper + protected BlockPosition position; + protected boolean f; + @Nullable +- private IBlockData c; ++ private IBlockData c; protected final IBlockData getBlockDataCache() { return this.c; } public final void setBlockDataCache(final IBlockData value) { this.c = value; } // Tuinity - OBFHELPER + private boolean g; + + public TileEntity(TileEntityTypes tileentitytypes) { +@@ -35,6 +35,51 @@ public abstract class TileEntity implements KeyedObject { // Paper + this.tileType = tileentitytypes; + } + ++ // Tuinity start - pushable TE's ++ public boolean isPushable() { ++ if (!com.tuinity.tuinity.config.TuinityConfig.pistonsCanPushTileEntities) { ++ return false; ++ } ++ IBlockData block = this.getBlock(); ++ if (this.isRemoved() || !this.tileType.isValidBlock(block.getBlock())) { ++ return false; ++ } ++ EnumPistonReaction reaction = block.getPushReaction(); ++ return reaction == EnumPistonReaction.NORMAL || reaction == EnumPistonReaction.PUSH_ONLY; ++ } ++ ++ @Override ++ protected final TileEntity clone() { ++ try { ++ return (TileEntity)super.clone(); ++ } catch (final Throwable thr) { ++ if (thr instanceof ThreadDeath) { ++ throw (ThreadDeath)thr; ++ } ++ throw new InternalError(thr); ++ } ++ } ++ ++ // this method presumes the old TE has been completely dropped from worldstate and has no ties to it anymore (this ++ // includes players interacting with them) ++ public TileEntity createCopyForPush(WorldServer world, BlockPosition oldPos, BlockPosition newPos, IBlockData blockData) { ++ final TileEntity copy = this.clone(); ++ ++ copy.world = world; ++ copy.position = newPos; ++ ++ // removed is manually set to false after placing the entity into the world. ++ copy.setBlockDataCache(blockData); ++ ++ return copy; ++ } ++ ++ // updates TE state to its new position ++ public void onPostPush() { ++ this.update(); ++ } ++ // Tuinity end - pushable TE's ++ + // Paper start + private String tileEntityKeyString = null; + private MinecraftKey tileEntityKey = null; +diff --git a/src/main/java/net/minecraft/server/TileEntityBeacon.java b/src/main/java/net/minecraft/server/TileEntityBeacon.java +index df2d6c3b0..9780ee07b 100644 +--- a/src/main/java/net/minecraft/server/TileEntityBeacon.java ++++ b/src/main/java/net/minecraft/server/TileEntityBeacon.java +@@ -35,7 +35,7 @@ public class TileEntityBeacon extends TileEntity implements ITileInventory, ITic + @Nullable + public IChatBaseComponent customName; + public ChestLock chestLock; +- private final IContainerProperties containerProperties; ++ private IContainerProperties containerProperties; // Tuinity - need non-final for `createCopyForPush` + // CraftBukkit start - add fields and methods + public PotionEffect getPrimaryEffect() { + return (this.primaryEffect != null) ? CraftPotionUtil.toBukkit(new MobEffect(this.primaryEffect, getLevel(), getAmplification(), true, true)) : null; +@@ -46,10 +46,10 @@ public class TileEntityBeacon extends TileEntity implements ITileInventory, ITic + } + // CraftBukkit end + +- public TileEntityBeacon() { +- super(TileEntityTypes.BEACON); +- this.chestLock = ChestLock.a; +- this.containerProperties = new IContainerProperties() { ++ // Tuinity start - pushable TE's ++ protected final IContainerProperties getNewContainerProperties() { ++ // moved from constructor - this should be re-copied if it changes ++ return new IContainerProperties() { + @Override + public int getProperty(int i) { + switch (i) { +@@ -90,6 +90,22 @@ public class TileEntityBeacon extends TileEntity implements ITileInventory, ITic + }; + } + ++ @Override ++ public TileEntity createCopyForPush(WorldServer world, BlockPosition oldPos, BlockPosition newPos, IBlockData blockData) { ++ TileEntityBeacon copy = (TileEntityBeacon)super.createCopyForPush(world, oldPos, newPos, blockData); ++ ++ copy.containerProperties = copy.getNewContainerProperties(); // old properties retains reference to old te ++ ++ return copy; ++ } ++ // Tuinity end - pushable TE's ++ ++ public TileEntityBeacon() { ++ super(TileEntityTypes.BEACON); ++ this.chestLock = ChestLock.a; ++ this.containerProperties = this.getNewContainerProperties(); // Tuinity - move into function ++ } ++ + @Override + public void tick() { + int i = this.position.getX(); +diff --git a/src/main/java/net/minecraft/server/TileEntityBeehive.java b/src/main/java/net/minecraft/server/TileEntityBeehive.java +index 417152d16..42374183b 100644 +--- a/src/main/java/net/minecraft/server/TileEntityBeehive.java ++++ b/src/main/java/net/minecraft/server/TileEntityBeehive.java +@@ -12,6 +12,13 @@ public class TileEntityBeehive extends TileEntity implements ITickable { + public BlockPosition flowerPos = null; + public int maxBees = 3; // CraftBukkit - allow setting max amount of bees a hive can hold + ++ // Tuinity start - pushable TE's ++ @Override ++ public boolean isPushable() { ++ return false; // TODO until there is a good solution to making the already existing bees in the world re-acquire this position, this cannot be done. ++ } ++ // Tuinity end - pushable TE's ++ + public TileEntityBeehive() { + super(TileEntityTypes.BEEHIVE); + } +diff --git a/src/main/java/net/minecraft/server/TileEntityBrewingStand.java b/src/main/java/net/minecraft/server/TileEntityBrewingStand.java +index 441157cf7..438d14dd2 100644 +--- a/src/main/java/net/minecraft/server/TileEntityBrewingStand.java ++++ b/src/main/java/net/minecraft/server/TileEntityBrewingStand.java +@@ -24,7 +24,7 @@ public class TileEntityBrewingStand extends TileEntityContainer implements IWorl + private boolean[] j; + private Item k; + public int fuelLevel; +- protected final IContainerProperties a; ++ protected IContainerProperties a; protected final void setContainerProperties(IContainerProperties value) { this.a = value; } // Tuinity - OBFHELPER // Tuinity - need non-final for `createCopyForPush` + // CraftBukkit start - add fields and methods + private int lastTick = MinecraftServer.currentTick; + public List transaction = new java.util.ArrayList(); +@@ -56,10 +56,10 @@ public class TileEntityBrewingStand extends TileEntityContainer implements IWorl + } + // CraftBukkit end + +- public TileEntityBrewingStand() { +- super(TileEntityTypes.BREWING_STAND); +- this.items = NonNullList.a(5, ItemStack.a); +- this.a = new IContainerProperties() { ++ // Tuinity start - pushable TE's ++ protected final IContainerProperties getNewContainerProperties() { ++ // moved from constructor - this should be re-copied if it changes ++ return new IContainerProperties() { + @Override + public int getProperty(int i) { + switch (i) { +@@ -91,6 +91,22 @@ public class TileEntityBrewingStand extends TileEntityContainer implements IWorl + }; + } + ++ @Override ++ public TileEntity createCopyForPush(WorldServer world, BlockPosition oldPos, BlockPosition newPos, IBlockData blockData) { ++ TileEntityBrewingStand copy = (TileEntityBrewingStand)super.createCopyForPush(world, oldPos, newPos, blockData); ++ ++ copy.setContainerProperties(copy.getNewContainerProperties()); // old properties retains reference to old te ++ ++ return copy; ++ } ++ // Tuinity end - pushable TE's ++ ++ public TileEntityBrewingStand() { ++ super(TileEntityTypes.BREWING_STAND); ++ this.items = NonNullList.a(5, ItemStack.a); ++ this.a = this.getNewContainerProperties(); ++ } ++ + @Override + protected IChatBaseComponent getContainerName() { + return new ChatMessage("container.brewing", new Object[0]); +diff --git a/src/main/java/net/minecraft/server/TileEntityChest.java b/src/main/java/net/minecraft/server/TileEntityChest.java +index 9a5f2da8c..50a8d59da 100644 +--- a/src/main/java/net/minecraft/server/TileEntityChest.java ++++ b/src/main/java/net/minecraft/server/TileEntityChest.java +@@ -45,6 +45,22 @@ public class TileEntityChest extends TileEntityLootable { // Paper - Remove ITic + } + // CraftBukkit end + ++ // Tuinity start ++ @Override ++ public boolean isPushable() { ++ if (!super.isPushable()) { ++ return false; ++ } ++ // what should happen when a double chest is moved is generally just a mess to deal with in the current ++ // codebase. ++ IBlockData type = this.getBlock(); ++ if (type.getBlock() == Blocks.CHEST || type.getBlock() == Blocks.TRAPPED_CHEST) { ++ return type.get(BlockChest.getChestTypeEnum()) == BlockPropertyChestType.SINGLE; ++ } ++ return false; ++ } ++ // Tuinity end ++ + protected TileEntityChest(TileEntityTypes tileentitytypes) { + super(tileentitytypes); + this.items = NonNullList.a(27, ItemStack.a); +diff --git a/src/main/java/net/minecraft/server/TileEntityConduit.java b/src/main/java/net/minecraft/server/TileEntityConduit.java +index 07f265b29..34c191d76 100644 +--- a/src/main/java/net/minecraft/server/TileEntityConduit.java ++++ b/src/main/java/net/minecraft/server/TileEntityConduit.java +@@ -16,15 +16,32 @@ public class TileEntityConduit extends TileEntity implements ITickable { + private static final Block[] b = new Block[]{Blocks.PRISMARINE, Blocks.PRISMARINE_BRICKS, Blocks.SEA_LANTERN, Blocks.DARK_PRISMARINE}; + public int a; + private float c; +- private boolean g; ++ private boolean g; private final void setActive(boolean value) { this.g = value; } // Tuinity - OBFHELPER + private boolean h; +- private final List i; ++ private final List i; private final List getPositionsActivating() { return this.i; } // Tuinity - OBFHELPER + @Nullable + private EntityLiving target; + @Nullable + private UUID k; + private long l; + ++ // Tuinity start - make TE's pushable ++ @Override ++ public TileEntity createCopyForPush(WorldServer world, BlockPosition oldPos, BlockPosition newPos, IBlockData blockData) { ++ final TileEntityConduit copy = (TileEntityConduit)super.createCopyForPush(world, oldPos, newPos, blockData); ++ ++ // the following states need to be re-calculated ++ copy.getPositionsActivating().clear(); ++ copy.setActive(false); ++ copy.target = null; ++ // also set our state because the copy and this share the same activating block list ++ this.setActive(false); ++ this.target = null; ++ ++ return copy; ++ } ++ // Tuinity end - make TE's pushable ++ + public TileEntityConduit() { + this(TileEntityTypes.CONDUIT); + } +diff --git a/src/main/java/net/minecraft/server/TileEntityFurnace.java b/src/main/java/net/minecraft/server/TileEntityFurnace.java +index d5432bfeb..7d50b7056 100644 +--- a/src/main/java/net/minecraft/server/TileEntityFurnace.java ++++ b/src/main/java/net/minecraft/server/TileEntityFurnace.java +@@ -30,14 +30,14 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I + public double cookSpeedMultiplier = 1.0; // Paper - cook speed multiplier API + public int cookTime; + public int cookTimeTotal; +- protected final IContainerProperties b; ++ protected IContainerProperties b; protected final void setContainerProperties(IContainerProperties value) { this.b = value; } // Tuinity - OBFHELPER // Tuinity - need non-final for `createCopyForPush` + private final Map n; + protected final Recipes c; + +- protected TileEntityFurnace(TileEntityTypes tileentitytypes, Recipes recipes) { +- super(tileentitytypes); +- this.items = NonNullList.a(3, ItemStack.a); +- this.b = new IContainerProperties() { ++ // Tuinity start - pushable TE's ++ protected final IContainerProperties getNewContainerProperties() { ++ // moved from constructor - this should be re-copied if it changes ++ return new IContainerProperties() { + @Override + public int getProperty(int i) { + switch (i) { +@@ -77,6 +77,22 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I + return 4; + } + }; ++ } ++ ++ @Override ++ public TileEntity createCopyForPush(WorldServer world, BlockPosition oldPos, BlockPosition newPos, IBlockData blockData) { ++ TileEntityFurnace copy = (TileEntityFurnace)super.createCopyForPush(world, oldPos, newPos, blockData); ++ ++ copy.setContainerProperties(copy.getNewContainerProperties()); // old properties retains reference to old te ++ ++ return copy; ++ } ++ // Tuinity end - pushable TE's ++ ++ protected TileEntityFurnace(TileEntityTypes tileentitytypes, Recipes recipes) { ++ super(tileentitytypes); ++ this.items = NonNullList.a(3, ItemStack.a); ++ this.b = this.getNewContainerProperties(); + this.n = Maps.newHashMap(); + this.c = recipes; + } +diff --git a/src/main/java/net/minecraft/server/TileEntityJukeBox.java b/src/main/java/net/minecraft/server/TileEntityJukeBox.java +index d66d9ff18..470f31083 100644 +--- a/src/main/java/net/minecraft/server/TileEntityJukeBox.java ++++ b/src/main/java/net/minecraft/server/TileEntityJukeBox.java +@@ -4,6 +4,13 @@ public class TileEntityJukeBox extends TileEntity implements Clearable { + + private ItemStack a; + ++ // Tuinity start - pushable TE's ++ @Override ++ public boolean isPushable() { ++ return false; // disabled due to buggy sound ++ } ++ // Tuinity end - pushable TE's ++ + public TileEntityJukeBox() { + super(TileEntityTypes.JUKEBOX); + this.a = ItemStack.a; +diff --git a/src/main/java/net/minecraft/server/TileEntityLectern.java b/src/main/java/net/minecraft/server/TileEntityLectern.java +index 6c2b48bdb..c3b854b6a 100644 +--- a/src/main/java/net/minecraft/server/TileEntityLectern.java ++++ b/src/main/java/net/minecraft/server/TileEntityLectern.java +@@ -16,7 +16,7 @@ import org.bukkit.inventory.InventoryHolder; + public class TileEntityLectern extends TileEntity implements Clearable, ITileInventory, ICommandListener { // CraftBukkit - ICommandListener + + // CraftBukkit start - add fields and methods +- public final IInventory inventory = new LecternInventory(); ++ public IInventory inventory = new LecternInventory(); // Tuinity - need non-final for `createCopyForPush` + public class LecternInventory implements IInventory { + + public List transaction = new ArrayList<>(); +@@ -136,29 +136,48 @@ public class TileEntityLectern extends TileEntity implements Clearable, ITileInv + @Override + public void clear() {} + }; +- private final IContainerProperties containerProperties = new IContainerProperties() { +- @Override +- public int getProperty(int i) { +- return i == 0 ? TileEntityLectern.this.page : 0; +- } ++ // Tuinity start - pushable TE's ++ private IContainerProperties containerProperties = this.getNewContainerProperties(); // Tuinity - need non-final for `createCopyForPush` ++ ++ protected final IContainerProperties getNewContainerProperties() { ++ return new IContainerProperties() { ++ @Override ++ public int getProperty(int i) { ++ return i == 0 ? TileEntityLectern.this.page : 0; ++ } ++ ++ @Override ++ public void setProperty(int i, int j) { ++ if (i == 0) { ++ TileEntityLectern.this.setPage(j); ++ } + +- @Override +- public void setProperty(int i, int j) { +- if (i == 0) { +- TileEntityLectern.this.setPage(j); + } + +- } ++ @Override ++ public int a() { ++ return 1; ++ } ++ }; ++ } ++ // Tuinity end - pushable TE's + +- @Override +- public int a() { +- return 1; +- } +- }; + private ItemStack book; + private int page; + private int maxPage; + ++ // Tuinity start - pushable TE's ++ @Override ++ public TileEntity createCopyForPush(WorldServer world, BlockPosition oldPos, BlockPosition newPos, IBlockData blockData) { ++ TileEntityLectern copy = (TileEntityLectern)super.createCopyForPush(world, oldPos, newPos, blockData); ++ ++ copy.inventory = copy.new LecternInventory(); ++ copy.containerProperties = copy.getNewContainerProperties(); // old properties retains reference to old te ++ ++ return copy; ++ } ++ // Tuinity end - pushable TE's ++ + public TileEntityLectern() { + super(TileEntityTypes.LECTERN); + this.book = ItemStack.a; +diff --git a/src/main/java/net/minecraft/server/TileEntityPiston.java b/src/main/java/net/minecraft/server/TileEntityPiston.java +index d700e8281..bd0ebacf7 100644 +--- a/src/main/java/net/minecraft/server/TileEntityPiston.java ++++ b/src/main/java/net/minecraft/server/TileEntityPiston.java +@@ -5,10 +5,10 @@ import java.util.List; + + public class TileEntityPiston extends TileEntity implements ITickable { + +- private IBlockData a; ++ private IBlockData a; protected final IBlockData getBlockData() { return this.a; } // Tuinity - OBFHELPER + private EnumDirection b; + private boolean c; +- private boolean g; ++ private boolean g; protected final boolean isSource() { return this.g; } // Tuinity - OBFHELPER + private static final ThreadLocal h = ThreadLocal.withInitial(() -> { + return null; + }); +@@ -16,12 +16,27 @@ public class TileEntityPiston extends TileEntity implements ITickable { + private float j; + private long k; + ++ // Tuinity start - pushable TE's ++ private TileEntity tileEntity; ++ ++ @Override ++ public boolean isPushable() { ++ return false; // fuck no. ++ } ++ // Tuinity end - pushable TE's ++ + public TileEntityPiston() { + super(TileEntityTypes.PISTON); + } + + public TileEntityPiston(IBlockData iblockdata, EnumDirection enumdirection, boolean flag, boolean flag1) { ++ // Tuinity start - add tileEntity parameter ++ this(iblockdata, enumdirection, flag, flag1, null); ++ } ++ public TileEntityPiston(IBlockData iblockdata, EnumDirection enumdirection, boolean flag, boolean flag1, TileEntity tileEntity) { + this(); ++ this.tileEntity = tileEntity; ++ // Tuinity end - add tileEntity parameter + this.a = iblockdata; + this.b = enumdirection; + this.c = flag; +@@ -30,7 +45,7 @@ public class TileEntityPiston extends TileEntity implements ITickable { + + @Override + public NBTTagCompound b() { +- return this.save(new NBTTagCompound()); ++ return this.save(new NBTTagCompound(), false); // Tuinity - clients don't need the copied tile entity. + } + + public boolean d() { +@@ -257,7 +272,25 @@ public class TileEntityPiston extends TileEntity implements ITickable { + iblockdata = Block.b(this.a, (GeneratorAccess) this.world, this.position); + } + +- this.world.setTypeAndData(this.position, iblockdata, 3); ++ // Tuinity start - pushable TE's ++ if ((iblockdata.isAir() && !this.isSource()) && !this.getBlockData().isAir()) { ++ // if the block can't exist at the location anymore, we need to fire drops for it, as ++ // setTypeAndData wont. ++ ++ // careful - the previous pos is moving_piston, which wont fire drops. So we're safe from dupes. ++ // but the setAir should be before the drop. ++ this.world.setAir(this.position, false); ++ Block.dropItems(this.getBlockData(), this.world, this.position, null, null, ItemStack.NULL_ITEM); ++ } else { ++ // need to set to air before else the setTypeAndData call will create a new TE and override ++ // the old one ++ this.world.setTypeAndDataRaw(this.position, Blocks.AIR.getBlockData(), null); ++ this.world.setTypeAndData(this.position, iblockdata, 3, iblockdata.getBlock() == this.getBlockData().getBlock() ? this.tileEntity : null); ++ } ++ if (this.tileEntity != null && this.world.getType(this.position).getBlock() == this.getBlockData().getBlock()) { ++ this.tileEntity.onPostPush(); ++ } ++ // Tuinity end - pushable TE's + this.world.a(this.position, iblockdata.getBlock(), this.position); + } + } +@@ -282,7 +315,12 @@ public class TileEntityPiston extends TileEntity implements ITickable { + iblockdata = (IBlockData) iblockdata.set(BlockProperties.C, false); + } + +- this.world.setTypeAndData(this.position, iblockdata, 67); ++ // Tuinity start - pushable TE's ++ this.world.setTypeAndData(this.position, iblockdata, 67, this.tileEntity); ++ if (this.tileEntity != null && this.world.getType(this.position).getBlock() == this.getBlockData().getBlock()) { ++ this.tileEntity.onPostPush(); ++ } ++ // Tuinity end - pushable TE's + this.world.a(this.position, iblockdata.getBlock(), this.position); + } + } +@@ -309,16 +347,34 @@ public class TileEntityPiston extends TileEntity implements ITickable { + this.j = this.i; + this.c = nbttagcompound.getBoolean("extending"); + this.g = nbttagcompound.getBoolean("source"); ++ // Tuinity start - pushable TE's ++ if (nbttagcompound.hasKey("Tuinity.tileEntity")) { ++ NBTTagCompound compound = nbttagcompound.getCompound("Tuinity.tileEntity"); ++ if (!compound.isEmpty()) { ++ this.tileEntity = TileEntity.create(compound); ++ } ++ } ++ // Tuinity end - pushable TE's + } + + @Override + public NBTTagCompound save(NBTTagCompound nbttagcompound) { ++ // Tuinity start - add saveTile param ++ return this.save(nbttagcompound, true); ++ } ++ public NBTTagCompound save(NBTTagCompound nbttagcompound, boolean saveTile) { ++ // Tuinity end - add saveTile param + super.save(nbttagcompound); + nbttagcompound.set("blockState", GameProfileSerializer.a(this.a)); + nbttagcompound.setInt("facing", this.b.b()); + nbttagcompound.setFloat("progress", this.j); + nbttagcompound.setBoolean("extending", this.c); + nbttagcompound.setBoolean("source", this.g); ++ // Tuinity start - pushable TE's ++ if (saveTile && this.tileEntity != null) { ++ nbttagcompound.set("Tuinity.tileEntity", this.tileEntity.save(new NBTTagCompound())); ++ } ++ // Tuinity end - pushable TE's + return nbttagcompound; + } + +diff --git a/src/main/java/net/minecraft/server/Vec3D.java b/src/main/java/net/minecraft/server/Vec3D.java +index 0c7f094e5..c2e4b5e8d 100644 +--- a/src/main/java/net/minecraft/server/Vec3D.java ++++ b/src/main/java/net/minecraft/server/Vec3D.java +@@ -4,7 +4,7 @@ import java.util.EnumSet; + + public class Vec3D implements IPosition { + +- public static final Vec3D a = new Vec3D(0.0D, 0.0D, 0.0D); ++ public static final Vec3D a = new Vec3D(0.0D, 0.0D, 0.0D); public static Vec3D getZeroVector() { return Vec3D.a; } // Tuinity - OBFHELPER + public final double x; + public final double y; + public final double z; +@@ -49,6 +49,7 @@ public class Vec3D implements IPosition { + return this.add(-d0, -d1, -d2); + } + ++ public final Vec3D add(Vec3D vec3d) { return this.e(vec3d); } // Tuinity - OBFHELPER + public Vec3D e(Vec3D vec3d) { + return this.add(vec3d.x, vec3d.y, vec3d.z); + } +@@ -93,10 +94,12 @@ public class Vec3D implements IPosition { + return new Vec3D(this.x * d0, this.y * d1, this.z * d2); + } + ++ public final double magnitude() { return this.f(); } // Tuinity - OBFHELPER + public double f() { + return (double) MathHelper.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); + } + ++ public final double magnitudeSquared() { return this.g(); } // Tuinity - OBFHELPER + public double g() { + return this.x * this.x + this.y * this.y + this.z * this.z; + } +diff --git a/src/main/java/net/minecraft/server/VillagePlace.java b/src/main/java/net/minecraft/server/VillagePlace.java +index 1a5ec6152..5b52b380e 100644 +--- a/src/main/java/net/minecraft/server/VillagePlace.java ++++ b/src/main/java/net/minecraft/server/VillagePlace.java +@@ -150,7 +150,7 @@ public class VillagePlace extends RegionFileSection { + data = this.getData(chunkcoordintpair); + } + com.destroystokyo.paper.io.PaperFileIOThread.Holder.INSTANCE.scheduleSave(this.world, +- chunkcoordintpair.x, chunkcoordintpair.z, data, null, com.destroystokyo.paper.io.PrioritizedTaskQueue.LOW_PRIORITY); ++ chunkcoordintpair.x, chunkcoordintpair.z, data, null, com.destroystokyo.paper.io.PrioritizedTaskQueue.NORMAL_PRIORITY); // Tuinity - use normal priority + } + } + // Paper end +diff --git a/src/main/java/net/minecraft/server/VoxelShape.java b/src/main/java/net/minecraft/server/VoxelShape.java +index 0f95bcbcc..cb47d466c 100644 +--- a/src/main/java/net/minecraft/server/VoxelShape.java ++++ b/src/main/java/net/minecraft/server/VoxelShape.java +@@ -8,11 +8,11 @@ import javax.annotation.Nullable; + + public abstract class VoxelShape { + +- protected final VoxelShapeDiscrete a; ++ protected final VoxelShapeDiscrete a; public final VoxelShapeDiscrete getShape() { return this.a; } // Tuinity - OBFHELPER + @Nullable + private VoxelShape[] b; + +- VoxelShape(VoxelShapeDiscrete voxelshapediscrete) { ++ protected VoxelShape(VoxelShapeDiscrete voxelshapediscrete) { // Tuinity + this.a = voxelshapediscrete; + } + +@@ -51,6 +51,12 @@ public abstract class VoxelShape { + return (VoxelShape) (this.isEmpty() ? VoxelShapes.a() : new VoxelShapeArray(this.a, new DoubleListOffset(this.a(EnumDirection.EnumAxis.X), d0), new DoubleListOffset(this.a(EnumDirection.EnumAxis.Y), d1), new DoubleListOffset(this.a(EnumDirection.EnumAxis.Z), d2))); + } + ++ // Tuinity start - optimise multi-aabb shapes ++ public boolean intersects(final AxisAlignedBB axisalingedbb) { ++ return VoxelShapes.applyOperation(this, new com.tuinity.tuinity.voxel.AABBVoxelShape(axisalingedbb), OperatorBoolean.AND); ++ } ++ // Tuinity end - optimise multi-aabb shapes ++ + public VoxelShape c() { + VoxelShape[] avoxelshape = new VoxelShape[]{VoxelShapes.a()}; + +@@ -70,6 +76,7 @@ public abstract class VoxelShape { + }, true); + } + ++ public final List getBoundingBoxesRepresentation() { return this.d(); } // Tuinity - OBFHELPER + public List d() { + List list = Lists.newArrayList(); + +diff --git a/src/main/java/net/minecraft/server/VoxelShapeArray.java b/src/main/java/net/minecraft/server/VoxelShapeArray.java +index caf297fe9..8d68c783f 100644 +--- a/src/main/java/net/minecraft/server/VoxelShapeArray.java ++++ b/src/main/java/net/minecraft/server/VoxelShapeArray.java +@@ -3,6 +3,7 @@ package net.minecraft.server; + import it.unimi.dsi.fastutil.doubles.DoubleArrayList; + import it.unimi.dsi.fastutil.doubles.DoubleList; + import java.util.Arrays; ++import java.util.List; + + public final class VoxelShapeArray extends VoxelShape { + +@@ -10,11 +11,25 @@ public final class VoxelShapeArray extends VoxelShape { + private final DoubleList c; + private final DoubleList d; + ++ // Tuinity start - optimise multi-aabb shapes ++ static final AxisAlignedBB[] EMPTY = new AxisAlignedBB[0]; ++ final AxisAlignedBB[] boundingBoxesRepresentation; ++ ++ final double offsetX; ++ final double offsetY; ++ final double offsetZ; ++ // Tuinity end - optimise multi-aabb shapes ++ + protected VoxelShapeArray(VoxelShapeDiscrete voxelshapediscrete, double[] adouble, double[] adouble1, double[] adouble2) { + this(voxelshapediscrete, (DoubleList) DoubleArrayList.wrap(Arrays.copyOf(adouble, voxelshapediscrete.b() + 1)), (DoubleList) DoubleArrayList.wrap(Arrays.copyOf(adouble1, voxelshapediscrete.c() + 1)), (DoubleList) DoubleArrayList.wrap(Arrays.copyOf(adouble2, voxelshapediscrete.d() + 1))); + } + + VoxelShapeArray(VoxelShapeDiscrete voxelshapediscrete, DoubleList doublelist, DoubleList doublelist1, DoubleList doublelist2) { ++ // Tuinity start - optimise multi-aabb shapes ++ this(voxelshapediscrete, doublelist, doublelist1, doublelist2, null, null, 0.0, 0.0, 0.0); ++ } ++ VoxelShapeArray(VoxelShapeDiscrete voxelshapediscrete, DoubleList doublelist, DoubleList doublelist1, DoubleList doublelist2, VoxelShapeArray original, AxisAlignedBB[] boundingBoxesRepresentation, double offsetX, double offsetY, double offsetZ) { ++ // Tuinity end - optimise multi-aabb shapes + super(voxelshapediscrete); + int i = voxelshapediscrete.b() + 1; + int j = voxelshapediscrete.c() + 1; +@@ -27,6 +42,18 @@ public final class VoxelShapeArray extends VoxelShape { + } else { + throw (IllegalArgumentException) SystemUtils.c(new IllegalArgumentException("Lengths of point arrays must be consistent with the size of the VoxelShape.")); + } ++ // Tuinity start - optimise multi-aabb shapes ++ this.boundingBoxesRepresentation = boundingBoxesRepresentation == null ? this.getBoundingBoxesRepresentation().toArray(EMPTY) : boundingBoxesRepresentation; // Tuinity - optimise multi-aabb shapes ++ if (original == null) { ++ this.offsetX = offsetX; ++ this.offsetY = offsetY; ++ this.offsetZ = offsetZ; ++ } else { ++ this.offsetX = offsetX + original.offsetX; ++ this.offsetY = offsetY + original.offsetY; ++ this.offsetZ = offsetZ + original.offsetZ; ++ } ++ // Tuinity end - optimise multi-aabb shapes + } + + @Override +@@ -42,4 +69,49 @@ public final class VoxelShapeArray extends VoxelShape { + throw new IllegalArgumentException(); + } + } ++ ++ // Tuinity start - optimise multi-aabb shapes ++ @Override ++ public VoxelShape a(double d0, double d1, double d2) { ++ if (this == VoxelShapes.getEmptyShape() || this.boundingBoxesRepresentation.length == 0) { ++ return this; ++ } ++ return new VoxelShapeArray(this.a, new DoubleListOffset(this.a(EnumDirection.EnumAxis.X), d0), new DoubleListOffset(this.a(EnumDirection.EnumAxis.Y), d1), new DoubleListOffset(this.a(EnumDirection.EnumAxis.Z), d2), this, this.boundingBoxesRepresentation, d0, d1, d2); ++ } ++ ++ public final AxisAlignedBB[] getBoundingBoxesRepresentationRaw() { ++ return this.boundingBoxesRepresentation; ++ } ++ ++ public final double getOffsetX() { ++ return this.offsetX; ++ } ++ ++ public final double getOffsetY() { ++ return this.offsetY; ++ } ++ ++ public final double getOffsetZ() { ++ return this.offsetZ; ++ } ++ ++ public final boolean intersects(AxisAlignedBB axisalingedbb) { ++ double minX = axisalingedbb.minX - this.offsetX; ++ double maxX = axisalingedbb.maxX - this.offsetX; ++ double minY = axisalingedbb.minY - this.offsetY; ++ double maxY = axisalingedbb.maxY - this.offsetY; ++ double minZ = axisalingedbb.minZ - this.offsetZ; ++ double maxZ = axisalingedbb.maxZ - this.offsetZ; ++ ++ // this can be optimised by checking an "overall shape" ++ ++ for (AxisAlignedBB boundingBox : this.boundingBoxesRepresentation) { ++ if (boundingBox.intersects(minX, minY, minZ, maxX, maxY, maxZ)) { ++ return true; ++ } ++ } ++ ++ return false; ++ } ++ // Tuinity end - optimise multi-aabb shapes + } +diff --git a/src/main/java/net/minecraft/server/VoxelShapes.java b/src/main/java/net/minecraft/server/VoxelShapes.java +index 4b3e632a8..5e24ce485 100644 +--- a/src/main/java/net/minecraft/server/VoxelShapes.java ++++ b/src/main/java/net/minecraft/server/VoxelShapes.java +@@ -17,18 +17,81 @@ public final class VoxelShapes { + + voxelshapebitset.a(0, 0, 0, true, true); + return new VoxelShapeCube(voxelshapebitset); +- }); ++ }); public static final VoxelShape getFullUnoptimisedCube() { return VoxelShapes.b; } // Tuinity - OBFHELPER + public static final VoxelShape a = create(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY); +- private static final VoxelShape c = new VoxelShapeArray(new VoxelShapeBitSet(0, 0, 0), new DoubleArrayList(new double[]{0.0D}), new DoubleArrayList(new double[]{0.0D}), new DoubleArrayList(new double[]{0.0D})); ++ private static final VoxelShape c = new VoxelShapeArray(new VoxelShapeBitSet(0, 0, 0), new DoubleArrayList(new double[]{0.0D}), new DoubleArrayList(new double[]{0.0D}), new DoubleArrayList(new double[]{0.0D})); static final VoxelShape getEmptyShape() { return VoxelShapes.c; } // Tuinity - OBFHELPER ++ ++ // Tuinity start - optimise voxelshapes ++ public static boolean isEmpty(VoxelShape voxelshape) { ++ // helper function for determining empty shapes fast ++ return voxelshape == getEmptyShape() || voxelshape.isEmpty(); ++ } ++ // Tuinity end - optimise voxelshapes + + public static final VoxelShape empty() {return a();} // Paper - OBFHELPER + public static VoxelShape a() { + return VoxelShapes.c; + } + ++ static final com.tuinity.tuinity.voxel.AABBVoxelShape optimisedFullCube = new com.tuinity.tuinity.voxel.AABBVoxelShape(new AxisAlignedBB(0, 0, 0, 1.0, 1.0, 1.0)); // Tuinity - optimise voxelshape ++ ++ // Tuinity start - optimise voxelshapes ++ public static void addBoxesToIfIntersects(VoxelShape shape, AxisAlignedBB aabb, java.util.List list) { ++ if (shape instanceof com.tuinity.tuinity.voxel.AABBVoxelShape) { ++ com.tuinity.tuinity.voxel.AABBVoxelShape shapeCasted = (com.tuinity.tuinity.voxel.AABBVoxelShape)shape; ++ if (shapeCasted.aabb.intersects(aabb)) { ++ list.add(shapeCasted.aabb); ++ } ++ } else if (shape instanceof VoxelShapeArray) { ++ VoxelShapeArray shapeCasted = (VoxelShapeArray)shape; ++ double minX = aabb.minX - shapeCasted.offsetX; ++ double maxX = aabb.maxX - shapeCasted.offsetX; ++ double minY = aabb.minY - shapeCasted.offsetY; ++ double maxY = aabb.maxY - shapeCasted.offsetY; ++ double minZ = aabb.minZ - shapeCasted.offsetZ; ++ double maxZ = aabb.maxZ - shapeCasted.offsetZ; ++ ++ // this can be optimised by checking an "overall shape" ++ ++ for (AxisAlignedBB boundingBox : shapeCasted.boundingBoxesRepresentation) { ++ if (boundingBox.intersects(minX, minY, minZ, maxX, maxY, maxZ)) { ++ list.add(boundingBox.offset(shapeCasted.offsetX, shapeCasted.offsetY, shapeCasted.offsetZ)); ++ } ++ } ++ } else { ++ java.util.List boxes = shape.getBoundingBoxesRepresentation(); ++ for (int i = 0, len = boxes.size(); i < len; ++i) { ++ AxisAlignedBB box = boxes.get(i); ++ if (box.intersects(aabb)) { ++ list.add(box); ++ } ++ } ++ } ++ } ++ ++ public static void addBoxesTo(VoxelShape shape, java.util.List list) { ++ if (shape instanceof com.tuinity.tuinity.voxel.AABBVoxelShape) { ++ com.tuinity.tuinity.voxel.AABBVoxelShape shapeCasted = (com.tuinity.tuinity.voxel.AABBVoxelShape)shape; ++ list.add(shapeCasted.aabb); ++ } else if (shape instanceof VoxelShapeArray) { ++ VoxelShapeArray shapeCasted = (VoxelShapeArray)shape; ++ ++ for (AxisAlignedBB boundingBox : shapeCasted.boundingBoxesRepresentation) { ++ list.add(boundingBox.offset(shapeCasted.offsetX, shapeCasted.offsetY, shapeCasted.offsetZ)); ++ } ++ } else { ++ java.util.List boxes = shape.getBoundingBoxesRepresentation(); ++ for (int i = 0, len = boxes.size(); i < len; ++i) { ++ AxisAlignedBB box = boxes.get(i); ++ list.add(box); ++ } ++ } ++ } ++ // Tuinity end - optimise voxelshapes ++ + public static final VoxelShape fullCube() {return b();} // Paper - OBFHELPER + public static VoxelShape b() { +- return VoxelShapes.b; ++ return VoxelShapes.optimisedFullCube; // Tuinity - optimise voxelshape + } + + public static VoxelShape create(double d0, double d1, double d2, double d3, double d4, double d5) { +@@ -67,7 +130,7 @@ public final class VoxelShapes { + return new VoxelShapeCube(voxelshapebitset); + } + } else { +- return new VoxelShapeArray(VoxelShapes.b.a, new double[]{axisalignedbb.minX, axisalignedbb.maxX}, new double[]{axisalignedbb.minY, axisalignedbb.maxY}, new double[]{axisalignedbb.minZ, axisalignedbb.maxZ}); ++ return new com.tuinity.tuinity.voxel.AABBVoxelShape(axisalignedbb); // Tuinity - optimise VoxelShapes for single AABB shapes + } + } + +@@ -132,6 +195,14 @@ public final class VoxelShapes { + + public static final boolean applyOperation(VoxelShape voxelshape, VoxelShape voxelshape1, OperatorBoolean operatorboolean) { return VoxelShapes.c(voxelshape, voxelshape1, operatorboolean); } // Paper - OBFHELPER + public static boolean c(VoxelShape voxelshape, VoxelShape voxelshape1, OperatorBoolean operatorboolean) { ++ // Tuinity start - optimise voxelshape ++ if (operatorboolean == OperatorBoolean.AND && voxelshape instanceof com.tuinity.tuinity.voxel.AABBVoxelShape && voxelshape1 instanceof com.tuinity.tuinity.voxel.AABBVoxelShape) { ++ return ((com.tuinity.tuinity.voxel.AABBVoxelShape) voxelshape).aabb.intersects(((com.tuinity.tuinity.voxel.AABBVoxelShape) voxelshape1).aabb); ++ } ++ return abstract_c(voxelshape, voxelshape1, operatorboolean); ++ } ++ public static boolean abstract_c(VoxelShape voxelshape, VoxelShape voxelshape1, OperatorBoolean operatorboolean) { ++ // Tuinity end - optimise voxelshape + if (operatorboolean.apply(false, false)) { + throw (IllegalArgumentException) SystemUtils.c(new IllegalArgumentException()); + } else if (voxelshape == voxelshape1) { +diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java +index 032b7acee..6ae9ec627 100644 +--- a/src/main/java/net/minecraft/server/World.java ++++ b/src/main/java/net/minecraft/server/World.java +@@ -88,6 +88,8 @@ public abstract class World implements GeneratorAccess, AutoCloseable { + public final com.destroystokyo.paper.PaperWorldConfig paperConfig; // Paper + public final ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray + ++ public final com.tuinity.tuinity.config.TuinityConfig.WorldConfig tuinityConfig; // Tuinity - Server Config ++ + public final co.aikar.timings.WorldTimingsHandler timings; // Paper + public static BlockPosition lastPhysicsProblem; // Spigot + private org.spigotmc.TickLimiter entityLimiter; +@@ -137,6 +139,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { + this.spigotConfig = new org.spigotmc.SpigotWorldConfig( worlddata.getName() ); // Spigot + this.paperConfig = new com.destroystokyo.paper.PaperWorldConfig(worlddata.getName(), this.spigotConfig); // Paper + this.chunkPacketBlockController = this.paperConfig.antiXray ? new ChunkPacketBlockControllerAntiXray(this.paperConfig, executor) : ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray ++ this.tuinityConfig = new com.tuinity.tuinity.config.TuinityConfig.WorldConfig(worlddata.getName()); // Tuinity - Server Config + this.generator = gen; + if (dimensionmanager.world == null) dimensionmanager.world = (WorldServer) this; // Paper + this.world = new CraftWorld((WorldServer) this, gen, env); +@@ -338,8 +341,28 @@ public abstract class World implements GeneratorAccess, AutoCloseable { + } + } + ++ // Tuinity start ++ // Does not affect TE. This simply just a raw set type - runs no logic. ++ final void setTypeAndDataRaw(final BlockPosition pos, final IBlockData blockData, final TileEntity tileEntity) { ++ this.getChunkAt(pos.getX() >> 4, pos.getZ() >> 4).setTypeAndDataRaw(pos, blockData); ++ if (tileEntity == null) { ++ this.removeTileEntity(pos); ++ } else { ++ this.setTileEntity(pos, tileEntity); ++ } ++ ((WorldServer)this).getChunkProvider().flagDirty(pos); ++ } ++ // Tuinity end ++ + @Override + public boolean setTypeAndData(BlockPosition blockposition, IBlockData iblockdata, int i) { ++ // Tuinity start - add tileEntity parameter ++ return this.setTypeAndData(blockposition, iblockdata, i, null); ++ } ++ // Up to the caller to handle previous tile state. ++ public boolean setTypeAndData(BlockPosition blockposition, IBlockData iblockdata, int i, TileEntity tileEntity) { ++ // Tuinity end - add tileEntity parameter ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async set type call"); // Tuinity + // CraftBukkit start - tree generation + if (this.captureTreeGeneration) { + // Paper start +@@ -372,7 +395,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { + } + // CraftBukkit end + +- IBlockData iblockdata1 = chunk.setType(blockposition, iblockdata, (i & 64) != 0, (i & 1024) == 0); // CraftBukkit custom NO_PLACE flag ++ IBlockData iblockdata1 = chunk.setType(blockposition, iblockdata, (i & 64) != 0, (i & 1024) == 0, tileEntity); // CraftBukkit custom NO_PLACE flag // Tuinity - add tileEntity parameter + this.chunkPacketBlockController.onBlockChange(this, blockposition, iblockdata, iblockdata1, i); // Paper - Anti-Xray + + if (iblockdata1 == null) { +@@ -440,6 +463,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { + + // CraftBukkit start - Split off from above in order to directly send client and physic updates + public void notifyAndUpdatePhysics(BlockPosition blockposition, Chunk chunk, IBlockData oldBlock, IBlockData newBlock, IBlockData actualBlock, int i) { ++ com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Async notify and update"); // Tuinity + IBlockData iblockdata = newBlock; + IBlockData iblockdata1 = oldBlock; + IBlockData iblockdata2 = actualBlock; +@@ -888,6 +912,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { + return; + // Paper end + } ++ MinecraftServer.getServer().executeMidTickTasks(); // Tuinity - execute chunk tasks mid tick + } + + // Paper start - Prevent armor stands from doing entity lookups +@@ -1108,7 +1133,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { + while (iterator.hasNext()) { + TileEntity tileentity1 = (TileEntity) iterator.next(); + +- if (tileentity1.getPosition().equals(blockposition)) { ++ if (tileentity != tileentity1 && tileentity1.getPosition().equals(blockposition)) { // Tuinity - don't remove us if we double set... + tileentity1.ab_(); + iterator.remove(); + } +@@ -1193,6 +1218,11 @@ public abstract class World implements GeneratorAccess, AutoCloseable { + public List getHardCollidingEntities(@Nullable Entity entity, AxisAlignedBB axisalignedbb) { + // copied from below + List list = Lists.newArrayList(); ++ // Tuinity start - add list parameter ++ return this.getHardCollidingEntities(entity, axisalignedbb, list); ++ } ++ public List getHardCollidingEntities(@Nullable Entity entity, AxisAlignedBB axisalignedbb, List list) { ++ // Tuinity end - add list parameter + int i = MathHelper.floor((axisalignedbb.minX - 2.0D) / 16.0D); + int j = MathHelper.floor((axisalignedbb.maxX + 2.0D) / 16.0D); + int k = MathHelper.floor((axisalignedbb.minZ - 2.0D) / 16.0D); +@@ -1216,8 +1246,13 @@ public abstract class World implements GeneratorAccess, AutoCloseable { + + @Override + public List getEntities(@Nullable Entity entity, AxisAlignedBB axisalignedbb, @Nullable Predicate predicate) { +- this.getMethodProfiler().c("getEntities"); ++ // Tuinity start - add list parameter + List list = Lists.newArrayList(); ++ return this.getEntities(entity, axisalignedbb, predicate, list); ++ } ++ public List getEntities(@Nullable Entity entity, AxisAlignedBB axisalignedbb, @Nullable Predicate predicate, List list) { ++ // Tuinity end - add list parameter ++ this.getMethodProfiler().c("getEntities"); + int i = MathHelper.floor((axisalignedbb.minX - 2.0D) / 16.0D); + int j = MathHelper.floor((axisalignedbb.maxX + 2.0D) / 16.0D); + int k = MathHelper.floor((axisalignedbb.minZ - 2.0D) / 16.0D); +diff --git a/src/main/java/net/minecraft/server/WorldBorder.java b/src/main/java/net/minecraft/server/WorldBorder.java +index 535d08ffb..079a73196 100644 +--- a/src/main/java/net/minecraft/server/WorldBorder.java ++++ b/src/main/java/net/minecraft/server/WorldBorder.java +@@ -45,12 +45,43 @@ public class WorldBorder { + return axisalignedbb.maxX > this.c() && axisalignedbb.minX < this.e() && axisalignedbb.maxZ > this.d() && axisalignedbb.minZ < this.f(); + } + ++ // Tuinity start - optimise collisions ++ // determines whether we are colliding with one of the wordborder faces. ++ public final boolean isCollidingOnBorderEdge(AxisAlignedBB boundingBox) { ++ return this.isCollidingOnBorderEdge(boundingBox.minX, boundingBox.maxX, boundingBox.minZ, boundingBox.maxZ); ++ } ++ ++ public final boolean isCollidingOnBorderEdge(double boxMinX, double boxMaxX, double boxMinZ, double boxMaxZ) { ++ double minX = this.getMinX() - 1.0E-7; ++ double maxX = this.getMaxX() + 1.0E-7; ++ ++ double minZ = this.getMinZ() - 1.0E-7; ++ double maxZ = this.getMaxZ() + 1.0E-7; ++ ++ return ++ // First, check if the worldborder is enclosing the specified box. ++ // We check this first as it's most likely to fail. ++ !(minX < boxMinX && maxX > boxMaxX && minZ < boxMinZ && maxZ > boxMaxZ) ++ && ++ ++ // Now we verify if we're even intersecting. ++ (minX < boxMaxX && maxX > boxMinX && minZ < boxMaxZ && maxZ > boxMinZ) ++ && ++ ++ // Now verify that the worldborder isn't being enclosed. ++ // This is never expected to happen, but is left here to ensure our logic ++ // is right 100% of the time. ++ !(boxMinX < minX && boxMaxX > maxX && boxMinZ < minZ && boxMaxZ > maxZ) ++ ; ++ } ++ // Tuinity end - optimise collisions ++ + public double a(Entity entity) { + return this.b(entity.locX(), entity.locZ()); + } + + public final VoxelShape asVoxelShape(){ return a();} // Paper - OBFHELPER +- ++ public final VoxelShape getCollisionShape() { return this.a(); } // Tuinity - OBFHELPER + public VoxelShape a() { + return this.i.m(); + } +@@ -66,18 +97,22 @@ public class WorldBorder { + return Math.min(d6, d3); + } + ++ public final double getMinX() { return this.c(); } // Tuinity - OBFHELPER + public double c() { + return this.i.a(); + } + ++ public final double getMinZ() { return this.d(); } // Tuinity - OBFHELPER + public double d() { + return this.i.c(); + } + ++ public final double getMaxX() { return this.e(); } // Tuinity - OBFHELPER + public double e() { + return this.i.b(); + } + ++ public final double getMaxZ() { return this.f(); } // Tuinity - OBFHELPER + public double f() { + return this.i.d(); + } +diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java +index 46e261b65..24cd10c96 100644 +--- a/src/main/java/net/minecraft/server/WorldServer.java ++++ b/src/main/java/net/minecraft/server/WorldServer.java +@@ -55,7 +55,7 @@ public class WorldServer extends World { + + private static final Logger LOGGER = LogManager.getLogger(); + private final List globalEntityList = Lists.newArrayList(); +- public final Int2ObjectMap entitiesById = new Int2ObjectLinkedOpenHashMap(); ++ public final Int2ObjectMap entitiesById = new Int2ObjectLinkedOpenHashMap(); final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet entitiesForIteration = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(2048, 0.5f, 2048, 0.2); // Tuinity - make removing entities while ticking safe + private final Map entitiesByUUID = Maps.newHashMap(); + private final Queue entitiesToAdd = Queues.newArrayDeque(); + public final List players = Lists.newArrayList(); // Paper - private -> public +@@ -79,7 +79,7 @@ public class WorldServer extends World { + private final PortalTravelAgent portalTravelAgent; + private final TickListServer nextTickListBlock; + private final TickListServer nextTickListFluid; +- private final Set navigators; ++ private final Set navigators; final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet navigatorsForIteration = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(2048, 0.5f, 2048, 0.2); // Tuinity - make removing entities while ticking safe + protected final PersistentRaid persistentRaid; + private final ObjectLinkedOpenHashSet I; + private boolean ticking; +@@ -190,6 +190,100 @@ public class WorldServer extends World { + } + // Paper end - rewrite ticklistserver + ++ // Tuinity start ++ public final boolean areChunksLoadedForMove(AxisAlignedBB axisalignedbb) { ++ // copied code from collision methods, so that we can guarantee that they wont load chunks (we don't override ++ // ICollisionAccess methods for VoxelShapes) ++ // be more strict too, add a block (dumb plugins in move events?) ++ int minBlockX = MathHelper.floor(axisalignedbb.minX - 1.0E-7D) - 3; ++ int maxBlockX = MathHelper.floor(axisalignedbb.maxX + 1.0E-7D) + 3; ++ ++ int minBlockZ = MathHelper.floor(axisalignedbb.minZ - 1.0E-7D) - 3; ++ int maxBlockZ = MathHelper.floor(axisalignedbb.maxZ + 1.0E-7D) + 3; ++ ++ int minChunkX = minBlockX >> 4; ++ int maxChunkX = maxBlockX >> 4; ++ ++ int minChunkZ = minBlockZ >> 4; ++ int maxChunkZ = maxBlockZ >> 4; ++ ++ ChunkProviderServer chunkProvider = this.getChunkProvider(); ++ ++ for (int cx = minChunkX; cx <= maxChunkX; ++cx) { ++ for (int cz = minChunkZ; cz <= maxChunkZ; ++cz) { ++ if (chunkProvider.getChunkAtIfLoadedImmediately(cx, cz) == null) { ++ return false; ++ } ++ } ++ } ++ ++ return true; ++ } ++ ++ public final void loadChunksForMoveAsync(AxisAlignedBB axisalignedbb, double toX, double toZ, ++ java.util.function.Consumer> onLoad) { ++ if (Thread.currentThread() != this.serverThread) { ++ this.getChunkProvider().serverThreadQueue.execute(() -> { ++ this.loadChunksForMoveAsync(axisalignedbb, toX, toZ, onLoad); ++ }); ++ return; ++ } ++ List ret = new java.util.ArrayList<>(); ++ it.unimi.dsi.fastutil.ints.IntArrayList ticketLevels = new it.unimi.dsi.fastutil.ints.IntArrayList(); ++ ++ int minBlockX = MathHelper.floor(axisalignedbb.minX - 1.0E-7D) - 3; ++ int maxBlockX = MathHelper.floor(axisalignedbb.maxX + 1.0E-7D) + 3; ++ ++ int minBlockZ = MathHelper.floor(axisalignedbb.minZ - 1.0E-7D) - 3; ++ int maxBlockZ = MathHelper.floor(axisalignedbb.maxZ + 1.0E-7D) + 3; ++ ++ int minChunkX = minBlockX >> 4; ++ int maxChunkX = maxBlockX >> 4; ++ ++ int minChunkZ = minBlockZ >> 4; ++ int maxChunkZ = maxBlockZ >> 4; ++ ++ ChunkProviderServer chunkProvider = this.getChunkProvider(); ++ ++ int requiredChunks = (maxChunkX - minChunkX + 1) * (maxChunkZ - minChunkZ + 1); ++ int[] loadedChunks = new int[1]; ++ ++ Long holderIdentifier = Long.valueOf(chunkProvider.chunkFutureAwaitCounter++); ++ ++ java.util.function.Consumer consumer = (IChunkAccess chunk) -> { ++ if (chunk != null) { ++ int ticketLevel = Math.max(33, chunkProvider.playerChunkMap.getUpdatingChunk(chunk.getPos().pair()).getTicketLevel()); ++ ret.add(chunk); ++ ticketLevels.add(ticketLevel); ++ chunkProvider.addTicketAtLevel(TicketType.FUTURE_AWAIT, chunk.getPos(), ticketLevel, holderIdentifier); ++ } ++ if (++loadedChunks[0] == requiredChunks) { ++ try { ++ onLoad.accept(java.util.Collections.unmodifiableList(ret)); ++ } finally { ++ for (int i = 0, len = ret.size(); i < len; ++i) { ++ ChunkCoordIntPair chunkPos = ret.get(i).getPos(); ++ int ticketLevel = ticketLevels.getInt(i); ++ ++ chunkProvider.addTicketAtLevel(TicketType.UNKNOWN, chunkPos, ticketLevel, chunkPos); ++ chunkProvider.removeTicketAtLevel(TicketType.FUTURE_AWAIT, chunkPos, ticketLevel, holderIdentifier); ++ } ++ } ++ } ++ }; ++ ++ for (int cx = minChunkX; cx <= maxChunkX; ++cx) { ++ for (int cz = minChunkZ; cz <= maxChunkZ; ++cz) { ++ chunkProvider.getChunkAtAsynchronously(cx, cz, ChunkStatus.FULL, true, false, consumer); ++ } ++ } ++ } ++ // Tuinity end ++ ++ // Tuinity start - execute chunk tasks mid tick ++ long lastMidTickExecuteFailure; ++ // Tuinity end - execute chunk tasks mid tick ++ + // Add env and gen to constructor + public WorldServer(MinecraftServer minecraftserver, Executor executor, WorldNBTStorage worldnbtstorage, WorldData worlddata, DimensionManager dimensionmanager, GameProfilerFiller gameprofilerfiller, WorldLoadListener worldloadlistener, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen) { + super(worlddata, dimensionmanager, executor, (world, worldprovider) -> { // Paper - pass executor down +@@ -249,6 +343,349 @@ public class WorldServer extends World { + this.asyncChunkTaskManager = new com.destroystokyo.paper.io.chunk.ChunkTaskManager(this); // Paper + } + ++ // Tuinity start - optimise collision ++ public boolean collidesWithAnyBlockOrWorldBorder(@Nullable Entity entity, AxisAlignedBB axisalignedbb, boolean loadChunks) { ++ if (entity != null) { ++ if (this.getWorldBorder().isCollidingOnBorderEdge(axisalignedbb)) { ++ return true; ++ } ++ } ++ ++ int minBlockX = MathHelper.floor(axisalignedbb.minX - 1.0E-7D) - 1; ++ int maxBlockX = MathHelper.floor(axisalignedbb.maxX + 1.0E-7D) + 1; ++ ++ int minBlockY = MathHelper.floor(axisalignedbb.minY - 1.0E-7D) - 1; ++ int maxBlockY = MathHelper.floor(axisalignedbb.maxY + 1.0E-7D) + 1; ++ ++ int minBlockZ = MathHelper.floor(axisalignedbb.minZ - 1.0E-7D) - 1; ++ int maxBlockZ = MathHelper.floor(axisalignedbb.maxZ + 1.0E-7D) + 1; ++ ++ ++ BlockPosition.MutableBlockPosition mutablePos = new BlockPosition.MutableBlockPosition(); ++ VoxelShapeCollision collisionShape = entity == null ? VoxelShapeCollision.a() : VoxelShapeCollision.a(entity); // TODO make this lazy ++ ++ // special cases: ++ if (minBlockY > 255 || maxBlockY < 0) { ++ // no point in checking ++ return false; ++ } ++ ++ int minYIterate = Math.max(0, minBlockY); ++ int maxYIterate = Math.min(255, maxBlockY); ++ ++ int minChunkX = minBlockX >> 4; ++ int maxChunkX = maxBlockX >> 4; ++ ++ int minChunkZ = minBlockZ >> 4; ++ int maxChunkZ = maxBlockZ >> 4; ++ ++ ChunkProviderServer chunkProvider = (ChunkProviderServer)this.chunkProvider; ++ // TODO special case single 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 ++ ++ 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 ++ ++ int chunkXGlobalPos = currChunkX << 4; ++ int chunkZGlobalPos = currChunkZ << 4; ++ Chunk chunk = loadChunks ? chunkProvider.getChunkAt(currChunkX, currChunkZ, true) : chunkProvider.getChunkAtIfLoadedImmediately(currChunkX, currChunkZ); ++ ++ if (chunk == null) { ++ return true; ++ } ++ ++ ChunkSection[] sections = chunk.getSections(); ++ ++ // bound y ++ ++ for (int currY = minYIterate; currY <= maxYIterate; ++currY) { ++ ChunkSection section = sections[currY >>> 4]; ++ if (section == null || section.isFullOfAir()) { ++ // empty ++ // skip to next section ++ currY = (currY & ~(15)) + 15; // increment by 15: iterator loop increments by the extra one ++ continue; ++ } ++ ++ DataPaletteBlock blocks = section.blockIds; ++ int blockKeyY = (currY & 15) << 8; ++ ++ int edgeCountY = (currY == minBlockY || currY == maxBlockY) ? 1 : 0; ++ ++ for (int currX = minX; currX <= maxX; ++currX) { ++ int blockKeyXY = blockKeyY | currX; ++ int blockX = currX | chunkXGlobalPos; // world position ++ ++ int edgeCountXY; ++ if (blockX == minBlockX || blockX == maxBlockX) { ++ edgeCountXY = edgeCountY + 1; ++ } else { ++ edgeCountXY = edgeCountY; ++ } ++ ++ for (int currZ = minZ; currZ <= maxZ; ++currZ) { ++ int blockZ = currZ | chunkZGlobalPos; // world position ++ ++ int edgeCountFull; ++ if (blockZ == minBlockZ || blockZ == maxBlockZ) { ++ edgeCountFull = edgeCountXY + 1; ++ } else { ++ edgeCountFull = edgeCountXY; ++ } ++ ++ if (edgeCountFull == 3) { ++ continue; ++ } ++ ++ int blockKeyFull = blockKeyXY | (currZ << 4); ++ IBlockData blockData = blocks.rawGet(blockKeyFull); ++ ++ if (!blockData.isAir() && (edgeCountFull != 1 || blockData.f()) && (edgeCountFull != 2 || blockData.getBlock() == Blocks.MOVING_PISTON)) { ++ mutablePos.setValues(blockX, currY, blockZ); ++ VoxelShape voxelshape2 = blockData.getCollisionShape(this, mutablePos, collisionShape); ++ if (voxelshape2 != VoxelShapes.getEmptyShape()) { ++ VoxelShape voxelshape3 = voxelshape2.offset((double)blockX, (double)currY, (double)blockZ); ++ ++ if (voxelshape3.intersects(axisalignedbb)) { ++ return true; ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ ++ return false; ++ } ++ ++ public final boolean hardCollidesWithAnyEntities(@Nullable Entity entity, AxisAlignedBB axisalignedbb, @Nullable Set set) { ++ if (axisalignedbb.isEmpty()) { ++ return false; ++ } ++ AxisAlignedBB axisalignedbb1 = axisalignedbb.grow(1.0E-7D, 1.0E-7D, 1.0E-7D); ++ List entities = (entity != null && entity.hardCollides()) ? this.getEntities(entity, axisalignedbb) : this.getHardCollidingEntities(entity, axisalignedbb1); ++ ++ for (int i = 0, len = entities.size(); i < len; ++i) { ++ Entity otherEntity = entities.get(i); ++ ++ if (set != null && set.contains(otherEntity)) { ++ continue; ++ } ++ ++ if (entity != null) { ++ if (entity.isSameVehicle(otherEntity)) { ++ continue; ++ } ++ AxisAlignedBB hardCollisionBox = entity.getHardCollisionBoxWith(otherEntity); ++ if (hardCollisionBox != null && axisalignedbb1.intersects(hardCollisionBox)) { ++ return true; ++ } ++ } ++ ++ AxisAlignedBB hardCollisionBox = otherEntity.getHardCollisionBox(); ++ ++ if (hardCollisionBox != null && axisalignedbb1.intersects(hardCollisionBox)) { ++ return true; ++ } ++ } ++ ++ return false; ++ } ++ ++ public final boolean hasAnyCollisions(@Nullable Entity entity, AxisAlignedBB axisalignedbb) { ++ return this.hasAnyCollisions(entity, axisalignedbb, true); ++ } ++ ++ public final boolean hasAnyCollisions(@Nullable Entity entity, AxisAlignedBB axisalignedbb, boolean loadChunks) { ++ return this.collidesWithAnyBlockOrWorldBorder(entity, axisalignedbb, loadChunks) || this.hardCollidesWithAnyEntities(entity, axisalignedbb, null); ++ } ++ ++ // Tuinity start - optimise collision ++ public void getCollisionsForBlocksOrWorldBorder(@Nullable Entity entity, AxisAlignedBB axisalignedbb, List list, boolean loadChunks) { ++ if (entity != null) { ++ if (this.getWorldBorder().isCollidingOnBorderEdge(axisalignedbb)) { ++ VoxelShapes.addBoxesTo(this.getWorldBorder().getCollisionShape(), list); ++ } ++ } ++ ++ int minBlockX = MathHelper.floor(axisalignedbb.minX - 1.0E-7D) - 1; ++ int maxBlockX = MathHelper.floor(axisalignedbb.maxX + 1.0E-7D) + 1; ++ ++ int minBlockY = MathHelper.floor(axisalignedbb.minY - 1.0E-7D) - 1; ++ int maxBlockY = MathHelper.floor(axisalignedbb.maxY + 1.0E-7D) + 1; ++ ++ int minBlockZ = MathHelper.floor(axisalignedbb.minZ - 1.0E-7D) - 1; ++ int maxBlockZ = MathHelper.floor(axisalignedbb.maxZ + 1.0E-7D) + 1; ++ ++ ++ BlockPosition.MutableBlockPosition mutablePos = new BlockPosition.MutableBlockPosition(); ++ VoxelShapeCollision collisionShape = entity == null ? VoxelShapeCollision.a() : VoxelShapeCollision.a(entity); // TODO make this lazy ++ ++ // special cases: ++ if (minBlockY > 255 || maxBlockY < 0) { ++ // no point in checking ++ return; ++ } ++ ++ int minYIterate = Math.max(0, minBlockY); ++ int maxYIterate = Math.min(255, maxBlockY); ++ ++ int minChunkX = minBlockX >> 4; ++ int maxChunkX = maxBlockX >> 4; ++ ++ int minChunkZ = minBlockZ >> 4; ++ int maxChunkZ = maxBlockZ >> 4; ++ ++ ChunkProviderServer chunkProvider = (ChunkProviderServer)this.chunkProvider; ++ // TODO special case single 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 ++ ++ 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 ++ ++ int chunkXGlobalPos = currChunkX << 4; ++ int chunkZGlobalPos = currChunkZ << 4; ++ Chunk chunk = loadChunks ? chunkProvider.getChunkAt(currChunkX, currChunkZ, true) : chunkProvider.getChunkAtIfLoadedImmediately(currChunkX, currChunkZ); ++ ++ if (chunk == null) { ++ list.add(AxisAlignedBB.getBoxForChunk(currChunkX, currChunkZ)); ++ continue; ++ } ++ ++ ChunkSection[] sections = chunk.getSections(); ++ ++ // bound y ++ ++ for (int currY = minYIterate; currY <= maxYIterate; ++currY) { ++ ChunkSection section = sections[currY >>> 4]; ++ if (section == null || section.isFullOfAir()) { ++ // empty ++ // skip to next section ++ currY = (currY & ~(15)) + 15; // increment by 15: iterator loop increments by the extra one ++ continue; ++ } ++ ++ DataPaletteBlock blocks = section.blockIds; ++ int blockKeyY = (currY & 15) << 8; ++ ++ int edgeCountY = (currY == minBlockY || currY == maxBlockY) ? 1 : 0; ++ ++ for (int currX = minX; currX <= maxX; ++currX) { ++ int blockKeyXY = blockKeyY | currX; ++ int blockX = currX | chunkXGlobalPos; // world position ++ ++ int edgeCountXY; ++ if (blockX == minBlockX || blockX == maxBlockX) { ++ edgeCountXY = edgeCountY + 1; ++ } else { ++ edgeCountXY = edgeCountY; ++ } ++ ++ for (int currZ = minZ; currZ <= maxZ; ++currZ) { ++ int blockZ = currZ | chunkZGlobalPos; // world position ++ ++ int edgeCountFull; ++ if (blockZ == minBlockZ || blockZ == maxBlockZ) { ++ edgeCountFull = edgeCountXY + 1; ++ } else { ++ edgeCountFull = edgeCountXY; ++ } ++ ++ if (edgeCountFull == 3) { ++ continue; ++ } ++ ++ int blockKeyFull = blockKeyXY | (currZ << 4); ++ IBlockData blockData = blocks.rawGet(blockKeyFull); ++ ++ if (!blockData.isAir() && (edgeCountFull != 1 || blockData.f()) && (edgeCountFull != 2 || blockData.getBlock() == Blocks.MOVING_PISTON)) { ++ mutablePos.setValues(blockX, currY, blockZ); ++ VoxelShape voxelshape2 = blockData.getCollisionShape(this, mutablePos, collisionShape); ++ if (voxelshape2 != VoxelShapes.getEmptyShape()) { ++ VoxelShape voxelshape3 = voxelshape2.offset((double)blockX, (double)currY, (double)blockZ); ++ ++ VoxelShapes.addBoxesToIfIntersects(voxelshape3, axisalignedbb, list); ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++ ++ public final void getEntityHardCollisions(@Nullable Entity entity, AxisAlignedBB axisalignedbb, @Nullable Set set, List list) { ++ if (axisalignedbb.isEmpty()) { ++ return; ++ } ++ AxisAlignedBB axisalignedbb1 = axisalignedbb.grow(1.0E-7D, 1.0E-7D, 1.0E-7D); ++ List entities = com.tuinity.tuinity.util.CachedLists.getTempGetEntitiesList(); ++ try { ++ if (entity != null && entity.hardCollides()) { ++ this.getEntities(entity, axisalignedbb, IEntitySelector.notSpectator(), entities); ++ } else { ++ this.getHardCollidingEntities(entity, axisalignedbb1, entities); ++ } ++ ++ for (int i = 0, len = entities.size(); i < len; ++i) { ++ Entity otherEntity = entities.get(i); ++ ++ if (set != null && set.contains(otherEntity)) { ++ continue; ++ } ++ ++ if (entity != null) { ++ if (entity.isSameVehicle(otherEntity)) { ++ continue; ++ } ++ AxisAlignedBB hardCollisionBox = entity.getHardCollisionBoxWith(otherEntity); ++ if (hardCollisionBox != null && axisalignedbb1.intersects(hardCollisionBox)) { ++ list.add(hardCollisionBox); ++ } ++ } ++ ++ AxisAlignedBB hardCollisionBox = otherEntity.getHardCollisionBox(); ++ ++ if (hardCollisionBox != null && axisalignedbb1.intersects(hardCollisionBox)) { ++ list.add(hardCollisionBox); ++ } ++ } ++ } finally { ++ com.tuinity.tuinity.util.CachedLists.returnTempGetEntitiesList(entities); ++ } ++ } ++ ++ public final void getCollisions(@Nullable Entity entity, AxisAlignedBB axisalignedbb, List list, boolean loadChunks) { ++ this.getCollisionsForBlocksOrWorldBorder(entity, axisalignedbb, list, loadChunks); ++ this.getEntityHardCollisions(entity, axisalignedbb, null, list); ++ } ++ ++ @Override ++ public boolean getCubes(Entity entity) { ++ return !this.hasAnyCollisions(entity, entity.getBoundingBox()); ++ } ++ ++ @Override ++ public boolean getCubes(@Nullable Entity entity, AxisAlignedBB axisalignedbb) { ++ return !this.hasAnyCollisions(entity, axisalignedbb); ++ } ++ ++ @Override ++ public boolean getCubes(@Nullable Entity entity, AxisAlignedBB axisalignedbb, Set set) { ++ return !this.collidesWithAnyBlockOrWorldBorder(entity, axisalignedbb, true) && !this.hardCollidesWithAnyEntities(entity, axisalignedbb, set); ++ } ++ // Tuinity end - optimise collision ++ + // CraftBukkit start + @Override + protected TileEntity getTileEntity(BlockPosition pos, boolean validate) { +@@ -446,7 +883,7 @@ public class WorldServer extends World { + } + timings.scheduledBlocks.stopTiming(); // Spigot + +- this.getMinecraftServer().midTickLoadChunks(); // Paper ++ // Tuinity - replace logic + gameprofilerfiller.exitEnter("raid"); + this.timings.raids.startTiming(); // Paper - timings + this.persistentRaid.a(); +@@ -459,7 +896,7 @@ public class WorldServer extends World { + timings.doSounds.startTiming(); // Spigot + this.ad(); + timings.doSounds.stopTiming(); // Spigot +- this.getMinecraftServer().midTickLoadChunks(); // Paper ++ // Tuinity - replace logic + this.ticking = false; + gameprofilerfiller.exitEnter("entities"); + boolean flag3 = true || !this.players.isEmpty() || !this.getForceLoadedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players +@@ -493,14 +930,13 @@ public class WorldServer extends World { + + gameprofilerfiller.exitEnter("regular"); + this.tickingEntities = true; +- ObjectIterator objectiterator = this.entitiesById.int2ObjectEntrySet().iterator(); ++ com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet.Iterator objectiterator = this.entitiesForIteration.iterator(); // Tuinity + + org.spigotmc.ActivationRange.activateEntities(this); // Spigot + timings.entityTick.startTiming(); // Spigot + TimingHistory.entityTicks += this.globalEntityList.size(); // Paper + while (objectiterator.hasNext()) { +- Entry entry = (Entry) objectiterator.next(); +- Entity entity1 = (Entity) entry.getValue(); ++ Entity entity1 = (Entity) objectiterator.next(); // Tuinity + Entity entity2 = entity1.getVehicle(); + + /* CraftBukkit start - We prevent spawning in general, so this butchering is not needed +@@ -536,7 +972,7 @@ public class WorldServer extends World { + gameprofilerfiller.enter("remove"); + if (entity1.dead) { + this.removeEntityFromChunk(entity1); +- objectiterator.remove(); ++ this.entitiesById.remove(entity1.getId()); // Tuinity + this.unregisterEntity(entity1); + } + +@@ -544,6 +980,7 @@ public class WorldServer extends World { + } + timings.entityTick.stopTiming(); // Spigot + ++ objectiterator.finishedIterating(); // Tuinity + this.tickingEntities = false; + // Paper start + for (java.lang.Runnable run : this.afterEntityTickingTasks) { +@@ -555,7 +992,7 @@ public class WorldServer extends World { + } + this.afterEntityTickingTasks.clear(); + // Paper end +- this.getMinecraftServer().midTickLoadChunks(); // Paper ++ // Tuinity - replace logic + + try (co.aikar.timings.Timing ignored = this.timings.newEntities.startTiming()) { // Paper - timings + while ((entity = (Entity) this.entitiesToAdd.poll()) != null) { +@@ -566,7 +1003,7 @@ public class WorldServer extends World { + + gameprofilerfiller.exit(); + timings.tickEntities.stopTiming(); // Spigot +- this.getMinecraftServer().midTickLoadChunks(); // Paper ++ // Tuinity - replace logic + this.tickBlockEntities(); + } + +@@ -780,7 +1217,26 @@ public class WorldServer extends World { + + } + ++ // Tuinity start - log detailed entity tick information ++ static final java.util.concurrent.ConcurrentLinkedDeque currentlyTickingEntities = new java.util.concurrent.ConcurrentLinkedDeque<>(); ++ ++ public static List getCurrentlyTickingEntities() { ++ List ret = Lists.newArrayListWithCapacity(4); ++ ++ for (Entity entity : currentlyTickingEntities) { ++ ret.add(entity); ++ } ++ ++ return ret; ++ } ++ // Tuinity end - log detailed entity tick information ++ + public void entityJoinedWorld(Entity entity) { ++ // Tuinity start - log detailed entity tick information ++ com.tuinity.tuinity.util.TickThread.ensureTickThread("Cannot tick an entity off-main"); ++ try { ++ currentlyTickingEntities.push(entity); ++ // Tuinity end - log detailed entity tick information + if (entity instanceof EntityHuman || this.getChunkProvider().a(entity)) { + ++TimingHistory.entityTicks; // Paper - timings + // Spigot start +@@ -825,6 +1281,11 @@ public class WorldServer extends World { + } // Paper - timings + + } ++ // Tuinity start - log detailed entity tick information ++ } finally { ++ currentlyTickingEntities.pop(); ++ } ++ // Tuinity end - log detailed entity tick information + } + + public void a(Entity entity, Entity entity1) { +@@ -1340,7 +1801,7 @@ public class WorldServer extends World { + Entity entity = (Entity) iterator.next(); + + if (!(entity instanceof EntityPlayer)) { +- if (this.tickingEntities) { ++ if (false && this.tickingEntities) { // Tuinity + throw (IllegalStateException) SystemUtils.c(new IllegalStateException("Removing entity while ticking!")); + } + +@@ -1368,6 +1829,7 @@ public class WorldServer extends World { + + public void unregisterEntity(Entity entity) { + org.spigotmc.AsyncCatcher.catchOp("entity unregister"); // Spigot ++ this.entitiesForIteration.remove(entity); // Tuinity + // Paper start - fix entity registration issues + if (entity instanceof EntityComplexPart) { + // Usually this is a no-op for complex parts, and ID's should be removed, but go ahead and remove it anyways +@@ -1434,12 +1896,16 @@ public class WorldServer extends World { + this.getScoreboard().a(entity); + // CraftBukkit start - SPIGOT-5278 + if (entity instanceof EntityDrowned) { +- this.navigators.remove(((EntityDrowned) entity).navigationWater); +- this.navigators.remove(((EntityDrowned) entity).navigationLand); ++ // Tuinity start ++ this.navigators.remove(((EntityDrowned) entity).navigationWater); this.navigatorsForIteration.remove(((EntityDrowned) entity).navigationWater); ++ this.navigators.remove(((EntityDrowned) entity).navigationLand); this.navigatorsForIteration.remove(((EntityDrowned) entity).navigationLand); ++ // Tuinity end + } else + // CraftBukkit end + if (entity instanceof EntityInsentient) { +- this.navigators.remove(((EntityInsentient) entity).getNavigation()); ++ // Tuinity start ++ this.navigators.remove(((EntityInsentient) entity).getNavigation()); this.navigatorsForIteration.remove(((EntityInsentient) entity).getNavigation()); ++ // Tuinity end + } + new com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent(entity.getBukkitEntity()).callEvent(); // Paper - fire while valid + entity.valid = false; // CraftBukkit +@@ -1455,7 +1921,7 @@ public class WorldServer extends World { + return; + } + // Paper end +- if (this.tickingEntities) { ++ if (false && this.tickingEntities) { // Tuinity + if (!entity.isQueuedForRegister) { // Paper + this.entitiesToAdd.add(entity); + entity.isQueuedForRegister = true; // Paper +@@ -1463,6 +1929,7 @@ public class WorldServer extends World { + } else { + entity.isQueuedForRegister = false; // Paper + this.entitiesById.put(entity.getId(), entity); ++ this.entitiesForIteration.add(entity); // Tuinity + if (entity instanceof EntityEnderDragon) { + EntityComplexPart[] aentitycomplexpart = ((EntityEnderDragon) entity).eo(); + int i = aentitycomplexpart.length; +@@ -1471,6 +1938,7 @@ public class WorldServer extends World { + EntityComplexPart entitycomplexpart = aentitycomplexpart[j]; + + this.entitiesById.put(entitycomplexpart.getId(), entitycomplexpart); ++ this.entitiesForIteration.add(entitycomplexpart); // Tuinity + } + } + +@@ -1495,12 +1963,16 @@ public class WorldServer extends World { + // this.getChunkProvider().addEntity(entity); // Paper - moved down below valid=true + // CraftBukkit start - SPIGOT-5278 + if (entity instanceof EntityDrowned) { +- this.navigators.add(((EntityDrowned) entity).navigationWater); +- this.navigators.add(((EntityDrowned) entity).navigationLand); ++ // Tuinity start ++ this.navigators.add(((EntityDrowned) entity).navigationWater); this.navigatorsForIteration.add(((EntityDrowned) entity).navigationWater); ++ this.navigators.add(((EntityDrowned) entity).navigationLand); this.navigatorsForIteration.add(((EntityDrowned) entity).navigationLand); ++ // Tuinity end + } else + // CraftBukkit end + if (entity instanceof EntityInsentient) { +- this.navigators.add(((EntityInsentient) entity).getNavigation()); ++ // Tuinity start ++ this.navigators.add(((EntityInsentient) entity).getNavigation()); this.navigatorsForIteration.add(((EntityInsentient) entity).getNavigation()); ++ // Tuinity end + } + entity.valid = true; // CraftBukkit + this.getChunkProvider().addEntity(entity); // Paper - from above to be below valid=true +@@ -1516,7 +1988,7 @@ public class WorldServer extends World { + } + + public void removeEntity(Entity entity) { +- if (this.tickingEntities) { ++ if (false && this.tickingEntities) { // Tuinity + throw (IllegalStateException) SystemUtils.c(new IllegalStateException("Removing entity while ticking!")); + } else { + this.removeEntityFromChunk(entity); +@@ -1618,7 +2090,9 @@ public class WorldServer extends World { + + if (VoxelShapes.c(voxelshape, voxelshape1, OperatorBoolean.NOT_SAME)) { + boolean wasTicking = this.tickingEntities; this.tickingEntities = true; // Paper +- Iterator iterator = this.navigators.iterator(); ++ // Tuinity start ++ com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet.Iterator iterator = this.navigatorsForIteration.iterator(); ++ try { // Tuinity end + + while (iterator.hasNext()) { + NavigationAbstract navigationabstract = (NavigationAbstract) iterator.next(); +@@ -1627,6 +2101,9 @@ public class WorldServer extends World { + navigationabstract.b(blockposition); + } + } ++ } finally { // Tuinity start ++ iterator.finishedIterating(); ++ } // Tuinity end + + this.tickingEntities = wasTicking; // Paper + } +diff --git a/src/main/java/net/minecraft/server/WorldUpgrader.java b/src/main/java/net/minecraft/server/WorldUpgrader.java +index 3030c347e..76f0f258e 100644 +--- a/src/main/java/net/minecraft/server/WorldUpgrader.java ++++ b/src/main/java/net/minecraft/server/WorldUpgrader.java +@@ -220,7 +220,7 @@ public class WorldUpgrader { + int l = Integer.parseInt(matcher.group(2)) << 5; + + try { +- RegionFile regionfile = new RegionFile(file2, file1); ++ RegionFile regionfile = new RegionFile(file2, file1, true); // Tuinity - allow for chunk regionfiles to regen header + Throwable throwable = null; + + try { +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java b/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java +index b909af3d6..3c8166149 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftChunkSnapshot.java +@@ -75,7 +75,7 @@ public class CraftChunkSnapshot implements ChunkSnapshot { + public Material getBlockType(int x, int y, int z) { + CraftChunk.validateChunkCoordinates(x, y, z); + +- return CraftMagicNumbers.getMaterial(blockids[y >> 4].a(x, y & 0xF, z).getBlock()); ++ return blockids[y >> 4].a(x, y & 0xF, z).getBukkitMaterial(); // Tuinity - optimise getType calls + } + + @Override +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +index 568aefdf6..760752eae 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +@@ -205,7 +205,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 = "Tuinity"; // Paper // Tuinity + private final String serverVersion; + private final String bukkitVersion = Versioning.getBukkitVersion(); + private final Logger logger = Logger.getLogger("Minecraft"); +@@ -815,6 +815,7 @@ public final class CraftServer implements Server { + + org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot + com.destroystokyo.paper.PaperConfig.init((File) console.options.valueOf("paper-settings")); // Paper ++ com.tuinity.tuinity.config.TuinityConfig.init((File) console.options.valueOf("tuinity-settings")); // Tuinity - Server Config + for (WorldServer world : console.getWorlds()) { + world.worldData.setDifficulty(config.difficulty); + world.setSpawnFlags(config.spawnMonsters, config.spawnAnimals); +@@ -843,6 +844,7 @@ public final class CraftServer implements Server { + } + world.spigotConfig.init(); // Spigot + world.paperConfig.init(); // Paper ++ world.tuinityConfig.init(); // Tuinity - Server Config + } + + Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper +@@ -1747,7 +1749,10 @@ public final class CraftServer implements Server { + + @Override + public boolean isPrimaryThread() { +- return Thread.currentThread().equals(console.serverThread) || Thread.currentThread().equals(net.minecraft.server.MinecraftServer.getServer().shutdownThread); // Paper - Fix issues with detecting main thread properly, the only time Watchdog will be used is during a crash shutdown which is a "try our best" scenario ++ // Tuinity start ++ final Thread currThread = Thread.currentThread(); ++ return currThread == console.serverThread || currThread instanceof com.tuinity.tuinity.util.TickThread || currThread.equals(net.minecraft.server.MinecraftServer.getServer().shutdownThread); // Paper - Fix issues with detecting main thread properly, the only time Watchdog will be used is during a crash shutdown which is a "try our best" scenario ++ // Tuinity End + } + + @Override +@@ -2134,6 +2139,14 @@ public final class CraftServer implements Server { + return com.destroystokyo.paper.PaperConfig.config; + } + ++ // Tuinity start - add config to timings report ++ @Override ++ public YamlConfiguration getTuinityConfig() ++ { ++ return com.tuinity.tuinity.config.TuinityConfig.config; ++ } ++ // Tuinity end - add config to timings report ++ + @Override + public void restart() { + org.spigotmc.RestartCommand.restart(); +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +index f4a1be34f..1ee5ce50b 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +@@ -333,6 +333,13 @@ public class CraftWorld implements World { + this.generator = gen; + + environment = env; ++ ++ //Tuinity start - per world spawn limits ++ monsterSpawn = world.tuinityConfig.spawnLimitMonsters; ++ animalSpawn = world.tuinityConfig.spawnLimitAnimals; ++ waterAnimalSpawn = world.tuinityConfig.spawnLimitWaterAnimals; ++ ambientSpawn = world.tuinityConfig.spawnLimitAmbient; ++ //Tuinity end + } + + @Override +@@ -399,14 +406,7 @@ public class CraftWorld implements World { + + @Override + public Chunk getChunkAt(int x, int z) { +- // Paper start - add ticket to hold chunk for a little while longer if plugin accesses it +- net.minecraft.server.Chunk chunk = world.getChunkProvider().getChunkAtIfLoadedImmediately(x, z); +- if (chunk == null) { +- addTicket(x, z); +- chunk = this.world.getChunkProvider().getChunkAt(x, z, true); +- } +- return chunk.bukkitChunk; +- // Paper end ++ return this.world.getChunkProvider().getChunkAt(x, z, true).bukkitChunk; // Tuinity - revert paper diff + } + + // Paper start +@@ -490,6 +490,7 @@ public class CraftWorld implements World { + net.minecraft.server.IChunkAccess chunk = world.getChunkProvider().getChunkAtIfLoadedImmediately(x, z); // Paper + if (chunk != null) { + world.getChunkProvider().removeTicket(TicketType.PLUGIN, chunk.getPos(), 0, Unit.INSTANCE); // Paper ++ ((ChunkMapDistance)world.getChunkProvider().playerChunkMap.getChunkMapDistanceManager()).removeTickets(ChunkCoordIntPair.pair(x, z), TicketType.DELAYED_UNLOAD); // Tuinity - delay chunk unloads - let plugins override + } + + return true; +@@ -2505,7 +2506,7 @@ public class CraftWorld implements World { + } + return this.world.getChunkProvider().getChunkAtAsynchronously(x, z, gen, urgent).thenComposeAsync((either) -> { + net.minecraft.server.Chunk chunk = (net.minecraft.server.Chunk) either.left().orElse(null); +- if (chunk != null) addTicket(x, z); // Paper ++ if (false && chunk != null) addTicket(x, z); // Paper // Tuinity - revert + return CompletableFuture.completedFuture(chunk == null ? null : chunk.getBukkitChunk()); + }, MinecraftServer.getServer()); + } +diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java +index d6e5d014c..90a2f8fea 100644 +--- a/src/main/java/org/bukkit/craftbukkit/Main.java ++++ b/src/main/java/org/bukkit/craftbukkit/Main.java +@@ -138,6 +138,13 @@ public class Main { + .defaultsTo(new File("paper.yml")) + .describedAs("Yml file"); + // Paper end ++ // Tuinity Start - Server Config ++ acceptsAll(asList("tuinity", "tuinity-settings"), "File for tuinity settings") ++ .withRequiredArg() ++ .ofType(File.class) ++ .defaultsTo(new File("tuinity.yml")) ++ .describedAs("Yml file"); ++ /* Conctete End - Server Config */ + + // Paper start + acceptsAll(asList("server-name"), "Name of the server") +@@ -252,7 +259,7 @@ public class Main { + if (buildDate.before(deadline.getTime())) { + // Paper start - This is some stupid bullshit + System.err.println("*** Warning, you've not updated in a while! ***"); +- System.err.println("*** Please download a new build as per instructions from https://papermc.io/downloads ***"); // Paper ++ System.err.println("*** Please download a new build ***"); // Paper // Tuinity + //System.err.println("*** Server will start in 20 seconds ***"); + //Thread.sleep(TimeUnit.SECONDS.toMillis(20)); + // Paper End +diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +index a5f981cd0..197c2ffab 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +@@ -207,7 +207,7 @@ public class CraftBlock implements Block { + + @Override + public Material getType() { +- return CraftMagicNumbers.getMaterial(world.getType(position).getBlock()); ++ return world.getType(position).getBukkitMaterial(); // Tuinity - optimise getType calls + } + + @Override +@@ -500,15 +500,30 @@ public class CraftBlock implements Block { + return null; + } + +- return Biome.valueOf(IRegistry.BIOME.getKey(base).getKey().toUpperCase(java.util.Locale.ENGLISH)); ++ return base.getBukkitBiome(); // Tuinity - optimise biome conversion + } + ++ private static final java.util.EnumMap BUKKIT_BIOME_TO_NMS_CACHE = new java.util.EnumMap<>(Biome.class); // Tuinity - optimise biome conversion ++ + public static BiomeBase biomeToBiomeBase(Biome bio) { + if (bio == null) { + return null; + } + +- return IRegistry.BIOME.get(new MinecraftKey(bio.name().toLowerCase(java.util.Locale.ENGLISH))); ++ // Tuinity start - optimise biome conversion ++ BiomeBase cached = BUKKIT_BIOME_TO_NMS_CACHE.get(bio); ++ ++ if (cached != null) { ++ return cached; ++ } ++ ++ BiomeBase ret = IRegistry.BIOME.get(new MinecraftKey(bio.name().toLowerCase(java.util.Locale.ENGLISH))); ++ synchronized (BUKKIT_BIOME_TO_NMS_CACHE) { ++ BUKKIT_BIOME_TO_NMS_CACHE.put(bio, ret); ++ } ++ ++ return ret; ++ // Tuinity end - optimise biome conversion + } + + @Override +diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java +index d3017db1b..8eaed6bfd 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java +@@ -139,7 +139,7 @@ public class CraftBlockState implements BlockState { + + @Override + public Material getType() { +- return CraftMagicNumbers.getMaterial(data.getBlock()); ++ return data.getBukkitMaterial(); // Tuinity - optimise getType calls + } + + public void setFlag(int flag) { +diff --git a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java +index a0746a169..adba4a8a2 100644 +--- a/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java ++++ b/src/main/java/org/bukkit/craftbukkit/block/data/CraftBlockData.java +@@ -44,7 +44,7 @@ public class CraftBlockData implements BlockData { + + @Override + public Material getMaterial() { +- return CraftMagicNumbers.getMaterial(state.getBlock()); ++ return state.getBukkitMaterial(); // Tuinity - optimise getType calls + } + + public IBlockData getState() { +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +index d16d3fe58..5a7b714cc 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +@@ -519,6 +519,37 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { + return true; + } + ++ // Tuinity start - implement teleportAsync better ++ @Override ++ public java.util.concurrent.CompletableFuture teleportAsync(Location location, TeleportCause cause) { ++ Preconditions.checkArgument(location != null, "location"); ++ location.checkFinite(); ++ Location locationClone = location.clone(); // clone so we don't need to worry about mutations after this call. ++ ++ net.minecraft.server.WorldServer world = ((CraftWorld)locationClone.getWorld()).getHandle(); ++ java.util.concurrent.CompletableFuture ret = new java.util.concurrent.CompletableFuture<>(); ++ ++ world.loadChunksForMoveAsync(getHandle().getBoundingBoxAt(locationClone.getX(), locationClone.getY(), locationClone.getZ()), location.getX(), location.getZ(), (list) -> { ++ net.minecraft.server.ChunkProviderServer chunkProviderServer = world.getChunkProvider(); ++ for (net.minecraft.server.IChunkAccess chunk : list) { ++ chunkProviderServer.addTicketAtLevel(net.minecraft.server.TicketType.POST_TELEPORT, chunk.getPos(), 33, CraftEntity.this.getEntityId()); ++ } ++ net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> { ++ try { ++ ret.complete(CraftEntity.this.teleport(locationClone, cause) ? Boolean.TRUE : Boolean.FALSE); ++ } catch (Throwable throwable) { ++ if (throwable instanceof ThreadDeath) { ++ throw (ThreadDeath)throwable; ++ } ++ ret.completeExceptionally(throwable); ++ } ++ }); ++ }); ++ ++ return ret; ++ } ++ // Tuinity end - implement teleportAsync better ++ + @Override + public boolean teleport(org.bukkit.entity.Entity destination) { + return teleport(destination.getLocation()); +diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java b/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java +index bb18740eb..b048ec8ea 100644 +--- a/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java ++++ b/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java +@@ -73,7 +73,7 @@ public final class CraftChunkData implements ChunkGenerator.ChunkData { + + @Override + public Material getType(int x, int y, int z) { +- return CraftMagicNumbers.getMaterial(getTypeId(x, y, z).getBlock()); ++ return getTypeId(x, y, z).getBukkitMaterial(); // Tuinity - optimise getType calls + } + + @Override +diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java +index ca2be3060..2c5701376 100644 +--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java ++++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java +@@ -100,9 +100,18 @@ public final class CraftScoreboardManager implements ScoreboardManager { + + // CraftBukkit method + public void getScoreboardScores(IScoreboardCriteria criteria, String name, Consumer consumer) { ++ // Tuinity start - add timings for scoreboard search ++ // plugins leaking scoreboards will make this very expensive, let server owners debug it easily ++ co.aikar.timings.MinecraftTimings.scoreboardScoreSearch.startTimingIfSync(); ++ try { ++ // Tuinity end - add timings for scoreboard search + for (CraftScoreboard scoreboard : scoreboards) { + Scoreboard board = scoreboard.board; + board.getObjectivesForCriteria(criteria, name, (score) -> consumer.accept(score)); + } ++ } finally { // Tuinity start - add timings for scoreboard search ++ co.aikar.timings.MinecraftTimings.scoreboardScoreSearch.stopTimingIfSync(); ++ } ++ // Tuinity end - add timings for scoreboard search + } + } +diff --git a/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java b/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java +index f72c13bed..50f855b93 100644 +--- a/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/UnsafeList.java +@@ -119,6 +119,32 @@ public class UnsafeList extends AbstractList implements List, RandomAcc + return indexOf(o) >= 0; + } + ++ // Tuinity start ++ protected transient int maxSize; ++ public void setSize(int size) { ++ if (this.maxSize < this.size) { ++ this.maxSize = this.size; ++ } ++ this.size = size; ++ } ++ ++ public void completeReset() { ++ if (this.data != null) { ++ Arrays.fill(this.data, 0, Math.max(this.size, this.maxSize), null); ++ } ++ this.size = 0; ++ this.maxSize = 0; ++ if (this.iterPool != null) { ++ for (Iterator temp : this.iterPool) { ++ if (temp == null) { ++ continue; ++ } ++ ((Itr)temp).valid = false; ++ } ++ } ++ } ++ // Tuinity end ++ + @Override + public void clear() { + // Create new array to reset memory usage to initial capacity +diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +index 674096cab..001b1e519 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/com.destroystokyo.paper/paper-api/pom.properties"); ++ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/com.tuinity/tuinity-api/pom.properties"); // Tuinity + Properties properties = new Properties(); + + if (stream != null) { +diff --git a/src/main/java/org/spigotmc/AsyncCatcher.java b/src/main/java/org/spigotmc/AsyncCatcher.java +index 9f7d2ef93..c3ac1a46c 100644 +--- a/src/main/java/org/spigotmc/AsyncCatcher.java ++++ b/src/main/java/org/spigotmc/AsyncCatcher.java +@@ -10,7 +10,7 @@ public class AsyncCatcher + + public static void catchOp(String reason) + { +- if ( enabled && Thread.currentThread() != MinecraftServer.getServer().serverThread ) ++ if ( ( enabled || com.tuinity.tuinity.util.TickThread.STRICT_THREAD_CHECKS ) && !org.bukkit.Bukkit.isPrimaryThread() ) // Tuinity + { + throw new IllegalStateException( "Asynchronous " + reason + "!" ); + } +diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java +index 513c1041c..7c1ef532d 100644 +--- a/src/main/java/org/spigotmc/WatchdogThread.java ++++ b/src/main/java/org/spigotmc/WatchdogThread.java +@@ -61,6 +61,84 @@ public class WatchdogThread extends Thread + } + } + ++ // Tuinity start - log detailed tick information ++ private void dumpTickingInfo() { ++ Logger log = Bukkit.getServer().getLogger(); ++ ++ // ticking entities ++ for (net.minecraft.server.Entity entity : net.minecraft.server.WorldServer.getCurrentlyTickingEntities()) { ++ double posX, posY, posZ; ++ net.minecraft.server.Vec3D mot; ++ double moveStartX, moveStartY, moveStartZ; ++ net.minecraft.server.Vec3D moveVec; ++ synchronized (entity.posLock) { ++ posX = entity.locX(); ++ posY = entity.locY(); ++ posZ = entity.locZ(); ++ mot = entity.getMot(); ++ moveStartX = entity.getMoveStartX(); ++ moveStartY = entity.getMoveStartY(); ++ moveStartZ = entity.getMoveStartZ(); ++ moveVec = entity.getMoveVector(); ++ } ++ ++ String entityType = entity.getMinecraftKey().toString(); ++ java.util.UUID entityUUID = entity.getUniqueID(); ++ net.minecraft.server.World world = entity.getWorld(); ++ ++ log.log(Level.SEVERE, "Ticking entity: " + entityType); ++ log.log(Level.SEVERE, "Position: world: '" + (world == null ? "unknown world?" : world.getWorldData().getName()) + "' at location (" + posX + ", " + posY + ", " + posZ + ")"); ++ log.log(Level.SEVERE, "Velocity: " + (mot == null ? "unknown velocity" : mot.toString()) + " (in blocks per tick)"); ++ if (moveVec != null) { ++ log.log(Level.SEVERE, "Move call information: "); ++ log.log(Level.SEVERE, "Start position: (" + moveStartX + ", " + moveStartY + ", " + moveStartZ + ")"); ++ log.log(Level.SEVERE, "Move vector: " + moveVec.toString()); ++ } ++ log.log(Level.SEVERE, "UUID: " + entityUUID); ++ } ++ ++ // packet processors ++ for (net.minecraft.server.PacketListener packetListener : net.minecraft.server.PlayerConnectionUtils.getCurrentPacketProcessors()) { ++ if (packetListener instanceof net.minecraft.server.PlayerConnection) { ++ net.minecraft.server.EntityPlayer player = ((net.minecraft.server.PlayerConnection)packetListener).player; ++ long totalPackets = net.minecraft.server.PlayerConnectionUtils.getTotalProcessedPackets(); ++ if (player == null) { ++ log.log(Level.SEVERE, "Handling packet for player connection (null player): " + packetListener); ++ log.log(Level.SEVERE, "Total packets processed on the main thread for all players: " + totalPackets); ++ } else { ++ // exclude velocity, this is set client side... Paper will also warn on high velocity set too ++ double posX, posY, posZ; ++ double moveStartX, moveStartY, moveStartZ; ++ net.minecraft.server.Vec3D moveVec; ++ synchronized (player.posLock) { ++ posX = player.locX(); ++ posY = player.locY(); ++ posZ = player.locZ(); ++ moveStartX = player.getMoveStartX(); ++ moveStartY = player.getMoveStartY(); ++ moveStartZ = player.getMoveStartZ(); ++ moveVec = player.getMoveVector(); ++ } ++ ++ java.util.UUID entityUUID = player.getUniqueID(); ++ net.minecraft.server.World world = player.getWorld(); ++ ++ log.log(Level.SEVERE, "Handling packet for player '" + player.getName() + "', UUID: " + entityUUID); ++ log.log(Level.SEVERE, "Position: world: '" + (world == null ? "unknown world?" : world.getWorldData().getName()) + "' at location (" + posX + ", " + posY + ", " + posZ + ")"); ++ if (moveVec != null) { ++ log.log(Level.SEVERE, "Move call information: "); ++ log.log(Level.SEVERE, "Start position: (" + moveStartX + ", " + moveStartY + ", " + moveStartZ + ")"); ++ log.log(Level.SEVERE, "Move vector: " + moveVec.toString()); ++ } ++ log.log(Level.SEVERE, "Total packets processed on the main thread for all players: " + totalPackets); ++ } ++ } else { ++ log.log(Level.SEVERE, "Handling packet for connection: " + packetListener); ++ } ++ } ++ } ++ // Tuinity end - log detailed tick information ++ + @Override + public void run() + { +@@ -117,6 +195,7 @@ public class WatchdogThread extends Thread + log.log( Level.SEVERE, "------------------------------" ); + log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" ); // Paper + ChunkTaskManager.dumpAllChunkLoadInfo(); // Paper ++ this.dumpTickingInfo(); // Tuinity - log detailed tick information + dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( server.serverThread.getId(), Integer.MAX_VALUE ), log ); + log.log( Level.SEVERE, "------------------------------" ); + // +-- +2.26.2 + diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0002-Rebrand.patch similarity index 84% rename from patches/server/0001-Rebrand.patch rename to patches/server/0002-Rebrand.patch index d77651721..4de689a2c 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0002-Rebrand.patch @@ -1,44 +1,44 @@ -From 19e5fd3956dda602886362c82847b18cbd09c04d Mon Sep 17 00:00:00 2001 +From e2ba591861d7dd7532a3a9e8669ce81dc81ef8d9 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 4 May 2019 01:02:11 -0500 Subject: [PATCH] Rebrand --- - pom.xml | 32 +++-- + pom.xml | 34 ++++-- .../paper/console/PaperConsole.java | 2 +- .../net/minecraft/server/MinecraftServer.java | 2 +- .../net/pl3x/purpur/PurpurVersionFetcher.java | 115 ++++++++++++++++++ .../org/bukkit/craftbukkit/CraftServer.java | 2 +- .../craftbukkit/util/CraftMagicNumbers.java | 2 +- .../bukkit/craftbukkit/util/Versioning.java | 2 +- - 7 files changed, 143 insertions(+), 14 deletions(-) + 7 files changed, 144 insertions(+), 15 deletions(-) create mode 100644 src/main/java/net/pl3x/purpur/PurpurVersionFetcher.java diff --git a/pom.xml b/pom.xml -index e4c63bb76c..d5709e670b 100644 +index 66517f30f..097c736bc 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,11 @@ - 4.0.0 -- paper +- tuinity + purpur jar 1.15.2-R0.1-SNAPSHOT -- Paper -- https://papermc.io +- Tuinity-Server +- https://github.com/Spottedleaf/Tuinity + Purpur + http://pl3x.net - -@@ -18,16 +18,16 @@ + UTF-8 +@@ -17,16 +17,16 @@ -- com.destroystokyo.paper -- paper-parent +- com.tuinity +- tuinity-parent + net.pl3x.purpur + purpur-parent dev-SNAPSHOT @@ -47,14 +47,14 @@ index e4c63bb76c..d5709e670b 100644 -- com.destroystokyo.paper -- paper-api +- com.tuinity +- tuinity-api + net.pl3x.purpur + purpur-api ${project.version} compile -@@ -43,6 +43,20 @@ +@@ -42,6 +42,20 @@ ${minecraft.version}-SNAPSHOT compile @@ -75,26 +75,27 @@ index e4c63bb76c..d5709e670b 100644 net.minecrell terminalconsoleappender -@@ -164,7 +178,7 @@ +@@ -163,15 +177,15 @@ -- paper-${minecraft.version} +- tuinity-${minecraft.version} +- install + purpur-${minecraft.version} - clean install ++ clean install -@@ -172,7 +186,7 @@ + com.lukegb.mojo gitdescribe-maven-plugin 1.3 -- git-Paper- +- git-Tuinity- + git-Purpur- .. diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -index cd6e259239..bb227bc0fb 100644 +index 74ed02fa9..c1280478e 100644 --- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java @@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { @@ -103,25 +104,25 @@ index cd6e259239..bb227bc0fb 100644 return super.buildReader(builder - .appName("Paper") + .appName("Purpur") // Purpur + .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) .completer(new ConsoleCommandCompleter(this.server)) ); - } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 4ab6579032..1da54dba9f 100644 +index 3c9392077..28d92cbce 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1570,7 +1570,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Purpur"; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Tuinity"; // Tuinity //Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! ++ return "Purpur"; // Purpur // Tuinity // Paper // Spigot // CraftBukkit } public CrashReport b(CrashReport crashreport) { diff --git a/src/main/java/net/pl3x/purpur/PurpurVersionFetcher.java b/src/main/java/net/pl3x/purpur/PurpurVersionFetcher.java new file mode 100644 -index 0000000000..d8b408f061 +index 000000000..d8b408f06 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/PurpurVersionFetcher.java @@ -0,0 +1,115 @@ @@ -241,20 +242,20 @@ index 0000000000..d8b408f061 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 568aefdf69..5496f8edee 100644 +index 760752eae..2a6fd01d6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -205,7 +205,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper public final class CraftServer implements Server { -- private final String serverName = "Paper"; // Paper -+ private final String serverName = "Purpur"; // Purpur // Paper +- private final String serverName = "Tuinity"; // Paper // Tuinity ++ private final String serverName = "Purpur"; // Paper // Tuinity // 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 004b6ce132..e1cfde4ffc 100644 +index 004b6ce13..e1cfde4ff 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -312,7 +312,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @@ -267,14 +268,14 @@ index 004b6ce132..e1cfde4ffc 100644 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 674096cab1..e9aee2d8a9 100644 +index 001b1e519..e9aee2d8a 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/com.destroystokyo.paper/paper-api/pom.properties"); +- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/com.tuinity/tuinity-api/pom.properties"); // Tuinity + InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/net.pl3x.purpur/purpur-api/pom.properties"); // Purpur Properties properties = new Properties(); diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/server/0003-Purpur-config-files.patch similarity index 93% rename from patches/server/0002-Purpur-config-files.patch rename to patches/server/0003-Purpur-config-files.patch index 10ccb4da4..915d65c2a 100644 --- a/patches/server/0002-Purpur-config-files.patch +++ b/patches/server/0003-Purpur-config-files.patch @@ -1,4 +1,4 @@ -From 3dbfa3127eb3282ea182166ac575910d736727c1 Mon Sep 17 00:00:00 2001 +From ac0db702eab4e6197bb37c8e84a81b410eae71ba Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 9 May 2019 18:09:43 -0500 Subject: [PATCH] Purpur config files @@ -18,7 +18,7 @@ Subject: [PATCH] Purpur config files create mode 100644 src/main/java/net/pl3x/purpur/command/PurpurCommand.java diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 24641501ae..b767dd1d04 100644 +index 24641501a..b767dd1d0 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -581,7 +581,7 @@ public class Metrics { @@ -42,7 +42,7 @@ index 24641501ae..b767dd1d04 100644 metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index b07c49f1b4..cf5abd393e 100644 +index 1f1243ae8..3190c709a 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java @@ -192,6 +192,15 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer @@ -60,9 +60,9 @@ index b07c49f1b4..cf5abd393e 100644 + // Purpur end com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // load version history now // Paper end - + com.tuinity.tuinity.config.TuinityConfig.init((File) options.valueOf("tuinity-settings")); // Tuinity - Server Config diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 032b7acee8..fb584091af 100644 +index 6ae9ec627..bdb12d16f 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -85,6 +85,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { @@ -73,17 +73,17 @@ index 032b7acee8..fb584091af 100644 public final com.destroystokyo.paper.PaperWorldConfig paperConfig; // Paper public final ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray -@@ -136,6 +137,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -138,6 +139,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { protected World(WorldData worlddata, DimensionManager dimensionmanager, java.util.concurrent.Executor executor, BiFunction bifunction, GameProfilerFiller gameprofilerfiller, boolean flag, org.bukkit.generator.ChunkGenerator gen, org.bukkit.World.Environment env) { // Paper - executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig( worlddata.getName() ); // Spigot this.paperConfig = new com.destroystokyo.paper.PaperWorldConfig(worlddata.getName(), this.spigotConfig); // Paper + this.purpurConfig = new net.pl3x.purpur.PurpurWorldConfig(worlddata.getName(), this.paperConfig, this.spigotConfig); // Purpur this.chunkPacketBlockController = this.paperConfig.antiXray ? new ChunkPacketBlockControllerAntiXray(this.paperConfig, executor) : ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray + this.tuinityConfig = new com.tuinity.tuinity.config.TuinityConfig.WorldConfig(worlddata.getName()); // Tuinity - Server Config this.generator = gen; - if (dimensionmanager.world == null) dimensionmanager.world = (WorldServer) this; // Paper diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java new file mode 100644 -index 0000000000..333c880bf2 +index 000000000..333c880bf --- /dev/null +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -0,0 +1,130 @@ @@ -219,7 +219,7 @@ index 0000000000..333c880bf2 +} diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java new file mode 100644 -index 0000000000..eda37fa43f +index 000000000..eda37fa43 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -0,0 +1,67 @@ @@ -292,7 +292,7 @@ index 0000000000..eda37fa43f +} diff --git a/src/main/java/net/pl3x/purpur/command/PurpurCommand.java b/src/main/java/net/pl3x/purpur/command/PurpurCommand.java new file mode 100644 -index 0000000000..7d983d9a54 +index 000000000..7d983d9a5 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/command/PurpurCommand.java @@ -0,0 +1,67 @@ @@ -364,26 +364,26 @@ index 0000000000..7d983d9a54 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 5496f8edee..2293a5dd8d 100644 +index 2a6fd01d6..e3a012800 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -815,6 +815,7 @@ public final class CraftServer implements Server { - +@@ -816,6 +816,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot com.destroystokyo.paper.PaperConfig.init((File) console.options.valueOf("paper-settings")); // Paper + com.tuinity.tuinity.config.TuinityConfig.init((File) console.options.valueOf("tuinity-settings")); // Tuinity - Server Config + net.pl3x.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur for (WorldServer world : console.getWorlds()) { world.worldData.setDifficulty(config.difficulty); world.setSpawnFlags(config.spawnMonsters, config.spawnAnimals); -@@ -843,6 +844,7 @@ public final class CraftServer implements Server { - } +@@ -845,6 +846,7 @@ public final class CraftServer implements Server { world.spigotConfig.init(); // Spigot world.paperConfig.init(); // Paper + world.tuinityConfig.init(); // Tuinity - Server Config + world.purpurConfig.init(); // Purpur } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -861,6 +863,7 @@ public final class CraftServer implements Server { +@@ -863,6 +865,7 @@ public final class CraftServer implements Server { reloadData(); org.spigotmc.SpigotConfig.registerCommands(); // Spigot com.destroystokyo.paper.PaperConfig.registerCommands(); // Paper @@ -391,9 +391,9 @@ index 5496f8edee..2293a5dd8d 100644 overrideAllCommandBlockCommands = commandsConfiguration.getStringList("command-block-overrides").contains("*"); ignoreVanillaPermissions = commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -2134,6 +2137,18 @@ public final class CraftServer implements Server { - return com.destroystokyo.paper.PaperConfig.config; +@@ -2147,6 +2150,18 @@ public final class CraftServer implements Server { } + // Tuinity end - add config to timings report + // Purpur start + @Override @@ -411,12 +411,12 @@ index 5496f8edee..2293a5dd8d 100644 public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index d6e5d014c0..17ebc84f51 100644 +index 90a2f8fea..8d436d275 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -139,6 +139,14 @@ public class Main { +@@ -146,6 +146,14 @@ public class Main { .describedAs("Yml file"); - // Paper end + /* Conctete End - Server Config */ + // Purpur Start + acceptsAll(asList("purpur", "purpur-settings"), "File for purpur settings") diff --git a/patches/server/0003-Timings-stuff.patch b/patches/server/0004-Timings-stuff.patch similarity index 78% rename from patches/server/0003-Timings-stuff.patch rename to patches/server/0004-Timings-stuff.patch index 3bc507296..3a093b7f4 100644 --- a/patches/server/0003-Timings-stuff.patch +++ b/patches/server/0004-Timings-stuff.patch @@ -1,34 +1,36 @@ -From 26fc01169441ddf5a7a5b4499be5c26350db652a Mon Sep 17 00:00:00 2001 +From 8f0c3e0dbe590e8d7fd6e810a1a69e7c3959ce6c Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 5 Jun 2020 21:30:19 -0500 Subject: [PATCH] Timings stuff --- - .../java/co/aikar/timings/TimingsExport.java | 25 ++++++++++++++++--- - 1 file changed, 21 insertions(+), 4 deletions(-) + .../java/co/aikar/timings/TimingsExport.java | 27 +++++++++++++++---- + 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java -index a3b41ce5fc..df14bbaabd 100644 +index b09981e9b..3342201b3 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java -@@ -227,9 +227,13 @@ public class TimingsExport extends Thread { +@@ -227,10 +227,14 @@ public class TimingsExport extends Thread { // Information on the users Config 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)), // Tuinity - add config to timings report +- pair("tuinity", mapAsJSON(Bukkit.spigot().getTuinityConfig(), null)) // Tuinity - add config to timings report + // Purpur start + pair("server.properties", mapAsJSON(Bukkit.spigot().getServerProperties())), + pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)), + pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)), + pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), ++ pair("tuinity", mapAsJSON(Bukkit.spigot().getTuinityConfig(), 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 { +@@ -271,6 +275,19 @@ public class TimingsExport extends Thread { return timingsCost; } @@ -48,7 +50,7 @@ index a3b41ce5fc..df14bbaabd 100644 private static JSONObject mapAsJSON(ConfigurationSection config, String parentKey) { JSONObject object = new JSONObject(); -@@ -306,7 +323,7 @@ public class TimingsExport extends Thread { +@@ -307,7 +324,7 @@ public class TimingsExport extends Thread { String response = null; String timingsURL = null; try { @@ -58,5 +60,5 @@ index a3b41ce5fc..df14bbaabd 100644 String hostName = "BrokenHost"; try { -- -2.24.0 +2.26.2 diff --git a/patches/server/0004-decompile-fixes.patch b/patches/server/0005-decompile-fixes.patch similarity index 97% rename from patches/server/0004-decompile-fixes.patch rename to patches/server/0005-decompile-fixes.patch index 8dedf3013..e226adacb 100644 --- a/patches/server/0004-decompile-fixes.patch +++ b/patches/server/0005-decompile-fixes.patch @@ -1,4 +1,4 @@ -From 809dfebb0fe424318cf3d7efc6cf646d3edcd347 Mon Sep 17 00:00:00 2001 +From 1bcefd743dbd60759181f1ee12aa4a4526102698 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 27 Feb 2020 13:39:06 -0600 Subject: [PATCH] decompile-fixes @@ -95,7 +95,7 @@ Subject: [PATCH] decompile-fixes 88 files changed, 227 insertions(+), 233 deletions(-) diff --git a/src/main/java/net/minecraft/server/BiomeBambooJungle.java b/src/main/java/net/minecraft/server/BiomeBambooJungle.java -index de831ed87e..9c38f8907a 100644 +index de831ed87..9c38f8907 100644 --- a/src/main/java/net/minecraft/server/BiomeBambooJungle.java +++ b/src/main/java/net/minecraft/server/BiomeBambooJungle.java @@ -4,9 +4,9 @@ public class BiomeBambooJungle extends BiomeBase { @@ -112,7 +112,7 @@ index de831ed87e..9c38f8907a 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeBambooJungleHills.java b/src/main/java/net/minecraft/server/BiomeBambooJungleHills.java -index 5ae19373d6..2a6dafccdd 100644 +index 5ae19373d..2a6dafccd 100644 --- a/src/main/java/net/minecraft/server/BiomeBambooJungleHills.java +++ b/src/main/java/net/minecraft/server/BiomeBambooJungleHills.java @@ -4,9 +4,9 @@ public final class BiomeBambooJungleHills extends BiomeBase { @@ -129,7 +129,7 @@ index 5ae19373d6..2a6dafccdd 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeBeach.java b/src/main/java/net/minecraft/server/BiomeBeach.java -index 2627404141..f4e9345aeb 100644 +index 262740414..f4e9345ae 100644 --- a/src/main/java/net/minecraft/server/BiomeBeach.java +++ b/src/main/java/net/minecraft/server/BiomeBeach.java @@ -4,9 +4,9 @@ public final class BiomeBeach extends BiomeBase { @@ -146,7 +146,7 @@ index 2627404141..f4e9345aeb 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeBigHills.java b/src/main/java/net/minecraft/server/BiomeBigHills.java -index a42098da5c..58c30f6523 100644 +index a42098da5..58c30f652 100644 --- a/src/main/java/net/minecraft/server/BiomeBigHills.java +++ b/src/main/java/net/minecraft/server/BiomeBigHills.java @@ -4,8 +4,8 @@ public final class BiomeBigHills extends BiomeBase { @@ -161,7 +161,7 @@ index a42098da5c..58c30f6523 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeBirchForest.java b/src/main/java/net/minecraft/server/BiomeBirchForest.java -index 27fa238013..9437438c82 100644 +index 27fa23801..9437438c8 100644 --- a/src/main/java/net/minecraft/server/BiomeBirchForest.java +++ b/src/main/java/net/minecraft/server/BiomeBirchForest.java @@ -4,8 +4,8 @@ public final class BiomeBirchForest extends BiomeBase { @@ -176,7 +176,7 @@ index 27fa238013..9437438c82 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeBirchForestHills.java b/src/main/java/net/minecraft/server/BiomeBirchForestHills.java -index 51b1d39f53..3e5c23d31e 100644 +index 51b1d39f5..3e5c23d31 100644 --- a/src/main/java/net/minecraft/server/BiomeBirchForestHills.java +++ b/src/main/java/net/minecraft/server/BiomeBirchForestHills.java @@ -4,8 +4,8 @@ public final class BiomeBirchForestHills extends BiomeBase { @@ -191,7 +191,7 @@ index 51b1d39f53..3e5c23d31e 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeBirchForestHillsMutated.java b/src/main/java/net/minecraft/server/BiomeBirchForestHillsMutated.java -index b74f23cff6..d5eb5c91c4 100644 +index b74f23cff..d5eb5c91c 100644 --- a/src/main/java/net/minecraft/server/BiomeBirchForestHillsMutated.java +++ b/src/main/java/net/minecraft/server/BiomeBirchForestHillsMutated.java @@ -4,8 +4,8 @@ public final class BiomeBirchForestHillsMutated extends BiomeBase { @@ -206,7 +206,7 @@ index b74f23cff6..d5eb5c91c4 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeBirchForestMutated.java b/src/main/java/net/minecraft/server/BiomeBirchForestMutated.java -index 17fe3818dd..e805f9568e 100644 +index 17fe3818d..e805f9568 100644 --- a/src/main/java/net/minecraft/server/BiomeBirchForestMutated.java +++ b/src/main/java/net/minecraft/server/BiomeBirchForestMutated.java @@ -4,8 +4,8 @@ public final class BiomeBirchForestMutated extends BiomeBase { @@ -221,7 +221,7 @@ index 17fe3818dd..e805f9568e 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeColdBeach.java b/src/main/java/net/minecraft/server/BiomeColdBeach.java -index 2c230be98f..1b92f4567d 100644 +index 2c230be98..1b92f4567 100644 --- a/src/main/java/net/minecraft/server/BiomeColdBeach.java +++ b/src/main/java/net/minecraft/server/BiomeColdBeach.java @@ -4,9 +4,9 @@ public final class BiomeColdBeach extends BiomeBase { @@ -238,7 +238,7 @@ index 2c230be98f..1b92f4567d 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeColdDeepOcean.java b/src/main/java/net/minecraft/server/BiomeColdDeepOcean.java -index d96e820e07..b9a5cb63a4 100644 +index d96e820e0..b9a5cb63a 100644 --- a/src/main/java/net/minecraft/server/BiomeColdDeepOcean.java +++ b/src/main/java/net/minecraft/server/BiomeColdDeepOcean.java @@ -4,10 +4,10 @@ public class BiomeColdDeepOcean extends BiomeBase { @@ -266,7 +266,7 @@ index d96e820e07..b9a5cb63a4 100644 BiomeDecoratorGroups.ah(this); BiomeDecoratorGroups.ap(this); diff --git a/src/main/java/net/minecraft/server/BiomeColdOcean.java b/src/main/java/net/minecraft/server/BiomeColdOcean.java -index c7ed2e134a..571c3d139d 100644 +index c7ed2e134..571c3d139 100644 --- a/src/main/java/net/minecraft/server/BiomeColdOcean.java +++ b/src/main/java/net/minecraft/server/BiomeColdOcean.java @@ -4,9 +4,9 @@ public class BiomeColdOcean extends BiomeBase { @@ -292,7 +292,7 @@ index c7ed2e134a..571c3d139d 100644 BiomeDecoratorGroups.ah(this); BiomeDecoratorGroups.ap(this); diff --git a/src/main/java/net/minecraft/server/BiomeColdTaiga.java b/src/main/java/net/minecraft/server/BiomeColdTaiga.java -index c766dedfa9..88400e77bf 100644 +index c766dedfa..88400e77b 100644 --- a/src/main/java/net/minecraft/server/BiomeColdTaiga.java +++ b/src/main/java/net/minecraft/server/BiomeColdTaiga.java @@ -4,9 +4,9 @@ public final class BiomeColdTaiga extends BiomeBase { @@ -309,7 +309,7 @@ index c766dedfa9..88400e77bf 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeColdTaigaHills.java b/src/main/java/net/minecraft/server/BiomeColdTaigaHills.java -index 187f11f584..8a8fc7dbd2 100644 +index 187f11f58..8a8fc7dbd 100644 --- a/src/main/java/net/minecraft/server/BiomeColdTaigaHills.java +++ b/src/main/java/net/minecraft/server/BiomeColdTaigaHills.java @@ -4,8 +4,8 @@ public final class BiomeColdTaigaHills extends BiomeBase { @@ -324,7 +324,7 @@ index 187f11f584..8a8fc7dbd2 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeColdTaigaMutated.java b/src/main/java/net/minecraft/server/BiomeColdTaigaMutated.java -index 97c56fb803..327e6847f0 100644 +index 97c56fb80..327e6847f 100644 --- a/src/main/java/net/minecraft/server/BiomeColdTaigaMutated.java +++ b/src/main/java/net/minecraft/server/BiomeColdTaigaMutated.java @@ -4,8 +4,8 @@ public final class BiomeColdTaigaMutated extends BiomeBase { @@ -339,7 +339,7 @@ index 97c56fb803..327e6847f0 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeDeepOcean.java b/src/main/java/net/minecraft/server/BiomeDeepOcean.java -index bea1293144..651d44cb37 100644 +index bea129314..651d44cb3 100644 --- a/src/main/java/net/minecraft/server/BiomeDeepOcean.java +++ b/src/main/java/net/minecraft/server/BiomeDeepOcean.java @@ -4,10 +4,10 @@ public final class BiomeDeepOcean extends BiomeBase { @@ -367,7 +367,7 @@ index bea1293144..651d44cb37 100644 BiomeDecoratorGroups.ah(this); BiomeDecoratorGroups.ap(this); diff --git a/src/main/java/net/minecraft/server/BiomeDesert.java b/src/main/java/net/minecraft/server/BiomeDesert.java -index 7a8784f18a..257732dad7 100644 +index 7a8784f18..257732dad 100644 --- a/src/main/java/net/minecraft/server/BiomeDesert.java +++ b/src/main/java/net/minecraft/server/BiomeDesert.java @@ -4,11 +4,11 @@ public final class BiomeDesert extends BiomeBase { @@ -388,7 +388,7 @@ index 7a8784f18a..257732dad7 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.e(this); diff --git a/src/main/java/net/minecraft/server/BiomeDesertHills.java b/src/main/java/net/minecraft/server/BiomeDesertHills.java -index 9f5e9abc41..3752fc4509 100644 +index 9f5e9abc4..3752fc450 100644 --- a/src/main/java/net/minecraft/server/BiomeDesertHills.java +++ b/src/main/java/net/minecraft/server/BiomeDesertHills.java @@ -4,9 +4,9 @@ public final class BiomeDesertHills extends BiomeBase { @@ -405,7 +405,7 @@ index 9f5e9abc41..3752fc4509 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.e(this); diff --git a/src/main/java/net/minecraft/server/BiomeDesertMutated.java b/src/main/java/net/minecraft/server/BiomeDesertMutated.java -index f79e438dc4..1a0b569322 100644 +index f79e438dc..1a0b56932 100644 --- a/src/main/java/net/minecraft/server/BiomeDesertMutated.java +++ b/src/main/java/net/minecraft/server/BiomeDesertMutated.java @@ -4,8 +4,8 @@ public final class BiomeDesertMutated extends BiomeBase { @@ -420,7 +420,7 @@ index f79e438dc4..1a0b569322 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.e(this); diff --git a/src/main/java/net/minecraft/server/BiomeExtremeHillsEdge.java b/src/main/java/net/minecraft/server/BiomeExtremeHillsEdge.java -index 58a6125289..8e19e06889 100644 +index 58a612528..8e19e0688 100644 --- a/src/main/java/net/minecraft/server/BiomeExtremeHillsEdge.java +++ b/src/main/java/net/minecraft/server/BiomeExtremeHillsEdge.java @@ -4,8 +4,8 @@ public final class BiomeExtremeHillsEdge extends BiomeBase { @@ -435,7 +435,7 @@ index 58a6125289..8e19e06889 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeExtremeHillsMutated.java b/src/main/java/net/minecraft/server/BiomeExtremeHillsMutated.java -index cd18533bb0..69d4880c74 100644 +index cd18533bb..69d4880c7 100644 --- a/src/main/java/net/minecraft/server/BiomeExtremeHillsMutated.java +++ b/src/main/java/net/minecraft/server/BiomeExtremeHillsMutated.java @@ -4,8 +4,8 @@ public final class BiomeExtremeHillsMutated extends BiomeBase { @@ -450,7 +450,7 @@ index cd18533bb0..69d4880c74 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTrees.java b/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTrees.java -index 2c7f5940a4..7661d53161 100644 +index 2c7f5940a..7661d5316 100644 --- a/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTrees.java +++ b/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTrees.java @@ -4,8 +4,8 @@ public final class BiomeExtremeHillsWithTrees extends BiomeBase { @@ -465,7 +465,7 @@ index 2c7f5940a4..7661d53161 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTreesMutated.java b/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTreesMutated.java -index 6e33c23632..05418f8fa1 100644 +index 6e33c2363..05418f8fa 100644 --- a/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTreesMutated.java +++ b/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTreesMutated.java @@ -4,8 +4,8 @@ public final class BiomeExtremeHillsWithTreesMutated extends BiomeBase { @@ -480,7 +480,7 @@ index 6e33c23632..05418f8fa1 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeFlowerForest.java b/src/main/java/net/minecraft/server/BiomeFlowerForest.java -index c6ac9506a7..1d3f624323 100644 +index c6ac9506a..1d3f62432 100644 --- a/src/main/java/net/minecraft/server/BiomeFlowerForest.java +++ b/src/main/java/net/minecraft/server/BiomeFlowerForest.java @@ -6,18 +6,18 @@ public final class BiomeFlowerForest extends BiomeBase { @@ -508,7 +508,7 @@ index c6ac9506a7..1d3f624323 100644 BiomeDecoratorGroups.Z(this); BiomeDecoratorGroups.aa(this); diff --git a/src/main/java/net/minecraft/server/BiomeForest.java b/src/main/java/net/minecraft/server/BiomeForest.java -index 570a1f66f3..e849b411c6 100644 +index 570a1f66f..e849b411c 100644 --- a/src/main/java/net/minecraft/server/BiomeForest.java +++ b/src/main/java/net/minecraft/server/BiomeForest.java @@ -4,9 +4,9 @@ public final class BiomeForest extends BiomeBase { @@ -525,7 +525,7 @@ index 570a1f66f3..e849b411c6 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeForestHills.java b/src/main/java/net/minecraft/server/BiomeForestHills.java -index 8179e1c603..f7dea38eb3 100644 +index 8179e1c60..f7dea38eb 100644 --- a/src/main/java/net/minecraft/server/BiomeForestHills.java +++ b/src/main/java/net/minecraft/server/BiomeForestHills.java @@ -4,9 +4,9 @@ public final class BiomeForestHills extends BiomeBase { @@ -542,7 +542,7 @@ index 8179e1c603..f7dea38eb3 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeFrozenDeepOcean.java b/src/main/java/net/minecraft/server/BiomeFrozenDeepOcean.java -index 852c4bd9ab..67d120bef2 100644 +index 852c4bd9a..67d120bef 100644 --- a/src/main/java/net/minecraft/server/BiomeFrozenDeepOcean.java +++ b/src/main/java/net/minecraft/server/BiomeFrozenDeepOcean.java @@ -6,10 +6,10 @@ public class BiomeFrozenDeepOcean extends BiomeBase { @@ -561,7 +561,7 @@ index 852c4bd9ab..67d120bef2 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeFrozenOcean.java b/src/main/java/net/minecraft/server/BiomeFrozenOcean.java -index 3d649c6004..2772bc6dac 100644 +index 3d649c600..2772bc6da 100644 --- a/src/main/java/net/minecraft/server/BiomeFrozenOcean.java +++ b/src/main/java/net/minecraft/server/BiomeFrozenOcean.java @@ -6,9 +6,9 @@ public final class BiomeFrozenOcean extends BiomeBase { @@ -578,7 +578,7 @@ index 3d649c6004..2772bc6dac 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeFrozenRiver.java b/src/main/java/net/minecraft/server/BiomeFrozenRiver.java -index 915f20042b..4be53fc0f6 100644 +index 915f20042..4be53fc0f 100644 --- a/src/main/java/net/minecraft/server/BiomeFrozenRiver.java +++ b/src/main/java/net/minecraft/server/BiomeFrozenRiver.java @@ -4,7 +4,7 @@ public final class BiomeFrozenRiver extends BiomeBase { @@ -591,7 +591,7 @@ index 915f20042b..4be53fc0f6 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeHell.java b/src/main/java/net/minecraft/server/BiomeHell.java -index f9ca6b889a..888dfcd8d4 100644 +index f9ca6b889..888dfcd8d 100644 --- a/src/main/java/net/minecraft/server/BiomeHell.java +++ b/src/main/java/net/minecraft/server/BiomeHell.java @@ -4,20 +4,20 @@ public final class BiomeHell extends BiomeBase { @@ -629,7 +629,7 @@ index f9ca6b889a..888dfcd8d4 100644 this.a(EnumCreatureType.MONSTER, new BiomeBase.BiomeMeta(EntityTypes.ZOMBIE_PIGMAN, 100, 4, 4)); this.a(EnumCreatureType.MONSTER, new BiomeBase.BiomeMeta(EntityTypes.MAGMA_CUBE, 2, 4, 4)); diff --git a/src/main/java/net/minecraft/server/BiomeIceMountains.java b/src/main/java/net/minecraft/server/BiomeIceMountains.java -index d5033de8aa..ad9b4efe09 100644 +index d5033de8a..ad9b4efe0 100644 --- a/src/main/java/net/minecraft/server/BiomeIceMountains.java +++ b/src/main/java/net/minecraft/server/BiomeIceMountains.java @@ -4,8 +4,8 @@ public final class BiomeIceMountains extends BiomeBase { @@ -644,7 +644,7 @@ index d5033de8aa..ad9b4efe09 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeIcePlains.java b/src/main/java/net/minecraft/server/BiomeIcePlains.java -index 054b0e0ab1..71606b0a71 100644 +index 054b0e0ab..71606b0a7 100644 --- a/src/main/java/net/minecraft/server/BiomeIcePlains.java +++ b/src/main/java/net/minecraft/server/BiomeIcePlains.java @@ -4,11 +4,11 @@ public final class BiomeIcePlains extends BiomeBase { @@ -665,7 +665,7 @@ index 054b0e0ab1..71606b0a71 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeIcePlainsSpikes.java b/src/main/java/net/minecraft/server/BiomeIcePlainsSpikes.java -index 44c410f75c..984f94bb59 100644 +index 44c410f75..984f94bb5 100644 --- a/src/main/java/net/minecraft/server/BiomeIcePlainsSpikes.java +++ b/src/main/java/net/minecraft/server/BiomeIcePlainsSpikes.java @@ -4,14 +4,14 @@ public final class BiomeIcePlainsSpikes extends BiomeBase { @@ -688,7 +688,7 @@ index 44c410f75c..984f94bb59 100644 BiomeDecoratorGroups.h(this); BiomeDecoratorGroups.l(this); diff --git a/src/main/java/net/minecraft/server/BiomeJungle.java b/src/main/java/net/minecraft/server/BiomeJungle.java -index 2f893ce918..95e5019968 100644 +index 2f893ce91..95e501996 100644 --- a/src/main/java/net/minecraft/server/BiomeJungle.java +++ b/src/main/java/net/minecraft/server/BiomeJungle.java @@ -4,9 +4,9 @@ public final class BiomeJungle extends BiomeBase { @@ -705,7 +705,7 @@ index 2f893ce918..95e5019968 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeJungleEdge.java b/src/main/java/net/minecraft/server/BiomeJungleEdge.java -index 4858617859..e624f9764f 100644 +index 485861785..e624f9764 100644 --- a/src/main/java/net/minecraft/server/BiomeJungleEdge.java +++ b/src/main/java/net/minecraft/server/BiomeJungleEdge.java @@ -4,8 +4,8 @@ public final class BiomeJungleEdge extends BiomeBase { @@ -720,7 +720,7 @@ index 4858617859..e624f9764f 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeJungleEdgeMutated.java b/src/main/java/net/minecraft/server/BiomeJungleEdgeMutated.java -index a957f6124b..1fe9c840a7 100644 +index a957f6124..1fe9c840a 100644 --- a/src/main/java/net/minecraft/server/BiomeJungleEdgeMutated.java +++ b/src/main/java/net/minecraft/server/BiomeJungleEdgeMutated.java @@ -4,8 +4,8 @@ public final class BiomeJungleEdgeMutated extends BiomeBase { @@ -735,7 +735,7 @@ index a957f6124b..1fe9c840a7 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeJungleHills.java b/src/main/java/net/minecraft/server/BiomeJungleHills.java -index 7b9bc967a9..e2970ab00e 100644 +index 7b9bc967a..e2970ab00 100644 --- a/src/main/java/net/minecraft/server/BiomeJungleHills.java +++ b/src/main/java/net/minecraft/server/BiomeJungleHills.java @@ -4,9 +4,9 @@ public final class BiomeJungleHills extends BiomeBase { @@ -752,7 +752,7 @@ index 7b9bc967a9..e2970ab00e 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeJungleMutated.java b/src/main/java/net/minecraft/server/BiomeJungleMutated.java -index 02246950d0..ffe6b4344e 100644 +index 02246950d..ffe6b4344 100644 --- a/src/main/java/net/minecraft/server/BiomeJungleMutated.java +++ b/src/main/java/net/minecraft/server/BiomeJungleMutated.java @@ -4,8 +4,8 @@ public final class BiomeJungleMutated extends BiomeBase { @@ -767,7 +767,7 @@ index 02246950d0..ffe6b4344e 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeLukewarmDeepOcean.java b/src/main/java/net/minecraft/server/BiomeLukewarmDeepOcean.java -index e6d4a2c397..b23c43305b 100644 +index e6d4a2c39..b23c43305 100644 --- a/src/main/java/net/minecraft/server/BiomeLukewarmDeepOcean.java +++ b/src/main/java/net/minecraft/server/BiomeLukewarmDeepOcean.java @@ -4,10 +4,10 @@ public class BiomeLukewarmDeepOcean extends BiomeBase { @@ -786,7 +786,7 @@ index e6d4a2c397..b23c43305b 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeLukewarmOcean.java b/src/main/java/net/minecraft/server/BiomeLukewarmOcean.java -index f2dc5d1b5c..efcb11bbe8 100644 +index f2dc5d1b5..efcb11bbe 100644 --- a/src/main/java/net/minecraft/server/BiomeLukewarmOcean.java +++ b/src/main/java/net/minecraft/server/BiomeLukewarmOcean.java @@ -4,9 +4,9 @@ public class BiomeLukewarmOcean extends BiomeBase { @@ -803,7 +803,7 @@ index f2dc5d1b5c..efcb11bbe8 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMegaSpruceTaiga.java b/src/main/java/net/minecraft/server/BiomeMegaSpruceTaiga.java -index f6ec90c2d0..328e939a6f 100644 +index f6ec90c2d..328e939a6 100644 --- a/src/main/java/net/minecraft/server/BiomeMegaSpruceTaiga.java +++ b/src/main/java/net/minecraft/server/BiomeMegaSpruceTaiga.java @@ -4,8 +4,8 @@ public final class BiomeMegaSpruceTaiga extends BiomeBase { @@ -818,7 +818,7 @@ index f6ec90c2d0..328e939a6f 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMegaTaiga.java b/src/main/java/net/minecraft/server/BiomeMegaTaiga.java -index e9ad930d88..36bea710a0 100644 +index e9ad930d8..36bea710a 100644 --- a/src/main/java/net/minecraft/server/BiomeMegaTaiga.java +++ b/src/main/java/net/minecraft/server/BiomeMegaTaiga.java @@ -4,8 +4,8 @@ public final class BiomeMegaTaiga extends BiomeBase { @@ -833,7 +833,7 @@ index e9ad930d88..36bea710a0 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMegaTaigaHills.java b/src/main/java/net/minecraft/server/BiomeMegaTaigaHills.java -index cdc182c229..22474d682a 100644 +index cdc182c22..22474d682 100644 --- a/src/main/java/net/minecraft/server/BiomeMegaTaigaHills.java +++ b/src/main/java/net/minecraft/server/BiomeMegaTaigaHills.java @@ -4,8 +4,8 @@ public final class BiomeMegaTaigaHills extends BiomeBase { @@ -848,7 +848,7 @@ index cdc182c229..22474d682a 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMesa.java b/src/main/java/net/minecraft/server/BiomeMesa.java -index 95e602a95f..65d606d51c 100644 +index 95e602a95..65d606d51 100644 --- a/src/main/java/net/minecraft/server/BiomeMesa.java +++ b/src/main/java/net/minecraft/server/BiomeMesa.java @@ -4,8 +4,8 @@ public final class BiomeMesa extends BiomeBase { @@ -863,7 +863,7 @@ index 95e602a95f..65d606d51c 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMesaBryce.java b/src/main/java/net/minecraft/server/BiomeMesaBryce.java -index 57ef10afb0..5ecec62f18 100644 +index 57ef10afb..5ecec62f1 100644 --- a/src/main/java/net/minecraft/server/BiomeMesaBryce.java +++ b/src/main/java/net/minecraft/server/BiomeMesaBryce.java @@ -4,8 +4,8 @@ public final class BiomeMesaBryce extends BiomeBase { @@ -878,7 +878,7 @@ index 57ef10afb0..5ecec62f18 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMesaPlataeu.java b/src/main/java/net/minecraft/server/BiomeMesaPlataeu.java -index b9f81a044f..14d4bd312e 100644 +index b9f81a044..14d4bd312 100644 --- a/src/main/java/net/minecraft/server/BiomeMesaPlataeu.java +++ b/src/main/java/net/minecraft/server/BiomeMesaPlataeu.java @@ -4,8 +4,8 @@ public final class BiomeMesaPlataeu extends BiomeBase { @@ -893,7 +893,7 @@ index b9f81a044f..14d4bd312e 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMesaPlataeuClear.java b/src/main/java/net/minecraft/server/BiomeMesaPlataeuClear.java -index 3ce8d3cef5..b5dab9d2aa 100644 +index 3ce8d3cef..b5dab9d2a 100644 --- a/src/main/java/net/minecraft/server/BiomeMesaPlataeuClear.java +++ b/src/main/java/net/minecraft/server/BiomeMesaPlataeuClear.java @@ -4,8 +4,8 @@ public final class BiomeMesaPlataeuClear extends BiomeBase { @@ -908,7 +908,7 @@ index 3ce8d3cef5..b5dab9d2aa 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMesaPlateauClearMutated.java b/src/main/java/net/minecraft/server/BiomeMesaPlateauClearMutated.java -index 88b7b37467..d05cc38b5e 100644 +index 88b7b3746..d05cc38b5 100644 --- a/src/main/java/net/minecraft/server/BiomeMesaPlateauClearMutated.java +++ b/src/main/java/net/minecraft/server/BiomeMesaPlateauClearMutated.java @@ -4,8 +4,8 @@ public final class BiomeMesaPlateauClearMutated extends BiomeBase { @@ -923,7 +923,7 @@ index 88b7b37467..d05cc38b5e 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMesaPlateauMutated.java b/src/main/java/net/minecraft/server/BiomeMesaPlateauMutated.java -index 7254bcf3e5..21a77ee812 100644 +index 7254bcf3e..21a77ee81 100644 --- a/src/main/java/net/minecraft/server/BiomeMesaPlateauMutated.java +++ b/src/main/java/net/minecraft/server/BiomeMesaPlateauMutated.java @@ -4,8 +4,8 @@ public final class BiomeMesaPlateauMutated extends BiomeBase { @@ -938,7 +938,7 @@ index 7254bcf3e5..21a77ee812 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMushroomIslandShore.java b/src/main/java/net/minecraft/server/BiomeMushroomIslandShore.java -index 58bc1f2343..0302efbdc7 100644 +index 58bc1f234..0302efbdc 100644 --- a/src/main/java/net/minecraft/server/BiomeMushroomIslandShore.java +++ b/src/main/java/net/minecraft/server/BiomeMushroomIslandShore.java @@ -4,8 +4,8 @@ public final class BiomeMushroomIslandShore extends BiomeBase { @@ -953,7 +953,7 @@ index 58bc1f2343..0302efbdc7 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeMushrooms.java b/src/main/java/net/minecraft/server/BiomeMushrooms.java -index cb620014b7..51f92584b8 100644 +index cb620014b..51f92584b 100644 --- a/src/main/java/net/minecraft/server/BiomeMushrooms.java +++ b/src/main/java/net/minecraft/server/BiomeMushrooms.java @@ -4,8 +4,8 @@ public final class BiomeMushrooms extends BiomeBase { @@ -968,7 +968,7 @@ index cb620014b7..51f92584b8 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeOcean.java b/src/main/java/net/minecraft/server/BiomeOcean.java -index fd7e991062..ad9628b2aa 100644 +index fd7e99106..ad9628b2a 100644 --- a/src/main/java/net/minecraft/server/BiomeOcean.java +++ b/src/main/java/net/minecraft/server/BiomeOcean.java @@ -4,9 +4,9 @@ public final class BiomeOcean extends BiomeBase { @@ -994,7 +994,7 @@ index fd7e991062..ad9628b2aa 100644 BiomeDecoratorGroups.ah(this); BiomeDecoratorGroups.ap(this); diff --git a/src/main/java/net/minecraft/server/BiomePlains.java b/src/main/java/net/minecraft/server/BiomePlains.java -index efbb36d016..ff6090e3c1 100644 +index efbb36d01..ff6090e3c 100644 --- a/src/main/java/net/minecraft/server/BiomePlains.java +++ b/src/main/java/net/minecraft/server/BiomePlains.java @@ -4,10 +4,10 @@ public final class BiomePlains extends BiomeBase { @@ -1013,7 +1013,7 @@ index efbb36d016..ff6090e3c1 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeRedwoodTaigaHillsMutated.java b/src/main/java/net/minecraft/server/BiomeRedwoodTaigaHillsMutated.java -index 7804a4e329..a28222eb1d 100644 +index 7804a4e32..a28222eb1 100644 --- a/src/main/java/net/minecraft/server/BiomeRedwoodTaigaHillsMutated.java +++ b/src/main/java/net/minecraft/server/BiomeRedwoodTaigaHillsMutated.java @@ -4,8 +4,8 @@ public final class BiomeRedwoodTaigaHillsMutated extends BiomeBase { @@ -1028,7 +1028,7 @@ index 7804a4e329..a28222eb1d 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeRiver.java b/src/main/java/net/minecraft/server/BiomeRiver.java -index 6522c80214..b84b868b1a 100644 +index 6522c8021..b84b868b1 100644 --- a/src/main/java/net/minecraft/server/BiomeRiver.java +++ b/src/main/java/net/minecraft/server/BiomeRiver.java @@ -4,7 +4,7 @@ public final class BiomeRiver extends BiomeBase { @@ -1050,7 +1050,7 @@ index 6522c80214..b84b868b1a 100644 this.a(EnumCreatureType.WATER_CREATURE, new BiomeBase.BiomeMeta(EntityTypes.SQUID, 2, 1, 4)); this.a(EnumCreatureType.WATER_CREATURE, new BiomeBase.BiomeMeta(EntityTypes.SALMON, 5, 1, 5)); diff --git a/src/main/java/net/minecraft/server/BiomeRoofedForest.java b/src/main/java/net/minecraft/server/BiomeRoofedForest.java -index 30d6802242..16bcf9bff0 100644 +index 30d680224..16bcf9bff 100644 --- a/src/main/java/net/minecraft/server/BiomeRoofedForest.java +++ b/src/main/java/net/minecraft/server/BiomeRoofedForest.java @@ -6,14 +6,14 @@ public final class BiomeRoofedForest extends BiomeBase { @@ -1073,7 +1073,7 @@ index 30d6802242..16bcf9bff0 100644 BiomeDecoratorGroups.g(this); BiomeDecoratorGroups.h(this); diff --git a/src/main/java/net/minecraft/server/BiomeRoofedForestMutated.java b/src/main/java/net/minecraft/server/BiomeRoofedForestMutated.java -index 5c9ab0864e..9fa84c87fa 100644 +index 5c9ab0864..9fa84c87f 100644 --- a/src/main/java/net/minecraft/server/BiomeRoofedForestMutated.java +++ b/src/main/java/net/minecraft/server/BiomeRoofedForestMutated.java @@ -6,14 +6,14 @@ public final class BiomeRoofedForestMutated extends BiomeBase { @@ -1096,7 +1096,7 @@ index 5c9ab0864e..9fa84c87fa 100644 BiomeDecoratorGroups.g(this); BiomeDecoratorGroups.h(this); diff --git a/src/main/java/net/minecraft/server/BiomeSavanna.java b/src/main/java/net/minecraft/server/BiomeSavanna.java -index e023898b38..c12a890165 100644 +index e023898b3..c12a89016 100644 --- a/src/main/java/net/minecraft/server/BiomeSavanna.java +++ b/src/main/java/net/minecraft/server/BiomeSavanna.java @@ -4,10 +4,10 @@ public final class BiomeSavanna extends BiomeBase { @@ -1115,7 +1115,7 @@ index e023898b38..c12a890165 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeSavannaMutated.java b/src/main/java/net/minecraft/server/BiomeSavannaMutated.java -index 8a0da661fb..db8b20a6c7 100644 +index 8a0da661f..db8b20a6c 100644 --- a/src/main/java/net/minecraft/server/BiomeSavannaMutated.java +++ b/src/main/java/net/minecraft/server/BiomeSavannaMutated.java @@ -4,8 +4,8 @@ public final class BiomeSavannaMutated extends BiomeBase { @@ -1130,7 +1130,7 @@ index 8a0da661fb..db8b20a6c7 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeSavannaPlateau.java b/src/main/java/net/minecraft/server/BiomeSavannaPlateau.java -index 1d2a37a41e..2826c510d8 100644 +index 1d2a37a41..2826c510d 100644 --- a/src/main/java/net/minecraft/server/BiomeSavannaPlateau.java +++ b/src/main/java/net/minecraft/server/BiomeSavannaPlateau.java @@ -4,8 +4,8 @@ public final class BiomeSavannaPlateau extends BiomeBase { @@ -1145,7 +1145,7 @@ index 1d2a37a41e..2826c510d8 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeSavannaPlateauMutated.java b/src/main/java/net/minecraft/server/BiomeSavannaPlateauMutated.java -index 91e2b59037..e544a8f6b9 100644 +index 91e2b5903..e544a8f6b 100644 --- a/src/main/java/net/minecraft/server/BiomeSavannaPlateauMutated.java +++ b/src/main/java/net/minecraft/server/BiomeSavannaPlateauMutated.java @@ -4,8 +4,8 @@ public final class BiomeSavannaPlateauMutated extends BiomeBase { @@ -1160,7 +1160,7 @@ index 91e2b59037..e544a8f6b9 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeStoneBeach.java b/src/main/java/net/minecraft/server/BiomeStoneBeach.java -index 501c36649e..34660f9f84 100644 +index 501c36649..34660f9f8 100644 --- a/src/main/java/net/minecraft/server/BiomeStoneBeach.java +++ b/src/main/java/net/minecraft/server/BiomeStoneBeach.java @@ -4,8 +4,8 @@ public final class BiomeStoneBeach extends BiomeBase { @@ -1175,7 +1175,7 @@ index 501c36649e..34660f9f84 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeSunflowerPlains.java b/src/main/java/net/minecraft/server/BiomeSunflowerPlains.java -index 62c1cfaef9..8815c95900 100644 +index 62c1cfaef..8815c9590 100644 --- a/src/main/java/net/minecraft/server/BiomeSunflowerPlains.java +++ b/src/main/java/net/minecraft/server/BiomeSunflowerPlains.java @@ -4,21 +4,21 @@ public final class BiomeSunflowerPlains extends BiomeBase { @@ -1206,7 +1206,7 @@ index 62c1cfaef9..8815c95900 100644 BiomeDecoratorGroups.ap(this); this.a(EnumCreatureType.CREATURE, new BiomeBase.BiomeMeta(EntityTypes.SHEEP, 12, 4, 4)); diff --git a/src/main/java/net/minecraft/server/BiomeSwamp.java b/src/main/java/net/minecraft/server/BiomeSwamp.java -index 29e448f5ad..02584897e9 100644 +index 29e448f5a..02584897e 100644 --- a/src/main/java/net/minecraft/server/BiomeSwamp.java +++ b/src/main/java/net/minecraft/server/BiomeSwamp.java @@ -4,8 +4,8 @@ public final class BiomeSwamp extends BiomeBase { @@ -1230,7 +1230,7 @@ index 29e448f5ad..02584897e9 100644 BiomeDecoratorGroups.ap(this); this.a(EnumCreatureType.CREATURE, new BiomeBase.BiomeMeta(EntityTypes.SHEEP, 12, 4, 4)); diff --git a/src/main/java/net/minecraft/server/BiomeSwamplandMutated.java b/src/main/java/net/minecraft/server/BiomeSwamplandMutated.java -index 1352daa258..d85b01b956 100644 +index 1352daa25..d85b01b95 100644 --- a/src/main/java/net/minecraft/server/BiomeSwamplandMutated.java +++ b/src/main/java/net/minecraft/server/BiomeSwamplandMutated.java @@ -4,7 +4,7 @@ public final class BiomeSwamplandMutated extends BiomeBase { @@ -1243,7 +1243,7 @@ index 1352daa258..d85b01b956 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeTaiga.java b/src/main/java/net/minecraft/server/BiomeTaiga.java -index 5cd569dcdd..ae6e6ca896 100644 +index 5cd569dcd..ae6e6ca89 100644 --- a/src/main/java/net/minecraft/server/BiomeTaiga.java +++ b/src/main/java/net/minecraft/server/BiomeTaiga.java @@ -4,10 +4,10 @@ public final class BiomeTaiga extends BiomeBase { @@ -1262,7 +1262,7 @@ index 5cd569dcdd..ae6e6ca896 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeTaigaHills.java b/src/main/java/net/minecraft/server/BiomeTaigaHills.java -index e182f04008..4e19fe5ae9 100644 +index e182f0400..4e19fe5ae 100644 --- a/src/main/java/net/minecraft/server/BiomeTaigaHills.java +++ b/src/main/java/net/minecraft/server/BiomeTaigaHills.java @@ -4,8 +4,8 @@ public final class BiomeTaigaHills extends BiomeBase { @@ -1277,7 +1277,7 @@ index e182f04008..4e19fe5ae9 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeTaigaMutated.java b/src/main/java/net/minecraft/server/BiomeTaigaMutated.java -index 75d46c61dc..05e833ffed 100644 +index 75d46c61d..05e833ffe 100644 --- a/src/main/java/net/minecraft/server/BiomeTaigaMutated.java +++ b/src/main/java/net/minecraft/server/BiomeTaigaMutated.java @@ -4,8 +4,8 @@ public final class BiomeTaigaMutated extends BiomeBase { @@ -1292,7 +1292,7 @@ index 75d46c61dc..05e833ffed 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeTheEnd.java b/src/main/java/net/minecraft/server/BiomeTheEnd.java -index 26fda2cf69..22e9789a36 100644 +index 26fda2cf6..22e9789a3 100644 --- a/src/main/java/net/minecraft/server/BiomeTheEnd.java +++ b/src/main/java/net/minecraft/server/BiomeTheEnd.java @@ -6,7 +6,7 @@ public final class BiomeTheEnd extends BiomeBase { @@ -1305,7 +1305,7 @@ index 26fda2cf69..22e9789a36 100644 this.a(EnumCreatureType.MONSTER, new BiomeBase.BiomeMeta(EntityTypes.ENDERMAN, 10, 4, 4)); } diff --git a/src/main/java/net/minecraft/server/BiomeTheEndFloatingIslands.java b/src/main/java/net/minecraft/server/BiomeTheEndFloatingIslands.java -index c065128649..a26d56aa45 100644 +index c06512864..a26d56aa4 100644 --- a/src/main/java/net/minecraft/server/BiomeTheEndFloatingIslands.java +++ b/src/main/java/net/minecraft/server/BiomeTheEndFloatingIslands.java @@ -4,7 +4,7 @@ public class BiomeTheEndFloatingIslands extends BiomeBase { @@ -1318,7 +1318,7 @@ index c065128649..a26d56aa45 100644 this.a(EnumCreatureType.MONSTER, new BiomeBase.BiomeMeta(EntityTypes.ENDERMAN, 10, 4, 4)); } diff --git a/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java b/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java -index 90e79b2918..e47add3e43 100644 +index 90e79b291..e47add3e4 100644 --- a/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java +++ b/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java @@ -4,10 +4,10 @@ public class BiomeTheEndHighIsland extends BiomeBase { @@ -1336,7 +1336,7 @@ index 90e79b2918..e47add3e43 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeTheEndMediumIsland.java b/src/main/java/net/minecraft/server/BiomeTheEndMediumIsland.java -index c7d5317cc0..ec92a84579 100644 +index c7d5317cc..ec92a8457 100644 --- a/src/main/java/net/minecraft/server/BiomeTheEndMediumIsland.java +++ b/src/main/java/net/minecraft/server/BiomeTheEndMediumIsland.java @@ -4,7 +4,7 @@ public class BiomeTheEndMediumIsland extends BiomeBase { @@ -1349,7 +1349,7 @@ index c7d5317cc0..ec92a84579 100644 this.a(EnumCreatureType.MONSTER, new BiomeBase.BiomeMeta(EntityTypes.ENDERMAN, 10, 4, 4)); } diff --git a/src/main/java/net/minecraft/server/BiomeVoid.java b/src/main/java/net/minecraft/server/BiomeVoid.java -index 87fd7e1467..c9ba334535 100644 +index 87fd7e146..c9ba33453 100644 --- a/src/main/java/net/minecraft/server/BiomeVoid.java +++ b/src/main/java/net/minecraft/server/BiomeVoid.java @@ -4,6 +4,6 @@ public final class BiomeVoid extends BiomeBase { @@ -1361,7 +1361,7 @@ index 87fd7e1467..c9ba334535 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeWarmDeepOcean.java b/src/main/java/net/minecraft/server/BiomeWarmDeepOcean.java -index 3f8e18a2c7..11dc5f6374 100644 +index 3f8e18a2c..11dc5f637 100644 --- a/src/main/java/net/minecraft/server/BiomeWarmDeepOcean.java +++ b/src/main/java/net/minecraft/server/BiomeWarmDeepOcean.java @@ -4,10 +4,10 @@ public class BiomeWarmDeepOcean extends BiomeBase { @@ -1380,7 +1380,7 @@ index 3f8e18a2c7..11dc5f6374 100644 BiomeDecoratorGroups.c(this); BiomeDecoratorGroups.d(this); diff --git a/src/main/java/net/minecraft/server/BiomeWarmOcean.java b/src/main/java/net/minecraft/server/BiomeWarmOcean.java -index dd7916c090..e4dc7d198c 100644 +index dd7916c09..e4dc7d198 100644 --- a/src/main/java/net/minecraft/server/BiomeWarmOcean.java +++ b/src/main/java/net/minecraft/server/BiomeWarmOcean.java @@ -6,9 +6,9 @@ public class BiomeWarmOcean extends BiomeBase { @@ -1409,7 +1409,7 @@ index dd7916c090..e4dc7d198c 100644 this.a(EnumCreatureType.WATER_CREATURE, new BiomeBase.BiomeMeta(EntityTypes.SQUID, 10, 4, 4)); this.a(EnumCreatureType.WATER_CREATURE, new BiomeBase.BiomeMeta(EntityTypes.PUFFERFISH, 15, 1, 3)); diff --git a/src/main/java/net/minecraft/server/CommandDebug.java b/src/main/java/net/minecraft/server/CommandDebug.java -index d384e9578a..f0d72ea39d 100644 +index d384e9578..f0d72ea39 100644 --- a/src/main/java/net/minecraft/server/CommandDebug.java +++ b/src/main/java/net/minecraft/server/CommandDebug.java @@ -25,7 +25,7 @@ public class CommandDebug { @@ -1422,7 +1422,7 @@ index d384e9578a..f0d72ea39d 100644 public static void a(com.mojang.brigadier.CommandDispatcher com_mojang_brigadier_commanddispatcher) { com_mojang_brigadier_commanddispatcher.register((LiteralArgumentBuilder) ((LiteralArgumentBuilder) ((LiteralArgumentBuilder) ((LiteralArgumentBuilder) CommandDispatcher.a("debug").requires((commandlistenerwrapper) -> { diff --git a/src/main/java/net/minecraft/server/EntityBlaze.java b/src/main/java/net/minecraft/server/EntityBlaze.java -index 5b1d2c7f50..da6a3fa2c8 100644 +index 5b1d2c7f5..da6a3fa2c 100644 --- a/src/main/java/net/minecraft/server/EntityBlaze.java +++ b/src/main/java/net/minecraft/server/EntityBlaze.java @@ -24,7 +24,7 @@ public class EntityBlaze extends EntityMonster { @@ -1435,7 +1435,7 @@ index 5b1d2c7f50..da6a3fa2c8 100644 } diff --git a/src/main/java/net/minecraft/server/EntityCat.java b/src/main/java/net/minecraft/server/EntityCat.java -index 57af3835ee..b3bdc194ab 100644 +index 57af3835e..b3bdc194a 100644 --- a/src/main/java/net/minecraft/server/EntityCat.java +++ b/src/main/java/net/minecraft/server/EntityCat.java @@ -16,7 +16,7 @@ public class EntityCat extends EntityTameableAnimal { @@ -1448,7 +1448,7 @@ index 57af3835ee..b3bdc194ab 100644 hashmap.put(1, new MinecraftKey("textures/entity/cat/black.png")); hashmap.put(2, new MinecraftKey("textures/entity/cat/red.png")); diff --git a/src/main/java/net/minecraft/server/EntityEnderSignal.java b/src/main/java/net/minecraft/server/EntityEnderSignal.java -index c13abc7e07..7ebd7da1c5 100644 +index c13abc7e0..7ebd7da1c 100644 --- a/src/main/java/net/minecraft/server/EntityEnderSignal.java +++ b/src/main/java/net/minecraft/server/EntityEnderSignal.java @@ -21,7 +21,7 @@ public class EntityEnderSignal extends Entity { @@ -1461,7 +1461,7 @@ index c13abc7e07..7ebd7da1c5 100644 })); } diff --git a/src/main/java/net/minecraft/server/EntityEndermite.java b/src/main/java/net/minecraft/server/EntityEndermite.java -index b34695f2d0..e4bd2796a4 100644 +index b34695f2d..e4bd2796a 100644 --- a/src/main/java/net/minecraft/server/EntityEndermite.java +++ b/src/main/java/net/minecraft/server/EntityEndermite.java @@ -19,7 +19,7 @@ public class EntityEndermite extends EntityMonster { @@ -1474,7 +1474,7 @@ index b34695f2d0..e4bd2796a4 100644 } diff --git a/src/main/java/net/minecraft/server/EntityEvoker.java b/src/main/java/net/minecraft/server/EntityEvoker.java -index 886268b09e..b030fe9577 100644 +index 886268b09..b030fe957 100644 --- a/src/main/java/net/minecraft/server/EntityEvoker.java +++ b/src/main/java/net/minecraft/server/EntityEvoker.java @@ -24,7 +24,7 @@ public class EntityEvoker extends EntityIllagerWizard { @@ -1487,7 +1487,7 @@ index 886268b09e..b030fe9577 100644 this.targetSelector.a(3, (new PathfinderGoalNearestAttackableTarget<>(this, EntityVillagerAbstract.class, false)).a(300)); this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityIronGolem.class, false)); diff --git a/src/main/java/net/minecraft/server/EntityFish.java b/src/main/java/net/minecraft/server/EntityFish.java -index d332907b3b..b853fd0d9b 100644 +index d332907b3..b853fd0d9 100644 --- a/src/main/java/net/minecraft/server/EntityFish.java +++ b/src/main/java/net/minecraft/server/EntityFish.java @@ -73,11 +73,7 @@ public abstract class EntityFish extends EntityWaterAnimal { @@ -1504,7 +1504,7 @@ index d332907b3b..b853fd0d9b 100644 } diff --git a/src/main/java/net/minecraft/server/EntityParrot.java b/src/main/java/net/minecraft/server/EntityParrot.java -index 1402087612..94e57a2d85 100644 +index 140208761..94e57a2d8 100644 --- a/src/main/java/net/minecraft/server/EntityParrot.java +++ b/src/main/java/net/minecraft/server/EntityParrot.java @@ -20,8 +20,8 @@ public class EntityParrot extends EntityPerchable implements EntityBird { @@ -1519,7 +1519,7 @@ index 1402087612..94e57a2d85 100644 hashmap.put(EntityTypes.CAVE_SPIDER, SoundEffects.ENTITY_PARROT_IMITATE_SPIDER); hashmap.put(EntityTypes.CREEPER, SoundEffects.ENTITY_PARROT_IMITATE_CREEPER); diff --git a/src/main/java/net/minecraft/server/EntitySheep.java b/src/main/java/net/minecraft/server/EntitySheep.java -index bb46247f2f..f63528ca3e 100644 +index bb46247f2..f63528ca3 100644 --- a/src/main/java/net/minecraft/server/EntitySheep.java +++ b/src/main/java/net/minecraft/server/EntitySheep.java @@ -18,7 +18,7 @@ import org.bukkit.inventory.InventoryView; @@ -1543,7 +1543,7 @@ index bb46247f2f..f63528ca3e 100644 private PathfinderGoalEatTile bA; diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java -index 7b6b1ad17b..1432d3f6bf 100644 +index 7b6b1ad17..1432d3f6b 100644 --- a/src/main/java/net/minecraft/server/EntityWitch.java +++ b/src/main/java/net/minecraft/server/EntityWitch.java @@ -30,13 +30,13 @@ public class EntityWitch extends EntityRaider implements IRangedEntity { @@ -1563,7 +1563,7 @@ index 7b6b1ad17b..1432d3f6bf 100644 this.targetSelector.a(3, this.bA); } diff --git a/src/main/java/net/minecraft/server/GeneratorAccess.java b/src/main/java/net/minecraft/server/GeneratorAccess.java -index 5648ba73c5..304190fdc4 100644 +index 5648ba73c..304190fdc 100644 --- a/src/main/java/net/minecraft/server/GeneratorAccess.java +++ b/src/main/java/net/minecraft/server/GeneratorAccess.java @@ -49,7 +49,7 @@ public interface GeneratorAccess extends IEntityAccess, IWorldReader, VirtualLev @@ -1576,7 +1576,7 @@ index 5648ba73c5..304190fdc4 100644 @Override default java.util.List getEntityCollisions(@Nullable Entity entity, AxisAlignedBB axisalignedbb, Set set, boolean returnFast) {return IEntityAccess.super.getEntityCollisions(entity, axisalignedbb, set, returnFast); } // Paper diff --git a/src/main/java/net/minecraft/server/MathHelper.java b/src/main/java/net/minecraft/server/MathHelper.java -index 38b79b5b10..c4aa38ddf1 100644 +index 38b79b5b1..c4aa38ddf 100644 --- a/src/main/java/net/minecraft/server/MathHelper.java +++ b/src/main/java/net/minecraft/server/MathHelper.java @@ -7,7 +7,7 @@ import java.util.function.IntPredicate; @@ -1589,7 +1589,7 @@ index 38b79b5b10..c4aa38ddf1 100644 afloat[i] = (float) Math.sin((double) i * 3.141592653589793D * 2.0D / 65536.0D); } diff --git a/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java b/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java -index de8f1874af..73402f2b5a 100644 +index de8f1874a..73402f2b5 100644 --- a/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java +++ b/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java @@ -25,7 +25,7 @@ public class WorldGenFeatureConfigured a(float f) { diff --git a/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java b/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java -index 979f3517c0..5827b1ba1a 100644 +index 979f3517c..5827b1ba1 100644 --- a/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java +++ b/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java @@ -58,6 +58,6 @@ public class WorldGenFeatureTreeBeehive extends WorldGenFeatureTree { @@ -1614,5 +1614,5 @@ index 979f3517c0..5827b1ba1a 100644 } } -- -2.24.0 +2.26.2 diff --git a/patches/server/0005-Add-language-asset-purpur.lang.patch b/patches/server/0006-Add-language-asset-purpur.lang.patch similarity index 96% rename from patches/server/0005-Add-language-asset-purpur.lang.patch rename to patches/server/0006-Add-language-asset-purpur.lang.patch index e6e6b3df6..4b8a73d55 100644 --- a/patches/server/0005-Add-language-asset-purpur.lang.patch +++ b/patches/server/0006-Add-language-asset-purpur.lang.patch @@ -1,4 +1,4 @@ -From 4be161e9039519fbd95e15f53f7f070aa0bb5068 Mon Sep 17 00:00:00 2001 +From ab0e10ba00591acd8a7821ae0647943a21d24b39 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 26 Mar 2020 13:17:09 -0500 Subject: [PATCH] Add language asset purpur.lang @@ -12,7 +12,7 @@ Subject: [PATCH] Add language asset purpur.lang create mode 100644 src/main/resources/purpur.lang diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 4ed4ad6bc3..9437a06d82 100644 +index 4ed4ad6bc..9437a06d8 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -1577,6 +1577,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -24,7 +24,7 @@ index 4ed4ad6bc3..9437a06d82 100644 if (!future.isSuccess() && (chatmessagetype == ChatMessageType.GAME_INFO || chatmessagetype == ChatMessageType.SYSTEM)) { boolean flag = true; diff --git a/src/main/java/net/minecraft/server/LocaleLanguage.java b/src/main/java/net/minecraft/server/LocaleLanguage.java -index 6012739331..75707adcd7 100644 +index 601273933..75707adcd 100644 --- a/src/main/java/net/minecraft/server/LocaleLanguage.java +++ b/src/main/java/net/minecraft/server/LocaleLanguage.java @@ -15,18 +15,41 @@ import java.util.Map.Entry; @@ -104,7 +104,7 @@ index 6012739331..75707adcd7 100644 + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/command/PurpurCommand.java b/src/main/java/net/pl3x/purpur/command/PurpurCommand.java -index 7d983d9a54..36260e0ec8 100644 +index 7d983d9a5..36260e0ec 100644 --- a/src/main/java/net/pl3x/purpur/command/PurpurCommand.java +++ b/src/main/java/net/pl3x/purpur/command/PurpurCommand.java @@ -1,5 +1,6 @@ @@ -125,7 +125,7 @@ index 7d983d9a54..36260e0ec8 100644 for (WorldServer world : console.getWorlds()) { diff --git a/src/main/resources/purpur.lang b/src/main/resources/purpur.lang new file mode 100644 -index 0000000000..0967ef424b +index 000000000..0967ef424 --- /dev/null +++ b/src/main/resources/purpur.lang @@ -0,0 +1 @@ diff --git a/patches/server/0006-Fix-vanilla-command-permission-handler.patch b/patches/server/0007-Fix-vanilla-command-permission-handler.patch similarity index 92% rename from patches/server/0006-Fix-vanilla-command-permission-handler.patch rename to patches/server/0007-Fix-vanilla-command-permission-handler.patch index ebec0bd2f..fe97111da 100644 --- a/patches/server/0006-Fix-vanilla-command-permission-handler.patch +++ b/patches/server/0007-Fix-vanilla-command-permission-handler.patch @@ -1,4 +1,4 @@ -From 98e87908d5f618cbd2c223f6315b9dd62f1baa7f Mon Sep 17 00:00:00 2001 +From 630e9dc4596781fdc3a496147184301aac82dd31 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 28 Mar 2020 01:51:32 -0500 Subject: [PATCH] Fix vanilla command permission handler @@ -9,7 +9,7 @@ Subject: [PATCH] Fix vanilla command permission handler 2 files changed, 2 insertions(+) diff --git a/src/main/java/com/mojang/brigadier/tree/CommandNode.java b/src/main/java/com/mojang/brigadier/tree/CommandNode.java -index bd2802d362..5fa2a45c81 100644 +index bd2802d36..5fa2a45c8 100644 --- a/src/main/java/com/mojang/brigadier/tree/CommandNode.java +++ b/src/main/java/com/mojang/brigadier/tree/CommandNode.java @@ -34,6 +34,7 @@ public abstract class CommandNode implements Comparable> { @@ -21,7 +21,7 @@ index bd2802d362..5fa2a45c81 100644 public void removeCommand(String name) { children.remove(name); diff --git a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java -index f344614600..8d89e671eb 100644 +index f34461460..8d89e671e 100644 --- a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java +++ b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java @@ -87,6 +87,7 @@ public final class VanillaCommandWrapper extends BukkitCommand { @@ -33,5 +33,5 @@ index f344614600..8d89e671eb 100644 } -- -2.24.0 +2.26.2 diff --git a/patches/server/0007-Host-our-own-timings.patch b/patches/server/0008-Host-our-own-timings.patch similarity index 87% rename from patches/server/0007-Host-our-own-timings.patch rename to patches/server/0008-Host-our-own-timings.patch index 25ff7e68e..fe664cdd5 100644 --- a/patches/server/0007-Host-our-own-timings.patch +++ b/patches/server/0008-Host-our-own-timings.patch @@ -1,4 +1,4 @@ -From be0d0fa48d1a6aad73e95083e4562505501d0ecb Mon Sep 17 00:00:00 2001 +From fabde23890d8301331617afb56b2285ee9ec1765 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 18 Feb 2020 20:38:34 -0600 Subject: [PATCH] Host our own timings @@ -8,7 +8,7 @@ Subject: [PATCH] Host our own timings 1 file changed, 4 insertions(+) diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 333c880bf2..2673de8212 100644 +index 333c880bf..2673de821 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -127,4 +127,8 @@ public class PurpurConfig { @@ -21,5 +21,5 @@ index 333c880bf2..2673de8212 100644 + } } -- -2.24.0 +2.26.2 diff --git a/patches/server/0008-Ridables.patch b/patches/server/0009-Ridables.patch similarity index 98% rename from patches/server/0008-Ridables.patch rename to patches/server/0009-Ridables.patch index 4b9d221ea..e7fe25db7 100644 --- a/patches/server/0008-Ridables.patch +++ b/patches/server/0009-Ridables.patch @@ -1,4 +1,4 @@ -From 88e8ee2a56a8905befcc383e7dfc05dada4eabbd Mon Sep 17 00:00:00 2001 +From 11dc6191a681f05cf592ab662bc14e09966eddbb Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 6 Feb 2020 19:53:59 -0600 Subject: [PATCH] Ridables @@ -8,7 +8,7 @@ Subject: [PATCH] Ridables .../server/ControllerLookDolphin.java | 4 +- .../net/minecraft/server/ControllerMove.java | 6 +- .../net/minecraft/server/DamageSource.java | 3 + - .../java/net/minecraft/server/Entity.java | 69 +- + .../java/net/minecraft/server/Entity.java | 68 +- .../net/minecraft/server/EntityAgeable.java | 2 +- .../java/net/minecraft/server/EntityBat.java | 58 ++ .../java/net/minecraft/server/EntityBee.java | 118 +++- @@ -104,7 +104,7 @@ Subject: [PATCH] Ridables .../PathfinderGoalHorseHasRider.java | 21 + .../craftbukkit/entity/CraftEntity.java | 27 + src/main/resources/purpur.lang | 4 +- - 100 files changed, 3622 insertions(+), 211 deletions(-) + 100 files changed, 3621 insertions(+), 211 deletions(-) create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerMoveWASD.java create mode 100644 src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlying.java @@ -116,10 +116,10 @@ Subject: [PATCH] Ridables create mode 100644 src/main/java/net/pl3x/purpur/pathfinder/PathfinderGoalHorseHasRider.java diff --git a/src/main/java/net/minecraft/server/AxisAlignedBB.java b/src/main/java/net/minecraft/server/AxisAlignedBB.java -index 1a466e9295..203c8fe8c0 100644 +index 688c5b1bd..b35bac0e2 100644 --- a/src/main/java/net/minecraft/server/AxisAlignedBB.java +++ b/src/main/java/net/minecraft/server/AxisAlignedBB.java -@@ -104,6 +104,7 @@ public class AxisAlignedBB { +@@ -216,6 +216,7 @@ public class AxisAlignedBB { return new AxisAlignedBB(d3, d4, d5, d6, d7, d8); } @@ -127,7 +127,7 @@ index 1a466e9295..203c8fe8c0 100644 public AxisAlignedBB a(Vec3D vec3d) { return this.b(vec3d.x, vec3d.y, vec3d.z); } -@@ -155,6 +156,7 @@ public class AxisAlignedBB { +@@ -267,6 +268,7 @@ public class AxisAlignedBB { return new AxisAlignedBB(d3, d4, d5, d6, d7, d8); } @@ -136,7 +136,7 @@ index 1a466e9295..203c8fe8c0 100644 return this.grow(d0, d0, d0); } diff --git a/src/main/java/net/minecraft/server/ControllerLookDolphin.java b/src/main/java/net/minecraft/server/ControllerLookDolphin.java -index 1d9ba04daa..2bade947ee 100644 +index 1d9ba04da..2bade947e 100644 --- a/src/main/java/net/minecraft/server/ControllerLookDolphin.java +++ b/src/main/java/net/minecraft/server/ControllerLookDolphin.java @@ -1,6 +1,6 @@ @@ -157,7 +157,7 @@ index 1d9ba04daa..2bade947ee 100644 this.d = false; this.a.aK = this.a(this.a.aK, this.h() + 20.0F, this.b); diff --git a/src/main/java/net/minecraft/server/ControllerMove.java b/src/main/java/net/minecraft/server/ControllerMove.java -index a5c4cbb67f..efe6afde9b 100644 +index a5c4cbb67..efe6afde9 100644 --- a/src/main/java/net/minecraft/server/ControllerMove.java +++ b/src/main/java/net/minecraft/server/ControllerMove.java @@ -6,9 +6,9 @@ public class ControllerMove { @@ -174,7 +174,7 @@ index a5c4cbb67f..efe6afde9b 100644 public ControllerMove(EntityInsentient entityinsentient) { diff --git a/src/main/java/net/minecraft/server/DamageSource.java b/src/main/java/net/minecraft/server/DamageSource.java -index 816d301f1c..f7344d3aec 100644 +index 816d301f1..f7344d3ae 100644 --- a/src/main/java/net/minecraft/server/DamageSource.java +++ b/src/main/java/net/minecraft/server/DamageSource.java @@ -57,6 +57,7 @@ public class DamageSource { @@ -199,7 +199,7 @@ index 816d301f1c..f7344d3aec 100644 this.C = true; return this; diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index e0ab058bf9..1ef13ee78e 100644 +index 37f854764..dc72ee435 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -79,7 +79,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -224,8 +224,8 @@ index e0ab058bf9..1ef13ee78e 100644 public double E; public double F; public double G; -- public float H; -+ public float H; public float getStepHeight() { return H; } public void setStepHeight(float stepHeight) { this.H = stepHeight; } // Purpur - OBFHELPER +- public float H; public final float getStepHeight() { return this.H; } // Tuinity - OBFHELPER ++ public float H; public final float getStepHeight() { return this.H; } public void setStepHeight(float stepHeight) { this.H = stepHeight; } // Purpur // Tuinity - OBFHELPER public boolean noclip; public float J; protected final Random random; @@ -238,15 +238,7 @@ index e0ab058bf9..1ef13ee78e 100644 private float headHeight; // CraftBukkit start public boolean persist = true; -@@ -874,6 +874,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke - return vec3d1; - } - -+ public static double getHorizontalDistanceSqr(Vec3D vec3d) { return b(vec3d); } // Purpur - OBFHELPER - public static double b(Vec3D vec3d) { - return vec3d.x * vec3d.x + vec3d.z * vec3d.z; - } -@@ -1201,6 +1202,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1387,6 +1387,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return flag; } @@ -254,7 +246,7 @@ index e0ab058bf9..1ef13ee78e 100644 private boolean l() { return this.world.getType(new BlockPosition(this)).getBlock() == Blocks.BUBBLE_COLUMN; } -@@ -1214,8 +1216,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1400,8 +1401,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return this.isInWater() || this.isInRain() || this.l(); } @@ -265,7 +257,7 @@ index e0ab058bf9..1ef13ee78e 100644 } public boolean aA() { -@@ -1346,6 +1349,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1532,6 +1534,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return this.inLava; } @@ -273,7 +265,7 @@ index e0ab058bf9..1ef13ee78e 100644 public void a(float f, Vec3D vec3d) { Vec3D vec3d1 = a(vec3d, f, this.yaw); -@@ -2181,7 +2185,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2367,7 +2370,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } else { this.passengers.add(entity); } @@ -288,7 +280,7 @@ index e0ab058bf9..1ef13ee78e 100644 } return true; // CraftBukkit } -@@ -2216,6 +2226,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2402,6 +2411,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return false; } // Spigot end @@ -301,7 +293,7 @@ index e0ab058bf9..1ef13ee78e 100644 this.passengers.remove(entity); entity.j = 60; } -@@ -2384,6 +2400,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2570,6 +2585,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.setFlag(4, flag); } @@ -309,7 +301,7 @@ index e0ab058bf9..1ef13ee78e 100644 public boolean bt() { return this.glowing || this.world.isClientSide && this.getFlag(6); } -@@ -2602,6 +2619,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2788,6 +2804,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke public void setHeadRotation(float f) {} @@ -317,7 +309,7 @@ index e0ab058bf9..1ef13ee78e 100644 public void l(float f) {} public boolean bA() { -@@ -3465,4 +3483,43 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -3657,4 +3674,43 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke void accept(Entity entity, double d0, double d1, double d2); } @@ -362,7 +354,7 @@ index e0ab058bf9..1ef13ee78e 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityAgeable.java b/src/main/java/net/minecraft/server/EntityAgeable.java -index 3d27f0964a..822316a65f 100644 +index 3d27f0964..822316a65 100644 --- a/src/main/java/net/minecraft/server/EntityAgeable.java +++ b/src/main/java/net/minecraft/server/EntityAgeable.java @@ -86,7 +86,7 @@ public abstract class EntityAgeable extends EntityCreature { @@ -375,7 +367,7 @@ index 3d27f0964a..822316a65f 100644 } diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java -index 34239160be..592408bac9 100644 +index 34239160b..592408bac 100644 --- a/src/main/java/net/minecraft/server/EntityBat.java +++ b/src/main/java/net/minecraft/server/EntityBat.java @@ -14,9 +14,44 @@ public class EntityBat extends EntityAmbient { @@ -466,7 +458,7 @@ index 34239160be..592408bac9 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityBee.java b/src/main/java/net/minecraft/server/EntityBee.java -index dd1d246aeb..f0f83baac8 100644 +index dd1d246ae..f0f83baac 100644 --- a/src/main/java/net/minecraft/server/EntityBee.java +++ b/src/main/java/net/minecraft/server/EntityBee.java @@ -36,9 +36,7 @@ public class EntityBee extends EntityAnimal implements EntityBird { @@ -647,7 +639,7 @@ index dd1d246aeb..f0f83baac8 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityBlaze.java b/src/main/java/net/minecraft/server/EntityBlaze.java -index da6a3fa2c8..d02130e0d1 100644 +index da6a3fa2c..d02130e0d 100644 --- a/src/main/java/net/minecraft/server/EntityBlaze.java +++ b/src/main/java/net/minecraft/server/EntityBlaze.java @@ -10,6 +10,7 @@ public class EntityBlaze extends EntityMonster { @@ -737,7 +729,7 @@ index da6a3fa2c8..d02130e0d1 100644 if (this.c <= 0) { this.c = 100; diff --git a/src/main/java/net/minecraft/server/EntityCat.java b/src/main/java/net/minecraft/server/EntityCat.java -index b3bdc194ab..8b9222d778 100644 +index b3bdc194a..8b9222d77 100644 --- a/src/main/java/net/minecraft/server/EntityCat.java +++ b/src/main/java/net/minecraft/server/EntityCat.java @@ -42,6 +42,23 @@ public class EntityCat extends EntityTameableAnimal { @@ -831,7 +823,7 @@ index b3bdc194ab..8b9222d778 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityCaveSpider.java b/src/main/java/net/minecraft/server/EntityCaveSpider.java -index 23ced2c7bb..5b86b36f6a 100644 +index 23ced2c7b..5b86b36f6 100644 --- a/src/main/java/net/minecraft/server/EntityCaveSpider.java +++ b/src/main/java/net/minecraft/server/EntityCaveSpider.java @@ -8,6 +8,23 @@ public class EntityCaveSpider extends EntitySpider { @@ -859,7 +851,7 @@ index 23ced2c7bb..5b86b36f6a 100644 protected void initAttributes() { super.initAttributes(); diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java -index 65795fc896..5505b7ee94 100644 +index 65795fc89..5505b7ee9 100644 --- a/src/main/java/net/minecraft/server/EntityChicken.java +++ b/src/main/java/net/minecraft/server/EntityChicken.java @@ -17,9 +17,27 @@ public class EntityChicken extends EntityAnimal { @@ -899,7 +891,7 @@ index 65795fc896..5505b7ee94 100644 this.forceDrops = true; // CraftBukkit this.a((IMaterial) Items.EGG); diff --git a/src/main/java/net/minecraft/server/EntityCod.java b/src/main/java/net/minecraft/server/EntityCod.java -index 1e3782122a..0153a821ee 100644 +index 1e3782122..0153a821e 100644 --- a/src/main/java/net/minecraft/server/EntityCod.java +++ b/src/main/java/net/minecraft/server/EntityCod.java @@ -6,6 +6,23 @@ public class EntityCod extends EntityFishSchool { @@ -927,7 +919,7 @@ index 1e3782122a..0153a821ee 100644 protected ItemStack l() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/server/EntityComplexPart.java b/src/main/java/net/minecraft/server/EntityComplexPart.java -index a0b35c8699..144e89f224 100644 +index a0b35c869..144e89f22 100644 --- a/src/main/java/net/minecraft/server/EntityComplexPart.java +++ b/src/main/java/net/minecraft/server/EntityComplexPart.java @@ -47,4 +47,11 @@ public class EntityComplexPart extends Entity { @@ -943,7 +935,7 @@ index a0b35c8699..144e89f224 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java -index 2c8bbf20ae..723a9fa1ee 100644 +index 2c8bbf20a..723a9fa1e 100644 --- a/src/main/java/net/minecraft/server/EntityCow.java +++ b/src/main/java/net/minecraft/server/EntityCow.java @@ -11,9 +11,27 @@ public class EntityCow extends EntityAnimal { @@ -975,7 +967,7 @@ index 2c8bbf20ae..723a9fa1ee 100644 this.goalSelector.a(2, new PathfinderGoalBreed(this, 1.0D)); this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.25D, RecipeItemStack.a(Items.WHEAT), false)); diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java -index 45dfc8104a..48fd8e716b 100644 +index 45dfc8104..48fd8e716 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java @@ -23,16 +23,35 @@ public class EntityCreeper extends EntityMonster { @@ -1091,7 +1083,7 @@ index 45dfc8104a..48fd8e716b 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityDolphin.java b/src/main/java/net/minecraft/server/EntityDolphin.java -index ce78586ea0..81570b37bb 100644 +index ce78586ea..81570b37b 100644 --- a/src/main/java/net/minecraft/server/EntityDolphin.java +++ b/src/main/java/net/minecraft/server/EntityDolphin.java @@ -1,5 +1,12 @@ @@ -1242,7 +1234,7 @@ index ce78586ea0..81570b37bb 100644 this.i.setMot(this.i.getMot().add(0.0D, 0.005D, 0.0D)); } diff --git a/src/main/java/net/minecraft/server/EntityDrowned.java b/src/main/java/net/minecraft/server/EntityDrowned.java -index 77885f67ff..63f5969b10 100644 +index 77885f67f..63f5969b1 100644 --- a/src/main/java/net/minecraft/server/EntityDrowned.java +++ b/src/main/java/net/minecraft/server/EntityDrowned.java @@ -19,6 +19,23 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { @@ -1305,7 +1297,7 @@ index 77885f67ff..63f5969b10 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java -index aecdaacfc7..ab1747198a 100644 +index 7daebfdab..54b63395f 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java @@ -46,6 +46,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { @@ -1452,7 +1444,7 @@ index aecdaacfc7..ab1747198a 100644 if (this.bN != null) { this.bN.b(this); } -@@ -951,7 +1026,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { +@@ -953,7 +1028,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { @Override protected boolean n(Entity entity) { @@ -1462,7 +1454,7 @@ index aecdaacfc7..ab1747198a 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java -index 212636dcb2..de30ce483f 100644 +index 212636dcb..de30ce483 100644 --- a/src/main/java/net/minecraft/server/EntityEnderman.java +++ b/src/main/java/net/minecraft/server/EntityEnderman.java @@ -27,9 +27,27 @@ public class EntityEnderman extends EntityMonster { @@ -1561,7 +1553,7 @@ index 212636dcb2..de30ce483f 100644 if (iblockdata2 != null && this.a(world, blockposition, iblockdata2, iblockdata, iblockdata1, blockposition1)) { // CraftBukkit start - Place event diff --git a/src/main/java/net/minecraft/server/EntityEndermite.java b/src/main/java/net/minecraft/server/EntityEndermite.java -index e4bd2796a4..5eaf1920b2 100644 +index e4bd2796a..5eaf1920b 100644 --- a/src/main/java/net/minecraft/server/EntityEndermite.java +++ b/src/main/java/net/minecraft/server/EntityEndermite.java @@ -12,13 +12,32 @@ public class EntityEndermite extends EntityMonster { @@ -1598,7 +1590,7 @@ index e4bd2796a4..5eaf1920b2 100644 this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); } diff --git a/src/main/java/net/minecraft/server/EntityEvoker.java b/src/main/java/net/minecraft/server/EntityEvoker.java -index b030fe9577..179a261296 100644 +index b030fe957..179a26129 100644 --- a/src/main/java/net/minecraft/server/EntityEvoker.java +++ b/src/main/java/net/minecraft/server/EntityEvoker.java @@ -12,10 +12,28 @@ public class EntityEvoker extends EntityIllagerWizard { @@ -1663,7 +1655,7 @@ index b030fe9577..179a261296 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityFish.java b/src/main/java/net/minecraft/server/EntityFish.java -index b853fd0d9b..b8d786fad5 100644 +index b853fd0d9..b8d786fad 100644 --- a/src/main/java/net/minecraft/server/EntityFish.java +++ b/src/main/java/net/minecraft/server/EntityFish.java @@ -72,9 +72,10 @@ public abstract class EntityFish extends EntityWaterAnimal { @@ -1717,7 +1709,7 @@ index b853fd0d9b..b8d786fad5 100644 this.i.setMot(this.i.getMot().add(0.0D, 0.005D, 0.0D)); } diff --git a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java -index 82a32d5dbf..4f53090d3d 100644 +index 82a32d5db..4f53090d3 100644 --- a/src/main/java/net/minecraft/server/EntityFox.java +++ b/src/main/java/net/minecraft/server/EntityFox.java @@ -55,6 +55,23 @@ public class EntityFox extends EntityAnimal { @@ -1855,7 +1847,7 @@ index 82a32d5dbf..4f53090d3d 100644 } diff --git a/src/main/java/net/minecraft/server/EntityGhast.java b/src/main/java/net/minecraft/server/EntityGhast.java -index e1c2540d14..46841df718 100644 +index e1c2540d1..46841df71 100644 --- a/src/main/java/net/minecraft/server/EntityGhast.java +++ b/src/main/java/net/minecraft/server/EntityGhast.java @@ -14,11 +14,47 @@ public class EntityGhast extends EntityFlying implements IMonster { @@ -1938,7 +1930,7 @@ index e1c2540d14..46841df718 100644 if (this.j-- <= 0) { this.j += this.i.getRandom().nextInt(5) + 2; diff --git a/src/main/java/net/minecraft/server/EntityGiantZombie.java b/src/main/java/net/minecraft/server/EntityGiantZombie.java -index d9e5eaad12..ff8a41a539 100644 +index d9e5eaad1..ff8a41a53 100644 --- a/src/main/java/net/minecraft/server/EntityGiantZombie.java +++ b/src/main/java/net/minecraft/server/EntityGiantZombie.java @@ -4,8 +4,33 @@ public class EntityGiantZombie extends EntityMonster { @@ -1976,7 +1968,7 @@ index d9e5eaad12..ff8a41a539 100644 protected float b(EntityPose entitypose, EntitySize entitysize) { return 10.440001F; diff --git a/src/main/java/net/minecraft/server/EntityGuardian.java b/src/main/java/net/minecraft/server/EntityGuardian.java -index e69cb334fb..97040872bc 100644 +index e69cb334f..97040872b 100644 --- a/src/main/java/net/minecraft/server/EntityGuardian.java +++ b/src/main/java/net/minecraft/server/EntityGuardian.java @@ -24,15 +24,39 @@ public class EntityGuardian extends EntityMonster { @@ -2077,7 +2069,7 @@ index e69cb334fb..97040872bc 100644 Vec3D vec3d = new Vec3D(this.b - this.i.locX(), this.c - this.i.locY(), this.d - this.i.locZ()); double d0 = vec3d.f(); diff --git a/src/main/java/net/minecraft/server/EntityGuardianElder.java b/src/main/java/net/minecraft/server/EntityGuardianElder.java -index 7484bfeea0..f231340d90 100644 +index 7484bfeea..f231340d9 100644 --- a/src/main/java/net/minecraft/server/EntityGuardianElder.java +++ b/src/main/java/net/minecraft/server/EntityGuardianElder.java @@ -16,6 +16,23 @@ public class EntityGuardianElder extends EntityGuardian { @@ -2105,7 +2097,7 @@ index 7484bfeea0..f231340d90 100644 public void initAttributes() { super.initAttributes(); diff --git a/src/main/java/net/minecraft/server/EntityHorse.java b/src/main/java/net/minecraft/server/EntityHorse.java -index a6fb4ba5b9..98b1e93759 100644 +index a6fb4ba5b..98b1e9375 100644 --- a/src/main/java/net/minecraft/server/EntityHorse.java +++ b/src/main/java/net/minecraft/server/EntityHorse.java @@ -19,6 +19,13 @@ public class EntityHorse extends EntityHorseAbstract { @@ -2123,7 +2115,7 @@ index a6fb4ba5b9..98b1e93759 100644 protected void initDatawatcher() { super.initDatawatcher(); diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -index c56efe035a..f31cb05542 100644 +index c56efe035..f31cb0554 100644 --- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java +++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java @@ -38,12 +38,32 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven @@ -2169,7 +2161,7 @@ index c56efe035a..f31cb05542 100644 } diff --git a/src/main/java/net/minecraft/server/EntityHorseDonkey.java b/src/main/java/net/minecraft/server/EntityHorseDonkey.java -index 9a52decdca..64d80081f7 100644 +index 9a52decdc..64d80081f 100644 --- a/src/main/java/net/minecraft/server/EntityHorseDonkey.java +++ b/src/main/java/net/minecraft/server/EntityHorseDonkey.java @@ -6,6 +6,13 @@ public class EntityHorseDonkey extends EntityHorseChestedAbstract { @@ -2187,7 +2179,7 @@ index 9a52decdca..64d80081f7 100644 protected SoundEffect getSoundAmbient() { super.getSoundAmbient(); diff --git a/src/main/java/net/minecraft/server/EntityHorseMule.java b/src/main/java/net/minecraft/server/EntityHorseMule.java -index 4dd4d91eba..a9f26efe66 100644 +index 4dd4d91eb..a9f26efe6 100644 --- a/src/main/java/net/minecraft/server/EntityHorseMule.java +++ b/src/main/java/net/minecraft/server/EntityHorseMule.java @@ -6,6 +6,13 @@ public class EntityHorseMule extends EntityHorseChestedAbstract { @@ -2205,7 +2197,7 @@ index 4dd4d91eba..a9f26efe66 100644 protected SoundEffect getSoundAmbient() { super.getSoundAmbient(); diff --git a/src/main/java/net/minecraft/server/EntityHorseSkeleton.java b/src/main/java/net/minecraft/server/EntityHorseSkeleton.java -index 290cb9337c..7bf76e5a0b 100644 +index 290cb9337..7bf76e5a0 100644 --- a/src/main/java/net/minecraft/server/EntityHorseSkeleton.java +++ b/src/main/java/net/minecraft/server/EntityHorseSkeleton.java @@ -12,6 +12,18 @@ public class EntityHorseSkeleton extends EntityHorseAbstract { @@ -2246,7 +2238,7 @@ index 290cb9337c..7bf76e5a0b 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityHorseZombie.java b/src/main/java/net/minecraft/server/EntityHorseZombie.java -index 5782a25ecd..c87fc523f1 100644 +index 5782a25ec..c87fc523f 100644 --- a/src/main/java/net/minecraft/server/EntityHorseZombie.java +++ b/src/main/java/net/minecraft/server/EntityHorseZombie.java @@ -8,6 +8,18 @@ public class EntityHorseZombie extends EntityHorseAbstract { @@ -2276,7 +2268,7 @@ index 5782a25ecd..c87fc523f1 100644 + protected void ez() { if (world.purpurConfig.zombieHorseCanSwim) goalSelector.a(0, new PathfinderGoalFloat(this)); } // Purpur } diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 7df24be46e..27cfc6654e 100644 +index 7df24be46..27cfc6654 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -374,9 +374,21 @@ public abstract class EntityHuman extends EntityLiving { @@ -2303,7 +2295,7 @@ index 7df24be46e..27cfc6654e 100644 this.setSneaking(false); } else { diff --git a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java -index 81b7cd06f2..3e6722cfce 100644 +index 81b7cd06f..3e6722cfc 100644 --- a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java +++ b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java @@ -19,10 +19,28 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan @@ -2344,7 +2336,7 @@ index 81b7cd06f2..3e6722cfce 100644 this.targetSelector.a(2, (new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)).a(300)); this.targetSelector.a(3, (new PathfinderGoalNearestAttackableTarget<>(this, EntityVillagerAbstract.class, false)).a(300)); diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 5aca7a9131..cbbbc875be 100644 +index 5aca7a913..cbbbc875b 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -28,7 +28,7 @@ public abstract class EntityInsentient extends EntityLiving { @@ -2436,7 +2428,7 @@ index 5aca7a9131..cbbbc875be 100644 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityIronGolem.java b/src/main/java/net/minecraft/server/EntityIronGolem.java -index 7f6a567760..288a043fbd 100644 +index 7f6a56776..288a043fb 100644 --- a/src/main/java/net/minecraft/server/EntityIronGolem.java +++ b/src/main/java/net/minecraft/server/EntityIronGolem.java @@ -17,8 +17,26 @@ public class EntityIronGolem extends EntityGolem { @@ -2491,7 +2483,7 @@ index 7f6a567760..288a043fbd 100644 float f1 = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F; diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 3fc2360a10..58aa2a9a3e 100644 +index a245cfab6..14dc1318a 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -75,7 +75,7 @@ public abstract class EntityLiving extends Entity { @@ -2564,7 +2556,7 @@ index 3fc2360a10..58aa2a9a3e 100644 } diff --git a/src/main/java/net/minecraft/server/EntityLlama.java b/src/main/java/net/minecraft/server/EntityLlama.java -index 193dbfc5f6..c5f87cbdd2 100644 +index 193dbfc5f..c5f87cbdd 100644 --- a/src/main/java/net/minecraft/server/EntityLlama.java +++ b/src/main/java/net/minecraft/server/EntityLlama.java @@ -16,7 +16,46 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn @@ -2654,7 +2646,7 @@ index 193dbfc5f6..c5f87cbdd2 100644 return i == -1 ? null : EnumColor.fromColorIndex(i); diff --git a/src/main/java/net/minecraft/server/EntityLlamaTrader.java b/src/main/java/net/minecraft/server/EntityLlamaTrader.java -index 4cebd67e85..08c4ca3f36 100644 +index 4cebd67e8..08c4ca3f3 100644 --- a/src/main/java/net/minecraft/server/EntityLlamaTrader.java +++ b/src/main/java/net/minecraft/server/EntityLlamaTrader.java @@ -11,6 +11,23 @@ public class EntityLlamaTrader extends EntityLlama { @@ -2695,7 +2687,7 @@ index 4cebd67e85..08c4ca3f36 100644 @Override public GroupDataEntity prepare(GeneratorAccess generatoraccess, DifficultyDamageScaler difficultydamagescaler, EnumMobSpawn enummobspawn, @Nullable GroupDataEntity groupdataentity, @Nullable NBTTagCompound nbttagcompound) { diff --git a/src/main/java/net/minecraft/server/EntityMagmaCube.java b/src/main/java/net/minecraft/server/EntityMagmaCube.java -index 1fdc248ba8..a5a36af217 100644 +index 1fdc248ba..a5a36af21 100644 --- a/src/main/java/net/minecraft/server/EntityMagmaCube.java +++ b/src/main/java/net/minecraft/server/EntityMagmaCube.java @@ -8,6 +8,23 @@ public class EntityMagmaCube extends EntitySlime { @@ -2723,7 +2715,7 @@ index 1fdc248ba8..a5a36af217 100644 protected void initAttributes() { super.initAttributes(); diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java -index 8b199971bd..53bc312870 100644 +index 8b199971b..53bc31287 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java @@ -19,6 +19,23 @@ public class EntityMushroomCow extends EntityCow { @@ -2751,7 +2743,7 @@ index 8b199971bd..53bc312870 100644 public float a(BlockPosition blockposition, IWorldReader iworldreader) { return iworldreader.getType(blockposition.down()).getBlock() == Blocks.MYCELIUM ? 10.0F : iworldreader.w(blockposition) - 0.5F; diff --git a/src/main/java/net/minecraft/server/EntityOcelot.java b/src/main/java/net/minecraft/server/EntityOcelot.java -index d9a7b8ac1e..8fdf348573 100644 +index d9a7b8ac1..8fdf34857 100644 --- a/src/main/java/net/minecraft/server/EntityOcelot.java +++ b/src/main/java/net/minecraft/server/EntityOcelot.java @@ -16,6 +16,23 @@ public class EntityOcelot extends EntityAnimal { @@ -2794,7 +2786,7 @@ index d9a7b8ac1e..8fdf348573 100644 this.targetSelector.a(1, new PathfinderGoalNearestAttackableTarget<>(this, EntityTurtle.class, 10, false, false, EntityTurtle.bw)); } diff --git a/src/main/java/net/minecraft/server/EntityPanda.java b/src/main/java/net/minecraft/server/EntityPanda.java -index f50ed19080..87ed9a8ca0 100644 +index f50ed1908..87ed9a8ca 100644 --- a/src/main/java/net/minecraft/server/EntityPanda.java +++ b/src/main/java/net/minecraft/server/EntityPanda.java @@ -46,6 +46,23 @@ public class EntityPanda extends EntityAnimal { @@ -2940,7 +2932,7 @@ index f50ed19080..87ed9a8ca0 100644 } } diff --git a/src/main/java/net/minecraft/server/EntityParrot.java b/src/main/java/net/minecraft/server/EntityParrot.java -index 94e57a2d85..7ba2f3a351 100644 +index 94e57a2d8..7ba2f3a35 100644 --- a/src/main/java/net/minecraft/server/EntityParrot.java +++ b/src/main/java/net/minecraft/server/EntityParrot.java @@ -62,12 +62,83 @@ public class EntityParrot extends EntityPerchable implements EntityBird { @@ -3041,7 +3033,7 @@ index 94e57a2d85..7ba2f3a351 100644 this.goalSelector.a(2, this.goalSit); this.goalSelector.a(2, new PathfinderGoalFollowOwner(this, 1.0D, 5.0F, 1.0F, true)); diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java -index 96b4912c48..777bc95eef 100644 +index 96b4912c4..777bc95ee 100644 --- a/src/main/java/net/minecraft/server/EntityPhantom.java +++ b/src/main/java/net/minecraft/server/EntityPhantom.java @@ -22,6 +22,40 @@ public class EntityPhantom extends EntityFlying implements IMonster { @@ -3228,7 +3220,7 @@ index 96b4912c48..777bc95eef 100644 EntityPhantom.this.yaw += 180.0F; this.j = 0.1F; diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java -index 8d277566e9..e6a7f8ef37 100644 +index 8d277566e..e6a7f8ef3 100644 --- a/src/main/java/net/minecraft/server/EntityPig.java +++ b/src/main/java/net/minecraft/server/EntityPig.java @@ -19,9 +19,27 @@ public class EntityPig extends EntityAnimal { @@ -3299,7 +3291,7 @@ index 8d277566e9..e6a7f8ef37 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java -index 9dd028b558..fb9ef88ea3 100644 +index 9dd028b55..fb9ef88ea 100644 --- a/src/main/java/net/minecraft/server/EntityPigZombie.java +++ b/src/main/java/net/minecraft/server/EntityPigZombie.java @@ -17,6 +17,23 @@ public class EntityPigZombie extends EntityZombie { @@ -3327,7 +3319,7 @@ index 9dd028b558..fb9ef88ea3 100644 public void setLastDamager(@Nullable EntityLiving entityliving) { super.setLastDamager(entityliving); diff --git a/src/main/java/net/minecraft/server/EntityPillager.java b/src/main/java/net/minecraft/server/EntityPillager.java -index 0357c9da93..98a657cece 100644 +index 0357c9da9..98a657cec 100644 --- a/src/main/java/net/minecraft/server/EntityPillager.java +++ b/src/main/java/net/minecraft/server/EntityPillager.java @@ -13,15 +13,34 @@ public class EntityPillager extends EntityIllagerAbstract implements ICrossbow, @@ -3366,7 +3358,7 @@ index 0357c9da93..98a657cece 100644 this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityVillagerAbstract.class, false)); diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 9437a06d82..4ecc89ac44 100644 +index 9437a06d8..4ecc89ac4 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -1308,6 +1308,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -3386,7 +3378,7 @@ index 9437a06d82..4ecc89ac44 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityPolarBear.java b/src/main/java/net/minecraft/server/EntityPolarBear.java -index f8e29a02d3..0a3906bde0 100644 +index f8e29a02d..0a3906bde 100644 --- a/src/main/java/net/minecraft/server/EntityPolarBear.java +++ b/src/main/java/net/minecraft/server/EntityPolarBear.java @@ -17,6 +17,23 @@ public class EntityPolarBear extends EntityAnimal { @@ -3478,7 +3470,7 @@ index f8e29a02d3..0a3906bde0 100644 public d() { diff --git a/src/main/java/net/minecraft/server/EntityPufferFish.java b/src/main/java/net/minecraft/server/EntityPufferFish.java -index 98af9a2235..d0e3e251e1 100644 +index 98af9a223..d0e3e251e 100644 --- a/src/main/java/net/minecraft/server/EntityPufferFish.java +++ b/src/main/java/net/minecraft/server/EntityPufferFish.java @@ -17,6 +17,23 @@ public class EntityPufferFish extends EntityFish { @@ -3515,7 +3507,7 @@ index 98af9a2235..d0e3e251e1 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityRabbit.java b/src/main/java/net/minecraft/server/EntityRabbit.java -index 2ed2d0b6bb..9040ab1c54 100644 +index 2ed2d0b6b..9040ab1c5 100644 --- a/src/main/java/net/minecraft/server/EntityRabbit.java +++ b/src/main/java/net/minecraft/server/EntityRabbit.java @@ -26,9 +26,27 @@ public class EntityRabbit extends EntityAnimal { @@ -3670,7 +3662,7 @@ index 2ed2d0b6bb..9040ab1c54 100644 this.d = flag; } diff --git a/src/main/java/net/minecraft/server/EntityRavager.java b/src/main/java/net/minecraft/server/EntityRavager.java -index fd25ce1026..98d182a4ce 100644 +index fd25ce102..98d182a4c 100644 --- a/src/main/java/net/minecraft/server/EntityRavager.java +++ b/src/main/java/net/minecraft/server/EntityRavager.java @@ -20,14 +20,33 @@ public class EntityRavager extends EntityRaider { @@ -3708,7 +3700,7 @@ index fd25ce1026..98d182a4ce 100644 this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); this.targetSelector.a(4, new PathfinderGoalNearestAttackableTarget<>(this, EntityVillagerAbstract.class, true)); diff --git a/src/main/java/net/minecraft/server/EntitySalmon.java b/src/main/java/net/minecraft/server/EntitySalmon.java -index 6be29f3078..189515b0ff 100644 +index 6be29f307..189515b0f 100644 --- a/src/main/java/net/minecraft/server/EntitySalmon.java +++ b/src/main/java/net/minecraft/server/EntitySalmon.java @@ -6,6 +6,23 @@ public class EntitySalmon extends EntityFishSchool { @@ -3736,7 +3728,7 @@ index 6be29f3078..189515b0ff 100644 public int es() { return 5; diff --git a/src/main/java/net/minecraft/server/EntitySheep.java b/src/main/java/net/minecraft/server/EntitySheep.java -index f63528ca3e..43eefa46c2 100644 +index f63528ca3..43eefa46c 100644 --- a/src/main/java/net/minecraft/server/EntitySheep.java +++ b/src/main/java/net/minecraft/server/EntitySheep.java @@ -55,10 +55,28 @@ public class EntitySheep extends EntityAnimal { @@ -3769,7 +3761,7 @@ index f63528ca3e..43eefa46c2 100644 this.goalSelector.a(2, new PathfinderGoalBreed(this, 1.0D)); this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.1D, RecipeItemStack.a(Items.WHEAT), false)); diff --git a/src/main/java/net/minecraft/server/EntityShulker.java b/src/main/java/net/minecraft/server/EntityShulker.java -index 0d2ceff6f2..46379588c1 100644 +index 0d2ceff6f..46379588c 100644 --- a/src/main/java/net/minecraft/server/EntityShulker.java +++ b/src/main/java/net/minecraft/server/EntityShulker.java @@ -32,6 +32,23 @@ public class EntityShulker extends EntityGolem implements IMonster { @@ -3819,7 +3811,7 @@ index 0d2ceff6f2..46379588c1 100644 @Override public boolean a() { diff --git a/src/main/java/net/minecraft/server/EntitySilverfish.java b/src/main/java/net/minecraft/server/EntitySilverfish.java -index 08c2a22f7a..dff20567b3 100644 +index 08c2a22f7..dff20567b 100644 --- a/src/main/java/net/minecraft/server/EntitySilverfish.java +++ b/src/main/java/net/minecraft/server/EntitySilverfish.java @@ -11,13 +11,32 @@ public class EntitySilverfish extends EntityMonster { @@ -3864,7 +3856,7 @@ index 08c2a22f7a..dff20567b3 100644 public void g() { diff --git a/src/main/java/net/minecraft/server/EntitySkeleton.java b/src/main/java/net/minecraft/server/EntitySkeleton.java -index 0e78d5c62c..8e6efeb7b7 100644 +index 0e78d5c62..8e6efeb7b 100644 --- a/src/main/java/net/minecraft/server/EntitySkeleton.java +++ b/src/main/java/net/minecraft/server/EntitySkeleton.java @@ -6,6 +6,23 @@ public class EntitySkeleton extends EntitySkeletonAbstract { @@ -3892,7 +3884,7 @@ index 0e78d5c62c..8e6efeb7b7 100644 protected SoundEffect getSoundAmbient() { return SoundEffects.ENTITY_SKELETON_AMBIENT; diff --git a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java -index 3c95c0428b..8bc4e85156 100644 +index 3c95c0428..8bc4e8515 100644 --- a/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java +++ b/src/main/java/net/minecraft/server/EntitySkeletonAbstract.java @@ -28,12 +28,14 @@ public abstract class EntitySkeletonAbstract extends EntityMonster implements IR @@ -3911,7 +3903,7 @@ index 3c95c0428b..8bc4e85156 100644 this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityIronGolem.class, true)); diff --git a/src/main/java/net/minecraft/server/EntitySkeletonStray.java b/src/main/java/net/minecraft/server/EntitySkeletonStray.java -index 2eb53864f2..a930fb8401 100644 +index 2eb53864f..a930fb840 100644 --- a/src/main/java/net/minecraft/server/EntitySkeletonStray.java +++ b/src/main/java/net/minecraft/server/EntitySkeletonStray.java @@ -8,6 +8,23 @@ public class EntitySkeletonStray extends EntitySkeletonAbstract { @@ -3939,7 +3931,7 @@ index 2eb53864f2..a930fb8401 100644 return c(entitytypes, generatoraccess, enummobspawn, blockposition, random) && (enummobspawn == EnumMobSpawn.SPAWNER || generatoraccess.f(blockposition)); } diff --git a/src/main/java/net/minecraft/server/EntitySkeletonWither.java b/src/main/java/net/minecraft/server/EntitySkeletonWither.java -index 98e042424c..8aa0a6699f 100644 +index 98e042424..8aa0a6699 100644 --- a/src/main/java/net/minecraft/server/EntitySkeletonWither.java +++ b/src/main/java/net/minecraft/server/EntitySkeletonWither.java @@ -9,6 +9,23 @@ public class EntitySkeletonWither extends EntitySkeletonAbstract { @@ -3967,7 +3959,7 @@ index 98e042424c..8aa0a6699f 100644 protected SoundEffect getSoundAmbient() { return SoundEffects.ENTITY_WITHER_SKELETON_AMBIENT; diff --git a/src/main/java/net/minecraft/server/EntitySlime.java b/src/main/java/net/minecraft/server/EntitySlime.java -index 2efc18df94..1469e3b23c 100644 +index 2efc18df9..1469e3b23 100644 --- a/src/main/java/net/minecraft/server/EntitySlime.java +++ b/src/main/java/net/minecraft/server/EntitySlime.java @@ -32,12 +32,31 @@ public class EntitySlime extends EntityInsentient implements IMonster { @@ -4044,7 +4036,7 @@ index 2efc18df94..1469e3b23c 100644 } else { this.h = ControllerMove.Operation.WAIT; diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index dee55c5dea..65d7468997 100644 +index dee55c5de..65d746899 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java @@ -13,12 +13,31 @@ public class EntitySnowman extends EntityGolem implements IRangedEntity { @@ -4106,7 +4098,7 @@ index dee55c5dea..65d7468997 100644 } diff --git a/src/main/java/net/minecraft/server/EntitySpider.java b/src/main/java/net/minecraft/server/EntitySpider.java -index d02db56595..d3708a7b0e 100644 +index d02db5659..d3708a7b0 100644 --- a/src/main/java/net/minecraft/server/EntitySpider.java +++ b/src/main/java/net/minecraft/server/EntitySpider.java @@ -11,14 +11,33 @@ public class EntitySpider extends EntityMonster { @@ -4144,7 +4136,7 @@ index d02db56595..d3708a7b0e 100644 this.targetSelector.a(2, new EntitySpider.PathfinderGoalSpiderNearestAttackableTarget<>(this, EntityHuman.class)); this.targetSelector.a(3, new EntitySpider.PathfinderGoalSpiderNearestAttackableTarget<>(this, EntityIronGolem.class)); diff --git a/src/main/java/net/minecraft/server/EntitySquid.java b/src/main/java/net/minecraft/server/EntitySquid.java -index 92efe4e7f5..b967135ac3 100644 +index 92efe4e7f..b967135ac 100644 --- a/src/main/java/net/minecraft/server/EntitySquid.java +++ b/src/main/java/net/minecraft/server/EntitySquid.java @@ -25,10 +25,28 @@ public class EntitySquid extends EntityWaterAnimal { @@ -4253,7 +4245,7 @@ index 92efe4e7f5..b967135ac3 100644 } } diff --git a/src/main/java/net/minecraft/server/EntityTameableAnimal.java b/src/main/java/net/minecraft/server/EntityTameableAnimal.java -index 9b2eea71cc..d55c6cb339 100644 +index 9b2eea71c..d55c6cb33 100644 --- a/src/main/java/net/minecraft/server/EntityTameableAnimal.java +++ b/src/main/java/net/minecraft/server/EntityTameableAnimal.java @@ -135,6 +135,7 @@ public abstract class EntityTameableAnimal extends EntityAnimal { @@ -4265,7 +4257,7 @@ index 9b2eea71cc..d55c6cb339 100644 return entityliving == this.getOwner(); } diff --git a/src/main/java/net/minecraft/server/EntityTropicalFish.java b/src/main/java/net/minecraft/server/EntityTropicalFish.java -index ef8f373bea..992978463d 100644 +index ef8f373be..992978463 100644 --- a/src/main/java/net/minecraft/server/EntityTropicalFish.java +++ b/src/main/java/net/minecraft/server/EntityTropicalFish.java @@ -19,6 +19,23 @@ public class EntityTropicalFish extends EntityFishSchool { @@ -4293,7 +4285,7 @@ index ef8f373bea..992978463d 100644 protected void initDatawatcher() { super.initDatawatcher(); diff --git a/src/main/java/net/minecraft/server/EntityTurtle.java b/src/main/java/net/minecraft/server/EntityTurtle.java -index b24a5100b4..4695492068 100644 +index b24a5100b..469549206 100644 --- a/src/main/java/net/minecraft/server/EntityTurtle.java +++ b/src/main/java/net/minecraft/server/EntityTurtle.java @@ -27,6 +27,23 @@ public class EntityTurtle extends EntityAnimal { @@ -4441,7 +4433,7 @@ index b24a5100b4..4695492068 100644 if (this.h == ControllerMove.Operation.MOVE_TO && !this.i.getNavigation().m()) { double d0 = this.b - this.i.locX(); diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java -index 0f04bcc8b7..5a7494947c 100644 +index 0f04bcc8b..5a7494947 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java +++ b/src/main/java/net/minecraft/server/EntityTypes.java @@ -259,6 +259,12 @@ public class EntityTypes { @@ -4458,7 +4450,7 @@ index 0f04bcc8b7..5a7494947c 100644 if (this.bg == null) { this.bg = SystemUtils.a("entity", IRegistry.ENTITY_TYPE.getKey(this)); diff --git a/src/main/java/net/minecraft/server/EntityVex.java b/src/main/java/net/minecraft/server/EntityVex.java -index cf274666c7..d919f44ab8 100644 +index cf274666c..d919f44ab 100644 --- a/src/main/java/net/minecraft/server/EntityVex.java +++ b/src/main/java/net/minecraft/server/EntityVex.java @@ -19,6 +19,50 @@ public class EntityVex extends EntityMonster { @@ -4572,7 +4564,7 @@ index cf274666c7..d919f44ab8 100644 Vec3D vec3d = new Vec3D(this.b - EntityVex.this.locX(), this.c - EntityVex.this.locY(), this.d - EntityVex.this.locZ()); double d0 = vec3d.f(); diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 7da267d287..5b0de0d9d8 100644 +index 7da267d28..5b0de0d9d 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java @@ -68,6 +68,28 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @@ -4605,7 +4597,7 @@ index 7da267d287..5b0de0d9d8 100644 public BehaviorController getBehaviorController() { return (BehaviorController) super.getBehaviorController(); // CraftBukkit - decompile error diff --git a/src/main/java/net/minecraft/server/EntityVillagerTrader.java b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -index 2ad8dba5c0..4e9c5e84a9 100644 +index 2ad8dba5c..4e9c5e84a 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/server/EntityVillagerTrader.java @@ -20,6 +20,23 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { @@ -4641,7 +4633,7 @@ index 2ad8dba5c0..4e9c5e84a9 100644 this.goalSelector.a(1, new PathfinderGoalAvoidTarget<>(this, EntityZombie.class, 8.0F, 0.5D, 0.5D)); this.goalSelector.a(1, new PathfinderGoalAvoidTarget<>(this, EntityEvoker.class, 12.0F, 0.5D, 0.5D)); diff --git a/src/main/java/net/minecraft/server/EntityVindicator.java b/src/main/java/net/minecraft/server/EntityVindicator.java -index c974c02e92..6ba920134a 100644 +index c974c02e9..6ba920134 100644 --- a/src/main/java/net/minecraft/server/EntityVindicator.java +++ b/src/main/java/net/minecraft/server/EntityVindicator.java @@ -17,14 +17,33 @@ public class EntityVindicator extends EntityIllagerAbstract { @@ -4679,7 +4671,7 @@ index c974c02e92..6ba920134a 100644 this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityVillagerAbstract.class, true)); diff --git a/src/main/java/net/minecraft/server/EntityWitch.java b/src/main/java/net/minecraft/server/EntityWitch.java -index 1432d3f6bf..447387bd78 100644 +index 1432d3f6b..447387bd7 100644 --- a/src/main/java/net/minecraft/server/EntityWitch.java +++ b/src/main/java/net/minecraft/server/EntityWitch.java @@ -24,6 +24,23 @@ public class EntityWitch extends EntityRaider implements IRangedEntity { @@ -4722,7 +4714,7 @@ index 1432d3f6bf..447387bd78 100644 this.targetSelector.a(2, this.bz); this.targetSelector.a(3, this.bA); diff --git a/src/main/java/net/minecraft/server/EntityWither.java b/src/main/java/net/minecraft/server/EntityWither.java -index 2f466af4d5..8c1fa37178 100644 +index 2f466af4d..8c1fa3717 100644 --- a/src/main/java/net/minecraft/server/EntityWither.java +++ b/src/main/java/net/minecraft/server/EntityWither.java @@ -18,7 +18,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { @@ -4855,7 +4847,7 @@ index 2f466af4d5..8c1fa37178 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityWolf.java b/src/main/java/net/minecraft/server/EntityWolf.java -index eec1e26b6e..47f0b2df6c 100644 +index eec1e26b6..47f0b2df6 100644 --- a/src/main/java/net/minecraft/server/EntityWolf.java +++ b/src/main/java/net/minecraft/server/EntityWolf.java @@ -30,10 +30,28 @@ public class EntityWolf extends EntityTameableAnimal { @@ -5029,7 +5021,7 @@ index eec1e26b6e..47f0b2df6c 100644 private final EntityWolf j; diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java -index 07ebc1d816..8d1f04415e 100644 +index 07ebc1d81..8d1f04415 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java @@ -44,11 +44,30 @@ public class EntityZombie extends EntityMonster { @@ -5064,7 +5056,7 @@ index 07ebc1d816..8d1f04415e 100644 } diff --git a/src/main/java/net/minecraft/server/EntityZombieHusk.java b/src/main/java/net/minecraft/server/EntityZombieHusk.java -index da8446d05d..db252ba4e0 100644 +index da8446d05..db252ba4e 100644 --- a/src/main/java/net/minecraft/server/EntityZombieHusk.java +++ b/src/main/java/net/minecraft/server/EntityZombieHusk.java @@ -8,6 +8,23 @@ public class EntityZombieHusk extends EntityZombie { @@ -5092,7 +5084,7 @@ index da8446d05d..db252ba4e0 100644 return c(entitytypes, generatoraccess, enummobspawn, blockposition, random) && (enummobspawn == EnumMobSpawn.SPAWNER || generatoraccess.f(blockposition)); } diff --git a/src/main/java/net/minecraft/server/EntityZombieVillager.java b/src/main/java/net/minecraft/server/EntityZombieVillager.java -index 8082fa617a..ebbfcb75a4 100644 +index 8082fa617..ebbfcb75a 100644 --- a/src/main/java/net/minecraft/server/EntityZombieVillager.java +++ b/src/main/java/net/minecraft/server/EntityZombieVillager.java @@ -25,6 +25,23 @@ public class EntityZombieVillager extends EntityZombie implements VillagerDataHo @@ -5120,7 +5112,7 @@ index 8082fa617a..ebbfcb75a4 100644 protected void initDatawatcher() { super.initDatawatcher(); diff --git a/src/main/java/net/minecraft/server/FoodInfo.java b/src/main/java/net/minecraft/server/FoodInfo.java -index b35fe21a6d..5b0f35c730 100644 +index b35fe21a6..5b0f35c73 100644 --- a/src/main/java/net/minecraft/server/FoodInfo.java +++ b/src/main/java/net/minecraft/server/FoodInfo.java @@ -30,6 +30,7 @@ public class FoodInfo { @@ -5132,7 +5124,7 @@ index b35fe21a6d..5b0f35c730 100644 return this.c; } diff --git a/src/main/java/net/minecraft/server/ItemDye.java b/src/main/java/net/minecraft/server/ItemDye.java -index da49f6e5ae..7b5d602649 100644 +index da49f6e5a..7b5d60264 100644 --- a/src/main/java/net/minecraft/server/ItemDye.java +++ b/src/main/java/net/minecraft/server/ItemDye.java @@ -42,6 +42,7 @@ public class ItemDye extends Item { @@ -5144,7 +5136,7 @@ index da49f6e5ae..7b5d602649 100644 return this.b; } diff --git a/src/main/java/net/minecraft/server/MathHelper.java b/src/main/java/net/minecraft/server/MathHelper.java -index c4aa38ddf1..3d52a396e6 100644 +index c4aa38ddf..3d52a396e 100644 --- a/src/main/java/net/minecraft/server/MathHelper.java +++ b/src/main/java/net/minecraft/server/MathHelper.java @@ -263,6 +263,7 @@ public class MathHelper { @@ -5164,7 +5156,7 @@ index c4aa38ddf1..3d52a396e6 100644 return f1 + f * (f2 - f1); } diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSwell.java b/src/main/java/net/minecraft/server/PathfinderGoalSwell.java -index e07c7674a5..3c077b6870 100644 +index e07c7674a..3c077b687 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalSwell.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalSwell.java @@ -4,8 +4,8 @@ import java.util.EnumSet; @@ -5187,7 +5179,7 @@ index e07c7674a5..3c077b6870 100644 this.a.a(-1); } else if (this.a.h((Entity) this.b) > 49.0D) { diff --git a/src/main/java/net/minecraft/server/ProjectileHelper.java b/src/main/java/net/minecraft/server/ProjectileHelper.java -index 1b796ba5b3..7dbe3500e9 100644 +index 1b796ba5b..7dbe3500e 100644 --- a/src/main/java/net/minecraft/server/ProjectileHelper.java +++ b/src/main/java/net/minecraft/server/ProjectileHelper.java @@ -15,6 +15,7 @@ public final class ProjectileHelper { @@ -5199,7 +5191,7 @@ index 1b796ba5b3..7dbe3500e9 100644 return a(entity, flag, false, (Entity) null, raytrace_blockcollisionoption, false, predicate, axisalignedbb); } diff --git a/src/main/java/net/minecraft/server/Vec3D.java b/src/main/java/net/minecraft/server/Vec3D.java -index 0c7f094e54..62a0810062 100644 +index c2e4b5e8d..3838b3b3a 100644 --- a/src/main/java/net/minecraft/server/Vec3D.java +++ b/src/main/java/net/minecraft/server/Vec3D.java @@ -27,6 +27,7 @@ public class Vec3D implements IPosition { @@ -5210,7 +5202,7 @@ index 0c7f094e54..62a0810062 100644 public Vec3D d() { double d0 = (double) MathHelper.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); -@@ -81,6 +82,7 @@ public class Vec3D implements IPosition { +@@ -82,6 +83,7 @@ public class Vec3D implements IPosition { return d3 * d3 + d4 * d4 + d5 * d5; } @@ -5218,7 +5210,7 @@ index 0c7f094e54..62a0810062 100644 public Vec3D a(double d0) { return this.d(d0, d0, d0); } -@@ -89,6 +91,7 @@ public class Vec3D implements IPosition { +@@ -90,6 +92,7 @@ public class Vec3D implements IPosition { return this.d(vec3d.x, vec3d.y, vec3d.z); } @@ -5227,10 +5219,10 @@ index 0c7f094e54..62a0810062 100644 return new Vec3D(this.x * d0, this.y * d1, this.z * d2); } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index fb584091af..62daa6d2a6 100644 +index bdb12d16f..ad3b81a11 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -995,6 +995,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1020,6 +1020,7 @@ public abstract class World implements GeneratorAccess, AutoCloseable { } } @@ -5238,7 +5230,7 @@ index fb584091af..62daa6d2a6 100644 public boolean a(AxisAlignedBB axisalignedbb, Material material) { int i = MathHelper.floor(axisalignedbb.minX); int j = MathHelper.f(axisalignedbb.maxX); -@@ -1630,4 +1631,10 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1665,4 +1666,10 @@ public abstract class World implements GeneratorAccess, AutoCloseable { @Override public BiomeManager d() { return this.biomeManager; } @@ -5250,7 +5242,7 @@ index fb584091af..62daa6d2a6 100644 + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index eda37fa43f..69f99a993d 100644 +index eda37fa43..69f99a993 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -64,4 +64,603 @@ public class PurpurWorldConfig { @@ -5859,7 +5851,7 @@ index eda37fa43f..69f99a993d 100644 } diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java b/src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java new file mode 100644 -index 0000000000..828e1b8730 +index 000000000..828e1b873 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java @@ -0,0 +1,75 @@ @@ -5940,7 +5932,7 @@ index 0000000000..828e1b8730 +} diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASD.java b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASD.java new file mode 100644 -index 0000000000..0a5d6d46c2 +index 000000000..0a5d6d46c --- /dev/null +++ b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASD.java @@ -0,0 +1,86 @@ @@ -6032,7 +6024,7 @@ index 0000000000..0a5d6d46c2 +} diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlying.java b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlying.java new file mode 100644 -index 0000000000..3491250704 +index 000000000..349125070 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlying.java @@ -0,0 +1,53 @@ @@ -6091,7 +6083,7 @@ index 0000000000..3491250704 +} diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlyingWithSpacebar.java b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlyingWithSpacebar.java new file mode 100644 -index 0000000000..f753759361 +index 000000000..f75375936 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDFlyingWithSpacebar.java @@ -0,0 +1,61 @@ @@ -6158,7 +6150,7 @@ index 0000000000..f753759361 +} diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDWater.java b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDWater.java new file mode 100644 -index 0000000000..e75e580670 +index 000000000..e75e58067 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASDWater.java @@ -0,0 +1,43 @@ @@ -6207,7 +6199,7 @@ index 0000000000..e75e580670 +} diff --git a/src/main/java/net/pl3x/purpur/entity/DolphinSpit.java b/src/main/java/net/pl3x/purpur/entity/DolphinSpit.java new file mode 100644 -index 0000000000..7189cc569f +index 000000000..7189cc569 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/entity/DolphinSpit.java @@ -0,0 +1,119 @@ @@ -6332,7 +6324,7 @@ index 0000000000..7189cc569f +} diff --git a/src/main/java/net/pl3x/purpur/entity/PhantomFlames.java b/src/main/java/net/pl3x/purpur/entity/PhantomFlames.java new file mode 100644 -index 0000000000..f9e680efd2 +index 000000000..f9e680efd --- /dev/null +++ b/src/main/java/net/pl3x/purpur/entity/PhantomFlames.java @@ -0,0 +1,126 @@ @@ -6464,7 +6456,7 @@ index 0000000000..f9e680efd2 +} diff --git a/src/main/java/net/pl3x/purpur/pathfinder/PathfinderGoalHasRider.java b/src/main/java/net/pl3x/purpur/pathfinder/PathfinderGoalHasRider.java new file mode 100644 -index 0000000000..6e50344c07 +index 000000000..6e50344c0 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/pathfinder/PathfinderGoalHasRider.java @@ -0,0 +1,21 @@ @@ -6491,7 +6483,7 @@ index 0000000000..6e50344c07 +} diff --git a/src/main/java/net/pl3x/purpur/pathfinder/PathfinderGoalHorseHasRider.java b/src/main/java/net/pl3x/purpur/pathfinder/PathfinderGoalHorseHasRider.java new file mode 100644 -index 0000000000..9bb9da22aa +index 000000000..9bb9da22a --- /dev/null +++ b/src/main/java/net/pl3x/purpur/pathfinder/PathfinderGoalHorseHasRider.java @@ -0,0 +1,21 @@ @@ -6517,10 +6509,10 @@ index 0000000000..9bb9da22aa + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index d16d3fe58e..5246db9636 100644 +index 5a7b714cc..ab414917d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1058,4 +1058,31 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1089,4 +1089,31 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return getHandle().spawnReason; } // Paper end @@ -6553,7 +6545,7 @@ index d16d3fe58e..5246db9636 100644 + // Purpur end } diff --git a/src/main/resources/purpur.lang b/src/main/resources/purpur.lang -index 0967ef424b..7125c0477e 100644 +index 0967ef424..7125c0477 100644 --- a/src/main/resources/purpur.lang +++ b/src/main/resources/purpur.lang @@ -1 +1,3 @@ diff --git a/patches/server/0009-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0010-Logger-settings-suppressing-pointless-logs.patch similarity index 95% rename from patches/server/0009-Logger-settings-suppressing-pointless-logs.patch rename to patches/server/0010-Logger-settings-suppressing-pointless-logs.patch index e39d63061..bfe45183b 100644 --- a/patches/server/0009-Logger-settings-suppressing-pointless-logs.patch +++ b/patches/server/0010-Logger-settings-suppressing-pointless-logs.patch @@ -1,4 +1,4 @@ -From 0befe14c7c515802c2dcb800db9859c79822d9dd Mon Sep 17 00:00:00 2001 +From ff8ebf864e0f3f5d70b43bfbe7353e347897442b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 00:52:12 -0500 Subject: [PATCH] Logger settings (suppressing pointless logs) @@ -12,7 +12,7 @@ Subject: [PATCH] Logger settings (suppressing pointless logs) 5 files changed, 15 insertions(+) diff --git a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java -index c41e138472..44331cea7c 100644 +index c41e13847..44331cea7 100644 --- a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java +++ b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java @@ -162,6 +162,7 @@ public class AdvancementDataPlayer { @@ -24,7 +24,7 @@ index c41e138472..44331cea7c 100644 } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/GenericAttributes.java b/src/main/java/net/minecraft/server/GenericAttributes.java -index 469e293c25..ca58302cf7 100644 +index 469e293c2..ca58302cf 100644 --- a/src/main/java/net/minecraft/server/GenericAttributes.java +++ b/src/main/java/net/minecraft/server/GenericAttributes.java @@ -79,6 +79,7 @@ public class GenericAttributes { @@ -36,7 +36,7 @@ index 469e293c25..ca58302cf7 100644 } else { a(attributeinstance, nbttagcompound); diff --git a/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java b/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java -index 73402f2b5a..1c2320cc54 100644 +index 73402f2b5..1c2320cc5 100644 --- a/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java +++ b/src/main/java/net/minecraft/server/WorldGenFeatureConfigured.java @@ -47,6 +47,7 @@ public class WorldGenFeatureConfigured(WorldGenerator.NO_OP, WorldGenFeatureEmptyConfiguration.e); } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 2673de8212..d6f82d119e 100644 +index 2673de821..d6f82d119 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -128,6 +128,17 @@ public class PurpurConfig { @@ -70,7 +70,7 @@ index 2673de8212..d6f82d119e 100644 getString("settings.timings.url", "https://timings.pl3x.net"); } diff --git a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java b/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java -index 049e9f98de..1d179cd5bc 100644 +index 049e9f98d..1d179cd5b 100644 --- a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java +++ b/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java @@ -254,6 +254,7 @@ public final class CraftLegacy { @@ -82,5 +82,5 @@ index 049e9f98de..1d179cd5bc 100644 if (MinecraftServer.getServer() != null && MinecraftServer.getServer().isDebugging()) { new Exception().printStackTrace(); -- -2.24.0 +2.26.2 diff --git a/patches/server/0010-Disable-outdated-build-check.patch b/patches/server/0011-Disable-outdated-build-check.patch similarity index 88% rename from patches/server/0010-Disable-outdated-build-check.patch rename to patches/server/0011-Disable-outdated-build-check.patch index d4e3f14da..7719239fc 100644 --- a/patches/server/0010-Disable-outdated-build-check.patch +++ b/patches/server/0011-Disable-outdated-build-check.patch @@ -1,4 +1,4 @@ -From 139d189fa8600958abb4e5d209a2ab6dafdbfe99 Mon Sep 17 00:00:00 2001 +From d5aa173e66a65d2bd0f499d1161debd81ed92a57 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 15 Dec 2019 12:53:59 -0600 Subject: [PATCH] Disable outdated build check @@ -8,10 +8,10 @@ Subject: [PATCH] Disable outdated build check 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 17ebc84f51..ced4acc5f5 100644 +index 8d436d275..b007840a5 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java -@@ -252,7 +252,7 @@ public class Main { +@@ -259,7 +259,7 @@ public class Main { System.setProperty(TerminalConsoleAppender.JLINE_OVERRIDE_PROPERTY, "false"); // Paper } @@ -21,5 +21,5 @@ index 17ebc84f51..ced4acc5f5 100644 Calendar deadline = Calendar.getInstance(); -- -2.24.0 +2.26.2 diff --git a/patches/server/0011-Add-obfhelpers-for-plugin-use.patch b/patches/server/0012-Add-obfhelpers-for-plugin-use.patch similarity index 93% rename from patches/server/0011-Add-obfhelpers-for-plugin-use.patch rename to patches/server/0012-Add-obfhelpers-for-plugin-use.patch index 2aca5da5a..41fb71d09 100644 --- a/patches/server/0011-Add-obfhelpers-for-plugin-use.patch +++ b/patches/server/0012-Add-obfhelpers-for-plugin-use.patch @@ -1,4 +1,4 @@ -From b28d366ed0e2e748cc515c6ac6c5d5a90652f579 Mon Sep 17 00:00:00 2001 +From 7ad6f9948748ee7bc32a5f8682016e0d47b27a80 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Wed, 1 Jan 2020 20:12:39 -0600 Subject: [PATCH] Add obfhelpers for plugin use @@ -10,7 +10,7 @@ Subject: [PATCH] Add obfhelpers for plugin use 3 files changed, 4 insertions(+) diff --git a/src/main/java/net/minecraft/server/IChatBaseComponent.java b/src/main/java/net/minecraft/server/IChatBaseComponent.java -index fb97c51bb1..50ed4001d1 100644 +index fb97c51bb..50ed4001d 100644 --- a/src/main/java/net/minecraft/server/IChatBaseComponent.java +++ b/src/main/java/net/minecraft/server/IChatBaseComponent.java @@ -145,6 +145,7 @@ public interface IChatBaseComponent extends Message, Iterable Date: Thu, 9 May 2019 14:27:37 -0500 Subject: [PATCH] Silk touch spawners @@ -10,10 +10,10 @@ Subject: [PATCH] Silk touch spawners 3 files changed, 47 insertions(+) diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java -index d051a54aa0..8c8dc9d6b8 100644 +index 66244a9d0..9c7faa2bd 100644 --- a/src/main/java/net/minecraft/server/Block.java +++ b/src/main/java/net/minecraft/server/Block.java -@@ -501,6 +501,7 @@ public class Block implements IMaterial { +@@ -502,6 +502,7 @@ public class Block implements IMaterial { iblockdata.dropNaturally(world, blockposition, itemstack); } @@ -22,7 +22,7 @@ index d051a54aa0..8c8dc9d6b8 100644 if (!world.isClientSide && !itemstack.isEmpty() && world.getGameRules().getBoolean(GameRules.DO_TILE_DROPS)) { float f = 0.5F; diff --git a/src/main/java/net/minecraft/server/BlockMobSpawner.java b/src/main/java/net/minecraft/server/BlockMobSpawner.java -index 5296fdf168..69d04f6cbf 100644 +index 5296fdf16..69d04f6cb 100644 --- a/src/main/java/net/minecraft/server/BlockMobSpawner.java +++ b/src/main/java/net/minecraft/server/BlockMobSpawner.java @@ -11,6 +11,40 @@ public class BlockMobSpawner extends BlockTileEntity { @@ -67,7 +67,7 @@ index 5296fdf168..69d04f6cbf 100644 public void dropNaturally(IBlockData iblockdata, World world, BlockPosition blockposition, ItemStack itemstack) { super.dropNaturally(iblockdata, world, blockposition, itemstack); diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java -index 5a7494947c..8e8d392a15 100644 +index 5a7494947..8e8d392a1 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java +++ b/src/main/java/net/minecraft/server/EntityTypes.java @@ -136,10 +136,17 @@ public class EntityTypes { @@ -108,5 +108,5 @@ index 5a7494947c..8e8d392a15 100644 if (this.bh == null) { this.bh = new ChatMessage(this.f(), new Object[0]); -- -2.24.0 +2.26.2 diff --git a/patches/server/0013-Give-giants-AI.patch b/patches/server/0014-Give-giants-AI.patch similarity index 97% rename from patches/server/0013-Give-giants-AI.patch rename to patches/server/0014-Give-giants-AI.patch index c79ce908b..c717228c7 100644 --- a/patches/server/0013-Give-giants-AI.patch +++ b/patches/server/0014-Give-giants-AI.patch @@ -1,4 +1,4 @@ -From 32ed6366b03dbec3921692e4297a0674beb0615c Mon Sep 17 00:00:00 2001 +From 4b620999fe1c124f14cfcad42fcf1d9c4af85953 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 12 May 2019 00:43:12 -0500 Subject: [PATCH] Give giants AI @@ -10,7 +10,7 @@ Subject: [PATCH] Give giants AI 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityGiantZombie.java b/src/main/java/net/minecraft/server/EntityGiantZombie.java -index ff8a41a539..4296aaa074 100644 +index ff8a41a53..4296aaa07 100644 --- a/src/main/java/net/minecraft/server/EntityGiantZombie.java +++ b/src/main/java/net/minecraft/server/EntityGiantZombie.java @@ -23,6 +23,45 @@ public class EntityGiantZombie extends EntityMonster { @@ -78,7 +78,7 @@ index ff8a41a539..4296aaa074 100644 } } diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index cbbbc875be..fbca429090 100644 +index cbbbc875b..fbca42909 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -867,6 +867,7 @@ public abstract class EntityInsentient extends EntityLiving { @@ -98,7 +98,7 @@ index cbbbc875be..fbca429090 100644 float f = difficultydamagescaler.d(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 69f99a993d..7cf7ae3dcb 100644 +index 69f99a993..7cf7ae3dc 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -255,12 +255,22 @@ public class PurpurWorldConfig { @@ -125,5 +125,5 @@ index 69f99a993d..7cf7ae3dcb 100644 public boolean guardianRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0014-Illusioners-AI-settings.patch b/patches/server/0015-Illusioners-AI-settings.patch similarity index 95% rename from patches/server/0014-Illusioners-AI-settings.patch rename to patches/server/0015-Illusioners-AI-settings.patch index cb028bccb..faae34456 100644 --- a/patches/server/0014-Illusioners-AI-settings.patch +++ b/patches/server/0015-Illusioners-AI-settings.patch @@ -1,4 +1,4 @@ -From e5b3ef66104c980b1d533be8844feb0814837194 Mon Sep 17 00:00:00 2001 +From 329d09c1593e86d9267736552d421f226208abda Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 5 Jul 2019 11:09:25 -0500 Subject: [PATCH] Illusioners AI settings @@ -9,7 +9,7 @@ Subject: [PATCH] Illusioners AI settings 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java -index 3e6722cfce..13545a8efe 100644 +index 3e6722cfc..13545a8ef 100644 --- a/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java +++ b/src/main/java/net/minecraft/server/EntityIllagerIllusioner.java @@ -58,9 +58,9 @@ public class EntityIllagerIllusioner extends EntityIllagerWizard implements IRan @@ -26,7 +26,7 @@ index 3e6722cfce..13545a8efe 100644 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7cf7ae3dcb..96a66926fc 100644 +index 7cf7ae3dc..96a66926f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -299,10 +299,16 @@ public class PurpurWorldConfig { @@ -47,5 +47,5 @@ index 7cf7ae3dcb..96a66926fc 100644 public boolean ironGolemRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0015-Zombie-horse-naturally-spawn.patch b/patches/server/0016-Zombie-horse-naturally-spawn.patch similarity index 94% rename from patches/server/0015-Zombie-horse-naturally-spawn.patch rename to patches/server/0016-Zombie-horse-naturally-spawn.patch index aa3706878..784a83537 100644 --- a/patches/server/0015-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0016-Zombie-horse-naturally-spawn.patch @@ -1,4 +1,4 @@ -From 4af62d22140710d7509e4f573f1ac84394a44c73 Mon Sep 17 00:00:00 2001 +From cae7ca5f7ee6a31f421a401abed8141b9037c9a3 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 7 Jul 2019 19:52:16 -0500 Subject: [PATCH] Zombie horse naturally spawn @@ -9,10 +9,10 @@ Subject: [PATCH] Zombie horse naturally spawn 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 17289cf377..41179fe312 100644 +index 24cd10c96..edf24791b 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -601,12 +601,18 @@ public class WorldServer extends World { +@@ -1038,12 +1038,18 @@ public class WorldServer extends World { boolean flag1 = this.getGameRules().getBoolean(GameRules.DO_MOB_SPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.b() * paperConfig.skeleHorseSpawnChance; // Paper if (flag1) { @@ -38,7 +38,7 @@ index 17289cf377..41179fe312 100644 this.strikeLightning(new EntityLightning(this, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, flag1), org.bukkit.event.weather.LightningStrikeEvent.Cause.WEATHER); // CraftBukkit diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 96a66926fc..4c7469b903 100644 +index 96a66926f..4c7469b90 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -657,9 +657,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0016-Charged-creeper-naturally-spawn.patch b/patches/server/0017-Charged-creeper-naturally-spawn.patch similarity index 94% rename from patches/server/0016-Charged-creeper-naturally-spawn.patch rename to patches/server/0017-Charged-creeper-naturally-spawn.patch index 941653a25..0726e7f73 100644 --- a/patches/server/0016-Charged-creeper-naturally-spawn.patch +++ b/patches/server/0017-Charged-creeper-naturally-spawn.patch @@ -1,4 +1,4 @@ -From 136521abd75dada9b5a980379b39c12838c50ff3 Mon Sep 17 00:00:00 2001 +From 2de0a875233bb6be5ed54394ac9cba44a7b32764 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 29 Nov 2019 22:37:44 -0600 Subject: [PATCH] Charged creeper naturally spawn @@ -9,7 +9,7 @@ Subject: [PATCH] Charged creeper naturally spawn 2 files changed, 13 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java -index 48fd8e716b..ce366f401f 100644 +index 48fd8e716..ce366f401 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java @@ -87,6 +87,17 @@ public class EntityCreeper extends EntityMonster { @@ -31,7 +31,7 @@ index 48fd8e716b..ce366f401f 100644 public void b(NBTTagCompound nbttagcompound) { super.b(nbttagcompound); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 4c7469b903..bbae44ddb5 100644 +index 4c7469b90..bbae44ddb 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -148,10 +148,12 @@ public class PurpurWorldConfig { @@ -48,5 +48,5 @@ index 4c7469b903..bbae44ddb5 100644 public boolean dolphinRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0017-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0018-Rabbit-naturally-spawn-toast-and-killer.patch similarity index 95% rename from patches/server/0017-Rabbit-naturally-spawn-toast-and-killer.patch rename to patches/server/0018-Rabbit-naturally-spawn-toast-and-killer.patch index 7c069917a..c9193d920 100644 --- a/patches/server/0017-Rabbit-naturally-spawn-toast-and-killer.patch +++ b/patches/server/0018-Rabbit-naturally-spawn-toast-and-killer.patch @@ -1,4 +1,4 @@ -From 7a740eac98a1acd7253c498e690324cd18e42d47 Mon Sep 17 00:00:00 2001 +From aeb5f32f4179df8b3e0eace094ed06a31e65b87c Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 31 Aug 2019 17:47:11 -0500 Subject: [PATCH] Rabbit naturally spawn toast and killer @@ -9,7 +9,7 @@ Subject: [PATCH] Rabbit naturally spawn toast and killer 2 files changed, 18 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityRabbit.java b/src/main/java/net/minecraft/server/EntityRabbit.java -index 9040ab1c54..0232226f06 100644 +index 9040ab1c5..0232226f0 100644 --- a/src/main/java/net/minecraft/server/EntityRabbit.java +++ b/src/main/java/net/minecraft/server/EntityRabbit.java @@ -364,6 +364,10 @@ public class EntityRabbit extends EntityAnimal { @@ -41,7 +41,7 @@ index 9040ab1c54..0232226f06 100644 int i = this.random.nextInt(100); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index bbae44ddb5..4aaf75fcf4 100644 +index bbae44ddb..4aaf75fcf 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -440,10 +440,14 @@ public class PurpurWorldConfig { @@ -60,5 +60,5 @@ index bbae44ddb5..4aaf75fcf4 100644 public boolean ravagerRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0018-Cat-spawning-options.patch b/patches/server/0019-Cat-spawning-options.patch similarity index 96% rename from patches/server/0018-Cat-spawning-options.patch rename to patches/server/0019-Cat-spawning-options.patch index 3b941570a..9b8e710a9 100644 --- a/patches/server/0018-Cat-spawning-options.patch +++ b/patches/server/0019-Cat-spawning-options.patch @@ -1,4 +1,4 @@ -From 4d0a8cc4bd681061763e57d2addcbfff9a87f6b4 Mon Sep 17 00:00:00 2001 +From c673dd6d4a16db19278e99bd2355469d93c2a79f Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 26 Dec 2019 18:52:55 -0600 Subject: [PATCH] Cat spawning options @@ -9,7 +9,7 @@ Subject: [PATCH] Cat spawning options 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minecraft/server/MobSpawnerCat.java b/src/main/java/net/minecraft/server/MobSpawnerCat.java -index 6024478dc0..4b55c07d41 100644 +index 6024478dc..4b55c07d4 100644 --- a/src/main/java/net/minecraft/server/MobSpawnerCat.java +++ b/src/main/java/net/minecraft/server/MobSpawnerCat.java @@ -15,7 +15,7 @@ public class MobSpawnerCat { @@ -57,7 +57,7 @@ index 6024478dc0..4b55c07d41 100644 return list.size() < 1 ? this.a(blockposition, world) : 0; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 4aaf75fcf4..12fbdf65c5 100644 +index 4aaf75fcf..12fbdf65c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -101,10 +101,16 @@ public class PurpurWorldConfig { @@ -78,5 +78,5 @@ index 4aaf75fcf4..12fbdf65c5 100644 public boolean caveSpiderRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0019-Fix-non-black-cat-types-spawning-in-swamp-huts.patch b/patches/server/0020-Fix-non-black-cat-types-spawning-in-swamp-huts.patch similarity index 91% rename from patches/server/0019-Fix-non-black-cat-types-spawning-in-swamp-huts.patch rename to patches/server/0020-Fix-non-black-cat-types-spawning-in-swamp-huts.patch index f335e7418..91009edbb 100644 --- a/patches/server/0019-Fix-non-black-cat-types-spawning-in-swamp-huts.patch +++ b/patches/server/0020-Fix-non-black-cat-types-spawning-in-swamp-huts.patch @@ -1,4 +1,4 @@ -From aa2411409c85d1baa93f157506e929bfcf44d62c Mon Sep 17 00:00:00 2001 +From 7f22b67baa5bb382abe62b70dfb1ec5bb7ce5929 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 2 Jan 2020 01:23:22 -0600 Subject: [PATCH] Fix non black cat types spawning in swamp huts @@ -8,7 +8,7 @@ Subject: [PATCH] Fix non black cat types spawning in swamp huts 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/MobSpawnerCat.java b/src/main/java/net/minecraft/server/MobSpawnerCat.java -index 4b55c07d41..fa2222355f 100644 +index 4b55c07d4..fa2222355 100644 --- a/src/main/java/net/minecraft/server/MobSpawnerCat.java +++ b/src/main/java/net/minecraft/server/MobSpawnerCat.java @@ -84,8 +84,9 @@ public class MobSpawnerCat { @@ -23,5 +23,5 @@ index 4b55c07d41..fa2222355f 100644 return 1; } -- -2.24.0 +2.26.2 diff --git a/patches/server/0020-Cows-eat-mushrooms.patch b/patches/server/0021-Cows-eat-mushrooms.patch similarity index 94% rename from patches/server/0020-Cows-eat-mushrooms.patch rename to patches/server/0021-Cows-eat-mushrooms.patch index 1e82dc7c7..5f9627952 100644 --- a/patches/server/0020-Cows-eat-mushrooms.patch +++ b/patches/server/0021-Cows-eat-mushrooms.patch @@ -1,4 +1,4 @@ -From 4359121c6cc4b87aa44cdf26bc9bbb55d75d8b67 Mon Sep 17 00:00:00 2001 +From f9ab48da215fbf1f9cd45ee9daa0a5860dc2c9a5 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 4 May 2019 01:10:30 -0500 Subject: [PATCH] Cows eat mushrooms @@ -11,10 +11,10 @@ Subject: [PATCH] Cows eat mushrooms 4 files changed, 77 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 1ef13ee78e..0652f63124 100644 +index dc72ee435..f5ea12b02 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1098,6 +1098,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1283,6 +1283,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return false; } @@ -22,7 +22,7 @@ index 1ef13ee78e..0652f63124 100644 public void a(SoundEffect soundeffect, float f, float f1) { if (!this.isSilent()) { this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), soundeffect, this.getSoundCategory(), f, f1); -@@ -2646,6 +2647,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2831,6 +2832,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.invulnerable = flag; } @@ -31,7 +31,7 @@ index 1ef13ee78e..0652f63124 100644 this.setPositionRotation(entity.locX(), entity.locY(), entity.locZ(), entity.yaw, entity.pitch); } diff --git a/src/main/java/net/minecraft/server/EntityCow.java b/src/main/java/net/minecraft/server/EntityCow.java -index 723a9fa1ee..f56fd7c012 100644 +index 723a9fa1e..f56fd7c01 100644 --- a/src/main/java/net/minecraft/server/EntityCow.java +++ b/src/main/java/net/minecraft/server/EntityCow.java @@ -34,6 +34,7 @@ public class EntityCow extends EntityAnimal { @@ -124,10 +124,10 @@ index 723a9fa1ee..f56fd7c012 100644 public EntityCow createChild(EntityAgeable entityageable) { return (EntityCow) EntityTypes.COW.a(this.world); diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 58aa2a9a3e..ea245de18c 100644 +index 14dc1318a..bf82399c8 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2831,8 +2831,9 @@ public abstract class EntityLiving extends Entity { +@@ -2838,8 +2838,9 @@ public abstract class EntityLiving extends Entity { this.aK = f; } @@ -140,7 +140,7 @@ index 58aa2a9a3e..ea245de18c 100644 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 12fbdf65c5..091f30727f 100644 +index 12fbdf65c..091f30727 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -145,10 +145,12 @@ public class PurpurWorldConfig { @@ -157,5 +157,5 @@ index 12fbdf65c5..091f30727f 100644 public boolean creeperRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0021-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0022-Fix-cow-rotation-when-shearing-mooshroom.patch similarity index 93% rename from patches/server/0021-Fix-cow-rotation-when-shearing-mooshroom.patch rename to patches/server/0022-Fix-cow-rotation-when-shearing-mooshroom.patch index 2c476b292..6e36806f7 100644 --- a/patches/server/0021-Fix-cow-rotation-when-shearing-mooshroom.patch +++ b/patches/server/0022-Fix-cow-rotation-when-shearing-mooshroom.patch @@ -1,4 +1,4 @@ -From 79c6e032d882ad999fd65f3eab561f36397bddb6 Mon Sep 17 00:00:00 2001 +From 2cafa9014b47d301c4f70ca2503bc8398c260a18 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 3 May 2019 23:53:16 -0500 Subject: [PATCH] Fix cow rotation when shearing mooshroom @@ -8,7 +8,7 @@ Subject: [PATCH] Fix cow rotation when shearing mooshroom 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java -index 53bc312870..bf835aaf9a 100644 +index 53bc31287..bf835aaf9 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java @@ -114,7 +114,13 @@ public class EntityMushroomCow extends EntityCow { @@ -27,5 +27,5 @@ index 53bc312870..bf835aaf9a 100644 entitycow.setCustomName(this.getCustomName()); entitycow.setCustomNameVisible(this.getCustomNameVisible()); -- -2.24.0 +2.26.2 diff --git a/patches/server/0022-Pigs-give-saddle-back.patch b/patches/server/0023-Pigs-give-saddle-back.patch similarity index 93% rename from patches/server/0022-Pigs-give-saddle-back.patch rename to patches/server/0023-Pigs-give-saddle-back.patch index 5ec43a204..a56633f36 100644 --- a/patches/server/0022-Pigs-give-saddle-back.patch +++ b/patches/server/0023-Pigs-give-saddle-back.patch @@ -1,4 +1,4 @@ -From 9f40bd20e244a74b5840eff4e216421775c3bf51 Mon Sep 17 00:00:00 2001 +From 1807f5647ff8b32508f3af2d41c656d755f46f39 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 12 May 2019 01:14:46 -0500 Subject: [PATCH] Pigs give saddle back @@ -9,7 +9,7 @@ Subject: [PATCH] Pigs give saddle back 2 files changed, 14 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java -index e6a7f8ef37..d78666dbb2 100644 +index e6a7f8ef3..d78666dbb 100644 --- a/src/main/java/net/minecraft/server/EntityPig.java +++ b/src/main/java/net/minecraft/server/EntityPig.java @@ -135,6 +135,18 @@ public class EntityPig extends EntityAnimal { @@ -32,7 +32,7 @@ index e6a7f8ef37..d78666dbb2 100644 return true; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 091f30727f..85692500b4 100644 +index 091f30727..85692500b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -413,9 +413,11 @@ public class PurpurWorldConfig { @@ -48,5 +48,5 @@ index 091f30727f..85692500b4 100644 public boolean pillagerRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0023-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0024-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 97% rename from patches/server/0023-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/server/0024-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index e0162df66..dde6c7fbf 100644 --- a/patches/server/0023-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0024-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -1,4 +1,4 @@ -From 522d8cbc36b8834ce7c4b5e2cf4192fe37cef25f Mon Sep 17 00:00:00 2001 +From 63057fd5e7b4ad844bafe3ef1c87705ff1cd31f7 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 9 May 2019 18:26:06 -0500 Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms @@ -13,7 +13,7 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms 6 files changed, 226 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/minecraft/server/DamageSource.java b/src/main/java/net/minecraft/server/DamageSource.java -index f7344d3aec..f6c0165f94 100644 +index f7344d3ae..f6c0165f9 100644 --- a/src/main/java/net/minecraft/server/DamageSource.java +++ b/src/main/java/net/minecraft/server/DamageSource.java @@ -82,6 +82,7 @@ public class DamageSource { @@ -25,10 +25,10 @@ index f7344d3aec..f6c0165f94 100644 return (new EntityDamageSourceIndirect("indirectMagic", entity, entity1)).setIgnoreArmor().setMagic(); } diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 0652f63124..197953e19f 100644 +index f5ea12b02..d470c586a 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1445,6 +1445,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1630,6 +1630,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return d3 * d3 + d4 * d4 + d5 * d5; } @@ -36,7 +36,7 @@ index 0652f63124..197953e19f 100644 public double h(Entity entity) { return this.c(entity.getPositionVector()); } -@@ -1974,14 +1975,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2159,14 +2160,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return this.a(new ItemStack(imaterial), (float) i); } @@ -55,7 +55,7 @@ index 0652f63124..197953e19f 100644 return null; } else if (this.world.isClientSide) { diff --git a/src/main/java/net/minecraft/server/EntityEnderCrystal.java b/src/main/java/net/minecraft/server/EntityEnderCrystal.java -index a57d0089d8..02952c3af8 100644 +index a57d0089d..02952c3af 100644 --- a/src/main/java/net/minecraft/server/EntityEnderCrystal.java +++ b/src/main/java/net/minecraft/server/EntityEnderCrystal.java @@ -13,6 +13,12 @@ public class EntityEnderCrystal extends Entity { @@ -123,7 +123,7 @@ index a57d0089d8..02952c3af8 100644 @Override protected void b(NBTTagCompound nbttagcompound) { diff --git a/src/main/java/net/minecraft/server/EntityPhantom.java b/src/main/java/net/minecraft/server/EntityPhantom.java -index 777bc95eef..2650770489 100644 +index 777bc95ee..265077048 100644 --- a/src/main/java/net/minecraft/server/EntityPhantom.java +++ b/src/main/java/net/minecraft/server/EntityPhantom.java @@ -8,9 +8,10 @@ import javax.annotation.Nullable; @@ -350,7 +350,7 @@ index 777bc95eef..2650770489 100644 return entityliving != null ? EntityPhantom.this.a(EntityPhantom.this.getGoalTarget(), PathfinderTargetCondition.a) : false; diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java -index 3bc57ef91d..e0d97d2c8b 100644 +index 3bc57ef91..e0d97d2c8 100644 --- a/src/main/java/net/minecraft/server/IEntityAccess.java +++ b/src/main/java/net/minecraft/server/IEntityAccess.java @@ -34,6 +34,7 @@ public interface IEntityAccess { @@ -362,7 +362,7 @@ index 3bc57ef91d..e0d97d2c8b 100644 return this.a(oclass, axisalignedbb, IEntitySelector.f); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 85692500b4..c9b41cebd6 100644 +index 85692500b..c9b41cebd 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -402,6 +402,9 @@ public class PurpurWorldConfig { @@ -386,5 +386,5 @@ index 85692500b4..c9b41cebd6 100644 public boolean pigRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0024-Snowman-drop-and-put-back-pumpkin.patch b/patches/server/0025-Snowman-drop-and-put-back-pumpkin.patch similarity index 96% rename from patches/server/0024-Snowman-drop-and-put-back-pumpkin.patch rename to patches/server/0025-Snowman-drop-and-put-back-pumpkin.patch index 53c6a968b..0ac03dfc8 100644 --- a/patches/server/0024-Snowman-drop-and-put-back-pumpkin.patch +++ b/patches/server/0025-Snowman-drop-and-put-back-pumpkin.patch @@ -1,4 +1,4 @@ -From f7ebb12367af42882a2ad9c9cc7e4414197bc40b Mon Sep 17 00:00:00 2001 +From 5081aa5658129a710de30dd52ed5053707b0887e Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 3 May 2019 23:58:44 -0500 Subject: [PATCH] Snowman drop and put back pumpkin @@ -9,7 +9,7 @@ Subject: [PATCH] Snowman drop and put back pumpkin 2 files changed, 21 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index 65d7468997..3f6f8ad454 100644 +index 65d746899..3f6f8ad45 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java @@ -7,6 +7,7 @@ import org.bukkit.craftbukkit.event.CraftEventFactory; @@ -47,7 +47,7 @@ index 65d7468997..3f6f8ad454 100644 return tryRide(entityhuman, enumhand); // Purpur } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c9b41cebd6..56b67c4082 100644 +index c9b41cebd..56b67c408 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -540,11 +540,15 @@ public class PurpurWorldConfig { @@ -67,5 +67,5 @@ index c9b41cebd6..56b67c4082 100644 public boolean spiderRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0025-Ender-dragon-always-drop-egg.patch b/patches/server/0026-Ender-dragon-always-drop-egg.patch similarity index 95% rename from patches/server/0025-Ender-dragon-always-drop-egg.patch rename to patches/server/0026-Ender-dragon-always-drop-egg.patch index c4930414c..db46b1d48 100644 --- a/patches/server/0025-Ender-dragon-always-drop-egg.patch +++ b/patches/server/0026-Ender-dragon-always-drop-egg.patch @@ -1,4 +1,4 @@ -From 5b5cebc495d4db4f7eddd40c578e7d4fa9faf36a Mon Sep 17 00:00:00 2001 +From 6e1fb8864c1acffb17aa73a8d86d2090c574f2b1 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 7 Feb 2020 04:42:57 -0600 Subject: [PATCH] Ender dragon always drop egg @@ -9,7 +9,7 @@ Subject: [PATCH] Ender dragon always drop egg 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/EnderDragonBattle.java b/src/main/java/net/minecraft/server/EnderDragonBattle.java -index 687efa022d..ead3346072 100644 +index 687efa022..ead334607 100644 --- a/src/main/java/net/minecraft/server/EnderDragonBattle.java +++ b/src/main/java/net/minecraft/server/EnderDragonBattle.java @@ -21,7 +21,7 @@ public class EnderDragonBattle { @@ -39,7 +39,7 @@ index 687efa022d..ead3346072 100644 return this.l; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 56b67c4082..cc6f8563b1 100644 +index 56b67c408..cc6f8563b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -206,11 +206,13 @@ public class PurpurWorldConfig { @@ -57,5 +57,5 @@ index 56b67c4082..cc6f8563b1 100644 public boolean endermanRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0026-Ender-dragon-always-drop-full-exp.patch b/patches/server/0027-Ender-dragon-always-drop-full-exp.patch similarity index 94% rename from patches/server/0026-Ender-dragon-always-drop-full-exp.patch rename to patches/server/0027-Ender-dragon-always-drop-full-exp.patch index 0bb18e27e..81238d5cd 100644 --- a/patches/server/0026-Ender-dragon-always-drop-full-exp.patch +++ b/patches/server/0027-Ender-dragon-always-drop-full-exp.patch @@ -1,4 +1,4 @@ -From 5cfee6aa56787421ed223aad2ebcbf6fd108be63 Mon Sep 17 00:00:00 2001 +From fad47974bd2b9b98b527eca3f3f4322f4fe6ba4f Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 24 Aug 2019 14:42:54 -0500 Subject: [PATCH] Ender dragon always drop full exp @@ -9,7 +9,7 @@ Subject: [PATCH] Ender dragon always drop full exp 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java -index ab1747198a..f06fde3242 100644 +index 54b63395f..e89b96605 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java @@ -641,7 +641,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { @@ -22,7 +22,7 @@ index ab1747198a..f06fde3242 100644 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index cc6f8563b1..426e6f18bd 100644 +index cc6f8563b..426e6f18b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -207,12 +207,14 @@ public class PurpurWorldConfig { @@ -41,5 +41,5 @@ index cc6f8563b1..426e6f18bd 100644 public boolean endermanRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0027-Signs-editable-on-right-click.patch b/patches/server/0028-Signs-editable-on-right-click.patch similarity index 94% rename from patches/server/0027-Signs-editable-on-right-click.patch rename to patches/server/0028-Signs-editable-on-right-click.patch index d7c522855..b0d8f7fa5 100644 --- a/patches/server/0027-Signs-editable-on-right-click.patch +++ b/patches/server/0028-Signs-editable-on-right-click.patch @@ -1,4 +1,4 @@ -From d724d49d366b35c1181dd2fc15e42daade8f1ce6 Mon Sep 17 00:00:00 2001 +From ce9eea9c6ac12ed7d3a82601390684864ab5f0c2 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 24 May 2019 02:39:25 -0500 Subject: [PATCH] Signs editable on right click @@ -10,7 +10,7 @@ Subject: [PATCH] Signs editable on right click 3 files changed, 17 insertions(+) diff --git a/src/main/java/net/minecraft/server/BlockSign.java b/src/main/java/net/minecraft/server/BlockSign.java -index 8a31054a1d..d20849ce2b 100644 +index 8a31054a1..d20849ce2 100644 --- a/src/main/java/net/minecraft/server/BlockSign.java +++ b/src/main/java/net/minecraft/server/BlockSign.java @@ -56,6 +56,17 @@ public abstract class BlockSign extends BlockTileEntity implements IBlockWaterlo @@ -32,7 +32,7 @@ index 8a31054a1d..d20849ce2b 100644 } else { return EnumInteractionResult.PASS; diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java -index 0e9a90b70f..099d98e04c 100644 +index 0e9a90b70..099d98e04 100644 --- a/src/main/java/net/minecraft/server/TileEntitySign.java +++ b/src/main/java/net/minecraft/server/TileEntitySign.java @@ -109,6 +109,7 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // @@ -44,7 +44,7 @@ index 0e9a90b70f..099d98e04c 100644 // Paper start //this.c = entityhuman; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 426e6f18bd..f098a36b51 100644 +index 426e6f18b..f098a36b5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -65,6 +65,11 @@ public class PurpurWorldConfig { @@ -60,5 +60,5 @@ index 426e6f18bd..f098a36b51 100644 public boolean batRidableInWater = false; public boolean batRequireShiftToMount = true; -- -2.24.0 +2.26.2 diff --git a/patches/server/0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 91% rename from patches/server/0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch index 1dd0ffdbf..caeb8e5a9 100644 --- a/patches/server/0028-Fix-outdated-server-showing-in-ping-before-server-fu.patch +++ b/patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch @@ -1,4 +1,4 @@ -From be19ef44f61995d316120b8dd763c91cd8a2d56d Mon Sep 17 00:00:00 2001 +From 8dc9cf85d82ebcfb89d97fb0bd172bb58794b9d4 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 4 Jun 2019 15:50:08 -0500 Subject: [PATCH] Fix 'outdated server' showing in ping before server fully @@ -9,7 +9,7 @@ Subject: [PATCH] Fix 'outdated server' showing in ping before server fully 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/minecraft/server/PacketStatusListener.java b/src/main/java/net/minecraft/server/PacketStatusListener.java -index 4bb21c48bd..30f16db02c 100644 +index 4bb21c48b..30f16db02 100644 --- a/src/main/java/net/minecraft/server/PacketStatusListener.java +++ b/src/main/java/net/minecraft/server/PacketStatusListener.java @@ -135,6 +135,7 @@ public class PacketStatusListener implements PacketStatusInListener { @@ -21,5 +21,5 @@ index 4bb21c48bd..30f16db02c 100644 // Paper end } -- -2.24.0 +2.26.2 diff --git a/patches/server/0029-Make-Iron-Golems-Swim.patch b/patches/server/0030-Make-Iron-Golems-Swim.patch similarity index 93% rename from patches/server/0029-Make-Iron-Golems-Swim.patch rename to patches/server/0030-Make-Iron-Golems-Swim.patch index bbb7a76fc..ed5c72caa 100644 --- a/patches/server/0029-Make-Iron-Golems-Swim.patch +++ b/patches/server/0030-Make-Iron-Golems-Swim.patch @@ -1,4 +1,4 @@ -From 7091b58fda2ba308981493e7d38cb0d28e34b871 Mon Sep 17 00:00:00 2001 +From 2379deeae65cfb447a5c515621504e1092df675f Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 15 Jun 2019 03:12:15 -0500 Subject: [PATCH] Make Iron Golems Swim @@ -9,7 +9,7 @@ Subject: [PATCH] Make Iron Golems Swim 2 files changed, 3 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityIronGolem.java b/src/main/java/net/minecraft/server/EntityIronGolem.java -index 288a043fbd..0cc3b8eb01 100644 +index 288a043fb..0cc3b8eb0 100644 --- a/src/main/java/net/minecraft/server/EntityIronGolem.java +++ b/src/main/java/net/minecraft/server/EntityIronGolem.java @@ -36,6 +36,7 @@ public class EntityIronGolem extends EntityGolem { @@ -21,7 +21,7 @@ index 288a043fbd..0cc3b8eb01 100644 this.goalSelector.a(1, new PathfinderGoalMeleeAttack(this, 1.0D, true)); this.goalSelector.a(2, new PathfinderGoalMoveTowardsTarget(this, 0.9D, 32.0F)); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f098a36b51..a077819292 100644 +index f098a36b5..a07781929 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -333,10 +333,12 @@ public class PurpurWorldConfig { @@ -38,5 +38,5 @@ index f098a36b51..a077819292 100644 public boolean llamaRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0030-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/server/0031-Allow-soil-to-moisten-from-water-directly-under-it.patch similarity index 94% rename from patches/server/0030-Allow-soil-to-moisten-from-water-directly-under-it.patch rename to patches/server/0031-Allow-soil-to-moisten-from-water-directly-under-it.patch index fa6fd2196..2257d5a9f 100644 --- a/patches/server/0030-Allow-soil-to-moisten-from-water-directly-under-it.patch +++ b/patches/server/0031-Allow-soil-to-moisten-from-water-directly-under-it.patch @@ -1,4 +1,4 @@ -From 107b47e289b36fc4e4f9568dbf0958ed0cad3101 Mon Sep 17 00:00:00 2001 +From e011cfd4126e1395968162a6cab6efb62c3eb9f2 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 21 Jun 2019 14:37:10 -0500 Subject: [PATCH] Allow soil to moisten from water directly under it @@ -9,7 +9,7 @@ Subject: [PATCH] Allow soil to moisten from water directly under it 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/minecraft/server/BlockSoil.java b/src/main/java/net/minecraft/server/BlockSoil.java -index b6561f2c79..f2ab3ee011 100644 +index b6561f2c7..f2ab3ee01 100644 --- a/src/main/java/net/minecraft/server/BlockSoil.java +++ b/src/main/java/net/minecraft/server/BlockSoil.java @@ -1,6 +1,5 @@ @@ -47,7 +47,7 @@ index b6561f2c79..f2ab3ee011 100644 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a077819292..e2bda806ec 100644 +index a07781929..e2bda806e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -65,6 +65,11 @@ public class PurpurWorldConfig { @@ -63,5 +63,5 @@ index a077819292..e2bda806ec 100644 private void signSettings() { signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit); -- -2.24.0 +2.26.2 diff --git a/patches/server/0031-Controllable-Minecarts.patch b/patches/server/0032-Controllable-Minecarts.patch similarity index 96% rename from patches/server/0031-Controllable-Minecarts.patch rename to patches/server/0032-Controllable-Minecarts.patch index 791571383..a2055db59 100644 --- a/patches/server/0031-Controllable-Minecarts.patch +++ b/patches/server/0032-Controllable-Minecarts.patch @@ -1,4 +1,4 @@ -From 22464945049dd22fcd1a5ccf19c4985e6f8d011b Mon Sep 17 00:00:00 2001 +From 541d671db22a2a086ddeba4f4c5ba8eaf434c54c Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 29 Jun 2019 02:32:40 -0500 Subject: [PATCH] Controllable Minecarts @@ -11,10 +11,10 @@ Subject: [PATCH] Controllable Minecarts 4 files changed, 76 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 197953e19f..5d39d86f0f 100644 +index d470c586a..08645bd03 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1346,6 +1346,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1531,6 +1531,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.inLava = true; } @@ -23,7 +23,7 @@ index 197953e19f..5d39d86f0f 100644 return this.inLava; } diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java -index 665bbe07fa..1f3e5bd288 100644 +index 665bbe07f..1f3e5bd28 100644 --- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java +++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java @@ -357,12 +357,50 @@ public abstract class EntityMinecartAbstract extends Entity { @@ -78,7 +78,7 @@ index 665bbe07fa..1f3e5bd288 100644 this.setMot(new Vec3D(this.getMot().x * this.derailedX, this.getMot().y * this.derailedY, this.getMot().z * this.derailedZ)); // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/ItemMinecart.java b/src/main/java/net/minecraft/server/ItemMinecart.java -index b73e317fbb..e1337a9c04 100644 +index b73e317fb..e1337a9c0 100644 --- a/src/main/java/net/minecraft/server/ItemMinecart.java +++ b/src/main/java/net/minecraft/server/ItemMinecart.java @@ -103,8 +103,10 @@ public class ItemMinecart extends Item { @@ -103,7 +103,7 @@ index b73e317fbb..e1337a9c04 100644 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index e2bda806ec..f8992136a7 100644 +index e2bda806e..f8992136a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -1,10 +1,16 @@ @@ -157,5 +157,5 @@ index e2bda806ec..f8992136a7 100644 public boolean batRidableInWater = false; public boolean batRequireShiftToMount = true; -- -2.24.0 +2.26.2 diff --git a/patches/server/0032-Signs-allow-color-codes.patch b/patches/server/0033-Signs-allow-color-codes.patch similarity index 94% rename from patches/server/0032-Signs-allow-color-codes.patch rename to patches/server/0033-Signs-allow-color-codes.patch index 745a79876..a1e0c3f4d 100644 --- a/patches/server/0032-Signs-allow-color-codes.patch +++ b/patches/server/0033-Signs-allow-color-codes.patch @@ -1,4 +1,4 @@ -From cf9b6fc643b669c8ecb12ae738fae6269ba21867 Mon Sep 17 00:00:00 2001 +From a0ea1376878fa8133038da715d91e313a60d4329 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 6 Jun 2019 17:40:30 -0500 Subject: [PATCH] Signs allow color codes @@ -11,7 +11,7 @@ Subject: [PATCH] Signs allow color codes 4 files changed, 25 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 4ecc89ac44..2a70beedc2 100644 +index 4ecc89ac4..2a70beedc 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -1148,6 +1148,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -23,10 +23,10 @@ index 4ecc89ac44..2a70beedc2 100644 } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 7123e197c7..4ac20e1ecc 100644 +index 1859cd296..944610737 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -2623,6 +2623,14 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2640,6 +2640,14 @@ public class PlayerConnection implements PacketListenerPlayIn { } } // Paper end @@ -42,7 +42,7 @@ index 7123e197c7..4ac20e1ecc 100644 } SignChangeEvent event = new SignChangeEvent((org.bukkit.craftbukkit.block.CraftBlock) player.getWorld().getBlockAt(x, y, z), this.server.getPlayer(this.player), lines); diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java -index 099d98e04c..19d76c8cce 100644 +index 099d98e04..19d76c8cc 100644 --- a/src/main/java/net/minecraft/server/TileEntitySign.java +++ b/src/main/java/net/minecraft/server/TileEntitySign.java @@ -89,6 +89,20 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // @@ -67,7 +67,7 @@ index 099d98e04c..19d76c8cce 100644 @Override public PacketPlayOutTileEntityData getUpdatePacket() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f8992136a7..94744c78ba 100644 +index f8992136a..94744c78b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -76,8 +76,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0033-Campfires-have-regen-effect.patch b/patches/server/0034-Campfires-have-regen-effect.patch similarity index 97% rename from patches/server/0033-Campfires-have-regen-effect.patch rename to patches/server/0034-Campfires-have-regen-effect.patch index 18c5f20dd..8007b5e2d 100644 --- a/patches/server/0033-Campfires-have-regen-effect.patch +++ b/patches/server/0034-Campfires-have-regen-effect.patch @@ -1,4 +1,4 @@ -From d89c8591d4ebe87d0aeadf9a92f5a9ca85a1beba Mon Sep 17 00:00:00 2001 +From 47201ce57f115901505987858cc16e919b551f0c Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 19 May 2019 18:11:53 -0500 Subject: [PATCH] Campfires have regen effect @@ -12,7 +12,7 @@ Subject: [PATCH] Campfires have regen effect 5 files changed, 92 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minecraft/server/BlockCampfire.java b/src/main/java/net/minecraft/server/BlockCampfire.java -index 6303be944c..65f8d803b8 100644 +index 6303be944..65f8d803b 100644 --- a/src/main/java/net/minecraft/server/BlockCampfire.java +++ b/src/main/java/net/minecraft/server/BlockCampfire.java @@ -8,7 +8,7 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged @@ -25,10 +25,10 @@ index 6303be944c..65f8d803b8 100644 public static final BlockStateDirection e = BlockProperties.N; private static final VoxelShape f = Block.a(6.0D, 0.0D, 6.0D, 10.0D, 16.0D, 10.0D); diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index ea245de18c..10c222ddb2 100644 +index bf82399c8..10af384d6 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2791,10 +2791,19 @@ public abstract class EntityLiving extends Entity { +@@ -2798,10 +2798,19 @@ public abstract class EntityLiving extends Entity { } public boolean hasLineOfSight(Entity entity) { @@ -52,7 +52,7 @@ index ea245de18c..10c222ddb2 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityPotion.java b/src/main/java/net/minecraft/server/EntityPotion.java -index b56b021b4c..fcc5a5c234 100644 +index b56b021b4..fcc5a5c23 100644 --- a/src/main/java/net/minecraft/server/EntityPotion.java +++ b/src/main/java/net/minecraft/server/EntityPotion.java @@ -92,6 +92,7 @@ public class EntityPotion extends EntityProjectile { @@ -96,7 +96,7 @@ index b56b021b4c..fcc5a5c234 100644 AxisAlignedBB axisalignedbb = this.getBoundingBox().grow(4.0D, 2.0D, 4.0D); List list = this.world.a(EntityLiving.class, axisalignedbb, EntityPotion.e); diff --git a/src/main/java/net/minecraft/server/TileEntityCampfire.java b/src/main/java/net/minecraft/server/TileEntityCampfire.java -index a1580b8c6d..618ca2d763 100644 +index a1580b8c6..618ca2d76 100644 --- a/src/main/java/net/minecraft/server/TileEntityCampfire.java +++ b/src/main/java/net/minecraft/server/TileEntityCampfire.java @@ -14,6 +14,7 @@ public class TileEntityCampfire extends TileEntity implements Clearable, ITickab @@ -165,7 +165,7 @@ index a1580b8c6d..618ca2d763 100644 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 94744c78ba..d8d95d787f 100644 +index 94744c78b..d8d95d787 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -71,6 +71,29 @@ public class PurpurWorldConfig { @@ -199,5 +199,5 @@ index 94744c78ba..d8d95d787f 100644 private void farmlandSettings() { farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); -- -2.24.0 +2.26.2 diff --git a/patches/server/0034-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0035-Disable-loot-drops-on-death-by-cramming.patch similarity index 94% rename from patches/server/0034-Disable-loot-drops-on-death-by-cramming.patch rename to patches/server/0035-Disable-loot-drops-on-death-by-cramming.patch index 8ae8632c0..f7935765b 100644 --- a/patches/server/0034-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/server/0035-Disable-loot-drops-on-death-by-cramming.patch @@ -1,4 +1,4 @@ -From 446502ec75432982c848f4a2e84eb4c7824de048 Mon Sep 17 00:00:00 2001 +From 0052f3bced71e7dbbf3d28cfb11bfb2824596d94 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Wed, 3 Jul 2019 23:58:31 -0500 Subject: [PATCH] Disable loot drops on death by cramming @@ -9,7 +9,7 @@ Subject: [PATCH] Disable loot drops on death by cramming 2 files changed, 4 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 10c222ddb2..21b5bc47d7 100644 +index 10af384d6..4e23d6d3a 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -1374,8 +1374,10 @@ public abstract class EntityLiving extends Entity { @@ -24,7 +24,7 @@ index 10c222ddb2..21b5bc47d7 100644 deathEvent = CraftEventFactory.callEntityDeathEvent(this, this.drops); // Paper } else { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d8d95d787f..8c84431e59 100644 +index d8d95d787..8c84431e5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -112,6 +112,7 @@ public class PurpurWorldConfig { @@ -44,5 +44,5 @@ index d8d95d787f..8c84431e59 100644 public boolean batRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0035-Campfires-burn-out-in-rain.patch b/patches/server/0036-Campfires-burn-out-in-rain.patch similarity index 94% rename from patches/server/0035-Campfires-burn-out-in-rain.patch rename to patches/server/0036-Campfires-burn-out-in-rain.patch index 78e5227da..bb4753ff0 100644 --- a/patches/server/0035-Campfires-burn-out-in-rain.patch +++ b/patches/server/0036-Campfires-burn-out-in-rain.patch @@ -1,4 +1,4 @@ -From f8286ee301aafa334f5f547a3b0e2763dbaf79a7 Mon Sep 17 00:00:00 2001 +From e95433c37c07dd0343e1336c9a49661974ddc28f Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 6 Jun 2019 21:30:49 -0500 Subject: [PATCH] Campfires burn out in rain @@ -10,10 +10,10 @@ Subject: [PATCH] Campfires burn out in rain 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java -index 8c8dc9d6b8..13981967b3 100644 +index 9c7faa2bd..97e553b38 100644 --- a/src/main/java/net/minecraft/server/Block.java +++ b/src/main/java/net/minecraft/server/Block.java -@@ -394,7 +394,7 @@ public class Block implements IMaterial { +@@ -395,7 +395,7 @@ public class Block implements IMaterial { PacketDebug.a(world, blockposition); } @@ -23,7 +23,7 @@ index 8c8dc9d6b8..13981967b3 100644 } diff --git a/src/main/java/net/minecraft/server/BlockCampfire.java b/src/main/java/net/minecraft/server/BlockCampfire.java -index 65f8d803b8..3b95dfaaae 100644 +index 65f8d803b..3b95dfaaa 100644 --- a/src/main/java/net/minecraft/server/BlockCampfire.java +++ b/src/main/java/net/minecraft/server/BlockCampfire.java @@ -7,7 +7,7 @@ import javax.annotation.Nullable; @@ -58,7 +58,7 @@ index 65f8d803b8..3b95dfaaae 100644 public IBlockData updateState(IBlockData iblockdata, EnumDirection enumdirection, IBlockData iblockdata1, GeneratorAccess generatoraccess, BlockPosition blockposition, BlockPosition blockposition1) { if ((Boolean) iblockdata.get(BlockCampfire.d)) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 8c84431e59..a761b2c734 100644 +index 8c84431e5..a761b2c73 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -81,6 +81,7 @@ public class PurpurWorldConfig { @@ -78,5 +78,5 @@ index 8c84431e59..a761b2c734 100644 public boolean farmlandGetsMoistFromBelow = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0036-Campfires-should-fall-with-gravity.patch b/patches/server/0037-Campfires-should-fall-with-gravity.patch similarity index 97% rename from patches/server/0036-Campfires-should-fall-with-gravity.patch rename to patches/server/0037-Campfires-should-fall-with-gravity.patch index 56446726c..0db8bb44b 100644 --- a/patches/server/0036-Campfires-should-fall-with-gravity.patch +++ b/patches/server/0037-Campfires-should-fall-with-gravity.patch @@ -1,4 +1,4 @@ -From 94def13a47b03244a57d1da80c6a9839cd7a9fc3 Mon Sep 17 00:00:00 2001 +From dd79210dd48515873533b7a50d14eab5db537495 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 23 May 2019 16:20:21 -0500 Subject: [PATCH] Campfires should fall with gravity @@ -9,7 +9,7 @@ Subject: [PATCH] Campfires should fall with gravity 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/BlockCampfire.java b/src/main/java/net/minecraft/server/BlockCampfire.java -index 3b95dfaaae..418fa6d1fe 100644 +index 3b95dfaaa..418fa6d1f 100644 --- a/src/main/java/net/minecraft/server/BlockCampfire.java +++ b/src/main/java/net/minecraft/server/BlockCampfire.java @@ -9,7 +9,7 @@ public class BlockCampfire extends BlockTileEntity implements IBlockWaterlogged @@ -59,7 +59,7 @@ index 3b95dfaaae..418fa6d1fe 100644 if (flag) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a761b2c734..d6405b2ec5 100644 +index a761b2c73..d6405b2ec 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -82,6 +82,7 @@ public class PurpurWorldConfig { @@ -79,5 +79,5 @@ index a761b2c734..d6405b2ec5 100644 public boolean farmlandGetsMoistFromBelow = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0037-Dont-send-useless-entity-packets.patch b/patches/server/0038-Dont-send-useless-entity-packets.patch similarity index 93% rename from patches/server/0037-Dont-send-useless-entity-packets.patch rename to patches/server/0038-Dont-send-useless-entity-packets.patch index cd784092b..51a4484dc 100644 --- a/patches/server/0037-Dont-send-useless-entity-packets.patch +++ b/patches/server/0038-Dont-send-useless-entity-packets.patch @@ -1,4 +1,4 @@ -From 041d671573323148c0992ea04a534ffe6beee106 Mon Sep 17 00:00:00 2001 +From 610bf17eeaba736705cb6223e21e9f03327de3b3 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 6 Jul 2019 17:00:04 -0500 Subject: [PATCH] Dont send useless entity packets @@ -10,10 +10,10 @@ Subject: [PATCH] Dont send useless entity packets 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java -index 5cc89c0cf9..390cb8e767 100644 +index 1bd703848..adf7c9180 100644 --- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java +++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java -@@ -169,6 +169,7 @@ public class EntityTrackerEntry { +@@ -170,6 +170,7 @@ public class EntityTrackerEntry { this.o = 0; packet1 = new PacketPlayOutEntityTeleport(this.tracker); } @@ -21,7 +21,7 @@ index 5cc89c0cf9..390cb8e767 100644 } if ((this.e || this.tracker.impulse || this.tracker instanceof EntityLiving && ((EntityLiving) this.tracker).isGliding()) && this.tickCounter > 0) { -@@ -255,6 +256,22 @@ public class EntityTrackerEntry { +@@ -256,6 +257,22 @@ public class EntityTrackerEntry { } @@ -45,7 +45,7 @@ index 5cc89c0cf9..390cb8e767 100644 this.tracker.c(entityplayer); entityplayer.c(this.tracker); diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java -index e5da2b19c1..5b1d959354 100644 +index e5da2b19c..5b1d95935 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java @@ -5,11 +5,11 @@ import java.io.IOException; @@ -66,7 +66,7 @@ index e5da2b19c1..5b1d959354 100644 protected boolean h; protected boolean i; diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index d6f82d119e..d3e1c8c407 100644 +index d6f82d119..d3e1c8c40 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -139,6 +139,11 @@ public class PurpurConfig { @@ -82,5 +82,5 @@ index d6f82d119e..d3e1c8c407 100644 getString("settings.timings.url", "https://timings.pl3x.net"); } -- -2.24.0 +2.26.2 diff --git a/patches/server/0038-Implement-AFK-API.patch b/patches/server/0039-Implement-AFK-API.patch similarity index 94% rename from patches/server/0038-Implement-AFK-API.patch rename to patches/server/0039-Implement-AFK-API.patch index d603c5042..7ffc86d05 100644 --- a/patches/server/0038-Implement-AFK-API.patch +++ b/patches/server/0039-Implement-AFK-API.patch @@ -1,4 +1,4 @@ -From 8e1600d2455ebc20f0534f28db43d60b2d8c1538 Mon Sep 17 00:00:00 2001 +From c98618cb1f74db04eb19104e28223a0238d9b696 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 8 Aug 2019 15:29:15 -0500 Subject: [PATCH] Implement AFK API @@ -18,10 +18,10 @@ Subject: [PATCH] Implement AFK API 11 files changed, 111 insertions(+), 25 deletions(-) diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 5d39d86f0f..46bc91524b 100644 +index 08645bd03..580843686 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1438,6 +1438,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1623,6 +1623,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return MathHelper.c(f * f + f1 * f1 + f2 * f2); } @@ -30,7 +30,7 @@ index 5d39d86f0f..46bc91524b 100644 double d3 = this.locX() - d0; double d4 = this.locY() - d1; diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 27cfc6654e..d62174e9c7 100644 +index 27cfc6654..d62174e9c 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -86,6 +86,15 @@ public abstract class EntityHuman extends EntityLiving { @@ -50,7 +50,7 @@ index 27cfc6654e..d62174e9c7 100644 super(EntityTypes.PLAYER, world); this.bV = ItemStack.a; diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 2a70beedc2..96f98926eb 100644 +index 2a70beedc..96f98926e 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -1641,8 +1641,51 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -106,7 +106,7 @@ index 2a70beedc2..96f98926eb 100644 return this.serverStatisticManager; } diff --git a/src/main/java/net/minecraft/server/IEntityAccess.java b/src/main/java/net/minecraft/server/IEntityAccess.java -index e0d97d2c8b..e1a7926d7a 100644 +index e0d97d2c8..e1a7926d7 100644 --- a/src/main/java/net/minecraft/server/IEntityAccess.java +++ b/src/main/java/net/minecraft/server/IEntityAccess.java @@ -150,28 +150,18 @@ public interface IEntityAccess { @@ -151,7 +151,7 @@ index e0d97d2c8b..e1a7926d7a 100644 @Nullable diff --git a/src/main/java/net/minecraft/server/IEntitySelector.java b/src/main/java/net/minecraft/server/IEntitySelector.java -index 1398c47a2f..0bf1a14b7c 100644 +index 1398c47a2..0bf1a14b7 100644 --- a/src/main/java/net/minecraft/server/IEntitySelector.java +++ b/src/main/java/net/minecraft/server/IEntitySelector.java @@ -7,6 +7,7 @@ import javax.annotation.Nullable; @@ -171,7 +171,7 @@ index 1398c47a2f..0bf1a14b7c 100644 public static Predicate a(double d0, double d1, double d2, double d3) { double d4 = d3 * d3; diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 4ac20e1ecc..57e8c22d05 100644 +index 944610737..09cab5a99 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -233,6 +233,12 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -187,7 +187,7 @@ index 4ac20e1ecc..57e8c22d05 100644 this.player.resetIdleTimer(); // CraftBukkit - SPIGOT-854 this.disconnect(new ChatMessage("multiplayer.disconnect.idling", new Object[0])); } -@@ -449,6 +455,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -456,6 +462,8 @@ public class PlayerConnection implements PacketListenerPlayIn { this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -196,7 +196,7 @@ index 4ac20e1ecc..57e8c22d05 100644 // Skip the first time we do this if (true) { // Spigot - don't skip any move events Location oldTo = to.clone(); -@@ -1141,6 +1149,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1158,6 +1166,8 @@ public class PlayerConnection implements PacketListenerPlayIn { this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -206,10 +206,10 @@ index 4ac20e1ecc..57e8c22d05 100644 if (from.getX() != Double.MAX_VALUE) { Location oldTo = to.clone(); diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 40b522a1bf..57ec42c732 100644 +index edf24791b..156c87ed4 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -409,7 +409,7 @@ public class WorldServer extends World { +@@ -846,7 +846,7 @@ public class WorldServer extends World { } if (this.everyoneSleeping && this.players.stream().noneMatch((entityplayer) -> { @@ -218,7 +218,7 @@ index 40b522a1bf..57ec42c732 100644 })) { // CraftBukkit start long l = this.worldData.getDayTime() + 24000L; -@@ -727,7 +727,7 @@ public class WorldServer extends World { +@@ -1165,7 +1165,7 @@ public class WorldServer extends World { while (iterator.hasNext()) { EntityPlayer entityplayer = (EntityPlayer) iterator.next(); @@ -228,7 +228,7 @@ index 40b522a1bf..57ec42c732 100644 } else if (entityplayer.isSleeping()) { ++j; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d6405b2ec5..41dd1b8616 100644 +index d6405b2ec..41dd1b861 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -138,6 +138,17 @@ public class PurpurWorldConfig { @@ -250,7 +250,7 @@ index d6405b2ec5..41dd1b8616 100644 public boolean batRidableInWater = false; public boolean batRequireShiftToMount = true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 141003ca71..e15c123878 100644 +index 141003ca7..e15c12387 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2086,4 +2086,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -276,7 +276,7 @@ index 141003ca71..e15c123878 100644 + // Purpur end } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index f735217e7a..818f8070c5 100644 +index f735217e7..818f8070c 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -207,6 +207,7 @@ public class ActivationRange @@ -288,7 +288,7 @@ index f735217e7a..818f8070c5 100644 ActivationType.MISC.boundingBox = player.getBoundingBox().grow( miscActivationRange, 256, miscActivationRange ); ActivationType.RAIDER.boundingBox = player.getBoundingBox().grow( raiderActivationRange, 256, raiderActivationRange ); diff --git a/src/main/resources/purpur.lang b/src/main/resources/purpur.lang -index 7125c0477e..e925e1374d 100644 +index 7125c0477..e925e1374 100644 --- a/src/main/resources/purpur.lang +++ b/src/main/resources/purpur.lang @@ -1,3 +1,5 @@ diff --git a/patches/server/0039-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch similarity index 94% rename from patches/server/0039-Option-to-toggle-milk-curing-bad-omen.patch rename to patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch index 101574e67..e1170f238 100644 --- a/patches/server/0039-Option-to-toggle-milk-curing-bad-omen.patch +++ b/patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch @@ -1,4 +1,4 @@ -From 28b04ef1fe86e3426ce788782a77877c4ee6e792 Mon Sep 17 00:00:00 2001 +From 1b2547a4ad9ca6eaa524538e0d6a747cf617a600 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Wed, 10 Jul 2019 20:43:05 -0500 Subject: [PATCH] Option to toggle milk curing bad omen @@ -9,7 +9,7 @@ Subject: [PATCH] Option to toggle milk curing bad omen 2 files changed, 5 insertions(+) diff --git a/src/main/java/net/minecraft/server/ItemMilkBucket.java b/src/main/java/net/minecraft/server/ItemMilkBucket.java -index 6b255e09ac..e1d3894ab7 100644 +index 6b255e09a..e1d3894ab 100644 --- a/src/main/java/net/minecraft/server/ItemMilkBucket.java +++ b/src/main/java/net/minecraft/server/ItemMilkBucket.java @@ -20,7 +20,10 @@ public class ItemMilkBucket extends Item { @@ -24,7 +24,7 @@ index 6b255e09ac..e1d3894ab7 100644 return itemstack.isEmpty() ? new ItemStack(Items.BUCKET) : itemstack; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 41dd1b8616..7cbb1df7ab 100644 +index 41dd1b861..7cbb1df7a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -117,6 +117,7 @@ public class PurpurWorldConfig { @@ -44,5 +44,5 @@ index 41dd1b8616..7cbb1df7ab 100644 public boolean idleTimeoutKick = true; -- -2.24.0 +2.26.2 diff --git a/patches/server/0040-Mending-mends-most-damages-equipment-first.patch b/patches/server/0041-Mending-mends-most-damages-equipment-first.patch similarity index 96% rename from patches/server/0040-Mending-mends-most-damages-equipment-first.patch rename to patches/server/0041-Mending-mends-most-damages-equipment-first.patch index d5bda293b..a8e309589 100644 --- a/patches/server/0040-Mending-mends-most-damages-equipment-first.patch +++ b/patches/server/0041-Mending-mends-most-damages-equipment-first.patch @@ -1,4 +1,4 @@ -From 1a2bf40259378ed601f5aa34a4f834d412ac2e0e Mon Sep 17 00:00:00 2001 +From 0b0660101e3557de12bb44ca705c1d736861c7f6 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 14 Jul 2019 19:52:47 -0500 Subject: [PATCH] Mending mends most damages equipment first @@ -11,7 +11,7 @@ Subject: [PATCH] Mending mends most damages equipment first 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/EnchantmentManager.java b/src/main/java/net/minecraft/server/EnchantmentManager.java -index d96c03a1a1..da1cfc1d3f 100644 +index d96c03a1a..da1cfc1d3 100644 --- a/src/main/java/net/minecraft/server/EnchantmentManager.java +++ b/src/main/java/net/minecraft/server/EnchantmentManager.java @@ -246,9 +246,32 @@ public class EnchantmentManager { @@ -49,7 +49,7 @@ index d96c03a1a1..da1cfc1d3f 100644 } @Nullable diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java -index 53c6c33892..0fae3693c9 100644 +index 53c6c3389..0fae3693c 100644 --- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java +++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java @@ -225,7 +225,7 @@ public class EntityExperienceOrb extends Entity { @@ -62,7 +62,7 @@ index 53c6c33892..0fae3693c9 100644 if (entry != null) { ItemStack itemstack = (ItemStack) entry.getValue(); diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 413b888a04..ce6a466852 100644 +index 413b888a0..ce6a46685 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -370,10 +370,19 @@ public final class ItemStack { @@ -86,7 +86,7 @@ index 413b888a04..ce6a466852 100644 return this.tag == null ? 0 : this.tag.getInt("Damage"); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7cbb1df7ab..b76a8c5bee 100644 +index 7cbb1df7a..b76a8c5be 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -118,6 +118,7 @@ public class PurpurWorldConfig { @@ -106,5 +106,5 @@ index 7cbb1df7ab..b76a8c5bee 100644 public boolean idleTimeoutKick = true; -- -2.24.0 +2.26.2 diff --git a/patches/server/0041-Tulips-change-fox-type.patch b/patches/server/0042-Tulips-change-fox-type.patch similarity index 96% rename from patches/server/0041-Tulips-change-fox-type.patch rename to patches/server/0042-Tulips-change-fox-type.patch index 62d91c158..d19767963 100644 --- a/patches/server/0041-Tulips-change-fox-type.patch +++ b/patches/server/0042-Tulips-change-fox-type.patch @@ -1,4 +1,4 @@ -From fe135b5240b7ddecd167e01f167a86b2ee92892e Mon Sep 17 00:00:00 2001 +From 5b624aa8deb3cfbba28a2f8dbee3ac28b61afad6 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 13 Jul 2019 15:56:22 -0500 Subject: [PATCH] Tulips change fox type @@ -10,7 +10,7 @@ Subject: [PATCH] Tulips change fox type 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java -index 4f53090d3d..13afd7bcde 100644 +index 4f53090d3..13afd7bcd 100644 --- a/src/main/java/net/minecraft/server/EntityFox.java +++ b/src/main/java/net/minecraft/server/EntityFox.java @@ -37,9 +37,9 @@ public class EntityFox extends EntityAnimal { @@ -75,7 +75,7 @@ index 4f53090d3d..13afd7bcde 100644 public void onMount(EntityHuman entityhuman) { super.onMount(entityhuman); diff --git a/src/main/java/net/minecraft/server/Items.java b/src/main/java/net/minecraft/server/Items.java -index 54670f64cf..9c9b93f280 100644 +index 54670f64c..9c9b93f28 100644 --- a/src/main/java/net/minecraft/server/Items.java +++ b/src/main/java/net/minecraft/server/Items.java @@ -106,8 +106,8 @@ public class Items { @@ -90,7 +90,7 @@ index 54670f64cf..9c9b93f280 100644 public static final Item bd = a(Blocks.OXEYE_DAISY, CreativeModeTab.c); public static final Item be = a(Blocks.CORNFLOWER, CreativeModeTab.c); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b76a8c5bee..a2fce0c635 100644 +index b76a8c5be..a2fce0c63 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -335,10 +335,12 @@ public class PurpurWorldConfig { @@ -107,5 +107,5 @@ index b76a8c5bee..a2fce0c635 100644 public boolean ghastRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0042-Pillager-limits-and-leaders-chance.patch b/patches/server/0043-Pillager-limits-and-leaders-chance.patch similarity index 96% rename from patches/server/0042-Pillager-limits-and-leaders-chance.patch rename to patches/server/0043-Pillager-limits-and-leaders-chance.patch index 4f1d9c017..788736703 100644 --- a/patches/server/0042-Pillager-limits-and-leaders-chance.patch +++ b/patches/server/0043-Pillager-limits-and-leaders-chance.patch @@ -1,4 +1,4 @@ -From 21c076c767f3a22e0ca03b2f0905eb8c6045920c Mon Sep 17 00:00:00 2001 +From 48d14d7c57478a6af1c85d20a59ebef69b43ec9e Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Mon, 22 Jul 2019 14:24:26 -0500 Subject: [PATCH] Pillager limits and leaders chance @@ -10,7 +10,7 @@ Subject: [PATCH] Pillager limits and leaders chance 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java -index 70f43c5159..fa08b8e1ab 100644 +index 70f43c515..fa08b8e1a 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java +++ b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java @@ -143,6 +143,7 @@ public class ChunkProviderGenerate extends ChunkGeneratorAbstract Date: Thu, 16 Jan 2020 14:59:16 -0600 Subject: [PATCH] Make the GUI better @@ -40,7 +40,7 @@ Subject: [PATCH] Make the GUI better create mode 100644 src/main/java/net/pl3x/purpur/util/HighlightErrorConverter.java diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 64adf186d9..b29f5dc8c2 100644 +index 3190c709a..7f2db5f0b 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java @@ -8,6 +8,8 @@ import com.mojang.authlib.GameProfileRepository; @@ -69,7 +69,7 @@ index 64adf186d9..b29f5dc8c2 100644 new com.destroystokyo.paper.console.PaperConsole(DedicatedServer.this).start(); /* jline.console.ConsoleReader bufferedreader = reader; -@@ -420,7 +423,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -421,7 +424,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer @Override public void exit() { if (this.p != null) { @@ -78,7 +78,7 @@ index 64adf186d9..b29f5dc8c2 100644 } if (this.remoteControlListener != null) { -@@ -520,7 +523,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -521,7 +524,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer public void bc() { if (this.p == null) { @@ -88,10 +88,10 @@ index 64adf186d9..b29f5dc8c2 100644 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1da54dba9f..447e9ea4ec 100644 +index 28d92cbce..da8c98356 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1375,6 +1375,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant Date: Sun, 21 Jul 2019 18:01:46 -0500 Subject: [PATCH] Players should not cram to death @@ -8,7 +8,7 @@ Subject: [PATCH] Players should not cram to death 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 96f98926eb..9773923735 100644 +index 96f98926e..977392373 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -1121,7 +1121,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { diff --git a/patches/server/0045-Add-EntityPortalReadyEvent.patch b/patches/server/0046-Add-EntityPortalReadyEvent.patch similarity index 93% rename from patches/server/0045-Add-EntityPortalReadyEvent.patch rename to patches/server/0046-Add-EntityPortalReadyEvent.patch index 6cc1463d1..09550ff51 100644 --- a/patches/server/0045-Add-EntityPortalReadyEvent.patch +++ b/patches/server/0046-Add-EntityPortalReadyEvent.patch @@ -1,4 +1,4 @@ -From b57d0b74f8cafb178eada55ddc0ea8370bc9da1e Mon Sep 17 00:00:00 2001 +From 76ab9614c42d949915127a45567be02453e414ef Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 11 Jan 2020 23:12:52 -0600 Subject: [PATCH] Add EntityPortalReadyEvent @@ -11,7 +11,7 @@ Subject: [PATCH] Add EntityPortalReadyEvent 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/minecraft/server/BlockPortal.java b/src/main/java/net/minecraft/server/BlockPortal.java -index 09c7c13183..6880cdd7f9 100644 +index 09c7c1318..6880cdd7f 100644 --- a/src/main/java/net/minecraft/server/BlockPortal.java +++ b/src/main/java/net/minecraft/server/BlockPortal.java @@ -54,6 +54,7 @@ public class BlockPortal extends Block { @@ -86,7 +86,7 @@ index 09c7c13183..6880cdd7f9 100644 break; // CraftBukkit start - add the block to our list diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 46bc91524b..39bd34ab34 100644 +index 580843686..bdf79302b 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -170,9 +170,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -102,7 +102,7 @@ index 46bc91524b..39bd34ab34 100644 private boolean invulnerable; protected UUID uniqueID; protected String am; -@@ -2287,6 +2287,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2472,6 +2472,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.world.getMethodProfiler().enter("portal"); this.ag = i; this.portalCooldown = this.ba(); @@ -111,7 +111,7 @@ index 46bc91524b..39bd34ab34 100644 if (this instanceof EntityPlayer) { ((EntityPlayer) this).a(this.world.worldProvider.getDimensionManager().getType() == DimensionManager.NETHER ? DimensionManager.OVERWORLD : DimensionManager.NETHER, PlayerTeleportEvent.TeleportCause.NETHER_PORTAL); diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java -index f84dd6d9be..f50e9670bc 100644 +index f84dd6d9b..f50e9670b 100644 --- a/src/main/java/net/minecraft/server/PortalTravelAgent.java +++ b/src/main/java/net/minecraft/server/PortalTravelAgent.java @@ -11,6 +11,7 @@ public class PortalTravelAgent { @@ -141,7 +141,7 @@ index f84dd6d9be..f50e9670bc 100644 } } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 8018bf6dd8..3546424a1c 100644 +index 156c87ed4..610542dc8 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -76,7 +76,7 @@ public class WorldServer extends World { @@ -152,7 +152,7 @@ index 8018bf6dd8..3546424a1c 100644 + public PortalTravelAgent portalTravelAgent; // Purpur - private final -> public non-final private final TickListServer nextTickListBlock; private final TickListServer nextTickListFluid; - private final Set navigators; + private final Set navigators; final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet navigatorsForIteration = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(2048, 0.5f, 2048, 0.2); // Tuinity - make removing entities while ticking safe -- -2.24.0 +2.26.2 diff --git a/patches/server/0046-Implement-elytra-settings.patch b/patches/server/0047-Implement-elytra-settings.patch similarity index 88% rename from patches/server/0046-Implement-elytra-settings.patch rename to patches/server/0047-Implement-elytra-settings.patch index 7465a38fd..5dd308246 100644 --- a/patches/server/0046-Implement-elytra-settings.patch +++ b/patches/server/0047-Implement-elytra-settings.patch @@ -1,4 +1,4 @@ -From 06d3e2899cea8bb9a7a4143b6acf6afc157e14f3 Mon Sep 17 00:00:00 2001 +From 2e3222b946ccfa16d3474c905c0882cc8476fb57 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 25 Jul 2019 18:07:37 -0500 Subject: [PATCH] Implement elytra settings @@ -8,12 +8,11 @@ Subject: [PATCH] Implement elytra settings .../java/net/minecraft/server/ItemFireworks.java | 8 ++++++++ src/main/java/net/minecraft/server/ItemStack.java | 8 +++++++- src/main/java/net/minecraft/server/ItemTrident.java | 10 ++++++++++ - src/main/java/net/minecraft/server/Vec3D.java | 1 + .../java/net/pl3x/purpur/PurpurWorldConfig.java | 13 +++++++++++++ - 6 files changed, 49 insertions(+), 4 deletions(-) + 5 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 21b5bc47d7..c1cc24cf11 100644 +index 4e23d6d3a..677c2dc4f 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2658,9 +2658,16 @@ public abstract class EntityLiving extends Entity { @@ -26,7 +25,7 @@ index 21b5bc47d7..c1cc24cf11 100644 + // Purpur start + int damage = world.purpurConfig.elytraDamagePerSecond; + if (world.purpurConfig.elytraDamageMultiplyBySpeed > 0) { -+ double speed = getMot().length(); ++ double speed = getMot().magnitudeSquared(); + if (speed > world.purpurConfig.elytraDamageMultiplyBySpeed) { + damage *= (int) speed; + } @@ -37,7 +36,7 @@ index 21b5bc47d7..c1cc24cf11 100644 } else { flag = false; diff --git a/src/main/java/net/minecraft/server/ItemFireworks.java b/src/main/java/net/minecraft/server/ItemFireworks.java -index bd524a35bb..c0e8cd0cdc 100644 +index bd524a35b..c0e8cd0cd 100644 --- a/src/main/java/net/minecraft/server/ItemFireworks.java +++ b/src/main/java/net/minecraft/server/ItemFireworks.java @@ -39,6 +39,14 @@ public class ItemFireworks extends Item { @@ -56,7 +55,7 @@ index bd524a35bb..c0e8cd0cdc 100644 itemstack.subtract(1); } else ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory(); diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index ce6a466852..8c3bbef666 100644 +index ce6a46685..8c3bbef66 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -402,7 +402,7 @@ public final class ItemStack { @@ -82,7 +81,7 @@ index ce6a466852..8c3bbef666 100644 if (this.count == 1 && t0 instanceof EntityHuman) { org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((EntityHuman) t0, this); diff --git a/src/main/java/net/minecraft/server/ItemTrident.java b/src/main/java/net/minecraft/server/ItemTrident.java -index f571a1586d..c26300eacd 100644 +index f571a1586..c26300eac 100644 --- a/src/main/java/net/minecraft/server/ItemTrident.java +++ b/src/main/java/net/minecraft/server/ItemTrident.java @@ -100,6 +100,16 @@ public class ItemTrident extends Item { @@ -102,20 +101,8 @@ index f571a1586d..c26300eacd 100644 entityhuman.h((double) f2, (double) f3, (double) f4); entityhuman.r(20); if (entityhuman.onGround) { -diff --git a/src/main/java/net/minecraft/server/Vec3D.java b/src/main/java/net/minecraft/server/Vec3D.java -index 62a0810062..53e7e82688 100644 ---- a/src/main/java/net/minecraft/server/Vec3D.java -+++ b/src/main/java/net/minecraft/server/Vec3D.java -@@ -100,6 +100,7 @@ public class Vec3D implements IPosition { - return (double) MathHelper.sqrt(this.x * this.x + this.y * this.y + this.z * this.z); - } - -+ public double length() { return this.g(); } // Purpur - OBFHELPER - public double g() { - return this.x * this.x + this.y * this.y + this.z * this.z; - } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 299b080c89..5318a8e327 100644 +index 299b080c8..5318a8e32 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -142,6 +142,19 @@ public class PurpurWorldConfig { @@ -139,5 +126,5 @@ index 299b080c89..5318a8e327 100644 public boolean idleTimeoutTickNearbyEntities = true; public boolean idleTimeoutCountAsSleeping = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0047-Add-blacklist-option-for-grindstone.patch b/patches/server/0048-Add-blacklist-option-for-grindstone.patch similarity index 96% rename from patches/server/0047-Add-blacklist-option-for-grindstone.patch rename to patches/server/0048-Add-blacklist-option-for-grindstone.patch index 44c010fc3..4dbe88569 100644 --- a/patches/server/0047-Add-blacklist-option-for-grindstone.patch +++ b/patches/server/0048-Add-blacklist-option-for-grindstone.patch @@ -1,4 +1,4 @@ -From d445f4a7df0a26d7805584ac4d5939b178a30062 Mon Sep 17 00:00:00 2001 +From dcf936f4a58a869b127053dbface4407d90ba15b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 1 Aug 2019 19:15:12 -0500 Subject: [PATCH] Add blacklist option for grindstone @@ -10,7 +10,7 @@ Subject: [PATCH] Add blacklist option for grindstone 3 files changed, 35 insertions(+) diff --git a/src/main/java/net/minecraft/server/ContainerGrindstone.java b/src/main/java/net/minecraft/server/ContainerGrindstone.java -index ed88e208d0..fcfb4abdc2 100644 +index ed88e208d..fcfb4abdc 100644 --- a/src/main/java/net/minecraft/server/ContainerGrindstone.java +++ b/src/main/java/net/minecraft/server/ContainerGrindstone.java @@ -57,12 +57,24 @@ public class ContainerGrindstone extends Container { @@ -51,7 +51,7 @@ index ed88e208d0..fcfb4abdc2 100644 Map map = EnchantmentManager.a(itemstack); Iterator iterator = map.entrySet().iterator(); diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 8c3bbef666..d5e0578b25 100644 +index 8c3bbef66..d5e0578b2 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -542,6 +542,12 @@ public final class ItemStack { @@ -68,7 +68,7 @@ index 8c3bbef666..d5e0578b25 100644 return this.getItem().f(this); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 5318a8e327..9c60855d66 100644 +index 5318a8e32..9c60855d6 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -8,6 +8,7 @@ import net.minecraft.server.MinecraftKey; @@ -98,5 +98,5 @@ index 5318a8e327..9c60855d66 100644 public boolean signRightClickEdit = false; private void signSettings() { -- -2.24.0 +2.26.2 diff --git a/patches/server/0048-Implement-lagging-threshold.patch b/patches/server/0049-Implement-lagging-threshold.patch similarity index 90% rename from patches/server/0048-Implement-lagging-threshold.patch rename to patches/server/0049-Implement-lagging-threshold.patch index d2625f94c..6a27933b4 100644 --- a/patches/server/0048-Implement-lagging-threshold.patch +++ b/patches/server/0049-Implement-lagging-threshold.patch @@ -1,4 +1,4 @@ -From c123113f0058050b2ff23ae630699d0a9c03bdf2 Mon Sep 17 00:00:00 2001 +From 227bedf9b854210d5b7cd9408ca62f7547ff0170 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 23 Jul 2019 10:07:16 -0500 Subject: [PATCH] Implement lagging threshold @@ -10,7 +10,7 @@ Subject: [PATCH] Implement lagging threshold 3 files changed, 14 insertions(+) diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 447e9ea4ec..60f8b60e4c 100644 +index da8c98356..3568e076e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -184,6 +184,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant Date: Tue, 23 Jul 2019 08:28:21 -0500 Subject: [PATCH] Implement configurable villager brain ticks @@ -9,7 +9,7 @@ Subject: [PATCH] Implement configurable villager brain ticks 2 files changed, 10 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 5b0de0d9d8..843f22260b 100644 +index 5b0de0d9d..843f22260 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java @@ -53,6 +53,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @@ -40,7 +40,7 @@ index 5b0de0d9d8..843f22260b 100644 this.world.getMethodProfiler().exit(); if (!this.et() && this.bB > 0) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 9c60855d66..f1ed653b3a 100644 +index 9c60855d6..f1ed653b3 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -737,10 +737,14 @@ public class PurpurWorldConfig { @@ -59,5 +59,5 @@ index 9c60855d66..f1ed653b3a 100644 public boolean villagerTraderRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0050-Add-option-for-zombies-targetting-turtle-eggs.patch b/patches/server/0051-Add-option-for-zombies-targetting-turtle-eggs.patch similarity index 94% rename from patches/server/0050-Add-option-for-zombies-targetting-turtle-eggs.patch rename to patches/server/0051-Add-option-for-zombies-targetting-turtle-eggs.patch index 264b1b9d6..e7b36c347 100644 --- a/patches/server/0050-Add-option-for-zombies-targetting-turtle-eggs.patch +++ b/patches/server/0051-Add-option-for-zombies-targetting-turtle-eggs.patch @@ -1,4 +1,4 @@ -From d096e6768ecf1714afac203d91cb4b0609e7ae90 Mon Sep 17 00:00:00 2001 +From 89e2ea5817f0cde07833d0f18aecc3fe3ff51a3b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 17 Aug 2019 15:27:09 -0500 Subject: [PATCH] Add option for zombies targetting turtle eggs @@ -9,7 +9,7 @@ Subject: [PATCH] Add option for zombies targetting turtle eggs 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java -index 8d1f04415e..95ae6f3494 100644 +index 8d1f04415..95ae6f349 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java @@ -64,7 +64,7 @@ public class EntityZombie extends EntityMonster { @@ -22,7 +22,7 @@ index 8d1f04415e..95ae6f3494 100644 this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this)); this.targetSelector.a(0, new net.pl3x.purpur.pathfinder.PathfinderGoalHasRider(this)); // Purpur diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f1ed653b3a..114cd3f808 100644 +index f1ed653b3..114cd3f80 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -806,10 +806,12 @@ public class PurpurWorldConfig { @@ -39,5 +39,5 @@ index f1ed653b3a..114cd3f808 100644 public boolean zombieHorseCanSwim = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0051-Implement-bamboo-growth-settings.patch b/patches/server/0052-Implement-bamboo-growth-settings.patch similarity index 97% rename from patches/server/0051-Implement-bamboo-growth-settings.patch rename to patches/server/0052-Implement-bamboo-growth-settings.patch index 231d3bcce..d3b670a59 100644 --- a/patches/server/0051-Implement-bamboo-growth-settings.patch +++ b/patches/server/0052-Implement-bamboo-growth-settings.patch @@ -1,4 +1,4 @@ -From 6653c569a030023fcef774eb65bd80e36c5380fe Mon Sep 17 00:00:00 2001 +From 1a9676ebff9a4a1dc9b6127c2adff3d42f1dbcad Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 23 Aug 2019 20:57:29 -0500 Subject: [PATCH] Implement bamboo growth settings @@ -9,7 +9,7 @@ Subject: [PATCH] Implement bamboo growth settings 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minecraft/server/BlockBamboo.java b/src/main/java/net/minecraft/server/BlockBamboo.java -index 02c548dd9c..016ceebb9d 100644 +index 02c548dd9..016ceebb9 100644 --- a/src/main/java/net/minecraft/server/BlockBamboo.java +++ b/src/main/java/net/minecraft/server/BlockBamboo.java @@ -10,7 +10,7 @@ public class BlockBamboo extends Block implements IBlockFragilePlantElement { @@ -76,7 +76,7 @@ index 02c548dd9c..016ceebb9d 100644 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 114cd3f808..61c19661c3 100644 +index 114cd3f80..61c19661c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -72,6 +72,13 @@ public class PurpurWorldConfig { @@ -94,5 +94,5 @@ index 114cd3f808..61c19661c3 100644 public int campfireRegenDuration = 80; public int campfireRegenRange = 5; -- -2.24.0 +2.26.2 diff --git a/patches/server/0052-Climbing-should-not-bypass-cramming-gamerule.patch b/patches/server/0053-Climbing-should-not-bypass-cramming-gamerule.patch similarity index 87% rename from patches/server/0052-Climbing-should-not-bypass-cramming-gamerule.patch rename to patches/server/0053-Climbing-should-not-bypass-cramming-gamerule.patch index 21e6a2d38..defd4d343 100644 --- a/patches/server/0052-Climbing-should-not-bypass-cramming-gamerule.patch +++ b/patches/server/0053-Climbing-should-not-bypass-cramming-gamerule.patch @@ -1,4 +1,4 @@ -From 1f7d701d09511913123d84fabb0e93c65b92352c Mon Sep 17 00:00:00 2001 +From 8ae63e002d53063369985ba2da34b6a6723b13eb Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 21 Jul 2019 18:06:20 -0500 Subject: [PATCH] Climbing should not bypass cramming gamerule @@ -17,10 +17,10 @@ Subject: [PATCH] Climbing should not bypass cramming gamerule 10 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 39bd34ab34..ce0821a656 100644 +index bdf79302b..92b77ce34 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1573,6 +1573,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1758,6 +1758,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } public boolean isCollidable() { @@ -34,7 +34,7 @@ index 39bd34ab34..ce0821a656 100644 } diff --git a/src/main/java/net/minecraft/server/EntityArmorStand.java b/src/main/java/net/minecraft/server/EntityArmorStand.java -index d35a0b2d94..d4aa9b24f7 100644 +index d35a0b2d9..d4aa9b24f 100644 --- a/src/main/java/net/minecraft/server/EntityArmorStand.java +++ b/src/main/java/net/minecraft/server/EntityArmorStand.java @@ -318,7 +318,7 @@ public class EntityArmorStand extends EntityLiving { @@ -47,7 +47,7 @@ index d35a0b2d94..d4aa9b24f7 100644 } diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java -index 592408bac9..7a740f6768 100644 +index 592408bac..7a740f676 100644 --- a/src/main/java/net/minecraft/server/EntityBat.java +++ b/src/main/java/net/minecraft/server/EntityBat.java @@ -85,7 +85,7 @@ public class EntityBat extends EntityAmbient { @@ -60,7 +60,7 @@ index 592408bac9..7a740f6768 100644 } diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java -index fdf306e80a..563fc8ced0 100644 +index fdf306e80..563fc8ced 100644 --- a/src/main/java/net/minecraft/server/EntityBoat.java +++ b/src/main/java/net/minecraft/server/EntityBoat.java @@ -98,7 +98,7 @@ public class EntityBoat extends Entity { @@ -73,7 +73,7 @@ index fdf306e80a..563fc8ced0 100644 } diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -index f31cb05542..0ecdea6710 100644 +index f31cb0554..0ecdea671 100644 --- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java +++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java @@ -181,7 +181,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven @@ -86,19 +86,19 @@ index f31cb05542..0ecdea6710 100644 } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index c1cc24cf11..0f8ba92a84 100644 +index 677c2dc4f..288942e9d 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2692,7 +2692,7 @@ public abstract class EntityLiving extends Entity { - return; - } +@@ -2694,7 +2694,7 @@ public abstract class EntityLiving extends Entity { // Paper - end don't run getEntities if we're not going to use its result -- List list = this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.a(this)); -+ List list = this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.pushable(this, world.purpurConfig.fixClimbingBypassingCrammingRule)); // Purpur + // Tuinity start - reduce memory allocation from collideNearby + List list = com.tuinity.tuinity.util.CachedLists.getTempGetEntitiesList(); +- this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.a(this), list); ++ this.world.getEntities(this, this.getBoundingBox(), IEntitySelector.pushable(this, world.purpurConfig.fixClimbingBypassingCrammingRule), list); // Purpur + try { + // Tuinity end - reduce memory allocation from collideNearby - if (!list.isEmpty()) { - // Paper - move up -@@ -2830,8 +2830,10 @@ public abstract class EntityLiving extends Entity { +@@ -2837,8 +2837,10 @@ public abstract class EntityLiving extends Entity { } @Override @@ -112,7 +112,7 @@ index c1cc24cf11..0f8ba92a84 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java -index 1f3e5bd288..ae4758f251 100644 +index 1f3e5bd28..ae4758f25 100644 --- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java +++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java @@ -105,7 +105,7 @@ public abstract class EntityMinecartAbstract extends Entity { @@ -125,7 +125,7 @@ index 1f3e5bd288..ae4758f251 100644 } diff --git a/src/main/java/net/minecraft/server/EntityParrot.java b/src/main/java/net/minecraft/server/EntityParrot.java -index 7ba2f3a351..dd2cd7b219 100644 +index 7ba2f3a35..dd2cd7b21 100644 --- a/src/main/java/net/minecraft/server/EntityParrot.java +++ b/src/main/java/net/minecraft/server/EntityParrot.java @@ -392,7 +392,7 @@ public class EntityParrot extends EntityPerchable implements EntityBird { @@ -138,7 +138,7 @@ index 7ba2f3a351..dd2cd7b219 100644 } diff --git a/src/main/java/net/minecraft/server/IEntitySelector.java b/src/main/java/net/minecraft/server/IEntitySelector.java -index 0bf1a14b7c..9f5860ca8b 100644 +index 0bf1a14b7..9f5860ca8 100644 --- a/src/main/java/net/minecraft/server/IEntitySelector.java +++ b/src/main/java/net/minecraft/server/IEntitySelector.java @@ -36,11 +36,17 @@ public final class IEntitySelector { @@ -161,7 +161,7 @@ index 0bf1a14b7c..9f5860ca8b 100644 } else if (entity.world.isClientSide && (!(entity1 instanceof EntityHuman) || !((EntityHuman) entity1).ec())) { return false; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 61c19661c3..1a2512b528 100644 +index 61c19661c..1a2512b52 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -136,6 +136,7 @@ public class PurpurWorldConfig { @@ -181,5 +181,5 @@ index 61c19661c3..1a2512b528 100644 useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); } -- -2.24.0 +2.26.2 diff --git a/patches/server/0053-Option-for-slimes-not-pushable.patch b/patches/server/0054-Option-for-slimes-not-pushable.patch similarity index 91% rename from patches/server/0053-Option-for-slimes-not-pushable.patch rename to patches/server/0054-Option-for-slimes-not-pushable.patch index e37b015df..e06afcab3 100644 --- a/patches/server/0053-Option-for-slimes-not-pushable.patch +++ b/patches/server/0054-Option-for-slimes-not-pushable.patch @@ -1,4 +1,4 @@ -From 1897ed89852ab0037f27f345b3f908c8cfff0e3d Mon Sep 17 00:00:00 2001 +From 9b4138db851b38e9c42ecd40ede122f9b75f2ce1 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 23 Aug 2019 21:56:31 -0500 Subject: [PATCH] Option for slimes not pushable @@ -10,10 +10,10 @@ Subject: [PATCH] Option for slimes not pushable 3 files changed, 22 insertions(+) diff --git a/src/main/java/net/minecraft/server/BlockPiston.java b/src/main/java/net/minecraft/server/BlockPiston.java -index b29525c40d..1e72b3bbc5 100644 +index 8312ed779..a1721c63d 100644 --- a/src/main/java/net/minecraft/server/BlockPiston.java +++ b/src/main/java/net/minecraft/server/BlockPiston.java -@@ -332,6 +332,16 @@ public class BlockPiston extends BlockDirectional { +@@ -347,6 +347,16 @@ public class BlockPiston extends BlockDirectional { } else { event = new BlockPistonRetractEvent(bblock, blocks, CraftBlock.notchToBlockFace(enumdirection1)); } @@ -31,7 +31,7 @@ index b29525c40d..1e72b3bbc5 100644 if (event.isCancelled()) { diff --git a/src/main/java/net/minecraft/server/BlockSlime.java b/src/main/java/net/minecraft/server/BlockSlime.java -index 01f32659d9..52ab86f0b1 100644 +index 01f32659d..52ab86f0b 100644 --- a/src/main/java/net/minecraft/server/BlockSlime.java +++ b/src/main/java/net/minecraft/server/BlockSlime.java @@ -49,4 +49,11 @@ public class BlockSlime extends BlockHalfTransparent { @@ -47,7 +47,7 @@ index 01f32659d9..52ab86f0b1 100644 + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index ab20fa2fae..72ad9dce7d 100644 +index ab20fa2fa..72ad9dce7 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -149,6 +149,11 @@ public class PurpurConfig { @@ -63,5 +63,5 @@ index ab20fa2fae..72ad9dce7d 100644 getString("settings.timings.url", "https://timings.pl3x.net"); } -- -2.24.0 +2.26.2 diff --git a/patches/server/0054-Bring-back-server-name.patch b/patches/server/0055-Bring-back-server-name.patch similarity index 89% rename from patches/server/0054-Bring-back-server-name.patch rename to patches/server/0055-Bring-back-server-name.patch index 16794a4a0..8c758e657 100644 --- a/patches/server/0054-Bring-back-server-name.patch +++ b/patches/server/0055-Bring-back-server-name.patch @@ -1,4 +1,4 @@ -From e82128bc8f0e4381e117ea7d5546b7afd661791c Mon Sep 17 00:00:00 2001 +From 1ff4358c48066bbe6694b68332dd8a7c3088a4bf Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 26 May 2019 15:19:14 -0500 Subject: [PATCH] Bring back server name @@ -9,7 +9,7 @@ Subject: [PATCH] Bring back server name 2 files changed, 6 insertions(+) diff --git a/src/main/java/net/minecraft/server/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/DedicatedServerProperties.java -index 0c3ec83570..309f5562b8 100644 +index 0c3ec8357..309f5562b 100644 --- a/src/main/java/net/minecraft/server/DedicatedServerProperties.java +++ b/src/main/java/net/minecraft/server/DedicatedServerProperties.java @@ -10,6 +10,7 @@ public class DedicatedServerProperties extends PropertyManager Date: Sun, 25 Aug 2019 00:09:52 -0500 Subject: [PATCH] Dispenser curse of binding protection @@ -10,7 +10,7 @@ Subject: [PATCH] Dispenser curse of binding protection 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index fbca429090..bf9d044b0b 100644 +index fbca42909..bf9d044b0 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -913,6 +913,13 @@ public abstract class EntityInsentient extends EntityLiving { @@ -28,7 +28,7 @@ index fbca429090..bf9d044b0b 100644 Item item = itemstack.getItem(); diff --git a/src/main/java/net/minecraft/server/ItemArmor.java b/src/main/java/net/minecraft/server/ItemArmor.java -index df8c42bfbd..a4b3d0c298 100644 +index df8c42bfb..a4b3d0c29 100644 --- a/src/main/java/net/minecraft/server/ItemArmor.java +++ b/src/main/java/net/minecraft/server/ItemArmor.java @@ -31,7 +31,7 @@ public class ItemArmor extends Item { @@ -49,7 +49,7 @@ index df8c42bfbd..a4b3d0c298 100644 return this.b; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1a2512b528..b8754ba2d2 100644 +index 1a2512b52..b8754ba2d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -106,6 +106,11 @@ public class PurpurWorldConfig { @@ -65,5 +65,5 @@ index 1a2512b528..b8754ba2d2 100644 private void farmlandSettings() { farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); -- -2.24.0 +2.26.2 diff --git a/patches/server/0056-Implement-LivingEntity-safeFallDistance.patch b/patches/server/0057-Implement-LivingEntity-safeFallDistance.patch similarity index 94% rename from patches/server/0056-Implement-LivingEntity-safeFallDistance.patch rename to patches/server/0057-Implement-LivingEntity-safeFallDistance.patch index d0182c30b..51e4dbc76 100644 --- a/patches/server/0056-Implement-LivingEntity-safeFallDistance.patch +++ b/patches/server/0057-Implement-LivingEntity-safeFallDistance.patch @@ -1,4 +1,4 @@ -From 5b5ba5db23982d2d32640b026f8e837318a7a5fd Mon Sep 17 00:00:00 2001 +From 7922b68914319be86e725f89951217ee05ab2b59 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 5 May 2019 12:58:45 -0500 Subject: [PATCH] Implement LivingEntity safeFallDistance @@ -11,7 +11,7 @@ Subject: [PATCH] Implement LivingEntity safeFallDistance 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityGiantZombie.java b/src/main/java/net/minecraft/server/EntityGiantZombie.java -index 4296aaa074..a2e3e60012 100644 +index 4296aaa07..a2e3e6001 100644 --- a/src/main/java/net/minecraft/server/EntityGiantZombie.java +++ b/src/main/java/net/minecraft/server/EntityGiantZombie.java @@ -5,6 +5,9 @@ public class EntityGiantZombie extends EntityMonster { @@ -25,7 +25,7 @@ index 4296aaa074..a2e3e60012 100644 // Purpur start diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -index 0ecdea6710..e099ef9a06 100644 +index 0ecdea671..e099ef9a0 100644 --- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java +++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java @@ -222,7 +222,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven @@ -38,7 +38,7 @@ index 0ecdea6710..e099ef9a06 100644 protected int getChestSlots() { diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 0f8ba92a84..d6751e3cce 100644 +index 288942e9d..28e555d6e 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -125,6 +125,7 @@ public abstract class EntityLiving extends Entity { @@ -59,7 +59,7 @@ index 0f8ba92a84..d6751e3cce 100644 protected void cZ() { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index a461ac3614..4874c2242f 100644 +index a461ac361..4874c2242 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -739,4 +739,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -80,5 +80,5 @@ index a461ac3614..4874c2242f 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/server/0057-Add-option-for-boats-to-eject-players-on-land.patch b/patches/server/0058-Add-option-for-boats-to-eject-players-on-land.patch similarity index 94% rename from patches/server/0057-Add-option-for-boats-to-eject-players-on-land.patch rename to patches/server/0058-Add-option-for-boats-to-eject-players-on-land.patch index 7b5ea3dc4..5e0cfd5db 100644 --- a/patches/server/0057-Add-option-for-boats-to-eject-players-on-land.patch +++ b/patches/server/0058-Add-option-for-boats-to-eject-players-on-land.patch @@ -1,4 +1,4 @@ -From 160daef535fc94a099255c2f409c92028bcee7e7 Mon Sep 17 00:00:00 2001 +From c42c2b9207be73a2feed8fa32b321cc9a1ffc1ce Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 7 Sep 2019 22:47:59 -0500 Subject: [PATCH] Add option for boats to eject players on land @@ -9,7 +9,7 @@ Subject: [PATCH] Add option for boats to eject players on land 2 files changed, 3 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java -index 563fc8ced0..479ed7c7bc 100644 +index 563fc8ced..479ed7c7b 100644 --- a/src/main/java/net/minecraft/server/EntityBoat.java +++ b/src/main/java/net/minecraft/server/EntityBoat.java @@ -431,6 +431,7 @@ public class EntityBoat extends Entity { @@ -21,7 +21,7 @@ index 563fc8ced0..479ed7c7bc 100644 } else { return EntityBoat.EnumStatus.IN_AIR; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b8754ba2d2..2271d13f11 100644 +index b8754ba2d..2271d13f1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -134,6 +134,7 @@ public class PurpurWorldConfig { @@ -41,5 +41,5 @@ index b8754ba2d2..2271d13f11 100644 controllableMinecartsPlaceAnywhere = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", controllableMinecartsPlaceAnywhere); controllableMinecartsStepHeight = (float) getDouble("gameplay-mechanics.controllable-minecarts.step-height", controllableMinecartsStepHeight); -- -2.24.0 +2.26.2 diff --git a/patches/server/0058-Advancement-API-Additions.patch b/patches/server/0059-Advancement-API-Additions.patch similarity index 96% rename from patches/server/0058-Advancement-API-Additions.patch rename to patches/server/0059-Advancement-API-Additions.patch index 5c37137bc..6266189a4 100644 --- a/patches/server/0058-Advancement-API-Additions.patch +++ b/patches/server/0059-Advancement-API-Additions.patch @@ -1,4 +1,4 @@ -From a85e45062879867543939848629375d400158d31 Mon Sep 17 00:00:00 2001 +From 334b15abb698261d55af562dca76653a34cac4a9 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 31 May 2019 21:24:33 -0500 Subject: [PATCH] Advancement API Additions @@ -14,7 +14,7 @@ Subject: [PATCH] Advancement API Additions create mode 100644 src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancementDisplay.java diff --git a/src/main/java/net/minecraft/server/Advancement.java b/src/main/java/net/minecraft/server/Advancement.java -index 4b85551faf..4cba4187a0 100644 +index 4b85551fa..4cba4187a 100644 --- a/src/main/java/net/minecraft/server/Advancement.java +++ b/src/main/java/net/minecraft/server/Advancement.java @@ -65,7 +65,7 @@ public class Advancement { @@ -27,7 +27,7 @@ index 4b85551faf..4cba4187a0 100644 } diff --git a/src/main/java/net/minecraft/server/AdvancementDisplay.java b/src/main/java/net/minecraft/server/AdvancementDisplay.java -index e8172d56fe..976c85ef1b 100644 +index e8172d56f..976c85ef1 100644 --- a/src/main/java/net/minecraft/server/AdvancementDisplay.java +++ b/src/main/java/net/minecraft/server/AdvancementDisplay.java @@ -16,10 +16,11 @@ public class AdvancementDisplay { @@ -75,7 +75,7 @@ index e8172d56fe..976c85ef1b 100644 return this.h; } diff --git a/src/main/java/net/minecraft/server/AdvancementFrameType.java b/src/main/java/net/minecraft/server/AdvancementFrameType.java -index a9c49a4348..551a845476 100644 +index a9c49a434..551a84547 100644 --- a/src/main/java/net/minecraft/server/AdvancementFrameType.java +++ b/src/main/java/net/minecraft/server/AdvancementFrameType.java @@ -1,14 +1,25 @@ @@ -107,7 +107,7 @@ index a9c49a4348..551a845476 100644 this.e = i; this.f = enumchatformat; diff --git a/src/main/java/net/minecraft/server/CriterionTrigger.java b/src/main/java/net/minecraft/server/CriterionTrigger.java -index 4fe7324475..6e5d81daf1 100644 +index 4fe732447..6e5d81daf 100644 --- a/src/main/java/net/minecraft/server/CriterionTrigger.java +++ b/src/main/java/net/minecraft/server/CriterionTrigger.java @@ -27,6 +27,7 @@ public interface CriterionTrigger { @@ -119,7 +119,7 @@ index 4fe7324475..6e5d81daf1 100644 return this.a; } diff --git a/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java b/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java -index a5aadf2850..b0a7092d62 100644 +index a5aadf285..b0a7092d6 100644 --- a/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java +++ b/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancement.java @@ -27,4 +27,11 @@ public class CraftAdvancement implements org.bukkit.advancement.Advancement { @@ -136,7 +136,7 @@ index a5aadf2850..b0a7092d62 100644 } diff --git a/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancementDisplay.java b/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancementDisplay.java new file mode 100644 -index 0000000000..1cbb1e67b6 +index 000000000..1cbb1e67b --- /dev/null +++ b/src/main/java/org/bukkit/craftbukkit/advancement/CraftAdvancementDisplay.java @@ -0,0 +1,47 @@ @@ -188,5 +188,5 @@ index 0000000000..1cbb1e67b6 + } +} -- -2.24.0 +2.26.2 diff --git a/patches/server/0059-Add-option-to-set-armorstand-step-height.patch b/patches/server/0060-Add-option-to-set-armorstand-step-height.patch similarity index 94% rename from patches/server/0059-Add-option-to-set-armorstand-step-height.patch rename to patches/server/0060-Add-option-to-set-armorstand-step-height.patch index c954d20ea..1391f3885 100644 --- a/patches/server/0059-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0060-Add-option-to-set-armorstand-step-height.patch @@ -1,4 +1,4 @@ -From 2566c488642ec8177cda2802bc760f30dccdaa37 Mon Sep 17 00:00:00 2001 +From 4536501e5239e68ff4e8bebc65bed6fb08b96284 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 6 Oct 2019 12:46:35 -0500 Subject: [PATCH] Add option to set armorstand step height @@ -9,7 +9,7 @@ Subject: [PATCH] Add option to set armorstand step height 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityArmorStand.java b/src/main/java/net/minecraft/server/EntityArmorStand.java -index d4aa9b24f7..d655449534 100644 +index d4aa9b24f..d65544953 100644 --- a/src/main/java/net/minecraft/server/EntityArmorStand.java +++ b/src/main/java/net/minecraft/server/EntityArmorStand.java @@ -62,7 +62,6 @@ public class EntityArmorStand extends EntityLiving { @@ -29,7 +29,7 @@ index d4aa9b24f7..d655449534 100644 if (!this.canTick) { if (this.noTickPoseDirty) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2271d13f11..4bb5ddea44 100644 +index 2271d13f1..4bb5ddea4 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -135,6 +135,7 @@ public class PurpurWorldConfig { @@ -49,5 +49,5 @@ index 2271d13f11..4bb5ddea44 100644 controllableMinecartsPlaceAnywhere = getBoolean("gameplay-mechanics.controllable-minecarts.place-anywhere", controllableMinecartsPlaceAnywhere); controllableMinecartsStepHeight = (float) getDouble("gameplay-mechanics.controllable-minecarts.step-height", controllableMinecartsStepHeight); -- -2.24.0 +2.26.2 diff --git a/patches/server/0060-Implement-ItemFactory-getMonsterEgg.patch b/patches/server/0061-Implement-ItemFactory-getMonsterEgg.patch similarity index 93% rename from patches/server/0060-Implement-ItemFactory-getMonsterEgg.patch rename to patches/server/0061-Implement-ItemFactory-getMonsterEgg.patch index e197043e8..72128a261 100644 --- a/patches/server/0060-Implement-ItemFactory-getMonsterEgg.patch +++ b/patches/server/0061-Implement-ItemFactory-getMonsterEgg.patch @@ -1,4 +1,4 @@ -From 271dc5e77dee7646380eb8b909e5570731ba83cf Mon Sep 17 00:00:00 2001 +From 061042c1a14095bb5264328ecf40c63c20212dd6 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 5 Jul 2019 16:36:55 -0500 Subject: [PATCH] Implement ItemFactory#getMonsterEgg @@ -9,7 +9,7 @@ Subject: [PATCH] Implement ItemFactory#getMonsterEgg 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/ItemMonsterEgg.java b/src/main/java/net/minecraft/server/ItemMonsterEgg.java -index 24af4c11d6..8ef2c32236 100644 +index 24af4c11d..8ef2c3223 100644 --- a/src/main/java/net/minecraft/server/ItemMonsterEgg.java +++ b/src/main/java/net/minecraft/server/ItemMonsterEgg.java @@ -8,7 +8,7 @@ import javax.annotation.Nullable; @@ -22,7 +22,7 @@ index 24af4c11d6..8ef2c32236 100644 private final int c; private final EntityTypes d; diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -index 23d7756456..29161032c3 100644 +index 23d775645..29161032c 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java @@ -354,4 +354,18 @@ public final class CraftItemFactory implements ItemFactory { @@ -45,5 +45,5 @@ index 23d7756456..29161032c3 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/server/0061-Alternative-Keepalive-Handling.patch b/patches/server/0062-Alternative-Keepalive-Handling.patch similarity index 95% rename from patches/server/0061-Alternative-Keepalive-Handling.patch rename to patches/server/0062-Alternative-Keepalive-Handling.patch index abe2017be..f05072da7 100644 --- a/patches/server/0061-Alternative-Keepalive-Handling.patch +++ b/patches/server/0062-Alternative-Keepalive-Handling.patch @@ -1,4 +1,4 @@ -From 289e82a07dfc2238298bbc0d81819d1f57b55628 Mon Sep 17 00:00:00 2001 +From 23e176a46b1214496ce22866fd08e1aecae26a22 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 11 Oct 2019 00:17:39 -0500 Subject: [PATCH] Alternative Keepalive Handling @@ -10,7 +10,7 @@ Subject: [PATCH] Alternative Keepalive Handling 3 files changed, 33 insertions(+) diff --git a/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java b/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java -index 8e93f1540b..470f92c4fb 100644 +index 8e93f1540..470f92c4f 100644 --- a/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java +++ b/src/main/java/net/minecraft/server/PacketPlayInKeepAlive.java @@ -22,6 +22,7 @@ public class PacketPlayInKeepAlive implements Packet { @@ -22,7 +22,7 @@ index 8e93f1540b..470f92c4fb 100644 return this.a; } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 57e8c22d05..80a75912fb 100644 +index 09cab5a99..6f7fd0f64 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -75,6 +75,7 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -55,7 +55,7 @@ index 57e8c22d05..80a75912fb 100644 if (this.isPendingPing()) { if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected PlayerConnection.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getName()); // more info -@@ -2660,6 +2676,17 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2677,6 +2693,17 @@ public class PlayerConnection implements PacketListenerPlayIn { @Override public void a(PacketPlayInKeepAlive packetplayinkeepalive) { @@ -74,7 +74,7 @@ index 57e8c22d05..80a75912fb 100644 if (this.awaitingKeepAlive && packetplayinkeepalive.b() == this.h) { int i = (int) (SystemUtils.getMonotonicMillis() - this.lastKeepAlive); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 72ad9dce7d..ed2a312773 100644 +index 72ad9dce7..ed2a31277 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -144,6 +144,11 @@ public class PurpurConfig { diff --git a/patches/server/0062-Implement-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/server/0063-Implement-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 95% rename from patches/server/0062-Implement-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/server/0063-Implement-PlayerSetSpawnerTypeWithEggEvent.patch index 87357edf1..90142cd35 100644 --- a/patches/server/0062-Implement-PlayerSetSpawnerTypeWithEggEvent.patch +++ b/patches/server/0063-Implement-PlayerSetSpawnerTypeWithEggEvent.patch @@ -1,4 +1,4 @@ -From f7c3b76fd6493e7e4105d8a3da92f101f60c0187 Mon Sep 17 00:00:00 2001 +From dc386a10b38cdbe4de2d942d8e70138b7bf593f5 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 5 Jul 2019 18:21:00 -0500 Subject: [PATCH] Implement PlayerSetSpawnerTypeWithEggEvent @@ -8,7 +8,7 @@ Subject: [PATCH] Implement PlayerSetSpawnerTypeWithEggEvent 1 file changed, 14 insertions(+) diff --git a/src/main/java/net/minecraft/server/ItemMonsterEgg.java b/src/main/java/net/minecraft/server/ItemMonsterEgg.java -index 8ef2c32236..237fdeda5c 100644 +index 8ef2c3223..237fdeda5 100644 --- a/src/main/java/net/minecraft/server/ItemMonsterEgg.java +++ b/src/main/java/net/minecraft/server/ItemMonsterEgg.java @@ -2,6 +2,11 @@ package net.minecraft.server; @@ -40,5 +40,5 @@ index 8ef2c32236..237fdeda5c 100644 tileentity.update(); world.notify(blockposition, iblockdata, iblockdata, 3); -- -2.24.0 +2.26.2 diff --git a/patches/server/0063-Add-moon-phase-API.patch b/patches/server/0064-Add-moon-phase-API.patch similarity index 85% rename from patches/server/0063-Add-moon-phase-API.patch rename to patches/server/0064-Add-moon-phase-API.patch index f74b59963..b1ae87f7d 100644 --- a/patches/server/0063-Add-moon-phase-API.patch +++ b/patches/server/0064-Add-moon-phase-API.patch @@ -1,4 +1,4 @@ -From 04e2a3750f02b48b1370cf8fcf25a2da357f8aa4 Mon Sep 17 00:00:00 2001 +From 93a93b6f297d5f1bd55db507d44b7b0263d8852c Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 1 Feb 2020 22:22:16 -0600 Subject: [PATCH] Add moon phase API @@ -8,10 +8,10 @@ Subject: [PATCH] Add moon phase API 1 file changed, 8 insertions(+) diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index f4a1be34f0..1913b31bc1 100644 +index 1ee5ce50b..eb8571c30 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2477,6 +2477,14 @@ public class CraftWorld implements World { +@@ -2478,6 +2478,14 @@ public class CraftWorld implements World { return new CraftDragonBattle(((WorldProviderTheEnd) worldProvider).o()); // PAIL rename getDragonBattle } diff --git a/patches/server/0064-Add-getPlacementBlockData-to-World.patch b/patches/server/0065-Add-getPlacementBlockData-to-World.patch similarity index 93% rename from patches/server/0064-Add-getPlacementBlockData-to-World.patch rename to patches/server/0065-Add-getPlacementBlockData-to-World.patch index 20dfba23a..73af1bdee 100644 --- a/patches/server/0064-Add-getPlacementBlockData-to-World.patch +++ b/patches/server/0065-Add-getPlacementBlockData-to-World.patch @@ -1,4 +1,4 @@ -From b14da6ddd0633bf5359c178fb6610347e0ef6baf Mon Sep 17 00:00:00 2001 +From 5ae31d323f96470ac6ba7a31996cada392449d6c Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 8 Feb 2020 23:30:17 -0600 Subject: [PATCH] Add getPlacementBlockData to World @@ -12,7 +12,7 @@ Subject: [PATCH] Add getPlacementBlockData to World create mode 100644 src/main/java/net/minecraft/server/ItemSpawner.java diff --git a/src/main/java/net/minecraft/server/BlockMobSpawner.java b/src/main/java/net/minecraft/server/BlockMobSpawner.java -index 69d04f6cbf..901d45f284 100644 +index 69d04f6cb..901d45f28 100644 --- a/src/main/java/net/minecraft/server/BlockMobSpawner.java +++ b/src/main/java/net/minecraft/server/BlockMobSpawner.java @@ -57,6 +57,7 @@ public class BlockMobSpawner extends BlockTileEntity { @@ -25,7 +25,7 @@ index 69d04f6cbf..901d45f284 100644 return i; diff --git a/src/main/java/net/minecraft/server/ItemSpawner.java b/src/main/java/net/minecraft/server/ItemSpawner.java new file mode 100644 -index 0000000000..7dc68ffe92 +index 000000000..7dc68ffe9 --- /dev/null +++ b/src/main/java/net/minecraft/server/ItemSpawner.java @@ -0,0 +1,23 @@ @@ -53,7 +53,7 @@ index 0000000000..7dc68ffe92 + } +} diff --git a/src/main/java/net/minecraft/server/Items.java b/src/main/java/net/minecraft/server/Items.java -index 9c9b93f280..74a722cce5 100644 +index 9c9b93f28..74a722cce 100644 --- a/src/main/java/net/minecraft/server/Items.java +++ b/src/main/java/net/minecraft/server/Items.java @@ -155,7 +155,7 @@ public class Items { @@ -66,10 +66,10 @@ index 9c9b93f280..74a722cce5 100644 public static final Item bZ = a(Blocks.CHEST, CreativeModeTab.c); public static final Item ca = a(Blocks.DIAMOND_ORE, CreativeModeTab.b); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 1913b31bc1..82960af87d 100644 +index eb8571c30..3d27028e8 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2483,6 +2483,11 @@ public class CraftWorld implements World { +@@ -2484,6 +2484,11 @@ public class CraftWorld implements World { public net.pl3x.purpur.MoonPhase getMoonPhase() { return net.pl3x.purpur.MoonPhase.getPhase(getFullTime() / 24000L); } diff --git a/patches/server/0065-Barrels-have-6-rows.patch b/patches/server/0066-Barrels-have-6-rows.patch similarity index 95% rename from patches/server/0065-Barrels-have-6-rows.patch rename to patches/server/0066-Barrels-have-6-rows.patch index 239068bb8..4c78ce266 100644 --- a/patches/server/0065-Barrels-have-6-rows.patch +++ b/patches/server/0066-Barrels-have-6-rows.patch @@ -1,4 +1,4 @@ -From d699dd8a2b720e6e0347e104b319cf7d071e6277 Mon Sep 17 00:00:00 2001 +From bdd2fd8f778a66a3f234c7ad24dba470f2f1d0a3 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 23 May 2019 21:50:37 -0500 Subject: [PATCH] Barrels have 6 rows @@ -10,7 +10,7 @@ Subject: [PATCH] Barrels have 6 rows 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/TileEntityBarrel.java b/src/main/java/net/minecraft/server/TileEntityBarrel.java -index 1e27abbea0..ca3b6c9aae 100644 +index 1e27abbea..ca3b6c9aa 100644 --- a/src/main/java/net/minecraft/server/TileEntityBarrel.java +++ b/src/main/java/net/minecraft/server/TileEntityBarrel.java @@ -54,7 +54,7 @@ public class TileEntityBarrel extends TileEntityLootable { @@ -40,7 +40,7 @@ index 1e27abbea0..ca3b6c9aae 100644 } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index ed2a312773..581e8eebe7 100644 +index ed2a31277..581e8eebe 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -7,6 +7,7 @@ import org.bukkit.Bukkit; @@ -69,7 +69,7 @@ index ed2a312773..581e8eebe7 100644 } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -index 454ec3c76e..d295821c57 100644 +index 454ec3c76..d295821c5 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java @@ -195,8 +195,10 @@ public class CraftContainer extends Container { @@ -85,5 +85,5 @@ index 454ec3c76e..d295821c57 100644 case DISPENSER: case DROPPER: -- -2.24.0 +2.26.2 diff --git a/patches/server/0066-Enderchest-6-rows-plus-permissions.patch b/patches/server/0067-Enderchest-6-rows-plus-permissions.patch similarity index 96% rename from patches/server/0066-Enderchest-6-rows-plus-permissions.patch rename to patches/server/0067-Enderchest-6-rows-plus-permissions.patch index a3db427ed..2d3825f59 100644 --- a/patches/server/0066-Enderchest-6-rows-plus-permissions.patch +++ b/patches/server/0067-Enderchest-6-rows-plus-permissions.patch @@ -1,4 +1,4 @@ -From c40ba4d5095176ca9829df4cb2fd01b230253093 Mon Sep 17 00:00:00 2001 +From a45c6a3ab3401040e7ab6a00de1f3c847e183dc6 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 23 Jun 2019 17:01:26 -0500 Subject: [PATCH] Enderchest 6 rows (plus permissions) @@ -13,7 +13,7 @@ Subject: [PATCH] Enderchest 6 rows (plus permissions) 6 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/BlockEnderChest.java b/src/main/java/net/minecraft/server/BlockEnderChest.java -index 0a892a5f1a..e7ef571dc5 100644 +index 0a892a5f1..e7ef571dc 100644 --- a/src/main/java/net/minecraft/server/BlockEnderChest.java +++ b/src/main/java/net/minecraft/server/BlockEnderChest.java @@ -48,6 +48,27 @@ public class BlockEnderChest extends BlockChestAbstract im @@ -45,7 +45,7 @@ index 0a892a5f1a..e7ef571dc5 100644 }, BlockEnderChest.e)); entityhuman.a(StatisticList.OPEN_ENDERCHEST); diff --git a/src/main/java/net/minecraft/server/InventoryEnderChest.java b/src/main/java/net/minecraft/server/InventoryEnderChest.java -index fd31b9a6dc..903c02e9ef 100644 +index fd31b9a6d..903c02e9e 100644 --- a/src/main/java/net/minecraft/server/InventoryEnderChest.java +++ b/src/main/java/net/minecraft/server/InventoryEnderChest.java @@ -20,7 +20,7 @@ public class InventoryEnderChest extends InventorySubcontainer { @@ -58,7 +58,7 @@ index fd31b9a6dc..903c02e9ef 100644 // CraftBukkit end } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 581e8eebe7..c3ecd6fc70 100644 +index 581e8eebe..c3ecd6fc7 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -157,14 +157,22 @@ public class PurpurConfig { @@ -85,7 +85,7 @@ index 581e8eebe7..c3ecd6fc70 100644 } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -index d295821c57..610cbbe858 100644 +index d295821c5..610cbbe85 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java @@ -195,7 +195,7 @@ public class CraftContainer extends Container { @@ -98,7 +98,7 @@ index d295821c57..610cbbe858 100644 case BARREL: delegate = new ContainerChest(net.pl3x.purpur.PurpurConfig.barrelSixRows ? Containers.GENERIC_9X6 : Containers.GENERIC_9X3, windowId, bottom, top, top.getSize() / 9); // Purpur diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java -index 47827fbf1b..0f5819a409 100644 +index 57858327a..d57ad13f7 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventory.java @@ -81,7 +81,7 @@ public class CraftInventory implements Inventory { @@ -111,7 +111,7 @@ index 47827fbf1b..0f5819a409 100644 } diff --git a/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java b/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java -index a4a809f302..e7d19d67c9 100644 +index a4a809f30..e7d19d67c 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java +++ b/src/main/java/org/bukkit/craftbukkit/util/permissions/CraftDefaultPermissions.java @@ -18,6 +18,14 @@ public final class CraftDefaultPermissions { @@ -130,5 +130,5 @@ index a4a809f302..e7d19d67c9 100644 } } -- -2.24.0 +2.26.2 diff --git a/patches/server/0067-Add-5-second-tps-average-in-tps.patch b/patches/server/0068-Add-5-second-tps-average-in-tps.patch similarity index 94% rename from patches/server/0067-Add-5-second-tps-average-in-tps.patch rename to patches/server/0068-Add-5-second-tps-average-in-tps.patch index ebe644c00..29867e50e 100644 --- a/patches/server/0067-Add-5-second-tps-average-in-tps.patch +++ b/patches/server/0068-Add-5-second-tps-average-in-tps.patch @@ -1,4 +1,4 @@ -From 6482469cb0a1a9440a426fa0ecb348499014c7a3 Mon Sep 17 00:00:00 2001 +From e803339774dfdcd4aa5f27f6dcb231bd5932704b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 28 Jul 2019 01:27:37 -0500 Subject: [PATCH] Add 5 second tps average in /tps @@ -10,7 +10,7 @@ Subject: [PATCH] Add 5 second tps average in /tps 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 60f8b60e4c..81422ab15a 100644 +index 3568e076e..f23fdd5f2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -183,7 +183,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant Date: Sat, 19 Oct 2019 02:25:16 -0500 Subject: [PATCH] Add playPickupItemAnimation to LivingEntity @@ -8,7 +8,7 @@ Subject: [PATCH] Add playPickupItemAnimation to LivingEntity 1 file changed, 5 insertions(+) diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 4874c2242f..d8207b3221 100644 +index 4874c2242..d8207b322 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -750,5 +750,10 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -23,5 +23,5 @@ index 4874c2242f..d8207b3221 100644 // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/server/0069-Add-more-evoker-API.patch b/patches/server/0070-Add-more-evoker-API.patch similarity index 93% rename from patches/server/0069-Add-more-evoker-API.patch rename to patches/server/0070-Add-more-evoker-API.patch index e33640948..7e2ca757e 100644 --- a/patches/server/0069-Add-more-evoker-API.patch +++ b/patches/server/0070-Add-more-evoker-API.patch @@ -1,4 +1,4 @@ -From f1e55c375cfbb848f5c9c28fee325ef31fdc88cc Mon Sep 17 00:00:00 2001 +From 4f5ad157197bfb5a3447e104eb705317f82b935a Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 00:29:02 -0500 Subject: [PATCH] Add more evoker API @@ -9,7 +9,7 @@ Subject: [PATCH] Add more evoker API 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityEvoker.java b/src/main/java/net/minecraft/server/EntityEvoker.java -index 179a261296..e7d0d0f5e3 100644 +index 179a26129..e7d0d0f5e 100644 --- a/src/main/java/net/minecraft/server/EntityEvoker.java +++ b/src/main/java/net/minecraft/server/EntityEvoker.java @@ -102,12 +102,14 @@ public class EntityEvoker extends EntityIllagerWizard { @@ -30,7 +30,7 @@ index 179a261296..e7d0d0f5e3 100644 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java -index 0636d26473..4ccb938909 100644 +index 0636d2647..4ccb93890 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java @@ -36,4 +36,17 @@ public class CraftEvoker extends CraftSpellcaster implements Evoker { @@ -52,5 +52,5 @@ index 0636d26473..4ccb938909 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/server/0070-Add-API-for-Villager-resetOffers.patch b/patches/server/0071-Add-API-for-Villager-resetOffers.patch similarity index 87% rename from patches/server/0070-Add-API-for-Villager-resetOffers.patch rename to patches/server/0071-Add-API-for-Villager-resetOffers.patch index 59e773567..0919213dd 100644 --- a/patches/server/0070-Add-API-for-Villager-resetOffers.patch +++ b/patches/server/0071-Add-API-for-Villager-resetOffers.patch @@ -1,4 +1,4 @@ -From 3186ae96aa6c7d86c23f409de90bdcd99030f179 Mon Sep 17 00:00:00 2001 +From f47732a9410ca8fffaa03331ac3deb642af7e1ed Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Mon, 7 Oct 2019 00:15:37 -0500 Subject: [PATCH] Add API for Villager#resetOffers() @@ -9,7 +9,7 @@ Subject: [PATCH] Add API for Villager#resetOffers() 2 files changed, 15 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityVillagerAbstract.java b/src/main/java/net/minecraft/server/EntityVillagerAbstract.java -index 4635285320..5fbd13512f 100644 +index 463528532..5fbd13512 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerAbstract.java +++ b/src/main/java/net/minecraft/server/EntityVillagerAbstract.java @@ -84,6 +84,13 @@ public abstract class EntityVillagerAbstract extends EntityAgeable implements NP @@ -35,11 +35,11 @@ index 4635285320..5fbd13512f 100644 protected void a(MerchantRecipeList merchantrecipelist, VillagerTrades.IMerchantRecipeOption[] avillagertrades_imerchantrecipeoption, int i) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -index 19409c7a25..d9e19648ff 100644 +index d24a892c4..abfa6340f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -@@ -164,4 +164,11 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { - } +@@ -169,4 +169,11 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { + getHandle().getReputation().getReputations().clear(); } // Paper end + @@ -51,5 +51,5 @@ index 19409c7a25..d9e19648ff 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/server/0071-Add-more-llama-API.patch b/patches/server/0072-Add-more-llama-API.patch similarity index 97% rename from patches/server/0071-Add-more-llama-API.patch rename to patches/server/0072-Add-more-llama-API.patch index 0f83499ee..ea3296423 100644 --- a/patches/server/0071-Add-more-llama-API.patch +++ b/patches/server/0072-Add-more-llama-API.patch @@ -1,4 +1,4 @@ -From e73d8edd323159d1d7d36b0ea0b512ed93f86d42 Mon Sep 17 00:00:00 2001 +From eab02ae8ebe093cfce94311b02c3c76349add5bd Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 18 Oct 2019 22:50:12 -0500 Subject: [PATCH] Add more llama API @@ -10,7 +10,7 @@ Subject: [PATCH] Add more llama API 3 files changed, 61 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityLlama.java b/src/main/java/net/minecraft/server/EntityLlama.java -index c5f87cbdd2..082aac258e 100644 +index c5f87cbdd..082aac258 100644 --- a/src/main/java/net/minecraft/server/EntityLlama.java +++ b/src/main/java/net/minecraft/server/EntityLlama.java @@ -12,7 +12,8 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn @@ -80,7 +80,7 @@ index c5f87cbdd2..082aac258e 100644 } diff --git a/src/main/java/net/minecraft/server/PathfinderGoalLlamaFollow.java b/src/main/java/net/minecraft/server/PathfinderGoalLlamaFollow.java -index e181d83505..8376f1dc4e 100644 +index e181d8350..8376f1dc4 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalLlamaFollow.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalLlamaFollow.java @@ -6,7 +6,7 @@ import java.util.List; @@ -109,7 +109,7 @@ index e181d83505..8376f1dc4e 100644 double d0 = this.a.h((Entity) this.a.fe()); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java -index 3f94c5a920..a027634801 100644 +index 3f94c5a92..a02763480 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java @@ -65,4 +65,48 @@ public class CraftLlama extends CraftChestedHorse implements Llama, CraftRangedE @@ -162,5 +162,5 @@ index 3f94c5a920..a027634801 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/server/0072-Fix-furnace-cook-speed-multiplier-using-values-betwe.patch b/patches/server/0073-Fix-furnace-cook-speed-multiplier-using-values-betwe.patch similarity index 88% rename from patches/server/0072-Fix-furnace-cook-speed-multiplier-using-values-betwe.patch rename to patches/server/0073-Fix-furnace-cook-speed-multiplier-using-values-betwe.patch index 94ad8f279..421e185ff 100644 --- a/patches/server/0072-Fix-furnace-cook-speed-multiplier-using-values-betwe.patch +++ b/patches/server/0073-Fix-furnace-cook-speed-multiplier-using-values-betwe.patch @@ -1,4 +1,4 @@ -From 15ac10c2b91503b47285be76744115eff2e5e5ca Mon Sep 17 00:00:00 2001 +From 2773516386b1b074024a5129b2dac38d1d1d0ec9 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 03:36:52 -0500 Subject: [PATCH] Fix furnace cook speed multiplier using values between 0 and @@ -9,10 +9,10 @@ Subject: [PATCH] Fix furnace cook speed multiplier using values between 0 and 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/TileEntityFurnace.java b/src/main/java/net/minecraft/server/TileEntityFurnace.java -index d5432bfeb7..91ef7ac60f 100644 +index 7d50b7056..c5e643292 100644 --- a/src/main/java/net/minecraft/server/TileEntityFurnace.java +++ b/src/main/java/net/minecraft/server/TileEntityFurnace.java -@@ -291,8 +291,10 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I +@@ -307,8 +307,10 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I } if (this.isBurning() && this.canBurn(irecipe)) { @@ -26,5 +26,5 @@ index d5432bfeb7..91ef7ac60f 100644 this.cookTimeTotal = this.getRecipeCookingTime(); this.burn(irecipe); -- -2.24.0 +2.26.2 diff --git a/patches/server/0073-Implement-infinite-lava.patch b/patches/server/0074-Implement-infinite-lava.patch similarity index 94% rename from patches/server/0073-Implement-infinite-lava.patch rename to patches/server/0074-Implement-infinite-lava.patch index 64c6d1124..24b737cd2 100644 --- a/patches/server/0073-Implement-infinite-lava.patch +++ b/patches/server/0074-Implement-infinite-lava.patch @@ -1,4 +1,4 @@ -From 4332d7e3f964bec57c37c29485fc30c5c8e27972 Mon Sep 17 00:00:00 2001 +From c4409a74149d47ea97ddf49b1f235070b46c3208 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 23 Nov 2019 17:55:42 -0600 Subject: [PATCH] Implement infinite lava @@ -11,7 +11,7 @@ Subject: [PATCH] Implement infinite lava 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/FluidTypeFlowing.java b/src/main/java/net/minecraft/server/FluidTypeFlowing.java -index 376dca1889..1a14fe4a24 100644 +index 376dca188..1a14fe4a2 100644 --- a/src/main/java/net/minecraft/server/FluidTypeFlowing.java +++ b/src/main/java/net/minecraft/server/FluidTypeFlowing.java @@ -219,7 +219,7 @@ public abstract class FluidTypeFlowing extends FluidType { @@ -39,7 +39,7 @@ index 376dca1889..1a14fe4a24 100644 protected void a(GeneratorAccess generatoraccess, BlockPosition blockposition, IBlockData iblockdata, EnumDirection enumdirection, Fluid fluid) { diff --git a/src/main/java/net/minecraft/server/FluidTypeLava.java b/src/main/java/net/minecraft/server/FluidTypeLava.java -index d25368d032..09f82c2d92 100644 +index d25368d03..09f82c2d9 100644 --- a/src/main/java/net/minecraft/server/FluidTypeLava.java +++ b/src/main/java/net/minecraft/server/FluidTypeLava.java @@ -147,6 +147,13 @@ public abstract class FluidTypeLava extends FluidTypeFlowing { @@ -57,7 +57,7 @@ index d25368d032..09f82c2d92 100644 protected boolean f() { return false; diff --git a/src/main/java/net/minecraft/server/WorldProvider.java b/src/main/java/net/minecraft/server/WorldProvider.java -index 9eba9a12c0..39252e6873 100644 +index 9eba9a12c..39252e687 100644 --- a/src/main/java/net/minecraft/server/WorldProvider.java +++ b/src/main/java/net/minecraft/server/WorldProvider.java @@ -5,7 +5,7 @@ import javax.annotation.Nullable; @@ -70,7 +70,7 @@ index 9eba9a12c0..39252e6873 100644 protected boolean c; protected boolean d; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 4bb5ddea44..5b042a6098 100644 +index 4bb5ddea4..5b042a609 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -127,6 +127,11 @@ public class PurpurWorldConfig { @@ -86,5 +86,5 @@ index 4bb5ddea44..5b042a6098 100644 public boolean signRightClickEdit = false; private void signSettings() { -- -2.24.0 +2.26.2 diff --git a/patches/server/0074-Expose-getItemStack-for-Trident.patch b/patches/server/0075-Expose-getItemStack-for-Trident.patch similarity index 91% rename from patches/server/0074-Expose-getItemStack-for-Trident.patch rename to patches/server/0075-Expose-getItemStack-for-Trident.patch index 83310e96c..79daebdc6 100644 --- a/patches/server/0074-Expose-getItemStack-for-Trident.patch +++ b/patches/server/0075-Expose-getItemStack-for-Trident.patch @@ -1,4 +1,4 @@ -From 1aa60ccb54ba04884e1d3f0a1f911049e79be5eb Mon Sep 17 00:00:00 2001 +From e10b674179217a0cabe811dd22d96dd28dcec896 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 18 Oct 2019 22:19:40 -0500 Subject: [PATCH] Expose getItemStack for Trident @@ -9,7 +9,7 @@ Subject: [PATCH] Expose getItemStack for Trident 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityThrownTrident.java b/src/main/java/net/minecraft/server/EntityThrownTrident.java -index 59bb039ad7..ed8e26aa45 100644 +index 59bb039ad..ed8e26aa4 100644 --- a/src/main/java/net/minecraft/server/EntityThrownTrident.java +++ b/src/main/java/net/minecraft/server/EntityThrownTrident.java @@ -77,7 +77,7 @@ public class EntityThrownTrident extends EntityArrow { @@ -22,7 +22,7 @@ index 59bb039ad7..ed8e26aa45 100644 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java -index 0518e6c683..63287a9b65 100644 +index 0518e6c68..63287a9b6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java @@ -25,4 +25,11 @@ public class CraftTrident extends CraftArrow implements Trident { @@ -38,5 +38,5 @@ index 0518e6c683..63287a9b65 100644 + // Purpur end } -- -2.24.0 +2.26.2 diff --git a/patches/server/0075-Despawn-egg-hatches-chicken.patch b/patches/server/0076-Despawn-egg-hatches-chicken.patch similarity index 95% rename from patches/server/0075-Despawn-egg-hatches-chicken.patch rename to patches/server/0076-Despawn-egg-hatches-chicken.patch index ba1f08703..cac2fc312 100644 --- a/patches/server/0075-Despawn-egg-hatches-chicken.patch +++ b/patches/server/0076-Despawn-egg-hatches-chicken.patch @@ -1,4 +1,4 @@ -From afadc70dec5429c8b819d659687f20feb6bc0f6c Mon Sep 17 00:00:00 2001 +From d425a077b293b1e4368c321ba44314711eb2a6e1 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 29 Nov 2019 23:47:42 -0600 Subject: [PATCH] Despawn egg hatches chicken @@ -9,7 +9,7 @@ Subject: [PATCH] Despawn egg hatches chicken 2 files changed, 25 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java -index 2926fbb957..bbb9ca1efc 100644 +index 2926fbb95..bbb9ca1ef 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java @@ -165,6 +165,27 @@ public class EntityItem extends Entity { @@ -41,7 +41,7 @@ index 2926fbb957..bbb9ca1efc 100644 Vec3D vec3d = this.getMot(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 5b042a6098..647bece31f 100644 +index 5b042a609..647bece31 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -262,11 +262,15 @@ public class PurpurWorldConfig { @@ -61,5 +61,5 @@ index 5b042a6098..647bece31f 100644 public boolean codRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0076-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch b/patches/server/0077-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch similarity index 89% rename from patches/server/0076-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch rename to patches/server/0077-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch index d523d0b16..4224afb8e 100644 --- a/patches/server/0076-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch +++ b/patches/server/0077-Fix-SpawnChangeEvent-not-firing-for-all-use-cases.patch @@ -1,4 +1,4 @@ -From e1db66a264e8af597da193a69805291c90b56df5 Mon Sep 17 00:00:00 2001 +From 9bebb70c4071f92b1317115e42b71ef628ee5631 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 01:42:50 -0500 Subject: [PATCH] Fix SpawnChangeEvent not firing for all use-cases @@ -9,10 +9,10 @@ Subject: [PATCH] Fix SpawnChangeEvent not firing for all use-cases 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index d2fac7f296..838fc97843 100644 +index ad3b81a11..b24191d81 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java -@@ -1437,8 +1437,11 @@ public abstract class World implements GeneratorAccess, AutoCloseable { +@@ -1472,8 +1472,11 @@ public abstract class World implements GeneratorAccess, AutoCloseable { return blockposition; } @@ -25,10 +25,10 @@ index d2fac7f296..838fc97843 100644 public boolean a(EntityHuman entityhuman, BlockPosition blockposition) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 414fc4baf9..e54cff571c 100644 +index 3d27028e8..85922aaa9 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -384,12 +384,16 @@ public class CraftWorld implements World { +@@ -391,12 +391,16 @@ public class CraftWorld implements World { @Override public boolean setSpawnLocation(int x, int y, int z) { try { @@ -50,5 +50,5 @@ index 414fc4baf9..e54cff571c 100644 return true; } catch (Exception e) { -- -2.24.0 +2.26.2 diff --git a/patches/server/0077-Add-sleep-options.patch b/patches/server/0078-Add-sleep-options.patch similarity index 96% rename from patches/server/0077-Add-sleep-options.patch rename to patches/server/0078-Add-sleep-options.patch index 283a0b33a..f242abe5d 100644 --- a/patches/server/0077-Add-sleep-options.patch +++ b/patches/server/0078-Add-sleep-options.patch @@ -1,4 +1,4 @@ -From 19d0ab926c3370693cc732613d287e0160eac56e Mon Sep 17 00:00:00 2001 +From 0f863a2f9ef019645eaf659efc0fbdd135caef40 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 30 Nov 2019 03:30:17 -0600 Subject: [PATCH] Add sleep options @@ -9,7 +9,7 @@ Subject: [PATCH] Add sleep options 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index d62174e9c7..22e17e3de3 100644 +index d62174e9c..22e17e3de 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -143,6 +143,21 @@ public abstract class EntityHuman extends EntityLiving { @@ -53,7 +53,7 @@ index d62174e9c7..22e17e3de3 100644 return Either.left(EntityHuman.EnumBedResult.NOT_POSSIBLE_NOW); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 647bece31f..08fb0bae3a 100644 +index 647bece31..08fb0bae3 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -150,6 +150,8 @@ public class PurpurWorldConfig { @@ -75,5 +75,5 @@ index 647bece31f..08fb0bae3a 100644 } -- -2.24.0 +2.26.2 diff --git a/patches/server/0078-Option-for-hay-block-fall-damage.patch b/patches/server/0079-Option-for-hay-block-fall-damage.patch similarity index 91% rename from patches/server/0078-Option-for-hay-block-fall-damage.patch rename to patches/server/0079-Option-for-hay-block-fall-damage.patch index b78977638..63cc6264d 100644 --- a/patches/server/0078-Option-for-hay-block-fall-damage.patch +++ b/patches/server/0079-Option-for-hay-block-fall-damage.patch @@ -1,4 +1,4 @@ -From 23fe49e9e75d1c3ba6d60df0a81f1cc5d363f25e Mon Sep 17 00:00:00 2001 +From 56ff33caeb30d23da17cfc109c2aa90e290fe7ca Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 30 Nov 2019 01:31:09 -0600 Subject: [PATCH] Option for hay block fall damage @@ -9,7 +9,7 @@ Subject: [PATCH] Option for hay block fall damage 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/BlockHay.java b/src/main/java/net/minecraft/server/BlockHay.java -index ca81c49f0a..1f8f60542f 100644 +index ca81c49f0..1f8f60542 100644 --- a/src/main/java/net/minecraft/server/BlockHay.java +++ b/src/main/java/net/minecraft/server/BlockHay.java @@ -9,6 +9,6 @@ public class BlockHay extends BlockRotatable { @@ -21,7 +21,7 @@ index ca81c49f0a..1f8f60542f 100644 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 08fb0bae3a..a4a09874fe 100644 +index 08fb0bae3..a4a09874f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -127,6 +127,11 @@ public class PurpurWorldConfig { @@ -37,5 +37,5 @@ index 08fb0bae3a..a4a09874fe 100644 private void lavaSettings() { lavaInfinite = getBoolean("blocks.lava.infinite-source", lavaInfinite); -- -2.24.0 +2.26.2 diff --git a/patches/server/0079-Add-getPlayer-to-SkeletonHorseTrapEvent.patch b/patches/server/0080-Add-getPlayer-to-SkeletonHorseTrapEvent.patch similarity index 94% rename from patches/server/0079-Add-getPlayer-to-SkeletonHorseTrapEvent.patch rename to patches/server/0080-Add-getPlayer-to-SkeletonHorseTrapEvent.patch index 64d47db43..603fb3b01 100644 --- a/patches/server/0079-Add-getPlayer-to-SkeletonHorseTrapEvent.patch +++ b/patches/server/0080-Add-getPlayer-to-SkeletonHorseTrapEvent.patch @@ -1,4 +1,4 @@ -From 299391072b30918e1560767e8bbdc5e6746e6b10 Mon Sep 17 00:00:00 2001 +From 26ec61f54554a0718d2beda5f5a8d0aee58b724b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 02:35:35 -0500 Subject: [PATCH] Add getPlayer to SkeletonHorseTrapEvent @@ -8,7 +8,7 @@ Subject: [PATCH] Add getPlayer to SkeletonHorseTrapEvent 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/PathfinderGoalHorseTrap.java b/src/main/java/net/minecraft/server/PathfinderGoalHorseTrap.java -index 37626f925f..f8fd2d99cc 100644 +index 37626f925..f8fd2d99c 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalHorseTrap.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalHorseTrap.java @@ -2,7 +2,8 @@ package net.minecraft.server; @@ -37,5 +37,5 @@ index 37626f925f..f8fd2d99cc 100644 this.a.r(false); -- -2.24.0 +2.26.2 diff --git a/patches/server/0080-Add-LootableInventoryFirstFillEvent.patch b/patches/server/0081-Add-LootableInventoryFirstFillEvent.patch similarity index 94% rename from patches/server/0080-Add-LootableInventoryFirstFillEvent.patch rename to patches/server/0081-Add-LootableInventoryFirstFillEvent.patch index 2d8470610..0154fbccc 100644 --- a/patches/server/0080-Add-LootableInventoryFirstFillEvent.patch +++ b/patches/server/0081-Add-LootableInventoryFirstFillEvent.patch @@ -1,4 +1,4 @@ -From 2430d722450bbd7540f860b986524d670f9b0c49 Mon Sep 17 00:00:00 2001 +From 75cfb6ec2610c568bae8a6dda00f45e906ae1612 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 19 Oct 2019 02:43:17 -0500 Subject: [PATCH] Add LootableInventoryFirstFillEvent @@ -9,7 +9,7 @@ Subject: [PATCH] Add LootableInventoryFirstFillEvent 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java b/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java -index b5401eaf97..1decf0e895 100644 +index b5401eaf9..1decf0e89 100644 --- a/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java +++ b/src/main/java/com/destroystokyo/paper/loottable/PaperLootableInventoryData.java @@ -49,6 +49,10 @@ public class PaperLootableInventoryData { @@ -24,7 +24,7 @@ index b5401eaf97..1decf0e895 100644 } diff --git a/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java b/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java -index d50410532c..2f24e5a702 100644 +index d50410532..2f24e5a70 100644 --- a/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java +++ b/src/main/java/com/destroystokyo/paper/loottable/PaperTileEntityLootableInventory.java @@ -57,7 +57,10 @@ public class PaperTileEntityLootableInventory implements PaperLootableBlockInven @@ -40,5 +40,5 @@ index d50410532c..2f24e5a702 100644 @Override -- -2.24.0 +2.26.2 diff --git a/patches/server/0081-Villagers-follow-emerald-blocks.patch b/patches/server/0082-Villagers-follow-emerald-blocks.patch similarity index 95% rename from patches/server/0081-Villagers-follow-emerald-blocks.patch rename to patches/server/0082-Villagers-follow-emerald-blocks.patch index 0dac60850..53244f9bf 100644 --- a/patches/server/0081-Villagers-follow-emerald-blocks.patch +++ b/patches/server/0082-Villagers-follow-emerald-blocks.patch @@ -1,4 +1,4 @@ -From a25b27dda3e668cb6ff10b7c2e50040951413170 Mon Sep 17 00:00:00 2001 +From 19e6faba58e550dc1e079ec3ee6e18d3a22ea2db Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 29 Nov 2019 22:10:12 -0600 Subject: [PATCH] Villagers follow emerald blocks @@ -11,7 +11,7 @@ Subject: [PATCH] Villagers follow emerald blocks 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 843f22260b..a30ac7cc0b 100644 +index 843f22260..a30ac7cc0 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java @@ -89,6 +89,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @@ -23,7 +23,7 @@ index 843f22260b..a30ac7cc0b 100644 // Purpur end diff --git a/src/main/java/net/minecraft/server/EntityVillagerAbstract.java b/src/main/java/net/minecraft/server/EntityVillagerAbstract.java -index 5fbd13512f..13063f0068 100644 +index 5fbd13512..13063f006 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerAbstract.java +++ b/src/main/java/net/minecraft/server/EntityVillagerAbstract.java @@ -13,7 +13,7 @@ import org.bukkit.event.entity.VillagerAcquireTradeEvent; @@ -36,7 +36,7 @@ index 5fbd13512f..13063f0068 100644 private CraftMerchant craftMerchant; diff --git a/src/main/java/net/minecraft/server/EntityVillagerTrader.java b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -index 4e9c5e84a9..14ca5fc367 100644 +index 4e9c5e84a..14ca5fc36 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/server/EntityVillagerTrader.java @@ -57,6 +57,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { @@ -48,7 +48,7 @@ index 4e9c5e84a9..14ca5fc367 100644 this.goalSelector.a(8, new PathfinderGoalRandomStrollLand(this, 0.35D)); this.goalSelector.a(9, new PathfinderGoalInteract(this, EntityHuman.class, 3.0F, 1.0F)); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a4a09874fe..7d2c51a2fa 100644 +index a4a09874f..7d2c51a2f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -775,21 +775,25 @@ public class PurpurWorldConfig { @@ -78,5 +78,5 @@ index a4a09874fe..7d2c51a2fa 100644 public boolean vindicatorRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0082-Add-player-death-exp-control-options.patch b/patches/server/0083-Add-player-death-exp-control-options.patch similarity index 95% rename from patches/server/0082-Add-player-death-exp-control-options.patch rename to patches/server/0083-Add-player-death-exp-control-options.patch index af3d80243..2b5737f18 100644 --- a/patches/server/0082-Add-player-death-exp-control-options.patch +++ b/patches/server/0083-Add-player-death-exp-control-options.patch @@ -1,4 +1,4 @@ -From 3cf910339695f40b5ed42563f9c8686edbe777f3 Mon Sep 17 00:00:00 2001 +From 92ca7e1fa2b6587b860228b834de3e7afbf8c119 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 26 Dec 2019 22:08:37 -0600 Subject: [PATCH] Add player death exp control options @@ -9,7 +9,7 @@ Subject: [PATCH] Add player death exp control options 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 22e17e3de3..14b57d678e 100644 +index 22e17e3de..14b57d678 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java @@ -1862,9 +1862,18 @@ public abstract class EntityHuman extends EntityLiving { @@ -35,7 +35,7 @@ index 22e17e3de3..14b57d678e 100644 return 0; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7d2c51a2fa..caf7f0e84f 100644 +index 7d2c51a2f..caf7f0e84 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -155,6 +155,8 @@ public class PurpurWorldConfig { @@ -57,5 +57,5 @@ index 7d2c51a2fa..caf7f0e84f 100644 playerSleepCondition = getString("gameplay-mechanics.player.sleep.condition", playerSleepCondition); useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); -- -2.24.0 +2.26.2 diff --git a/patches/server/0083-Add-permission-for-F3-N-debug.patch b/patches/server/0084-Add-permission-for-F3-N-debug.patch similarity index 89% rename from patches/server/0083-Add-permission-for-F3-N-debug.patch rename to patches/server/0084-Add-permission-for-F3-N-debug.patch index c9a95c0b5..a170bfb98 100644 --- a/patches/server/0083-Add-permission-for-F3-N-debug.patch +++ b/patches/server/0084-Add-permission-for-F3-N-debug.patch @@ -1,4 +1,4 @@ -From aa5c11cb61cbc8abd619e4c328ebc1c3aba5562e Mon Sep 17 00:00:00 2001 +From d0cec740c83328fb65a0ca8c25763f31c4f16d8b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 28 Dec 2019 04:21:54 -0600 Subject: [PATCH] Add permission for F3+N debug @@ -8,7 +8,7 @@ Subject: [PATCH] Add permission for F3+N debug 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index 54f6dfcaa7..29150bd7d7 100644 +index 54f6dfcaa..29150bd7d 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java @@ -979,6 +979,7 @@ public abstract class PlayerList { diff --git a/patches/server/0084-Allow-leashing-villagers.patch b/patches/server/0085-Allow-leashing-villagers.patch similarity index 95% rename from patches/server/0084-Allow-leashing-villagers.patch rename to patches/server/0085-Allow-leashing-villagers.patch index 2f322c406..0e0827cb5 100644 --- a/patches/server/0084-Allow-leashing-villagers.patch +++ b/patches/server/0085-Allow-leashing-villagers.patch @@ -1,4 +1,4 @@ -From db97b9b5b03450f6ab223ddd1db35fc85bdcf914 Mon Sep 17 00:00:00 2001 +From 79dd41722e6a0fd20c5c84f6ed83b6eb25a56a40 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 3 Oct 2019 18:08:03 -0500 Subject: [PATCH] Allow leashing villagers @@ -11,7 +11,7 @@ Subject: [PATCH] Allow leashing villagers 4 files changed, 19 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index bf9d044b0b..3adc3434e1 100644 +index bf9d044b0..3adc3434e 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -1062,6 +1062,7 @@ public abstract class EntityInsentient extends EntityLiving { @@ -23,7 +23,7 @@ index bf9d044b0b..3adc3434e1 100644 if (CraftEventFactory.callPlayerUnleashEntityEvent(this, entityhuman).isCancelled()) { ((EntityPlayer) entityhuman).playerConnection.sendPacket(new PacketPlayOutAttachEntity(this, this.getLeashHolder())); diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index a30ac7cc0b..e3322fedd7 100644 +index a30ac7cc0..e3322fedd 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java @@ -1031,4 +1031,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @@ -39,7 +39,7 @@ index a30ac7cc0b..e3322fedd7 100644 + // Purpur - end } diff --git a/src/main/java/net/minecraft/server/EntityVillagerTrader.java b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -index 14ca5fc367..427c589075 100644 +index 14ca5fc36..427c58907 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/server/EntityVillagerTrader.java @@ -283,4 +283,11 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { @@ -55,7 +55,7 @@ index 14ca5fc367..427c589075 100644 + // Purpur - end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index caf7f0e84f..284054db42 100644 +index caf7f0e84..284054db4 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -780,6 +780,7 @@ public class PurpurWorldConfig { @@ -88,5 +88,5 @@ index caf7f0e84f..284054db42 100644 public boolean vindicatorRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0085-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0086-Implement-configurable-search-radius-for-villagers-t.patch similarity index 94% rename from patches/server/0085-Implement-configurable-search-radius-for-villagers-t.patch rename to patches/server/0086-Implement-configurable-search-radius-for-villagers-t.patch index 28c5719cf..0489941df 100644 --- a/patches/server/0085-Implement-configurable-search-radius-for-villagers-t.patch +++ b/patches/server/0086-Implement-configurable-search-radius-for-villagers-t.patch @@ -1,4 +1,4 @@ -From 0ed0c2c3d8c57f8dbba946096e73323155c4292e Mon Sep 17 00:00:00 2001 +From 2956498159128f608aa1b247a50bb542a496b507 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Mon, 22 Jul 2019 17:32:17 -0500 Subject: [PATCH] Implement configurable search radius for villagers to spawn @@ -10,7 +10,7 @@ Subject: [PATCH] Implement configurable search radius for villagers to spawn 2 files changed, 5 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index e3322fedd7..2153b36a3c 100644 +index e3322fedd..2153b36a3 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java @@ -918,6 +918,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @@ -22,7 +22,7 @@ index e3322fedd7..2153b36a3c 100644 int i = 0; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 284054db42..f60c4b6291 100644 +index 284054db4..f60c4b629 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -781,6 +781,8 @@ public class PurpurWorldConfig { @@ -44,5 +44,5 @@ index 284054db42..f60c4b6291 100644 public boolean villagerTraderRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0086-Make-lava-flow-speed-configurable.patch b/patches/server/0087-Make-lava-flow-speed-configurable.patch similarity index 92% rename from patches/server/0086-Make-lava-flow-speed-configurable.patch rename to patches/server/0087-Make-lava-flow-speed-configurable.patch index 2bf918906..2f37657b3 100644 --- a/patches/server/0086-Make-lava-flow-speed-configurable.patch +++ b/patches/server/0087-Make-lava-flow-speed-configurable.patch @@ -1,4 +1,4 @@ -From cd754245bf6eccc824291a97f9db8386851c3541 Mon Sep 17 00:00:00 2001 +From 2ad07e4e8cf50edf8c2c9a8558941a2cecbdbc57 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 2 Jan 2020 11:31:36 -0600 Subject: [PATCH] Make lava flow speed configurable @@ -10,7 +10,7 @@ Subject: [PATCH] Make lava flow speed configurable 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/FluidTypeLava.java b/src/main/java/net/minecraft/server/FluidTypeLava.java -index 09f82c2d92..470e9bfd01 100644 +index 09f82c2d9..470e9bfd0 100644 --- a/src/main/java/net/minecraft/server/FluidTypeLava.java +++ b/src/main/java/net/minecraft/server/FluidTypeLava.java @@ -129,7 +129,7 @@ public abstract class FluidTypeLava extends FluidTypeFlowing { @@ -23,7 +23,7 @@ index 09f82c2d92..470e9bfd01 100644 @Override diff --git a/src/main/java/net/minecraft/server/WorldProvider.java b/src/main/java/net/minecraft/server/WorldProvider.java -index 39252e6873..75f8441ab6 100644 +index 39252e687..75f8441ab 100644 --- a/src/main/java/net/minecraft/server/WorldProvider.java +++ b/src/main/java/net/minecraft/server/WorldProvider.java @@ -42,6 +42,7 @@ public abstract class WorldProvider { @@ -35,7 +35,7 @@ index 39252e6873..75f8441ab6 100644 return this.d; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f60c4b6291..c238607acb 100644 +index f60c4b629..c238607ac 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -133,8 +133,12 @@ public class PurpurWorldConfig { @@ -52,5 +52,5 @@ index f60c4b6291..c238607acb 100644 public boolean signAllowColors = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0087-Add-wither-skeleton-takes-wither-damage-option.patch b/patches/server/0088-Add-wither-skeleton-takes-wither-damage-option.patch similarity index 93% rename from patches/server/0087-Add-wither-skeleton-takes-wither-damage-option.patch rename to patches/server/0088-Add-wither-skeleton-takes-wither-damage-option.patch index 220e7cf6c..75392a21b 100644 --- a/patches/server/0087-Add-wither-skeleton-takes-wither-damage-option.patch +++ b/patches/server/0088-Add-wither-skeleton-takes-wither-damage-option.patch @@ -1,4 +1,4 @@ -From 687abc1b1ff8e4e40a4e2c3fed099e302b081e4f Mon Sep 17 00:00:00 2001 +From c9273015b40bdffe3e7cb4fdc7736de1e6f5aa0b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 14 Jan 2020 19:43:40 -0600 Subject: [PATCH] Add wither skeleton takes wither damage option @@ -9,7 +9,7 @@ Subject: [PATCH] Add wither skeleton takes wither damage option 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntitySkeletonWither.java b/src/main/java/net/minecraft/server/EntitySkeletonWither.java -index 8aa0a6699f..0fd740e717 100644 +index 8aa0a6699..0fd740e71 100644 --- a/src/main/java/net/minecraft/server/EntitySkeletonWither.java +++ b/src/main/java/net/minecraft/server/EntitySkeletonWither.java @@ -108,6 +108,6 @@ public class EntitySkeletonWither extends EntitySkeletonAbstract { @@ -21,7 +21,7 @@ index 8aa0a6699f..0fd740e717 100644 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c238607acb..d4b4dfdd3b 100644 +index c238607ac..d4b4dfdd3 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -844,10 +844,12 @@ public class PurpurWorldConfig { @@ -38,5 +38,5 @@ index c238607acb..d4b4dfdd3b 100644 public boolean wolfRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0088-UPnP-Port-Forwarding-Service.patch b/patches/server/0089-UPnP-Port-Forwarding-Service.patch similarity index 95% rename from patches/server/0088-UPnP-Port-Forwarding-Service.patch rename to patches/server/0089-UPnP-Port-Forwarding-Service.patch index 810e15db5..f4ad034f8 100644 --- a/patches/server/0088-UPnP-Port-Forwarding-Service.patch +++ b/patches/server/0089-UPnP-Port-Forwarding-Service.patch @@ -1,4 +1,4 @@ -From dce1cff61c4daa9eaffa8510209cd74a5256f378 Mon Sep 17 00:00:00 2001 +From 57fa86c225f61c3853117c13638b425715d53c50 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Wed, 22 Jan 2020 20:13:40 -0600 Subject: [PATCH] UPnP Port Forwarding Service @@ -14,10 +14,10 @@ Subject: [PATCH] UPnP Port Forwarding Service create mode 100644 src/main/java/net/pl3x/purpur/gui/info/UPnPComponent.java diff --git a/pom.xml b/pom.xml -index d5709e670b..43d6bed366 100644 +index 097c736bc..adf7f78da 100644 --- a/pom.xml +++ b/pom.xml -@@ -56,6 +56,12 @@ +@@ -55,6 +55,12 @@ 1.7.7.1 compile @@ -30,7 +30,7 @@ index d5709e670b..43d6bed366 100644 net.minecrell -@@ -167,6 +173,10 @@ +@@ -166,6 +172,10 @@ spigotmc-public https://hub.spigotmc.org/nexus/content/groups/public/ @@ -42,10 +42,10 @@ index d5709e670b..43d6bed366 100644 diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index b29f5dc8c2..63b5bbc0e8 100644 +index 7f2db5f0b..5cfb6fd3d 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -241,6 +241,31 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -242,6 +242,31 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer return false; } @@ -78,7 +78,7 @@ index b29f5dc8c2..63b5bbc0e8 100644 // this.a((PlayerList) (new DedicatedPlayerList(this))); // Spigot - moved up server.loadPlugins(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 81422ab15a..a888465187 100644 +index f23fdd5f2..d9e5eda9b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -187,6 +187,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant Date: Tue, 11 Feb 2020 21:56:48 -0600 Subject: [PATCH] Implement EntityMoveEvent @@ -8,7 +8,7 @@ Subject: [PATCH] Implement EntityMoveEvent 1 file changed, 15 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index d6751e3cce..08ae190b07 100644 +index 28e555d6e..387f74fe1 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -17,6 +17,7 @@ import java.util.Random; @@ -41,5 +41,5 @@ index d6751e3cce..08ae190b07 100644 private void n() { -- -2.24.0 +2.26.2 diff --git a/patches/server/0090-Add-option-to-disable-saving-projectiles-to-disk.patch b/patches/server/0091-Add-option-to-disable-saving-projectiles-to-disk.patch similarity index 94% rename from patches/server/0090-Add-option-to-disable-saving-projectiles-to-disk.patch rename to patches/server/0091-Add-option-to-disable-saving-projectiles-to-disk.patch index d93bf6ea7..f4e68c9c2 100644 --- a/patches/server/0090-Add-option-to-disable-saving-projectiles-to-disk.patch +++ b/patches/server/0091-Add-option-to-disable-saving-projectiles-to-disk.patch @@ -1,4 +1,4 @@ -From 028b721bbfb72653155b305072cc5a9a08c77d67 Mon Sep 17 00:00:00 2001 +From d15dafad3161b283965161bcd83c0e2f608fb010 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 18 Feb 2020 20:07:08 -0600 Subject: [PATCH] Add option to disable saving projectiles to disk @@ -15,10 +15,10 @@ Subject: [PATCH] Add option to disable saving projectiles to disk 8 files changed, 58 insertions(+) diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java -index 1685237dfd..a8c0f9216a 100644 +index 20b6b58bd..6278b8d45 100644 --- a/src/main/java/net/minecraft/server/ChunkRegionLoader.java +++ b/src/main/java/net/minecraft/server/ChunkRegionLoader.java -@@ -468,6 +468,7 @@ public class ChunkRegionLoader { +@@ -476,6 +476,7 @@ public class ChunkRegionLoader { while (iterator1.hasNext()) { Entity entity = (Entity) iterator1.next(); @@ -27,10 +27,10 @@ index 1685237dfd..a8c0f9216a 100644 // Paper start if (asyncsavedata == null && !entity.dead && (int) Math.floor(entity.locX()) >> 4 != chunk.getPos().x || (int) Math.floor(entity.locZ()) >> 4 != chunk.getPos().z) { diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index ce0821a656..b92e956e6c 100644 +index 92b77ce34..4fb6a3fd7 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1590,6 +1590,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1775,6 +1775,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } @@ -44,7 +44,7 @@ index ce0821a656..b92e956e6c 100644 String s = this.getSaveID(); diff --git a/src/main/java/net/minecraft/server/EntityArrow.java b/src/main/java/net/minecraft/server/EntityArrow.java -index 9c97edf9c9..48da1e662a 100644 +index e66f6b300..ae44f878f 100644 --- a/src/main/java/net/minecraft/server/EntityArrow.java +++ b/src/main/java/net/minecraft/server/EntityArrow.java @@ -68,6 +68,13 @@ public abstract class EntityArrow extends Entity implements IProjectile { @@ -62,7 +62,7 @@ index 9c97edf9c9..48da1e662a 100644 this.av = soundeffect; } diff --git a/src/main/java/net/minecraft/server/EntityEnderSignal.java b/src/main/java/net/minecraft/server/EntityEnderSignal.java -index 7ebd7da1c5..74f8257ecd 100644 +index 7ebd7da1c..74f8257ec 100644 --- a/src/main/java/net/minecraft/server/EntityEnderSignal.java +++ b/src/main/java/net/minecraft/server/EntityEnderSignal.java @@ -19,6 +19,13 @@ public class EntityEnderSignal extends Entity { @@ -80,7 +80,7 @@ index 7ebd7da1c5..74f8257ecd 100644 if (itemstack.getItem() != Items.ENDER_EYE || itemstack.hasTag()) { this.getDataWatcher().set(EntityEnderSignal.b, SystemUtils.a(itemstack.cloneItemStack(), (itemstack1) -> { // Purpur - decompile error diff --git a/src/main/java/net/minecraft/server/EntityFireworks.java b/src/main/java/net/minecraft/server/EntityFireworks.java -index 5c3731f68a..ce3168e5de 100644 +index 5c3731f68..ce3168e5d 100644 --- a/src/main/java/net/minecraft/server/EntityFireworks.java +++ b/src/main/java/net/minecraft/server/EntityFireworks.java @@ -21,6 +21,13 @@ public class EntityFireworks extends Entity implements IProjectile { @@ -98,7 +98,7 @@ index 5c3731f68a..ce3168e5de 100644 @Override public void inactiveTick() { diff --git a/src/main/java/net/minecraft/server/EntityLlamaSpit.java b/src/main/java/net/minecraft/server/EntityLlamaSpit.java -index b7a92e1002..b95ee50a4e 100644 +index b7a92e100..b95ee50a4 100644 --- a/src/main/java/net/minecraft/server/EntityLlamaSpit.java +++ b/src/main/java/net/minecraft/server/EntityLlamaSpit.java @@ -19,6 +19,13 @@ public class EntityLlamaSpit extends Entity implements IProjectile { @@ -116,7 +116,7 @@ index b7a92e1002..b95ee50a4e 100644 public void tick() { super.tick(); diff --git a/src/main/java/net/minecraft/server/EntityProjectile.java b/src/main/java/net/minecraft/server/EntityProjectile.java -index f5c8074dcf..674f2ccc7f 100644 +index f5c8074dc..674f2ccc7 100644 --- a/src/main/java/net/minecraft/server/EntityProjectile.java +++ b/src/main/java/net/minecraft/server/EntityProjectile.java @@ -35,6 +35,13 @@ public abstract class EntityProjectile extends Entity implements IProjectile { @@ -134,7 +134,7 @@ index f5c8074dcf..674f2ccc7f 100644 float f5 = -MathHelper.sin(f1 * 0.017453292F) * MathHelper.cos(f * 0.017453292F); float f6 = -MathHelper.sin((f + f2) * 0.017453292F); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d4b4dfdd3b..51585a7d80 100644 +index d4b4dfdd3..51585a7d8 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -164,6 +164,7 @@ public class PurpurWorldConfig { @@ -168,5 +168,5 @@ index d4b4dfdd3b..51585a7d80 100644 public int elytraDamagePerSecond = 1; -- -2.24.0 +2.26.2 diff --git a/patches/server/0091-Implement-bed-explosion-options.patch b/patches/server/0092-Implement-bed-explosion-options.patch similarity index 95% rename from patches/server/0091-Implement-bed-explosion-options.patch rename to patches/server/0092-Implement-bed-explosion-options.patch index d235c29ba..13986a679 100644 --- a/patches/server/0091-Implement-bed-explosion-options.patch +++ b/patches/server/0092-Implement-bed-explosion-options.patch @@ -1,4 +1,4 @@ -From 58554dd11fd8b7913babb85ce4e63118433b7d9a Mon Sep 17 00:00:00 2001 +From b014b34988129b072bdc1e2636521406e98102a7 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 22 Feb 2020 15:04:29 -0600 Subject: [PATCH] Implement bed explosion options @@ -9,7 +9,7 @@ Subject: [PATCH] Implement bed explosion options 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/BlockBed.java b/src/main/java/net/minecraft/server/BlockBed.java -index e0bc6080ef..61a5e06a25 100644 +index e0bc6080e..61a5e06a2 100644 --- a/src/main/java/net/minecraft/server/BlockBed.java +++ b/src/main/java/net/minecraft/server/BlockBed.java @@ -84,7 +84,7 @@ public class BlockBed extends BlockFacingHorizontal implements ITileEntity { @@ -22,7 +22,7 @@ index e0bc6080ef..61a5e06a25 100644 // CraftBukkit end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 51585a7d80..0e34414a7e 100644 +index 51585a7d8..0e34414a7 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -3,6 +3,7 @@ package net.pl3x.purpur; @@ -65,5 +65,5 @@ index 51585a7d80..0e34414a7e 100644 public int campfireRegenDuration = 80; public int campfireRegenRange = 5; -- -2.24.0 +2.26.2 diff --git a/patches/server/0092-Add-item-entity-options.patch b/patches/server/0093-Add-item-entity-options.patch similarity index 96% rename from patches/server/0092-Add-item-entity-options.patch rename to patches/server/0093-Add-item-entity-options.patch index cfde5bb27..d4fa6d349 100644 --- a/patches/server/0092-Add-item-entity-options.patch +++ b/patches/server/0093-Add-item-entity-options.patch @@ -1,4 +1,4 @@ -From 89ea4e8b3b6cb824adb6f23057e9177d3b66e006 Mon Sep 17 00:00:00 2001 +From 04319c50a3ac3023adf72f4209ec5b57464a636f Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 22 Feb 2020 15:54:08 -0600 Subject: [PATCH] Add item entity options @@ -10,10 +10,10 @@ Subject: [PATCH] Add item entity options 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index b92e956e6c..69983550bb 100644 +index 4fb6a3fd7..5a8005291 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1321,6 +1321,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1506,6 +1506,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } @@ -22,7 +22,7 @@ index b92e956e6c..69983550bb 100644 return this.a(tag, false); } diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java -index bbb9ca1efc..262a7935e7 100644 +index bbb9ca1ef..262a7935e 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java @@ -71,7 +71,7 @@ public class EntityItem extends Entity { @@ -56,7 +56,7 @@ index bbb9ca1efc..262a7935e7 100644 if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f)) { return false; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0e34414a7e..4cb856ebbb 100644 +index 0e34414a7..4cb856ebb 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -5,6 +5,8 @@ import net.minecraft.server.Block; @@ -100,5 +100,5 @@ index 0e34414a7e..4cb856ebbb 100644 playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation); playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); -- -2.24.0 +2.26.2 diff --git a/patches/server/0093-Make-natural-spawns-per-biome-configurable.patch b/patches/server/0094-Make-natural-spawns-per-biome-configurable.patch similarity index 98% rename from patches/server/0093-Make-natural-spawns-per-biome-configurable.patch rename to patches/server/0094-Make-natural-spawns-per-biome-configurable.patch index 1eae911e3..a71313def 100644 --- a/patches/server/0093-Make-natural-spawns-per-biome-configurable.patch +++ b/patches/server/0094-Make-natural-spawns-per-biome-configurable.patch @@ -1,4 +1,4 @@ -From 0feb6fdfb92a6949ab0224cc4d0d4f05a4fe5278 Mon Sep 17 00:00:00 2001 +From 99a4a1ff5afd0d395ef5fab555743441f60e616e Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 27 Feb 2020 13:39:06 -0600 Subject: [PATCH] Make natural spawns per biome configurable @@ -86,7 +86,7 @@ Subject: [PATCH] Make natural spawns per biome configurable create mode 100644 src/main/resources/biomes.yml diff --git a/src/main/java/net/minecraft/server/BiomeBambooJungle.java b/src/main/java/net/minecraft/server/BiomeBambooJungle.java -index 9c38f8907a..3980504d9c 100644 +index 9c38f8907..3980504d9 100644 --- a/src/main/java/net/minecraft/server/BiomeBambooJungle.java +++ b/src/main/java/net/minecraft/server/BiomeBambooJungle.java @@ -22,22 +22,6 @@ public class BiomeBambooJungle extends BiomeBase { @@ -114,7 +114,7 @@ index 9c38f8907a..3980504d9c 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeBambooJungleHills.java b/src/main/java/net/minecraft/server/BiomeBambooJungleHills.java -index 2a6dafccdd..501314da9a 100644 +index 2a6dafccd..501314da9 100644 --- a/src/main/java/net/minecraft/server/BiomeBambooJungleHills.java +++ b/src/main/java/net/minecraft/server/BiomeBambooJungleHills.java @@ -22,22 +22,6 @@ public final class BiomeBambooJungleHills extends BiomeBase { @@ -142,7 +142,7 @@ index 2a6dafccdd..501314da9a 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java -index 0102a170dc..6e0627fdca 100644 +index ef6c85557..51bc8643f 100644 --- a/src/main/java/net/minecraft/server/BiomeBase.java +++ b/src/main/java/net/minecraft/server/BiomeBase.java @@ -17,8 +17,25 @@ import org.apache.logging.log4j.Logger; @@ -181,7 +181,7 @@ index 0102a170dc..6e0627fdca 100644 private final ThreadLocal w = ThreadLocal.withInitial(() -> { return (Long2FloatLinkedOpenHashMap) SystemUtils.a(() -> { Long2FloatLinkedOpenHashMap long2floatlinkedopenhashmap = new Long2FloatLinkedOpenHashMap(1024, 0.25F) { -@@ -112,6 +129,16 @@ public abstract class BiomeBase { +@@ -124,6 +141,16 @@ public abstract class BiomeBase { return MathHelper.f(0.62222224F - f * 0.05F, 0.5F + f * 0.1F, 1.0F); } @@ -199,7 +199,7 @@ index 0102a170dc..6e0627fdca 100644 ((List) this.v.get(enumcreaturetype)).add(biomebase_biomemeta); } diff --git a/src/main/java/net/minecraft/server/BiomeBeach.java b/src/main/java/net/minecraft/server/BiomeBeach.java -index f4e9345aeb..d8ff2c9a21 100644 +index f4e9345ae..d8ff2c9a2 100644 --- a/src/main/java/net/minecraft/server/BiomeBeach.java +++ b/src/main/java/net/minecraft/server/BiomeBeach.java @@ -20,15 +20,6 @@ public final class BiomeBeach extends BiomeBase { @@ -220,7 +220,7 @@ index f4e9345aeb..d8ff2c9a21 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeBigHills.java b/src/main/java/net/minecraft/server/BiomeBigHills.java -index 58c30f6523..7107267421 100644 +index 58c30f652..710726742 100644 --- a/src/main/java/net/minecraft/server/BiomeBigHills.java +++ b/src/main/java/net/minecraft/server/BiomeBigHills.java @@ -22,19 +22,6 @@ public final class BiomeBigHills extends BiomeBase { @@ -245,7 +245,7 @@ index 58c30f6523..7107267421 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeBirchForest.java b/src/main/java/net/minecraft/server/BiomeBirchForest.java -index 9437438c82..1749c258b9 100644 +index 9437438c8..1749c258b 100644 --- a/src/main/java/net/minecraft/server/BiomeBirchForest.java +++ b/src/main/java/net/minecraft/server/BiomeBirchForest.java @@ -21,18 +21,6 @@ public final class BiomeBirchForest extends BiomeBase { @@ -269,7 +269,7 @@ index 9437438c82..1749c258b9 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeBirchForestHills.java b/src/main/java/net/minecraft/server/BiomeBirchForestHills.java -index 3e5c23d31e..5d262c9712 100644 +index 3e5c23d31..5d262c971 100644 --- a/src/main/java/net/minecraft/server/BiomeBirchForestHills.java +++ b/src/main/java/net/minecraft/server/BiomeBirchForestHills.java @@ -21,18 +21,6 @@ public final class BiomeBirchForestHills extends BiomeBase { @@ -293,7 +293,7 @@ index 3e5c23d31e..5d262c9712 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeBirchForestHillsMutated.java b/src/main/java/net/minecraft/server/BiomeBirchForestHillsMutated.java -index d5eb5c91c4..de048fb480 100644 +index d5eb5c91c..de048fb48 100644 --- a/src/main/java/net/minecraft/server/BiomeBirchForestHillsMutated.java +++ b/src/main/java/net/minecraft/server/BiomeBirchForestHillsMutated.java @@ -21,18 +21,6 @@ public final class BiomeBirchForestHillsMutated extends BiomeBase { @@ -317,7 +317,7 @@ index d5eb5c91c4..de048fb480 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeBirchForestMutated.java b/src/main/java/net/minecraft/server/BiomeBirchForestMutated.java -index e805f9568e..2115b05caa 100644 +index e805f9568..2115b05ca 100644 --- a/src/main/java/net/minecraft/server/BiomeBirchForestMutated.java +++ b/src/main/java/net/minecraft/server/BiomeBirchForestMutated.java @@ -21,18 +21,6 @@ public final class BiomeBirchForestMutated extends BiomeBase { @@ -341,7 +341,7 @@ index e805f9568e..2115b05caa 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeColdBeach.java b/src/main/java/net/minecraft/server/BiomeColdBeach.java -index 1b92f4567d..210226e19f 100644 +index 1b92f4567..210226e19 100644 --- a/src/main/java/net/minecraft/server/BiomeColdBeach.java +++ b/src/main/java/net/minecraft/server/BiomeColdBeach.java @@ -20,14 +20,6 @@ public final class BiomeColdBeach extends BiomeBase { @@ -361,7 +361,7 @@ index 1b92f4567d..210226e19f 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeColdDeepOcean.java b/src/main/java/net/minecraft/server/BiomeColdDeepOcean.java -index b9a5cb63a4..3622ef6690 100644 +index b9a5cb63a..3622ef669 100644 --- a/src/main/java/net/minecraft/server/BiomeColdDeepOcean.java +++ b/src/main/java/net/minecraft/server/BiomeColdDeepOcean.java @@ -25,18 +25,6 @@ public class BiomeColdDeepOcean extends BiomeBase { @@ -385,7 +385,7 @@ index b9a5cb63a4..3622ef6690 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeColdOcean.java b/src/main/java/net/minecraft/server/BiomeColdOcean.java -index 571c3d139d..c640aa9eeb 100644 +index 571c3d139..c640aa9ee 100644 --- a/src/main/java/net/minecraft/server/BiomeColdOcean.java +++ b/src/main/java/net/minecraft/server/BiomeColdOcean.java @@ -24,18 +24,6 @@ public class BiomeColdOcean extends BiomeBase { @@ -409,7 +409,7 @@ index 571c3d139d..c640aa9eeb 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeColdTaiga.java b/src/main/java/net/minecraft/server/BiomeColdTaiga.java -index 88400e77bf..caaa8ec999 100644 +index 88400e77b..caaa8ec99 100644 --- a/src/main/java/net/minecraft/server/BiomeColdTaiga.java +++ b/src/main/java/net/minecraft/server/BiomeColdTaiga.java @@ -23,21 +23,6 @@ public final class BiomeColdTaiga extends BiomeBase { @@ -436,7 +436,7 @@ index 88400e77bf..caaa8ec999 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeColdTaigaHills.java b/src/main/java/net/minecraft/server/BiomeColdTaigaHills.java -index 8a8fc7dbd2..323f20452d 100644 +index 8a8fc7dbd..323f20452 100644 --- a/src/main/java/net/minecraft/server/BiomeColdTaigaHills.java +++ b/src/main/java/net/minecraft/server/BiomeColdTaigaHills.java @@ -22,21 +22,6 @@ public final class BiomeColdTaigaHills extends BiomeBase { @@ -463,7 +463,7 @@ index 8a8fc7dbd2..323f20452d 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeColdTaigaMutated.java b/src/main/java/net/minecraft/server/BiomeColdTaigaMutated.java -index 327e6847f0..973eb8eeb6 100644 +index 327e6847f..973eb8eeb 100644 --- a/src/main/java/net/minecraft/server/BiomeColdTaigaMutated.java +++ b/src/main/java/net/minecraft/server/BiomeColdTaigaMutated.java @@ -22,21 +22,6 @@ public final class BiomeColdTaigaMutated extends BiomeBase { @@ -490,7 +490,7 @@ index 327e6847f0..973eb8eeb6 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeDeepOcean.java b/src/main/java/net/minecraft/server/BiomeDeepOcean.java -index 651d44cb37..7088603b15 100644 +index 651d44cb3..7088603b1 100644 --- a/src/main/java/net/minecraft/server/BiomeDeepOcean.java +++ b/src/main/java/net/minecraft/server/BiomeDeepOcean.java @@ -25,18 +25,6 @@ public final class BiomeDeepOcean extends BiomeBase { @@ -514,7 +514,7 @@ index 651d44cb37..7088603b15 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeDesert.java b/src/main/java/net/minecraft/server/BiomeDesert.java -index 257732dad7..168614fe59 100644 +index 257732dad..168614fe5 100644 --- a/src/main/java/net/minecraft/server/BiomeDesert.java +++ b/src/main/java/net/minecraft/server/BiomeDesert.java @@ -24,16 +24,6 @@ public final class BiomeDesert extends BiomeBase { @@ -536,7 +536,7 @@ index 257732dad7..168614fe59 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeDesertHills.java b/src/main/java/net/minecraft/server/BiomeDesertHills.java -index 3752fc4509..4df4437013 100644 +index 3752fc450..4df443701 100644 --- a/src/main/java/net/minecraft/server/BiomeDesertHills.java +++ b/src/main/java/net/minecraft/server/BiomeDesertHills.java @@ -22,16 +22,6 @@ public final class BiomeDesertHills extends BiomeBase { @@ -558,7 +558,7 @@ index 3752fc4509..4df4437013 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeDesertMutated.java b/src/main/java/net/minecraft/server/BiomeDesertMutated.java -index 1a0b569322..ac565c3822 100644 +index 1a0b56932..ac565c382 100644 --- a/src/main/java/net/minecraft/server/BiomeDesertMutated.java +++ b/src/main/java/net/minecraft/server/BiomeDesertMutated.java @@ -21,16 +21,6 @@ public final class BiomeDesertMutated extends BiomeBase { @@ -580,7 +580,7 @@ index 1a0b569322..ac565c3822 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeExtremeHillsEdge.java b/src/main/java/net/minecraft/server/BiomeExtremeHillsEdge.java -index 8e19e06889..93f9c55bb2 100644 +index 8e19e0688..93f9c55bb 100644 --- a/src/main/java/net/minecraft/server/BiomeExtremeHillsEdge.java +++ b/src/main/java/net/minecraft/server/BiomeExtremeHillsEdge.java @@ -22,19 +22,6 @@ public final class BiomeExtremeHillsEdge extends BiomeBase { @@ -605,7 +605,7 @@ index 8e19e06889..93f9c55bb2 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeExtremeHillsMutated.java b/src/main/java/net/minecraft/server/BiomeExtremeHillsMutated.java -index 69d4880c74..5c73ee4fb8 100644 +index 69d4880c7..5c73ee4fb 100644 --- a/src/main/java/net/minecraft/server/BiomeExtremeHillsMutated.java +++ b/src/main/java/net/minecraft/server/BiomeExtremeHillsMutated.java @@ -22,19 +22,6 @@ public final class BiomeExtremeHillsMutated extends BiomeBase { @@ -630,7 +630,7 @@ index 69d4880c74..5c73ee4fb8 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTrees.java b/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTrees.java -index 7661d53161..7bc4631db0 100644 +index 7661d5316..7bc4631db 100644 --- a/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTrees.java +++ b/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTrees.java @@ -22,19 +22,6 @@ public final class BiomeExtremeHillsWithTrees extends BiomeBase { @@ -655,7 +655,7 @@ index 7661d53161..7bc4631db0 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTreesMutated.java b/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTreesMutated.java -index 05418f8fa1..b618c7e336 100644 +index 05418f8fa..b618c7e33 100644 --- a/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTreesMutated.java +++ b/src/main/java/net/minecraft/server/BiomeExtremeHillsWithTreesMutated.java @@ -22,19 +22,6 @@ public final class BiomeExtremeHillsWithTreesMutated extends BiomeBase { @@ -680,7 +680,7 @@ index 05418f8fa1..b618c7e336 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeFlowerForest.java b/src/main/java/net/minecraft/server/BiomeFlowerForest.java -index 1d3f624323..1d0809c2cc 100644 +index 1d3f62432..1d0809c2c 100644 --- a/src/main/java/net/minecraft/server/BiomeFlowerForest.java +++ b/src/main/java/net/minecraft/server/BiomeFlowerForest.java @@ -23,19 +23,6 @@ public final class BiomeFlowerForest extends BiomeBase { @@ -705,7 +705,7 @@ index 1d3f624323..1d0809c2cc 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeForest.java b/src/main/java/net/minecraft/server/BiomeForest.java -index e849b411c6..2b69a128a6 100644 +index e849b411c..2b69a128a 100644 --- a/src/main/java/net/minecraft/server/BiomeForest.java +++ b/src/main/java/net/minecraft/server/BiomeForest.java @@ -22,19 +22,6 @@ public final class BiomeForest extends BiomeBase { @@ -730,7 +730,7 @@ index e849b411c6..2b69a128a6 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeForestHills.java b/src/main/java/net/minecraft/server/BiomeForestHills.java -index f7dea38eb3..57c7091816 100644 +index f7dea38eb..57c709181 100644 --- a/src/main/java/net/minecraft/server/BiomeForestHills.java +++ b/src/main/java/net/minecraft/server/BiomeForestHills.java @@ -22,19 +22,6 @@ public final class BiomeForestHills extends BiomeBase { @@ -755,7 +755,7 @@ index f7dea38eb3..57c7091816 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeFrozenDeepOcean.java b/src/main/java/net/minecraft/server/BiomeFrozenDeepOcean.java -index 67d120bef2..f1ab35f2fa 100644 +index 67d120bef..f1ab35f2f 100644 --- a/src/main/java/net/minecraft/server/BiomeFrozenDeepOcean.java +++ b/src/main/java/net/minecraft/server/BiomeFrozenDeepOcean.java @@ -26,19 +26,7 @@ public class BiomeFrozenDeepOcean extends BiomeBase { @@ -780,7 +780,7 @@ index 67d120bef2..f1ab35f2fa 100644 @Override diff --git a/src/main/java/net/minecraft/server/BiomeFrozenOcean.java b/src/main/java/net/minecraft/server/BiomeFrozenOcean.java -index 2772bc6dac..3941438d92 100644 +index 2772bc6da..3941438d9 100644 --- a/src/main/java/net/minecraft/server/BiomeFrozenOcean.java +++ b/src/main/java/net/minecraft/server/BiomeFrozenOcean.java @@ -25,19 +25,7 @@ public final class BiomeFrozenOcean extends BiomeBase { @@ -805,7 +805,7 @@ index 2772bc6dac..3941438d92 100644 @Override diff --git a/src/main/java/net/minecraft/server/BiomeFrozenRiver.java b/src/main/java/net/minecraft/server/BiomeFrozenRiver.java -index 4be53fc0f6..f5d98bcac9 100644 +index 4be53fc0f..f5d98bcac 100644 --- a/src/main/java/net/minecraft/server/BiomeFrozenRiver.java +++ b/src/main/java/net/minecraft/server/BiomeFrozenRiver.java @@ -19,17 +19,6 @@ public final class BiomeFrozenRiver extends BiomeBase { @@ -828,7 +828,7 @@ index 4be53fc0f6..f5d98bcac9 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeHell.java b/src/main/java/net/minecraft/server/BiomeHell.java -index 888dfcd8d4..dd3375ef84 100644 +index 888dfcd8d..dd3375ef8 100644 --- a/src/main/java/net/minecraft/server/BiomeHell.java +++ b/src/main/java/net/minecraft/server/BiomeHell.java @@ -18,9 +18,6 @@ public final class BiomeHell extends BiomeBase { @@ -843,7 +843,7 @@ index 888dfcd8d4..dd3375ef84 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeIceMountains.java b/src/main/java/net/minecraft/server/BiomeIceMountains.java -index ad9b4efe09..0e98efb9e9 100644 +index ad9b4efe0..0e98efb9e 100644 --- a/src/main/java/net/minecraft/server/BiomeIceMountains.java +++ b/src/main/java/net/minecraft/server/BiomeIceMountains.java @@ -20,18 +20,7 @@ public final class BiomeIceMountains extends BiomeBase { @@ -867,7 +867,7 @@ index ad9b4efe09..0e98efb9e9 100644 @Override diff --git a/src/main/java/net/minecraft/server/BiomeIcePlains.java b/src/main/java/net/minecraft/server/BiomeIcePlains.java -index 71606b0a71..ba0a16faa6 100644 +index 71606b0a7..ba0a16faa 100644 --- a/src/main/java/net/minecraft/server/BiomeIcePlains.java +++ b/src/main/java/net/minecraft/server/BiomeIcePlains.java @@ -23,18 +23,7 @@ public final class BiomeIcePlains extends BiomeBase { @@ -891,7 +891,7 @@ index 71606b0a71..ba0a16faa6 100644 @Override diff --git a/src/main/java/net/minecraft/server/BiomeIcePlainsSpikes.java b/src/main/java/net/minecraft/server/BiomeIcePlainsSpikes.java -index 984f94bb59..375ccf9c45 100644 +index 984f94bb5..375ccf9c4 100644 --- a/src/main/java/net/minecraft/server/BiomeIcePlainsSpikes.java +++ b/src/main/java/net/minecraft/server/BiomeIcePlainsSpikes.java @@ -22,18 +22,7 @@ public final class BiomeIcePlainsSpikes extends BiomeBase { @@ -915,7 +915,7 @@ index 984f94bb59..375ccf9c45 100644 @Override diff --git a/src/main/java/net/minecraft/server/BiomeJungle.java b/src/main/java/net/minecraft/server/BiomeJungle.java -index 95e5019968..2b154a2761 100644 +index 95e501996..2b154a276 100644 --- a/src/main/java/net/minecraft/server/BiomeJungle.java +++ b/src/main/java/net/minecraft/server/BiomeJungle.java @@ -23,22 +23,6 @@ public final class BiomeJungle extends BiomeBase { @@ -943,7 +943,7 @@ index 95e5019968..2b154a2761 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeJungleEdge.java b/src/main/java/net/minecraft/server/BiomeJungleEdge.java -index e624f9764f..e6cf5d8539 100644 +index e624f9764..e6cf5d853 100644 --- a/src/main/java/net/minecraft/server/BiomeJungleEdge.java +++ b/src/main/java/net/minecraft/server/BiomeJungleEdge.java @@ -21,19 +21,6 @@ public final class BiomeJungleEdge extends BiomeBase { @@ -968,7 +968,7 @@ index e624f9764f..e6cf5d8539 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeJungleEdgeMutated.java b/src/main/java/net/minecraft/server/BiomeJungleEdgeMutated.java -index 1fe9c840a7..d4c9907b28 100644 +index 1fe9c840a..d4c9907b2 100644 --- a/src/main/java/net/minecraft/server/BiomeJungleEdgeMutated.java +++ b/src/main/java/net/minecraft/server/BiomeJungleEdgeMutated.java @@ -21,19 +21,6 @@ public final class BiomeJungleEdgeMutated extends BiomeBase { @@ -993,7 +993,7 @@ index 1fe9c840a7..d4c9907b28 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeJungleHills.java b/src/main/java/net/minecraft/server/BiomeJungleHills.java -index e2970ab00e..9e7b702c8a 100644 +index e2970ab00..9e7b702c8 100644 --- a/src/main/java/net/minecraft/server/BiomeJungleHills.java +++ b/src/main/java/net/minecraft/server/BiomeJungleHills.java @@ -23,22 +23,6 @@ public final class BiomeJungleHills extends BiomeBase { @@ -1021,7 +1021,7 @@ index e2970ab00e..9e7b702c8a 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeJungleMutated.java b/src/main/java/net/minecraft/server/BiomeJungleMutated.java -index ffe6b4344e..f308e0dd45 100644 +index ffe6b4344..f308e0dd4 100644 --- a/src/main/java/net/minecraft/server/BiomeJungleMutated.java +++ b/src/main/java/net/minecraft/server/BiomeJungleMutated.java @@ -21,21 +21,6 @@ public final class BiomeJungleMutated extends BiomeBase { @@ -1048,7 +1048,7 @@ index ffe6b4344e..f308e0dd45 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeLukewarmDeepOcean.java b/src/main/java/net/minecraft/server/BiomeLukewarmDeepOcean.java -index b23c43305b..092233c50c 100644 +index b23c43305..092233c50 100644 --- a/src/main/java/net/minecraft/server/BiomeLukewarmDeepOcean.java +++ b/src/main/java/net/minecraft/server/BiomeLukewarmDeepOcean.java @@ -25,20 +25,6 @@ public class BiomeLukewarmDeepOcean extends BiomeBase { @@ -1074,7 +1074,7 @@ index b23c43305b..092233c50c 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeLukewarmOcean.java b/src/main/java/net/minecraft/server/BiomeLukewarmOcean.java -index efcb11bbe8..1cebd5ce74 100644 +index efcb11bbe..1cebd5ce7 100644 --- a/src/main/java/net/minecraft/server/BiomeLukewarmOcean.java +++ b/src/main/java/net/minecraft/server/BiomeLukewarmOcean.java @@ -23,20 +23,6 @@ public class BiomeLukewarmOcean extends BiomeBase { @@ -1100,7 +1100,7 @@ index efcb11bbe8..1cebd5ce74 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMegaSpruceTaiga.java b/src/main/java/net/minecraft/server/BiomeMegaSpruceTaiga.java -index 328e939a6f..d0fe6c4493 100644 +index 328e939a6..d0fe6c449 100644 --- a/src/main/java/net/minecraft/server/BiomeMegaSpruceTaiga.java +++ b/src/main/java/net/minecraft/server/BiomeMegaSpruceTaiga.java @@ -23,21 +23,6 @@ public final class BiomeMegaSpruceTaiga extends BiomeBase { @@ -1127,7 +1127,7 @@ index 328e939a6f..d0fe6c4493 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMegaTaiga.java b/src/main/java/net/minecraft/server/BiomeMegaTaiga.java -index 36bea710a0..e3aad431e2 100644 +index 36bea710a..e3aad431e 100644 --- a/src/main/java/net/minecraft/server/BiomeMegaTaiga.java +++ b/src/main/java/net/minecraft/server/BiomeMegaTaiga.java @@ -23,21 +23,6 @@ public final class BiomeMegaTaiga extends BiomeBase { @@ -1154,7 +1154,7 @@ index 36bea710a0..e3aad431e2 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMegaTaigaHills.java b/src/main/java/net/minecraft/server/BiomeMegaTaigaHills.java -index 22474d682a..2ef445ce64 100644 +index 22474d682..2ef445ce6 100644 --- a/src/main/java/net/minecraft/server/BiomeMegaTaigaHills.java +++ b/src/main/java/net/minecraft/server/BiomeMegaTaigaHills.java @@ -23,21 +23,6 @@ public final class BiomeMegaTaigaHills extends BiomeBase { @@ -1181,7 +1181,7 @@ index 22474d682a..2ef445ce64 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMesa.java b/src/main/java/net/minecraft/server/BiomeMesa.java -index 65d606d51c..8906115d47 100644 +index 65d606d51..8906115d4 100644 --- a/src/main/java/net/minecraft/server/BiomeMesa.java +++ b/src/main/java/net/minecraft/server/BiomeMesa.java @@ -19,14 +19,6 @@ public final class BiomeMesa extends BiomeBase { @@ -1201,7 +1201,7 @@ index 65d606d51c..8906115d47 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMesaBryce.java b/src/main/java/net/minecraft/server/BiomeMesaBryce.java -index 5ecec62f18..401fbd2d16 100644 +index 5ecec62f1..401fbd2d1 100644 --- a/src/main/java/net/minecraft/server/BiomeMesaBryce.java +++ b/src/main/java/net/minecraft/server/BiomeMesaBryce.java @@ -19,14 +19,6 @@ public final class BiomeMesaBryce extends BiomeBase { @@ -1221,7 +1221,7 @@ index 5ecec62f18..401fbd2d16 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMesaPlataeu.java b/src/main/java/net/minecraft/server/BiomeMesaPlataeu.java -index 14d4bd312e..77a5828f07 100644 +index 14d4bd312..77a5828f0 100644 --- a/src/main/java/net/minecraft/server/BiomeMesaPlataeu.java +++ b/src/main/java/net/minecraft/server/BiomeMesaPlataeu.java @@ -20,14 +20,6 @@ public final class BiomeMesaPlataeu extends BiomeBase { @@ -1241,7 +1241,7 @@ index 14d4bd312e..77a5828f07 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMesaPlataeuClear.java b/src/main/java/net/minecraft/server/BiomeMesaPlataeuClear.java -index b5dab9d2aa..a888312556 100644 +index b5dab9d2a..a88831255 100644 --- a/src/main/java/net/minecraft/server/BiomeMesaPlataeuClear.java +++ b/src/main/java/net/minecraft/server/BiomeMesaPlataeuClear.java @@ -19,14 +19,6 @@ public final class BiomeMesaPlataeuClear extends BiomeBase { @@ -1261,7 +1261,7 @@ index b5dab9d2aa..a888312556 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMesaPlateauClearMutated.java b/src/main/java/net/minecraft/server/BiomeMesaPlateauClearMutated.java -index d05cc38b5e..be07387135 100644 +index d05cc38b5..be0738713 100644 --- a/src/main/java/net/minecraft/server/BiomeMesaPlateauClearMutated.java +++ b/src/main/java/net/minecraft/server/BiomeMesaPlateauClearMutated.java @@ -19,14 +19,6 @@ public final class BiomeMesaPlateauClearMutated extends BiomeBase { @@ -1281,7 +1281,7 @@ index d05cc38b5e..be07387135 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMesaPlateauMutated.java b/src/main/java/net/minecraft/server/BiomeMesaPlateauMutated.java -index 21a77ee812..2a213025b9 100644 +index 21a77ee81..2a213025b 100644 --- a/src/main/java/net/minecraft/server/BiomeMesaPlateauMutated.java +++ b/src/main/java/net/minecraft/server/BiomeMesaPlateauMutated.java @@ -20,14 +20,6 @@ public final class BiomeMesaPlateauMutated extends BiomeBase { @@ -1301,7 +1301,7 @@ index 21a77ee812..2a213025b9 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMushroomIslandShore.java b/src/main/java/net/minecraft/server/BiomeMushroomIslandShore.java -index 0302efbdc7..f0be681aaf 100644 +index 0302efbdc..f0be681aa 100644 --- a/src/main/java/net/minecraft/server/BiomeMushroomIslandShore.java +++ b/src/main/java/net/minecraft/server/BiomeMushroomIslandShore.java @@ -18,7 +18,6 @@ public final class BiomeMushroomIslandShore extends BiomeBase { @@ -1314,7 +1314,7 @@ index 0302efbdc7..f0be681aaf 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeMushrooms.java b/src/main/java/net/minecraft/server/BiomeMushrooms.java -index 51f92584b8..0118df023f 100644 +index 51f92584b..0118df023 100644 --- a/src/main/java/net/minecraft/server/BiomeMushrooms.java +++ b/src/main/java/net/minecraft/server/BiomeMushrooms.java @@ -18,7 +18,6 @@ public final class BiomeMushrooms extends BiomeBase { @@ -1327,7 +1327,7 @@ index 51f92584b8..0118df023f 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeOcean.java b/src/main/java/net/minecraft/server/BiomeOcean.java -index ad9628b2aa..5f4617c0a6 100644 +index ad9628b2a..5f4617c0a 100644 --- a/src/main/java/net/minecraft/server/BiomeOcean.java +++ b/src/main/java/net/minecraft/server/BiomeOcean.java @@ -24,18 +24,6 @@ public final class BiomeOcean extends BiomeBase { @@ -1351,7 +1351,7 @@ index ad9628b2aa..5f4617c0a6 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomePlains.java b/src/main/java/net/minecraft/server/BiomePlains.java -index ff6090e3c1..266f4165a4 100644 +index ff6090e3c..266f4165a 100644 --- a/src/main/java/net/minecraft/server/BiomePlains.java +++ b/src/main/java/net/minecraft/server/BiomePlains.java @@ -21,20 +21,6 @@ public final class BiomePlains extends BiomeBase { @@ -1377,7 +1377,7 @@ index ff6090e3c1..266f4165a4 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeRedwoodTaigaHillsMutated.java b/src/main/java/net/minecraft/server/BiomeRedwoodTaigaHillsMutated.java -index a28222eb1d..f35557dfdf 100644 +index a28222eb1..f35557dfd 100644 --- a/src/main/java/net/minecraft/server/BiomeRedwoodTaigaHillsMutated.java +++ b/src/main/java/net/minecraft/server/BiomeRedwoodTaigaHillsMutated.java @@ -23,21 +23,6 @@ public final class BiomeRedwoodTaigaHillsMutated extends BiomeBase { @@ -1404,7 +1404,7 @@ index a28222eb1d..f35557dfdf 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeRiver.java b/src/main/java/net/minecraft/server/BiomeRiver.java -index b84b868b1a..405cc2bff4 100644 +index b84b868b1..405cc2bff 100644 --- a/src/main/java/net/minecraft/server/BiomeRiver.java +++ b/src/main/java/net/minecraft/server/BiomeRiver.java @@ -20,17 +20,6 @@ public final class BiomeRiver extends BiomeBase { @@ -1427,7 +1427,7 @@ index b84b868b1a..405cc2bff4 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeRoofedForest.java b/src/main/java/net/minecraft/server/BiomeRoofedForest.java -index 16bcf9bff0..f02a8a03c7 100644 +index 16bcf9bff..f02a8a03c 100644 --- a/src/main/java/net/minecraft/server/BiomeRoofedForest.java +++ b/src/main/java/net/minecraft/server/BiomeRoofedForest.java @@ -24,18 +24,6 @@ public final class BiomeRoofedForest extends BiomeBase { @@ -1451,7 +1451,7 @@ index 16bcf9bff0..f02a8a03c7 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeRoofedForestMutated.java b/src/main/java/net/minecraft/server/BiomeRoofedForestMutated.java -index 9fa84c87fa..9ee0fc6a43 100644 +index 9fa84c87f..9ee0fc6a4 100644 --- a/src/main/java/net/minecraft/server/BiomeRoofedForestMutated.java +++ b/src/main/java/net/minecraft/server/BiomeRoofedForestMutated.java @@ -24,18 +24,6 @@ public final class BiomeRoofedForestMutated extends BiomeBase { @@ -1475,7 +1475,7 @@ index 9fa84c87fa..9ee0fc6a43 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeSavanna.java b/src/main/java/net/minecraft/server/BiomeSavanna.java -index c12a890165..a539fc362d 100644 +index c12a89016..a539fc362 100644 --- a/src/main/java/net/minecraft/server/BiomeSavanna.java +++ b/src/main/java/net/minecraft/server/BiomeSavanna.java @@ -23,20 +23,6 @@ public final class BiomeSavanna extends BiomeBase { @@ -1501,7 +1501,7 @@ index c12a890165..a539fc362d 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeSavannaMutated.java b/src/main/java/net/minecraft/server/BiomeSavannaMutated.java -index db8b20a6c7..e041fcd412 100644 +index db8b20a6c..e041fcd41 100644 --- a/src/main/java/net/minecraft/server/BiomeSavannaMutated.java +++ b/src/main/java/net/minecraft/server/BiomeSavannaMutated.java @@ -20,20 +20,6 @@ public final class BiomeSavannaMutated extends BiomeBase { @@ -1527,7 +1527,7 @@ index db8b20a6c7..e041fcd412 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeSavannaPlateau.java b/src/main/java/net/minecraft/server/BiomeSavannaPlateau.java -index 2826c510d8..08407ea3e0 100644 +index 2826c510d..08407ea3e 100644 --- a/src/main/java/net/minecraft/server/BiomeSavannaPlateau.java +++ b/src/main/java/net/minecraft/server/BiomeSavannaPlateau.java @@ -21,21 +21,6 @@ public final class BiomeSavannaPlateau extends BiomeBase { @@ -1554,7 +1554,7 @@ index 2826c510d8..08407ea3e0 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeSavannaPlateauMutated.java b/src/main/java/net/minecraft/server/BiomeSavannaPlateauMutated.java -index e544a8f6b9..337310263c 100644 +index e544a8f6b..337310263 100644 --- a/src/main/java/net/minecraft/server/BiomeSavannaPlateauMutated.java +++ b/src/main/java/net/minecraft/server/BiomeSavannaPlateauMutated.java @@ -20,20 +20,6 @@ public final class BiomeSavannaPlateauMutated extends BiomeBase { @@ -1580,7 +1580,7 @@ index e544a8f6b9..337310263c 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeStoneBeach.java b/src/main/java/net/minecraft/server/BiomeStoneBeach.java -index 34660f9f84..3a96c2aeba 100644 +index 34660f9f8..3a96c2aeb 100644 --- a/src/main/java/net/minecraft/server/BiomeStoneBeach.java +++ b/src/main/java/net/minecraft/server/BiomeStoneBeach.java @@ -19,14 +19,6 @@ public final class BiomeStoneBeach extends BiomeBase { @@ -1600,7 +1600,7 @@ index 34660f9f84..3a96c2aeba 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeSunflowerPlains.java b/src/main/java/net/minecraft/server/BiomeSunflowerPlains.java -index 8815c95900..f971bc4bcb 100644 +index 8815c9590..f971bc4bc 100644 --- a/src/main/java/net/minecraft/server/BiomeSunflowerPlains.java +++ b/src/main/java/net/minecraft/server/BiomeSunflowerPlains.java @@ -21,20 +21,6 @@ public final class BiomeSunflowerPlains extends BiomeBase { @@ -1626,7 +1626,7 @@ index 8815c95900..f971bc4bcb 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeSwamp.java b/src/main/java/net/minecraft/server/BiomeSwamp.java -index 02584897e9..011628fff2 100644 +index 02584897e..011628fff 100644 --- a/src/main/java/net/minecraft/server/BiomeSwamp.java +++ b/src/main/java/net/minecraft/server/BiomeSwamp.java @@ -20,19 +20,6 @@ public final class BiomeSwamp extends BiomeBase { @@ -1651,7 +1651,7 @@ index 02584897e9..011628fff2 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeSwamplandMutated.java b/src/main/java/net/minecraft/server/BiomeSwamplandMutated.java -index d85b01b956..10c6b4eb39 100644 +index d85b01b95..10c6b4eb3 100644 --- a/src/main/java/net/minecraft/server/BiomeSwamplandMutated.java +++ b/src/main/java/net/minecraft/server/BiomeSwamplandMutated.java @@ -18,19 +18,6 @@ public final class BiomeSwamplandMutated extends BiomeBase { @@ -1676,7 +1676,7 @@ index d85b01b956..10c6b4eb39 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeTaiga.java b/src/main/java/net/minecraft/server/BiomeTaiga.java -index ae6e6ca896..456b6b1747 100644 +index ae6e6ca89..456b6b174 100644 --- a/src/main/java/net/minecraft/server/BiomeTaiga.java +++ b/src/main/java/net/minecraft/server/BiomeTaiga.java @@ -24,21 +24,6 @@ public final class BiomeTaiga extends BiomeBase { @@ -1703,7 +1703,7 @@ index ae6e6ca896..456b6b1747 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeTaigaHills.java b/src/main/java/net/minecraft/server/BiomeTaigaHills.java -index 4e19fe5ae9..cc699e354d 100644 +index 4e19fe5ae..cc699e354 100644 --- a/src/main/java/net/minecraft/server/BiomeTaigaHills.java +++ b/src/main/java/net/minecraft/server/BiomeTaigaHills.java @@ -22,21 +22,6 @@ public final class BiomeTaigaHills extends BiomeBase { @@ -1730,7 +1730,7 @@ index 4e19fe5ae9..cc699e354d 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeTaigaMutated.java b/src/main/java/net/minecraft/server/BiomeTaigaMutated.java -index 05e833ffed..3c722f50a9 100644 +index 05e833ffe..3c722f50a 100644 --- a/src/main/java/net/minecraft/server/BiomeTaigaMutated.java +++ b/src/main/java/net/minecraft/server/BiomeTaigaMutated.java @@ -22,21 +22,6 @@ public final class BiomeTaigaMutated extends BiomeBase { @@ -1757,7 +1757,7 @@ index 05e833ffed..3c722f50a9 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeTheEnd.java b/src/main/java/net/minecraft/server/BiomeTheEnd.java -index 22e9789a36..6a5a8a991a 100644 +index 22e9789a3..6a5a8a991 100644 --- a/src/main/java/net/minecraft/server/BiomeTheEnd.java +++ b/src/main/java/net/minecraft/server/BiomeTheEnd.java @@ -8,6 +8,6 @@ public final class BiomeTheEnd extends BiomeBase { @@ -1769,7 +1769,7 @@ index 22e9789a36..6a5a8a991a 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeTheEndBarrenIsland.java b/src/main/java/net/minecraft/server/BiomeTheEndBarrenIsland.java -index 5b068299c8..07d72737b5 100644 +index 5b068299c..07d72737b 100644 --- a/src/main/java/net/minecraft/server/BiomeTheEndBarrenIsland.java +++ b/src/main/java/net/minecraft/server/BiomeTheEndBarrenIsland.java @@ -5,6 +5,6 @@ public class BiomeTheEndBarrenIsland extends BiomeBase { @@ -1781,7 +1781,7 @@ index 5b068299c8..07d72737b5 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeTheEndFloatingIslands.java b/src/main/java/net/minecraft/server/BiomeTheEndFloatingIslands.java -index a26d56aa45..839d3e616a 100644 +index a26d56aa4..839d3e616 100644 --- a/src/main/java/net/minecraft/server/BiomeTheEndFloatingIslands.java +++ b/src/main/java/net/minecraft/server/BiomeTheEndFloatingIslands.java @@ -6,6 +6,6 @@ public class BiomeTheEndFloatingIslands extends BiomeBase { @@ -1793,7 +1793,7 @@ index a26d56aa45..839d3e616a 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java b/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java -index e47add3e43..53aa6243de 100644 +index e47add3e4..53aa6243d 100644 --- a/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java +++ b/src/main/java/net/minecraft/server/BiomeTheEndHighIsland.java @@ -8,6 +8,6 @@ public class BiomeTheEndHighIsland extends BiomeBase { @@ -1805,7 +1805,7 @@ index e47add3e43..53aa6243de 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeTheEndMediumIsland.java b/src/main/java/net/minecraft/server/BiomeTheEndMediumIsland.java -index ec92a84579..2452f18013 100644 +index ec92a8457..2452f1801 100644 --- a/src/main/java/net/minecraft/server/BiomeTheEndMediumIsland.java +++ b/src/main/java/net/minecraft/server/BiomeTheEndMediumIsland.java @@ -6,6 +6,6 @@ public class BiomeTheEndMediumIsland extends BiomeBase { @@ -1817,7 +1817,7 @@ index ec92a84579..2452f18013 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeVoid.java b/src/main/java/net/minecraft/server/BiomeVoid.java -index c9ba334535..5549d61421 100644 +index c9ba33453..5549d6142 100644 --- a/src/main/java/net/minecraft/server/BiomeVoid.java +++ b/src/main/java/net/minecraft/server/BiomeVoid.java @@ -5,5 +5,6 @@ public final class BiomeVoid extends BiomeBase { @@ -1828,7 +1828,7 @@ index c9ba334535..5549d61421 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeWarmDeepOcean.java b/src/main/java/net/minecraft/server/BiomeWarmDeepOcean.java -index 11dc5f6374..c3fc79fb31 100644 +index 11dc5f637..c3fc79fb3 100644 --- a/src/main/java/net/minecraft/server/BiomeWarmDeepOcean.java +++ b/src/main/java/net/minecraft/server/BiomeWarmDeepOcean.java @@ -24,18 +24,6 @@ public class BiomeWarmDeepOcean extends BiomeBase { @@ -1852,7 +1852,7 @@ index 11dc5f6374..c3fc79fb31 100644 } } diff --git a/src/main/java/net/minecraft/server/BiomeWarmOcean.java b/src/main/java/net/minecraft/server/BiomeWarmOcean.java -index e4dc7d198c..00f94b906b 100644 +index e4dc7d198..00f94b906 100644 --- a/src/main/java/net/minecraft/server/BiomeWarmOcean.java +++ b/src/main/java/net/minecraft/server/BiomeWarmOcean.java @@ -26,18 +26,6 @@ public class BiomeWarmOcean extends BiomeBase { @@ -1876,7 +1876,7 @@ index e4dc7d198c..00f94b906b 100644 } } diff --git a/src/main/java/net/minecraft/server/Biomes.java b/src/main/java/net/minecraft/server/Biomes.java -index 12742870ca..a448c77264 100644 +index 12742870c..a448c7726 100644 --- a/src/main/java/net/minecraft/server/Biomes.java +++ b/src/main/java/net/minecraft/server/Biomes.java @@ -87,6 +87,34 @@ public abstract class Biomes { @@ -1916,7 +1916,7 @@ index 12742870ca..a448c77264 100644 diff --git a/src/main/resources/biomes.yml b/src/main/resources/biomes.yml new file mode 100644 -index 0000000000..f0ea65299f +index 000000000..f0ea65299 --- /dev/null +++ b/src/main/resources/biomes.yml @@ -0,0 +1,1042 @@ @@ -2963,5 +2963,5 @@ index 0000000000..f0ea65299f + panda: 80,1,2 + bat: 10,8,8 -- -2.24.0 +2.26.2 diff --git a/patches/server/0094-Configurable-void-damage-height.patch b/patches/server/0095-Configurable-void-damage-height.patch similarity index 91% rename from patches/server/0094-Configurable-void-damage-height.patch rename to patches/server/0095-Configurable-void-damage-height.patch index 5e387b208..b36671b8f 100644 --- a/patches/server/0094-Configurable-void-damage-height.patch +++ b/patches/server/0095-Configurable-void-damage-height.patch @@ -1,4 +1,4 @@ -From 952255e563565af1c226c5d886251a2ff1fcc590 Mon Sep 17 00:00:00 2001 +From 8ee208d56db71cdc6ebaa58e4ec41a207b817e87 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 27 Feb 2020 21:42:19 -0600 Subject: [PATCH] Configurable void damage height @@ -9,10 +9,10 @@ Subject: [PATCH] Configurable void damage height 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 69983550bb..86e244e068 100644 +index 5a8005291..a20660a9b 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -504,7 +504,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -512,7 +512,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke // Paper start protected void performVoidDamage() { @@ -22,7 +22,7 @@ index 69983550bb..86e244e068 100644 && this.locY >= world.paperConfig.netherVoidTopDamageHeight)) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 4cb856ebbb..53c8782b59 100644 +index 4cb856ebb..53c8782b5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -189,6 +189,7 @@ public class PurpurWorldConfig { @@ -42,5 +42,5 @@ index 4cb856ebbb..53c8782b59 100644 public int elytraDamagePerSecond = 1; -- -2.24.0 +2.26.2 diff --git a/patches/server/0095-Fix-the-dead-lagging-the-server.patch b/patches/server/0096-Fix-the-dead-lagging-the-server.patch similarity index 88% rename from patches/server/0095-Fix-the-dead-lagging-the-server.patch rename to patches/server/0096-Fix-the-dead-lagging-the-server.patch index 8b232bb37..b8094eee4 100644 --- a/patches/server/0095-Fix-the-dead-lagging-the-server.patch +++ b/patches/server/0096-Fix-the-dead-lagging-the-server.patch @@ -1,4 +1,4 @@ -From 2bef94930f06417351be84330589567fa5363bc0 Mon Sep 17 00:00:00 2001 +From b6593875f6295967977bb7df7397bbc7de3b900b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 6 Mar 2020 13:37:26 -0600 Subject: [PATCH] Fix the dead lagging the server @@ -9,10 +9,10 @@ Subject: [PATCH] Fix the dead lagging the server 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 86e244e068..c72b4fbd0e 100644 +index a20660a9b..cb6dec517 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1407,7 +1407,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1592,7 +1592,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.pitch = MathHelper.a(f1, -90.0F, 90.0F) % 360.0F; this.lastYaw = this.yaw; this.lastPitch = this.pitch; @@ -22,7 +22,7 @@ index 86e244e068..c72b4fbd0e 100644 public void setPositionRotation(BlockPosition blockposition, float f, float f1) { diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 08ae190b07..e9ef6d00c8 100644 +index 387f74fe1..dae35c55e 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2398,7 +2398,7 @@ public abstract class EntityLiving extends Entity { @@ -35,5 +35,5 @@ index 08ae190b07..e9ef6d00c8 100644 double d1 = this.locZ() - this.lastZ; float f = (float) (d0 * d0 + d1 * d1); -- -2.24.0 +2.26.2 diff --git a/patches/server/0096-Add-ping-command.patch b/patches/server/0097-Add-ping-command.patch similarity index 96% rename from patches/server/0096-Add-ping-command.patch rename to patches/server/0097-Add-ping-command.patch index 464766fe0..7e53e45c4 100644 --- a/patches/server/0096-Add-ping-command.patch +++ b/patches/server/0097-Add-ping-command.patch @@ -1,4 +1,4 @@ -From adb43d0023fe0bc1e3fbb46cf03f342b13c8a7b3 Mon Sep 17 00:00:00 2001 +From 4eecea21cef90813c2146f04ed615fbcce3104a4 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 13 Mar 2020 22:29:10 -0500 Subject: [PATCH] Add /ping command @@ -13,7 +13,7 @@ Subject: [PATCH] Add /ping command create mode 100644 src/main/java/net/pl3x/purpur/command/PingCommand.java diff --git a/src/main/java/net/minecraft/server/ArgumentEntity.java b/src/main/java/net/minecraft/server/ArgumentEntity.java -index 39a6a9ac00..5568649b7e 100644 +index 39a6a9ac0..5568649b7 100644 --- a/src/main/java/net/minecraft/server/ArgumentEntity.java +++ b/src/main/java/net/minecraft/server/ArgumentEntity.java @@ -69,10 +69,12 @@ public class ArgumentEntity implements ArgumentType { @@ -30,7 +30,7 @@ index 39a6a9ac00..5568649b7e 100644 List list = ((EntitySelector) commandcontext.getArgument(s, EntitySelector.class)).d((CommandListenerWrapper) commandcontext.getSource()); diff --git a/src/main/java/net/minecraft/server/CommandDispatcher.java b/src/main/java/net/minecraft/server/CommandDispatcher.java -index 2d512aa4f9..5aa10d16bc 100644 +index 2d512aa4f..5aa10d16b 100644 --- a/src/main/java/net/minecraft/server/CommandDispatcher.java +++ b/src/main/java/net/minecraft/server/CommandDispatcher.java @@ -30,7 +30,7 @@ import org.bukkit.event.server.ServerCommandEvent; @@ -64,7 +64,7 @@ index 2d512aa4f9..5aa10d16bc 100644 return RequiredArgumentBuilder.argument(s, argumenttype); } diff --git a/src/main/java/net/minecraft/server/CommandListenerWrapper.java b/src/main/java/net/minecraft/server/CommandListenerWrapper.java -index c988c929f1..5c980b70cd 100644 +index c988c929f..5c980b70c 100644 --- a/src/main/java/net/minecraft/server/CommandListenerWrapper.java +++ b/src/main/java/net/minecraft/server/CommandListenerWrapper.java @@ -178,6 +178,7 @@ public class CommandListenerWrapper implements ICompletionProvider, com.destroys @@ -77,7 +77,7 @@ index c988c929f1..5c980b70cd 100644 throw CommandListenerWrapper.a.create(); diff --git a/src/main/java/net/pl3x/purpur/command/PingCommand.java b/src/main/java/net/pl3x/purpur/command/PingCommand.java new file mode 100644 -index 0000000000..dac3083bf0 +index 000000000..dac3083bf --- /dev/null +++ b/src/main/java/net/pl3x/purpur/command/PingCommand.java @@ -0,0 +1,33 @@ @@ -115,7 +115,7 @@ index 0000000000..dac3083bf0 + } +} diff --git a/src/main/resources/purpur.lang b/src/main/resources/purpur.lang -index e925e1374d..e81beea7fa 100644 +index e925e1374..e81beea7f 100644 --- a/src/main/resources/purpur.lang +++ b/src/main/resources/purpur.lang @@ -1,5 +1,6 @@ @@ -126,5 +126,5 @@ index e925e1374d..e81beea7fa 100644 "idle.timeout.broadcast.back": "§e§o%s is no longer AFK" } -- -2.24.0 +2.26.2 diff --git a/patches/server/0097-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch b/patches/server/0098-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch similarity index 94% rename from patches/server/0097-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch rename to patches/server/0098-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch index bb6c8f177..0d78ce171 100644 --- a/patches/server/0097-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch +++ b/patches/server/0098-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch @@ -1,4 +1,4 @@ -From c5f926362fe165454e0b60d2efad7bda9a58b2ec Mon Sep 17 00:00:00 2001 +From 61a6efa1c75f844cfe4d8e36970f701ea23cf6f4 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 19 Mar 2020 19:39:34 -0500 Subject: [PATCH] Add option to allow loyalty on tridents to work in the void @@ -9,7 +9,7 @@ Subject: [PATCH] Add option to allow loyalty on tridents to work in the void 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityThrownTrident.java b/src/main/java/net/minecraft/server/EntityThrownTrident.java -index ed8e26aa45..ca6c0ec299 100644 +index ed8e26aa4..ca6c0ec29 100644 --- a/src/main/java/net/minecraft/server/EntityThrownTrident.java +++ b/src/main/java/net/minecraft/server/EntityThrownTrident.java @@ -38,7 +38,7 @@ public class EntityThrownTrident extends EntityArrow { @@ -22,7 +22,7 @@ index ed8e26aa45..ca6c0ec299 100644 if (b0 > 0 && !this.z()) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 53c8782b59..01b8fffe14 100644 +index 53c8782b5..01b8fffe1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -189,6 +189,7 @@ public class PurpurWorldConfig { @@ -42,5 +42,5 @@ index 53c8782b59..01b8fffe14 100644 } -- -2.24.0 +2.26.2 diff --git a/patches/server/0098-Configurable-server-mod-name.patch b/patches/server/0099-Configurable-server-mod-name.patch similarity index 82% rename from patches/server/0098-Configurable-server-mod-name.patch rename to patches/server/0099-Configurable-server-mod-name.patch index 886e0999a..947a0687f 100644 --- a/patches/server/0098-Configurable-server-mod-name.patch +++ b/patches/server/0099-Configurable-server-mod-name.patch @@ -1,4 +1,4 @@ -From b873e07765d3a575cc2473859ea76d6d87c0173b Mon Sep 17 00:00:00 2001 +From a6328f61740886172bbdb27c1eb88fb4b51d6650 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 21 Mar 2020 11:47:39 -0500 Subject: [PATCH] Configurable server mod name @@ -9,20 +9,20 @@ Subject: [PATCH] Configurable server mod name 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a888465187..9052d4475d 100644 +index d9e5eda9b..d91d3a82c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1588,7 +1588,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return net.pl3x.purpur.PurpurConfig.serverModName; // Purpur +- return "Purpur"; // Purpur // Tuinity // Paper // Spigot // CraftBukkit ++ return net.pl3x.purpur.PurpurConfig.serverModName; // Purpur // Tuinity // Paper // Spigot // CraftBukkit } public CrashReport b(CrashReport crashreport) { diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index fe38b3ce90..a729e7d204 100644 +index fe38b3ce9..a729e7d20 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -181,6 +181,11 @@ public class PurpurConfig { diff --git a/patches/server/0099-End-gateway-should-check-if-entity-can-use-portal.patch b/patches/server/0100-End-gateway-should-check-if-entity-can-use-portal.patch similarity index 90% rename from patches/server/0099-End-gateway-should-check-if-entity-can-use-portal.patch rename to patches/server/0100-End-gateway-should-check-if-entity-can-use-portal.patch index 034c1be2f..9ea474ee4 100644 --- a/patches/server/0099-End-gateway-should-check-if-entity-can-use-portal.patch +++ b/patches/server/0100-End-gateway-should-check-if-entity-can-use-portal.patch @@ -1,4 +1,4 @@ -From dda5fc5ad51706c33ad1cc5a98bb2c9012e64aac Mon Sep 17 00:00:00 2001 +From 9f22c699aeb8bb9426f86c11f9b5d5b9d2db6de3 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 21 Mar 2020 18:33:05 -0500 Subject: [PATCH] End gateway should check if entity can use portal @@ -8,7 +8,7 @@ Subject: [PATCH] End gateway should check if entity can use portal 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/minecraft/server/TileEntityEndGateway.java b/src/main/java/net/minecraft/server/TileEntityEndGateway.java -index 87aef515c6..55294b5dfa 100644 +index 87aef515c..55294b5df 100644 --- a/src/main/java/net/minecraft/server/TileEntityEndGateway.java +++ b/src/main/java/net/minecraft/server/TileEntityEndGateway.java @@ -122,6 +122,7 @@ public class TileEntityEndGateway extends TileEntityEnderPortal implements ITick @@ -20,5 +20,5 @@ index 87aef515c6..55294b5dfa 100644 if (this.exitPortal == null && this.world.worldProvider instanceof WorldProviderTheEnd) { this.a((WorldServer) this.world); -- -2.24.0 +2.26.2 diff --git a/patches/server/0100-Configurable-TPS-Catchup.patch b/patches/server/0101-Configurable-TPS-Catchup.patch similarity index 94% rename from patches/server/0100-Configurable-TPS-Catchup.patch rename to patches/server/0101-Configurable-TPS-Catchup.patch index 776d9ed38..b808cb859 100644 --- a/patches/server/0100-Configurable-TPS-Catchup.patch +++ b/patches/server/0101-Configurable-TPS-Catchup.patch @@ -1,4 +1,4 @@ -From ac18ff5c4486e7622546829a55e3dc884de1c07e Mon Sep 17 00:00:00 2001 +From 929f8c699620583a084fba59d3d7ae17d231017e Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 26 Mar 2020 19:06:22 -0500 Subject: [PATCH] Configurable TPS Catchup @@ -9,7 +9,7 @@ Subject: [PATCH] Configurable TPS Catchup 2 files changed, 12 insertions(+) diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 9052d4475d..517d7a9006 100644 +index d91d3a82c..40da7a05c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -988,6 +988,13 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant Date: Thu, 26 Mar 2020 19:46:44 -0500 Subject: [PATCH] Breedable Polar Bears @@ -9,7 +9,7 @@ Subject: [PATCH] Breedable Polar Bears 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityPolarBear.java b/src/main/java/net/minecraft/server/EntityPolarBear.java -index 0a3906bde0..42fef3abaa 100644 +index 0a3906bde..42fef3aba 100644 --- a/src/main/java/net/minecraft/server/EntityPolarBear.java +++ b/src/main/java/net/minecraft/server/EntityPolarBear.java @@ -32,6 +32,28 @@ public class EntityPolarBear extends EntityAnimal { @@ -64,7 +64,7 @@ index 0a3906bde0..42fef3abaa 100644 this.goalSelector.a(5, new PathfinderGoalRandomStroll(this, 1.0D)); this.goalSelector.a(6, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F)); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 01b8fffe14..ced9edf827 100644 +index 01b8fffe1..ced9edf82 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -666,10 +666,15 @@ public class PurpurWorldConfig { @@ -84,5 +84,5 @@ index 01b8fffe14..ced9edf827 100644 public boolean pufferfishRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0102-Configurable-jockey-options.patch b/patches/server/0103-Configurable-jockey-options.patch similarity index 97% rename from patches/server/0102-Configurable-jockey-options.patch rename to patches/server/0103-Configurable-jockey-options.patch index 82352efba..7163093da 100644 --- a/patches/server/0102-Configurable-jockey-options.patch +++ b/patches/server/0103-Configurable-jockey-options.patch @@ -1,4 +1,4 @@ -From 6ecf6cadc009dd4b5a17f0fa21271b80c54b07fc Mon Sep 17 00:00:00 2001 +From f80fca99a5c328f68c3a90446cbdb5cda49bcdd7 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 26 Mar 2020 21:39:32 -0500 Subject: [PATCH] Configurable jockey options @@ -13,7 +13,7 @@ Subject: [PATCH] Configurable jockey options 6 files changed, 112 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityDrowned.java b/src/main/java/net/minecraft/server/EntityDrowned.java -index 63f5969b10..f32950cc9b 100644 +index 63f5969b1..f32950cc9 100644 --- a/src/main/java/net/minecraft/server/EntityDrowned.java +++ b/src/main/java/net/minecraft/server/EntityDrowned.java @@ -34,6 +34,21 @@ public class EntityDrowned extends EntityZombie implements IRangedEntity { @@ -39,7 +39,7 @@ index 63f5969b10..f32950cc9b 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java -index fb9ef88ea3..90bf12c735 100644 +index fb9ef88ea..90bf12c73 100644 --- a/src/main/java/net/minecraft/server/EntityPigZombie.java +++ b/src/main/java/net/minecraft/server/EntityPigZombie.java @@ -32,6 +32,21 @@ public class EntityPigZombie extends EntityZombie { @@ -65,7 +65,7 @@ index fb9ef88ea3..90bf12c735 100644 @Override diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java -index 95ae6f3494..e60e4adc1d 100644 +index 95ae6f349..e60e4adc1 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java @@ -3,6 +3,7 @@ package net.minecraft.server; @@ -139,7 +139,7 @@ index 95ae6f3494..e60e4adc1d 100644 private GroupDataZombie(boolean flag) { this.a = flag; diff --git a/src/main/java/net/minecraft/server/EntityZombieHusk.java b/src/main/java/net/minecraft/server/EntityZombieHusk.java -index db252ba4e0..e8b099d6c8 100644 +index db252ba4e..e8b099d6c 100644 --- a/src/main/java/net/minecraft/server/EntityZombieHusk.java +++ b/src/main/java/net/minecraft/server/EntityZombieHusk.java @@ -23,6 +23,21 @@ public class EntityZombieHusk extends EntityZombie { @@ -165,7 +165,7 @@ index db252ba4e0..e8b099d6c8 100644 public static boolean b(EntityTypes entitytypes, GeneratorAccess generatoraccess, EnumMobSpawn enummobspawn, BlockPosition blockposition, Random random) { diff --git a/src/main/java/net/minecraft/server/EntityZombieVillager.java b/src/main/java/net/minecraft/server/EntityZombieVillager.java -index ebbfcb75a4..8532385d8d 100644 +index ebbfcb75a..8532385d8 100644 --- a/src/main/java/net/minecraft/server/EntityZombieVillager.java +++ b/src/main/java/net/minecraft/server/EntityZombieVillager.java @@ -40,6 +40,21 @@ public class EntityZombieVillager extends EntityZombie implements VillagerDataHo @@ -191,7 +191,7 @@ index ebbfcb75a4..8532385d8d 100644 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index ced9edf827..adcdc6b8f4 100644 +index ced9edf82..adcdc6b8f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -401,10 +401,16 @@ public class PurpurWorldConfig { @@ -278,5 +278,5 @@ index ced9edf827..adcdc6b8f4 100644 } } -- -2.24.0 +2.26.2 diff --git a/patches/server/0103-Configurable-enchantment-max-level.patch b/patches/server/0104-Configurable-enchantment-max-level.patch similarity index 96% rename from patches/server/0103-Configurable-enchantment-max-level.patch rename to patches/server/0104-Configurable-enchantment-max-level.patch index e12e8bef7..0911e97da 100644 --- a/patches/server/0103-Configurable-enchantment-max-level.patch +++ b/patches/server/0104-Configurable-enchantment-max-level.patch @@ -1,4 +1,4 @@ -From 8db2d5025aab7f822846298a5ad6534f14f259cb Mon Sep 17 00:00:00 2001 +From f6ac58c03507514d78c1c53b240df7c3c518f2f0 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Wed, 1 Apr 2020 17:21:42 -0500 Subject: [PATCH] Configurable enchantment max level @@ -39,7 +39,7 @@ Subject: [PATCH] Configurable enchantment max level 32 files changed, 56 insertions(+), 148 deletions(-) diff --git a/src/main/java/net/minecraft/server/Enchantment.java b/src/main/java/net/minecraft/server/Enchantment.java -index 70cd4a4837..0ab96ea34e 100644 +index 70cd4a483..0ab96ea34 100644 --- a/src/main/java/net/minecraft/server/Enchantment.java +++ b/src/main/java/net/minecraft/server/Enchantment.java @@ -44,9 +44,17 @@ public abstract class Enchantment { @@ -63,7 +63,7 @@ index 70cd4a4837..0ab96ea34e 100644 public int a(int i) { return 1 + i * 10; diff --git a/src/main/java/net/minecraft/server/EnchantmentArrowDamage.java b/src/main/java/net/minecraft/server/EnchantmentArrowDamage.java -index ffa1d19cb9..1040e7e08b 100644 +index ffa1d19cb..1040e7e08 100644 --- a/src/main/java/net/minecraft/server/EnchantmentArrowDamage.java +++ b/src/main/java/net/minecraft/server/EnchantmentArrowDamage.java @@ -4,6 +4,7 @@ public class EnchantmentArrowDamage extends Enchantment { @@ -85,7 +85,7 @@ index ffa1d19cb9..1040e7e08b 100644 - } } diff --git a/src/main/java/net/minecraft/server/EnchantmentArrowKnockback.java b/src/main/java/net/minecraft/server/EnchantmentArrowKnockback.java -index 9103f3c614..67f487b9e4 100644 +index 9103f3c61..67f487b9e 100644 --- a/src/main/java/net/minecraft/server/EnchantmentArrowKnockback.java +++ b/src/main/java/net/minecraft/server/EnchantmentArrowKnockback.java @@ -4,6 +4,7 @@ public class EnchantmentArrowKnockback extends Enchantment { @@ -107,7 +107,7 @@ index 9103f3c614..67f487b9e4 100644 - } } diff --git a/src/main/java/net/minecraft/server/EnchantmentBinding.java b/src/main/java/net/minecraft/server/EnchantmentBinding.java -index b49154b13e..ec4dad3cf2 100644 +index b49154b13..ec4dad3cf 100644 --- a/src/main/java/net/minecraft/server/EnchantmentBinding.java +++ b/src/main/java/net/minecraft/server/EnchantmentBinding.java @@ -4,6 +4,7 @@ public class EnchantmentBinding extends Enchantment { @@ -131,7 +131,7 @@ index b49154b13e..ec4dad3cf2 100644 public boolean isTreasure() { return true; diff --git a/src/main/java/net/minecraft/server/EnchantmentDepthStrider.java b/src/main/java/net/minecraft/server/EnchantmentDepthStrider.java -index 669fbd2685..07d566cd9e 100644 +index 669fbd268..07d566cd9 100644 --- a/src/main/java/net/minecraft/server/EnchantmentDepthStrider.java +++ b/src/main/java/net/minecraft/server/EnchantmentDepthStrider.java @@ -4,6 +4,7 @@ public class EnchantmentDepthStrider extends Enchantment { @@ -155,7 +155,7 @@ index 669fbd2685..07d566cd9e 100644 public boolean a(Enchantment enchantment) { return super.a(enchantment) && enchantment != Enchantments.FROST_WALKER; diff --git a/src/main/java/net/minecraft/server/EnchantmentDigging.java b/src/main/java/net/minecraft/server/EnchantmentDigging.java -index 798b3c250c..16a7c38bc0 100644 +index 798b3c250..16a7c38bc 100644 --- a/src/main/java/net/minecraft/server/EnchantmentDigging.java +++ b/src/main/java/net/minecraft/server/EnchantmentDigging.java @@ -4,6 +4,7 @@ public class EnchantmentDigging extends Enchantment { @@ -179,7 +179,7 @@ index 798b3c250c..16a7c38bc0 100644 public boolean canEnchant(ItemStack itemstack) { return itemstack.getItem() == Items.SHEARS ? true : super.canEnchant(itemstack); diff --git a/src/main/java/net/minecraft/server/EnchantmentDurability.java b/src/main/java/net/minecraft/server/EnchantmentDurability.java -index c946326fbc..6deccef554 100644 +index c946326fb..6deccef55 100644 --- a/src/main/java/net/minecraft/server/EnchantmentDurability.java +++ b/src/main/java/net/minecraft/server/EnchantmentDurability.java @@ -6,6 +6,7 @@ public class EnchantmentDurability extends Enchantment { @@ -203,7 +203,7 @@ index c946326fbc..6deccef554 100644 public boolean canEnchant(ItemStack itemstack) { return itemstack.e() ? true : super.canEnchant(itemstack); diff --git a/src/main/java/net/minecraft/server/EnchantmentFire.java b/src/main/java/net/minecraft/server/EnchantmentFire.java -index c4da4378cb..f2664c18e2 100644 +index c4da4378c..f2664c18e 100644 --- a/src/main/java/net/minecraft/server/EnchantmentFire.java +++ b/src/main/java/net/minecraft/server/EnchantmentFire.java @@ -4,6 +4,7 @@ public class EnchantmentFire extends Enchantment { @@ -225,7 +225,7 @@ index c4da4378cb..f2664c18e2 100644 - } } diff --git a/src/main/java/net/minecraft/server/EnchantmentFlameArrows.java b/src/main/java/net/minecraft/server/EnchantmentFlameArrows.java -index a0b4da25b8..af3db770f8 100644 +index a0b4da25b..af3db770f 100644 --- a/src/main/java/net/minecraft/server/EnchantmentFlameArrows.java +++ b/src/main/java/net/minecraft/server/EnchantmentFlameArrows.java @@ -4,6 +4,7 @@ public class EnchantmentFlameArrows extends Enchantment { @@ -247,7 +247,7 @@ index a0b4da25b8..af3db770f8 100644 - } } diff --git a/src/main/java/net/minecraft/server/EnchantmentFrostWalker.java b/src/main/java/net/minecraft/server/EnchantmentFrostWalker.java -index b5de6c740c..8c4fd331c8 100644 +index b5de6c740..8c4fd331c 100644 --- a/src/main/java/net/minecraft/server/EnchantmentFrostWalker.java +++ b/src/main/java/net/minecraft/server/EnchantmentFrostWalker.java @@ -10,6 +10,7 @@ public class EnchantmentFrostWalker extends Enchantment { @@ -271,7 +271,7 @@ index b5de6c740c..8c4fd331c8 100644 if (entityliving.onGround) { IBlockData iblockdata = Blocks.FROSTED_ICE.getBlockData(); diff --git a/src/main/java/net/minecraft/server/EnchantmentInfiniteArrows.java b/src/main/java/net/minecraft/server/EnchantmentInfiniteArrows.java -index 408cfa4609..1dbedc0adb 100644 +index 408cfa460..1dbedc0ad 100644 --- a/src/main/java/net/minecraft/server/EnchantmentInfiniteArrows.java +++ b/src/main/java/net/minecraft/server/EnchantmentInfiniteArrows.java @@ -4,6 +4,7 @@ public class EnchantmentInfiniteArrows extends Enchantment { @@ -295,7 +295,7 @@ index 408cfa4609..1dbedc0adb 100644 public boolean a(Enchantment enchantment) { return enchantment instanceof EnchantmentMending ? false : super.a(enchantment); diff --git a/src/main/java/net/minecraft/server/EnchantmentKnockback.java b/src/main/java/net/minecraft/server/EnchantmentKnockback.java -index 362ce7bc47..04062c2557 100644 +index 362ce7bc4..04062c255 100644 --- a/src/main/java/net/minecraft/server/EnchantmentKnockback.java +++ b/src/main/java/net/minecraft/server/EnchantmentKnockback.java @@ -4,6 +4,7 @@ public class EnchantmentKnockback extends Enchantment { @@ -317,7 +317,7 @@ index 362ce7bc47..04062c2557 100644 - } } diff --git a/src/main/java/net/minecraft/server/EnchantmentLootBonus.java b/src/main/java/net/minecraft/server/EnchantmentLootBonus.java -index b5232faccc..c27e20e066 100644 +index b5232facc..c27e20e06 100644 --- a/src/main/java/net/minecraft/server/EnchantmentLootBonus.java +++ b/src/main/java/net/minecraft/server/EnchantmentLootBonus.java @@ -4,6 +4,7 @@ public class EnchantmentLootBonus extends Enchantment { @@ -341,7 +341,7 @@ index b5232faccc..c27e20e066 100644 public boolean a(Enchantment enchantment) { return super.a(enchantment) && enchantment != Enchantments.SILK_TOUCH; diff --git a/src/main/java/net/minecraft/server/EnchantmentLure.java b/src/main/java/net/minecraft/server/EnchantmentLure.java -index 1ffb91c570..c5a9e61f9a 100644 +index 1ffb91c57..c5a9e61f9 100644 --- a/src/main/java/net/minecraft/server/EnchantmentLure.java +++ b/src/main/java/net/minecraft/server/EnchantmentLure.java @@ -4,6 +4,7 @@ public class EnchantmentLure extends Enchantment { @@ -363,7 +363,7 @@ index 1ffb91c570..c5a9e61f9a 100644 - } } diff --git a/src/main/java/net/minecraft/server/EnchantmentMending.java b/src/main/java/net/minecraft/server/EnchantmentMending.java -index dafc29399f..ace2e19a6f 100644 +index dafc29399..ace2e19a6 100644 --- a/src/main/java/net/minecraft/server/EnchantmentMending.java +++ b/src/main/java/net/minecraft/server/EnchantmentMending.java @@ -4,6 +4,7 @@ public class EnchantmentMending extends Enchantment { @@ -385,7 +385,7 @@ index dafc29399f..ace2e19a6f 100644 - } } diff --git a/src/main/java/net/minecraft/server/EnchantmentMultishot.java b/src/main/java/net/minecraft/server/EnchantmentMultishot.java -index 6f423e7536..5fb8a624c2 100644 +index 6f423e753..5fb8a624c 100644 --- a/src/main/java/net/minecraft/server/EnchantmentMultishot.java +++ b/src/main/java/net/minecraft/server/EnchantmentMultishot.java @@ -4,6 +4,7 @@ public class EnchantmentMultishot extends Enchantment { @@ -409,7 +409,7 @@ index 6f423e7536..5fb8a624c2 100644 public boolean a(Enchantment enchantment) { return super.a(enchantment) && enchantment != Enchantments.PIERCING; diff --git a/src/main/java/net/minecraft/server/EnchantmentOxygen.java b/src/main/java/net/minecraft/server/EnchantmentOxygen.java -index c1bc97f6ef..a5726d36df 100644 +index c1bc97f6e..a5726d36d 100644 --- a/src/main/java/net/minecraft/server/EnchantmentOxygen.java +++ b/src/main/java/net/minecraft/server/EnchantmentOxygen.java @@ -4,6 +4,7 @@ public class EnchantmentOxygen extends Enchantment { @@ -431,7 +431,7 @@ index c1bc97f6ef..a5726d36df 100644 - } } diff --git a/src/main/java/net/minecraft/server/EnchantmentPiercing.java b/src/main/java/net/minecraft/server/EnchantmentPiercing.java -index 1a2e8e31f9..0e8993e86e 100644 +index 1a2e8e31f..0e8993e86 100644 --- a/src/main/java/net/minecraft/server/EnchantmentPiercing.java +++ b/src/main/java/net/minecraft/server/EnchantmentPiercing.java @@ -4,6 +4,7 @@ public class EnchantmentPiercing extends Enchantment { @@ -455,7 +455,7 @@ index 1a2e8e31f9..0e8993e86e 100644 public boolean a(Enchantment enchantment) { return super.a(enchantment) && enchantment != Enchantments.MULTISHOT; diff --git a/src/main/java/net/minecraft/server/EnchantmentProtection.java b/src/main/java/net/minecraft/server/EnchantmentProtection.java -index 416e57caa0..b29cb54677 100644 +index 416e57caa..b29cb5467 100644 --- a/src/main/java/net/minecraft/server/EnchantmentProtection.java +++ b/src/main/java/net/minecraft/server/EnchantmentProtection.java @@ -10,7 +10,7 @@ public class EnchantmentProtection extends Enchantment { @@ -480,7 +480,7 @@ index 416e57caa0..b29cb54677 100644 public int a(int i, DamageSource damagesource) { return damagesource.ignoresInvulnerability() ? 0 : (this.a == EnchantmentProtection.DamageType.ALL ? i : (this.a == EnchantmentProtection.DamageType.FIRE && damagesource.isFire() ? i * 2 : (this.a == EnchantmentProtection.DamageType.FALL && damagesource == DamageSource.FALL ? i * 3 : (this.a == EnchantmentProtection.DamageType.EXPLOSION && damagesource.isExplosion() ? i * 2 : (this.a == EnchantmentProtection.DamageType.PROJECTILE && damagesource.b() ? i * 2 : 0))))); diff --git a/src/main/java/net/minecraft/server/EnchantmentQuickCharge.java b/src/main/java/net/minecraft/server/EnchantmentQuickCharge.java -index e624b63aaf..762642ce5a 100644 +index e624b63aa..762642ce5 100644 --- a/src/main/java/net/minecraft/server/EnchantmentQuickCharge.java +++ b/src/main/java/net/minecraft/server/EnchantmentQuickCharge.java @@ -4,6 +4,7 @@ public class EnchantmentQuickCharge extends Enchantment { @@ -502,7 +502,7 @@ index e624b63aaf..762642ce5a 100644 - } } diff --git a/src/main/java/net/minecraft/server/EnchantmentSilkTouch.java b/src/main/java/net/minecraft/server/EnchantmentSilkTouch.java -index 04aa8e1d5d..d0eac6dbc1 100644 +index 04aa8e1d5..d0eac6dbc 100644 --- a/src/main/java/net/minecraft/server/EnchantmentSilkTouch.java +++ b/src/main/java/net/minecraft/server/EnchantmentSilkTouch.java @@ -4,6 +4,7 @@ public class EnchantmentSilkTouch extends Enchantment { @@ -526,7 +526,7 @@ index 04aa8e1d5d..d0eac6dbc1 100644 public boolean a(Enchantment enchantment) { return super.a(enchantment) && enchantment != Enchantments.LOOT_BONUS_BLOCKS; diff --git a/src/main/java/net/minecraft/server/EnchantmentSweeping.java b/src/main/java/net/minecraft/server/EnchantmentSweeping.java -index a20b1c8f5b..7804e0a0a8 100644 +index a20b1c8f5..7804e0a0a 100644 --- a/src/main/java/net/minecraft/server/EnchantmentSweeping.java +++ b/src/main/java/net/minecraft/server/EnchantmentSweeping.java @@ -4,6 +4,7 @@ public class EnchantmentSweeping extends Enchantment { @@ -550,7 +550,7 @@ index a20b1c8f5b..7804e0a0a8 100644 return 1.0F - 1.0F / (float) (i + 1); } diff --git a/src/main/java/net/minecraft/server/EnchantmentThorns.java b/src/main/java/net/minecraft/server/EnchantmentThorns.java -index fd0255c890..df7c9b24b5 100644 +index fd0255c89..df7c9b24b 100644 --- a/src/main/java/net/minecraft/server/EnchantmentThorns.java +++ b/src/main/java/net/minecraft/server/EnchantmentThorns.java @@ -7,6 +7,7 @@ public class EnchantmentThorns extends Enchantment { @@ -574,7 +574,7 @@ index fd0255c890..df7c9b24b5 100644 public boolean canEnchant(ItemStack itemstack) { return itemstack.getItem() instanceof ItemArmor ? true : super.canEnchant(itemstack); diff --git a/src/main/java/net/minecraft/server/EnchantmentTridentChanneling.java b/src/main/java/net/minecraft/server/EnchantmentTridentChanneling.java -index 14115ecc78..2533b2cab2 100644 +index 14115ecc7..2533b2cab 100644 --- a/src/main/java/net/minecraft/server/EnchantmentTridentChanneling.java +++ b/src/main/java/net/minecraft/server/EnchantmentTridentChanneling.java @@ -4,6 +4,7 @@ public class EnchantmentTridentChanneling extends Enchantment { @@ -598,7 +598,7 @@ index 14115ecc78..2533b2cab2 100644 public boolean a(Enchantment enchantment) { return super.a(enchantment); diff --git a/src/main/java/net/minecraft/server/EnchantmentTridentImpaling.java b/src/main/java/net/minecraft/server/EnchantmentTridentImpaling.java -index f64fc401e8..b47d8284f8 100644 +index f64fc401e..b47d8284f 100644 --- a/src/main/java/net/minecraft/server/EnchantmentTridentImpaling.java +++ b/src/main/java/net/minecraft/server/EnchantmentTridentImpaling.java @@ -4,6 +4,7 @@ public class EnchantmentTridentImpaling extends Enchantment { @@ -622,7 +622,7 @@ index f64fc401e8..b47d8284f8 100644 public float a(int i, EnumMonsterType enummonstertype) { return enummonstertype == EnumMonsterType.e ? (float) i * 2.5F : 0.0F; diff --git a/src/main/java/net/minecraft/server/EnchantmentTridentLoyalty.java b/src/main/java/net/minecraft/server/EnchantmentTridentLoyalty.java -index dd91bed6e4..826f4d8750 100644 +index dd91bed6e..826f4d875 100644 --- a/src/main/java/net/minecraft/server/EnchantmentTridentLoyalty.java +++ b/src/main/java/net/minecraft/server/EnchantmentTridentLoyalty.java @@ -4,6 +4,7 @@ public class EnchantmentTridentLoyalty extends Enchantment { @@ -646,7 +646,7 @@ index dd91bed6e4..826f4d8750 100644 public boolean a(Enchantment enchantment) { return super.a(enchantment); diff --git a/src/main/java/net/minecraft/server/EnchantmentTridentRiptide.java b/src/main/java/net/minecraft/server/EnchantmentTridentRiptide.java -index 0f669dc7ac..81d6ccc35b 100644 +index 0f669dc7a..81d6ccc35 100644 --- a/src/main/java/net/minecraft/server/EnchantmentTridentRiptide.java +++ b/src/main/java/net/minecraft/server/EnchantmentTridentRiptide.java @@ -4,6 +4,7 @@ public class EnchantmentTridentRiptide extends Enchantment { @@ -670,7 +670,7 @@ index 0f669dc7ac..81d6ccc35b 100644 public boolean a(Enchantment enchantment) { return super.a(enchantment) && enchantment != Enchantments.LOYALTY && enchantment != Enchantments.CHANNELING; diff --git a/src/main/java/net/minecraft/server/EnchantmentVanishing.java b/src/main/java/net/minecraft/server/EnchantmentVanishing.java -index 4ef59d7f17..5d7b6ca57a 100644 +index 4ef59d7f1..5d7b6ca57 100644 --- a/src/main/java/net/minecraft/server/EnchantmentVanishing.java +++ b/src/main/java/net/minecraft/server/EnchantmentVanishing.java @@ -4,6 +4,7 @@ public class EnchantmentVanishing extends Enchantment { @@ -694,7 +694,7 @@ index 4ef59d7f17..5d7b6ca57a 100644 public boolean isTreasure() { return true; diff --git a/src/main/java/net/minecraft/server/EnchantmentWaterWorker.java b/src/main/java/net/minecraft/server/EnchantmentWaterWorker.java -index cf0999095e..bea57861bf 100644 +index cf0999095..bea57861b 100644 --- a/src/main/java/net/minecraft/server/EnchantmentWaterWorker.java +++ b/src/main/java/net/minecraft/server/EnchantmentWaterWorker.java @@ -4,6 +4,7 @@ public class EnchantmentWaterWorker extends Enchantment { @@ -716,7 +716,7 @@ index cf0999095e..bea57861bf 100644 - } } diff --git a/src/main/java/net/minecraft/server/EnchantmentWeaponDamage.java b/src/main/java/net/minecraft/server/EnchantmentWeaponDamage.java -index 4571cdf021..aa3cbd523a 100644 +index 4571cdf02..aa3cbd523 100644 --- a/src/main/java/net/minecraft/server/EnchantmentWeaponDamage.java +++ b/src/main/java/net/minecraft/server/EnchantmentWeaponDamage.java @@ -11,6 +11,7 @@ public class EnchantmentWeaponDamage extends Enchantment { @@ -740,7 +740,7 @@ index 4571cdf021..aa3cbd523a 100644 public float a(int i, EnumMonsterType enummonstertype) { return this.a == 0 ? 1.0F + (float) Math.max(0, i - 1) * 0.5F : (this.a == 1 && enummonstertype == EnumMonsterType.UNDEAD ? (float) i * 2.5F : (this.a == 2 && enummonstertype == EnumMonsterType.ARTHROPOD ? (float) i * 2.5F : 0.0F)); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 7bea362132..68bad6a13a 100644 +index 7bea36213..68bad6a13 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -1,6 +1,8 @@ @@ -766,7 +766,7 @@ index 7bea362132..68bad6a13a 100644 + } } diff --git a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java -index 64ceeda1af..0e9fa34411 100644 +index 64ceeda1a..0e9fa3441 100644 --- a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java +++ b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java @@ -23,6 +23,13 @@ public class CraftEnchantment extends Enchantment { @@ -784,5 +784,5 @@ index 64ceeda1af..0e9fa34411 100644 public int getStartLevel() { return target.getStartLevel(); -- -2.24.0 +2.26.2 diff --git a/patches/server/0104-Optimize-Chunk-Ticks.patch b/patches/server/0105-Optimize-Chunk-Ticks.patch similarity index 95% rename from patches/server/0104-Optimize-Chunk-Ticks.patch rename to patches/server/0105-Optimize-Chunk-Ticks.patch index 477d3e815..eb9810c16 100644 --- a/patches/server/0104-Optimize-Chunk-Ticks.patch +++ b/patches/server/0105-Optimize-Chunk-Ticks.patch @@ -1,4 +1,4 @@ -From 3d714cc11977af0d190a8bf90b53caeccea806bb Mon Sep 17 00:00:00 2001 +From 8c5d1a7830e01bdec9b793ca78efb1bdbaa5c681 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 2 Apr 2020 00:28:06 -0500 Subject: [PATCH] Optimize Chunk Ticks @@ -9,10 +9,10 @@ Subject: [PATCH] Optimize Chunk Ticks 2 files changed, 25 insertions(+), 39 deletions(-) diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java -index d07fcc0c51..3a18260944 100644 +index 24af59962..adc08db22 100644 --- a/src/main/java/net/minecraft/server/ChunkProviderServer.java +++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java -@@ -790,11 +790,12 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -971,11 +971,12 @@ public class ChunkProviderServer extends IChunkProvider { int k = this.world.getGameRules().getInt(GameRules.RANDOM_TICK_SPEED); BlockPosition blockposition = this.world.getSpawn(); // CraftBukkit start - Other mob type spawn tick rate @@ -30,7 +30,7 @@ index d07fcc0c51..3a18260944 100644 // CraftBukkit end this.world.getMethodProfiler().enter("naturalSpawnCount"); -@@ -840,40 +841,11 @@ public class ChunkProviderServer extends IChunkProvider { +@@ -1022,40 +1023,11 @@ public class ChunkProviderServer extends IChunkProvider { if (flag1 && (this.allowMonsters || this.allowAnimals) && this.world.getWorldBorder().isInBounds(chunk.getPos()) && !this.playerChunkMap.isOutsideOfRange(playerchunk, chunkcoordintpair, true)) { // Spigot // Paper - optimise isOutsideOfRange this.world.getMethodProfiler().enter("spawner"); this.world.timings.mobSpawn.startTiming(); // Spigot @@ -77,7 +77,7 @@ index d07fcc0c51..3a18260944 100644 // Paper start - only allow spawns upto the limit per chunk and update count afterwards diff --git a/src/main/java/net/minecraft/server/EnumCreatureType.java b/src/main/java/net/minecraft/server/EnumCreatureType.java -index 3ed7fa324f..7f236585db 100644 +index 3ed7fa324..7f236585d 100644 --- a/src/main/java/net/minecraft/server/EnumCreatureType.java +++ b/src/main/java/net/minecraft/server/EnumCreatureType.java @@ -31,11 +31,25 @@ public enum EnumCreatureType { diff --git a/patches/server/0105-Add-configurable-beehive-generation-chance.patch b/patches/server/0106-Add-configurable-beehive-generation-chance.patch similarity index 97% rename from patches/server/0105-Add-configurable-beehive-generation-chance.patch rename to patches/server/0106-Add-configurable-beehive-generation-chance.patch index 5ece3cca9..47ed9e7a2 100644 --- a/patches/server/0105-Add-configurable-beehive-generation-chance.patch +++ b/patches/server/0106-Add-configurable-beehive-generation-chance.patch @@ -1,4 +1,4 @@ -From a99ba89586464acd48a75d259bf99576e70b678f Mon Sep 17 00:00:00 2001 +From 3e3ed022c3baa918e0f2ede87d132473c55f75ac Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 2 Apr 2020 03:39:34 -0500 Subject: [PATCH] Add configurable beehive generation chance @@ -10,7 +10,7 @@ Subject: [PATCH] Add configurable beehive generation chance 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java b/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java -index 5827b1ba1a..5ef9ae16e3 100644 +index 5827b1ba1..5ef9ae16e 100644 --- a/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java +++ b/src/main/java/net/minecraft/server/WorldGenFeatureTreeBeehive.java @@ -10,7 +10,7 @@ import java.util.stream.Collectors; @@ -53,7 +53,7 @@ index 5827b1ba1a..5ef9ae16e3 100644 public T a(DynamicOps dynamicops) { return new Dynamic<>(dynamicops, dynamicops.createMap(ImmutableMap.of(dynamicops.createString("type"), dynamicops.createString(IRegistry.w.getKey(this.a).toString()), dynamicops.createString("probability"), dynamicops.createFloat(this.b)))).getValue(); // Purpur - decompile error diff --git a/src/main/java/net/minecraft/server/WorldGenTreeProvider.java b/src/main/java/net/minecraft/server/WorldGenTreeProvider.java -index b9dee0e255..9e9d9e6437 100644 +index b9dee0e25..9e9d9e643 100644 --- a/src/main/java/net/minecraft/server/WorldGenTreeProvider.java +++ b/src/main/java/net/minecraft/server/WorldGenTreeProvider.java @@ -31,7 +31,10 @@ public abstract class WorldGenTreeProvider { @@ -69,7 +69,7 @@ index b9dee0e255..9e9d9e6437 100644 BlockPosition blockposition1; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index adcdc6b8f4..0347b729c0 100644 +index adcdc6b8f..0347b729c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -99,6 +99,29 @@ public class PurpurWorldConfig { @@ -103,5 +103,5 @@ index adcdc6b8f4..0347b729c0 100644 public int campfireRegenDuration = 80; public int campfireRegenRange = 5; -- -2.24.0 +2.26.2 diff --git a/patches/server/0106-Add-more-timings-timers.patch b/patches/server/0107-Add-more-timings-timers.patch similarity index 95% rename from patches/server/0106-Add-more-timings-timers.patch rename to patches/server/0107-Add-more-timings-timers.patch index 96c969798..cd29644e5 100644 --- a/patches/server/0106-Add-more-timings-timers.patch +++ b/patches/server/0107-Add-more-timings-timers.patch @@ -1,4 +1,4 @@ -From 26a819664b9b9552b1c78ba9d514b2e0543609b6 Mon Sep 17 00:00:00 2001 +From aa1850cfb7ab695152dc0e698dce7b99a58b0ffc Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 4 Apr 2020 02:36:45 -0500 Subject: [PATCH] Add more timings timers @@ -12,12 +12,12 @@ Subject: [PATCH] Add more timings timers 5 files changed, 56 insertions(+) diff --git a/src/main/java/co/aikar/timings/MinecraftTimings.java b/src/main/java/co/aikar/timings/MinecraftTimings.java -index 48e1c50069..4949599b76 100644 +index 2966c5731..f663f019b 100644 --- a/src/main/java/co/aikar/timings/MinecraftTimings.java +++ b/src/main/java/co/aikar/timings/MinecraftTimings.java -@@ -43,6 +43,28 @@ public final class MinecraftTimings { - public static final Timing antiXrayUpdateTimer = Timings.ofSafe("anti-xray - update"); - public static final Timing antiXrayObfuscateTimer = Timings.ofSafe("anti-xray - obfuscate"); +@@ -45,6 +45,28 @@ public final class MinecraftTimings { + + public static final Timing scoreboardScoreSearch = Timings.ofSafe("Scoreboard score search"); // Tuinity - add timings for scoreboard search + // Purpur start + public static final Timing goalCleanup = Timings.ofSafe("PathfinderGoal - Cleanup"); @@ -45,7 +45,7 @@ index 48e1c50069..4949599b76 100644 private MinecraftTimings() {} diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index 3adc3434e1..eb0befb357 100644 +index 3adc3434e..eb0befb35 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -1,5 +1,7 @@ @@ -98,7 +98,7 @@ index 3adc3434e1..eb0befb357 100644 this.K(); } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index e9ef6d00c8..29b60e2879 100644 +index dae35c55e..3b5e38608 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2398,7 +2398,9 @@ public abstract class EntityLiving extends Entity { @@ -164,7 +164,7 @@ index e9ef6d00c8..29b60e2879 100644 // Purpur start if (EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0) { diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java -index a68fc11ec6..4b277a6f6d 100644 +index a68fc11ec..4b277a6f6 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java @@ -78,6 +78,7 @@ public class PathfinderGoalSelector { @@ -206,10 +206,10 @@ index a68fc11ec6..4b277a6f6d 100644 } diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index 81d233d23b..69102082f8 100644 +index 610542dc8..23d832914 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java -@@ -846,7 +846,9 @@ public class WorldServer extends World { +@@ -1308,7 +1308,9 @@ public class WorldServer extends World { return IRegistry.ENTITY_TYPE.getKey(entity1.getEntityType()).toString(); }); gameprofilerfiller.c("tickPassenger"); diff --git a/patches/server/0107-Skip-events-if-there-s-no-listeners.patch b/patches/server/0108-Skip-events-if-there-s-no-listeners.patch similarity index 93% rename from patches/server/0107-Skip-events-if-there-s-no-listeners.patch rename to patches/server/0108-Skip-events-if-there-s-no-listeners.patch index 2372bc479..3413dc759 100644 --- a/patches/server/0107-Skip-events-if-there-s-no-listeners.patch +++ b/patches/server/0108-Skip-events-if-there-s-no-listeners.patch @@ -1,4 +1,4 @@ -From 804503f72039c811819ea6fb177b910a95bd2f74 Mon Sep 17 00:00:00 2001 +From 4a9c0d2f7405197ec0067ccc93100f9fb287418b Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 4 Apr 2020 03:07:59 -0500 Subject: [PATCH] Skip events if there's no listeners @@ -8,7 +8,7 @@ Subject: [PATCH] Skip events if there's no listeners 1 file changed, 2 insertions(+) diff --git a/src/main/java/net/minecraft/server/CommandDispatcher.java b/src/main/java/net/minecraft/server/CommandDispatcher.java -index 5aa10d16bc..3b61298fa6 100644 +index 5aa10d16b..3b61298fa 100644 --- a/src/main/java/net/minecraft/server/CommandDispatcher.java +++ b/src/main/java/net/minecraft/server/CommandDispatcher.java @@ -275,6 +275,7 @@ public class CommandDispatcher { @@ -28,5 +28,5 @@ index 5aa10d16bc..3b61298fa6 100644 } -- -2.24.0 +2.26.2 diff --git a/patches/server/0108-Debug-stick-should-not-update-neighbors.patch b/patches/server/0109-Debug-stick-should-not-update-neighbors.patch similarity index 90% rename from patches/server/0108-Debug-stick-should-not-update-neighbors.patch rename to patches/server/0109-Debug-stick-should-not-update-neighbors.patch index 7ed668238..286a7bf00 100644 --- a/patches/server/0108-Debug-stick-should-not-update-neighbors.patch +++ b/patches/server/0109-Debug-stick-should-not-update-neighbors.patch @@ -1,4 +1,4 @@ -From 37187b6a7d4cee5c40f86fff824f0552d74229e5 Mon Sep 17 00:00:00 2001 +From 352888a06e6832cefdfc356aa02970b54fec2e35 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 4 Apr 2020 17:16:30 -0500 Subject: [PATCH] Debug stick should not update neighbors @@ -8,7 +8,7 @@ Subject: [PATCH] Debug stick should not update neighbors 1 file changed, 5 insertions(+) diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index d5e0578b25..bc465a47d8 100644 +index d5e0578b2..bc465a47d 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -186,6 +186,11 @@ public final class ItemStack { @@ -24,5 +24,5 @@ index d5e0578b25..bc465a47d8 100644 Item item = this.getItem(); EnumInteractionResult enuminteractionresult = item.a(itemactioncontext); -- -2.24.0 +2.26.2 diff --git a/patches/server/0109-Add-enderman-and-creeper-griefing-controls.patch b/patches/server/0110-Add-enderman-and-creeper-griefing-controls.patch similarity index 95% rename from patches/server/0109-Add-enderman-and-creeper-griefing-controls.patch rename to patches/server/0110-Add-enderman-and-creeper-griefing-controls.patch index 0c2b88b43..30c98600d 100644 --- a/patches/server/0109-Add-enderman-and-creeper-griefing-controls.patch +++ b/patches/server/0110-Add-enderman-and-creeper-griefing-controls.patch @@ -1,4 +1,4 @@ -From dc0bfde19e023666817183cd7571025e23c218d3 Mon Sep 17 00:00:00 2001 +From d53c537129e476e92384ddf3012206cf251bd5e9 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 26 Apr 2020 16:28:38 -0500 Subject: [PATCH] Add enderman and creeper griefing controls @@ -10,7 +10,7 @@ Subject: [PATCH] Add enderman and creeper griefing controls 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java -index ce366f401f..93efc79774 100644 +index ce366f401..93efc7977 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java @@ -237,7 +237,7 @@ public class EntityCreeper extends EntityMonster { @@ -23,7 +23,7 @@ index ce366f401f..93efc79774 100644 // CraftBukkit start diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java -index de30ce483f..68165d72dd 100644 +index de30ce483..68165d72d 100644 --- a/src/main/java/net/minecraft/server/EntityEnderman.java +++ b/src/main/java/net/minecraft/server/EntityEnderman.java @@ -354,6 +354,7 @@ public class EntityEnderman extends EntityMonster { @@ -43,7 +43,7 @@ index de30ce483f..68165d72dd 100644 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0347b729c0..e6ab2fde43 100644 +index 0347b729c..e6ab2fde4 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -394,11 +394,13 @@ public class PurpurWorldConfig { @@ -74,5 +74,5 @@ index 0347b729c0..e6ab2fde43 100644 public boolean endermiteRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0110-Chickens-can-retaliate.patch b/patches/server/0111-Chickens-can-retaliate.patch similarity index 96% rename from patches/server/0110-Chickens-can-retaliate.patch rename to patches/server/0111-Chickens-can-retaliate.patch index 875900c6d..26902732b 100644 --- a/patches/server/0110-Chickens-can-retaliate.patch +++ b/patches/server/0111-Chickens-can-retaliate.patch @@ -1,4 +1,4 @@ -From 51b33f8d3829e9fa3553bea216c0f8a654da942c Mon Sep 17 00:00:00 2001 +From c27089388ed1c2db321d25f60b88ec878bfd0a49 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 12 Apr 2020 13:19:34 -0500 Subject: [PATCH] Chickens can retaliate @@ -9,7 +9,7 @@ Subject: [PATCH] Chickens can retaliate 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityChicken.java b/src/main/java/net/minecraft/server/EntityChicken.java -index 5505b7ee94..1c9b0ce61b 100644 +index 5505b7ee9..1c9b0ce61 100644 --- a/src/main/java/net/minecraft/server/EntityChicken.java +++ b/src/main/java/net/minecraft/server/EntityChicken.java @@ -38,13 +38,22 @@ public class EntityChicken extends EntityAnimal { @@ -47,7 +47,7 @@ index 5505b7ee94..1c9b0ce61b 100644 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index e6ab2fde43..6962d17b9b 100644 +index e6ab2fde4..6962d17b9 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -361,6 +361,7 @@ public class PurpurWorldConfig { @@ -67,5 +67,5 @@ index e6ab2fde43..6962d17b9b 100644 public boolean codRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0111-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch b/patches/server/0112-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch similarity index 95% rename from patches/server/0111-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch rename to patches/server/0112-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch index 128312340..7d9126049 100644 --- a/patches/server/0111-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch +++ b/patches/server/0112-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch @@ -1,4 +1,4 @@ -From c7d025bf454a4fb24cf1f9e79331aed59692ddeb Mon Sep 17 00:00:00 2001 +From 7e15be00f7f884c7b0c122b115dbd89e1939f610 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 24 Apr 2020 09:33:11 -0500 Subject: [PATCH] Entities pick up loot bypass mob-griefing gamerule @@ -9,7 +9,7 @@ Subject: [PATCH] Entities pick up loot bypass mob-griefing gamerule 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index eb0befb357..4e5b71046a 100644 +index eb0befb35..4e5b71046 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -525,7 +525,7 @@ public abstract class EntityInsentient extends EntityLiving { @@ -22,7 +22,7 @@ index eb0befb357..4e5b71046a 100644 Iterator iterator = list.iterator(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 6962d17b9b..e57299f1e4 100644 +index 6962d17b9..e57299f1e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -200,6 +200,7 @@ public class PurpurWorldConfig { @@ -42,5 +42,5 @@ index 6962d17b9b..e57299f1e4 100644 itemFloatInLava = getBoolean("gameplay-mechanics.item.float-in-lava", itemFloatInLava); getList("gameplay-mechanics.item.immune.explosion", itemImmuneToExplosion).forEach(key -> { -- -2.24.0 +2.26.2 diff --git a/patches/server/0112-More-anvil-controls.patch b/patches/server/0113-More-anvil-controls.patch similarity index 98% rename from patches/server/0112-More-anvil-controls.patch rename to patches/server/0113-More-anvil-controls.patch index b191bb655..84845a052 100644 --- a/patches/server/0112-More-anvil-controls.patch +++ b/patches/server/0113-More-anvil-controls.patch @@ -1,4 +1,4 @@ -From 43aa8b97055c288e41c3c0a0924b99752559c53a Mon Sep 17 00:00:00 2001 +From 827c0d379a0b6597d22c5c106eb52807de377870 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 19 Apr 2020 00:17:56 -0500 Subject: [PATCH] More anvil controls @@ -9,7 +9,7 @@ Subject: [PATCH] More anvil controls 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minecraft/server/ContainerAnvil.java b/src/main/java/net/minecraft/server/ContainerAnvil.java -index 286b930ddb..d418c04414 100644 +index 286b930dd..d418c0441 100644 --- a/src/main/java/net/minecraft/server/ContainerAnvil.java +++ b/src/main/java/net/minecraft/server/ContainerAnvil.java @@ -8,6 +8,7 @@ import org.apache.logging.log4j.Logger; @@ -112,7 +112,7 @@ index 286b930ddb..d418c04414 100644 return ItemStack.a; } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java -index 9374c27061..d45f356be3 100644 +index 9374c2706..d45f356be 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java @@ -9,7 +9,7 @@ import org.bukkit.inventory.AnvilInventory; diff --git a/patches/server/0113-Villagers-farming-can-bypass-mob-griefing-gamerule.patch b/patches/server/0114-Villagers-farming-can-bypass-mob-griefing-gamerule.patch similarity index 94% rename from patches/server/0113-Villagers-farming-can-bypass-mob-griefing-gamerule.patch rename to patches/server/0114-Villagers-farming-can-bypass-mob-griefing-gamerule.patch index 9329deadc..0200ff304 100644 --- a/patches/server/0113-Villagers-farming-can-bypass-mob-griefing-gamerule.patch +++ b/patches/server/0114-Villagers-farming-can-bypass-mob-griefing-gamerule.patch @@ -1,4 +1,4 @@ -From 88168edf436d0a561fdca9966cf70b29a476c736 Mon Sep 17 00:00:00 2001 +From f09c0fbca0a916ee9cdccbbbff2fe1a2f79cba63 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 24 Apr 2020 09:37:29 -0500 Subject: [PATCH] Villagers farming can bypass mob-griefing gamerule @@ -9,7 +9,7 @@ Subject: [PATCH] Villagers farming can bypass mob-griefing gamerule 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/BehaviorFarm.java b/src/main/java/net/minecraft/server/BehaviorFarm.java -index e05e977271..cf3126a657 100644 +index e05e97727..cf3126a65 100644 --- a/src/main/java/net/minecraft/server/BehaviorFarm.java +++ b/src/main/java/net/minecraft/server/BehaviorFarm.java @@ -20,7 +20,7 @@ public class BehaviorFarm extends Behavior { @@ -22,7 +22,7 @@ index e05e977271..cf3126a657 100644 } else if (entityvillager.getVillagerData().getProfession() != VillagerProfession.FARMER) { return false; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index e57299f1e4..efdc176e64 100644 +index e57299f1e..efdc176e6 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -892,6 +892,7 @@ public class PurpurWorldConfig { @@ -42,5 +42,5 @@ index e57299f1e4..efdc176e64 100644 public boolean villagerTraderRidable = false; -- -2.24.0 +2.26.2 diff --git a/patches/server/0114-Player-invulnerabilities.patch b/patches/server/0115-Player-invulnerabilities.patch similarity index 96% rename from patches/server/0114-Player-invulnerabilities.patch rename to patches/server/0115-Player-invulnerabilities.patch index 082fc13c2..8e06751ff 100644 --- a/patches/server/0114-Player-invulnerabilities.patch +++ b/patches/server/0115-Player-invulnerabilities.patch @@ -1,4 +1,4 @@ -From 11fad2bb95551473eb3b77b0d52aed82d1151afe Mon Sep 17 00:00:00 2001 +From 67b240f9c510dfb11392cb1c4a173aba12d5bf26 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 2 May 2020 20:55:44 -0500 Subject: [PATCH] Player invulnerabilities @@ -12,7 +12,7 @@ Subject: [PATCH] Player invulnerabilities 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 9773923735..6572177c55 100644 +index 977392373..6572177c5 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -132,6 +132,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -75,10 +75,10 @@ index 9773923735..6572177c55 100644 public Scoreboard getScoreboard() { return getBukkitEntity().getScoreboard().getHandle(); diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 80a75912fb..3a1aa1d4da 100644 +index 6f7fd0f64..030d19a79 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -1531,6 +1531,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1548,6 +1548,7 @@ public class PlayerConnection implements PacketListenerPlayIn { PlayerConnectionUtils.ensureMainThread(packetplayinresourcepackstatus, this, this.player.getWorldServer()); // Paper start PlayerResourcePackStatusEvent.Status packStatus = PlayerResourcePackStatusEvent.Status.values()[packetplayinresourcepackstatus.status.ordinal()]; @@ -87,7 +87,7 @@ index 80a75912fb..3a1aa1d4da 100644 this.server.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(getPlayer(), packStatus)); // Paper end diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index 29150bd7d7..7b912d46f6 100644 +index 29150bd7d..7b912d46f 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java @@ -827,6 +827,8 @@ public abstract class PlayerList { @@ -100,7 +100,7 @@ index 29150bd7d7..7b912d46f6 100644 return entityplayer1; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index efdc176e64..81969d2dc9 100644 +index efdc176e6..81969d2dc 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -209,6 +209,8 @@ public class PurpurWorldConfig { @@ -122,7 +122,7 @@ index efdc176e64..81969d2dc9 100644 playerSleepCondition = getString("gameplay-mechanics.player.sleep.condition", playerSleepCondition); useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index e15c123878..137699c3e4 100644 +index e15c12387..137699c3e 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -2102,5 +2102,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0115-Do-not-strip-colors-from-death-messages.patch b/patches/server/0116-Do-not-strip-colors-from-death-messages.patch similarity index 91% rename from patches/server/0115-Do-not-strip-colors-from-death-messages.patch rename to patches/server/0116-Do-not-strip-colors-from-death-messages.patch index 5934bc5b8..ca07b6f48 100644 --- a/patches/server/0115-Do-not-strip-colors-from-death-messages.patch +++ b/patches/server/0116-Do-not-strip-colors-from-death-messages.patch @@ -1,4 +1,4 @@ -From f6dfdc9119326b17079bd9b9fc5e52b2766b19d8 Mon Sep 17 00:00:00 2001 +From 41f066356c5c3493af9db9d6892e179dc8f051e0 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sun, 7 Jun 2020 13:16:02 -0500 Subject: [PATCH] Do not strip colors from death messages @@ -8,7 +8,7 @@ Subject: [PATCH] Do not strip colors from death messages 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 6572177c55..a1333c4371 100644 +index 6572177c5..a1333c437 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java @@ -617,7 +617,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { diff --git a/patches/server/0116-Add-PrepareGrindstoneEvent.patch b/patches/server/0117-Add-PrepareGrindstoneEvent.patch similarity index 93% rename from patches/server/0116-Add-PrepareGrindstoneEvent.patch rename to patches/server/0117-Add-PrepareGrindstoneEvent.patch index a1940d776..6cfe5dec3 100644 --- a/patches/server/0116-Add-PrepareGrindstoneEvent.patch +++ b/patches/server/0117-Add-PrepareGrindstoneEvent.patch @@ -1,4 +1,4 @@ -From a6e29f80bc005ad2d1fdb68c5ced8e5066979dbd Mon Sep 17 00:00:00 2001 +From 910112766d93a8703e0a04f5d1d9920cfaa7cfd3 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 18 Jun 2020 23:29:54 -0500 Subject: [PATCH] Add PrepareGrindstoneEvent @@ -9,7 +9,7 @@ Subject: [PATCH] Add PrepareGrindstoneEvent 2 files changed, 10 insertions(+) diff --git a/src/main/java/net/minecraft/server/ContainerGrindstone.java b/src/main/java/net/minecraft/server/ContainerGrindstone.java -index fcfb4abdc2..0ebdcf0adf 100644 +index fcfb4abdc..0ebdcf0ad 100644 --- a/src/main/java/net/minecraft/server/ContainerGrindstone.java +++ b/src/main/java/net/minecraft/server/ContainerGrindstone.java @@ -161,6 +161,7 @@ public class ContainerGrindstone extends Container { @@ -21,7 +21,7 @@ index fcfb4abdc2..0ebdcf0adf 100644 } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index ce8d7877ad..a7e0331816 100644 +index ce8d7877a..a7e033181 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -1521,6 +1521,15 @@ public class CraftEventFactory { diff --git a/patches/server/0117-Fix-reloading-paper.yml.patch b/patches/server/0118-Fix-reloading-paper.yml.patch similarity index 92% rename from patches/server/0117-Fix-reloading-paper.yml.patch rename to patches/server/0118-Fix-reloading-paper.yml.patch index efc233418..e28daeb75 100644 --- a/patches/server/0117-Fix-reloading-paper.yml.patch +++ b/patches/server/0118-Fix-reloading-paper.yml.patch @@ -1,4 +1,4 @@ -From e62d1aa78282e48f84dc56943d8043eb971134a7 Mon Sep 17 00:00:00 2001 +From ed743edc4805265b70ed281823a74984531e0b0f Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 19 Jun 2020 21:36:16 -0500 Subject: [PATCH] Fix reloading paper.yml @@ -8,7 +8,7 @@ Subject: [PATCH] Fix reloading paper.yml 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index ecacb72b92..284ea05dcd 100644 +index ecacb72b9..284ea05dc 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -20,7 +20,7 @@ public class PaperWorldConfig { diff --git a/patches/server/0118-MC-125757-Fix-Always-increment-arrow-despawn-counter.patch b/patches/server/0119-MC-125757-Fix-Always-increment-arrow-despawn-counter.patch similarity index 95% rename from patches/server/0118-MC-125757-Fix-Always-increment-arrow-despawn-counter.patch rename to patches/server/0119-MC-125757-Fix-Always-increment-arrow-despawn-counter.patch index 41e40e9a6..3de5368ef 100644 --- a/patches/server/0118-MC-125757-Fix-Always-increment-arrow-despawn-counter.patch +++ b/patches/server/0119-MC-125757-Fix-Always-increment-arrow-despawn-counter.patch @@ -1,4 +1,4 @@ -From fe4fdafed3d5e87ffb5121f5ed2206fd391a5af8 Mon Sep 17 00:00:00 2001 +From 5c1ca79bd88c7166053cff3c3b2deb71193efc47 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Fri, 21 Feb 2020 17:04:51 -0600 Subject: [PATCH] MC-125757 Fix - Always increment arrow despawn counter @@ -8,7 +8,7 @@ Subject: [PATCH] MC-125757 Fix - Always increment arrow despawn counter 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityArrow.java b/src/main/java/net/minecraft/server/EntityArrow.java -index 48da1e662a..11d1dc8763 100644 +index ae44f878f..4ab857853 100644 --- a/src/main/java/net/minecraft/server/EntityArrow.java +++ b/src/main/java/net/minecraft/server/EntityArrow.java @@ -154,6 +154,8 @@ public abstract class EntityArrow extends Entity implements IProjectile { diff --git a/patches/server/0119-MC-168772-Fix-Add-turtle-egg-block-options.patch b/patches/server/0120-MC-168772-Fix-Add-turtle-egg-block-options.patch similarity index 95% rename from patches/server/0119-MC-168772-Fix-Add-turtle-egg-block-options.patch rename to patches/server/0120-MC-168772-Fix-Add-turtle-egg-block-options.patch index f3e27930c..17f48faca 100644 --- a/patches/server/0119-MC-168772-Fix-Add-turtle-egg-block-options.patch +++ b/patches/server/0120-MC-168772-Fix-Add-turtle-egg-block-options.patch @@ -1,4 +1,4 @@ -From 345bbd9cea2ce752e89e3054384dfe46ebbb1e91 Mon Sep 17 00:00:00 2001 +From 5b6860305459b4fe3e1a22b7d8e7271792d3df00 Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Thu, 6 Jun 2019 22:15:46 -0500 Subject: [PATCH] MC-168772 Fix - Add turtle egg block options @@ -9,7 +9,7 @@ Subject: [PATCH] MC-168772 Fix - Add turtle egg block options 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/BlockTurtleEgg.java b/src/main/java/net/minecraft/server/BlockTurtleEgg.java -index cb36334e41..aa83ef1699 100644 +index cb36334e4..aa83ef169 100644 --- a/src/main/java/net/minecraft/server/BlockTurtleEgg.java +++ b/src/main/java/net/minecraft/server/BlockTurtleEgg.java @@ -157,6 +157,23 @@ public class BlockTurtleEgg extends Block { @@ -38,7 +38,7 @@ index cb36334e41..aa83ef1699 100644 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 81969d2dc9..296274896e 100644 +index 81969d2dc..296274896 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -191,6 +191,15 @@ public class PurpurWorldConfig { diff --git a/patches/server/0120-MC-4-Fix-Item-position-desync.patch b/patches/server/0121-MC-4-Fix-Item-position-desync.patch similarity index 93% rename from patches/server/0120-MC-4-Fix-Item-position-desync.patch rename to patches/server/0121-MC-4-Fix-Item-position-desync.patch index adcd53b3c..3d40b7966 100644 --- a/patches/server/0120-MC-4-Fix-Item-position-desync.patch +++ b/patches/server/0121-MC-4-Fix-Item-position-desync.patch @@ -1,4 +1,4 @@ -From fa77519922db3d82bc59bb03d3b97986e0a24956 Mon Sep 17 00:00:00 2001 +From 732b58eb1fe4d8da9a4cea23ad014419e81662cb Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Sat, 6 Jul 2019 21:12:58 -0500 Subject: [PATCH] MC-4 Fix - Item position desync @@ -10,10 +10,10 @@ Subject: [PATCH] MC-4 Fix - Item position desync 3 files changed, 10 insertions(+) diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java -index 390cb8e767..4e63fd83e0 100644 +index adf7c9180..20d98c206 100644 --- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java +++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java -@@ -131,6 +131,12 @@ public class EntityTrackerEntry { +@@ -132,6 +132,12 @@ public class EntityTrackerEntry { double vec3d_dz = this.tracker.locZ() - 2.44140625E-4D*(this.zLoc); boolean flag1 = (vec3d_dx * vec3d_dx + vec3d_dy * vec3d_dy + vec3d_dz * vec3d_dz) >= 7.62939453125E-6D; // Paper end - reduce allocation of Vec3D here @@ -27,7 +27,7 @@ index 390cb8e767..4e63fd83e0 100644 boolean flag2 = flag1 || this.tickCounter % 60 == 0; boolean flag3 = Math.abs(i - this.yRot) >= 1 || Math.abs(j - this.xRot) >= 1; diff --git a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java -index 5b1d959354..0010448e3a 100644 +index 5b1d95935..0010448e3 100644 --- a/src/main/java/net/minecraft/server/PacketPlayOutEntity.java +++ b/src/main/java/net/minecraft/server/PacketPlayOutEntity.java @@ -14,10 +14,12 @@ public class PacketPlayOutEntity implements Packet { @@ -44,7 +44,7 @@ index 5b1d959354..0010448e3a 100644 return (new Vec3D((double) i, (double) j, (double) k)).a(2.44140625E-4D); } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 68bad6a13a..ab88636cad 100644 +index 68bad6a13..ab88636ca 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -163,8 +163,10 @@ public class PurpurConfig { diff --git a/patches/server/0121-MC-56653-Fix-pig-zombies-aggro.patch b/patches/server/0122-MC-56653-Fix-pig-zombies-aggro.patch similarity index 96% rename from patches/server/0121-MC-56653-Fix-pig-zombies-aggro.patch rename to patches/server/0122-MC-56653-Fix-pig-zombies-aggro.patch index 51c35868d..792cca655 100644 --- a/patches/server/0121-MC-56653-Fix-pig-zombies-aggro.patch +++ b/patches/server/0122-MC-56653-Fix-pig-zombies-aggro.patch @@ -1,4 +1,4 @@ -From be9a57f00945bb3951e3b52b1eb25f6c3f681770 Mon Sep 17 00:00:00 2001 +From 8c57c949a583f85788a8a5bc481a938918a53d9d Mon Sep 17 00:00:00 2001 From: William Blake Galbreath Date: Tue, 9 Jul 2019 20:56:47 -0500 Subject: [PATCH] MC-56653 Fix - pig zombies aggro @@ -9,7 +9,7 @@ Subject: [PATCH] MC-56653 Fix - pig zombies aggro 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityPigZombie.java b/src/main/java/net/minecraft/server/EntityPigZombie.java -index 90bf12c735..c78876fc42 100644 +index 90bf12c73..c78876fc4 100644 --- a/src/main/java/net/minecraft/server/EntityPigZombie.java +++ b/src/main/java/net/minecraft/server/EntityPigZombie.java @@ -170,6 +170,7 @@ public class EntityPigZombie extends EntityZombie { @@ -43,7 +43,7 @@ index 90bf12c735..c78876fc42 100644 public PathfinderGoalAnger(EntityPigZombie entitypigzombie) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 296274896e..7e7f10351b 100644 +index 296274896..7e7f10351 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -1013,6 +1013,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0122-EMC-MonsterEggSpawn-Event.patch b/patches/server/0123-EMC-MonsterEggSpawn-Event.patch similarity index 97% rename from patches/server/0122-EMC-MonsterEggSpawn-Event.patch rename to patches/server/0123-EMC-MonsterEggSpawn-Event.patch index 3a19adb9b..601d62023 100644 --- a/patches/server/0122-EMC-MonsterEggSpawn-Event.patch +++ b/patches/server/0123-EMC-MonsterEggSpawn-Event.patch @@ -1,4 +1,4 @@ -From 37bad92fb78ed0f5066c218d4fd9d43938461a70 Mon Sep 17 00:00:00 2001 +From d08ef8215637d0902eaca47e8638ad0b860b417d Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 20 Jul 2013 22:40:56 -0400 Subject: [PATCH] EMC - MonsterEggSpawn Event @@ -8,7 +8,7 @@ Subject: [PATCH] EMC - MonsterEggSpawn Event 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java -index 8e8d392a15..ff11baa7c5 100644 +index 8e8d392a1..ff11baa7c 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java +++ b/src/main/java/net/minecraft/server/EntityTypes.java @@ -163,19 +163,45 @@ public class EntityTypes { diff --git a/patches/server/0123-PaperPR-Add-BellRingEvent.patch b/patches/server/0124-PaperPR-Add-BellRingEvent.patch similarity index 96% rename from patches/server/0123-PaperPR-Add-BellRingEvent.patch rename to patches/server/0124-PaperPR-Add-BellRingEvent.patch index 6d486f292..258c0728b 100644 --- a/patches/server/0123-PaperPR-Add-BellRingEvent.patch +++ b/patches/server/0124-PaperPR-Add-BellRingEvent.patch @@ -1,4 +1,4 @@ -From 461d0b000bd167abcb877ab6833e3369533f9344 Mon Sep 17 00:00:00 2001 +From 5ce023753262d5b0a62eb10d6cd6301c0a49f736 Mon Sep 17 00:00:00 2001 From: Eearslya Sleiarion Date: Mon, 24 Jun 2019 21:27:32 -0700 Subject: [PATCH] PaperPR - Add BellRingEvent @@ -8,7 +8,7 @@ Subject: [PATCH] PaperPR - Add BellRingEvent 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraft/server/BlockBell.java b/src/main/java/net/minecraft/server/BlockBell.java -index dbdbfb8ad9..0bbd1e1594 100644 +index dbdbfb8ad..0bbd1e159 100644 --- a/src/main/java/net/minecraft/server/BlockBell.java +++ b/src/main/java/net/minecraft/server/BlockBell.java @@ -45,7 +45,7 @@ public class BlockBell extends BlockTileEntity { diff --git a/patches/server/0124-PaperPR-Per-World-Spawn-limits.patch b/patches/server/0124-PaperPR-Per-World-Spawn-limits.patch deleted file mode 100644 index d17aa4ea1..000000000 --- a/patches/server/0124-PaperPR-Per-World-Spawn-limits.patch +++ /dev/null @@ -1,53 +0,0 @@ -From c0dbd3292f24de8b8a271447b6a42dcf24b1113c Mon Sep 17 00:00:00 2001 -From: chase -Date: Sun, 15 Mar 2020 18:32:22 -0600 -Subject: [PATCH] PaperPR - Per World Spawn limits - ---- - src/main/java/net/pl3x/purpur/PurpurWorldConfig.java | 11 +++++++++++ - src/main/java/org/bukkit/craftbukkit/CraftWorld.java | 7 +++++++ - 2 files changed, 18 insertions(+) - -diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7e7f10351b..f2281d3259 100644 ---- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -313,6 +313,17 @@ public class PurpurWorldConfig { - idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); - } - -+ public int spawnLimitMonsters; -+ public int spawnLimitAnimals; -+ public int spawnLimitWaterAnimals; -+ public int spawnLimitAmbient; -+ private void perWorldSpawnLimit(){ -+ spawnLimitMonsters = getInt("spawn-limits.monsters", -1); -+ spawnLimitAnimals = getInt("spawn-limits.animals", -1); -+ spawnLimitWaterAnimals = getInt("spawn-limits.water-animals", -1); -+ spawnLimitAmbient = getInt("spawn-limits.ambient", -1); -+ } -+ - public boolean batRidable = false; - public boolean batRidableInWater = false; - public boolean batRequireShiftToMount = true; -diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 288eae54fa..c1dd618e04 100644 ---- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -333,6 +333,13 @@ public class CraftWorld implements World { - this.generator = gen; - - environment = env; -+ -+ // Purpur start -+ monsterSpawn = world.purpurConfig.spawnLimitMonsters; -+ animalSpawn = world.purpurConfig.spawnLimitAnimals; -+ waterAnimalSpawn = world.purpurConfig.spawnLimitWaterAnimals; -+ ambientSpawn = world.purpurConfig.spawnLimitAmbient; -+ // Purpur end - } - - @Override --- -2.26.2 - diff --git a/patches/server/0126-PaperPR-3550-Fix-more-exploits.patch b/patches/server/0126-PaperPR-3550-Fix-more-exploits.patch deleted file mode 100644 index 87d9ba2d1..000000000 --- a/patches/server/0126-PaperPR-3550-Fix-more-exploits.patch +++ /dev/null @@ -1,206 +0,0 @@ -From a4944dd2a6754377e5c2c3677efd11cb4edd9bc1 Mon Sep 17 00:00:00 2001 -From: Spottedleaf -Date: Thu, 11 Jun 2020 17:29:42 -0700 -Subject: [PATCH] PaperPR - 3550 - Fix more exploits - ---- - .../com/destroystokyo/paper/PaperConfig.java | 7 ++-- - src/main/java/net/minecraft/server/Block.java | 3 +- - .../net/minecraft/server/BlockPiston.java | 35 ++++++++++++++++--- - .../minecraft/server/EntityEnderDragon.java | 4 ++- - .../minecraft/server/EntityFallingBlock.java | 11 ++++++ - .../minecraft/server/PlayerConnection.java | 5 +++ - .../minecraft/server/TileEntityPiston.java | 2 +- - 7 files changed, 56 insertions(+), 11 deletions(-) - -diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index 863bec74a6..8444819f07 100644 ---- a/src/main/java/com/destroystokyo/paper/PaperConfig.java -+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java -@@ -442,8 +442,9 @@ public class PaperConfig { - consoleHasAllPermissions = getBoolean("settings.console-has-all-permissions", consoleHasAllPermissions); - } - -- public static boolean allowTntDuplication = false; -- private static void allowTntDuplication() { -- allowTntDuplication = getBoolean("settings.unsupported-settings.allow-tnt-duplication", allowTntDuplication); -+ public static boolean allowPistonDuplication; -+ private static void allowPistonDuplication() { -+ allowPistonDuplication = getBoolean("settings.unsupported-settings.allow-piston-duplication", config.getBoolean("settings.unsupported-settings.allow-tnt-duplication", false)); -+ set("settings.unsupported-settings.allow-tnt-duplication", null); - } - } -diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java -index 8985d0ee9d..6db195e023 100644 ---- a/src/main/java/net/minecraft/server/Block.java -+++ b/src/main/java/net/minecraft/server/Block.java -@@ -37,7 +37,8 @@ public class Block implements IMaterial { - this != Blocks.BEDROCK && - this != Blocks.END_PORTAL_FRAME && - this != Blocks.END_PORTAL && -- this != Blocks.END_GATEWAY; -+ this != Blocks.END_GATEWAY && // Purpur -+ this != Blocks.MOVING_PISTON; // Purpur - try to prevent creation of headless pistons - } - public co.aikar.timings.Timing timing; - public co.aikar.timings.Timing getTiming() { -diff --git a/src/main/java/net/minecraft/server/BlockPiston.java b/src/main/java/net/minecraft/server/BlockPiston.java -index 2b15aa959f..1d4d0d3eb3 100644 ---- a/src/main/java/net/minecraft/server/BlockPiston.java -+++ b/src/main/java/net/minecraft/server/BlockPiston.java -@@ -175,6 +175,12 @@ public class BlockPiston extends BlockDirectional { - @Override - public boolean a(IBlockData iblockdata, World world, BlockPosition blockposition, int i, int j) { - EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockPiston.FACING); -+ // Purpur start - prevent retracting when we're facing the wrong way (we were replaced before retraction could occur) -+ EnumDirection directionQueuedAs = EnumDirection.fromType1(j & 7); // Paper - copied from below -+ if (!com.destroystokyo.paper.PaperConfig.allowBlockPermanentBreakingExploits && enumdirection != directionQueuedAs) { -+ return false; -+ } -+ // Purpur end - prevent retracting when we're facing the wrong way - - if (!world.isClientSide) { - boolean flag = this.a(world, blockposition, enumdirection); -@@ -204,7 +210,7 @@ public class BlockPiston extends BlockDirectional { - } - - world.setTypeAndData(blockposition, (IBlockData) ((IBlockData) Blocks.MOVING_PISTON.getBlockData().set(BlockPistonMoving.a, enumdirection)).set(BlockPistonMoving.b, this.sticky ? BlockPropertyPistonType.STICKY : BlockPropertyPistonType.DEFAULT), 3); -- world.setTileEntity(blockposition, BlockPistonMoving.a((IBlockData) this.getBlockData().set(BlockPiston.FACING, EnumDirection.fromType1(j & 7)), enumdirection, false, true)); -+ world.setTileEntity(blockposition, BlockPistonMoving.a((IBlockData) this.getBlockData().set(BlockPiston.FACING, EnumDirection.fromType1(j & 7)), enumdirection, false, true)); // Purpur - diff on change, j is facing direction - if (this.sticky) { - BlockPosition blockposition1 = blockposition.b(enumdirection.getAdjacentX() * 2, enumdirection.getAdjacentY() * 2, enumdirection.getAdjacentZ() * 2); - IBlockData iblockdata1 = world.getType(blockposition1); -@@ -232,7 +238,14 @@ public class BlockPiston extends BlockDirectional { - } - } - } else { -- world.a(blockposition.shift(enumdirection), false); -+ // Purpur start - fix headless pistons breaking blocks -+ BlockPosition headPos = blockposition.shift(enumdirection); -+ if (com.destroystokyo.paper.PaperConfig.allowBlockPermanentBreakingExploits || world.getType(headPos) == Blocks.PISTON_HEAD.getBlockData().set(FACING, enumdirection)) { // double check to make sure we're not a headless piston. -+ world.setAir(headPos, false); -+ } else { -+ ((WorldServer)world).getChunkProvider().flagDirty(headPos); // ... fix client desync -+ } -+ // Purpur end - fix headless pistons breaking blocks - } - - world.playSound((EntityHuman) null, blockposition, SoundEffects.BLOCK_PISTON_CONTRACT, SoundCategory.BLOCKS, 0.5F, world.random.nextFloat() * 0.15F + 0.6F); -@@ -373,12 +386,24 @@ public class BlockPiston extends BlockDirectional { - } - - for (k = list.size() - 1; k >= 0; --k) { -- blockposition3 = (BlockPosition) list.get(k); -- iblockdata1 = world.getType(blockposition3); if (!com.destroystokyo.paper.PaperConfig.allowTntDuplication) map.replace(blockposition3, iblockdata1); // Paper start - fix piston physics inconsistency -+ // Purpur start - fix a variety of piston desync dupes -+ boolean allowDesync = com.destroystokyo.paper.PaperConfig.allowPistonDuplication; -+ BlockPosition oldPos = blockposition3 = (BlockPosition) list.get(k); -+ iblockdata1 = allowDesync ? world.getType(oldPos) : null; -+ // Purpur end - fix a variety of piston desync dupes - blockposition3 = blockposition3.shift(enumdirection1); - map.remove(blockposition3); - world.setTypeAndData(blockposition3, (IBlockData) Blocks.MOVING_PISTON.getBlockData().set(BlockPiston.FACING, enumdirection), 68); -- world.setTileEntity(blockposition3, BlockPistonMoving.a(com.destroystokyo.paper.PaperConfig.allowTntDuplication ? list1.get(k) : iblockdata1, enumdirection, flag, false)); // Paper - fix piston physics inconsistency -+ // Purpur start - fix a variety of piston desync dupes -+ if (!allowDesync) { -+ iblockdata1 = world.getType(oldPos); -+ map.replace(oldPos, iblockdata1); -+ } -+ world.setTileEntity(blockposition3, BlockPistonMoving.a(allowDesync ? list1.get(k) : iblockdata1, enumdirection, flag, false)); -+ if (!allowDesync) { -+ world.setTypeAndData(oldPos, Blocks.AIR.getBlockData(), 4 | 16 | 1024); // set air to prevent later physics updates from seeing this block -+ } -+ // Purpur end - fix a variety of piston desync dupes - --j; - aiblockdata[j] = iblockdata1; - } -diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java -index f06fde3242..6abe47f776 100644 ---- a/src/main/java/net/minecraft/server/EntityEnderDragon.java -+++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java -@@ -33,7 +33,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { - public float bx; - public float by; - public boolean bz; -- public int bA; -+ public int bA; public final int getDeathTicks() { return this.bA; } public final void setDeathTicks(final int value) { this.bA = value; } // Purpur - public float bB; - @Nullable - public EntityEnderCrystal currentEnderCrystal; -@@ -908,6 +908,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { - public void b(NBTTagCompound nbttagcompound) { - super.b(nbttagcompound); - nbttagcompound.setInt("DragonPhase", this.bO.a().getControllerPhase().b()); -+ nbttagcompound.setInt("Paper.DeathTick", this.getDeathTicks()); // Purpur - } - - @Override -@@ -916,6 +917,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { - if (nbttagcompound.hasKey("DragonPhase")) { - this.bO.setControllerPhase(DragonControllerPhase.getById(nbttagcompound.getInt("DragonPhase"))); - } -+ this.setDeathTicks(nbttagcompound.getInt("Paper.DeathTick")); // Purpur - - } - -diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java -index 6683f7c5f3..7969b1cd57 100644 ---- a/src/main/java/net/minecraft/server/EntityFallingBlock.java -+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java -@@ -64,6 +64,11 @@ public class EntityFallingBlock extends Entity { - - @Override - public void tick() { -+ // Purpur start - fix sand duping -+ if (this.dead) { -+ return; -+ } -+ // Purpur end - fix sand duping - if (this.block.isAir()) { - this.die(); - } else { -@@ -86,6 +91,12 @@ public class EntityFallingBlock extends Entity { - - this.move(EnumMoveType.SELF, this.getMot()); - -+ // Purpur start - fix sand duping -+ if (this.dead) { -+ return; -+ } -+ // Purpur end - fix sand duping -+ - // Paper start - Configurable EntityFallingBlock height nerf - if (this.world.paperConfig.fallingBlockHeightNerf != 0 && this.locY() > this.world.paperConfig.fallingBlockHeightNerf) { - if (this.dropItem && this.world.getGameRules().getBoolean(GameRules.DO_ENTITY_DROPS)) { -diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 3a1aa1d4da..c13296935c 100644 ---- a/src/main/java/net/minecraft/server/PlayerConnection.java -+++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -1104,6 +1104,11 @@ public class PlayerConnection implements PacketListenerPlayIn { - } - - this.player.move(EnumMoveType.PLAYER, new Vec3D(d7, d8, d9)); -+ // Purpur start - prevent position desync -+ if (this.teleportPos != null) { -+ return; // ... thanks Mojang for letting move calls teleport across dimensions. -+ } -+ // Purpur end - prevent position desync - this.player.onGround = packetplayinflying.b(); - double d12 = d8; - -diff --git a/src/main/java/net/minecraft/server/TileEntityPiston.java b/src/main/java/net/minecraft/server/TileEntityPiston.java -index 634e378430..d700e8281f 100644 ---- a/src/main/java/net/minecraft/server/TileEntityPiston.java -+++ b/src/main/java/net/minecraft/server/TileEntityPiston.java -@@ -275,7 +275,7 @@ public class TileEntityPiston extends TileEntity implements ITickable { - IBlockData iblockdata = Block.b(this.a, (GeneratorAccess) this.world, this.position); - - if (iblockdata.isAir()) { -- this.world.setTypeAndData(this.position, this.a, 84 | (com.destroystokyo.paper.PaperConfig.allowTntDuplication ? 0 : 2)); // Paper - force notify (flag 2), it's possible the set type by the piston block (which doesn't notify) set this block to air -+ this.world.setTypeAndData(this.position, this.a, com.destroystokyo.paper.PaperConfig.allowPistonDuplication ? 84 : (84 | 2)); // Paper - force notify (flag 2), it's possible the set type by the piston block (which doesn't notify) set this block to air - Block.a(this.a, iblockdata, this.world, this.position, 3); - } else { - if (iblockdata.b((IBlockState) BlockProperties.C) && (Boolean) iblockdata.get(BlockProperties.C)) { --- -2.26.2 - diff --git a/patches/server/0128-YAPFA-Disable-mojang-profiler.patch b/patches/server/0126-YAPFA-Disable-mojang-profiler.patch similarity index 94% rename from patches/server/0128-YAPFA-Disable-mojang-profiler.patch rename to patches/server/0126-YAPFA-Disable-mojang-profiler.patch index 94ec91668..b6abf5686 100644 --- a/patches/server/0128-YAPFA-Disable-mojang-profiler.patch +++ b/patches/server/0126-YAPFA-Disable-mojang-profiler.patch @@ -1,4 +1,4 @@ -From bb731e0fa81a7c7a97fb002407b4915d927ae94e Mon Sep 17 00:00:00 2001 +From b35e8a48830a90a06fcf803f62bdaba77a370382 Mon Sep 17 00:00:00 2001 From: tr7zw Date: Thu, 5 Mar 2020 23:08:01 +0100 Subject: [PATCH] YAPFA - Disable mojang profiler @@ -13,7 +13,7 @@ Subject: [PATCH] YAPFA - Disable mojang profiler create mode 100644 src/main/java/net/pl3x/purpur/GameProfilerNoop.java diff --git a/src/main/java/net/minecraft/server/CommandDebug.java b/src/main/java/net/minecraft/server/CommandDebug.java -index f0d72ea39d..e38a684060 100644 +index f0d72ea39..e38a68406 100644 --- a/src/main/java/net/minecraft/server/CommandDebug.java +++ b/src/main/java/net/minecraft/server/CommandDebug.java @@ -22,6 +22,7 @@ public class CommandDebug { @@ -43,7 +43,7 @@ index f0d72ea39d..e38a684060 100644 throw CommandDebug.b.create(); } else { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ef16aef13a..ff1c9af029 100644 +index 40da7a05c..6928d2492 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -80,7 +80,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant -Date: Fri, 3 Apr 2020 02:21:13 -0700 -Subject: [PATCH] Tuinity - Always able to execute tasks on the main server - queue - -This should move all queued packet execution into the main server -tick loop, so this will free up some time for oversleep to act on -chunks. ---- - src/main/java/net/minecraft/server/MinecraftServer.java | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 517d7a9006..ef16aef13a 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1114,7 +1114,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant