From 99a93cf526be887272e38b1a4c683aafe8a05211 Mon Sep 17 00:00:00 2001 From: Simon Gardling Date: Tue, 9 Mar 2021 16:11:49 -0500 Subject: [PATCH] upstream (#421) * Updated Upstream and Sidestream(s) (Paper/Tuinity/Purpur/Airplane/Empirecraft/Origami) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: d23f8b62e fix? #5222 0f2575de2 fix? #5222 7c3499702 fix? #5218 c8eec830b fix #5217 a235c77ce Adventure 4.5.0 511cd52f0 fix #5214 33d4f608b fix stupid legacy chat garbage a1eebfea9 fix #5212 and #5213 466820160 Upstream Update (#5211) 2a0ee4b65 Add support for hex color codes in console 4e958e229 We're going on an Adventure! (#4842) 1a9735611 Stop loop when flags set to false (#5101) a5928db4a [Auto] Updated Upstream (CraftBukkit) 5fd19303f Call PreCreatureSpawnEvent for more spawn reasons (#5201) Tuinity Changes: 2f298d3 Fix getEntities for ender dragon parts Purpur Changes: 55af107 Updated Upstream (Paper) 8369588 Updated Upstream (Paper & Tuinity) 14906a1 Allow for removing italics from items renamed in the anvil by starting the text with '&r' f599c59 Update silk touch spawners patch to use adventure e17ee14 Update anvil colors patch to use adventure b538cd9 Updated Upstream (Paper) c08f028 Updated Upstream (Tuinity) 90f67f8 Updated Upstream (Paper) c98cc6b Configs for if Wither/Ender Dragon can ride vehicles 2d2e1d4 Fix Wither and Ender Dragon being able to ride boats when they cannot in Paper/Vanilla Airplane Changes: 3fc432c [skip ci] Add Patrons section 4b9dd63 Skip POI finding if stuck in vehicle 1ba97ae Updated Upstream (Tuinity) Empirecraft Changes: 58dee2db Updated Paper 48c1161a Updated Paper Origami Changes: 654b344 Only try to update below hopper if non-ticking is enabled * Updated Upstream and Sidestream(s) (Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: d5cb9308f fix #5224 * it works, finally * I think everything is fixed now.... * Updated Upstream and Sidestream(s) (Paper/Tuinity/Purpur/Airplane/Empirecraft) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 2dd5dccf0 Add config option for displayname in quit message (#5260) 63fe5e4b7 Fix further issues with rgb text pattern matching 89be8185d Don't grab the threads stacktrace when dumping same thread ca4c781d8 [Auto] Updated Upstream (Bukkit/CraftBukkit) 6ae212125 Display name should never be null bf2f8aeaf Add @NotNull to Key in org.bukkit.sound (#5241) 01f9b65f9 Sound can implement Adventure's Sound.Type aa282a1a0 Don't try to deserialize a null string in legacy method 9bcd08cb3 [CI-SKIP] [Auto] Rebuild Patches ea6fd6076 [Auto] Updated Upstream (Bukkit) d9b02e94d Misc thread dumps (#5200) a0093e142 Adventure 4.5.1 afea0e8ab Add links to the Adventure javadocs 846783c8a Fix a couple of typos in the javadoc for Player (#5235) a2574d8f5 Replace usages of LegacyComponentSerializer.legacySection() in Paper-Server with PaperAdventure.LEGACY_SECTION_UXRC (#5233) cae142b85 Enable Hex colors on PaperAdventure.LEGACY_SECTION_UXRC, and use it for sending messages to console command sender (#5230) c1635eabb PlayerDeathEvent#getDeathMessage should provide translation for legacy reasons #5227 3f74af202 Fix Log4J converter not parsing hex without named colors (#5228) Tuinity Changes: 7734ef0 Detail player ticking in watchdog dumps Purpur Changes: 529c260 [ci-skip] Update Gradle to 6.8.3 831b8d7 Updated Upstream (Paper) d3c8fb2 Updated Upstream (Paper) 4602b9b Updated Upstream (Paper) 18f97a9 Make fox breeding cooldown work, add villager breeding cooldown config 868c9ca Updated Upstream (Paper) 274c7b2 Updated Upstream (Paper) Airplane Changes: 9f3cad3 Updated Upstream (Tuinity) Empirecraft Changes: 3e3e8e5e Updated Paper * Updated Upstream and Sidestream(s) (Paper/Purpur/Empirecraft) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: df4c68b66 fix #5279 - clickable links again ff5ff3af4 Print command usage for /paper entity list at more places (#5282) 5d779a621 Implements PlayerHandshakeEvent#getOriginalSocketAddressHostname and deprecates PlayerHandshakeEvent(String, boolean) in favour of PlayerHandshakeEvent(String, String, boolean) 6fab1ee3a Expose Tracked Players b53a650a5 Clear SyncLoadInfo c02c22fde fix: legacy component serialisation was wiped out Purpur Changes: a5fa038 Updated Upstream (Paper) Empirecraft Changes: 95ac7f87 Updated Paper * Updated Upstream and Sidestream(s) (Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 06900aef5 Fix username connecting with no texture being overwritten by usercache (#4970) * Updated Upstream and Sidestream(s) (Paper/Purpur) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 9907cedec New chat events for better Adventure support (#5289) Purpur Changes: 34f0e57 Updated Upstream (Paper) * Updated Upstream and Sidestream(s) (Paper/Purpur/Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 9907cedec New chat events for better Adventure support (#5289) Purpur Changes: 34f0e57 Updated Upstream (Paper) Paper Changes: 60e92c061 fix #5292 with help from @JRoy * that doesn't need to be there * Updated Upstream and Sidestream(s) (Paper/Purpur/Airplane) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 7d56f38ed Do not use the bukkit singleton for the GUI (Fixes #5301) 4c9bdf53a Updated Upstream (Bukkit/CraftBukkit/Spigot) (#5299) 8647bd130 Improve ServerGUI fcc6d3359 Throw proper exception on empty JsonList file 17d2e1291 Fix interact event in adventure mode 964e0bf42 MC-29274: Fix Wither hostility towards players 9e24a5213 Fixed furnace cook-speed multiplier losing precision when calculating cook time c7e42faa3 Do not create unnecessary copies of the passenger list 40881ad67 added tnt minecarts to the tnt height nerf 26be708f4 Remove streams from SensorNearest 5b5989b21 fix nullability of playerlist header/footer, closes #5290 45bc531dd Fix Material#getTranslationKey for Block Materials (#5294) Purpur Changes: 68ff99e Updated Upstream (Paper) Airplane Changes: 80d65be Add more licenses 4d27e5b Use our own bstats, move mcdev fixes * whoops * Updated Upstream and Sidestream(s) (Airplane) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Airplane Changes: d50d4e1 Rewrite disabling of POI searching when stuck * Updated Upstream and Sidestream(s) (Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: be1687914 stop firing pressure plate EntityInteractEvent for ignored entities (fixes #4962) * Updated Upstream and Sidestream(s) (Paper/Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: be1687914 stop firing pressure plate EntityInteractEvent for ignored entities (fixes #4962) Paper Changes: aaef1d5cc fix file conversion 674d8f7f7 Make discovered maps config work in treasure maps from loot tables too * Updated Upstream and Sidestream(s) (Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 616b1f3cd consider enchants for destroy speed * Updated Upstream and Sidestream(s) (Paper/Purpur/Airplane) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 5b20df6bf added PlayerNameEntityEvent ff9c82444 Add worldborder events Purpur Changes: d93887a Updated Upstream (Paper) Airplane Changes: 02743da Complete /airplane command a2be422 Add /airplane command 3b90baf [SKIP-CI] Use patreon for sponsor button * Updated Upstream and Sidestream(s) (Paper/Tuinity/Purpur) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: be7cde2c7 [CI-SKIP] Always check PATH for JDK (#5315) Tuinity Changes: 09e1a10 Fix NPE in light exception handler 0ae7c2c Dump even more info for ticking entities 2e4a930 Store changed positions inside field on light engine Purpur Changes: c54e65f Add config for snow on blue ice 2fdd7d4 One Punch Man! (#185) c2bd3de Dont run with scissors (#184) * Updated Upstream and Sidestream(s) (Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 54ec85949 Prevent grindstones from overstacking items d7795080c Fix NPE for AIR in meta operations in ItemStack 2e70796c7 [CI-SKIP] Improve documentation of PreCreatureSpawnEvent (#5244) 7bb92e750 [CI-SKIP] Add JavaDoc links to Tag class pointing to custom Paper tags (#5285) 28cd686bf fix per-world difficulty command (#5306) * Updated Upstream and Sidestream(s) (Tuinity/Airplane/Akarin/Empirecraft) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Tuinity Changes: 71b089f Do not run raytrace logic for AIR Airplane Changes: 815b461 Flare Akarin Changes: 62342de Update README.md dfcbbf5 Update SUPPORT.md 4225fcf Updated Tuinity's Paper 3950fd5 Updated build badge f2d367c Merge branch 'ver/1.15.2' into ver/1.16.4 Empirecraft Changes: 3718e178 Updated Paper * whoops * Updated Upstream and Sidestream(s) (Tuinity) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Tuinity Changes: f87cb79 Make entity tracker use highest range of passengers * Updated Upstream and Sidestream(s) (Airplane) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Airplane Changes: dd6a75c Updated Upstream (Tuinity) 48ff3e0 Some tweaks to increase Flare's compatibility * Updated Upstream and Sidestream(s) (Airplane/Airplane) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Airplane Changes: dd6a75c Updated Upstream (Tuinity) 48ff3e0 Some tweaks to increase Flare's compatibility Airplane Changes: e7fc41a Update to latest version of Flare * Updated Upstream and Sidestream(s) (Airplane) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Airplane Changes: 86781ec Multithreaded Tracker! * Updated Upstream and Sidestream(s) (Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 7f72c4675 Use implementation-provided legacy serializer for events 27a8d99ec Adventure 4.7.0 e65bd35a1 Respect teams in legacy chat name if configured (#5321) b31089a92 Updated Upstream (Bukkit/CraftBukkit/Spigot) (#5325) a52b30814 Fix title swapping fadeIn and stay * Updated Upstream and Sidestream(s) (Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: e4d8a6279 Implement Keyed on World bcb63dab7 [CI-SKIP] [Auto] Rebuild Patches 48342b06c Allow signs that are inside of the spawn protection to be right clicked to use their run_command tag c229f90c1 Add Block#isValidTool 20e709c1d Add recipe to cook events 2dcf8bff4 legacy formatting will be the death of me f597fea0d legacy formatting is worse than walking around in wet socks * Updated Upstream and Sidestream(s) (Paper/Purpur) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: e4d8a6279 Implement Keyed on World bcb63dab7 [CI-SKIP] [Auto] Rebuild Patches 48342b06c Allow signs that are inside of the spawn protection to be right clicked to use their run_command tag c229f90c1 Add Block#isValidTool 20e709c1d Add recipe to cook events 2dcf8bff4 legacy formatting will be the death of me f597fea0d legacy formatting is worse than walking around in wet socks Purpur Changes: 63c370c One Punch Man 2: Electric Boogaloo (#187) --- .gitmodules | 2 +- PATCHES.md | 19 +- Paper | 2 +- .../src/main/kotlin/ConfigureSubprojects.kt | 6 +- buildSrc/src/main/kotlin/DependencyLoading.kt | 112 +-- ...difiedLog4j2PluginsCacheFileTransformer.kt | 107 +++ .../0001-Expose-findClass-for-profiler.patch | 18 + .../server/0002-Airplane-Configuration.patch | 85 ++- ...cing-for-EntityLiving-hasLineOfSight.patch | 6 +- ...pelessRecipes-comparison-for-Vanilla.patch | 6 +- ...t-get-entity-equipment-if-not-needed.patch | 2 +- .../0011-Dynamic-activation-range.patch | 18 +- .../0015-Reduce-memory-allocations.patch | 14 +- ...Skip-POI-finding-if-stuck-in-vehicle.patch | 45 ++ .../server/0017-Airplane-Profiler.patch | 638 ++++++++++++++++++ .../0018-Multithreaded-entity-tracking.patch | 403 +++++++++++ .../server/0001-Disable-the-Snooper.patch | 6 +- ...it.createInventory-with-type-LECTERN.patch | 8 +- ...-grindstones-from-overstacking-items.patch | 19 - .../server/0001-Origami-Server-Config.patch | 6 +- .../server/0005-Hopper-Optimizations.patch | 23 +- ...dd-option-to-disable-observer-clocks.patch | 4 +- ...tities-when-damage-event-is-cancelle.patch | 2 +- ...x-exp-drop-of-zombie-pigmen-MC-56653.patch | 4 +- .../api/0001-Purpur-config-files.patch | 4 +- .../api/0003-Allow-inventory-resizing.patch | 6 +- patches/Purpur/patches/api/0006-AFK-API.patch | 4 +- .../api/0007-Bring-back-server-name.patch | 8 +- .../patches/api/0010-Lagging-threshold.patch | 8 +- .../api/0011-ItemFactory-getMonsterEgg.patch | 6 +- .../api/0015-Player-invulnerabilities.patch | 4 +- .../0017-ItemStack-convenience-methods.patch | 10 +- .../Purpur/patches/api/0020-Ridables.patch | 4 +- ...oc-warnings-missing-param-and-return.patch | 62 +- ...-Add-unsafe-Entity-serialization-API.patch | 8 +- .../Purpur/patches/server/0001-Rebrand.patch | 12 +- .../server/0002-Purpur-config-files.patch | 20 +- .../server/0004-Add-component-util.patch | 44 -- ...0004-Barrels-and-enderchests-6-rows.patch} | 16 +- ...t-API.patch => 0005-Advancement-API.patch} | 0 ...7-Llama-API.patch => 0006-Llama-API.patch} | 4 +- ...{0008-AFK-API.patch => 0007-AFK-API.patch} | 26 +- ...atch => 0008-Bring-back-server-name.patch} | 8 +- ...> 0009-Configurable-server-mod-name.patch} | 4 +- ... 0010-LivingEntity-safeFallDistance.patch} | 6 +- ...old.patch => 0011-Lagging-threshold.patch} | 10 +- ...h => 0012-ItemFactory-getMonsterEgg.patch} | 4 +- ...13-PlayerSetSpawnerTypeWithEggEvent.patch} | 6 +- ...ch => 0014-EMC-MonsterEggSpawnEvent.patch} | 9 +- ...ch => 0015-Player-invulnerabilities.patch} | 24 +- ...7-Anvil-API.patch => 0016-Anvil-API.patch} | 0 ...7-Configurable-villager-brain-ticks.patch} | 8 +- ...0018-Alternative-Keepalive-Handling.patch} | 8 +- ...s.patch => 0019-Silk-touch-spawners.patch} | 49 +- ...72-Fix-Add-turtle-egg-block-options.patch} | 2 +- ...-vanilla-command-permission-handler.patch} | 0 ...settings-suppressing-pointless-logs.patch} | 0 ...> 0023-Disable-outdated-build-check.patch} | 0 ...gs.patch => 0024-Giants-AI-settings.patch} | 4 +- ...tch => 0025-Illusioners-AI-settings.patch} | 0 ...> 0026-Zombie-horse-naturally-spawn.patch} | 0 ...027-Charged-creeper-naturally-spawn.patch} | 4 +- ...it-naturally-spawn-toast-and-killer.patch} | 0 ...er-showing-in-ping-before-server-fu.patch} | 2 +- ...patch => 0030-Make-Iron-Golems-Swim.patch} | 0 ...31-Dont-send-useless-entity-packets.patch} | 2 +- ...atch => 0032-Tulips-change-fox-type.patch} | 0 ...patch => 0033-Breedable-Polar-Bears.patch} | 0 ...atch => 0034-Chickens-can-retaliate.patch} | 0 ...ption-to-set-armorstand-step-height.patch} | 0 ....patch => 0036-Cat-spawning-options.patch} | 0 ...n-black-cats-spawning-in-swamp-huts.patch} | 0 ...ms.patch => 0038-Cows-eat-mushrooms.patch} | 6 +- ...ow-rotation-when-shearing-mooshroom.patch} | 4 +- ...patch => 0040-Pigs-give-saddle-back.patch} | 2 +- ...1-Snowman-drop-and-put-back-pumpkin.patch} | 6 +- ...2-Ender-dragon-always-drop-full-exp.patch} | 2 +- ... 0043-Signs-editable-on-right-click.patch} | 4 +- ...tch => 0044-Signs-allow-color-codes.patch} | 37 +- ...oisten-from-water-directly-under-it.patch} | 0 ...atch => 0046-Controllable-Minecarts.patch} | 8 +- ...ble-loot-drops-on-death-by-cramming.patch} | 2 +- ...48-Players-should-not-cram-to-death.patch} | 4 +- ...tion-to-toggle-milk-curing-bad-omen.patch} | 0 ...ould-check-if-entity-can-use-portal.patch} | 4 +- ...051-Fix-the-dead-lagging-the-server.patch} | 6 +- ...Skip-events-if-there-s-no-listeners.patch} | 0 ... 0053-Add-permission-for-F3-N-debug.patch} | 4 +- ...skeleton-takes-wither-damage-option.patch} | 0 ...ch => 0055-Configurable-TPS-Catchup.patch} | 4 +- ...ow-loyalty-on-tridents-to-work-in-t.patch} | 0 ...erman-and-creeper-griefing-controls.patch} | 4 +- ...p-loot-bypass-mob-griefing-gamerule.patch} | 0 ...ng-can-bypass-mob-griefing-gamerule.patch} | 0 ...060-Villagers-follow-emerald-blocks.patch} | 12 +- ...ch => 0061-Allow-leashing-villagers.patch} | 8 +- ...rable-search-radius-for-villagers-t.patch} | 4 +- ...tch => 0063-Implement-infinite-lava.patch} | 6 +- ...4-Make-lava-flow-speed-configurable.patch} | 0 ...dd-player-death-exp-control-options.patch} | 6 +- ...=> 0066-Add-canSaveToDisk-to-Entity.patch} | 4 +- ...067-Configurable-void-damage-height.patch} | 4 +- ...spenser-curse-of-binding-protection.patch} | 0 ...-for-boats-to-eject-players-on-land.patch} | 2 +- ... 0070-Add-obfhelpers-for-plugin-use.patch} | 0 ...-mends-most-damages-equipment-first.patch} | 4 +- ...072-Add-5-second-tps-average-in-tps.patch} | 12 +- ...h => 0073-Implement-elytra-settings.patch} | 2 +- ...atch => 0074-Item-entity-immunities.patch} | 18 +- ...mand.patch => 0075-Add-ping-command.patch} | 4 +- ...=> 0076-Configurable-jockey-options.patch} | 12 +- ...d-to-crystals-and-crystals-shoot-ph.patch} | 4 +- ...> 0078-Add-phantom-spawning-options.patch} | 0 ...079-Implement-bed-explosion-options.patch} | 0 ...nt-respawn-anchor-explosion-options.patch} | 0 ...Add-allow-water-in-end-world-option.patch} | 6 +- ... => 0082-Allow-color-codes-in-books.patch} | 8 +- ...espan.patch => 0083-Entity-lifespan.patch} | 4 +- ...eport-to-spawn-if-outside-world-bor.patch} | 6 +- ...ty.patch => 0085-Squid-EAR-immunity.patch} | 4 +- ...=> 0086-Configurable-end-spike-seed.patch} | 0 ...h => 0087-Configurable-dungeon-seed.patch} | 0 ...atch => 0088-Phantoms-burn-in-light.patch} | 0 ...0089-Configurable-villager-breeding.patch} | 4 +- ... 0090-Redstone-deactivates-spawners.patch} | 0 ...ch => 0091-Totems-work-in-inventory.patch} | 2 +- ...tch => 0092-Populator-seed-controls.patch} | 0 ...-Add-vindicator-johnny-spawn-chance.patch} | 0 .../0093-Fix-death-message-colors.patch | 36 - ...n-to-disable-mushroom-block-updates.patch} | 0 ...s-vanilla-scoreboard-colors-patch-to.patch | 37 - ...0095-Dispensers-place-anvils-option.patch} | 2 +- ...rs.patch => 0096-Allow-anvil-colors.patch} | 38 +- ...atch => 0097-Add-no-tick-block-list.patch} | 0 ...-disable-dolphin-treasure-searching.patch} | 0 ...patch => 0099-Short-enderman-height.patch} | 2 +- ...top-squids-floating-on-top-of-water.patch} | 4 +- ...104-Ridables.patch => 0101-Ridables.patch} | 196 +++--- ...-height-for-nether-surface-builders.patch} | 0 ...ng-obsidian-valid-for-portal-frames.patch} | 2 +- ...ities-can-use-portals-configuration.patch} | 6 +- ...105-LivingEntity-broadcastItemBreak.patch} | 0 ...tomizable-wither-health-and-healing.patch} | 6 +- ...gling-special-MobSpawners-per-world.patch} | 0 ...patch => 0108-Raid-cooldown-setting.patch} | 0 ...-config-options-per-projectile-type.patch} | 16 +- ...able-zombie-aggressiveness-towards-.patch} | 4 +- ...ent-TileEntity-Lore-and-DisplayName.patch} | 12 +- ...-to-recipe-s-ExactChoice-ingredient.patch} | 0 ...y.patch => 0113-Flying-squids-Oh-my.patch} | 0 ...color-code-support-for-console-loggi.patch | 80 --- ...patch => 0114-Infinity-bow-settings.patch} | 0 ...ge.patch => 0115-Stonecutter-damage.patch} | 0 ...=> 0116-Configurable-daylight-cycle.patch} | 0 ...e-and-mending-enchantments-together.patch} | 2 +- ...patch => 0118-Infinite-fuel-furnace.patch} | 6 +- ...ws-should-not-reset-despawn-counter.patch} | 0 ...0-Add-tablist-suffix-option-for-afk.patch} | 6 +- ...e-add-farmland-mechanics-from-Alpha.patch} | 0 ...ustable-breeding-cooldown-to-config.patch} | 6 +- ...-entity-breeding-times-configurable.patch} | 66 +- ...es-from-item-forms-of-entities-to-e.patch} | 4 +- ...when-using-a-Name-Tag-on-an-Armor-S.patch} | 20 +- ...ting-and-weeping-vines-growth-rates.patch} | 2 +- ...twisting-vines-configurable-max-gro.patch} | 2 +- ...lowing-Endermen-to-despawn-even-whi.patch} | 2 +- ...check-to-EntityDamagedByEntityEvent.patch} | 12 +- ...30-Add-configurable-snowball-damage.patch} | 2 +- ...reak-door-minimum-difficulty-option.patch} | 6 +- ...mand.patch => 0132-Add-demo-command.patch} | 2 +- ...d-API.patch => 0133-Left-handed-API.patch} | 0 ...i-Fix-ProtocolLib-issues-on-Java-15.patch} | 2 +- ...5-Changeable-Mob-Left-Handed-Chance.patch} | 2 +- ...=> 0136-Add-boat-fall-damage-config.patch} | 6 +- ...disable-saving-projectiles-to-disk-.patch} | 4 +- ...0138-Snow-Golem-rate-of-fire-config.patch} | 6 +- ...-option-for-Piglins-guarding-chests.patch} | 2 +- ...-Configurable-disable-give-dropping.patch} | 2 +- ...climbing-should-not-bypass-cramming.patch} | 4 +- ... => 0142-Lobotomize-stuck-villagers.patch} | 20 +- ...illager-Clerics-to-farm-Nether-Wart.patch} | 22 +- ...ied-Piglin-death-always-counting-as.patch} | 4 +- ...-out-and-optimise-player-list-ticks.patch} | 10 +- ...le-chance-for-wolves-to-spawn-rabid.patch} | 6 +- ...figurable-default-wolf-collar-color.patch} | 4 +- ...Configurable-entity-base-attributes.patch} | 88 +-- ...tch => 0149-Phantom-flames-on-swoop.patch} | 2 +- ...-to-open-even-with-a-solid-block-on.patch} | 2 +- ...SBar.patch => 0151-Implement-TPSBar.patch} | 12 +- ...h => 0152-Striders-give-saddle-back.patch} | 2 +- ...tch => 0153-PlayerBookTooLargeEvent.patch} | 8 +- ...herite-armor-grants-fire-resistance.patch} | 6 +- ...155-Fix-rotating-UP-DOWN-CW-and-CCW.patch} | 0 ...efing-bypass-to-everything-affected.patch} | 34 +- ...llow-Note-Block-sounds-when-blocked.patch} | 2 +- ...158-Add-EntityTeleportHinderedEvent.patch} | 22 +- ... => 0159-Add-StructureGenerateEvent.patch} | 0 ... => 0160-Farmland-trampling-changes.patch} | 2 +- ...-Movement-options-for-armour-stands.patch} | 6 +- ....patch => 0162-Fix-stuck-in-portals.patch} | 10 +- ...erEditBookEvent-not-saving-new-book.patch} | 4 +- ...to-use-infinity-bows-without-arrows.patch} | 2 +- ...ggle-for-water-sensitive-mob-damage.patch} | 8 +- ...6-Config-to-always-tame-in-Creative.patch} | 4 +- ... 0167-End-crystal-explosion-options.patch} | 4 +- ...Add-unsafe-Entity-serialization-API.patch} | 16 +- ...169-Add-ghast-allow-griefing-option.patch} | 2 +- ...ither-Ender-Dragon-can-ride-vehicles.patch | 79 +++ .../server/0171-Dont-run-with-scissors.patch | 45 ++ .../patches/server/0172-One-Punch-Man.patch | 66 ++ ...0173-Add-config-for-snow-on-blue-ice.patch | 46 ++ .../api/0001-Tuinity-POM-Changes.patch | 2 +- .../patches/api/0002-Tuinity-config.patch | 4 +- .../patches/server/0002-Brand-changes.patch | 8 +- .../patches/server/0004-Util-patch.patch | 24 +- .../server/0005-Tuinity-Server-Config.patch | 16 +- ...7-Multi-Threaded-ticking-CraftBukkit.patch | 6 +- .../server/0008-Add-soft-async-catcher.patch | 20 +- .../server/0009-Delay-chunk-unloads.patch | 4 +- .../0011-Lag-compensate-block-breaking.patch | 20 +- .../server/0013-Per-World-Spawn-Limits.patch | 4 +- ...l-more-information-in-watchdog-dumps.patch | 129 ++-- .../0015-Execute-chunk-tasks-mid-tick.patch | 18 +- ...-use-NORMAL-priority-rather-than-LOW.patch | 8 +- ...trolled-flushing-for-network-manager.patch | 2 +- ...0-Make-CallbackExecutor-strict-again.patch | 4 +- ...imise-entity-hard-collision-checking.patch | 2 +- ...single-and-multi-AABB-VoxelShapes-an.patch | 12 +- ...llocation-rate-from-crammed-entities.patch | 2 +- ...ticking-chunk-map-for-entity-tracker.patch | 4 +- ...event-moving-into-unloaded-chunk-che.patch | 6 +- ...-to-not-load-chunks-when-crossing-wo.patch | 6 +- ...t-Async-retaining-chunks-for-long-pe.patch | 6 +- ...ework-PlayerChunk-main-thread-checks.patch | 4 +- ...on-checking-in-player-move-packet-ha.patch | 18 +- ...locking-from-state-access-in-UserCac.patch | 4 +- ...ket-level-changes-while-unloading-pl.patch | 10 +- .../0045-Add-packet-limiter-config.patch | 2 +- .../0046-Optimise-closest-entity-lookup.patch | 12 +- .../0047-Optimise-nearby-player-lookups.patch | 12 +- .../0048-Remove-streams-for-villager-AI.patch | 119 +--- ...tives-for-encryption-and-compression.patch | 8 +- ...52-Optimise-non-flush-packet-sending.patch | 2 +- ...ayerchunkmap-instance-in-light-threa.patch | 4 +- ...ot-load-chunks-during-a-crash-report.patch | 4 +- ...ove-abnormal-server-shutdown-process.patch | 8 +- ...py-passenger-list-in-enderTeleportTo.patch | 2 +- .../patches/server/0057-Revert-MC-4-fix.patch | 4 +- ...cancellation-of-projectile-hit-event.patch | 8 +- .../0061-Rewrite-the-light-engine.patch | 23 +- .../0062-Optimise-WorldServer-notify.patch | 4 +- .../0063-Actually-unload-POI-data.patch | 10 +- ...-packets-for-hard-colliding-entities.patch | 2 +- ...chunks-refusing-to-unload-at-low-TPS.patch | 4 +- ...0066-Fix-incorrect-isRealPlayer-init.patch | 8 +- ...67-Do-not-run-raytrace-logic-for-AIR.patch | 22 + ...cker-use-highest-range-of-passengers.patch | 50 ++ patches/api/0001-Modify-POM.patch | 2 +- .../0002-Yatopia-Config-Redirect-Config.patch | 4 +- .../api/0003-Add-GameProfileLookupEvent.patch | 10 +- patches/api/0004-Add-last-tick-time-API.patch | 8 +- ...005-Add-NBT-API-as-a-first-class-lib.patch | 14 +- .../api/0008-Suspected-plugins-report.patch | 4 +- patches/server/0001-Modify-POM.patch | 15 +- patches/server/0002-Brandings.patch | 18 +- patches/server/0003-Utilities.patch | 4 +- .../0004-Add-GameProfileLookupEvent.patch | 4 +- .../server/0005-Add-last-tick-time-API.patch | 10 +- .../server/0006-Yatopia-configuration.patch | 20 +- ...7-Per-entity-type-collision-settings.patch | 8 +- ...009-Add-NBT-API-as-a-first-class-lib.patch | 4 +- .../server/0010-Modify-default-configs.patch | 4 +- patches/server/0013-lithium-enum_values.patch | 4 +- .../server/0016-Item-stuck-sleep-config.patch | 4 +- .../0017-Option-for-simpler-Villagers.patch | 20 +- ...ize-furnance-fuel-and-recipe-lookups.patch | 6 +- patches/server/0021-Redirect-Configs.patch | 6 +- .../0023-Fix-lead-fall-dmg-config.patch | 4 +- .../0026-Add-timings-for-Pathfinder.patch | 2 +- ...op-wasting-resources-on-JsonList-get.patch | 14 +- ...-Fix-LightEngineThreaded-memory-leak.patch | 2 +- ...Respect-PlayerKickEvent-leaveMessage.patch | 65 -- ...0033-Shutdown-Bootstrap-thread-pool.patch} | 0 ...rs.patch => 0034-Optimize-Villagers.patch} | 8 +- ...t-command-for-multiple-additions-re.patch} | 12 +- ...tch => 0036-PlayerAttackEntityEvent.patch} | 4 +- ...-Ensure-pools-create-daemon-threads.patch} | 4 +- ... => 0038-Add-IntelliJ-IDEA-runnable.patch} | 0 ...ndsException-when-sending-too-many-.patch} | 0 ...mand.patch => 0040-Add-nspt-command.patch} | 8 +- ... => 0041-Configurable-flight-checks.patch} | 6 +- ...e-recipe-lookups-in-CraftingManager.patch} | 2 +- ...> 0043-Optimize-advancement-loading.patch} | 0 ...044-lithium-PerlinNoiseSamplerMixin.patch} | 0 ...lithium-VoronoiBiomeAccessTypeMixin.patch} | 0 ...46-lithium-NoiseChunkGeneratorMixin.patch} | 0 ... => 0047-lithium-reduce-allocations.patch} | 8 +- ... => 0048-Smarter-statistics-ticking.patch} | 4 +- ...049-Configurable-criterion-triggers.patch} | 6 +- ...0050-Configurable-BlockPhysicsEvent.patch} | 4 +- ...patch => 0051-Custom-Locale-Support.patch} | 0 ...> 0052-Configurable-movement-checks.patch} | 10 +- ...-Configurable-enchanting-table-tick.patch} | 0 ... => 0054-Optimised-hallowen-checker.patch} | 12 +- ...name-connecting-with-no-texture-bein.patch | 27 - ...h => 0055-Smol-entity-optimisations.patch} | 6 +- ...d-config-for-logging-login-location.patch} | 4 +- ...57-Preload-ProtocolLib-EnumWrappers.patch} | 4 +- ...8-lithium-cache-chunk-gen-sea-level.patch} | 0 ...t-cache.patch => 0059-New-nbt-cache.patch} | 4 +- ...ch => 0060-Suspected-plugins-report.patch} | 14 +- upstream/Airplane | 2 +- upstream/Akarin | 2 +- upstream/Empirecraft | 2 +- upstream/Origami | 2 +- upstream/Purpur | 2 +- upstream/Tuinity | 2 +- upstreamCommits/Airplane | 2 +- upstreamCommits/Akarin | 2 +- upstreamCommits/Empirecraft | 2 +- upstreamCommits/Origami | 2 +- upstreamCommits/Purpur | 2 +- upstreamCommits/Tuinity | 2 +- upstreamConfig/0001-Tuinity.properties | 2 +- upstreamConfig/0002-Purpur.properties | 2 +- upstreamConfig/0004-Akarin.properties | 2 +- upstreamConfig/0005-Empirecraft.properties | 2 +- 327 files changed, 2839 insertions(+), 1576 deletions(-) create mode 100644 buildSrc/src/main/kotlin/transformer/ModifiedLog4j2PluginsCacheFileTransformer.kt create mode 100644 patches/Airplane/patches/api/0001-Expose-findClass-for-profiler.patch create mode 100644 patches/Airplane/patches/server/0016-Skip-POI-finding-if-stuck-in-vehicle.patch create mode 100644 patches/Airplane/patches/server/0017-Airplane-Profiler.patch create mode 100644 patches/Airplane/patches/server/0018-Multithreaded-entity-tracking.patch delete mode 100644 patches/Empirecraft/patches/server/0004-Prevent-grindstones-from-overstacking-items.patch delete mode 100644 patches/Purpur/patches/server/0004-Add-component-util.patch rename patches/Purpur/patches/server/{0005-Barrels-and-enderchests-6-rows.patch => 0004-Barrels-and-enderchests-6-rows.patch} (93%) rename patches/Purpur/patches/server/{0006-Advancement-API.patch => 0005-Advancement-API.patch} (100%) rename patches/Purpur/patches/server/{0007-Llama-API.patch => 0006-Llama-API.patch} (97%) rename patches/Purpur/patches/server/{0008-AFK-API.patch => 0007-AFK-API.patch} (93%) rename patches/Purpur/patches/server/{0009-Bring-back-server-name.patch => 0008-Bring-back-server-name.patch} (82%) rename patches/Purpur/patches/server/{0010-Configurable-server-mod-name.patch => 0009-Configurable-server-mod-name.patch} (91%) rename patches/Purpur/patches/server/{0011-LivingEntity-safeFallDistance.patch => 0010-LivingEntity-safeFallDistance.patch} (93%) rename patches/Purpur/patches/server/{0012-Lagging-threshold.patch => 0011-Lagging-threshold.patch} (86%) rename patches/Purpur/patches/server/{0013-ItemFactory-getMonsterEgg.patch => 0012-ItemFactory-getMonsterEgg.patch} (92%) rename patches/Purpur/patches/server/{0014-PlayerSetSpawnerTypeWithEggEvent.patch => 0013-PlayerSetSpawnerTypeWithEggEvent.patch} (94%) rename patches/Purpur/patches/server/{0015-EMC-MonsterEggSpawnEvent.patch => 0014-EMC-MonsterEggSpawnEvent.patch} (90%) rename patches/Purpur/patches/server/{0016-Player-invulnerabilities.patch => 0015-Player-invulnerabilities.patch} (86%) rename patches/Purpur/patches/server/{0017-Anvil-API.patch => 0016-Anvil-API.patch} (100%) rename patches/Purpur/patches/server/{0018-Configurable-villager-brain-ticks.patch => 0017-Configurable-villager-brain-ticks.patch} (91%) rename patches/Purpur/patches/server/{0019-Alternative-Keepalive-Handling.patch => 0018-Alternative-Keepalive-Handling.patch} (94%) rename patches/Purpur/patches/server/{0020-Silk-touch-spawners.patch => 0019-Silk-touch-spawners.patch} (75%) rename patches/Purpur/patches/server/{0021-MC-168772-Fix-Add-turtle-egg-block-options.patch => 0020-MC-168772-Fix-Add-turtle-egg-block-options.patch} (96%) rename patches/Purpur/patches/server/{0022-Fix-vanilla-command-permission-handler.patch => 0021-Fix-vanilla-command-permission-handler.patch} (100%) rename patches/Purpur/patches/server/{0023-Logger-settings-suppressing-pointless-logs.patch => 0022-Logger-settings-suppressing-pointless-logs.patch} (100%) rename patches/Purpur/patches/server/{0024-Disable-outdated-build-check.patch => 0023-Disable-outdated-build-check.patch} (100%) rename patches/Purpur/patches/server/{0025-Giants-AI-settings.patch => 0024-Giants-AI-settings.patch} (98%) rename patches/Purpur/patches/server/{0026-Illusioners-AI-settings.patch => 0025-Illusioners-AI-settings.patch} (100%) rename patches/Purpur/patches/server/{0027-Zombie-horse-naturally-spawn.patch => 0026-Zombie-horse-naturally-spawn.patch} (100%) rename patches/Purpur/patches/server/{0028-Charged-creeper-naturally-spawn.patch => 0027-Charged-creeper-naturally-spawn.patch} (92%) rename patches/Purpur/patches/server/{0029-Rabbit-naturally-spawn-toast-and-killer.patch => 0028-Rabbit-naturally-spawn-toast-and-killer.patch} (100%) rename patches/Purpur/patches/server/{0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch => 0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch} (91%) rename patches/Purpur/patches/server/{0031-Make-Iron-Golems-Swim.patch => 0030-Make-Iron-Golems-Swim.patch} (100%) rename patches/Purpur/patches/server/{0032-Dont-send-useless-entity-packets.patch => 0031-Dont-send-useless-entity-packets.patch} (97%) rename patches/Purpur/patches/server/{0033-Tulips-change-fox-type.patch => 0032-Tulips-change-fox-type.patch} (100%) rename patches/Purpur/patches/server/{0034-Breedable-Polar-Bears.patch => 0033-Breedable-Polar-Bears.patch} (100%) rename patches/Purpur/patches/server/{0035-Chickens-can-retaliate.patch => 0034-Chickens-can-retaliate.patch} (100%) rename patches/Purpur/patches/server/{0036-Add-option-to-set-armorstand-step-height.patch => 0035-Add-option-to-set-armorstand-step-height.patch} (100%) rename patches/Purpur/patches/server/{0037-Cat-spawning-options.patch => 0036-Cat-spawning-options.patch} (100%) rename patches/Purpur/patches/server/{0038-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch => 0037-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch} (100%) rename patches/Purpur/patches/server/{0039-Cows-eat-mushrooms.patch => 0038-Cows-eat-mushrooms.patch} (96%) rename patches/Purpur/patches/server/{0040-Fix-cow-rotation-when-shearing-mooshroom.patch => 0039-Fix-cow-rotation-when-shearing-mooshroom.patch} (88%) rename patches/Purpur/patches/server/{0041-Pigs-give-saddle-back.patch => 0040-Pigs-give-saddle-back.patch} (95%) rename patches/Purpur/patches/server/{0042-Snowman-drop-and-put-back-pumpkin.patch => 0041-Snowman-drop-and-put-back-pumpkin.patch} (91%) rename patches/Purpur/patches/server/{0043-Ender-dragon-always-drop-full-exp.patch => 0042-Ender-dragon-always-drop-full-exp.patch} (95%) rename patches/Purpur/patches/server/{0044-Signs-editable-on-right-click.patch => 0043-Signs-editable-on-right-click.patch} (94%) rename patches/Purpur/patches/server/{0045-Signs-allow-color-codes.patch => 0044-Signs-allow-color-codes.patch} (57%) rename patches/Purpur/patches/server/{0046-Allow-soil-to-moisten-from-water-directly-under-it.patch => 0045-Allow-soil-to-moisten-from-water-directly-under-it.patch} (100%) rename patches/Purpur/patches/server/{0047-Controllable-Minecarts.patch => 0046-Controllable-Minecarts.patch} (96%) rename patches/Purpur/patches/server/{0048-Disable-loot-drops-on-death-by-cramming.patch => 0047-Disable-loot-drops-on-death-by-cramming.patch} (95%) rename patches/Purpur/patches/server/{0049-Players-should-not-cram-to-death.patch => 0048-Players-should-not-cram-to-death.patch} (85%) rename patches/Purpur/patches/server/{0050-Option-to-toggle-milk-curing-bad-omen.patch => 0049-Option-to-toggle-milk-curing-bad-omen.patch} (100%) rename patches/Purpur/patches/server/{0051-End-gateway-should-check-if-entity-can-use-portal.patch => 0050-End-gateway-should-check-if-entity-can-use-portal.patch} (85%) rename patches/Purpur/patches/server/{0052-Fix-the-dead-lagging-the-server.patch => 0051-Fix-the-dead-lagging-the-server.patch} (84%) rename patches/Purpur/patches/server/{0053-Skip-events-if-there-s-no-listeners.patch => 0052-Skip-events-if-there-s-no-listeners.patch} (100%) rename patches/Purpur/patches/server/{0054-Add-permission-for-F3-N-debug.patch => 0053-Add-permission-for-F3-N-debug.patch} (83%) rename patches/Purpur/patches/server/{0055-Add-wither-skeleton-takes-wither-damage-option.patch => 0054-Add-wither-skeleton-takes-wither-damage-option.patch} (100%) rename patches/Purpur/patches/server/{0056-Configurable-TPS-Catchup.patch => 0055-Configurable-TPS-Catchup.patch} (93%) rename patches/Purpur/patches/server/{0057-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch => 0056-Add-option-to-allow-loyalty-on-tridents-to-work-in-t.patch} (100%) rename patches/Purpur/patches/server/{0058-Add-enderman-and-creeper-griefing-controls.patch => 0057-Add-enderman-and-creeper-griefing-controls.patch} (96%) rename patches/Purpur/patches/server/{0059-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch => 0058-Entities-pick-up-loot-bypass-mob-griefing-gamerule.patch} (100%) rename patches/Purpur/patches/server/{0060-Villagers-farming-can-bypass-mob-griefing-gamerule.patch => 0059-Villagers-farming-can-bypass-mob-griefing-gamerule.patch} (100%) rename patches/Purpur/patches/server/{0061-Villagers-follow-emerald-blocks.patch => 0060-Villagers-follow-emerald-blocks.patch} (89%) rename patches/Purpur/patches/server/{0062-Allow-leashing-villagers.patch => 0061-Allow-leashing-villagers.patch} (93%) rename patches/Purpur/patches/server/{0063-Implement-configurable-search-radius-for-villagers-t.patch => 0062-Implement-configurable-search-radius-for-villagers-t.patch} (94%) rename patches/Purpur/patches/server/{0064-Implement-infinite-lava.patch => 0063-Implement-infinite-lava.patch} (93%) rename patches/Purpur/patches/server/{0065-Make-lava-flow-speed-configurable.patch => 0064-Make-lava-flow-speed-configurable.patch} (100%) rename patches/Purpur/patches/server/{0066-Add-player-death-exp-control-options.patch => 0065-Add-player-death-exp-control-options.patch} (92%) rename patches/Purpur/patches/server/{0067-Add-canSaveToDisk-to-Entity.patch => 0066-Add-canSaveToDisk-to-Entity.patch} (90%) rename patches/Purpur/patches/server/{0068-Configurable-void-damage-height.patch => 0067-Configurable-void-damage-height.patch} (93%) rename patches/Purpur/patches/server/{0069-Dispenser-curse-of-binding-protection.patch => 0068-Dispenser-curse-of-binding-protection.patch} (100%) rename patches/Purpur/patches/server/{0070-Add-option-for-boats-to-eject-players-on-land.patch => 0069-Add-option-for-boats-to-eject-players-on-land.patch} (95%) rename patches/Purpur/patches/server/{0071-Add-obfhelpers-for-plugin-use.patch => 0070-Add-obfhelpers-for-plugin-use.patch} (100%) rename patches/Purpur/patches/server/{0072-Mending-mends-most-damages-equipment-first.patch => 0071-Mending-mends-most-damages-equipment-first.patch} (97%) rename patches/Purpur/patches/server/{0073-Add-5-second-tps-average-in-tps.patch => 0072-Add-5-second-tps-average-in-tps.patch} (91%) rename patches/Purpur/patches/server/{0074-Implement-elytra-settings.patch => 0073-Implement-elytra-settings.patch} (98%) rename patches/Purpur/patches/server/{0075-Item-entity-immunities.patch => 0074-Item-entity-immunities.patch} (92%) rename patches/Purpur/patches/server/{0076-Add-ping-command.patch => 0075-Add-ping-command.patch} (97%) rename patches/Purpur/patches/server/{0077-Configurable-jockey-options.patch => 0076-Configurable-jockey-options.patch} (96%) rename patches/Purpur/patches/server/{0078-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch => 0077-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch} (98%) rename patches/Purpur/patches/server/{0079-Add-phantom-spawning-options.patch => 0078-Add-phantom-spawning-options.patch} (100%) rename patches/Purpur/patches/server/{0080-Implement-bed-explosion-options.patch => 0079-Implement-bed-explosion-options.patch} (100%) rename patches/Purpur/patches/server/{0081-Implement-respawn-anchor-explosion-options.patch => 0080-Implement-respawn-anchor-explosion-options.patch} (100%) rename patches/Purpur/patches/server/{0082-Add-allow-water-in-end-world-option.patch => 0081-Add-allow-water-in-end-world-option.patch} (96%) rename patches/Purpur/patches/server/{0083-Allow-color-codes-in-books.patch => 0082-Allow-color-codes-in-books.patch} (90%) rename patches/Purpur/patches/server/{0084-Entity-lifespan.patch => 0083-Entity-lifespan.patch} (97%) rename patches/Purpur/patches/server/{0085-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch => 0084-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch} (92%) rename patches/Purpur/patches/server/{0086-Squid-EAR-immunity.patch => 0085-Squid-EAR-immunity.patch} (91%) rename patches/Purpur/patches/server/{0087-Configurable-end-spike-seed.patch => 0086-Configurable-end-spike-seed.patch} (100%) rename patches/Purpur/patches/server/{0088-Configurable-dungeon-seed.patch => 0087-Configurable-dungeon-seed.patch} (100%) rename patches/Purpur/patches/server/{0089-Phantoms-burn-in-light.patch => 0088-Phantoms-burn-in-light.patch} (100%) rename patches/Purpur/patches/server/{0090-Configurable-villager-breeding.patch => 0089-Configurable-villager-breeding.patch} (93%) rename patches/Purpur/patches/server/{0091-Redstone-deactivates-spawners.patch => 0090-Redstone-deactivates-spawners.patch} (100%) rename patches/Purpur/patches/server/{0092-Totems-work-in-inventory.patch => 0091-Totems-work-in-inventory.patch} (96%) rename patches/Purpur/patches/server/{0095-Populator-seed-controls.patch => 0092-Populator-seed-controls.patch} (100%) rename patches/Purpur/patches/server/{0096-Add-vindicator-johnny-spawn-chance.patch => 0093-Add-vindicator-johnny-spawn-chance.patch} (100%) delete mode 100644 patches/Purpur/patches/server/0093-Fix-death-message-colors.patch rename patches/Purpur/patches/server/{0097-Add-option-to-disable-mushroom-block-updates.patch => 0094-Add-option-to-disable-mushroom-block-updates.patch} (100%) delete mode 100644 patches/Purpur/patches/server/0094-Duplicate-paper-s-vanilla-scoreboard-colors-patch-to.patch rename patches/Purpur/patches/server/{0098-Dispensers-place-anvils-option.patch => 0095-Dispensers-place-anvils-option.patch} (97%) rename patches/Purpur/patches/server/{0099-Allow-anvil-colors.patch => 0096-Allow-anvil-colors.patch} (55%) rename patches/Purpur/patches/server/{0100-Add-no-tick-block-list.patch => 0097-Add-no-tick-block-list.patch} (100%) rename patches/Purpur/patches/server/{0101-Add-option-to-disable-dolphin-treasure-searching.patch => 0098-Add-option-to-disable-dolphin-treasure-searching.patch} (100%) rename patches/Purpur/patches/server/{0102-Short-enderman-height.patch => 0099-Short-enderman-height.patch} (97%) rename patches/Purpur/patches/server/{0103-Stop-squids-floating-on-top-of-water.patch => 0100-Stop-squids-floating-on-top-of-water.patch} (94%) rename patches/Purpur/patches/server/{0104-Ridables.patch => 0101-Ridables.patch} (97%) rename patches/Purpur/patches/server/{0105-Use-configured-height-for-nether-surface-builders.patch => 0102-Use-configured-height-for-nether-surface-builders.patch} (100%) rename patches/Purpur/patches/server/{0106-Crying-obsidian-valid-for-portal-frames.patch => 0103-Crying-obsidian-valid-for-portal-frames.patch} (97%) rename patches/Purpur/patches/server/{0107-Entities-can-use-portals-configuration.patch => 0104-Entities-can-use-portals-configuration.patch} (92%) rename patches/Purpur/patches/server/{0108-LivingEntity-broadcastItemBreak.patch => 0105-LivingEntity-broadcastItemBreak.patch} (100%) rename patches/Purpur/patches/server/{0109-Customizable-wither-health-and-healing.patch => 0106-Customizable-wither-health-and-healing.patch} (94%) rename patches/Purpur/patches/server/{0110-Allow-toggling-special-MobSpawners-per-world.patch => 0107-Allow-toggling-special-MobSpawners-per-world.patch} (100%) rename patches/Purpur/patches/server/{0111-Raid-cooldown-setting.patch => 0108-Raid-cooldown-setting.patch} (100%) rename patches/Purpur/patches/server/{0112-Despawn-rate-config-options-per-projectile-type.patch => 0109-Despawn-rate-config-options-per-projectile-type.patch} (95%) rename patches/Purpur/patches/server/{0114-Add-option-to-disable-zombie-aggressiveness-towards-.patch => 0110-Add-option-to-disable-zombie-aggressiveness-towards-.patch} (97%) rename patches/Purpur/patches/server/{0115-Persistent-TileEntity-Lore-and-DisplayName.patch => 0111-Persistent-TileEntity-Lore-and-DisplayName.patch} (95%) rename patches/Purpur/patches/server/{0116-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch => 0112-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch} (100%) rename patches/Purpur/patches/server/{0117-Flying-squids-Oh-my.patch => 0113-Flying-squids-Oh-my.patch} (100%) delete mode 100644 patches/Purpur/patches/server/0113-PaperPR-Add-hex-color-code-support-for-console-loggi.patch rename patches/Purpur/patches/server/{0118-Infinity-bow-settings.patch => 0114-Infinity-bow-settings.patch} (100%) rename patches/Purpur/patches/server/{0119-Stonecutter-damage.patch => 0115-Stonecutter-damage.patch} (100%) rename patches/Purpur/patches/server/{0120-Configurable-daylight-cycle.patch => 0116-Configurable-daylight-cycle.patch} (100%) rename patches/Purpur/patches/server/{0121-Allow-infinite-and-mending-enchantments-together.patch => 0117-Allow-infinite-and-mending-enchantments-together.patch} (95%) rename patches/Purpur/patches/server/{0122-Infinite-fuel-furnace.patch => 0118-Infinite-fuel-furnace.patch} (92%) rename patches/Purpur/patches/server/{0123-Arrows-should-not-reset-despawn-counter.patch => 0119-Arrows-should-not-reset-despawn-counter.patch} (100%) rename patches/Purpur/patches/server/{0124-Add-tablist-suffix-option-for-afk.patch => 0120-Add-tablist-suffix-option-for-afk.patch} (90%) rename patches/Purpur/patches/server/{0125-Ability-to-re-add-farmland-mechanics-from-Alpha.patch => 0121-Ability-to-re-add-farmland-mechanics-from-Alpha.patch} (100%) rename patches/Purpur/patches/server/{0126-Add-adjustable-breeding-cooldown-to-config.patch => 0122-Add-adjustable-breeding-cooldown-to-config.patch} (97%) rename patches/Purpur/patches/server/{0127-Make-animal-breeding-times-configurable.patch => 0123-Make-entity-breeding-times-configurable.patch} (88%) rename patches/Purpur/patches/server/{0128-Apply-display-names-from-item-forms-of-entities-to-e.patch => 0124-Apply-display-names-from-item-forms-of-entities-to-e.patch} (98%) rename patches/Purpur/patches/server/{0129-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch => 0125-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch} (63%) rename patches/Purpur/patches/server/{0130-Add-twisting-and-weeping-vines-growth-rates.patch => 0126-Add-twisting-and-weeping-vines-growth-rates.patch} (97%) rename patches/Purpur/patches/server/{0131-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch => 0127-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch} (98%) rename patches/Purpur/patches/server/{0132-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch => 0128-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch} (95%) rename patches/Purpur/patches/server/{0133-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch => 0129-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch} (84%) rename patches/Purpur/patches/server/{0134-Add-configurable-snowball-damage.patch => 0130-Add-configurable-snowball-damage.patch} (95%) rename patches/Purpur/patches/server/{0135-Zombie-break-door-minimum-difficulty-option.patch => 0131-Zombie-break-door-minimum-difficulty-option.patch} (94%) rename patches/Purpur/patches/server/{0136-Add-demo-command.patch => 0132-Add-demo-command.patch} (98%) rename patches/Purpur/patches/server/{0137-Left-handed-API.patch => 0133-Left-handed-API.patch} (100%) rename patches/Purpur/patches/server/{0138-Origami-Fix-ProtocolLib-issues-on-Java-15.patch => 0134-Origami-Fix-ProtocolLib-issues-on-Java-15.patch} (97%) rename patches/Purpur/patches/server/{0139-Changeable-Mob-Left-Handed-Chance.patch => 0135-Changeable-Mob-Left-Handed-Chance.patch} (95%) rename patches/Purpur/patches/server/{0140-Add-boat-fall-damage-config.patch => 0136-Add-boat-fall-damage-config.patch} (92%) rename patches/Purpur/patches/server/{0141-Config-migration-disable-saving-projectiles-to-disk-.patch => 0137-Config-migration-disable-saving-projectiles-to-disk-.patch} (94%) rename patches/Purpur/patches/server/{0142-Snow-Golem-rate-of-fire-config.patch => 0138-Snow-Golem-rate-of-fire-config.patch} (92%) rename patches/Purpur/patches/server/{0143-PaperPR-Config-option-for-Piglins-guarding-chests.patch => 0139-PaperPR-Config-option-for-Piglins-guarding-chests.patch} (94%) rename patches/Purpur/patches/server/{0144-EMC-Configurable-disable-give-dropping.patch => 0140-EMC-Configurable-disable-give-dropping.patch} (95%) rename patches/Purpur/patches/server/{0145-Config-migration-climbing-should-not-bypass-cramming.patch => 0141-Config-migration-climbing-should-not-bypass-cramming.patch} (92%) rename patches/Purpur/patches/server/{0146-Lobotomize-stuck-villagers.patch => 0142-Lobotomize-stuck-villagers.patch} (87%) rename patches/Purpur/patches/server/{0147-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch => 0143-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch} (95%) rename patches/Purpur/patches/server/{0148-Toggle-for-Zombified-Piglin-death-always-counting-as.patch => 0144-Toggle-for-Zombified-Piglin-death-always-counting-as.patch} (95%) rename patches/Purpur/patches/server/{0149-Spread-out-and-optimise-player-list-ticks.patch => 0145-Spread-out-and-optimise-player-list-ticks.patch} (88%) rename patches/Purpur/patches/server/{0150-Configurable-chance-for-wolves-to-spawn-rabid.patch => 0146-Configurable-chance-for-wolves-to-spawn-rabid.patch} (98%) rename patches/Purpur/patches/server/{0151-Configurable-default-wolf-collar-color.patch => 0147-Configurable-default-wolf-collar-color.patch} (94%) rename patches/Purpur/patches/server/{0152-Configurable-entity-base-attributes.patch => 0148-Configurable-entity-base-attributes.patch} (97%) rename patches/Purpur/patches/server/{0153-Phantom-flames-on-swoop.patch => 0149-Phantom-flames-on-swoop.patch} (95%) rename patches/Purpur/patches/server/{0154-Option-for-chests-to-open-even-with-a-solid-block-on.patch => 0150-Option-for-chests-to-open-even-with-a-solid-block-on.patch} (94%) rename patches/Purpur/patches/server/{0155-Implement-TPSBar.patch => 0151-Implement-TPSBar.patch} (94%) rename patches/Purpur/patches/server/{0156-Striders-give-saddle-back.patch => 0152-Striders-give-saddle-back.patch} (96%) rename patches/Purpur/patches/server/{0157-PlayerBookTooLargeEvent.patch => 0153-PlayerBookTooLargeEvent.patch} (89%) rename patches/Purpur/patches/server/{0158-Full-netherite-armor-grants-fire-resistance.patch => 0154-Full-netherite-armor-grants-fire-resistance.patch} (93%) rename patches/Purpur/patches/server/{0159-Fix-rotating-UP-DOWN-CW-and-CCW.patch => 0155-Fix-rotating-UP-DOWN-CW-and-CCW.patch} (100%) rename patches/Purpur/patches/server/{0160-Add-mobGriefing-bypass-to-everything-affected.patch => 0156-Add-mobGriefing-bypass-to-everything-affected.patch} (96%) rename patches/Purpur/patches/server/{0161-Config-to-allow-Note-Block-sounds-when-blocked.patch => 0157-Config-to-allow-Note-Block-sounds-when-blocked.patch} (96%) rename patches/Purpur/patches/server/{0162-Add-EntityTeleportHinderedEvent.patch => 0158-Add-EntityTeleportHinderedEvent.patch} (91%) rename patches/Purpur/patches/server/{0163-Add-StructureGenerateEvent.patch => 0159-Add-StructureGenerateEvent.patch} (100%) rename patches/Purpur/patches/server/{0164-Farmland-trampling-changes.patch => 0160-Farmland-trampling-changes.patch} (96%) rename patches/Purpur/patches/server/{0165-Movement-options-for-armour-stands.patch => 0161-Movement-options-for-armour-stands.patch} (94%) rename patches/Purpur/patches/server/{0166-Fix-stuck-in-portals.patch => 0162-Fix-stuck-in-portals.patch} (85%) rename patches/Purpur/patches/server/{0167-Fix-PlayerEditBookEvent-not-saving-new-book.patch => 0163-Fix-PlayerEditBookEvent-not-saving-new-book.patch} (86%) rename patches/Purpur/patches/server/{0168-Config-to-use-infinity-bows-without-arrows.patch => 0164-Config-to-use-infinity-bows-without-arrows.patch} (96%) rename patches/Purpur/patches/server/{0169-Toggle-for-water-sensitive-mob-damage.patch => 0165-Toggle-for-water-sensitive-mob-damage.patch} (95%) rename patches/Purpur/patches/server/{0170-Config-to-always-tame-in-Creative.patch => 0166-Config-to-always-tame-in-Creative.patch} (96%) rename patches/Purpur/patches/server/{0171-End-crystal-explosion-options.patch => 0167-End-crystal-explosion-options.patch} (97%) rename patches/Purpur/patches/server/{0172-Add-unsafe-Entity-serialization-API.patch => 0168-Add-unsafe-Entity-serialization-API.patch} (92%) rename patches/Purpur/patches/server/{0173-Add-ghast-allow-griefing-option.patch => 0169-Add-ghast-allow-griefing-option.patch} (97%) create mode 100644 patches/Purpur/patches/server/0170-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch create mode 100644 patches/Purpur/patches/server/0171-Dont-run-with-scissors.patch create mode 100644 patches/Purpur/patches/server/0172-One-Punch-Man.patch create mode 100644 patches/Purpur/patches/server/0173-Add-config-for-snow-on-blue-ice.patch create mode 100644 patches/Tuinity/patches/server/0067-Do-not-run-raytrace-logic-for-AIR.patch create mode 100644 patches/Tuinity/patches/server/0068-Make-entity-tracker-use-highest-range-of-passengers.patch delete mode 100644 patches/server/0033-Respect-PlayerKickEvent-leaveMessage.patch rename patches/server/{0034-Shutdown-Bootstrap-thread-pool.patch => 0033-Shutdown-Bootstrap-thread-pool.patch} (100%) rename patches/server/{0035-Optimize-Villagers.patch => 0034-Optimize-Villagers.patch} (94%) rename patches/server/{0036-Optimize-whitelist-command-for-multiple-additions-re.patch => 0035-Optimize-whitelist-command-for-multiple-additions-re.patch} (95%) rename patches/server/{0037-PlayerAttackEntityEvent.patch => 0036-PlayerAttackEntityEvent.patch} (94%) rename patches/server/{0038-Ensure-pools-create-daemon-threads.patch => 0037-Ensure-pools-create-daemon-threads.patch} (94%) rename patches/server/{0039-Add-IntelliJ-IDEA-runnable.patch => 0038-Add-IntelliJ-IDEA-runnable.patch} (100%) rename patches/server/{0040-Fix-IndexOutOfBoundsException-when-sending-too-many-.patch => 0039-Fix-IndexOutOfBoundsException-when-sending-too-many-.patch} (100%) rename patches/server/{0041-Add-nspt-command.patch => 0040-Add-nspt-command.patch} (95%) rename patches/server/{0042-Configurable-flight-checks.patch => 0041-Configurable-flight-checks.patch} (91%) rename patches/server/{0043-Heavily-optimize-recipe-lookups-in-CraftingManager.patch => 0042-Heavily-optimize-recipe-lookups-in-CraftingManager.patch} (98%) rename patches/server/{0044-Optimize-advancement-loading.patch => 0043-Optimize-advancement-loading.patch} (100%) rename patches/server/{0045-lithium-PerlinNoiseSamplerMixin.patch => 0044-lithium-PerlinNoiseSamplerMixin.patch} (100%) rename patches/server/{0046-lithium-VoronoiBiomeAccessTypeMixin.patch => 0045-lithium-VoronoiBiomeAccessTypeMixin.patch} (100%) rename patches/server/{0047-lithium-NoiseChunkGeneratorMixin.patch => 0046-lithium-NoiseChunkGeneratorMixin.patch} (100%) rename patches/server/{0048-lithium-reduce-allocations.patch => 0047-lithium-reduce-allocations.patch} (87%) rename patches/server/{0049-Smarter-statistics-ticking.patch => 0048-Smarter-statistics-ticking.patch} (94%) rename patches/server/{0050-Configurable-criterion-triggers.patch => 0049-Configurable-criterion-triggers.patch} (91%) rename patches/server/{0051-Configurable-BlockPhysicsEvent.patch => 0050-Configurable-BlockPhysicsEvent.patch} (94%) rename patches/server/{0052-Custom-Locale-Support.patch => 0051-Custom-Locale-Support.patch} (100%) rename patches/server/{0053-Configurable-movement-checks.patch => 0052-Configurable-movement-checks.patch} (93%) rename patches/server/{0054-Configurable-enchanting-table-tick.patch => 0053-Configurable-enchanting-table-tick.patch} (100%) rename patches/server/{0056-Optimised-hallowen-checker.patch => 0054-Optimised-hallowen-checker.patch} (92%) delete mode 100644 patches/server/0055-PaperPR-Fix-username-connecting-with-no-texture-bein.patch rename patches/server/{0057-Smol-entity-optimisations.patch => 0055-Smol-entity-optimisations.patch} (82%) rename patches/server/{0058-add-config-for-logging-login-location.patch => 0056-add-config-for-logging-login-location.patch} (93%) rename patches/server/{0059-Preload-ProtocolLib-EnumWrappers.patch => 0057-Preload-ProtocolLib-EnumWrappers.patch} (95%) rename patches/server/{0060-lithium-cache-chunk-gen-sea-level.patch => 0058-lithium-cache-chunk-gen-sea-level.patch} (100%) rename patches/server/{0061-New-nbt-cache.patch => 0059-New-nbt-cache.patch} (97%) rename patches/server/{0062-Suspected-plugins-report.patch => 0060-Suspected-plugins-report.patch} (96%) diff --git a/.gitmodules b/.gitmodules index 6b2b451b..8f3d00b5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -20,7 +20,7 @@ [submodule "upstream/Akarin"] path = upstream/Akarin url = https://github.com/Akarin-project/Akarin.git - branch = ver/1.16.4 + branch = ver/1.16.5 [submodule "upstream/Empirecraft"] path = upstream/Empirecraft diff --git a/PATCHES.md b/PATCHES.md index 1c4987d5..73c8fa96 100644 --- a/PATCHES.md +++ b/PATCHES.md @@ -29,8 +29,8 @@ This is an overview over all patches that are currently used. | server | Add allow water in end world option | William Blake Galbreath | | | server | Add boat fall damage config | BillyGalbreath | | | server | Add canSaveToDisk to Entity | William Blake Galbreath | | -| server | Add component util | William Blake Galbreath | | | server | Add config for allowing Endermen to despawn even while | jmp | | +| server | Add config for snow on blue ice | BillyGalbreath | | | server | Add configurable snowball damage | BillyGalbreath | | | server | Add critical hit check to EntityDamagedByEntityEvent | BillyGalbreath | | | api | Add critical hit check to EntityDamagedByEntityEvent | BillyGalbreath | | @@ -71,6 +71,7 @@ This is an overview over all patches that are currently used. | api | Advancement API | William Blake Galbreath | | | server | Airplane Configuration | Paul Sauve | | | server | Airplane MC Dev Fixes | Paul Sauve | | +| server | Airplane Profiler | Paul Sauve | | | server | Allow Entities to be removed from a world while ticking | Spottedleaf | | | server | Allow anvil colors | William Blake Galbreath | | | server | Allow color codes in books | William Blake Galbreath | | @@ -107,6 +108,7 @@ This is an overview over all patches that are currently used. | server | Config to allow Note Block sounds when blocked | Encode42 | | | server | Config to always tame in Creative | Encode42 | | | server | Config to use infinity bows without arrows | Encode42 | | +| server | Configs for if Wither/Ender Dragon can ride vehicles | jmp | | | server | Configurable BlockPhysicsEvent | Mykyta Komarnytskyy | | | server | Configurable TPS Catchup | William Blake Galbreath | | | server | Configurable chance for wolves to spawn rabid | Encode42 | | @@ -146,14 +148,15 @@ This is an overview over all patches that are currently used. | server | Do not allow ticket level changes while unloading | Spottedleaf | | | server | Do not load chunks during a crash report | Spottedleaf | | | server | Do not retain playerchunkmap instance in light thread factory | Spottedleaf | | +| server | Do not run raytrace logic for AIR | Spottedleaf | | | server | Don't allow StructureLocateEvent to change worlds | Spottedleaf | | | server | Don't get entity equipment if not needed | Paul Sauve | | | server | Don't load chunk with seed based feature search | Phoenix616 | | | server | Don't lookup fluid state when raytracing | Spottedleaf | | | server | Don't trigger Lootable Refresh for non player interaction | Aikar | | | server | Don't wake up entities when damage event is cancelled | Phoenix616 | | +| server | Dont run with scissors! | JustDoom | | | server | Dont send useless entity packets | William Blake Galbreath | | -| server | Duplicate paper's vanilla scoreboard colors patch to sync | William Blake Galbreath | | | server | Dynamic activation range | Paul Sauve | | | server | EMC - Configurable disable give dropping | Aikar | | | server | EMC - MonsterEggSpawnEvent | Aikar | | @@ -167,6 +170,7 @@ This is an overview over all patches that are currently used. | server | Entity lifespan | William Blake Galbreath | | | server | Execute chunk tasks mid-tick | Spottedleaf | | | api | ExecuteCommandEvent | William Blake Galbreath | | +| api | Expose findClass for profiler | Paul Sauve | | | server | Farmland trampling changes | Mariell Hoversholm | | | server | Fix 'outdated server' showing in ping before server fully | William Blake Galbreath | | | server | Fix Bukkit.createInventory() with type LECTERN | willies952002 | | @@ -175,7 +179,6 @@ This is an overview over all patches that are currently used. | server | Fix PlayerEditBookEvent not saving new book | BillyGalbreath | | | server | Fix chunks refusing to unload at low TPS | Spottedleaf | | | server | Fix cow rotation when shearing mooshroom | William Blake Galbreath | | -| server | Fix death message colors | William Blake Galbreath | | | server | Fix exp drop of zombie pigmen (MC-56653) | Phoenix616 | | | server | Fix incorrect isRealPlayer init | Spottedleaf | | | api | Fix javadoc warnings (missing @param and @return) | BillyGalbreath | | @@ -233,7 +236,8 @@ This is an overview over all patches that are currently used. | server | MC-Dev fixes | Spottedleaf | | | server | Make CallbackExecutor strict again | Spottedleaf | | | server | Make Iron Golems Swim | William Blake Galbreath | | -| server | Make animal breeding times configurable | jmp | | +| server | Make entity breeding times configurable | jmp | | +| server | Make entity tracker use highest range of passengers | Spottedleaf | | | server | Make lava flow speed configurable | William Blake Galbreath | | | server | Make sure inlined getChunkAt has inlined logic for loaded | Spottedleaf | | | server | Manually inline methods in BlockPosition | Spottedleaf | | @@ -244,10 +248,12 @@ This is an overview over all patches that are currently used. | server | Movement options for armour stands | Mariell Hoversholm | | | server | Multi-Threaded Server Ticking Vanilla | Spottedleaf | | | server | Multi-Threaded ticking CraftBukkit | Spottedleaf | | +| server | Multithreaded entity tracking | Paul Sauve | | | server | Name craft scheduler threads according to the plugin using | Spottedleaf | | | server | New nbt cache | Hugo Planque | ishland | | server | Nuke streams off BlockPosition | Ivan Pekov | | | server | Nuke streams off SectionPosition | Ivan Pekov | | +| server | One Punch Man! | Fourmisain | | | server | Optimise WorldServer#notify | Spottedleaf | | | server | Optimise chunk tick iteration | Spottedleaf | | | server | Optimise closest entity lookup | Spottedleaf | | @@ -272,9 +278,7 @@ This is an overview over all patches that are currently used. | server | Option to toggle milk curing bad omen | William Blake Galbreath | | | server | Origami - Fix ProtocolLib issues on Java 15 | Phoenix616 | | | server | Origami Server Config | Phoenix616 | | -| server | PaperPR - Add hex color code support for console logging | Esophose | | | server | PaperPR - Config option for Piglins guarding chests | jmp | | -| server | PaperPR - Fix username connecting with no texture being | Camotoy | | | server | Per World Spawn Limits | Chase Whipple | | | server | Per entity (type) collision settings | MrIvanPlays | tr7zw | | server | Persistent TileEntity Lore and DisplayName | jmp | | @@ -294,7 +298,6 @@ This is an overview over all patches that are currently used. | server | Players should not cram to death | William Blake Galbreath | | | server | Populator seed controls | Spottedleaf | | | server | Preload ProtocolLib EnumWrappers | ishland | | -| server | Prevent grindstones from overstacking items | chickeneer | | | server | Prevent light queue overfill when no players are online | Spottedleaf | | | server | Prevent long map entry creation in light engine | Spottedleaf | | | server | Prevent unload() calls removing tickets for sync loads | Spottedleaf | | @@ -318,7 +321,6 @@ This is an overview over all patches that are currently used. | server | Remove some streams and object allocations | Phoenix616 | | | server | Remove streams | Paul Sauve | | | server | Remove streams for villager AI | Spottedleaf | | -| server | Respect PlayerKickEvent leaveMessage | Ivan Pekov | | | server | Revert MC-4 fix | Spottedleaf | | | server | Revert getChunkAt(Async) retaining chunks for long periods of | Spottedleaf | | | server | Rework PlayerChunk main thread checks | Spottedleaf | | @@ -334,6 +336,7 @@ This is an overview over all patches that are currently used. | server | Signs editable on right click | William Blake Galbreath | | | server | Silk touch spawners | William Blake Galbreath | | | server | Simpler ShapelessRecipes comparison for Vanilla | Paul Sauve | | +| server | Skip POI finding if stuck in vehicle | Paul Sauve | | | server | Skip events if there's no listeners | William Blake Galbreath | | | server | Smarter statistics ticking | Mykyta Komarnytskyy | | | server | Smol entity optimisations | Ivan Pekov | | diff --git a/Paper b/Paper index 0ea30838..e4d8a627 160000 --- a/Paper +++ b/Paper @@ -1 +1 @@ -Subproject commit 0ea3083817707d792ebac246895455a0aa0d3425 +Subproject commit e4d8a6279cbcbd748a769a104e592e7189477944 diff --git a/buildSrc/src/main/kotlin/ConfigureSubprojects.kt b/buildSrc/src/main/kotlin/ConfigureSubprojects.kt index 16f6e83b..ef665a60 100644 --- a/buildSrc/src/main/kotlin/ConfigureSubprojects.kt +++ b/buildSrc/src/main/kotlin/ConfigureSubprojects.kt @@ -1,6 +1,7 @@ import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer +// import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer +import xyz.jpenilla.toothpick.transformer.ModifiedLog4j2PluginsCacheFileTransformer import kotlinx.dom.elements import kotlinx.dom.parseXml import kotlinx.dom.search @@ -156,7 +157,8 @@ private fun Project.configureServerProject() { val shadowJar by tasks.getting(ShadowJar::class) { archiveClassifier.set("") // ShadowJar is the main server artifact dependsOn(generatePomFileForMavenJavaPublication) - transform(Log4j2PluginsCacheFileTransformer::class.java) + transform(ModifiedLog4j2PluginsCacheFileTransformer::class.java) + //transform(Log4j2PluginsCacheFileTransformer::class.java) mergeServiceFiles() manifest { attributes( diff --git a/buildSrc/src/main/kotlin/DependencyLoading.kt b/buildSrc/src/main/kotlin/DependencyLoading.kt index 0e256ab7..ba216ee0 100644 --- a/buildSrc/src/main/kotlin/DependencyLoading.kt +++ b/buildSrc/src/main/kotlin/DependencyLoading.kt @@ -6,59 +6,75 @@ import org.gradle.api.artifacts.dsl.RepositoryHandler import org.gradle.kotlin.dsl.DependencyHandlerScope import org.gradle.kotlin.dsl.maven import org.gradle.kotlin.dsl.project +import org.w3c.dom.Element fun RepositoryHandler.loadRepositories(project: Project) { - val pomFile = project.projectDir.resolve("pom.xml") - if (!pomFile.exists()) return - val dom = parseXml(pomFile) - val repositoriesBlock = dom.search("repositories").firstOrNull() ?: return + val pomFile = project.projectDir.resolve("pom.xml") + if (!pomFile.exists()) return + val dom = parseXml(pomFile) + val repositoriesBlock = dom.search("repositories").firstOrNull() ?: return - // Load repositories - repositoriesBlock.elements("repository").forEach { repositoryElem -> - val url = repositoryElem.search("url").firstOrNull()?.textContent ?: return@forEach - maven(url) - } + // Load repositories + repositoriesBlock.elements("repository").forEach { repositoryElem -> + val url = repositoryElem.search("url").firstOrNull()?.textContent ?: return@forEach + maven(url) + } } fun DependencyHandlerScope.loadDependencies(project: Project) { - val pomFile = project.projectDir.resolve("pom.xml") - if (!pomFile.exists()) return - val dom = parseXml(pomFile) + val pomFile = project.projectDir.resolve("pom.xml") + if (!pomFile.exists()) return + val dom = parseXml(pomFile) - val dependenciesBlock = dom.search("dependencies").firstOrNull() ?: return - - // Load dependencies - dependenciesBlock.elements("dependency").forEach { dependencyElem -> - val groupId = dependencyElem.search("groupId").first().textContent - val artifactId = dependencyElem.search("artifactId").first().textContent - val version = dependencyElem.search("version").first().textContent.applyReplacements( - "project.version" to "${project.rootProject.toothpick.minecraftVersion}-${project.rootProject.toothpick.nmsRevision}", - "minecraft.version" to project.toothpick.minecraftVersion - ) - val scope = dependencyElem.search("scope").firstOrNull()?.textContent - val classifier = dependencyElem.search("classifier").firstOrNull()?.textContent - - val dependencyString = "${groupId}:${artifactId}:${version}${classifier?.run { ":$this" } ?: ""}" - project.logger.debug("Read dependency '{}' from '{}'", dependencyString, pomFile.absolutePath) - - // Special case API - if (artifactId == "${project.toothpick.forkNameLowercase}-api" - || artifactId == "${project.toothpick.upstreamLowercase}-api" - ) { - if (project.name.endsWith("-server")) { - add("api", project(":${project.toothpick.forkNameLowercase}-api")) - } - return@forEach - } - - when (scope) { - "compile", null -> add("api", dependencyString) - "provided" -> { - add("compileOnly", dependencyString) - add("testImplementation", dependencyString) - } - "runtime" -> add("runtimeOnly", dependencyString) - "test" -> add("testImplementation", dependencyString) - } - } + // Load dependencies + dom.search("dependencies").forEach { + loadDependencies(project, it) + } } + +private fun DependencyHandlerScope.loadDependencies(project: Project, dependenciesBlock: Element) { + dependenciesBlock.elements("dependency").forEach { dependencyElem -> + val groupId = dependencyElem.search("groupId").first().textContent + val artifactId = dependencyElem.search("artifactId").first().textContent + val version = dependencyElem.search("version").firstOrNull()?.textContent?.applyReplacements( + "project.version" to "${project.rootProject.toothpick.minecraftVersion}-${project.rootProject.toothpick.nmsRevision}", + "minecraft.version" to project.toothpick.minecraftVersion + ) + val scope = dependencyElem.search("scope").firstOrNull()?.textContent + val classifier = dependencyElem.search("classifier").firstOrNull()?.textContent + + val dependencyString = + "$groupId:$artifactId${processOptionalDependencyElement(version)}${processOptionalDependencyElement(classifier)}" + project.logger.debug("Read $scope scope dependency '$dependencyString' from '${project.name}' pom.xml") + + // Special case API + if (artifactId == project.toothpick.apiProject.project.name + || artifactId == "${project.toothpick.upstreamLowercase}-api" + ) { + if (project == project.toothpick.serverProject.project) { + add("api", project(":${project.toothpick.forkNameLowercase}-api")) + } + return@forEach + } + + when (scope) { + "import" -> add("api", platform(dependencyString)) + "compile", null -> { + add("api", dependencyString) + if (version != null) { + add("annotationProcessor", dependencyString) + } + } + "provided" -> { + add("compileOnly", dependencyString) + add("testImplementation", dependencyString) + add("annotationProcessor", dependencyString) + } + "runtime" -> add("runtimeOnly", dependencyString) + "test" -> add("testImplementation", dependencyString) + } + } +} + +private fun processOptionalDependencyElement(element: String?): String = + element?.run { ":$this" } ?: "" \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/transformer/ModifiedLog4j2PluginsCacheFileTransformer.kt b/buildSrc/src/main/kotlin/transformer/ModifiedLog4j2PluginsCacheFileTransformer.kt new file mode 100644 index 00000000..7225f57d --- /dev/null +++ b/buildSrc/src/main/kotlin/transformer/ModifiedLog4j2PluginsCacheFileTransformer.kt @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package xyz.jpenilla.toothpick.transformer + +import com.github.jengelman.gradle.plugins.shadow.ShadowStats +import com.github.jengelman.gradle.plugins.shadow.relocation.RelocateClassContext +import com.github.jengelman.gradle.plugins.shadow.relocation.Relocator +import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer +import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext +import org.gradle.api.file.FileTreeElement +import shadow.org.apache.commons.io.IOUtils +import shadow.org.apache.commons.io.output.CloseShieldOutputStream +import shadow.org.apache.logging.log4j.core.config.plugins.processor.PluginCache +import shadow.org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor.PLUGIN_CACHE_FILE +import shadow.org.apache.tools.zip.ZipEntry +import shadow.org.apache.tools.zip.ZipOutputStream +import java.io.File +import java.io.FileOutputStream +import java.net.URL +import java.util.Collections +import java.util.Enumeration + +/** + * This class is a modified version of [com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer], + * used in order to fix the issues when 'element.name' for our Log4jPlugins.dat is just 'Log4jPlugins.dat' instead of [PLUGIN_CACHE_FILE]. + * + * Besides converting to Kotlin, the only modified part of the class is [canTransformResource]. + */ +internal class ModifiedLog4j2PluginsCacheFileTransformer : Transformer { + private val temporaryFiles: ArrayList = ArrayList() + private val relocators: ArrayList = ArrayList() + private lateinit var stats: ShadowStats + + override fun canTransformResource(element: FileTreeElement): Boolean { + return PLUGIN_CACHE_FILE == element.name || element.name == "Log4j2Plugins.dat" + } + + override fun transform(context: TransformerContext) { + val inputStream = context.`is` + val temporaryFile = File.createTempFile("Log4j2Plugins", ".dat") + temporaryFile.deleteOnExit() + this.temporaryFiles.add(temporaryFile) + FileOutputStream(temporaryFile).use { IOUtils.copy(inputStream, it) } + val relocators = context.relocators + if (relocators != null) { + this.relocators.addAll(relocators) + } + this.stats = context.stats + } + + override fun hasTransformedResource(): Boolean { + val hasTransformedMultipleFiles = temporaryFiles.size > 1 + val hasAtLeastOneFileAndRelocator = temporaryFiles.isNotEmpty() && relocators.isNotEmpty() + return hasTransformedMultipleFiles || hasAtLeastOneFileAndRelocator + } + + override fun modifyOutputStream(zipOutputStream: ZipOutputStream, preserveFileTimestamps: Boolean) { + val pluginCache = PluginCache() + pluginCache.loadCacheFiles(urlEnumeration()) + relocatePlugins(pluginCache) + val entry = ZipEntry(PLUGIN_CACHE_FILE) + entry.time = TransformerContext.getEntryTimestamp(preserveFileTimestamps, entry.time) + zipOutputStream.putNextEntry(entry) + pluginCache.writeCache(CloseShieldOutputStream(zipOutputStream)) + this.temporaryFiles.clear() + } + + private fun urlEnumeration(): Enumeration { + return Collections.enumeration( + this.temporaryFiles.map { it.toURI().toURL() }.toList() + ) + } + + private fun relocatePlugins(pluginCache: PluginCache) { + for (currentMap in pluginCache.allCategories.values) { + currentMap.values.forEach { currentPluginEntry -> + val className = currentPluginEntry.className + val relocateClassContext = RelocateClassContext(className, stats) + for (currentRelocator in relocators) { + // If we have a relocator that can relocate our current entry... + if (currentRelocator.canRelocateClass(className)) { + // Then we perform that relocation and update the plugin entry to reflect the new value. + val relocatedClassName = currentRelocator.relocateClass(relocateClassContext) + currentPluginEntry.className = relocatedClassName + return@forEach + } + } + } + } + } +} \ No newline at end of file diff --git a/patches/Airplane/patches/api/0001-Expose-findClass-for-profiler.patch b/patches/Airplane/patches/api/0001-Expose-findClass-for-profiler.patch new file mode 100644 index 00000000..62e4b163 --- /dev/null +++ b/patches/Airplane/patches/api/0001-Expose-findClass-for-profiler.patch @@ -0,0 +1,18 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Paul Sauve +Date: Sat, 19 Dec 2020 19:06:37 -0600 +Subject: [PATCH] Expose findClass for profiler + + +diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java +index 7760be3e34fa20825faf145d9fb5b2855c1a4602..79d839034d38c941745c6b91f973f908d6cdb8ee 100644 +--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java ++++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java +@@ -111,6 +111,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot + return findClass(name, true); + } + ++ public Class _airplane_findClass(@NotNull String name) throws ClassNotFoundException { return this.classes.get(name); } // Airplane + Class findClass(@NotNull String name, boolean checkGlobal) throws ClassNotFoundException { + if (name.startsWith("org.bukkit.") || name.startsWith("net.minecraft.")) { + throw new ClassNotFoundException(name); diff --git a/patches/Airplane/patches/server/0002-Airplane-Configuration.patch b/patches/Airplane/patches/server/0002-Airplane-Configuration.patch index 54e12bab..9e4f75aa 100644 --- a/patches/Airplane/patches/server/0002-Airplane-Configuration.patch +++ b/patches/Airplane/patches/server/0002-Airplane-Configuration.patch @@ -3,6 +3,8 @@ From: Paul Sauve Date: Wed, 20 Jan 2021 13:08:53 -0600 Subject: [PATCH] Airplane Configuration +Co-developed-by: Ben Kerllenevich + Airplane Copyright (C) 2020 Technove LLC @@ -19,6 +21,68 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . +diff --git a/src/main/java/gg/airplane/AirplaneCommand.java b/src/main/java/gg/airplane/AirplaneCommand.java +new file mode 100644 +index 0000000000000000000000000000000000000000..1fa9b40e2f89272fa8bc9d927a9a852b5eb0db22 +--- /dev/null ++++ b/src/main/java/gg/airplane/AirplaneCommand.java +@@ -0,0 +1,56 @@ ++package gg.airplane; ++ ++import net.md_5.bungee.api.ChatColor; ++import net.minecraft.server.MinecraftServer; ++import org.bukkit.Bukkit; ++import org.bukkit.Location; ++import org.bukkit.command.Command; ++import org.bukkit.command.CommandSender; ++ ++import java.util.Collections; ++import java.util.List; ++import java.util.stream.Collectors; ++import java.util.stream.Stream; ++ ++public class AirplaneCommand extends Command { ++ ++ public AirplaneCommand() { ++ super("airplane"); ++ this.description = "Airplane related commands"; ++ this.usageMessage = "/airplane [reload | version]"; ++ this.setPermission("bukkit.command.airplane"); ++ } ++ ++ @Override ++ public List tabComplete(CommandSender sender, String alias, String[] args, Location location) throws IllegalArgumentException { ++ if (args.length == 1) { ++ return Stream.of("reload", "version") ++ .filter(arg -> arg.startsWith(args[0].toLowerCase())) ++ .collect(Collectors.toList()); ++ } ++ return Collections.emptyList(); ++ } ++ ++ @Override ++ public boolean execute(CommandSender sender, String commandLabel, String[] args) { ++ if (!testPermission(sender)) return true; ++ String prefix = ChatColor.of("#6a7eda") + "" + ChatColor.BOLD + "Airplane ✈ " + ChatColor.of("#e8ebf9"); ++ ++ if (args.length != 1) { ++ sender.sendMessage(prefix + "Usage: " + usageMessage); ++ args = new String[]{"version"}; ++ } ++ ++ if (args[0].equalsIgnoreCase("reload")) { ++ MinecraftServer console = MinecraftServer.getServer(); ++ AirplaneConfig.load(); ++ console.server.reloadCount++; ++ ++ Command.broadcastCommandMessage(sender, prefix + "Airplane configuration has been reloaded."); ++ } else if (args[0].equalsIgnoreCase("version")) { ++ Command.broadcastCommandMessage(sender, prefix + "This server is running " + Bukkit.getName() + " version " + Bukkit.getVersion() + " (Implementing API version " + Bukkit.getBukkitVersion() + ")"); ++ } ++ ++ return true; ++ } ++} diff --git a/src/main/java/gg/airplane/AirplaneConfig.java b/src/main/java/gg/airplane/AirplaneConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..4feb9686f45ce4ae9f474447496b8e0f6fcb7e31 @@ -71,6 +135,22 @@ index 0000000000000000000000000000000000000000..4feb9686f45ce4ae9f474447496b8e0f + } + +} +diff --git a/src/main/java/gg/airplane/commands/AirplaneCommands.java b/src/main/java/gg/airplane/commands/AirplaneCommands.java +new file mode 100644 +index 0000000000000000000000000000000000000000..807cf274619b8f7be839e249cb62b9817876ca04 +--- /dev/null ++++ b/src/main/java/gg/airplane/commands/AirplaneCommands.java +@@ -0,0 +1,10 @@ ++package gg.airplane.commands; ++ ++import gg.airplane.AirplaneCommand; ++import net.minecraft.server.MinecraftServer; ++ ++public class AirplaneCommands { ++ public static void init() { ++ MinecraftServer.getServer().server.getCommandMap().register("airplane", "Airplane", new AirplaneCommand()); ++ } ++} diff --git a/src/main/java/gg/airplane/manual/ManualParser.java b/src/main/java/gg/airplane/manual/ManualParser.java new file mode 100644 index 0000000000000000000000000000000000000000..ace29adb0f140d99a8d85ac824654beded4bf5b8 @@ -288,14 +368,15 @@ index 0000000000000000000000000000000000000000..ace29adb0f140d99a8d85ac824654bed + +} diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 3ee8d31c453105eca7b96bede39a9ebbf40e1c2c..ca3d9dbcbeeb5059a942cae1a5020f0bcc59ac9c 100644 +index e3721b53db68171665ba05201155d088ae3cb89f..b8a45c80b6691214e513286262f31b7b5b1dd5eb 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -179,6 +179,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -185,6 +185,8 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // load version history now // Paper end com.tuinity.tuinity.config.TuinityConfig.init((java.io.File) options.valueOf("tuinity-settings")); // Tuinity - Server Config + gg.airplane.AirplaneConfig.load(); // Airplane - config ++ gg.airplane.commands.AirplaneCommands.init(); // Airplane - command this.setPVP(dedicatedserverproperties.pvp); this.setAllowFlight(dedicatedserverproperties.allowFlight); diff --git a/patches/Airplane/patches/server/0004-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch b/patches/Airplane/patches/server/0004-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch index a6389ec0..a10d482a 100644 --- a/patches/Airplane/patches/server/0004-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch +++ b/patches/Airplane/patches/server/0004-Strip-raytracing-for-EntityLiving-hasLineOfSight.patch @@ -27,10 +27,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 5f9d8999ae7a1d742918e58c0f1bb36fc74d45fe..15d74cb75725b4c53747848ca9b034c95a372a2f 100644 +index c8f23b21cbe8625f7344c118eb62bab7e55e42e2..18dc5712a16f5610184e10a73f4be81fd6e2a366 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -3054,7 +3054,7 @@ public abstract class EntityLiving extends Entity { +@@ -3071,7 +3071,7 @@ public abstract class EntityLiving extends Entity { Vec3D vec3d = new Vec3D(this.locX(), this.getHeadY(), this.locZ()); Vec3D vec3d1 = new Vec3D(entity.locX(), entity.getHeadY(), entity.locZ()); @@ -40,7 +40,7 @@ index 5f9d8999ae7a1d742918e58c0f1bb36fc74d45fe..15d74cb75725b4c53747848ca9b034c9 @Override diff --git a/src/main/java/net/minecraft/server/IBlockAccess.java b/src/main/java/net/minecraft/server/IBlockAccess.java -index 5c3eb4fc7e5aec2ad8d0050673fc8f4d2bff6a71..15f20132d5777c5e0162aa91e6e968e1e8b1cc2d 100644 +index 5ccf6b483fe15d4ad12ce2d3d11e9440ee9e8ab7..ec82d91804eeed49a6ef67a92fd24a06ae7ee3fb 100644 --- a/src/main/java/net/minecraft/server/IBlockAccess.java +++ b/src/main/java/net/minecraft/server/IBlockAccess.java @@ -44,6 +44,15 @@ public interface IBlockAccess { diff --git a/patches/Airplane/patches/server/0005-Simpler-ShapelessRecipes-comparison-for-Vanilla.patch b/patches/Airplane/patches/server/0005-Simpler-ShapelessRecipes-comparison-for-Vanilla.patch index 84278dc2..64b5cde5 100644 --- a/patches/Airplane/patches/server/0005-Simpler-ShapelessRecipes-comparison-for-Vanilla.patch +++ b/patches/Airplane/patches/server/0005-Simpler-ShapelessRecipes-comparison-for-Vanilla.patch @@ -24,10 +24,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/server/ShapelessRecipes.java b/src/main/java/net/minecraft/server/ShapelessRecipes.java -index 61d88dbaa1f5c543be610ce0914b2c89d8ad40ee..11fbbe86978055ece0cb47eee531093e59f61dcf 100644 +index ecd63281912ae0ed93c5eb5ccb4249833cb23ab1..97825ec914709ca037159c46ecee218a6013ff58 100644 --- a/src/main/java/net/minecraft/server/ShapelessRecipes.java +++ b/src/main/java/net/minecraft/server/ShapelessRecipes.java -@@ -17,8 +17,16 @@ public class ShapelessRecipes implements RecipeCrafting { +@@ -18,8 +18,16 @@ public class ShapelessRecipes implements RecipeCrafting { private final String group; private final ItemStack result; private final NonNullList ingredients; @@ -44,7 +44,7 @@ index 61d88dbaa1f5c543be610ce0914b2c89d8ad40ee..11fbbe86978055ece0cb47eee531093e this.key = minecraftkey; this.group = s; this.result = itemstack; -@@ -60,6 +68,28 @@ public class ShapelessRecipes implements RecipeCrafting { +@@ -61,6 +69,28 @@ public class ShapelessRecipes implements RecipeCrafting { } public boolean a(InventoryCrafting inventorycrafting, World world) { diff --git a/patches/Airplane/patches/server/0010-Don-t-get-entity-equipment-if-not-needed.patch b/patches/Airplane/patches/server/0010-Don-t-get-entity-equipment-if-not-needed.patch index b5699c5c..a8ba48fa 100644 --- a/patches/Airplane/patches/server/0010-Don-t-get-entity-equipment-if-not-needed.patch +++ b/patches/Airplane/patches/server/0010-Don-t-get-entity-equipment-if-not-needed.patch @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 15d74cb75725b4c53747848ca9b034c95a372a2f..95ccaab19b46785dd515b9d444557ae56de8ab89 100644 +index 18dc5712a16f5610184e10a73f4be81fd6e2a366..88d5fb46b3fa8c148293ac6c2c8206fc480b5521 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -820,11 +820,13 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/Airplane/patches/server/0011-Dynamic-activation-range.patch b/patches/Airplane/patches/server/0011-Dynamic-activation-range.patch index 38815ed6..f32aea0f 100644 --- a/patches/Airplane/patches/server/0011-Dynamic-activation-range.patch +++ b/patches/Airplane/patches/server/0011-Dynamic-activation-range.patch @@ -61,7 +61,7 @@ index 4feb9686f45ce4ae9f474447496b8e0f6fcb7e31..c39c9929a251b41ab60e1509b4e6c90d + } diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index a2ba87dac005572d2617b6fe2c92f6984665588c..0fe4c8f9c669f343fef3e2869f22b46d8ef7136b 100644 +index 94af972e115491d0f4394dd290ec2d9d426b8d32..426bebc5cd67ffcc72ee56d437cc13f6846e109c 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -197,6 +197,9 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -150,10 +150,10 @@ index 4849829df1041568a9fcac6d16501fc0606d95da..2ac74751ac8cea0b829b3d0ed03f0521 } diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index eef51f8e5734b897164ca9514e7b49b2678416e6..5fc57e2e2afe383ddc9b6d4db714a678c881fa77 100644 +index 850dae5f20649854f013c0e530a3325455b5db4a..9b30273d59eb7f0d40cd54eb9e1d2ebe24b48fca 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -212,6 +212,8 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -210,6 +210,8 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } // Purpur end @@ -162,7 +162,7 @@ index eef51f8e5734b897164ca9514e7b49b2678416e6..5fc57e2e2afe383ddc9b6d4db714a678 @Override protected void mobTick() { mobTick(false); } protected void mobTick(boolean inactive) { -@@ -221,7 +223,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -219,7 +221,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation boolean tick = (world.getTime() + brainTickOffset) % world.purpurConfig.villagerBrainTicks == 0; if (((WorldServer) world).getMinecraftServer().lagging ? tick : world.purpurConfig.villagerUseBrainTicksOnlyWhenLagging || tick) // Purpur end @@ -198,10 +198,10 @@ index 9cad895c7d008487ce885cbcc2c3966645df4c19..2ce5e07f4dcd0c76073840c35be66b7c public boolean hasTasks() { for (PathfinderGoalWrapped task : getTasks()) { diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 66b7c75929cd98737628b9d4f22829b5b65b8373..ea3d813759d90a6d229ca065abe044743be4780f 100644 +index 05b165f4f2de1f09164c33c0b222dc660c86ebb9..7cc27df3c9429ccd840b394fcc3b96215a8449ac 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -48,6 +48,9 @@ import net.minecraft.server.EntityInsentient; +@@ -49,6 +49,9 @@ import net.minecraft.server.EntityInsentient; import net.minecraft.server.EntityLlama; import net.minecraft.server.EntityWaterAnimal; // Paper end @@ -211,7 +211,7 @@ index 66b7c75929cd98737628b9d4f22829b5b65b8373..ea3d813759d90a6d229ca065abe04474 public class ActivationRange { -@@ -229,7 +232,7 @@ public class ActivationRange +@@ -230,7 +233,7 @@ public class ActivationRange Chunk chunk = chunkProvider.getChunkAtIfLoadedMainThreadNoCache( i1, j1 ); // Paper if ( chunk != null ) { @@ -220,7 +220,7 @@ index 66b7c75929cd98737628b9d4f22829b5b65b8373..ea3d813759d90a6d229ca065abe04474 } } } -@@ -242,7 +245,7 @@ public class ActivationRange +@@ -243,7 +246,7 @@ public class ActivationRange * * @param chunk */ @@ -229,7 +229,7 @@ index 66b7c75929cd98737628b9d4f22829b5b65b8373..ea3d813759d90a6d229ca065abe04474 { // Paper start Entity[] rawData = chunk.entities.getRawData(); -@@ -251,11 +254,19 @@ public class ActivationRange +@@ -252,11 +255,19 @@ public class ActivationRange //for ( Entity entity : (Collection) slice ) // Paper end { diff --git a/patches/Airplane/patches/server/0015-Reduce-memory-allocations.patch b/patches/Airplane/patches/server/0015-Reduce-memory-allocations.patch index 16c24345..67fb5195 100644 --- a/patches/Airplane/patches/server/0015-Reduce-memory-allocations.patch +++ b/patches/Airplane/patches/server/0015-Reduce-memory-allocations.patch @@ -43,7 +43,7 @@ index bc61aaff65a7dc1e7534452b285953b83adb7000..f38382cc681f03d9a6a0efa85f045e37 @Override public BlockPosition shift(EnumDirection enumdirection, int i) { diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java -index 631eb682e81e30d2a937fd1eafccd8a9ab82d21e..dc07376845f84ea949a2153cb75d2cd9d46a419e 100644 +index 730b91680b226df624180d64019c2984d0e29422..60ddae95c287aea071a8f277e570c2b0f25f9feb 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java +++ b/src/main/java/net/minecraft/server/EntityTypes.java @@ -140,6 +140,8 @@ public class EntityTypes { @@ -56,10 +56,10 @@ index 631eb682e81e30d2a937fd1eafccd8a9ab82d21e..dc07376845f84ea949a2153cb75d2cd9 return (EntityTypes) IRegistry.a((IRegistry) IRegistry.ENTITY_TYPE, s, (Object) entitytypes_builder.a(s)); } diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 61570ab947b5a153a4c2bcb5a09344f060e6052d..121deda90227cb0416d6642607b24093df2baa80 100644 +index f9482f19549074e04fc4c1e4d05612a2ea23354c..e7c373e28054c49459a44faee77301e448baea44 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -641,7 +641,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -642,7 +642,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return d2 * d2 + d3 * d3; } @@ -70,7 +70,7 @@ index 61570ab947b5a153a4c2bcb5a09344f060e6052d..121deda90227cb0416d6642607b24093 int i; int j; -@@ -655,12 +657,16 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -656,12 +658,16 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { j = MathHelper.floor(entityplayer.locZ() / 16.0D); } @@ -91,7 +91,7 @@ index 61570ab947b5a153a4c2bcb5a09344f060e6052d..121deda90227cb0416d6642607b24093 return Math.max(Math.abs(k), Math.abs(l)); } -@@ -2499,11 +2505,17 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2500,11 +2506,17 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially boolean flag1 = this.tracker.attachedToPlayer; if (!flag1) { @@ -111,7 +111,7 @@ index 61570ab947b5a153a4c2bcb5a09344f060e6052d..121deda90227cb0416d6642607b24093 } } -@@ -2533,8 +2545,10 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2534,8 +2546,10 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially } private int b() { @@ -123,7 +123,7 @@ index 61570ab947b5a153a4c2bcb5a09344f060e6052d..121deda90227cb0416d6642607b24093 Iterator iterator = collection.iterator(); while (iterator.hasNext()) { -@@ -2546,6 +2560,8 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2547,6 +2561,8 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially i = j; } } diff --git a/patches/Airplane/patches/server/0016-Skip-POI-finding-if-stuck-in-vehicle.patch b/patches/Airplane/patches/server/0016-Skip-POI-finding-if-stuck-in-vehicle.patch new file mode 100644 index 00000000..7d79678d --- /dev/null +++ b/patches/Airplane/patches/server/0016-Skip-POI-finding-if-stuck-in-vehicle.patch @@ -0,0 +1,45 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Paul Sauve +Date: Thu, 18 Feb 2021 13:13:27 -0600 +Subject: [PATCH] Skip POI finding if stuck in vehicle + +Airplane +Copyright (C) 2020 Technove LLC + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +diff --git a/src/main/java/net/minecraft/server/BehaviorFindPosition.java b/src/main/java/net/minecraft/server/BehaviorFindPosition.java +index 8d445e9c0875db6cf45e4d8bcfce7cd3d5094d94..0594b0bb12c553edbb6284b48328a3dcf5a64ba4 100644 +--- a/src/main/java/net/minecraft/server/BehaviorFindPosition.java ++++ b/src/main/java/net/minecraft/server/BehaviorFindPosition.java +@@ -278,6 +278,7 @@ public class BehaviorFindPosition extends Behavior { + + protected void a(WorldServer worldserver, EntityCreature entitycreature, long i) { + this.f = i + 20L + (long) worldserver.getRandom().nextInt(20); ++ if (entitycreature.getNavigation().isStuck()) this.f += 200L; // Airplane - wait an additional 10s to check again if they're stuck + VillagePlace villageplace = worldserver.y(); + + this.g.long2ObjectEntrySet().removeIf((entry) -> { +diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java +index 1208464fba96daf276c9cc0c1c9b18db75b03abc..b5ea7997040b5bfd98925a146e446aa3c56574da 100644 +--- a/src/main/java/net/minecraft/server/NavigationAbstract.java ++++ b/src/main/java/net/minecraft/server/NavigationAbstract.java +@@ -412,6 +412,7 @@ public abstract class NavigationAbstract { + } + } + ++ public boolean isStuck() { return this.t(); } // Airplane - OBFHELPER + public boolean t() { + return this.t; + } diff --git a/patches/Airplane/patches/server/0017-Airplane-Profiler.patch b/patches/Airplane/patches/server/0017-Airplane-Profiler.patch new file mode 100644 index 00000000..64455ce2 --- /dev/null +++ b/patches/Airplane/patches/server/0017-Airplane-Profiler.patch @@ -0,0 +1,638 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Paul Sauve +Date: Sun, 20 Dec 2020 14:08:24 -0600 +Subject: [PATCH] Airplane Profiler + +Airplane +Copyright (C) 2020 Technove LLC + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +diff --git a/pom.xml b/pom.xml +index 752d62eb3b87ab24260ec2c029bae0d2b0e3b908..02bbe784d0a062dd643e37f3ad04b77a78144828 100644 +--- a/pom.xml ++++ b/pom.xml +@@ -161,6 +161,13 @@ + 1.1.0-SNAPSHOT + compile + ++ ++ ++ com.github.technove ++ Flare ++ master-SNAPSHOT ++ compile ++ + + + +@@ -174,6 +181,11 @@ + spigotmc-public + https://hub.spigotmc.org/nexus/content/groups/public/ + ++ ++ ++ jitpack.io ++ https://jitpack.io ++ + + + +diff --git a/src/main/java/gg/airplane/AirplaneConfig.java b/src/main/java/gg/airplane/AirplaneConfig.java +index c39c9929a251b41ab60e1509b4e6c90d0825dc0c..3a5a65a2f282b00602643470520fd05fba5907fb 100644 +--- a/src/main/java/gg/airplane/AirplaneConfig.java ++++ b/src/main/java/gg/airplane/AirplaneConfig.java +@@ -68,4 +68,23 @@ public class AirplaneConfig { + dynamicHoglinBehavior = manual.get("behavior-activation.hoglin", dynamicHoglinBehavior); + } + ++ ++ public static String profileWebUrl = "https://flare.airplane.gg"; ++ ++ private static void profilerOptions() { ++ manual.setComment("flare", "Configures Flare, the built-in profiler"); ++ ++ profileWebUrl = manual.get("flare.url", profileWebUrl, "Sets the server to use for profiles."); ++ } ++ ++ ++ public static String accessToken = ""; ++ ++ private static void airplaneWebServices() { ++ manual.setComment("web-services", "Options for connecting to Airplane's online utilities"); ++ ++ accessToken = manual.get("web-services.token", ""); ++ // todo lookup token (off-thread) and let users know if their token is valid ++ } ++ + } +diff --git a/src/main/java/gg/airplane/AirplaneLogger.java b/src/main/java/gg/airplane/AirplaneLogger.java +new file mode 100644 +index 0000000000000000000000000000000000000000..1a9d71739019d12772bec6076b195552ff6299f9 +--- /dev/null ++++ b/src/main/java/gg/airplane/AirplaneLogger.java +@@ -0,0 +1,17 @@ ++package gg.airplane; ++ ++import org.bukkit.Bukkit; ++ ++import java.util.logging.Level; ++import java.util.logging.Logger; ++ ++public class AirplaneLogger extends Logger { ++ public static final AirplaneLogger LOGGER = new AirplaneLogger(); ++ ++ private AirplaneLogger() { ++ super("Airplane", null); ++ ++ setParent(Bukkit.getLogger()); ++ setLevel(Level.ALL); ++ } ++} +diff --git a/src/main/java/gg/airplane/commands/AirplaneCommands.java b/src/main/java/gg/airplane/commands/AirplaneCommands.java +index 807cf274619b8f7be839e249cb62b9817876ca04..66b20250a26d005427601b1cdee43bdd9eba70cc 100644 +--- a/src/main/java/gg/airplane/commands/AirplaneCommands.java ++++ b/src/main/java/gg/airplane/commands/AirplaneCommands.java +@@ -1,10 +1,12 @@ + package gg.airplane.commands; + + import gg.airplane.AirplaneCommand; ++import gg.airplane.flare.FlareCommand; + import net.minecraft.server.MinecraftServer; + + public class AirplaneCommands { + public static void init() { + MinecraftServer.getServer().server.getCommandMap().register("airplane", "Airplane", new AirplaneCommand()); ++ MinecraftServer.getServer().server.getCommandMap().register("flare", "Airplane", new FlareCommand()); + } + } +diff --git a/src/main/java/gg/airplane/compat/ServerConfigurations.java b/src/main/java/gg/airplane/compat/ServerConfigurations.java +new file mode 100644 +index 0000000000000000000000000000000000000000..f4976428bc721319d2926e97cbe0f64c6e9e503c +--- /dev/null ++++ b/src/main/java/gg/airplane/compat/ServerConfigurations.java +@@ -0,0 +1,77 @@ ++package gg.airplane.compat; ++ ++import co.aikar.timings.TimingsManager; ++import com.google.common.io.Files; ++import org.bukkit.configuration.InvalidConfigurationException; ++import org.bukkit.configuration.file.YamlConfiguration; ++ ++import java.io.ByteArrayOutputStream; ++import java.io.File; ++import java.io.FileInputStream; ++import java.io.IOException; ++import java.nio.charset.StandardCharsets; ++import java.util.Arrays; ++import java.util.List; ++import java.util.Properties; ++import java.util.stream.Collectors; ++ ++public class ServerConfigurations { ++ ++ public static final String[] configurationFiles = new String[]{ ++ "server.properties", ++ "bukkit.yml", ++ "spigot.yml", ++ "paper.yml", ++ "tuinity.yml", ++ "airplane.air" ++ }; ++ ++ public static String getCleanCopy(String configName) throws IOException { ++ File file = new File(configName); ++ List hiddenConfigs = TimingsManager.hiddenConfigs; ++ ++ if (configName.equals("airplane.air")) { ++ return Files.readLines(file, StandardCharsets.UTF_8) ++ .stream() ++ .filter(line -> !line.trim().startsWith("#")) ++ .map(line -> line.contains("token") ? " token = **" : line) ++ .collect(Collectors.joining("\n")); ++ } ++ ++ switch (Files.getFileExtension(configName)) { ++ case "properties": { ++ Properties properties = new Properties(); ++ try (FileInputStream inputStream = new FileInputStream(file)) { ++ properties.load(inputStream); ++ } ++ for (String hiddenConfig : hiddenConfigs) { ++ properties.remove(hiddenConfig); ++ } ++ ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ++ properties.store(outputStream, ""); ++ return Arrays.stream(outputStream.toString() ++ .split("\n")) ++ .filter(line -> !line.startsWith("#")) ++ .collect(Collectors.joining("\n")); ++ } ++ case "yml": { ++ YamlConfiguration configuration = new YamlConfiguration(); ++ try { ++ configuration.load(file); ++ } catch (InvalidConfigurationException e) { ++ throw new IOException(e); ++ } ++ configuration.options().header(null); ++ for (String key : configuration.getKeys(true)) { ++ if (hiddenConfigs.contains(key)) { ++ configuration.set(key, null); ++ } ++ } ++ return configuration.saveToString(); ++ } ++ default: ++ throw new IllegalArgumentException("Bad file type " + configName); ++ } ++ } ++ ++} +diff --git a/src/main/java/gg/airplane/flare/FlareCommand.java b/src/main/java/gg/airplane/flare/FlareCommand.java +new file mode 100644 +index 0000000000000000000000000000000000000000..81f5267d287138f6b47aa0a1f1d59d2d91a7e34a +--- /dev/null ++++ b/src/main/java/gg/airplane/flare/FlareCommand.java +@@ -0,0 +1,158 @@ ++package gg.airplane.flare; ++ ++import com.google.common.collect.ImmutableList; ++import gg.airplane.AirplaneConfig; ++import gg.airplane.flare.exceptions.UserReportableException; ++import gg.airplane.flare.profiling.AsyncProfilerIntegration; ++import net.md_5.bungee.api.ChatColor; ++import net.md_5.bungee.api.chat.BaseComponent; ++import net.md_5.bungee.api.chat.ClickEvent; ++import net.md_5.bungee.api.chat.ComponentBuilder; ++import net.md_5.bungee.api.chat.TextComponent; ++import org.bukkit.Bukkit; ++import org.bukkit.command.Command; ++import org.bukkit.command.CommandSender; ++import org.bukkit.command.ConsoleCommandSender; ++import org.bukkit.craftbukkit.scheduler.MinecraftInternalPlugin; ++import org.bukkit.util.StringUtil; ++ ++import java.util.ArrayList; ++import java.util.Collections; ++import java.util.List; ++ ++public class FlareCommand extends Command { ++ ++ private static final ChatColor HEX = ChatColor.of("#6a7eda"); ++ private static final BaseComponent[] PREFIX = new ComponentBuilder("Flare ✈ ") ++ .color(HEX) ++ .bold(true) ++ .create(); ++ ++ private static ComponentBuilder create(ComponentBuilder newBuilder) { ++ newBuilder.color(HEX); ++ newBuilder.bold(false); ++ ++ ComponentBuilder builder = new ComponentBuilder(); ++ builder.append(PREFIX); ++ builder.append(newBuilder.create()); ++ return builder; ++ } ++ ++ public FlareCommand() { ++ super("flare", "Profile your server with Flare", "/flare", Collections.singletonList("profile")); ++ this.setPermission("airplane.flare"); ++ } ++ ++ @Override ++ public boolean execute(CommandSender sender, String commandLabel, String[] args) { ++ if (!testPermission(sender)) return true; ++ if (AirplaneConfig.accessToken.length() == 0) { ++ BaseComponent clickable = new TextComponent("https://blog.airplane.gg/flare"); ++ clickable.setUnderlined(true); ++ clickable.setColor(HEX); ++ clickable.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://blog.airplane.gg/flare")); ++ ++ sender.sendMessage(create(new ComponentBuilder("Flare currently requires an access token to use. To learn more, visit ") ++ .color(HEX) ++ .append(clickable) ++ ) ++ .create()); ++ return true; ++ } ++ ++ if (AsyncProfilerIntegration.doesNotSupportProfiling()) { ++ sender.sendMessage(create(new ComponentBuilder("Profiling is not supported in this environment, reason: " + AsyncProfilerIntegration.getDisabledReason()) ++ .color(ChatColor.RED) ++ ).create()); ++ return true; ++ } ++ if (ProfilingManager.isProfiling()) { ++ if (args.length == 1 && args[0].equalsIgnoreCase("status")) { ++ sender.sendMessage(create(new ComponentBuilder("Status: " + AsyncProfilerIntegration.status())).create()); ++ return true; ++ } ++ if (ProfilingManager.stop()) { ++ if (!(sender instanceof ConsoleCommandSender)) { ++ sender.sendMessage(create(new ComponentBuilder("Profiling has been stopped.")).create()); ++ } ++ } else { ++ sender.sendMessage(create(new ComponentBuilder("Profiling has already been stopped.")).create()); ++ } ++ } else { ++ ProfileType profileType = null; ++ if (args.length > 0) { ++ try { ++ profileType = ProfileType.valueOf(args[0].toUpperCase()); ++ } catch (Exception e) { ++ sender.sendMessage(create(new ComponentBuilder("Invalid profile type ") ++ .append(args[0]).color(ChatColor.BOLD) ++ .append("!").color(HEX)).create()); ++ return false; ++ } ++ } ++ int interval = 5; ++ if (args.length > 1) { ++ try { ++ interval = Integer.parseInt(args[1]); ++ } catch (Exception e) { ++ sender.sendMessage(create(new ComponentBuilder("Invalid time in milliseconds ") ++ .append(args[1]).color(HEX).bold(true) ++ .append("!").color(HEX)).create()); ++ return false; ++ } ++ } ++ int finalInterval = interval; ++ ProfileType finalProfileType = profileType; ++ Bukkit.getScheduler().runTaskAsynchronously(new MinecraftInternalPlugin(), () -> { ++ try { ++ if (ProfilingManager.start(finalProfileType, finalInterval)) { ++ if (!(sender instanceof ConsoleCommandSender)) { ++ sender.sendMessage(create(new ComponentBuilder("Profiling has been started: " + ProfilingManager.getProfilingUrl().get()) ++ .event(new ClickEvent(ClickEvent.Action.OPEN_URL, ProfilingManager.getProfilingUrl().get()))) ++ .create()); ++ sender.sendMessage(create(new ComponentBuilder(" Run /" + commandLabel + " to stop profiling.")).create()); ++ } ++ } else { ++ sender.sendMessage(create(new ComponentBuilder("Profiling has already been started: " + ProfilingManager.getProfilingUrl().get()) ++ .event(new ClickEvent(ClickEvent.Action.OPEN_URL, ProfilingManager.getProfilingUrl().get()))) ++ .create()); ++ } ++ } catch (UserReportableException e) { ++ sender.sendMessage(create(new ComponentBuilder("Profiling failed to start: " + e.getUserError())).create()); ++ e.printStackTrace(); ++ } ++ }); ++ } ++ return true; ++ } ++ ++ @Override ++ public List tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException { ++ if (AsyncProfilerIntegration.doesNotSupportProfiling()) { ++ return ImmutableList.of(); ++ } ++ ++ List list = new ArrayList<>(); ++ if (AsyncProfilerIntegration.isProfiling()) { ++ if (args.length == 1) { ++ String lastWord = args[0]; ++ if (StringUtil.startsWithIgnoreCase("status", lastWord)) { ++ list.add("status"); ++ } ++ if (StringUtil.startsWithIgnoreCase("stop", lastWord)) { ++ list.add("stop"); ++ } ++ } ++ } else { ++ if (args.length <= 1) { ++ String lastWord = args.length == 0 ? "" : args[0]; ++ for (ProfileType value : ProfileType.values()) { ++ if (StringUtil.startsWithIgnoreCase(value.getInternalName(), lastWord)) { ++ list.add(value.name().toLowerCase()); ++ } ++ } ++ } ++ } ++ return list; ++ } ++} +diff --git a/src/main/java/gg/airplane/flare/FlareSetup.java b/src/main/java/gg/airplane/flare/FlareSetup.java +new file mode 100644 +index 0000000000000000000000000000000000000000..27ac32779e700494aeca8b425edb2871d3ec29cc +--- /dev/null ++++ b/src/main/java/gg/airplane/flare/FlareSetup.java +@@ -0,0 +1,146 @@ ++package gg.airplane.flare; ++ ++import com.google.common.cache.Cache; ++import com.google.common.cache.CacheBuilder; ++import gg.airplane.AirplaneConfig; ++import gg.airplane.AirplaneLogger; ++import gg.airplane.compat.ServerConfigurations; ++import gg.airplane.flare.profiling.AsyncProfilerIntegration; ++import net.minecraft.server.MinecraftServer; ++import org.bukkit.Bukkit; ++import org.bukkit.craftbukkit.scheduler.MinecraftInternalPlugin; ++import org.bukkit.plugin.Plugin; ++import org.bukkit.plugin.java.PluginClassLoader; ++import org.bukkit.scheduler.BukkitTask; ++ ++import java.io.IOException; ++import java.util.HashMap; ++import java.util.LinkedHashMap; ++import java.util.Map; ++import java.util.concurrent.TimeUnit; ++import java.util.logging.Level; ++ ++public class FlareSetup { ++ ++ public static void init() { ++ ServerConnector.connector = new ServerConnector() { ++ ++ private final Cache pluginNameCache = CacheBuilder.newBuilder() ++ .expireAfterAccess(1, TimeUnit.MINUTES) ++ .maximumSize(1024) ++ .build(); ++ ++ @Override ++ public String getPluginForClass(String name) { ++ if (name.contains(".") && name.charAt(0) != '/') { ++ if (name.startsWith("net.minecraft") || name.startsWith("java.") || name.startsWith("com.mojang") || name.startsWith("com.google") || name.startsWith("it.unimi") || name.startsWith("sun")) { ++ return null; ++ } ++ ++ String className = name.substring(0, name.lastIndexOf(".")); ++ String existing = pluginNameCache.getIfPresent(name); ++ if (existing != null) { ++ return existing.isEmpty() ? null : existing; ++ } ++ ++ String newValue = ""; ++ ++ for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) { ++ ClassLoader classLoader = plugin.getClass().getClassLoader(); ++ if (classLoader instanceof PluginClassLoader) { ++ try { ++ Class aClass = ((PluginClassLoader) classLoader)._airplane_findClass(className); ++ if (aClass != null) { ++ newValue = plugin.getName(); ++ } ++ } catch (ClassNotFoundException | IllegalAccessError e) { ++ } ++ } ++ } ++ ++ pluginNameCache.put(name, newValue); ++ } ++ return null; ++ } ++ ++ @Override ++ public Thread getMainThread() { ++ return MinecraftServer.getServer().serverThread; ++ } ++ ++ @Override ++ public Map getConfigurations() { ++ Map map = new LinkedHashMap<>(); ++ for (String configurationFile : ServerConfigurations.configurationFiles) { ++ try { ++ map.put(configurationFile, ServerConfigurations.getCleanCopy(configurationFile)); ++ } catch (IOException e) { ++ this.log(Level.WARNING, "Failed to load config file " + configurationFile, e); ++ } ++ } ++ return map; ++ } ++ ++ @Override ++ public void log(Level level, String s) { ++ AirplaneLogger.LOGGER.log(level, s); ++ } ++ ++ @Override ++ public void log(Level level, String s, Throwable throwable) { ++ AirplaneLogger.LOGGER.log(level, s, throwable); ++ } ++ ++ @Override ++ public String getPrimaryVersion() { ++ return Bukkit.getVersion(); ++ } ++ ++ @Override ++ public String getApiVersion() { ++ return "bukkit:" + Bukkit.getBukkitVersion(); ++ } ++ ++ @Override ++ public String getMcVersion() { ++ return Bukkit.getMinecraftVersion(); ++ } ++ ++ private final Map scheduledRunnables = new HashMap<>(); ++ ++ @Override ++ public void schedule(Runnable runnable, long l, long l1) { ++ BukkitTask task = Bukkit.getScheduler().runTaskTimer(new MinecraftInternalPlugin(), runnable, l, l1); ++ this.scheduledRunnables.put(runnable, task); ++ } ++ ++ @Override ++ public void scheduleAsync(Runnable runnable, long l, long l1) { ++ BukkitTask task = Bukkit.getScheduler().runTaskTimerAsynchronously(new MinecraftInternalPlugin(), runnable, l, l1); ++ this.scheduledRunnables.put(runnable, task); ++ } ++ ++ @Override ++ public void cancel(Runnable runnable) { ++ this.scheduledRunnables.get(runnable).cancel(); ++ } ++ ++ @Override ++ public void runAsync(Runnable runnable) { ++ Bukkit.getScheduler().runTaskAsynchronously(new MinecraftInternalPlugin(), runnable); ++ } ++ ++ @Override ++ public String getWebUrl() { ++ return AirplaneConfig.profileWebUrl; ++ } ++ ++ @Override ++ public String getToken() { ++ return AirplaneConfig.accessToken; ++ } ++ }; ++ AsyncProfilerIntegration.init(); ++ } ++ ++} +diff --git a/src/main/java/gg/airplane/flare/ProfilingManager.java b/src/main/java/gg/airplane/flare/ProfilingManager.java +new file mode 100644 +index 0000000000000000000000000000000000000000..86d6650d174a7794a7ebe793cad033b42215c321 +--- /dev/null ++++ b/src/main/java/gg/airplane/flare/ProfilingManager.java +@@ -0,0 +1,65 @@ ++package gg.airplane.flare; ++ ++import gg.airplane.AirplaneConfig; ++import gg.airplane.AirplaneLogger; ++import gg.airplane.flare.exceptions.UserReportableException; ++import gg.airplane.flare.profiling.ProfileController; ++import org.bukkit.Bukkit; ++import org.bukkit.craftbukkit.scheduler.MinecraftInternalPlugin; ++import org.bukkit.scheduler.BukkitTask; ++ ++import javax.annotation.Nullable; ++import java.util.Optional; ++import java.util.logging.Level; ++ ++public class ProfilingManager { ++ ++ private static ProfileController currentController; ++ private static BukkitTask currentTask = null; ++ ++ public static synchronized boolean isProfiling() { ++ return currentController != null; ++ } ++ ++ public static synchronized Optional getProfilingUrl() { ++ if (!isProfiling()) { ++ return Optional.empty(); ++ } ++ return Optional.of(AirplaneConfig.profileWebUrl + "/" + currentController.getId()); ++ } ++ ++ public static synchronized boolean start(@Nullable ProfileType type, int interval) throws UserReportableException { ++ if (isProfiling()) { ++ return false; ++ } ++ if (Bukkit.isPrimaryThread()) { ++ throw new UserReportableException("Profiles should be started off-thread"); ++ } ++ currentController = new ProfileController(type, Math.max(interval, 1)); // don't allow lower than 20ms: https://bugzilla.redhat.com/show_bug.cgi?id=645528 ++ currentTask = Bukkit.getScheduler().runTaskLater(new MinecraftInternalPlugin(), ProfilingManager::stop, 20 * 60 * 15); ++ AirplaneLogger.LOGGER.log(Level.INFO, "Flare has been started: " + getProfilingUrl().orElse("An error occurred retrieving the Flare URL.")); ++ return true; ++ } ++ ++ public static synchronized boolean stop() { ++ if (!isProfiling()) { ++ return false; ++ } ++ AirplaneLogger.LOGGER.log(Level.INFO, "Flare has been stopped: " + getProfilingUrl().orElse("An error occurred retrieving the Flare URL.")); ++ try { ++ currentController.cancel(); ++ } catch (Throwable t) { ++ AirplaneLogger.LOGGER.log(Level.WARNING, "Error occurred stopping Flare", t); ++ } ++ currentController = null; ++ ++ try { ++ currentTask.cancel(); ++ } catch (Throwable t) { ++ AirplaneLogger.LOGGER.log(Level.WARNING, "Error occurred stopping Flare", t); ++ } ++ currentTask = null; ++ return true; ++ } ++ ++} +diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java +index b8a45c80b6691214e513286262f31b7b5b1dd5eb..a85a844a4766cde16eea9e814abfec29d8935c0f 100644 +--- a/src/main/java/net/minecraft/server/DedicatedServer.java ++++ b/src/main/java/net/minecraft/server/DedicatedServer.java +@@ -187,6 +187,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer + com.tuinity.tuinity.config.TuinityConfig.init((java.io.File) options.valueOf("tuinity-settings")); // Tuinity - Server Config + gg.airplane.AirplaneConfig.load(); // Airplane - config + gg.airplane.commands.AirplaneCommands.init(); // Airplane - command ++ gg.airplane.flare.FlareSetup.init(); // Airplane + + this.setPVP(dedicatedserverproperties.pvp); + this.setAllowFlight(dedicatedserverproperties.allowFlight); +diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/MinecraftInternalPlugin.java b/src/main/java/org/bukkit/craftbukkit/scheduler/MinecraftInternalPlugin.java +index 49dc0c441b9dd7e7745cf15ced67f383ebee1f99..b343d8ee7435312929558efdaf127334d8e2fff6 100644 +--- a/src/main/java/org/bukkit/craftbukkit/scheduler/MinecraftInternalPlugin.java ++++ b/src/main/java/org/bukkit/craftbukkit/scheduler/MinecraftInternalPlugin.java +@@ -19,7 +19,8 @@ public class MinecraftInternalPlugin extends PluginBase { + private boolean enabled = true; + + private final String pluginName; +- private PluginDescriptionFile pdf; ++ private org.bukkit.plugin.PluginLogger logger; ++ private PluginDescriptionFile pdf; // Airplane + + public MinecraftInternalPlugin() { + this.pluginName = "Minecraft"; +@@ -72,7 +73,12 @@ public class MinecraftInternalPlugin extends PluginBase { + + @Override + public PluginLogger getLogger() { +- throw new UnsupportedOperationException("Not supported."); ++ // Airplane start ++ if (this.logger == null) { ++ this.logger = new org.bukkit.plugin.PluginLogger(this); // Airplane ++ } ++ return this.logger; ++ // Airplane end + } + + @Override +@@ -82,7 +88,7 @@ public class MinecraftInternalPlugin extends PluginBase { + + @Override + public Server getServer() { +- throw new UnsupportedOperationException("Not supported."); ++ return org.bukkit.Bukkit.getServer(); // Airplane - impl + } + + @Override diff --git a/patches/Airplane/patches/server/0018-Multithreaded-entity-tracking.patch b/patches/Airplane/patches/server/0018-Multithreaded-entity-tracking.patch new file mode 100644 index 00000000..07cb7131 --- /dev/null +++ b/patches/Airplane/patches/server/0018-Multithreaded-entity-tracking.patch @@ -0,0 +1,403 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Paul Sauve +Date: Fri, 12 Feb 2021 16:29:41 -0600 +Subject: [PATCH] Multithreaded entity tracking + +Adds a configuration option to run the tracker on multiple threads. +This will generally be faster than the single threaded approach, +unless you don't have a lot of entities/players. + +Airplane +Copyright (C) 2020 Technove LLC + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +diff --git a/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java +index be408aebbccbda46e8aa82ef337574137cfa0096..b9bdce7c7ca8b7b107b0dca165d722321c16229d 100644 +--- a/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java ++++ b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java +@@ -16,7 +16,7 @@ public final class IteratorSafeOrderedReferenceSet { + + /* list impl */ + protected E[] listElements; +- protected int listSize; ++ protected int listSize; public int getListSize() { return this.listSize; } // Airplane - getter + + protected final double maxFragFactor; + +diff --git a/src/main/java/gg/airplane/AirplaneConfig.java b/src/main/java/gg/airplane/AirplaneConfig.java +index 3a5a65a2f282b00602643470520fd05fba5907fb..e183b6cae23935823fa9e0f767e499a8102b0ad1 100644 +--- a/src/main/java/gg/airplane/AirplaneConfig.java ++++ b/src/main/java/gg/airplane/AirplaneConfig.java +@@ -87,4 +87,18 @@ public class AirplaneConfig { + // todo lookup token (off-thread) and let users know if their token is valid + } + ++ ++ public static boolean multithreadedEntityTracker = true; ++ public static boolean entityTrackerAsyncPackets = false; ++ ++ private static void entityTracker() { ++ manual.setComment("tracker", "Options to improve the performance of the entity tracker"); ++ ++ multithreadedEntityTracker = manual.get("tracker.multithreaded", multithreadedEntityTracker, ++ "This enables the multithreading of the tracker."); ++ entityTrackerAsyncPackets = manual.get("tracker.unsafe-async-packets", entityTrackerAsyncPackets, ++ "This option can break plugins that assume packets from the", ++ "entity tracker will be sent sync."); ++ } ++ + } +diff --git a/src/main/java/gg/airplane/structs/TrackQueue.java b/src/main/java/gg/airplane/structs/TrackQueue.java +new file mode 100644 +index 0000000000000000000000000000000000000000..601694aa6d36ce230d84cc6b55231d2fc3af30e9 +--- /dev/null ++++ b/src/main/java/gg/airplane/structs/TrackQueue.java +@@ -0,0 +1,84 @@ ++package gg.airplane.structs; ++ ++import com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet; ++import net.minecraft.server.Chunk; ++import net.minecraft.server.MinecraftServer; ++import org.apache.logging.log4j.Level; ++ ++import java.util.concurrent.ConcurrentLinkedQueue; ++import java.util.concurrent.ForkJoinPool; ++import java.util.concurrent.atomic.AtomicInteger; ++ ++/** ++ * Helper class to handle processing a track queue. ++ */ ++public class TrackQueue { ++ ++ private final IteratorSafeOrderedReferenceSet chunks; ++ private final ForkJoinPool pool = ForkJoinPool.commonPool(); ++ private final AtomicInteger taskIndex = new AtomicInteger(); ++ ++ private final ConcurrentLinkedQueue mainThreadTasks; ++ ++ public TrackQueue(IteratorSafeOrderedReferenceSet chunks, ConcurrentLinkedQueue mainThreadTasks) { ++ this.chunks = chunks; ++ this.mainThreadTasks = mainThreadTasks; ++ } ++ ++ public void start() { ++ int iterator = this.chunks.createRawIterator(); ++ if (iterator == -1) { ++ return; ++ } ++ try { ++ this.taskIndex.set(iterator); ++ ++ for (int i = 0; i < this.pool.getParallelism(); i++) { ++ this.pool.execute(this::run); ++ } ++ ++ while (this.taskIndex.get() < this.chunks.getListSize()) { ++ this.runMainThreadTasks(); ++ this.handleTask(); // assist ++ } ++ this.runMainThreadTasks(); // finish tasks ++ } finally { ++ this.chunks.finishRawIterator(); ++ } ++ } ++ ++ private void runMainThreadTasks() { ++ Runnable task; ++ while ((task = this.mainThreadTasks.poll()) != null) { ++ try { ++ task.run(); ++ } catch (Throwable t) { ++ MinecraftServer.LOGGER.log(Level.WARN, "Tasks failed while ticking track queue", t); ++ } ++ } ++ ++ } ++ ++ private void run() { ++ while (handleTask()); ++ } ++ ++ private boolean handleTask() { ++ int index; ++ while ((index = this.taskIndex.getAndIncrement()) < this.chunks.getListSize()) { ++ Chunk chunk = this.chunks.rawGet(index); ++ if (chunk != null) { ++ try { ++ chunk.entityTracker.run(); ++ } catch (Throwable t) { ++ MinecraftServer.LOGGER.log(Level.WARN, "Ticking tracker failed", t); ++ } ++ ++ return true; ++ } ++ } ++ ++ return false; ++ } ++ ++} +diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java +index 0924f6b484468f3cf3c2d405101c0158c12d69e6..1d65d884d1f31a73333e4cf6a9ce30d7863dab9f 100644 +--- a/src/main/java/net/minecraft/server/Chunk.java ++++ b/src/main/java/net/minecraft/server/Chunk.java +@@ -65,6 +65,26 @@ public class Chunk implements IChunkAccess { + } + // Airplane end + ++ // Airplane start - entity tracker runnable ++ // prevents needing to allocate new lambda in processTrackQueue ++ public final Runnable entityTracker = new Runnable() { ++ @Override ++ public void run() { ++ Entity[] entities = Chunk.this.entities.getRawData(); ++ for (int i = 0, len = Chunk.this.entities.size(); i < len; ++i) { ++ Entity entity = entities[i]; ++ if (entity != null) { ++ PlayerChunkMap.EntityTracker tracker = ((WorldServer) Chunk.this.getWorld()).getChunkProvider().playerChunkMap.trackedEntities.get(entity.getId()); ++ if (tracker != null) { ++ tracker.updatePlayers(tracker.tracker.getPlayersInTrackRange()); ++ tracker.tickEntry(); ++ } ++ } ++ } ++ } ++ }; ++ // Airplane end ++ + public Chunk(World world, ChunkCoordIntPair chunkcoordintpair, BiomeStorage biomestorage) { + this(world, chunkcoordintpair, biomestorage, ChunkConverter.a, TickListEmpty.b(), TickListEmpty.b(), 0L, (ChunkSection[]) null, (Consumer) null); + } +diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java +index 912952ff7c50b416bddd63469a592cf563e8a2cd..5118e0c0dd908d7cafe1f53e2ff28d44a6138442 100644 +--- a/src/main/java/net/minecraft/server/EntityPlayer.java ++++ b/src/main/java/net/minecraft/server/EntityPlayer.java +@@ -52,7 +52,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { + public NetworkManager networkManager; // Paper + public final MinecraftServer server; + public final PlayerInteractManager playerInteractManager; +- public final Deque removeQueue = new ArrayDeque<>(); // Paper ++ public final Deque removeQueue = new java.util.concurrent.ConcurrentLinkedDeque<>(); // Paper // Airplane concurrent deque + private final AdvancementDataPlayer advancementDataPlayer; + private final ServerStatisticManager serverStatisticManager; + private float lastHealthScored = Float.MIN_VALUE; +diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java +index 2f758b3d3eaf5d5781a2072d0f3f7442b73cb9a8..63bcd1b61d0485b064d619ddfa0e201034087772 100644 +--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java ++++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java +@@ -46,6 +46,10 @@ public class EntityTrackerEntry { + * Requested in https://github.com/PaperMC/Paper/issues/1537 to allow intercepting packets + */ + public void sendPlayerPacket(EntityPlayer player, Packet packet) { ++ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) { ++ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> sendPlayerPacket(player, packet)); ++ return; ++ } + player.playerConnection.sendPacket(packet); + } + +@@ -74,7 +78,7 @@ public class EntityTrackerEntry { + + public final void tick() { this.a(); } // Paper - OBFHELPER + public void a() { +- com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Tracker update"); // Tuinity ++ //com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Tracker update"); // Tuinity // Airplane - allow multithreaded + List list = this.tracker.passengers; // Paper - do not copy list + + if (!list.equals(this.p)) { +@@ -88,6 +92,8 @@ public class EntityTrackerEntry { + ItemStack itemstack = entityitemframe.getItem(); + + if (this.tickCounter % 10 == 0 && itemstack.getItem() instanceof ItemWorldMap) { // CraftBukkit - Moved this.tickCounter % 10 logic here so item frames do not enter the other blocks ++ // Airplane start - process maps on main ++ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> { + WorldMap worldmap = ItemWorldMap.getSavedMap(itemstack, this.b); + Iterator iterator = this.trackedPlayers.iterator(); // CraftBukkit + +@@ -101,6 +107,8 @@ public class EntityTrackerEntry { + entityplayer.playerConnection.sendPacket(packet); + } + } ++ }); ++ // Airplane end + } + + this.c(); +@@ -245,18 +253,25 @@ public class EntityTrackerEntry { + // CraftBukkit start - Create PlayerVelocity event + boolean cancelled = false; + +- if (this.tracker instanceof EntityPlayer) { ++ if (this.tracker instanceof EntityPlayer && PlayerVelocityEvent.getHandlerList().getRegisteredListeners().length > 0) { // Airplane - ensure there's listeners ++ // Airplane start - run on main thread ++ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> { + Player player = (Player) this.tracker.getBukkitEntity(); + org.bukkit.util.Vector velocity = player.getVelocity(); + + PlayerVelocityEvent event = new PlayerVelocityEvent(player, velocity.clone()); + this.tracker.world.getServer().getPluginManager().callEvent(event); + +- if (event.isCancelled()) { +- cancelled = true; +- } else if (!velocity.equals(event.getVelocity())) { ++ if (!event.isCancelled() && !velocity.equals(event.getVelocity())) { + player.setVelocity(event.getVelocity()); + } ++ if (!event.isCancelled()) { ++ this.broadcastIncludingSelf(new PacketPlayOutEntityVelocity(this.tracker)); // duplicate from !cancelled below ++ } ++ ++ }); ++ cancelled = true; // don't broadcast until the event has finished ++ // Airplane end + } + + if (!cancelled) { +@@ -356,7 +371,9 @@ public class EntityTrackerEntry { + if (!list.isEmpty()) { + consumer.accept(new PacketPlayOutEntityEquipment(this.tracker.getId(), list)); + } ++ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> { // Airplane + ((EntityLiving) this.tracker).updateEquipment(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending ++ }); // Airplane + } + + // CraftBukkit start - Fix for nonsensical head yaw +@@ -434,6 +451,10 @@ public class EntityTrackerEntry { + // Paper end + + private void broadcastIncludingSelf(Packet packet) { ++ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) { ++ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> broadcastIncludingSelf(packet)); ++ return; ++ } + this.f.accept(packet); + if (this.tracker instanceof EntityPlayer) { + ((EntityPlayer) this.tracker).playerConnection.sendPacket(packet); +diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java +index e7c373e28054c49459a44faee77301e448baea44..60aa3813361947721e847ff11e50bfbc0f4a10cd 100644 +--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java ++++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java +@@ -728,6 +728,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + return (PlayerChunk) (this.hasPendingVisibleUpdate ? this.pendingVisibleChunks.get(i) : ((ProtectedVisibleChunksMap)this.visibleChunks).safeGet(i)); + // Paper end + } ++ // Airplane start - since neither map can be updated during tracker tick, it's safe to allow direct retrieval here ++ private PlayerChunk trackerGetVisibleChunk(long i) { ++ return this.hasPendingVisibleUpdate ? this.pendingVisibleChunks.get(i) : ((ProtectedVisibleChunksMap) this.visibleChunks).safeGet(i); ++ } ++ // Airplane end + + protected final IntSupplier getPrioritySupplier(long i) { return c(i); } // Paper - OBFHELPER + protected IntSupplier c(long i) { +@@ -2127,10 +2132,30 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { + entity.tracker = null; // Paper - We're no longer tracked + } + ++ // Airplane start - tools to ensure main thread ++ private final java.util.concurrent.ConcurrentLinkedQueue trackerMainQueue = new java.util.concurrent.ConcurrentLinkedQueue<>(); ++ private gg.airplane.structs.TrackQueue trackQueue; ++ ++ void trackerEnsureMain(Runnable runnable) { ++ if (this.world.serverThread == Thread.currentThread()) { ++ runnable.run(); ++ } else { ++ this.trackerMainQueue.add(runnable); ++ } ++ } ++ // Airplane end ++ + // Paper start - optimised tracker + private final void processTrackQueue() { + this.world.timings.tracker1.startTiming(); + try { ++ // Airplane start - multithreaded tracker ++ if (this.trackQueue == null) this.trackQueue = new gg.airplane.structs.TrackQueue(this.world.getChunkProvider().entityTickingChunks, trackerMainQueue); ++ if (gg.airplane.AirplaneConfig.multithreadedEntityTracker) { ++ this.trackQueue.start(); ++ return; ++ } ++ // Airplane end + com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet.Iterator iterator = this.world.getChunkProvider().entityTickingChunks.iterator(); + try { + while (iterator.hasNext()) { +@@ -2392,7 +2417,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially + public class EntityTracker { + + final EntityTrackerEntry trackerEntry; // Paper - private -> package private +- private final Entity tracker; ++ protected final Entity tracker; // Airplane - public for chunk + private final int trackingDistance; + private SectionPosition e; + // Paper start +@@ -2411,7 +2436,9 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially + // Paper start - use distance map to optimise tracker + com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet lastTrackerCandidates; + +- final void updatePlayers(com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet newTrackerCandidates) { ++ synchronized final void tickEntry() { this.trackerEntry.tick(); } // Airplane - move entry tick into sync block ++ ++ synchronized final void updatePlayers(com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet newTrackerCandidates) { // Airplane + com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet oldTrackerCandidates = this.lastTrackerCandidates; + this.lastTrackerCandidates = newTrackerCandidates; + +@@ -2452,7 +2479,13 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially + return this.tracker.getId(); + } + +- public void broadcast(Packet packet) { ++ public synchronized void broadcast(Packet packet) { // Airplane - synchronized for tracked player ++ // Airplane start ++ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) { ++ trackerEnsureMain(() -> broadcast(packet)); ++ return; ++ } ++ // Airplane end + Iterator iterator = this.trackedPlayers.iterator(); + + while (iterator.hasNext()) { +@@ -2464,6 +2497,12 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially + } + + public void broadcastIncludingSelf(Packet packet) { ++ // Airplane start ++ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) { ++ trackerEnsureMain(() -> broadcastIncludingSelf(packet)); ++ return; ++ } ++ // Airplane end + this.broadcast(packet); + if (this.tracker instanceof EntityPlayer) { + ((EntityPlayer) this.tracker).playerConnection.sendPacket(packet); +@@ -2490,8 +2529,8 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially + + } + +- public void updatePlayer(EntityPlayer entityplayer) { +- org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot ++ public synchronized void updatePlayer(EntityPlayer entityplayer) { // Airplane - sync for access to map ++ //org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot // Airplane - allow sync for tracker + if (entityplayer != this.tracker) { + // Paper start - remove allocation of Vec3D here + //Vec3D vec3d = entityplayer.getPositionVector().d(this.tracker.getPositionVector()); // MC-155077, SPIGOT-5113 +@@ -2512,7 +2551,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially + */ + int x = this.tracker.chunkX, z = this.tracker.chunkZ; + long chunkcoordintpair = ChunkCoordIntPair.pair(x, z); +- PlayerChunk playerchunk = PlayerChunkMap.this.getVisibleChunk(chunkcoordintpair); ++ PlayerChunk playerchunk = PlayerChunkMap.this.trackerGetVisibleChunk(chunkcoordintpair); // Airplane + + if (playerchunk != null && playerchunk.getSendingChunk() != null) { // Paper - no-tick view distance + flag1 = PlayerChunkMap.someDistanceCalculation(x, z, entityplayer, false) <= PlayerChunkMap.this.viewDistance; diff --git a/patches/Akarin/patches/server/0001-Disable-the-Snooper.patch b/patches/Akarin/patches/server/0001-Disable-the-Snooper.patch index f719b7f3..7c2312db 100644 --- a/patches/Akarin/patches/server/0001-Disable-the-Snooper.patch +++ b/patches/Akarin/patches/server/0001-Disable-the-Snooper.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable the Snooper diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 33d43478b1bc4b0ca3f16ba80e0cd99bc6f5311e..d4dc05a1066bfcd4cdc1bfa04e46aa2d8d6e2fe5 100644 +index 17591457a33e6994cd26bb1487a7879a11411a9c..e9c0556af0a8ffd4d85e87bcccf2908444d967eb 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1322,6 +1322,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant 100) { // Spigot this.snooper.a(); } -@@ -1329,6 +1331,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant -Date: Tue, 16 Feb 2021 16:28:00 -0600 -Subject: [PATCH] Prevent grindstones from overstacking items - - -diff --git a/src/main/java/net/minecraft/server/ContainerGrindstone.java b/src/main/java/net/minecraft/server/ContainerGrindstone.java -index 39f809a37b58e008e7ef32c0759eeecbde26bc94..458d9828a9e3023dd469f76320a1d513c85fd892 100644 ---- a/src/main/java/net/minecraft/server/ContainerGrindstone.java -+++ b/src/main/java/net/minecraft/server/ContainerGrindstone.java -@@ -183,7 +183,7 @@ public class ContainerGrindstone extends Container { - i = Math.max(item.getMaxDurability() - l, 0); - itemstack2 = this.b(itemstack, itemstack1); - if (!itemstack2.e()) { -- if (!ItemStack.matches(itemstack, itemstack1)) { -+ if (!ItemStack.matches(itemstack, itemstack1) || itemstack2.getMaxStackSize() == 1) { // Paper - this.resultInventory.setItem(0, ItemStack.b); - this.c(); - return; diff --git a/patches/Origami/patches/server/0001-Origami-Server-Config.patch b/patches/Origami/patches/server/0001-Origami-Server-Config.patch index 9aba9ba1..f75d464a 100644 --- a/patches/Origami/patches/server/0001-Origami-Server-Config.patch +++ b/patches/Origami/patches/server/0001-Origami-Server-Config.patch @@ -150,10 +150,10 @@ index bfc7a1c234b5fe4aa58b48c3673f473d26561077..4ffaf36b40b32be25bd1944d8b8ddbc3 this.chunkPacketBlockController = this.paperConfig.antiXray ? new ChunkPacketBlockControllerAntiXray(this, executor) : ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray this.generator = gen; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index dfe6777db04bb550ae0e761addd26b2d5abf3baf..48dd6de4acf0ef0536a4c562f3eb5f2f90878924 100644 +index f9fd40d33ac72f859a0a7012dbab348fca40c375..12b92ee0491c82a72d1646d14116e187dd965fe6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -862,6 +862,7 @@ public final class CraftServer implements Server { +@@ -866,6 +866,7 @@ public final class CraftServer implements Server { 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 @@ -161,7 +161,7 @@ index dfe6777db04bb550ae0e761addd26b2d5abf3baf..48dd6de4acf0ef0536a4c562f3eb5f2f for (WorldServer world : console.getWorlds()) { world.worldDataServer.setDifficulty(config.difficulty); world.setSpawnFlags(config.spawnMonsters, config.spawnAnimals); -@@ -898,6 +899,7 @@ public final class CraftServer implements Server { +@@ -902,6 +903,7 @@ public final class CraftServer implements Server { world.paperConfig.init(); // Paper world.tuinityConfig.init(); // Tuinity - Server Config world.purpurConfig.init(); // Purpur diff --git a/patches/Origami/patches/server/0005-Hopper-Optimizations.patch b/patches/Origami/patches/server/0005-Hopper-Optimizations.patch index ee12ffac..f18b68ea 100644 --- a/patches/Origami/patches/server/0005-Hopper-Optimizations.patch +++ b/patches/Origami/patches/server/0005-Hopper-Optimizations.patch @@ -9,14 +9,13 @@ chain. - Only set check cooldown if it's bigger than already set cooldown diff --git a/src/main/java/de/minebench/origami/OrigamiConfig.java b/src/main/java/de/minebench/origami/OrigamiConfig.java -index a1a585f5b4b2c10c41b184636149c8dde2a3ae51..70490d7b7e0dd5fbb5ef475c20223670dc8cf1b2 100644 +index a1a585f5b4b2c10c41b184636149c8dde2a3ae51..f02eb8478cef4ffccee83a1ec4ae5ffbfb0591c1 100644 --- a/src/main/java/de/minebench/origami/OrigamiConfig.java +++ b/src/main/java/de/minebench/origami/OrigamiConfig.java -@@ -120,6 +120,13 @@ public final class OrigamiConfig { +@@ -120,6 +120,12 @@ public final class OrigamiConfig { Bukkit.getLogger().info("Returning matching chunk rom fast search directly instead of loading it."); } } -+ + public boolean tickEmptyHoppers = false; + public int fullHopperCooldown = 128; + private void hopperOptimizations() { @@ -28,10 +27,10 @@ index a1a585f5b4b2c10c41b184636149c8dde2a3ae51..70490d7b7e0dd5fbb5ef475c20223670 } \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/BlockComposter.java b/src/main/java/net/minecraft/server/BlockComposter.java -index ccb61d656b57f02efaeb60df4a70169aef302eed..55a5999080b831217b88ed3657e95218fe982c18 100644 +index e0dc2f799634d43023dfb37a70620dc8c20c63aa..115eb270c5b5f19432e30eec41a652939a61dd94 100644 --- a/src/main/java/net/minecraft/server/BlockComposter.java +++ b/src/main/java/net/minecraft/server/BlockComposter.java -@@ -250,6 +250,7 @@ public class BlockComposter extends Block implements IInventoryHolder { +@@ -251,6 +251,7 @@ public class BlockComposter extends Block implements IInventoryHolder { if ((Integer) iblockdata.get(BlockComposter.a) == 7) { worldserver.setTypeAndData(blockposition, (IBlockData) iblockdata.a((IBlockState) BlockComposter.a), 3); worldserver.playSound((EntityHuman) null, blockposition, SoundEffects.BLOCK_COMPOSTER_READY, SoundCategory.BLOCKS, 1.0F, 1.0F); @@ -40,10 +39,10 @@ index ccb61d656b57f02efaeb60df4a70169aef302eed..55a5999080b831217b88ed3657e95218 } diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java -index ec37d2c3b0393c43097bdfc6064ebe3ab8bc28ce..954d37ca9e1079616836d3f441845b37c5a541f3 100644 +index c25dce9a75b0e79f9b59f31892d863f46e2565e9..7d2c2e6e58741a6da10117c62a809ae47ee341ee 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java -@@ -138,6 +138,13 @@ public class EntityItem extends Entity { +@@ -139,6 +139,13 @@ public class EntityItem extends Entity { } } @@ -58,10 +57,10 @@ index ec37d2c3b0393c43097bdfc6064ebe3ab8bc28ce..954d37ca9e1079616836d3f441845b37 // CraftBukkit start - fire ItemDespawnEvent if (org.bukkit.craftbukkit.event.CraftEventFactory.callItemDespawnEvent(this).isCancelled()) { diff --git a/src/main/java/net/minecraft/server/EntityMinecartContainer.java b/src/main/java/net/minecraft/server/EntityMinecartContainer.java -index 574838bd33a46e464ff7d801345613a3351f487f..9b5146fcf618f5bebc71fdfd8e06294a0226e8c2 100644 +index 8e13aebb7043ddfb4b1c02bac46081eb15e906bf..d65044ef409f6a8a05626b655aa88c4e6d434e86 100644 --- a/src/main/java/net/minecraft/server/EntityMinecartContainer.java +++ b/src/main/java/net/minecraft/server/EntityMinecartContainer.java -@@ -137,7 +137,6 @@ public abstract class EntityMinecartContainer extends EntityMinecartAbstract imp +@@ -138,7 +138,6 @@ public abstract class EntityMinecartContainer extends EntityMinecartAbstract imp if (!itemstack.isEmpty() && itemstack.getCount() > this.getMaxStackSize()) { itemstack.setCount(this.getMaxStackSize()); } @@ -69,7 +68,7 @@ index 574838bd33a46e464ff7d801345613a3351f487f..9b5146fcf618f5bebc71fdfd8e06294a } @Override -@@ -151,7 +150,25 @@ public abstract class EntityMinecartContainer extends EntityMinecartAbstract imp +@@ -152,7 +151,25 @@ public abstract class EntityMinecartContainer extends EntityMinecartAbstract imp } @Override @@ -97,7 +96,7 @@ index 574838bd33a46e464ff7d801345613a3351f487f..9b5146fcf618f5bebc71fdfd8e06294a @Override public boolean a(EntityHuman entityhuman) { diff --git a/src/main/java/net/minecraft/server/TileEntityContainer.java b/src/main/java/net/minecraft/server/TileEntityContainer.java -index 74390aebd353c969353a6efc0904bafe30774d65..9ce4f340d097132401054a1bb38abb73aa6a5fb1 100644 +index 74390aebd353c969353a6efc0904bafe30774d65..b88df070e8e496be43e869b17d312ddf7f788595 100644 --- a/src/main/java/net/minecraft/server/TileEntityContainer.java +++ b/src/main/java/net/minecraft/server/TileEntityContainer.java @@ -84,4 +84,14 @@ public abstract class TileEntityContainer extends TileEntity implements IInvento @@ -109,7 +108,7 @@ index 74390aebd353c969353a6efc0904bafe30774d65..9ce4f340d097132401054a1bb38abb73 + @Override + public void update() { + super.update(); -+ if (world != null) { ++ if (world != null && !world.origamiConfig.tickEmptyHoppers) { + TileEntityHopper.enableTicking(world.getTileEntity(position.shift(EnumDirection.DOWN)), world.spigotConfig.hopperCheck); + } + } diff --git a/patches/Origami/patches/server/0006-Add-option-to-disable-observer-clocks.patch b/patches/Origami/patches/server/0006-Add-option-to-disable-observer-clocks.patch index 32d79a9f..354a892d 100644 --- a/patches/Origami/patches/server/0006-Add-option-to-disable-observer-clocks.patch +++ b/patches/Origami/patches/server/0006-Add-option-to-disable-observer-clocks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to disable observer clocks diff --git a/src/main/java/de/minebench/origami/OrigamiConfig.java b/src/main/java/de/minebench/origami/OrigamiConfig.java -index 70490d7b7e0dd5fbb5ef475c20223670dc8cf1b2..bf6b9f4dbd8c3f649b4e059f41c0e72e0d0f70c6 100644 +index f02eb8478cef4ffccee83a1ec4ae5ffbfb0591c1..047e7d42ce54aa1cb28cfe8b194bf5c6c75824ad 100644 --- a/src/main/java/de/minebench/origami/OrigamiConfig.java +++ b/src/main/java/de/minebench/origami/OrigamiConfig.java -@@ -127,6 +127,11 @@ public final class OrigamiConfig { +@@ -126,6 +126,11 @@ public final class OrigamiConfig { tickEmptyHoppers = getBoolean("tick-empty-hoppers", tickEmptyHoppers); fullHopperCooldown = getInt("ticks-per.full-hopper-cooldown", fullHopperCooldown); } diff --git a/patches/Origami/patches/server/0008-Don-t-wake-up-entities-when-damage-event-is-cancelle.patch b/patches/Origami/patches/server/0008-Don-t-wake-up-entities-when-damage-event-is-cancelle.patch index c7c9c9b5..0b52ceaf 100644 --- a/patches/Origami/patches/server/0008-Don-t-wake-up-entities-when-damage-event-is-cancelle.patch +++ b/patches/Origami/patches/server/0008-Don-t-wake-up-entities-when-damage-event-is-cancelle.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Don't wake up entities when damage event is cancelled diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 95ccaab19b46785dd515b9d444557ae56de8ab89..a198bdf26b60caea8c8b105cb0e4b82c0340fede 100644 +index 88d5fb46b3fa8c148293ac6c2c8206fc480b5521..6bfd3a92e7b760c780e756ecbc5323d10235da9d 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -1118,9 +1118,12 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/Origami/patches/server/0009-Fix-exp-drop-of-zombie-pigmen-MC-56653.patch b/patches/Origami/patches/server/0009-Fix-exp-drop-of-zombie-pigmen-MC-56653.patch index c193737e..92e8be42 100644 --- a/patches/Origami/patches/server/0009-Fix-exp-drop-of-zombie-pigmen-MC-56653.patch +++ b/patches/Origami/patches/server/0009-Fix-exp-drop-of-zombie-pigmen-MC-56653.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix exp drop of zombie pigmen (MC-56653) diff --git a/src/main/java/de/minebench/origami/OrigamiConfig.java b/src/main/java/de/minebench/origami/OrigamiConfig.java -index bf6b9f4dbd8c3f649b4e059f41c0e72e0d0f70c6..f452cc575adf9137f3b9f1eef1904f8116c7a7ec 100644 +index 047e7d42ce54aa1cb28cfe8b194bf5c6c75824ad..27599f422be266ad2fdbda49617661801c2c1991 100644 --- a/src/main/java/de/minebench/origami/OrigamiConfig.java +++ b/src/main/java/de/minebench/origami/OrigamiConfig.java -@@ -132,6 +132,10 @@ public final class OrigamiConfig { +@@ -131,6 +131,10 @@ public final class OrigamiConfig { private void observerClock() { disableObserverClocks = getBoolean("disable-observer-clocks", disableObserverClocks); } diff --git a/patches/Purpur/patches/api/0001-Purpur-config-files.patch b/patches/Purpur/patches/api/0001-Purpur-config-files.patch index 257372be..ce0aa85d 100644 --- a/patches/Purpur/patches/api/0001-Purpur-config-files.patch +++ b/patches/Purpur/patches/api/0001-Purpur-config-files.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur config files diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index b45ad8df8b7a44c9e6d12326e5ea85e8d166a16c..c69143ba156f6aa3cf3ffb9ee3f6d461867982c5 100644 +index b3e7b2a8eaa3980e34bc74a846320b7871dc6e4b..c4aa05ae1fbc67b455f82ca6c08c7706659269ad 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1490,6 +1490,18 @@ public interface Server extends PluginMessageRecipient { +@@ -1603,6 +1603,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi } // Tuinity end - add config to timings report diff --git a/patches/Purpur/patches/api/0003-Allow-inventory-resizing.patch b/patches/Purpur/patches/api/0003-Allow-inventory-resizing.patch index e8f24f5a..486bb37d 100644 --- a/patches/Purpur/patches/api/0003-Allow-inventory-resizing.patch +++ b/patches/Purpur/patches/api/0003-Allow-inventory-resizing.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow inventory resizing diff --git a/src/main/java/org/bukkit/event/inventory/InventoryType.java b/src/main/java/org/bukkit/event/inventory/InventoryType.java -index f1e9bc9bc797b7216336d3470e3c696a06f2b21a..2351283df16dac808d77b840aa88732d7b28c0a1 100644 +index 090d22bd30f7947103771aaaf09a2398970ac337..ca660dde2010098e8c77141d05c2d4d5470adf81 100644 --- a/src/main/java/org/bukkit/event/inventory/InventoryType.java +++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java @@ -132,7 +132,7 @@ public enum InventoryType { @@ -17,8 +17,8 @@ index f1e9bc9bc797b7216336d3470e3c696a06f2b21a..2351283df16dac808d77b840aa88732d private final String title; private final boolean isCreatable; -@@ -146,6 +146,12 @@ public enum InventoryType { - this.isCreatable = isCreatable; +@@ -159,6 +159,12 @@ public enum InventoryType { + this.defaultTitleComponent = net.kyori.adventure.text.Component.text(defaultTitle); // Paper - Adventure } + // Purpur start diff --git a/patches/Purpur/patches/api/0006-AFK-API.patch b/patches/Purpur/patches/api/0006-AFK-API.patch index 1873b51a..7b943878 100644 --- a/patches/Purpur/patches/api/0006-AFK-API.patch +++ b/patches/Purpur/patches/api/0006-AFK-API.patch @@ -81,10 +81,10 @@ index 0000000000000000000000000000000000000000..0c8b3e5e4ba412624357ea5662a78862 + } +} diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index cb6464c89e02d29484554a9a2184996a256925d2..7fd2085fa24779df1eab354532611d3642b37a27 100644 +index 2ea531eaef8c455fdd503f0c0258813fe9136085..53e10ef71fcd904d59c9c9825b2a736b6b35027c 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1938,4 +1938,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2076,4 +2076,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end diff --git a/patches/Purpur/patches/api/0007-Bring-back-server-name.patch b/patches/Purpur/patches/api/0007-Bring-back-server-name.patch index 8fed27d7..0b7f1215 100644 --- a/patches/Purpur/patches/api/0007-Bring-back-server-name.patch +++ b/patches/Purpur/patches/api/0007-Bring-back-server-name.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Bring back server name diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index fecd7b14d317f55eb1ce7b5c6af9913917971427..d070b420f4cb90610d7018a7fbbc88074268b02b 100644 +index 5f7208196684d9c8373df28b7cfb5f9e21baa41e..7eab52112a488150636a1457f5d7aba84da6cbf5 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -1817,4 +1817,15 @@ public final class Bukkit { +@@ -1943,4 +1943,15 @@ public final class Bukkit { public static Server.Spigot spigot() { return server.spigot(); } @@ -25,10 +25,10 @@ index fecd7b14d317f55eb1ce7b5c6af9913917971427..d070b420f4cb90610d7018a7fbbc8807 + // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index c69143ba156f6aa3cf3ffb9ee3f6d461867982c5..dce7d8126c4a628270b09608e4561c419238b0f4 100644 +index c4aa05ae1fbc67b455f82ca6c08c7706659269ad..ce2909995791f3b334d253afc382baea9e49dd1d 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1602,4 +1602,13 @@ public interface Server extends PluginMessageRecipient { +@@ -1719,4 +1719,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @NotNull com.destroystokyo.paper.entity.ai.MobGoals getMobGoals(); // Paper end diff --git a/patches/Purpur/patches/api/0010-Lagging-threshold.patch b/patches/Purpur/patches/api/0010-Lagging-threshold.patch index a0e4cefa..4b19f99e 100644 --- a/patches/Purpur/patches/api/0010-Lagging-threshold.patch +++ b/patches/Purpur/patches/api/0010-Lagging-threshold.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Lagging threshold diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index d070b420f4cb90610d7018a7fbbc88074268b02b..ba8eb67291c9848b367419f4c8110161ac7fab0d 100644 +index 7eab52112a488150636a1457f5d7aba84da6cbf5..801bef2a060962b5c4f92234401e5bc34a62141a 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -1827,5 +1827,14 @@ public final class Bukkit { +@@ -1953,5 +1953,14 @@ public final class Bukkit { public static String getServerName() { return server.getServerName(); } @@ -24,10 +24,10 @@ index d070b420f4cb90610d7018a7fbbc88074268b02b..ba8eb67291c9848b367419f4c8110161 // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index dce7d8126c4a628270b09608e4561c419238b0f4..05b47c2462a00451fc64c79c3eda116fc8003a9f 100644 +index ce2909995791f3b334d253afc382baea9e49dd1d..28a1fe3af1546daa779df46468e0ff8ad823f9ca 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1610,5 +1610,12 @@ public interface Server extends PluginMessageRecipient { +@@ -1727,5 +1727,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ @NotNull String getServerName(); diff --git a/patches/Purpur/patches/api/0011-ItemFactory-getMonsterEgg.patch b/patches/Purpur/patches/api/0011-ItemFactory-getMonsterEgg.patch index f475acc8..4701a250 100644 --- a/patches/Purpur/patches/api/0011-ItemFactory-getMonsterEgg.patch +++ b/patches/Purpur/patches/api/0011-ItemFactory-getMonsterEgg.patch @@ -5,11 +5,11 @@ Subject: [PATCH] ItemFactory#getMonsterEgg diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java -index 3f23927e58e0ccf8cf04d4beb4d83346e3f84730..23d55f756b2bb5a557bfae102d7039d8394fbe69 100644 +index eab52f8615b329a795b3fe3a3719e5687e105061..0c5e488fca4370a18fede705f58bff25f3a7b4cb 100644 --- a/src/main/java/org/bukkit/inventory/ItemFactory.java +++ b/src/main/java/org/bukkit/inventory/ItemFactory.java -@@ -215,4 +215,15 @@ public interface ItemFactory { - @NotNull +@@ -233,4 +233,15 @@ public interface ItemFactory { + @Deprecated net.md_5.bungee.api.chat.hover.content.Content hoverContentOf(@NotNull org.bukkit.entity.Entity entity, @NotNull net.md_5.bungee.api.chat.BaseComponent[] customName); // Paper end + diff --git a/patches/Purpur/patches/api/0015-Player-invulnerabilities.patch b/patches/Purpur/patches/api/0015-Player-invulnerabilities.patch index 24d115ce..f52c2d87 100644 --- a/patches/Purpur/patches/api/0015-Player-invulnerabilities.patch +++ b/patches/Purpur/patches/api/0015-Player-invulnerabilities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player invulnerabilities diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 7fd2085fa24779df1eab354532611d3642b37a27..a79703115da811397ee6b7c6c079846af537fd12 100644 +index 53e10ef71fcd904d59c9c9825b2a736b6b35027c..a2a58dea8bdb5597fc0617e7b5b4fb8ab9d77641 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1958,5 +1958,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2096,5 +2096,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Reset the idle timer back to 0 */ void resetIdleTimer(); diff --git a/patches/Purpur/patches/api/0017-ItemStack-convenience-methods.patch b/patches/Purpur/patches/api/0017-ItemStack-convenience-methods.patch index 27851fc5..fc514533 100644 --- a/patches/Purpur/patches/api/0017-ItemStack-convenience-methods.patch +++ b/patches/Purpur/patches/api/0017-ItemStack-convenience-methods.patch @@ -5,10 +5,10 @@ Subject: [PATCH] ItemStack convenience methods diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java -index 2a3becabbd10fa8ffd19f35a3f6d8a6bfcb388c3..f71c9fd069309ef330d9065760b80ec10de7e18b 100644 +index 7b77c7132723a01e8c38ddaa616b363be300b653..c6b1131b1700797e0515045f4e5c81f85aa3449f 100644 --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -8642,4 +8642,36 @@ public enum Material implements Keyed { +@@ -8649,4 +8649,36 @@ public enum Material implements Keyed { // } } @@ -46,7 +46,7 @@ index 2a3becabbd10fa8ffd19f35a3f6d8a6bfcb388c3..f71c9fd069309ef330d9065760b80ec1 + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 4f2520f7a4ca6d57a85924ada1068a055b9a01fb..23cef1e67236a879525f39da994efc9a9c5cd289 100644 +index 878f09d5e587bc4bd70443fbdb89dac29e5a538d..f0c17f1342d9c70cb4fe1fc46dd8b9006037e860 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -17,6 +17,18 @@ import org.bukkit.inventory.meta.ItemMeta; @@ -68,8 +68,8 @@ index 4f2520f7a4ca6d57a85924ada1068a055b9a01fb..23cef1e67236a879525f39da994efc9a /** * Represents a stack of items. -@@ -792,4 +804,627 @@ public class ItemStack implements Cloneable, ConfigurationSerializable { - return itemMeta.hasItemFlag(flag); +@@ -810,4 +822,627 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, net.kyor + return itemMeta != null && itemMeta.hasItemFlag(flag); } // Paper end + diff --git a/patches/Purpur/patches/api/0020-Ridables.patch b/patches/Purpur/patches/api/0020-Ridables.patch index fc251fc3..3adb827f 100644 --- a/patches/Purpur/patches/api/0020-Ridables.patch +++ b/patches/Purpur/patches/api/0020-Ridables.patch @@ -169,10 +169,10 @@ index 0000000000000000000000000000000000000000..c0ec5a130985e8da4cc9e596a6b70503 + } +} diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 76e857c364fe79e20cf9bde54b65e5b7108174fd..5f7947cd6f3bf9f76e8b3bac339f61b9afadaaad 100644 +index 428daeb04d0a35a443467e2f657d2356bcfdd7d7..7dc06b28af9fa45b2b49a6d37c1ed829257f812a 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -698,4 +698,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent +@@ -704,4 +704,35 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent */ public boolean isTicking(); // Paper end diff --git a/patches/Purpur/patches/api/0031-Fix-javadoc-warnings-missing-param-and-return.patch b/patches/Purpur/patches/api/0031-Fix-javadoc-warnings-missing-param-and-return.patch index 6c825833..8c3ae7fb 100644 --- a/patches/Purpur/patches/api/0031-Fix-javadoc-warnings-missing-param-and-return.patch +++ b/patches/Purpur/patches/api/0031-Fix-javadoc-warnings-missing-param-and-return.patch @@ -448,7 +448,7 @@ index 525ede42137cc27cf20cf713478e85292455676e..a0279fcbfc76ad97a61fc191424e876d WATER, diff --git a/src/main/java/org/bukkit/Nameable.java b/src/main/java/org/bukkit/Nameable.java -index fee814e01a653d2b53c56e8b566383ca44aa5346..cda8b54d73edf47ef8d5a1bba25478b187fe1cde 100644 +index 2acdf2a6d3955923c721222b9da784f3278f6418..737c3b053060e38f6776a5a508948cc300bbe6f4 100644 --- a/src/main/java/org/bukkit/Nameable.java +++ b/src/main/java/org/bukkit/Nameable.java @@ -2,6 +2,9 @@ package org.bukkit; @@ -460,7 +460,7 @@ index fee814e01a653d2b53c56e8b566383ca44aa5346..cda8b54d73edf47ef8d5a1bba25478b1 + */ public interface Nameable { - /** + // Paper start diff --git a/src/main/java/org/bukkit/OfflinePlayer.java b/src/main/java/org/bukkit/OfflinePlayer.java index 3afd5f5c0208a4ee93b5dbfc2aab2b9d2e8a7544..7838731e0e16bdccfb79e74ceb64148f7c52db79 100644 --- a/src/main/java/org/bukkit/OfflinePlayer.java @@ -476,10 +476,10 @@ index 3afd5f5c0208a4ee93b5dbfc2aab2b9d2e8a7544..7838731e0e16bdccfb79e74ceb64148f /** diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 05b47c2462a00451fc64c79c3eda116fc8003a9f..26c1953d23efd370ac7fd47fc3432edba4724139 100644 +index 28a1fe3af1546daa779df46468e0ff8ad823f9ca..7a3be414ef9d54d7a852ba92d704011fa7f125ac 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1455,6 +1455,9 @@ public interface Server extends PluginMessageRecipient { +@@ -1568,6 +1568,9 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi UnsafeValues getUnsafe(); // Spigot start @@ -490,10 +490,10 @@ index 05b47c2462a00451fc64c79c3eda116fc8003a9f..26c1953d23efd370ac7fd47fc3432edb @NotNull diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java -index 931ffa38faab86445a5d63364a47cb653ca3d4ed..97b9ade0e771eae663fb42f91e15545034d58fc9 100644 +index f486d7c819f6330223980793c9b086fded0af059..632e53338c4d902aea7e8589152b1c1b6e6dde6a 100644 --- a/src/main/java/org/bukkit/UnsafeValues.java +++ b/src/main/java/org/bukkit/UnsafeValues.java -@@ -80,6 +80,8 @@ public interface UnsafeValues { +@@ -81,6 +81,8 @@ public interface UnsafeValues { /** * Called once by the version command on first use, then cached. @@ -502,7 +502,7 @@ index 931ffa38faab86445a5d63364a47cb653ca3d4ed..97b9ade0e771eae663fb42f91e155450 */ default com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { return new com.destroystokyo.paper.util.VersionFetcher.DummyVersionFetcher(); -@@ -98,6 +100,8 @@ public interface UnsafeValues { +@@ -99,6 +101,8 @@ public interface UnsafeValues { /** * Return the translation key for the Material, so the client can translate it into the active * locale when using a TranslatableComponent. @@ -511,7 +511,7 @@ index 931ffa38faab86445a5d63364a47cb653ca3d4ed..97b9ade0e771eae663fb42f91e155450 * @return the translation key */ String getTranslationKey(Material mat); -@@ -105,6 +109,8 @@ public interface UnsafeValues { +@@ -106,6 +110,8 @@ public interface UnsafeValues { /** * Return the translation key for the Block, so the client can translate it into the active * locale when using a TranslatableComponent. @@ -520,7 +520,7 @@ index 931ffa38faab86445a5d63364a47cb653ca3d4ed..97b9ade0e771eae663fb42f91e155450 * @return the translation key */ String getTranslationKey(org.bukkit.block.Block block); -@@ -113,6 +119,8 @@ public interface UnsafeValues { +@@ -114,6 +120,8 @@ public interface UnsafeValues { * Return the translation key for the EntityType, so the client can translate it into the active * locale when using a TranslatableComponent.
* This is null, when the EntityType isn't known to NMS (custom entities) @@ -529,7 +529,7 @@ index 931ffa38faab86445a5d63364a47cb653ca3d4ed..97b9ade0e771eae663fb42f91e155450 * @return the translation key */ String getTranslationKey(org.bukkit.entity.EntityType type); -@@ -121,6 +129,8 @@ public interface UnsafeValues { +@@ -122,6 +130,8 @@ public interface UnsafeValues { * Creates and returns the next EntityId available. *

* Use this when sending custom packets, so that there are no collisions on the client or server. @@ -553,10 +553,10 @@ index afb7b136b461202026290624836446cff9f9e45d..087579fdff09237409c9f80446e7a15a /** diff --git a/src/main/java/org/bukkit/WorldCreator.java b/src/main/java/org/bukkit/WorldCreator.java -index 6e6945dd4c770be04ec09da3958fae751717527a..7d1030d4573e3843cae9ad4e39cef8baa2af39b0 100644 +index 3802bf39c2b8330ab64f90f91c88741500caaa64..28e251388d90d00b0111c847ea3d5adc4766aedf 100644 --- a/src/main/java/org/bukkit/WorldCreator.java +++ b/src/main/java/org/bukkit/WorldCreator.java -@@ -238,11 +238,8 @@ public class WorldCreator { +@@ -293,11 +293,8 @@ public class WorldCreator { * is as follows: * {"structures": {"structures": {"village": {"salt": 8015723, "spacing": 32, "separation": 8}}}, "layers": [{"block": "stone", "height": 1}, {"block": "grass", "height": 1}], "biome":"plains"} * @@ -599,7 +599,7 @@ index d1757f3d456ff9efce26ce8baa1d16d896908cc2..a5db52386e11e4b5511ae417a0e7ac92 TASK(ChatColor.GREEN), CHALLENGE(ChatColor.DARK_PURPLE), diff --git a/src/main/java/org/bukkit/block/Block.java b/src/main/java/org/bukkit/block/Block.java -index 0c72d00ad238ab69d7ae0941e3ecb6c86e71624d..73cf7437795ef185860bfefe51d9481fa297a939 100644 +index 85ff6ce3bf75ab78f066a508d130def5913fff0e..c1f9114d1c0ac3457461c9326420a4afc00ce970 100644 --- a/src/main/java/org/bukkit/block/Block.java +++ b/src/main/java/org/bukkit/block/Block.java @@ -183,6 +183,9 @@ public interface Block extends Metadatable { @@ -679,10 +679,10 @@ index 70274f2e2a1d6f27c4febd9d5d5fa3ee1b49f100..3b98e6e3e6dea0df5fb9462c78e8c142 /** diff --git a/src/main/java/org/bukkit/command/CommandSender.java b/src/main/java/org/bukkit/command/CommandSender.java -index de4370233e0358da30d3704145044a99d8369f52..29d2077926620786c74b1f2f6ec6067a818d6e82 100644 +index fb0e608fa92dae99b9eee8fc1cbdf4b91a33e620..ca6d3afd6fa51c0822e289356025b51bc50f55a7 100644 --- a/src/main/java/org/bukkit/command/CommandSender.java +++ b/src/main/java/org/bukkit/command/CommandSender.java -@@ -55,6 +55,9 @@ public interface CommandSender extends Permissible { +@@ -62,6 +62,9 @@ public interface CommandSender extends net.kyori.adventure.audience.Audience, Pe public String getName(); // Spigot start @@ -735,7 +735,7 @@ index 2e17b2d4f759531fbe9ee8e9b00c839186af09ca..9382234722792b5920a2456187e07958 /** diff --git a/src/main/java/org/bukkit/entity/ArmorStand.java b/src/main/java/org/bukkit/entity/ArmorStand.java -index 8ca6c9eba926f436203af211c6e274a59ddb15e8..f61419d3ce15bd553a864e4e9cd988b57d8f9695 100644 +index 2f0c6af7fa6688a98d6aa0bd3f0e6556af8330d0..b38c69482e3112e0cd626bcb17f4523c541b748f 100644 --- a/src/main/java/org/bukkit/entity/ArmorStand.java +++ b/src/main/java/org/bukkit/entity/ArmorStand.java @@ -7,6 +7,9 @@ import org.bukkit.util.EulerAngle; @@ -798,7 +798,7 @@ index d9be83961b28b927a587f6dbb339b531520e4865..1ff4c5e283ac05c405c09bd4b8530664 /** diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 5f7947cd6f3bf9f76e8b3bac339f61b9afadaaad..08dbe8208fad174f03a0e08c26bb48a0729ec0ce 100644 +index 7dc06b28af9fa45b2b49a6d37c1ed829257f812a..c51d545e137eec2017c9f2ff944db70f2fdffdfc 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -622,6 +622,9 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent @@ -811,7 +811,7 @@ index 5f7947cd6f3bf9f76e8b3bac339f61b9afadaaad..08dbe8208fad174f03a0e08c26bb48a0 public class Spigot extends CommandSender.Spigot { } -@@ -665,36 +668,50 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent +@@ -671,36 +674,50 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent /** * Check if entity is in rain @@ -932,10 +932,10 @@ index a6a7429ed2e1eefb2b12b7480ed74fcc3963a864..e8027e1d505dda6effbb1698550016e8 NORMAL(false), diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index a79703115da811397ee6b7c6c079846af537fd12..5ad9de1f34b1cca3e31b8a142e3831739a3e824a 100644 +index a2a58dea8bdb5597fc0617e7b5b4fb8ab9d77641..2911b629b8ad1ad36090bdbf87a41f2eec888a0b 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1776,6 +1776,8 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1898,6 +1898,8 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM void resetCooldown(); /** @@ -944,7 +944,7 @@ index a79703115da811397ee6b7c6c079846af537fd12..5ad9de1f34b1cca3e31b8a142e383173 * @return the client option value of the player */ @NotNull -@@ -1807,6 +1809,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1937,6 +1939,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM // Paper end // Spigot start @@ -1052,7 +1052,7 @@ index ceb3e2c5117740ce284e893fff8e41a002d78649..fab5c3c90f55c113cae2bca2354a94e8 /** diff --git a/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java b/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java -index 63c80b4ee1f7adc8a9efc3b607993104b1991f90..b5d6dc0d864833880b59fc52a0b49d37b0904f98 100644 +index 91cab8b13d5bba34007f124838b32a1df58c5ac7..078228106b299a8e38495f7f881d38de4f87bc95 100644 --- a/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java +++ b/src/main/java/org/bukkit/entity/minecart/CommandMinecart.java @@ -4,6 +4,9 @@ import org.bukkit.entity.Minecart; @@ -1143,7 +1143,7 @@ index 4aaa78afdda2d2351f8c4ed46a52e0cf77ec437c..4d2d821003840b7fc1ca412d71b84134 /** * Player emptying the cauldron by filling their bucket. diff --git a/src/main/java/org/bukkit/event/entity/EntityTransformEvent.java b/src/main/java/org/bukkit/event/entity/EntityTransformEvent.java -index 7d23333e71482920cc42a4d8f3f38a7525aefe1f..765aa67f4cbb535128070d3310d1be9ecede3bf8 100644 +index 76ad715961c1b373ba276c61ced728affd4dbec1..27ce18199100b181a0502bc6de12cc7dfc430f86 100644 --- a/src/main/java/org/bukkit/event/entity/EntityTransformEvent.java +++ b/src/main/java/org/bukkit/event/entity/EntityTransformEvent.java @@ -79,6 +79,9 @@ public class EntityTransformEvent extends EntityEvent implements Cancellable { @@ -1213,10 +1213,10 @@ index 21ad8888c0e403bfc63518502577d651c02dda05..295cbe558ace7b55c80fc84256808d2f /** * Unknown reason diff --git a/src/main/java/org/bukkit/event/inventory/InventoryType.java b/src/main/java/org/bukkit/event/inventory/InventoryType.java -index 2351283df16dac808d77b840aa88732d7b28c0a1..007d3e45095a5b6e35b6af681e6e042830a5432d 100644 +index ca660dde2010098e8c77141d05c2d4d5470adf81..129eac25da4f27489038fb15ab1aeecb172b60cc 100644 --- a/src/main/java/org/bukkit/event/inventory/InventoryType.java +++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java -@@ -171,6 +171,9 @@ public enum InventoryType { +@@ -185,6 +185,9 @@ public enum InventoryType { return isCreatable; } @@ -1241,10 +1241,10 @@ index efd29d198dd847e22988963f70ad57e1b810aeb7..b5de6e77a030057f923a5d82ea0054b9 private static final HandlerList handlers = new HandlerList(); private boolean repair; diff --git a/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java b/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java -index af52a5dfb452da11e51cad9c882cae1533cba520..30a7ac800096866d2a09dd304ffd17c42c5b2d9a 100644 +index b6016aa1e91863efc252eecab69ade6f54c89f27..e43acfb570036adb73d195136573620378cc6a61 100644 --- a/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java +++ b/src/main/java/org/bukkit/event/player/PlayerQuitEvent.java -@@ -60,6 +60,9 @@ public class PlayerQuitEvent extends PlayerEvent { +@@ -94,6 +94,9 @@ public class PlayerQuitEvent extends PlayerEvent { return this.reason; } @@ -1352,10 +1352,10 @@ index c7b17eabf07b829a02afe7c1f27a5127b6bfea70..d4e2bcf8ce8fc2af851b471490147f00 /** diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java -index 23d55f756b2bb5a557bfae102d7039d8394fbe69..50e58cf9a494c2cf17b7f55918e3d21f63437b3c 100644 +index 0c5e488fca4370a18fede705f58bff25f3a7b4cb..ffe8a6dcb13d917a7c295dfa6123da9e29e66d6d 100644 --- a/src/main/java/org/bukkit/inventory/ItemFactory.java +++ b/src/main/java/org/bukkit/inventory/ItemFactory.java -@@ -169,7 +169,7 @@ public interface ItemFactory { +@@ -179,7 +179,7 @@ public interface ItemFactory { /** * Creates a {@link net.md_5.bungee.api.chat.hover.content.Content} of that ItemStack for displaying. * @@ -1418,10 +1418,10 @@ index e7d905b1146b2bdd2da5bdeb6bf3541fb181d59e..1fab68c9de96b0d362ebf85fd675cc19 /** diff --git a/src/main/java/org/bukkit/inventory/meta/BookMeta.java b/src/main/java/org/bukkit/inventory/meta/BookMeta.java -index 94852d50e88d0594b84b581cd627174043629995..c63257f38dffd05977e3676e7c341123f01fe282 100644 +index 0cfd4b02cc2095da56b4dc8d4ea4e9b4a95f513c..1378c8fc2fd187035fc159c8d025d58b5a61f535 100644 --- a/src/main/java/org/bukkit/inventory/meta/BookMeta.java +++ b/src/main/java/org/bukkit/inventory/meta/BookMeta.java -@@ -188,6 +188,9 @@ public interface BookMeta extends ItemMeta { +@@ -305,6 +305,9 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { BookMeta clone(); // Spigot start diff --git a/patches/Purpur/patches/api/0036-Add-unsafe-Entity-serialization-API.patch b/patches/Purpur/patches/api/0036-Add-unsafe-Entity-serialization-API.patch index 4458d2b1..770ebed9 100644 --- a/patches/Purpur/patches/api/0036-Add-unsafe-Entity-serialization-API.patch +++ b/patches/Purpur/patches/api/0036-Add-unsafe-Entity-serialization-API.patch @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java -index 97b9ade0e771eae663fb42f91e15545034d58fc9..0c9d3c8a28a791fe26bb1c014b568e955eca0e8f 100644 +index 632e53338c4d902aea7e8589152b1c1b6e6dde6a..e64d28359c6f5180f1dfd3896a5ba99fd30a943c 100644 --- a/src/main/java/org/bukkit/UnsafeValues.java +++ b/src/main/java/org/bukkit/UnsafeValues.java -@@ -135,4 +135,28 @@ public interface UnsafeValues { +@@ -136,4 +136,28 @@ public interface UnsafeValues { public int nextEntityId(); // Paper end @@ -50,10 +50,10 @@ index 97b9ade0e771eae663fb42f91e15545034d58fc9..0c9d3c8a28a791fe26bb1c014b568e95 + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 08dbe8208fad174f03a0e08c26bb48a0729ec0ce..2b7e8c7f24b2d9dd49db901f6279b8b5930a3006 100644 +index c51d545e137eec2017c9f2ff944db70f2fdffdfc..1e25f387e053b648477a3e9dace1a6c95e7f8cba 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -745,5 +745,24 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent +@@ -751,5 +751,24 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent * @return True if ridable in water */ boolean isRidableInWater(); diff --git a/patches/Purpur/patches/server/0001-Rebrand.patch b/patches/Purpur/patches/server/0001-Rebrand.patch index cfcad584..b5b2e8bc 100644 --- a/patches/Purpur/patches/server/0001-Rebrand.patch +++ b/patches/Purpur/patches/server/0001-Rebrand.patch @@ -48,10 +48,10 @@ index 229c3b0f0c650b501f31147adaa17194af57fedd..f88cf526d272fe47b5a474c0b344b748 throwable = throwable1; throw throwable1; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1768554b00ea0b7a57ebbed1f0bc5d8fd6f02f76..fe4ef4ea7117a6f38e4d068aae5b5ec6de06507b 100644 +index 7ac34a8959a797bf2af96f3f402fa65cffe3d666..80b7ef7c02c8f99b81a6c33d6d969690b933eb36 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1513,7 +1513,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant { Map> map = new HashMap<>(); diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index 673c40d952bae6ae9e92aac9742e58ffb6a8b1bb..ce14283dd1a1fddbea17c2fbaf1c4ef9d7a7479f 100644 +index c56e7fb18f9a56c8025eb70a524f028b5942da37..4b9fdb4f04b333ce32f7fca8f279bf989e6fd728 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java @@ -118,6 +118,11 @@ public class PaperConfig { @@ -45,10 +45,10 @@ index 673c40d952bae6ae9e92aac9742e58ffb6a8b1bb..ce14283dd1a1fddbea17c2fbaf1c4ef9 config.save(CONFIG_FILE); } catch (IOException ex) { diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index ecff0657e5666ddc2e6a5c3111bfb2b8dd2b78d3..3ee8d31c453105eca7b96bede39a9ebbf40e1c2c 100644 +index 2644b190813cc934914aeab78fbd6515d1a37c4a..e3721b53db68171665ba05201155d088ae3cb89f 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -167,6 +167,15 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -173,6 +173,15 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer return false; } com.destroystokyo.paper.PaperConfig.registerCommands(); @@ -65,10 +65,10 @@ index ecff0657e5666ddc2e6a5c3111bfb2b8dd2b78d3..3ee8d31c453105eca7b96bede39a9ebb // Paper end com.tuinity.tuinity.config.TuinityConfig.init((java.io.File) options.valueOf("tuinity-settings")); // Tuinity - Server Config diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index de9ea6770b8afc5e1020bef04ac6cca93b6b420c..21d0570a59240e955ff148bac0226b220a7dec36 100644 +index bf9732058c7e55e8f1ed38b3b5e8831e6b21706c..90154d2180ebb6a54536884bf89187ca17d11da5 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -166,7 +166,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -164,7 +164,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation protected void mobTick() { mobTick(false); } protected void mobTick(boolean inactive) { this.world.getMethodProfiler().enter("villagerBrain"); @@ -373,10 +373,10 @@ index 0000000000000000000000000000000000000000..4904be939c7a4b1d1583fd7b6232c930 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 19a209cfc71e30edd3ff2d8c319df5e8b331e6cf..8cd8db287bb4110e17ec0da57ee1547ca1f221d7 100644 +index eeae4862898f093ca4b9819d0d08fdaf219213a0..a64d375e16f033b875ca80e6678c3a3e198d0220 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -861,6 +861,7 @@ public final class CraftServer implements Server { +@@ -865,6 +865,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 @@ -384,7 +384,7 @@ index 19a209cfc71e30edd3ff2d8c319df5e8b331e6cf..8cd8db287bb4110e17ec0da57ee1547c for (WorldServer world : console.getWorlds()) { world.worldDataServer.setDifficulty(config.difficulty); world.setSpawnFlags(config.spawnMonsters, config.spawnAnimals); -@@ -896,6 +897,7 @@ public final class CraftServer implements Server { +@@ -900,6 +901,7 @@ public final class CraftServer implements Server { world.spigotConfig.init(); // Spigot world.paperConfig.init(); // Paper world.tuinityConfig.init(); // Tuinity - Server Config @@ -392,7 +392,7 @@ index 19a209cfc71e30edd3ff2d8c319df5e8b331e6cf..8cd8db287bb4110e17ec0da57ee1547c } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -914,6 +916,7 @@ public final class CraftServer implements Server { +@@ -918,6 +920,7 @@ public final class CraftServer implements Server { reloadData(); org.spigotmc.SpigotConfig.registerCommands(); // Spigot com.destroystokyo.paper.PaperConfig.registerCommands(); // Paper @@ -400,7 +400,7 @@ index 19a209cfc71e30edd3ff2d8c319df5e8b331e6cf..8cd8db287bb4110e17ec0da57ee1547c overrideAllCommandBlockCommands = commandsConfiguration.getStringList("command-block-overrides").contains("*"); ignoreVanillaPermissions = commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -2298,6 +2301,18 @@ public final class CraftServer implements Server { +@@ -2357,6 +2360,18 @@ public final class CraftServer implements Server { } // Tuinity end - add config to timings report diff --git a/patches/Purpur/patches/server/0004-Add-component-util.patch b/patches/Purpur/patches/server/0004-Add-component-util.patch deleted file mode 100644 index f63b095a..00000000 --- a/patches/Purpur/patches/server/0004-Add-component-util.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Sat, 15 Aug 2020 03:49:33 -0500 -Subject: [PATCH] Add component util - - -diff --git a/src/main/java/net/pl3x/purpur/ComponentUtil.java b/src/main/java/net/pl3x/purpur/ComponentUtil.java -new file mode 100644 -index 0000000000000000000000000000000000000000..3f7bc68d1a6fb00758b178bb46113e38b8bc24bc ---- /dev/null -+++ b/src/main/java/net/pl3x/purpur/ComponentUtil.java -@@ -0,0 +1,32 @@ -+package net.pl3x.purpur; -+ -+import net.md_5.bungee.api.chat.BaseComponent; -+import net.md_5.bungee.api.chat.TextComponent; -+import net.md_5.bungee.chat.ComponentSerializer; -+import net.minecraft.server.IChatBaseComponent; -+import net.minecraft.server.MinecraftServer; -+ -+import java.util.List; -+ -+public class ComponentUtil { -+ public static String fromComponent(IChatBaseComponent component) { -+ String json = ""; -+ try { -+ int chop; -+ List siblings = component.getSiblings(); -+ if (siblings.size() > 0) chop = siblings.get(0).getChatModifier().getColor() == null ? 4 : 2; -+ else chop = component.getChatModifier().getColor() == null ? 2 : 0; -+ json = IChatBaseComponent.ChatSerializer.componentToJson(component); -+ BaseComponent[] parsed = ComponentSerializer.parse(json); -+ return TextComponent.toLegacyText(parsed).substring(chop); -+ } catch (Exception e) { -+ MinecraftServer.LOGGER.warn("There was a problem processing a chat component!"); -+ MinecraftServer.LOGGER.warn("We have fallen back to legacy colorless string to prevent real errors"); -+ MinecraftServer.LOGGER.warn("Please report this to Purpur!"); -+ MinecraftServer.LOGGER.warn("JSON: " + json); -+ MinecraftServer.LOGGER.warn("The following error describes what went wrong:"); -+ e.printStackTrace(); -+ return component.getString(); -+ } -+ } -+} diff --git a/patches/Purpur/patches/server/0005-Barrels-and-enderchests-6-rows.patch b/patches/Purpur/patches/server/0004-Barrels-and-enderchests-6-rows.patch similarity index 93% rename from patches/Purpur/patches/server/0005-Barrels-and-enderchests-6-rows.patch rename to patches/Purpur/patches/server/0004-Barrels-and-enderchests-6-rows.patch index c8bd7f2b..f2d1d3b8 100644 --- a/patches/Purpur/patches/server/0005-Barrels-and-enderchests-6-rows.patch +++ b/patches/Purpur/patches/server/0004-Barrels-and-enderchests-6-rows.patch @@ -37,10 +37,10 @@ index 896d99d404419fef5bdf6f9083e07dfc978f4e67..9ab8336df4f1702e9cabefb63f279034 }, 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 fa56d6e3a9f0bfad3961697a3bae98205f32ae9c..3fc6298a5ef81c4203a79f1d9e87b0a9913255b6 100644 +index 8e167a664431b48875a7466be3a440eae089092b..df11848a03d2c08e935624e46489a62bc56de1da 100644 --- a/src/main/java/net/minecraft/server/InventoryEnderChest.java +++ b/src/main/java/net/minecraft/server/InventoryEnderChest.java -@@ -19,11 +19,34 @@ public class InventoryEnderChest extends InventorySubcontainer { +@@ -21,11 +21,34 @@ public class InventoryEnderChest extends InventorySubcontainer { } public InventoryEnderChest(EntityHuman owner) { @@ -77,10 +77,10 @@ index fa56d6e3a9f0bfad3961697a3bae98205f32ae9c..3fc6298a5ef81c4203a79f1d9e87b0a9 this.a = tileentityenderchest; } diff --git a/src/main/java/net/minecraft/server/TileEntityBarrel.java b/src/main/java/net/minecraft/server/TileEntityBarrel.java -index a1c3942cbf9a6c0adc4943b05a1c3859c5f0aed6..953741c1cfd9b5c1e0eac80d1e4c7890f94e3bb1 100644 +index 31d0b40fb7b30b89be1aa923c54af77e40b90b19..e5703b7d37c5f37c850328e9c8bf186d15934bdb 100644 --- a/src/main/java/net/minecraft/server/TileEntityBarrel.java +++ b/src/main/java/net/minecraft/server/TileEntityBarrel.java -@@ -55,7 +55,7 @@ public class TileEntityBarrel extends TileEntityLootable { +@@ -49,7 +49,7 @@ public class TileEntityBarrel extends TileEntityLootable { private TileEntityBarrel(TileEntityTypes tileentitytypes) { super(tileentitytypes); @@ -89,7 +89,7 @@ index a1c3942cbf9a6c0adc4943b05a1c3859c5f0aed6..953741c1cfd9b5c1e0eac80d1e4c7890 } public TileEntityBarrel() { -@@ -84,7 +84,7 @@ public class TileEntityBarrel extends TileEntityLootable { +@@ -78,7 +78,7 @@ public class TileEntityBarrel extends TileEntityLootable { @Override public int getSize() { @@ -98,7 +98,7 @@ index a1c3942cbf9a6c0adc4943b05a1c3859c5f0aed6..953741c1cfd9b5c1e0eac80d1e4c7890 } @Override -@@ -104,6 +104,7 @@ public class TileEntityBarrel extends TileEntityLootable { +@@ -98,6 +98,7 @@ public class TileEntityBarrel extends TileEntityLootable { @Override protected Container createContainer(int i, PlayerInventory playerinventory) { @@ -143,10 +143,10 @@ index 00eb196f8caa2e4f2478972c14f4596071adbd2a..cb7e34924cb5dbff25d1ffe05cfe5bc2 + } } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -index 8c714c7430c0a6b8fd7f4a158d9a271e1642bd7a..cae362bae9e1e253c34bc81813d251fece839de3 100644 +index 9c49d9c21630c48ae6783bfc0f9cbe455862d686..613912e014070382d66d1e3a2e805af1bc741966 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -@@ -198,8 +198,10 @@ public class CraftContainer extends Container { +@@ -212,8 +212,10 @@ public class CraftContainer extends Container { case PLAYER: case CHEST: case ENDER_CHEST: diff --git a/patches/Purpur/patches/server/0006-Advancement-API.patch b/patches/Purpur/patches/server/0005-Advancement-API.patch similarity index 100% rename from patches/Purpur/patches/server/0006-Advancement-API.patch rename to patches/Purpur/patches/server/0005-Advancement-API.patch diff --git a/patches/Purpur/patches/server/0007-Llama-API.patch b/patches/Purpur/patches/server/0006-Llama-API.patch similarity index 97% rename from patches/Purpur/patches/server/0007-Llama-API.patch rename to patches/Purpur/patches/server/0006-Llama-API.patch index 4986a46a..1aa1fd6a 100644 --- a/patches/Purpur/patches/server/0007-Llama-API.patch +++ b/patches/Purpur/patches/server/0006-Llama-API.patch @@ -102,10 +102,10 @@ index 1b29ca2ca0bc5d17673de43bdc854d5b4c96b8b6..47ffa669681da7512ee594ecb643f285 double d0 = this.a.h((Entity) this.a.fD()); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java -index 3f94c5a9206e2da9c852d282e267ab4d9f7324c4..a02763480149dc7fb0f07f17ef8530a2e76d99bc 100644 +index 71faa1b38f613db468ee939a7ffac7aaed733d20..43536b0744e5618c10790ae9db399c0506567f2a 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 +@@ -66,4 +66,48 @@ public class CraftLlama extends CraftChestedHorse implements Llama, CraftRangedE public EntityType getType() { return EntityType.LLAMA; } diff --git a/patches/Purpur/patches/server/0008-AFK-API.patch b/patches/Purpur/patches/server/0007-AFK-API.patch similarity index 93% rename from patches/Purpur/patches/server/0008-AFK-API.patch rename to patches/Purpur/patches/server/0007-AFK-API.patch index 55882e7b..8c3dd018 100644 --- a/patches/Purpur/patches/server/0008-AFK-API.patch +++ b/patches/Purpur/patches/server/0007-AFK-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 59b00c78f8d92bcceca35d0f25e4d94b3ebdc6e2..e0cf2af8fcbfc66fc32aa8e693b62160b24f8672 100644 +index cc2127b26e41182c14fa95afde878e9b5100a117..7cacaae4ec8b09d12d35f0f22c0e9ec5a48d46a4 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java -@@ -82,6 +82,15 @@ public abstract class EntityHuman extends EntityLiving { +@@ -84,6 +84,15 @@ public abstract class EntityHuman extends EntityLiving { } // CraftBukkit end @@ -25,10 +25,10 @@ index 59b00c78f8d92bcceca35d0f25e4d94b3ebdc6e2..e0cf2af8fcbfc66fc32aa8e693b62160 super(EntityTypes.PLAYER, world); this.bL = ItemStack.b; diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 173a210392d71cdfc551f095dc0d9c9040d22d3f..7d7a512ad752e15fbe0edce47da1da76c01df3b3 100644 +index cf14b83ec3c2b9a2812f50f3bca991e029bf7c67..5affcd13a9376e68ddeba467c4ed07b6002fdee8 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -1927,8 +1927,54 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1929,8 +1929,54 @@ public class EntityPlayer extends EntityHuman implements ICrafting { public void resetIdleTimer() { this.ca = SystemUtils.getMonotonicMillis(); @@ -149,10 +149,10 @@ index b5e1a860a2569d7668330827614d221b60f3fc78..5f85a1d513f4fdc21b64e1a2b6882e33 // Paper start public static final Predicate affectsSpawning = (entity) -> { diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 4185ec46435ddf48d9e25c4d71ac4e14eb6301cf..1d810a9b23d236493db121dde92c7ebce25a25fe 100644 +index 9146b60cff0aa06e2f6b6003bfe9e2be9d2f0d56..bba8dc8fd10dc34179ca3c8cf471fbb3739fa7b4 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -250,6 +250,12 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -252,6 +252,12 @@ public class PlayerConnection implements PacketListenerPlayIn { } if (this.player.F() > 0L && this.minecraftServer.getIdleTimeout() > 0 && SystemUtils.getMonotonicMillis() - this.player.F() > (long) (this.minecraftServer.getIdleTimeout() * 1000 * 60)) { @@ -165,7 +165,7 @@ index 4185ec46435ddf48d9e25c4d71ac4e14eb6301cf..1d810a9b23d236493db121dde92c7ebc this.player.resetIdleTimer(); // CraftBukkit - SPIGOT-854 this.disconnect(new ChatMessage("multiplayer.disconnect.idling")); } -@@ -517,6 +523,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -521,6 +527,8 @@ public class PlayerConnection implements PacketListenerPlayIn { this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -174,7 +174,7 @@ index 4185ec46435ddf48d9e25c4d71ac4e14eb6301cf..1d810a9b23d236493db121dde92c7ebc // Skip the first time we do this if (true) { // Spigot - don't skip any move events Location oldTo = to.clone(); -@@ -1253,7 +1261,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1257,7 +1265,7 @@ public class PlayerConnection implements PacketListenerPlayIn { if (!this.player.H() && d11 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.playerInteractManager.isCreative() && this.player.playerInteractManager.getGameMode() != EnumGamemode.SPECTATOR) { // Spigot flag1 = true; // Tuinity - diff on change, this should be moved wrongly @@ -183,7 +183,7 @@ index 4185ec46435ddf48d9e25c4d71ac4e14eb6301cf..1d810a9b23d236493db121dde92c7ebc } this.player.setLocation(d4, d5, d6, f, f1); -@@ -1303,6 +1311,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1307,6 +1315,8 @@ public class PlayerConnection implements PacketListenerPlayIn { this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -263,10 +263,10 @@ index 361f7857e461578e90cb71e15027dadaf794cb69..2578a4677d1ee060f687be531e696b7c + } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index ed7b91bf703c7e7d5cbe323d9ab1c299c33ebad1..e319f3b1282af8019ae706f46e3978e789fbc877 100644 +index f965b071cd2f6a70a216679e4f19956115edee4f..8e69ad39102b8a91e664b31a7f07c5212822e961 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2222,4 +2222,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2427,4 +2427,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return spigot; } // Spigot end @@ -289,10 +289,10 @@ index ed7b91bf703c7e7d5cbe323d9ab1c299c33ebad1..e319f3b1282af8019ae706f46e3978e7 + // Purpur end } diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 6ade13fd88c381280f619daaa8d6b241c67dd9d9..f80526939be358ac46430f35f3fdc7f88038c262 100644 +index 18295dceeacefd2586f3e3fe8bd58790740ba14d..f2e978107ef1163ceadb3ea7594eba6e900a8a28 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -205,6 +205,7 @@ public class ActivationRange +@@ -206,6 +206,7 @@ public class ActivationRange { player.activatedTick = MinecraftServer.currentTick; diff --git a/patches/Purpur/patches/server/0009-Bring-back-server-name.patch b/patches/Purpur/patches/server/0008-Bring-back-server-name.patch similarity index 82% rename from patches/Purpur/patches/server/0009-Bring-back-server-name.patch rename to patches/Purpur/patches/server/0008-Bring-back-server-name.patch index 28dfe1ec..a78c486d 100644 --- a/patches/Purpur/patches/server/0009-Bring-back-server-name.patch +++ b/patches/Purpur/patches/server/0008-Bring-back-server-name.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Bring back server name diff --git a/src/main/java/net/minecraft/server/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/DedicatedServerProperties.java -index 65961a03728852bd75367083a0de6fd0082b17cb..780474397acb4d0e7ecb4540e1a2db5721e59d3d 100644 +index 15a4f921b1ae2bbc66b7d58238b60151123a7eb3..fe5937d890762ab37a90f189c4992af389d2c41d 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 d; diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -index af84813c703813ec3a6ca89ff437d89e31a9100f..2d38a4782d85dd9c5e6097bea6c13c6185ea05ab 100644 +index c79623339cfe8fb8484bcc2a8c3eb119b9e83093..3a6a1f8ce0a30f2bdc08ec36fe9a2381439e7fa4 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -@@ -388,4 +388,18 @@ public final class CraftItemFactory implements ItemFactory { +@@ -396,4 +396,18 @@ public final class CraftItemFactory implements ItemFactory { new net.md_5.bungee.api.chat.TextComponent(customName)); } // Paper end diff --git a/patches/Purpur/patches/server/0014-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/Purpur/patches/server/0013-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 94% rename from patches/Purpur/patches/server/0014-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/Purpur/patches/server/0013-PlayerSetSpawnerTypeWithEggEvent.patch index 52606f59..41fdb7da 100644 --- a/patches/Purpur/patches/server/0014-PlayerSetSpawnerTypeWithEggEvent.patch +++ b/patches/Purpur/patches/server/0013-PlayerSetSpawnerTypeWithEggEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] PlayerSetSpawnerTypeWithEggEvent diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java -index bf914dc5ee7f2d4a324b6711ea273f5581ec84ad..1138981aebb7fbb3f3839dcd221e3ee850ab4456 100644 +index 93b5a6471cde31739d2bd5f2a9fc0e0d974d0eb0..36f572990a0c08f21df6f4dc40c5878b669ca00c 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java +++ b/src/main/java/net/minecraft/server/EntityTypes.java @@ -143,6 +143,16 @@ public class EntityTypes { @@ -25,7 +25,7 @@ index bf914dc5ee7f2d4a324b6711ea273f5581ec84ad..1138981aebb7fbb3f3839dcd221e3ee8 public static MinecraftKey getName(EntityTypes entitytypes) { return IRegistry.ENTITY_TYPE.getKey(entitytypes); } -@@ -287,6 +297,16 @@ public class EntityTypes { +@@ -301,6 +311,16 @@ public class EntityTypes { return this.bg; } @@ -42,7 +42,7 @@ index bf914dc5ee7f2d4a324b6711ea273f5581ec84ad..1138981aebb7fbb3f3839dcd221e3ee8 public String getDescriptionId() { return f(); } // Paper - OBFHELPER public String f() { if (this.bo == null) { -@@ -296,6 +316,7 @@ public class EntityTypes { +@@ -310,6 +330,7 @@ public class EntityTypes { return this.bo; } diff --git a/patches/Purpur/patches/server/0015-EMC-MonsterEggSpawnEvent.patch b/patches/Purpur/patches/server/0014-EMC-MonsterEggSpawnEvent.patch similarity index 90% rename from patches/Purpur/patches/server/0015-EMC-MonsterEggSpawnEvent.patch rename to patches/Purpur/patches/server/0014-EMC-MonsterEggSpawnEvent.patch index 3dfa2461..690259c1 100644 --- a/patches/Purpur/patches/server/0015-EMC-MonsterEggSpawnEvent.patch +++ b/patches/Purpur/patches/server/0014-EMC-MonsterEggSpawnEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] EMC - MonsterEggSpawnEvent diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java -index 1138981aebb7fbb3f3839dcd221e3ee850ab4456..37b984a5b6c1c6e146e1c4b0947d1e39a051cfbb 100644 +index 36f572990a0c08f21df6f4dc40c5878b669ca00c..ed1e0bd379b95bc090c7cdf57de70ec9cc2dac5a 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java +++ b/src/main/java/net/minecraft/server/EntityTypes.java -@@ -187,19 +187,46 @@ public class EntityTypes { +@@ -187,17 +187,31 @@ public class EntityTypes { @Nullable public Entity spawnCreature(WorldServer worldserver, @Nullable ItemStack itemstack, @Nullable EntityHuman entityhuman, BlockPosition blockposition, EnumMobSpawn enummobspawn, boolean flag, boolean flag1) { @@ -39,6 +39,11 @@ index 1138981aebb7fbb3f3839dcd221e3ee850ab4456..37b984a5b6c1c6e146e1c4b0947d1e39 + @Nullable + public T spawnCreature(WorldServer worldserver, @Nullable ItemStack itemstack, @Nullable NBTTagCompound nbttagcompound, @Nullable IChatBaseComponent ichatbasecomponent, @Nullable EntityHuman entityhuman, BlockPosition blockposition, EnumMobSpawn enummobspawn, boolean flag, boolean flag1, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason) { + // Purpur end + // Paper start - Call PreCreatureSpawnEvent + org.bukkit.entity.EntityType type = org.bukkit.entity.EntityType.fromName(EntityTypes.getName(this).getKey()); + if (type != null) { +@@ -214,6 +228,19 @@ public class EntityTypes { + // Paper end T t0 = this.createCreature(worldserver, nbttagcompound, ichatbasecomponent, entityhuman, blockposition, enummobspawn, flag, flag1); + // Purpur start diff --git a/patches/Purpur/patches/server/0016-Player-invulnerabilities.patch b/patches/Purpur/patches/server/0015-Player-invulnerabilities.patch similarity index 86% rename from patches/Purpur/patches/server/0016-Player-invulnerabilities.patch rename to patches/Purpur/patches/server/0015-Player-invulnerabilities.patch index 3425989b..cd74903a 100644 --- a/patches/Purpur/patches/server/0016-Player-invulnerabilities.patch +++ b/patches/Purpur/patches/server/0015-Player-invulnerabilities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player invulnerabilities diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 7d7a512ad752e15fbe0edce47da1da76c01df3b3..9b09d68435290add2781a72e5bc62ce50a79e39f 100644 +index 5affcd13a9376e68ddeba467c4ed07b6002fdee8..633a33e19e41c56369bc18f7af5c91a5b69be3b7 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -151,6 +151,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -154,6 +154,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { this.canPickUpLoot = true; this.maxHealthCache = this.getMaxHealth(); this.cachedSingleMobDistanceMap = new com.destroystokyo.paper.util.PooledHashSets.PooledObjectLinkedOpenHashSet<>(this); // Paper @@ -17,7 +17,7 @@ index 7d7a512ad752e15fbe0edce47da1da76c01df3b3..9b09d68435290add2781a72e5bc62ce5 } // Paper start public BlockPosition getPointInFront(double inFront) { -@@ -992,6 +994,12 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -989,6 +991,12 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } @@ -30,7 +30,7 @@ index 7d7a512ad752e15fbe0edce47da1da76c01df3b3..9b09d68435290add2781a72e5bc62ce5 @Override public boolean damageEntity(DamageSource damagesource, float f) { if (this.isInvulnerable(damagesource)) { -@@ -999,7 +1007,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -996,7 +1004,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } else { boolean flag = this.server.j() && this.canPvP() && "fall".equals(damagesource.translationIndex); @@ -39,7 +39,7 @@ index 7d7a512ad752e15fbe0edce47da1da76c01df3b3..9b09d68435290add2781a72e5bc62ce5 return false; } else { if (damagesource instanceof EntityDamageSource) { -@@ -1175,6 +1183,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1172,6 +1180,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } // Paper end @@ -47,7 +47,7 @@ index 7d7a512ad752e15fbe0edce47da1da76c01df3b3..9b09d68435290add2781a72e5bc62ce5 return this; } } -@@ -2345,9 +2354,17 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -2347,9 +2356,17 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @Override public boolean isFrozen() { // Paper - protected > public @@ -67,10 +67,10 @@ index 7d7a512ad752e15fbe0edce47da1da76c01df3b3..9b09d68435290add2781a72e5bc62ce5 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 1d810a9b23d236493db121dde92c7ebce25a25fe..218ebc7befca683607b0b9863384a5b5d6bd3a2f 100644 +index bba8dc8fd10dc34179ca3c8cf471fbb3739fa7b4..c586005b34c59710cf398e30924ff3653e0d62fd 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -1733,6 +1733,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1737,6 +1737,7 @@ public class PlayerConnection implements PacketListenerPlayIn { PlayerConnectionUtils.ensureMainThread(packetplayinresourcepackstatus, this, this.player.getWorldServer()); // Paper start PlayerResourcePackStatusEvent.Status packStatus = PlayerResourcePackStatusEvent.Status.values()[packetplayinresourcepackstatus.status.ordinal()]; @@ -79,10 +79,10 @@ index 1d810a9b23d236493db121dde92c7ebce25a25fe..218ebc7befca683607b0b9863384a5b5 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 eabd1aa2b740bcb6db40be300cd6daf59674fa3f..46043d3a4f4056fff93b867c65d363ac1277db7a 100644 +index d03d0c13cca1762078617744253a9757b388958f..00db0f5fb098a4db4092f8ab75a4489cf466baac 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -915,6 +915,8 @@ public abstract class PlayerList { +@@ -914,6 +914,8 @@ public abstract class PlayerList { } // Paper end @@ -108,10 +108,10 @@ index 2578a4677d1ee060f687be531e696b7c7be89e84..c441fcea9b2b5a77b801c8a69541cf42 + } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index e319f3b1282af8019ae706f46e3978e789fbc877..62ef7bb712e91fed150bf9c16c11635a9aaaab67 100644 +index 8e69ad39102b8a91e664b31a7f07c5212822e961..ca15efea5da7be1717a211b9b3556c755788561a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2238,5 +2238,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2443,5 +2443,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void resetIdleTimer() { getHandle().resetIdleTimer(); } diff --git a/patches/Purpur/patches/server/0017-Anvil-API.patch b/patches/Purpur/patches/server/0016-Anvil-API.patch similarity index 100% rename from patches/Purpur/patches/server/0017-Anvil-API.patch rename to patches/Purpur/patches/server/0016-Anvil-API.patch diff --git a/patches/Purpur/patches/server/0018-Configurable-villager-brain-ticks.patch b/patches/Purpur/patches/server/0017-Configurable-villager-brain-ticks.patch similarity index 91% rename from patches/Purpur/patches/server/0018-Configurable-villager-brain-ticks.patch rename to patches/Purpur/patches/server/0017-Configurable-villager-brain-ticks.patch index d663244d..4babe548 100644 --- a/patches/Purpur/patches/server/0018-Configurable-villager-brain-ticks.patch +++ b/patches/Purpur/patches/server/0017-Configurable-villager-brain-ticks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable villager brain ticks diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 21d0570a59240e955ff148bac0226b220a7dec36..c034869310ca3dadbfe5425c45aaa80dac59ac88 100644 +index 90154d2180ebb6a54536884bf89187ca17d11da5..1c87bc91515490e2f8579a5321058845c7d30a56 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -58,6 +58,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -56,6 +56,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation }, MemoryModuleType.MEETING_POINT, (entityvillager, villageplacetype) -> { return villageplacetype == VillagePlaceType.s; }); @@ -16,7 +16,7 @@ index 21d0570a59240e955ff148bac0226b220a7dec36..c034869310ca3dadbfe5425c45aaa80d public EntityVillager(EntityTypes entitytypes, World world) { this(entitytypes, world, VillagerType.PLAINS); -@@ -70,6 +71,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -68,6 +69,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation this.getNavigation().d(true); this.setCanPickupLoot(true); this.setVillagerData(this.getVillagerData().withType(villagertype).withProfession(VillagerProfession.NONE)); @@ -24,7 +24,7 @@ index 21d0570a59240e955ff148bac0226b220a7dec36..c034869310ca3dadbfe5425c45aaa80d } @Override -@@ -166,7 +168,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -164,7 +166,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation protected void mobTick() { mobTick(false); } protected void mobTick(boolean inactive) { this.world.getMethodProfiler().enter("villagerBrain"); diff --git a/patches/Purpur/patches/server/0019-Alternative-Keepalive-Handling.patch b/patches/Purpur/patches/server/0018-Alternative-Keepalive-Handling.patch similarity index 94% rename from patches/Purpur/patches/server/0019-Alternative-Keepalive-Handling.patch rename to patches/Purpur/patches/server/0018-Alternative-Keepalive-Handling.patch index fc0b83b8..898dcc4f 100644 --- a/patches/Purpur/patches/server/0019-Alternative-Keepalive-Handling.patch +++ b/patches/Purpur/patches/server/0018-Alternative-Keepalive-Handling.patch @@ -17,10 +17,10 @@ index 8e93f1540ba5f995489c1fbcec70d10b011cd9c3..470f92c4fb0919d052b19acff8dff533 return this.a; } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 218ebc7befca683607b0b9863384a5b5d6bd3a2f..dc93f0c8f65e2a796604b8e4488c1b3bd155b64e 100644 +index c586005b34c59710cf398e30924ff3653e0d62fd..be29ecfa00d53ad2067015a5261184b4157c604b 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -84,6 +84,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -86,6 +86,7 @@ public class PlayerConnection implements PacketListenerPlayIn { private long lastKeepAlive = SystemUtils.getMonotonicMillis(); private void setLastPing(long lastPing) { this.lastKeepAlive = lastPing;}; private long getLastPing() { return this.lastKeepAlive;}; // Paper - OBFHELPER private boolean awaitingKeepAlive; private void setPendingPing(boolean isPending) { this.awaitingKeepAlive = isPending;}; private boolean isPendingPing() { return this.awaitingKeepAlive;}; // Paper - OBFHELPER private long h; private void setKeepAliveID(long keepAliveID) { this.h = keepAliveID;}; private long getKeepAliveID() {return this.h; }; // Paper - OBFHELPER @@ -28,7 +28,7 @@ index 218ebc7befca683607b0b9863384a5b5d6bd3a2f..dc93f0c8f65e2a796604b8e4488c1b3b // CraftBukkit start - multithreaded fields private volatile int chatThrottle; private static final AtomicIntegerFieldUpdater chatSpamField = AtomicIntegerFieldUpdater.newUpdater(PlayerConnection.class, "chatThrottle"); -@@ -218,6 +219,21 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -220,6 +221,21 @@ public class PlayerConnection implements PacketListenerPlayIn { long currentTime = SystemUtils.getMonotonicMillis(); long elapsedTime = currentTime - this.getLastPing(); @@ -50,7 +50,7 @@ index 218ebc7befca683607b0b9863384a5b5d6bd3a2f..dc93f0c8f65e2a796604b8e4488c1b3b 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 -@@ -2907,6 +2923,16 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2908,6 +2924,16 @@ public class PlayerConnection implements PacketListenerPlayIn { @Override public void a(PacketPlayInKeepAlive packetplayinkeepalive) { diff --git a/patches/Purpur/patches/server/0020-Silk-touch-spawners.patch b/patches/Purpur/patches/server/0019-Silk-touch-spawners.patch similarity index 75% rename from patches/Purpur/patches/server/0020-Silk-touch-spawners.patch rename to patches/Purpur/patches/server/0019-Silk-touch-spawners.patch index 0282a262..21764ba8 100644 --- a/patches/Purpur/patches/server/0020-Silk-touch-spawners.patch +++ b/patches/Purpur/patches/server/0019-Silk-touch-spawners.patch @@ -4,26 +4,41 @@ Date: Thu, 9 May 2019 14:27:37 -0500 Subject: [PATCH] Silk touch spawners +diff --git a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java +index c45d48cef53476fa1602cebaa57c72894bba10d3..8a8ad2a0dc50de1f7f911d0547480b65d03fee0c 100644 +--- a/src/main/java/io/papermc/paper/adventure/PaperAdventure.java ++++ b/src/main/java/io/papermc/paper/adventure/PaperAdventure.java +@@ -82,6 +82,7 @@ public final class PaperAdventure { + .build(); + public static final LegacyComponentSerializer LEGACY_SECTION_UXRC = LegacyComponentSerializer.builder().flattener(FLATTENER).hexColors().useUnusualXRepeatedCharacterHexFormat().build(); + public static final PlainComponentSerializer PLAIN = PlainComponentSerializer.builder().flattener(FLATTENER).build(); ++ public static final LegacyComponentSerializer LEGACY_AMPERSAND = LegacyComponentSerializer.builder().character(LegacyComponentSerializer.AMPERSAND_CHAR).hexColors().build(); // Purpur + static final GsonComponentSerializer GSON = GsonComponentSerializer.builder() + .legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.INSTANCE) + .build(); diff --git a/src/main/java/net/minecraft/server/BlockMobSpawner.java b/src/main/java/net/minecraft/server/BlockMobSpawner.java -index 81e145ff0759322f74888c81df8d2133fece7144..91b92d95a961ba00ddd7026bb83d021bb1ac51ed 100644 +index 81e145ff0759322f74888c81df8d2133fece7144..567a6a064254d99ae6a931b91e6bdd94badb19fc 100644 --- a/src/main/java/net/minecraft/server/BlockMobSpawner.java +++ b/src/main/java/net/minecraft/server/BlockMobSpawner.java -@@ -1,5 +1,14 @@ +@@ -1,5 +1,17 @@ package net.minecraft.server; +// Purpur start -+import net.md_5.bungee.api.ChatColor; -+import net.md_5.bungee.api.chat.BaseComponent; -+import net.md_5.bungee.api.chat.TextComponent; -+import net.md_5.bungee.chat.ComponentSerializer; ++import io.papermc.paper.adventure.PaperAdventure; ++import net.kyori.adventure.text.Component; ++import net.kyori.adventure.text.TextReplacementConfig; ++import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; ++import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; + +import java.util.List; ++ ++import static net.kyori.adventure.text.format.TextDecoration.ITALIC; +// Purpur end + public class BlockMobSpawner extends BlockTileEntity { protected BlockMobSpawner(BlockBase.Info blockbase_info) { -@@ -11,6 +20,59 @@ public class BlockMobSpawner extends BlockTileEntity { +@@ -11,6 +23,59 @@ public class BlockMobSpawner extends BlockTileEntity { return new TileEntityMobSpawner(); } @@ -33,17 +48,19 @@ index 81e145ff0759322f74888c81df8d2133fece7144..91b92d95a961ba00ddd7026bb83d021b + if (world.purpurConfig.silkTouchEnabled && entityhuman.getBukkitEntity().hasPermission("purpur.drop.spawners") && isSilkTouch(world, itemstack)) { + MinecraftKey type = ((TileEntityMobSpawner) tileentity).getSpawner().getMobName(); + if (type != null) { -+ String mobName = EntityTypes.getFromKey(type).getTranslatedName(); ++ final Component mobName = PaperAdventure.asAdventure(EntityTypes.getFromKey(type).getNameComponent()); ++ final TextReplacementConfig config = TextReplacementConfig.builder() ++ .matchLiteral("{mob}") ++ .replacement(mobName) ++ .build(); + + NBTTagCompound display = new NBTTagCompound(); + boolean customDisplay = false; + + String name = world.purpurConfig.silkTouchSpawnerName; + if (name != null && !name.isEmpty() && !name.equals("Spawner")) { -+ name = ChatColor.translateAlternateColorCodes('&', name -+ .replace("{mob}", mobName)); -+ BaseComponent[] comp = TextComponent.fromLegacyText(name); -+ display.set("Name", NBTTagString.create(ComponentSerializer.toString(comp))); ++ final Component displayName = PaperAdventure.LEGACY_AMPERSAND.deserialize(name).replaceText(config).decoration(ITALIC, false); ++ display.set("Name", NBTTagString.create(GsonComponentSerializer.gson().serialize(displayName))); + customDisplay = true; + } + @@ -51,10 +68,8 @@ index 81e145ff0759322f74888c81df8d2133fece7144..91b92d95a961ba00ddd7026bb83d021b + if (lore != null && !lore.isEmpty()) { + NBTTagList list = new NBTTagList(); + for (String line : lore) { -+ line = ChatColor.translateAlternateColorCodes('&', line -+ .replace("{mob}", mobName)); -+ BaseComponent[] comp = TextComponent.fromLegacyText(line); -+ list.add(NBTTagString.create(ComponentSerializer.toString(comp))); ++ final Component lineComponent = PaperAdventure.LEGACY_AMPERSAND.deserialize(line).replaceText(config).decoration(ITALIC, false); ++ list.add(NBTTagString.create(GsonComponentSerializer.gson().serialize(lineComponent))); + } + display.set("Lore", list); + customDisplay = true; @@ -83,7 +98,7 @@ index 81e145ff0759322f74888c81df8d2133fece7144..91b92d95a961ba00ddd7026bb83d021b @Override public void dropNaturally(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, ItemStack itemstack) { super.dropNaturally(iblockdata, worldserver, blockposition, itemstack); -@@ -23,6 +85,7 @@ public class BlockMobSpawner extends BlockTileEntity { +@@ -23,6 +88,7 @@ public class BlockMobSpawner extends BlockTileEntity { @Override public int getExpDrop(IBlockData iblockdata, WorldServer worldserver, BlockPosition blockposition, ItemStack itemstack) { diff --git a/patches/Purpur/patches/server/0021-MC-168772-Fix-Add-turtle-egg-block-options.patch b/patches/Purpur/patches/server/0020-MC-168772-Fix-Add-turtle-egg-block-options.patch similarity index 96% rename from patches/Purpur/patches/server/0021-MC-168772-Fix-Add-turtle-egg-block-options.patch rename to patches/Purpur/patches/server/0020-MC-168772-Fix-Add-turtle-egg-block-options.patch index 1e9731b4..2c3888d6 100644 --- a/patches/Purpur/patches/server/0021-MC-168772-Fix-Add-turtle-egg-block-options.patch +++ b/patches/Purpur/patches/server/0020-MC-168772-Fix-Add-turtle-egg-block-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] MC-168772 Fix - Add turtle egg block options diff --git a/src/main/java/net/minecraft/server/BlockTurtleEgg.java b/src/main/java/net/minecraft/server/BlockTurtleEgg.java -index 553c8affab6228cb187549deb5b34f79ba8f912c..92cca6c44f12a9283988b84681aac760f1c38d7e 100644 +index 00c37493c28805558dea06a20973f32ab0359016..0f147dc938cef428452bd3137c68b52a78f9fbde 100644 --- a/src/main/java/net/minecraft/server/BlockTurtleEgg.java +++ b/src/main/java/net/minecraft/server/BlockTurtleEgg.java @@ -163,6 +163,23 @@ public class BlockTurtleEgg extends Block { diff --git a/patches/Purpur/patches/server/0022-Fix-vanilla-command-permission-handler.patch b/patches/Purpur/patches/server/0021-Fix-vanilla-command-permission-handler.patch similarity index 100% rename from patches/Purpur/patches/server/0022-Fix-vanilla-command-permission-handler.patch rename to patches/Purpur/patches/server/0021-Fix-vanilla-command-permission-handler.patch diff --git a/patches/Purpur/patches/server/0023-Logger-settings-suppressing-pointless-logs.patch b/patches/Purpur/patches/server/0022-Logger-settings-suppressing-pointless-logs.patch similarity index 100% rename from patches/Purpur/patches/server/0023-Logger-settings-suppressing-pointless-logs.patch rename to patches/Purpur/patches/server/0022-Logger-settings-suppressing-pointless-logs.patch diff --git a/patches/Purpur/patches/server/0024-Disable-outdated-build-check.patch b/patches/Purpur/patches/server/0023-Disable-outdated-build-check.patch similarity index 100% rename from patches/Purpur/patches/server/0024-Disable-outdated-build-check.patch rename to patches/Purpur/patches/server/0023-Disable-outdated-build-check.patch diff --git a/patches/Purpur/patches/server/0025-Giants-AI-settings.patch b/patches/Purpur/patches/server/0024-Giants-AI-settings.patch similarity index 98% rename from patches/Purpur/patches/server/0025-Giants-AI-settings.patch rename to patches/Purpur/patches/server/0024-Giants-AI-settings.patch index f8609b98..66320129 100644 --- a/patches/Purpur/patches/server/0025-Giants-AI-settings.patch +++ b/patches/Purpur/patches/server/0024-Giants-AI-settings.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Giants AI settings diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 2b76b5a70280def08f239ff387407a9d328d484c..ceb30228fefee86d5706b3ac0c5f2ea83d336dfb 100644 +index 2ec48858be8eb2c522c9685b43bd36b3b581cf8b..7cafc89e048e43f339f5289f38674b18d052e70d 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -136,7 +136,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -118,7 +118,7 @@ index a47217c020d2c2a3caddafa0549dc827373798dd..07908edcaffb5ee1be8a71f3f0affb91 float f = difficultydamagescaler.d(); diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 59699bb23a189b7e53737b2f8f5263608a64109c..8ebfc9b8cf82ba914d5e56aca330033f176be334 100644 +index ebe18e5926bb9e7d2dacdb09c213c0ad6fb847c4..996242d7c62984b67b9443356c509d0c7c85e33a 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -166,6 +166,7 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/Purpur/patches/server/0026-Illusioners-AI-settings.patch b/patches/Purpur/patches/server/0025-Illusioners-AI-settings.patch similarity index 100% rename from patches/Purpur/patches/server/0026-Illusioners-AI-settings.patch rename to patches/Purpur/patches/server/0025-Illusioners-AI-settings.patch diff --git a/patches/Purpur/patches/server/0027-Zombie-horse-naturally-spawn.patch b/patches/Purpur/patches/server/0026-Zombie-horse-naturally-spawn.patch similarity index 100% rename from patches/Purpur/patches/server/0027-Zombie-horse-naturally-spawn.patch rename to patches/Purpur/patches/server/0026-Zombie-horse-naturally-spawn.patch diff --git a/patches/Purpur/patches/server/0028-Charged-creeper-naturally-spawn.patch b/patches/Purpur/patches/server/0027-Charged-creeper-naturally-spawn.patch similarity index 92% rename from patches/Purpur/patches/server/0028-Charged-creeper-naturally-spawn.patch rename to patches/Purpur/patches/server/0027-Charged-creeper-naturally-spawn.patch index c8ba04ef..c35e4b07 100644 --- a/patches/Purpur/patches/server/0028-Charged-creeper-naturally-spawn.patch +++ b/patches/Purpur/patches/server/0027-Charged-creeper-naturally-spawn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Charged creeper naturally spawn diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java -index 79ef955070b2982be79cc58e40093624bd088ff0..eb4a0ef0e7a8bc8e0cb648bc369815ce0efb6223 100644 +index b2f028422d9a7a84e49e383b78032feb887a85c0..ff80ac7db73b7c7dd6ac62ac128af1cab961d075 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java -@@ -23,6 +23,17 @@ public class EntityCreeper extends EntityMonster { +@@ -24,6 +24,17 @@ public class EntityCreeper extends EntityMonster { super(entitytypes, world); } diff --git a/patches/Purpur/patches/server/0029-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/Purpur/patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch similarity index 100% rename from patches/Purpur/patches/server/0029-Rabbit-naturally-spawn-toast-and-killer.patch rename to patches/Purpur/patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch diff --git a/patches/Purpur/patches/server/0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/Purpur/patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 91% rename from patches/Purpur/patches/server/0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to patches/Purpur/patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch index b1287fe4..40454d09 100644 --- a/patches/Purpur/patches/server/0030-Fix-outdated-server-showing-in-ping-before-server-fu.patch +++ b/patches/Purpur/patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Fix 'outdated server' showing in ping before server fully diff --git a/src/main/java/net/minecraft/server/PacketStatusListener.java b/src/main/java/net/minecraft/server/PacketStatusListener.java -index 9beb6fad228ccb3081b661c845836f4f29404d86..b98d094422f09ddffe09bac7cf1a9c7e92ae5aa6 100644 +index d0fad346dd4511722f958a8c0bda67492184fb62..1df22ad7b35d6bd974e7fe805920542654c1b9d0 100644 --- a/src/main/java/net/minecraft/server/PacketStatusListener.java +++ b/src/main/java/net/minecraft/server/PacketStatusListener.java @@ -133,6 +133,7 @@ public class PacketStatusListener implements PacketStatusInListener { diff --git a/patches/Purpur/patches/server/0031-Make-Iron-Golems-Swim.patch b/patches/Purpur/patches/server/0030-Make-Iron-Golems-Swim.patch similarity index 100% rename from patches/Purpur/patches/server/0031-Make-Iron-Golems-Swim.patch rename to patches/Purpur/patches/server/0030-Make-Iron-Golems-Swim.patch diff --git a/patches/Purpur/patches/server/0032-Dont-send-useless-entity-packets.patch b/patches/Purpur/patches/server/0031-Dont-send-useless-entity-packets.patch similarity index 97% rename from patches/Purpur/patches/server/0032-Dont-send-useless-entity-packets.patch rename to patches/Purpur/patches/server/0031-Dont-send-useless-entity-packets.patch index e282b094..7ce1309a 100644 --- a/patches/Purpur/patches/server/0032-Dont-send-useless-entity-packets.patch +++ b/patches/Purpur/patches/server/0031-Dont-send-useless-entity-packets.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Dont send useless entity packets diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java -index 81869215876d10a84ab27c0e6f41963c1346fd1c..f3b37f5704d752d1ec4d4d916690907dace67183 100644 +index 2402c18e6a18221a43bea9fc68278da9d19eede4..e51b6bd0698593867e6821326d223770766d717f 100644 --- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java +++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java @@ -172,6 +172,7 @@ public class EntityTrackerEntry { diff --git a/patches/Purpur/patches/server/0033-Tulips-change-fox-type.patch b/patches/Purpur/patches/server/0032-Tulips-change-fox-type.patch similarity index 100% rename from patches/Purpur/patches/server/0033-Tulips-change-fox-type.patch rename to patches/Purpur/patches/server/0032-Tulips-change-fox-type.patch diff --git a/patches/Purpur/patches/server/0034-Breedable-Polar-Bears.patch b/patches/Purpur/patches/server/0033-Breedable-Polar-Bears.patch similarity index 100% rename from patches/Purpur/patches/server/0034-Breedable-Polar-Bears.patch rename to patches/Purpur/patches/server/0033-Breedable-Polar-Bears.patch diff --git a/patches/Purpur/patches/server/0035-Chickens-can-retaliate.patch b/patches/Purpur/patches/server/0034-Chickens-can-retaliate.patch similarity index 100% rename from patches/Purpur/patches/server/0035-Chickens-can-retaliate.patch rename to patches/Purpur/patches/server/0034-Chickens-can-retaliate.patch diff --git a/patches/Purpur/patches/server/0036-Add-option-to-set-armorstand-step-height.patch b/patches/Purpur/patches/server/0035-Add-option-to-set-armorstand-step-height.patch similarity index 100% rename from patches/Purpur/patches/server/0036-Add-option-to-set-armorstand-step-height.patch rename to patches/Purpur/patches/server/0035-Add-option-to-set-armorstand-step-height.patch diff --git a/patches/Purpur/patches/server/0037-Cat-spawning-options.patch b/patches/Purpur/patches/server/0036-Cat-spawning-options.patch similarity index 100% rename from patches/Purpur/patches/server/0037-Cat-spawning-options.patch rename to patches/Purpur/patches/server/0036-Cat-spawning-options.patch diff --git a/patches/Purpur/patches/server/0038-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch b/patches/Purpur/patches/server/0037-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch similarity index 100% rename from patches/Purpur/patches/server/0038-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch rename to patches/Purpur/patches/server/0037-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch diff --git a/patches/Purpur/patches/server/0039-Cows-eat-mushrooms.patch b/patches/Purpur/patches/server/0038-Cows-eat-mushrooms.patch similarity index 96% rename from patches/Purpur/patches/server/0039-Cows-eat-mushrooms.patch rename to patches/Purpur/patches/server/0038-Cows-eat-mushrooms.patch index a1633826..f145d2aa 100644 --- a/patches/Purpur/patches/server/0039-Cows-eat-mushrooms.patch +++ b/patches/Purpur/patches/server/0038-Cows-eat-mushrooms.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Cows eat mushrooms diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index ceb30228fefee86d5706b3ac0c5f2ea83d336dfb..d16b3482914e1bd390c745b590f2b538c1a45601 100644 +index 7cafc89e048e43f339f5289f38674b18d052e70d..4edb489012ddc9454e412f06acc4587a3572c8d3 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -2778,6 +2778,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2791,6 +2791,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.invulnerable = flag; } @@ -110,7 +110,7 @@ index 42e6761c8b18b79ffd3f4d5e853ea87a2c153c23..cfb009c811bd2908d38da1b0007cb7aa public EntityCow createChild(WorldServer worldserver, EntityAgeable entityageable) { return (EntityCow) EntityTypes.COW.a((World) worldserver); diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 8ebfc9b8cf82ba914d5e56aca330033f176be334..ac9ac19c265e4be440531656a109b0468864637e 100644 +index 996242d7c62984b67b9443356c509d0c7c85e33a..8cc440e0e7108e2c7ca29b2f8a2fc5a723dcef0d 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -81,7 +81,7 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/Purpur/patches/server/0040-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/Purpur/patches/server/0039-Fix-cow-rotation-when-shearing-mooshroom.patch similarity index 88% rename from patches/Purpur/patches/server/0040-Fix-cow-rotation-when-shearing-mooshroom.patch rename to patches/Purpur/patches/server/0039-Fix-cow-rotation-when-shearing-mooshroom.patch index d0e14361..aa8b1176 100644 --- a/patches/Purpur/patches/server/0040-Fix-cow-rotation-when-shearing-mooshroom.patch +++ b/patches/Purpur/patches/server/0039-Fix-cow-rotation-when-shearing-mooshroom.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix cow rotation when shearing mooshroom diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java -index 1aacbae04ce89be4da82d65116c494c493e71530..38df17bd206c908582ece2c4105235feaf0f2227 100644 +index c9112f783c81d58570e622a0e784da1e2a93d0ff..91cfe60f764a573e3724b48a9ae02e806c1e4fb8 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java -@@ -135,7 +135,13 @@ public class EntityMushroomCow extends EntityCow implements IShearable { +@@ -136,7 +136,13 @@ public class EntityMushroomCow extends EntityCow implements IShearable { entitycow.setPositionRotation(this.locX(), this.locY(), this.locZ(), this.yaw, this.pitch); entitycow.setHealth(this.getHealth()); diff --git a/patches/Purpur/patches/server/0041-Pigs-give-saddle-back.patch b/patches/Purpur/patches/server/0040-Pigs-give-saddle-back.patch similarity index 95% rename from patches/Purpur/patches/server/0041-Pigs-give-saddle-back.patch rename to patches/Purpur/patches/server/0040-Pigs-give-saddle-back.patch index 06028b58..5d5df6e5 100644 --- a/patches/Purpur/patches/server/0041-Pigs-give-saddle-back.patch +++ b/patches/Purpur/patches/server/0040-Pigs-give-saddle-back.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Pigs give saddle back diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java -index ee94c2827cfc53f7a37e61d8c1c0c30a52374cf8..7f52c39234e69b612b89993ce4503c20690064ed 100644 +index 01ca5983cade997b1f0d27fdf495c74c6daa0922..6ea3e4ffc3f42f4282adf3554944f24d92ca2079 100644 --- a/src/main/java/net/minecraft/server/EntityPig.java +++ b/src/main/java/net/minecraft/server/EntityPig.java @@ -109,6 +109,18 @@ public class EntityPig extends EntityAnimal implements ISteerable, ISaddleable { diff --git a/patches/Purpur/patches/server/0042-Snowman-drop-and-put-back-pumpkin.patch b/patches/Purpur/patches/server/0041-Snowman-drop-and-put-back-pumpkin.patch similarity index 91% rename from patches/Purpur/patches/server/0042-Snowman-drop-and-put-back-pumpkin.patch rename to patches/Purpur/patches/server/0041-Snowman-drop-and-put-back-pumpkin.patch index e4adb235..e6f2006d 100644 --- a/patches/Purpur/patches/server/0042-Snowman-drop-and-put-back-pumpkin.patch +++ b/patches/Purpur/patches/server/0041-Snowman-drop-and-put-back-pumpkin.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Snowman drop and put back pumpkin diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index 48997367a67ffd1dbf29cdb048720610528f35cb..51396cbd18d0e053e788f82bf4a3bc2533f20e11 100644 +index a11c599a9779aa084a1d7d1b6b3485d5b9c23906..c39f3c06eb199a24f32a5c581e877073b580502c 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java -@@ -123,6 +123,14 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -124,6 +124,14 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt } return EnumInteractionResult.a(this.world.isClientSide); @@ -23,7 +23,7 @@ index 48997367a67ffd1dbf29cdb048720610528f35cb..51396cbd18d0e053e788f82bf4a3bc25 } else { return EnumInteractionResult.PASS; } -@@ -133,6 +141,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -134,6 +142,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt this.world.playSound((EntityHuman) null, (Entity) this, SoundEffects.ENTITY_SNOW_GOLEM_SHEAR, soundcategory, 1.0F, 1.0F); if (!this.world.s_()) { this.setHasPumpkin(false); diff --git a/patches/Purpur/patches/server/0043-Ender-dragon-always-drop-full-exp.patch b/patches/Purpur/patches/server/0042-Ender-dragon-always-drop-full-exp.patch similarity index 95% rename from patches/Purpur/patches/server/0043-Ender-dragon-always-drop-full-exp.patch rename to patches/Purpur/patches/server/0042-Ender-dragon-always-drop-full-exp.patch index 598dea52..24846cf3 100644 --- a/patches/Purpur/patches/server/0043-Ender-dragon-always-drop-full-exp.patch +++ b/patches/Purpur/patches/server/0042-Ender-dragon-always-drop-full-exp.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Ender dragon always drop full exp diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java -index de53af8c01f8fa9636386737b6bc071b32f87cd1..a5a2182455542bb8fd62941bd0da2f38ba698f35 100644 +index 7289d6c706b6c845584bac616c9babea80f8e885..f777aea69dc9949aae3251e9a530b8cffb251bad 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java @@ -564,7 +564,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { diff --git a/patches/Purpur/patches/server/0044-Signs-editable-on-right-click.patch b/patches/Purpur/patches/server/0043-Signs-editable-on-right-click.patch similarity index 94% rename from patches/Purpur/patches/server/0044-Signs-editable-on-right-click.patch rename to patches/Purpur/patches/server/0043-Signs-editable-on-right-click.patch index d753ccd4..c217038d 100644 --- a/patches/Purpur/patches/server/0044-Signs-editable-on-right-click.patch +++ b/patches/Purpur/patches/server/0043-Signs-editable-on-right-click.patch @@ -27,10 +27,10 @@ index 3585fd82c14338a82302ca403e91e6cfe65e1c19..770ad5edfb44acb69e7da33226ca6bf7 } 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 2b9d5724c1b63f5e55010f9e3450004821c098a4..316766970243e8ac00e4c82f6c710de5edc3fa51 100644 +index 3c7847b1156a486e253a0e9f74a857e841d90619..1e6bb566c0a718bba289b2e727a832e0aa6b7f15 100644 --- a/src/main/java/net/minecraft/server/TileEntitySign.java +++ b/src/main/java/net/minecraft/server/TileEntitySign.java -@@ -113,6 +113,7 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // +@@ -112,6 +112,7 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // return this.isEditable; } diff --git a/patches/Purpur/patches/server/0045-Signs-allow-color-codes.patch b/patches/Purpur/patches/server/0044-Signs-allow-color-codes.patch similarity index 57% rename from patches/Purpur/patches/server/0045-Signs-allow-color-codes.patch rename to patches/Purpur/patches/server/0044-Signs-allow-color-codes.patch index 23a4168e..c78ea40a 100644 --- a/patches/Purpur/patches/server/0045-Signs-allow-color-codes.patch +++ b/patches/Purpur/patches/server/0044-Signs-allow-color-codes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Signs allow color codes diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 9b09d68435290add2781a72e5bc62ce50a79e39f..1d69c07eb3890e61383928433db727bdb3de0202 100644 +index 633a33e19e41c56369bc18f7af5c91a5b69be3b7..0c384641dd840b3b04b93d2e33df7d75293d9351 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -1452,6 +1452,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1449,6 +1449,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @Override public void openSign(TileEntitySign tileentitysign) { @@ -17,29 +17,38 @@ index 9b09d68435290add2781a72e5bc62ce50a79e39f..1d69c07eb3890e61383928433db727bd this.playerConnection.sendPacket(new PacketPlayOutOpenSignEditor(tileentitysign.getPosition())); } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index dc93f0c8f65e2a796604b8e4488c1b3bd155b64e..eaddc933261aeccc963ac0f35eebb387c16ae6a0 100644 +index be29ecfa00d53ad2067015a5261184b4157c604b..4d0dcbcc00e44c4912302dd0e7331471f33cb370 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -2904,6 +2904,14 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2902,6 +2902,15 @@ public class PlayerConnection implements PacketListenerPlayIn { } } // Paper end + // Purpur start + if (worldserver.purpurConfig.signAllowColors) { -+ lines[i] = currentLine; -+ if (player.hasPermission("purpur.sign.color")) lines[i] = lines[i].replaceAll("(?i)&([0-9a-fr])", "\u00a7$1"); -+ if (player.hasPermission("purpur.sign.style")) lines[i] = lines[i].replaceAll("(?i)&([l-or])", "\u00a7$1"); -+ if (player.hasPermission("purpur.sign.magic")) lines[i] = lines[i].replaceAll("(?i)&([kr])", "\u00a7$1"); ++ final org.bukkit.entity.Player bukkitPlayer = player.getBukkitEntity(); ++ if (bukkitPlayer.hasPermission("purpur.sign.color")) currentLine = currentLine.replaceAll("(?i)&([0-9a-fr])", "\u00a7$1"); ++ if (bukkitPlayer.hasPermission("purpur.sign.style")) currentLine = currentLine.replaceAll("(?i)&([l-or])", "\u00a7$1"); ++ if (bukkitPlayer.hasPermission("purpur.sign.magic")) currentLine = currentLine.replaceAll("(?i)&([kr])", "\u00a7$1"); ++ lines.add(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(currentLine)); + } else + // Purpur end - lines[i] = SharedConstants.filterAllowedChatCharacters(currentLine); // Paper - Replaced with anvil color stripping method to stop exploits that allow colored signs to be created. + lines.add(net.kyori.adventure.text.Component.text(SharedConstants.filterAllowedChatCharacters(currentLine))); // Paper - Replaced with anvil color stripping method to stop exploits that allow colored signs to be created. } - SignChangeEvent event = new SignChangeEvent((org.bukkit.craftbukkit.block.CraftBlock) player.getWorld().getBlockAt(x, y, z), this.server.getPlayer(this.player), lines); + SignChangeEvent event = new SignChangeEvent(org.bukkit.craftbukkit.block.CraftBlock.at(worldserver, blockposition), this.getPlayer(), lines); diff --git a/src/main/java/net/minecraft/server/TileEntitySign.java b/src/main/java/net/minecraft/server/TileEntitySign.java -index 316766970243e8ac00e4c82f6c710de5edc3fa51..852bb5db84ddd735f5e0d7f922918cc90b897e91 100644 +index 1e6bb566c0a718bba289b2e727a832e0aa6b7f15..cbbaf8ca4b6425e2ce58e500b13b3b5269704c3c 100644 --- a/src/main/java/net/minecraft/server/TileEntitySign.java +++ b/src/main/java/net/minecraft/server/TileEntitySign.java -@@ -93,6 +93,18 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // +@@ -2,6 +2,7 @@ package net.minecraft.server; + + import com.mojang.brigadier.exceptions.CommandSyntaxException; + import javax.annotation.Nullable; ++import io.papermc.paper.adventure.PaperAdventure; // Purpur + + public class TileEntitySign extends TileEntity implements ICommandListener { // CraftBukkit - implements + +@@ -92,6 +93,18 @@ public class TileEntitySign extends TileEntity implements ICommandListener { // this.g[i] = null; } @@ -47,8 +56,8 @@ index 316766970243e8ac00e4c82f6c710de5edc3fa51..852bb5db84ddd735f5e0d7f922918cc9 + public PacketPlayOutTileEntityData getTranslatedUpdatePacket() { + NBTTagCompound nbt = save(new NBTTagCompound()); + for (int i = 0; i < 4; ++i) { -+ String line = net.pl3x.purpur.ComponentUtil.fromComponent(lines[i]).replace("\u00a7", "&"); -+ nbt.setString("Text" + (i + 1), IChatBaseComponent.ChatSerializer.componentToJson(org.bukkit.craftbukkit.util.CraftChatMessage.fromString(line)[0])); ++ String line = PaperAdventure.LEGACY_AMPERSAND.serialize(PaperAdventure.asAdventure(lines[i])); ++ nbt.setString("Text" + (i + 1), net.kyori.adventure.text.serializer.gson.GsonComponentSerializer.gson().serialize(net.kyori.adventure.text.Component.text(line))); + } + nbt.setString("PurpurEditor", "true"); + return new PacketPlayOutTileEntityData(position, 9, nbt); diff --git a/patches/Purpur/patches/server/0046-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/Purpur/patches/server/0045-Allow-soil-to-moisten-from-water-directly-under-it.patch similarity index 100% rename from patches/Purpur/patches/server/0046-Allow-soil-to-moisten-from-water-directly-under-it.patch rename to patches/Purpur/patches/server/0045-Allow-soil-to-moisten-from-water-directly-under-it.patch diff --git a/patches/Purpur/patches/server/0047-Controllable-Minecarts.patch b/patches/Purpur/patches/server/0046-Controllable-Minecarts.patch similarity index 96% rename from patches/Purpur/patches/server/0047-Controllable-Minecarts.patch rename to patches/Purpur/patches/server/0046-Controllable-Minecarts.patch index 85e1a9c1..0b469c59 100644 --- a/patches/Purpur/patches/server/0047-Controllable-Minecarts.patch +++ b/patches/Purpur/patches/server/0046-Controllable-Minecarts.patch @@ -22,7 +22,7 @@ index 2291135eaef64c403183724cb6e413cd7e472672..bc61aaff65a7dc1e7534452b285953b8 super(i, j, k); } diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index ac9ac19c265e4be440531656a109b0468864637e..4e2149b422a643bd30c8d8d13adc9e5f5f2a8cca 100644 +index 8cc440e0e7108e2c7ca29b2f8a2fc5a723dcef0d..46b1bc644c0584fe7006ea9f111d7f4837299dc9 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -99,9 +99,9 @@ public abstract class EntityLiving extends Entity { @@ -39,7 +39,7 @@ index ac9ac19c265e4be440531656a109b0468864637e..4e2149b422a643bd30c8d8d13adc9e5f protected double aV; protected double aW; diff --git a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java -index 022dfdc5b6af4b243e7e4da8660e8e41d04e1a30..298af30b1a7f12d42216fc1b7ee801fd7be93d3c 100644 +index be859a1b41254b299a507d03e453dc8efee6f3dd..4de2877f30a9b231a5c8bbd1739416991e9d7633 100644 --- a/src/main/java/net/minecraft/server/EntityMinecartAbstract.java +++ b/src/main/java/net/minecraft/server/EntityMinecartAbstract.java @@ -445,16 +445,62 @@ public abstract class EntityMinecartAbstract extends Entity { @@ -106,10 +106,10 @@ index 022dfdc5b6af4b243e7e4da8660e8e41d04e1a30..298af30b1a7f12d42216fc1b7ee801fd this.move(EnumMoveType.SELF, this.getMot()); if (!this.onGround) { diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 1d69c07eb3890e61383928433db727bdb3de0202..bc17e1867531f6d0021390cb1a10abac52479e5b 100644 +index 0c384641dd840b3b04b93d2e33df7d75293d9351..64de6be4f9e740a2a036b202789be0a28b175575 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -1005,6 +1005,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1002,6 +1002,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { if (this.isInvulnerable(damagesource)) { return false; } else { diff --git a/patches/Purpur/patches/server/0048-Disable-loot-drops-on-death-by-cramming.patch b/patches/Purpur/patches/server/0047-Disable-loot-drops-on-death-by-cramming.patch similarity index 95% rename from patches/Purpur/patches/server/0048-Disable-loot-drops-on-death-by-cramming.patch rename to patches/Purpur/patches/server/0047-Disable-loot-drops-on-death-by-cramming.patch index 0468861c..2280fd22 100644 --- a/patches/Purpur/patches/server/0048-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/Purpur/patches/server/0047-Disable-loot-drops-on-death-by-cramming.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Disable loot drops on death by cramming diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 4e2149b422a643bd30c8d8d13adc9e5f5f2a8cca..762f65d7e12c020f4acdc8a0a9a102997442a45e 100644 +index 46b1bc644c0584fe7006ea9f111d7f4837299dc9..1dddf80e11db54a666de8c3b0d7a5c8a5f1f93ab 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -1501,8 +1501,10 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/Purpur/patches/server/0049-Players-should-not-cram-to-death.patch b/patches/Purpur/patches/server/0048-Players-should-not-cram-to-death.patch similarity index 85% rename from patches/Purpur/patches/server/0049-Players-should-not-cram-to-death.patch rename to patches/Purpur/patches/server/0048-Players-should-not-cram-to-death.patch index b03c9dfc..ebb10bde 100644 --- a/patches/Purpur/patches/server/0049-Players-should-not-cram-to-death.patch +++ b/patches/Purpur/patches/server/0048-Players-should-not-cram-to-death.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Players should not cram to death diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index bc17e1867531f6d0021390cb1a10abac52479e5b..6bc2ef56fb36fa86c4318ffe3cecd3e28c28d2c4 100644 +index 64de6be4f9e740a2a036b202789be0a28b175575..a609d62b6ad8b3be8fc6ae85dc3b1bcc0513a121 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -1429,7 +1429,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1426,7 +1426,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @Override public boolean isInvulnerable(DamageSource damagesource) { diff --git a/patches/Purpur/patches/server/0050-Option-to-toggle-milk-curing-bad-omen.patch b/patches/Purpur/patches/server/0049-Option-to-toggle-milk-curing-bad-omen.patch similarity index 100% rename from patches/Purpur/patches/server/0050-Option-to-toggle-milk-curing-bad-omen.patch rename to patches/Purpur/patches/server/0049-Option-to-toggle-milk-curing-bad-omen.patch diff --git a/patches/Purpur/patches/server/0051-End-gateway-should-check-if-entity-can-use-portal.patch b/patches/Purpur/patches/server/0050-End-gateway-should-check-if-entity-can-use-portal.patch similarity index 85% rename from patches/Purpur/patches/server/0051-End-gateway-should-check-if-entity-can-use-portal.patch rename to patches/Purpur/patches/server/0050-End-gateway-should-check-if-entity-can-use-portal.patch index aeb737ba..a5e2168c 100644 --- a/patches/Purpur/patches/server/0051-End-gateway-should-check-if-entity-can-use-portal.patch +++ b/patches/Purpur/patches/server/0050-End-gateway-should-check-if-entity-can-use-portal.patch @@ -5,10 +5,10 @@ Subject: [PATCH] End gateway should check if entity can use portal diff --git a/src/main/java/net/minecraft/server/TileEntityEndGateway.java b/src/main/java/net/minecraft/server/TileEntityEndGateway.java -index e0118a971e1ea3c52a1380f519146b8f46a425ea..ed8e91bf6c8b9d410d439bdddd5067d346a20a7e 100644 +index b740c9b66a77df1ff20fba794c49a1de4292ba88..e616b3759561e0d6e471f914f3dc843fe7464f2e 100644 --- a/src/main/java/net/minecraft/server/TileEntityEndGateway.java +++ b/src/main/java/net/minecraft/server/TileEntityEndGateway.java -@@ -127,6 +127,7 @@ public class TileEntityEndGateway extends TileEntityEnderPortal implements ITick +@@ -128,6 +128,7 @@ public class TileEntityEndGateway extends TileEntityEnderPortal implements ITick public void b(Entity entity) { if (this.world instanceof WorldServer && !this.f()) { diff --git a/patches/Purpur/patches/server/0052-Fix-the-dead-lagging-the-server.patch b/patches/Purpur/patches/server/0051-Fix-the-dead-lagging-the-server.patch similarity index 84% rename from patches/Purpur/patches/server/0052-Fix-the-dead-lagging-the-server.patch rename to patches/Purpur/patches/server/0051-Fix-the-dead-lagging-the-server.patch index 7f907d9f..7a83a5cc 100644 --- a/patches/Purpur/patches/server/0052-Fix-the-dead-lagging-the-server.patch +++ b/patches/Purpur/patches/server/0051-Fix-the-dead-lagging-the-server.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix the dead lagging the server diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index d16b3482914e1bd390c745b590f2b538c1a45601..a218a7b35514a59f0bc7ed65ce3547d383faaa41 100644 +index 4edb489012ddc9454e412f06acc4587a3572c8d3..05902a6e9b1dd326776cac3bd70c438f9e83da26 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1523,6 +1523,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1536,6 +1536,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; @@ -17,7 +17,7 @@ index d16b3482914e1bd390c745b590f2b538c1a45601..a218a7b35514a59f0bc7ed65ce3547d3 public void f(double d0, double d1, double d2) { diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 762f65d7e12c020f4acdc8a0a9a102997442a45e..1ae5ac6ae52a2687469dfce547b53949f15adb28 100644 +index 1dddf80e11db54a666de8c3b0d7a5c8a5f1f93ab..b273b021b0e3484a3189c3d6d55284b3c45a41ad 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2500,7 +2500,7 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/Purpur/patches/server/0053-Skip-events-if-there-s-no-listeners.patch b/patches/Purpur/patches/server/0052-Skip-events-if-there-s-no-listeners.patch similarity index 100% rename from patches/Purpur/patches/server/0053-Skip-events-if-there-s-no-listeners.patch rename to patches/Purpur/patches/server/0052-Skip-events-if-there-s-no-listeners.patch diff --git a/patches/Purpur/patches/server/0054-Add-permission-for-F3-N-debug.patch b/patches/Purpur/patches/server/0053-Add-permission-for-F3-N-debug.patch similarity index 83% rename from patches/Purpur/patches/server/0054-Add-permission-for-F3-N-debug.patch rename to patches/Purpur/patches/server/0053-Add-permission-for-F3-N-debug.patch index 8e1e10df..26fa2236 100644 --- a/patches/Purpur/patches/server/0054-Add-permission-for-F3-N-debug.patch +++ b/patches/Purpur/patches/server/0053-Add-permission-for-F3-N-debug.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add permission for F3+N debug diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index 46043d3a4f4056fff93b867c65d363ac1277db7a..726e3292318f6a0de474f68fe30da4a954c7600a 100644 +index 00db0f5fb098a4db4092f8ab75a4489cf466baac..86f534c871a3c9b9ca71b20daa7780dfdab9e76d 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -1074,6 +1074,7 @@ public abstract class PlayerList { +@@ -1073,6 +1073,7 @@ public abstract class PlayerList { } else { b0 = (byte) (24 + i); } diff --git a/patches/Purpur/patches/server/0055-Add-wither-skeleton-takes-wither-damage-option.patch b/patches/Purpur/patches/server/0054-Add-wither-skeleton-takes-wither-damage-option.patch similarity index 100% rename from patches/Purpur/patches/server/0055-Add-wither-skeleton-takes-wither-damage-option.patch rename to patches/Purpur/patches/server/0054-Add-wither-skeleton-takes-wither-damage-option.patch diff --git a/patches/Purpur/patches/server/0056-Configurable-TPS-Catchup.patch b/patches/Purpur/patches/server/0055-Configurable-TPS-Catchup.patch similarity index 93% rename from patches/Purpur/patches/server/0056-Configurable-TPS-Catchup.patch rename to patches/Purpur/patches/server/0055-Configurable-TPS-Catchup.patch index 17244493..7421825d 100644 --- a/patches/Purpur/patches/server/0056-Configurable-TPS-Catchup.patch +++ b/patches/Purpur/patches/server/0055-Configurable-TPS-Catchup.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable TPS Catchup diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 64cd02072536e69cd219932769bbade87b47601a..b795128c5a69f65883fdd318a8a5b2a65512bb16 100644 +index d9513addae86bd5d2f0c50173318cf4d23ef2128..50f1841e3d5e92d6186db49ac4962c0bac943a8c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1003,7 +1003,13 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant getBehaviorController() { return (BehaviorController) super.getBehaviorController(); // CraftBukkit - decompile error diff --git a/src/main/java/net/minecraft/server/EntityVillagerAbstract.java b/src/main/java/net/minecraft/server/EntityVillagerAbstract.java -index b2a76db173ae12bff2e8a7de411cb489fdb2e9c7..2a5eda6a7e67d0b8682a96552248ea4e117c1196 100644 +index e0cc45a7494cd6f06169b64ee8ffc16aa1932f8f..baf74566ec8569677e6f03aef96645c13ec94d89 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerAbstract.java +++ b/src/main/java/net/minecraft/server/EntityVillagerAbstract.java -@@ -17,6 +17,8 @@ import io.papermc.paper.event.player.PlayerTradeEvent; +@@ -18,6 +18,8 @@ import io.papermc.paper.event.player.PlayerTradeEvent; public abstract class EntityVillagerAbstract extends EntityAgeable implements NPC, IMerchant { @@ -36,10 +36,10 @@ index b2a76db173ae12bff2e8a7de411cb489fdb2e9c7..2a5eda6a7e67d0b8682a96552248ea4e private CraftMerchant craftMerchant; diff --git a/src/main/java/net/minecraft/server/EntityVillagerTrader.java b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -index fa3e786cd6ef67da378a5d51583ca84a82677d8c..47a89bdd163d4690fa96f63d7a9723b3bcc9fa0b 100644 +index 250a4e5ddd626794482678a64023f0f5459520e1..d990aae60e5a6056b44249cb7039470c6757b7fb 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -@@ -41,6 +41,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -42,6 +42,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { this.goalSelector.a(1, new PathfinderGoalPanic(this, 0.5D)); this.goalSelector.a(1, new PathfinderGoalLookAtTradingPlayer(this)); this.goalSelector.a(2, new EntityVillagerTrader.a(this, 2.0D, 0.35D)); diff --git a/patches/Purpur/patches/server/0062-Allow-leashing-villagers.patch b/patches/Purpur/patches/server/0061-Allow-leashing-villagers.patch similarity index 93% rename from patches/Purpur/patches/server/0062-Allow-leashing-villagers.patch rename to patches/Purpur/patches/server/0061-Allow-leashing-villagers.patch index f2791c45..af680a00 100644 --- a/patches/Purpur/patches/server/0062-Allow-leashing-villagers.patch +++ b/patches/Purpur/patches/server/0061-Allow-leashing-villagers.patch @@ -17,10 +17,10 @@ index d38102bbf48dd498d80911e954e910a33d390daa..566d6a2551ffbcf4366596cab87a7239 // Paper start - drop leash variable PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, entityhuman, !entityhuman.abilities.canInstantlyBuild); diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 1cde71b812c7721298e7addb74de01e4ea297499..e4aedb3df5d0a47b5bb9175627aa794fc1779639 100644 +index 3ae6e9fceb8feea8340fc542727423379a3f8863..1fa6cf564099323c8332e68cadf64c28dfc84998 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -79,6 +79,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -77,6 +77,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation protected void initPathfinder() { if (world.purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.0D, false, TEMPT_ITEMS)); } @@ -33,10 +33,10 @@ index 1cde71b812c7721298e7addb74de01e4ea297499..e4aedb3df5d0a47b5bb9175627aa794f @Override diff --git a/src/main/java/net/minecraft/server/EntityVillagerTrader.java b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -index 47a89bdd163d4690fa96f63d7a9723b3bcc9fa0b..298d2b6f6e352bb82f3a5a307466bb6e8f47d9d3 100644 +index d990aae60e5a6056b44249cb7039470c6757b7fb..432956d9d5f2706014d67232b88e6b86011484f3 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -@@ -48,6 +48,13 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -49,6 +49,13 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { this.goalSelector.a(10, new PathfinderGoalLookAtPlayer(this, EntityInsentient.class, 8.0F)); } diff --git a/patches/Purpur/patches/server/0063-Implement-configurable-search-radius-for-villagers-t.patch b/patches/Purpur/patches/server/0062-Implement-configurable-search-radius-for-villagers-t.patch similarity index 94% rename from patches/Purpur/patches/server/0063-Implement-configurable-search-radius-for-villagers-t.patch rename to patches/Purpur/patches/server/0062-Implement-configurable-search-radius-for-villagers-t.patch index eb97c8ef..192067b6 100644 --- a/patches/Purpur/patches/server/0063-Implement-configurable-search-radius-for-villagers-t.patch +++ b/patches/Purpur/patches/server/0062-Implement-configurable-search-radius-for-villagers-t.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Implement configurable search radius for villagers to spawn diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index e4aedb3df5d0a47b5bb9175627aa794fc1779639..c06425434c97645b914c07940528901a2979ce1b 100644 +index 1fa6cf564099323c8332e68cadf64c28dfc84998..8002c55497f772eadae3242cad06d529571e97bf 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -894,6 +894,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -892,6 +892,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @Nullable private EntityIronGolem d(WorldServer worldserver) { diff --git a/patches/Purpur/patches/server/0064-Implement-infinite-lava.patch b/patches/Purpur/patches/server/0063-Implement-infinite-lava.patch similarity index 93% rename from patches/Purpur/patches/server/0064-Implement-infinite-lava.patch rename to patches/Purpur/patches/server/0063-Implement-infinite-lava.patch index 24cafcab..d3a7fa09 100644 --- a/patches/Purpur/patches/server/0064-Implement-infinite-lava.patch +++ b/patches/Purpur/patches/server/0063-Implement-infinite-lava.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement infinite lava diff --git a/src/main/java/net/minecraft/server/FluidTypeFlowing.java b/src/main/java/net/minecraft/server/FluidTypeFlowing.java -index d72a88e9275eb00eed35b6467538a46e5cee32d5..35d55bc15b179a8200082ca23fad04bbe550068d 100644 +index cf9d3faabe8732d27c436f4806c727592e475f81..46bdeca19a0da06a1fcbd7043a26689b64459d67 100644 --- a/src/main/java/net/minecraft/server/FluidTypeFlowing.java +++ b/src/main/java/net/minecraft/server/FluidTypeFlowing.java -@@ -195,7 +195,7 @@ public abstract class FluidTypeFlowing extends FluidType { +@@ -196,7 +196,7 @@ public abstract class FluidTypeFlowing extends FluidType { } } @@ -17,7 +17,7 @@ index d72a88e9275eb00eed35b6467538a46e5cee32d5..35d55bc15b179a8200082ca23fad04bb IBlockData iblockdata2 = iworldreader.getType(blockposition.down()); Fluid fluid1 = iblockdata2.getFluid(); -@@ -266,6 +266,17 @@ public abstract class FluidTypeFlowing extends FluidType { +@@ -267,6 +267,17 @@ public abstract class FluidTypeFlowing extends FluidType { return (Fluid) this.e().h().set(FluidTypeFlowing.FALLING, flag); } diff --git a/patches/Purpur/patches/server/0065-Make-lava-flow-speed-configurable.patch b/patches/Purpur/patches/server/0064-Make-lava-flow-speed-configurable.patch similarity index 100% rename from patches/Purpur/patches/server/0065-Make-lava-flow-speed-configurable.patch rename to patches/Purpur/patches/server/0064-Make-lava-flow-speed-configurable.patch diff --git a/patches/Purpur/patches/server/0066-Add-player-death-exp-control-options.patch b/patches/Purpur/patches/server/0065-Add-player-death-exp-control-options.patch similarity index 92% rename from patches/Purpur/patches/server/0066-Add-player-death-exp-control-options.patch rename to patches/Purpur/patches/server/0065-Add-player-death-exp-control-options.patch index 9abb63eb..01789712 100644 --- a/patches/Purpur/patches/server/0066-Add-player-death-exp-control-options.patch +++ b/patches/Purpur/patches/server/0065-Add-player-death-exp-control-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add player death exp control options diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index e0cf2af8fcbfc66fc32aa8e693b62160b24f8672..093df82d49bfa6c34f081a719b5212ec8a312657 100644 +index 7cacaae4ec8b09d12d35f0f22c0e9ec5a48d46a4..10365180f518042d56929d0c0061e5297b73cf9b 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java -@@ -83,6 +83,8 @@ public abstract class EntityHuman extends EntityLiving { +@@ -85,6 +85,8 @@ public abstract class EntityHuman extends EntityLiving { // CraftBukkit end // Purpur start @@ -17,7 +17,7 @@ index e0cf2af8fcbfc66fc32aa8e693b62160b24f8672..093df82d49bfa6c34f081a719b5212ec public void setAfk(boolean setAfk){ } -@@ -1697,9 +1699,18 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1710,9 +1712,18 @@ public abstract class EntityHuman extends EntityLiving { @Override protected int getExpValue(EntityHuman entityhuman) { if (!this.world.getGameRules().getBoolean(GameRules.KEEP_INVENTORY) && !this.isSpectator()) { diff --git a/patches/Purpur/patches/server/0067-Add-canSaveToDisk-to-Entity.patch b/patches/Purpur/patches/server/0066-Add-canSaveToDisk-to-Entity.patch similarity index 90% rename from patches/Purpur/patches/server/0067-Add-canSaveToDisk-to-Entity.patch rename to patches/Purpur/patches/server/0066-Add-canSaveToDisk-to-Entity.patch index 21488810..411f4098 100644 --- a/patches/Purpur/patches/server/0067-Add-canSaveToDisk-to-Entity.patch +++ b/patches/Purpur/patches/server/0066-Add-canSaveToDisk-to-Entity.patch @@ -17,10 +17,10 @@ index 076d6c1e1cc049dd312ecb30518e7b25fc2d7371..5f04591193d58ba7897194142da5efcb final int saveLimit = worldserver.paperConfig.entityPerChunkSaveLimits.getOrDefault(entityType, -1); if (saveLimit > -1) { diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index a218a7b35514a59f0bc7ed65ce3547d383faaa41..32e072b7ddf20203c7db83c5e0c0504e3b8ba8da 100644 +index 05902a6e9b1dd326776cac3bd70c438f9e83da26..a1776d7fad2aad6bd323c6c97472fdca0b4618db 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -308,6 +308,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -321,6 +321,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.headHeight = this.getHeadHeight(EntityPose.STANDING, this.size); } diff --git a/patches/Purpur/patches/server/0068-Configurable-void-damage-height.patch b/patches/Purpur/patches/server/0067-Configurable-void-damage-height.patch similarity index 93% rename from patches/Purpur/patches/server/0068-Configurable-void-damage-height.patch rename to patches/Purpur/patches/server/0067-Configurable-void-damage-height.patch index e1a27ed4..a094150b 100644 --- a/patches/Purpur/patches/server/0068-Configurable-void-damage-height.patch +++ b/patches/Purpur/patches/server/0067-Configurable-void-damage-height.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable void damage height diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 32e072b7ddf20203c7db83c5e0c0504e3b8ba8da..7b232293803f19bcfd4a8201a06bfdaa7fb08093 100644 +index a1776d7fad2aad6bd323c6c97472fdca0b4618db..b60eee0d86d55224c9fc8caf3a3a13089c0150e9 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -611,7 +611,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -624,7 +624,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke // Paper start protected void performVoidDamage() { diff --git a/patches/Purpur/patches/server/0069-Dispenser-curse-of-binding-protection.patch b/patches/Purpur/patches/server/0068-Dispenser-curse-of-binding-protection.patch similarity index 100% rename from patches/Purpur/patches/server/0069-Dispenser-curse-of-binding-protection.patch rename to patches/Purpur/patches/server/0068-Dispenser-curse-of-binding-protection.patch diff --git a/patches/Purpur/patches/server/0070-Add-option-for-boats-to-eject-players-on-land.patch b/patches/Purpur/patches/server/0069-Add-option-for-boats-to-eject-players-on-land.patch similarity index 95% rename from patches/Purpur/patches/server/0070-Add-option-for-boats-to-eject-players-on-land.patch rename to patches/Purpur/patches/server/0069-Add-option-for-boats-to-eject-players-on-land.patch index 8811b751..ced4a492 100644 --- a/patches/Purpur/patches/server/0070-Add-option-for-boats-to-eject-players-on-land.patch +++ b/patches/Purpur/patches/server/0069-Add-option-for-boats-to-eject-players-on-land.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option for boats to eject players on land diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java -index baa4a61114e7460c74027e1519332f0dd9582647..603910a6f9ecc34be9eb2d4fb28e5c2e20aca90a 100644 +index 15ce9f90306d062f36d1651d7426813e897523bf..05c702bbdb8addea5c69faa0479609e8959945f1 100644 --- a/src/main/java/net/minecraft/server/EntityBoat.java +++ b/src/main/java/net/minecraft/server/EntityBoat.java @@ -442,6 +442,7 @@ public class EntityBoat extends Entity { diff --git a/patches/Purpur/patches/server/0071-Add-obfhelpers-for-plugin-use.patch b/patches/Purpur/patches/server/0070-Add-obfhelpers-for-plugin-use.patch similarity index 100% rename from patches/Purpur/patches/server/0071-Add-obfhelpers-for-plugin-use.patch rename to patches/Purpur/patches/server/0070-Add-obfhelpers-for-plugin-use.patch diff --git a/patches/Purpur/patches/server/0072-Mending-mends-most-damages-equipment-first.patch b/patches/Purpur/patches/server/0071-Mending-mends-most-damages-equipment-first.patch similarity index 97% rename from patches/Purpur/patches/server/0072-Mending-mends-most-damages-equipment-first.patch rename to patches/Purpur/patches/server/0071-Mending-mends-most-damages-equipment-first.patch index c3df7e26..40561954 100644 --- a/patches/Purpur/patches/server/0072-Mending-mends-most-damages-equipment-first.patch +++ b/patches/Purpur/patches/server/0071-Mending-mends-most-damages-equipment-first.patch @@ -41,10 +41,10 @@ index 7b263594304a9b745f583fe7178ac16936cbd93b..33e2dc3a1003fe95fa71999fc24df841 return a(enchantment, entityliving, (itemstack) -> { return true; diff --git a/src/main/java/net/minecraft/server/EntityExperienceOrb.java b/src/main/java/net/minecraft/server/EntityExperienceOrb.java -index c2be0c2bc315876f120cff207e5516dda2bd55d7..358d6d660581686a2e8d49e13e8c2ade9ec2fec2 100644 +index 4a94ce72d559263ef5fa4fb16dc286f531f51d55..4aee11c980105a523bdcb35470053aae51b002df 100644 --- a/src/main/java/net/minecraft/server/EntityExperienceOrb.java +++ b/src/main/java/net/minecraft/server/EntityExperienceOrb.java -@@ -220,7 +220,7 @@ public class EntityExperienceOrb extends Entity { +@@ -221,7 +221,7 @@ public class EntityExperienceOrb extends Entity { if (this.d == 0 && entityhuman.bu == 0 && new com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent(((EntityPlayer) entityhuman).getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) this.getBukkitEntity()).callEvent()) { // Paper entityhuman.bu = 2; entityhuman.receive(this, 1); diff --git a/patches/Purpur/patches/server/0073-Add-5-second-tps-average-in-tps.patch b/patches/Purpur/patches/server/0072-Add-5-second-tps-average-in-tps.patch similarity index 91% rename from patches/Purpur/patches/server/0073-Add-5-second-tps-average-in-tps.patch rename to patches/Purpur/patches/server/0072-Add-5-second-tps-average-in-tps.patch index acddcf36..b93a09e7 100644 --- a/patches/Purpur/patches/server/0073-Add-5-second-tps-average-in-tps.patch +++ b/patches/Purpur/patches/server/0072-Add-5-second-tps-average-in-tps.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add 5 second tps average in /tps diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b795128c5a69f65883fdd318a8a5b2a65512bb16..1296d06bd7c4abb3a43679e382e833199b5b54a2 100644 +index 50f1841e3d5e92d6186db49ac4962c0bac943a8c..a3ddf2839738e089a02d841f5b6fd759c3047305 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -163,7 +163,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant entitytypes, World world) { super(entitytypes, world); -@@ -274,6 +277,16 @@ public class EntityItem extends Entity { +@@ -275,6 +278,16 @@ public class EntityItem extends Entity { return false; } else if (!this.getItemStack().getItem().a(damagesource)) { return false; @@ -47,7 +47,7 @@ index d99cecc4075338d7b8f154ab94d8ac04190ba371..ec37d2c3b0393c43097bdfc6064ebe3a } else { // CraftBukkit start if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f)) { -@@ -454,6 +467,9 @@ public class EntityItem extends Entity { +@@ -455,6 +468,9 @@ public class EntityItem extends Entity { com.google.common.base.Preconditions.checkArgument(!itemstack.isEmpty(), "Cannot drop air"); // CraftBukkit this.getDataWatcher().set(EntityItem.ITEM, itemstack); this.getDataWatcher().markDirty(EntityItem.ITEM); // CraftBukkit - SPIGOT-4591, must mark dirty @@ -57,7 +57,7 @@ index d99cecc4075338d7b8f154ab94d8ac04190ba371..ec37d2c3b0393c43097bdfc6064ebe3a } @Override -@@ -535,4 +551,15 @@ public class EntityItem extends Entity { +@@ -536,4 +552,15 @@ public class EntityItem extends Entity { super.setPositionRaw(x, y, z); } // Paper end - fix MC-4 @@ -66,7 +66,7 @@ index d99cecc4075338d7b8f154ab94d8ac04190ba371..ec37d2c3b0393c43097bdfc6064ebe3a + public void respawnOnClient() { + Packet spawnPacket = new PacketPlayOutSpawnEntity(this); + Packet metadataPacket = new PacketPlayOutEntityMetadata(getId(), getDataWatcher(), true); -+ for (EntityPlayer entityplayer : getTracker().trackerEntry.trackedPlayers) { ++ for (EntityPlayer entityplayer : this.tracker.trackerEntry.trackedPlayers) { + entityplayer.playerConnection.sendPacket(spawnPacket); + entityplayer.playerConnection.sendPacket(metadataPacket); + } @@ -74,7 +74,7 @@ index d99cecc4075338d7b8f154ab94d8ac04190ba371..ec37d2c3b0393c43097bdfc6064ebe3a + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java -index f3b37f5704d752d1ec4d4d916690907dace67183..1cae524fe4248370f6f6967327cb4a463b5f19fc 100644 +index e51b6bd0698593867e6821326d223770766d717f..2f758b3d3eaf5d5781a2072d0f3f7442b73cb9a8 100644 --- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java +++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java @@ -106,6 +106,15 @@ public class EntityTrackerEntry { diff --git a/patches/Purpur/patches/server/0076-Add-ping-command.patch b/patches/Purpur/patches/server/0075-Add-ping-command.patch similarity index 97% rename from patches/Purpur/patches/server/0076-Add-ping-command.patch rename to patches/Purpur/patches/server/0075-Add-ping-command.patch index fe0c9fc1..88cd37db 100644 --- a/patches/Purpur/patches/server/0076-Add-ping-command.patch +++ b/patches/Purpur/patches/server/0075-Add-ping-command.patch @@ -55,10 +55,10 @@ index 17753c8a997aa286460be5d8eb6508e2eaed18ce..d080bf58ebc9c1dc9d41fae7d515547b return this.b; } diff --git a/src/main/java/net/minecraft/server/CommandListenerWrapper.java b/src/main/java/net/minecraft/server/CommandListenerWrapper.java -index 86f1cfe454ea0a989775b49a6b88375c766ef647..da53af61d1171db3c167c6e007adf95355771653 100644 +index 31543b38a7c46d93333c5f96fdb718b0a7a087b2..8a605b88584a574d5814e97d83c63661b56cf753 100644 --- a/src/main/java/net/minecraft/server/CommandListenerWrapper.java +++ b/src/main/java/net/minecraft/server/CommandListenerWrapper.java -@@ -189,6 +189,7 @@ public class CommandListenerWrapper implements ICompletionProvider, com.destroys +@@ -190,6 +190,7 @@ public class CommandListenerWrapper implements ICompletionProvider, com.destroys } } diff --git a/patches/Purpur/patches/server/0077-Configurable-jockey-options.patch b/patches/Purpur/patches/server/0076-Configurable-jockey-options.patch similarity index 96% rename from patches/Purpur/patches/server/0077-Configurable-jockey-options.patch rename to patches/Purpur/patches/server/0076-Configurable-jockey-options.patch index 68a15323..20427c19 100644 --- a/patches/Purpur/patches/server/0077-Configurable-jockey-options.patch +++ b/patches/Purpur/patches/server/0076-Configurable-jockey-options.patch @@ -61,7 +61,7 @@ index 65bae8c9f28c23b0b5dd5d048e7fc7daf328075c..32b75f710b12efbcecec2c8d72d4d8cb public void setAngerTarget(@Nullable UUID uuid) { this.br = uuid; diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java -index 4078f5dd68d0ca49886911d1bf58731129d731be..2ff49b5c8ba62f781cdaef2d19c0504cb710b3ff 100644 +index c081dfa775dc93afd96eff88953c9a5f21f2adb9..291748b3436c18653fa959cfd8c92240aa17508c 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; @@ -72,7 +72,7 @@ index 4078f5dd68d0ca49886911d1bf58731129d731be..2ff49b5c8ba62f781cdaef2d19c0504c import java.util.List; import java.util.Random; import java.util.UUID; -@@ -45,6 +46,20 @@ public class EntityZombie extends EntityMonster { +@@ -44,6 +45,20 @@ public class EntityZombie extends EntityMonster { this(EntityTypes.ZOMBIE, world); } @@ -93,7 +93,7 @@ index 4078f5dd68d0ca49886911d1bf58731129d731be..2ff49b5c8ba62f781cdaef2d19c0504c @Override protected void initPathfinder() { if (world.paperConfig.zombiesTargetTurtleEggs) this.goalSelector.a(4, new EntityZombie.a(this, 1.0D, 3)); // Paper -@@ -445,19 +460,19 @@ public class EntityZombie extends EntityMonster { +@@ -444,19 +459,19 @@ public class EntityZombie extends EntityMonster { if (object instanceof EntityZombie.GroupDataZombie) { EntityZombie.GroupDataZombie entityzombie_groupdatazombie = (EntityZombie.GroupDataZombie) object; @@ -119,7 +119,7 @@ index 4078f5dd68d0ca49886911d1bf58731129d731be..2ff49b5c8ba62f781cdaef2d19c0504c EntityChicken entitychicken1 = (EntityChicken) EntityTypes.CHICKEN.a(this.world); entitychicken1.setPositionRotation(this.locX(), this.locY(), this.locZ(), this.yaw, 0.0F); -@@ -465,6 +480,7 @@ public class EntityZombie extends EntityMonster { +@@ -464,6 +479,7 @@ public class EntityZombie extends EntityMonster { entitychicken1.setChickenJockey(true); this.startRiding(entitychicken1); worldaccess.addEntity(entitychicken1, CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit @@ -127,7 +127,7 @@ index 4078f5dd68d0ca49886911d1bf58731129d731be..2ff49b5c8ba62f781cdaef2d19c0504c } } } -@@ -567,7 +583,7 @@ public class EntityZombie extends EntityMonster { +@@ -566,7 +582,7 @@ public class EntityZombie extends EntityMonster { public static class GroupDataZombie implements GroupDataEntity { @@ -165,7 +165,7 @@ index 2d2830adc5229a8db7fc4b1170ea4c6f263e7182..ce6d79780197eb9300130036a8ed8464 return b(entitytypes, worldaccess, enummobspawn, blockposition, random) && (enummobspawn == EnumMobSpawn.SPAWNER || worldaccess.e(blockposition)); } diff --git a/src/main/java/net/minecraft/server/EntityZombieVillager.java b/src/main/java/net/minecraft/server/EntityZombieVillager.java -index e021c43b43839c00f81a01bfbec59c546d61ba50..505c83f3e3ad61c2d4d40c4df017e1f7a9a3ad8c 100644 +index b90605c463d378cea06c3cb84aad4c97145d00ce..5a71381c9f1832710001b6bfa63d6815c3cd1ab0 100644 --- a/src/main/java/net/minecraft/server/EntityZombieVillager.java +++ b/src/main/java/net/minecraft/server/EntityZombieVillager.java @@ -28,6 +28,23 @@ public class EntityZombieVillager extends EntityZombie implements VillagerDataHo diff --git a/patches/Purpur/patches/server/0078-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/Purpur/patches/server/0077-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 98% rename from patches/Purpur/patches/server/0078-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/Purpur/patches/server/0077-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index b00c3448..4d6e5230 100644 --- a/patches/Purpur/patches/server/0078-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/Purpur/patches/server/0077-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -17,10 +17,10 @@ index 6fe5678cffc2487fe00c953d772f764bb37a4b11..bd0267ee4b3782f6d1ec39cba7966ba4 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 1c88b914dac85cf1d5cf1733cb9f8d5f0407a986..d888dbb2f6c20eee98c0c8b0d1c62ba30615e8eb 100644 +index 4642497ea63815253751836d9c34838f2c9fb4e6..4b9e44aad705247c075e435ebc6eb9b1393f7b17 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -2138,8 +2138,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2151,8 +2151,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return this.a(new ItemStack(imaterial), (float) i); } diff --git a/patches/Purpur/patches/server/0079-Add-phantom-spawning-options.patch b/patches/Purpur/patches/server/0078-Add-phantom-spawning-options.patch similarity index 100% rename from patches/Purpur/patches/server/0079-Add-phantom-spawning-options.patch rename to patches/Purpur/patches/server/0078-Add-phantom-spawning-options.patch diff --git a/patches/Purpur/patches/server/0080-Implement-bed-explosion-options.patch b/patches/Purpur/patches/server/0079-Implement-bed-explosion-options.patch similarity index 100% rename from patches/Purpur/patches/server/0080-Implement-bed-explosion-options.patch rename to patches/Purpur/patches/server/0079-Implement-bed-explosion-options.patch diff --git a/patches/Purpur/patches/server/0081-Implement-respawn-anchor-explosion-options.patch b/patches/Purpur/patches/server/0080-Implement-respawn-anchor-explosion-options.patch similarity index 100% rename from patches/Purpur/patches/server/0081-Implement-respawn-anchor-explosion-options.patch rename to patches/Purpur/patches/server/0080-Implement-respawn-anchor-explosion-options.patch diff --git a/patches/Purpur/patches/server/0082-Add-allow-water-in-end-world-option.patch b/patches/Purpur/patches/server/0081-Add-allow-water-in-end-world-option.patch similarity index 96% rename from patches/Purpur/patches/server/0082-Add-allow-water-in-end-world-option.patch rename to patches/Purpur/patches/server/0081-Add-allow-water-in-end-world-option.patch index bbf4c0fb..f74e35e6 100644 --- a/patches/Purpur/patches/server/0082-Add-allow-water-in-end-world-option.patch +++ b/patches/Purpur/patches/server/0081-Add-allow-water-in-end-world-option.patch @@ -27,10 +27,10 @@ index aba5c6b8713c04302632bd1d289fd968c9e0607a..b75f6ded5d4bd3150789fba773a2c76c } else { world.setTypeUpdate(blockposition, Blocks.WATER.getBlockData()); diff --git a/src/main/java/net/minecraft/server/ItemBucket.java b/src/main/java/net/minecraft/server/ItemBucket.java -index 120bf8436fd82294c339add2e7bff1cda8311aea..848a185c04aa90a62e6bcc49ad68a7489ca28970 100644 +index 223361a1a8b41ebe91e0db39f40cf12a4968b1b4..07f23572bdf15c57a53e32646f2fc64fff404948 100644 --- a/src/main/java/net/minecraft/server/ItemBucket.java +++ b/src/main/java/net/minecraft/server/ItemBucket.java -@@ -122,7 +122,7 @@ public class ItemBucket extends Item { +@@ -123,7 +123,7 @@ public class ItemBucket extends Item { // CraftBukkit end if (!flag1) { return movingobjectpositionblock != null && this.a(entityhuman, world, movingobjectpositionblock.getBlockPosition().shift(movingobjectpositionblock.getDirection()), (MovingObjectPositionBlock) null, enumdirection, clicked, itemstack, enumhand); // CraftBukkit // Paper - add enumhand @@ -39,7 +39,7 @@ index 120bf8436fd82294c339add2e7bff1cda8311aea..848a185c04aa90a62e6bcc49ad68a748 int i = blockposition.getX(); int j = blockposition.getY(); int k = blockposition.getZ(); -@@ -130,7 +130,7 @@ public class ItemBucket extends Item { +@@ -131,7 +131,7 @@ public class ItemBucket extends Item { world.playSound(entityhuman, blockposition, SoundEffects.BLOCK_FIRE_EXTINGUISH, SoundCategory.BLOCKS, 0.5F, 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); for (int l = 0; l < 8; ++l) { diff --git a/patches/Purpur/patches/server/0083-Allow-color-codes-in-books.patch b/patches/Purpur/patches/server/0082-Allow-color-codes-in-books.patch similarity index 90% rename from patches/Purpur/patches/server/0083-Allow-color-codes-in-books.patch rename to patches/Purpur/patches/server/0082-Allow-color-codes-in-books.patch index 27c0a671..0383380b 100644 --- a/patches/Purpur/patches/server/0083-Allow-color-codes-in-books.patch +++ b/patches/Purpur/patches/server/0082-Allow-color-codes-in-books.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow color codes in books diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index eaddc933261aeccc963ac0f35eebb387c16ae6a0..67fa3bd958876abc39c46d9e517551836b0e86ed 100644 +index 4d0dcbcc00e44c4912302dd0e7331471f33cb370..70cb98b3db5f9966e91da0ccd81e7610455a4f4e 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -1054,7 +1054,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1058,7 +1058,8 @@ public class PlayerConnection implements PacketListenerPlayIn { if (itemstack.getItem() == Items.WRITABLE_BOOK) { NBTTagList nbttaglist = new NBTTagList(); @@ -18,7 +18,7 @@ index eaddc933261aeccc963ac0f35eebb387c16ae6a0..67fa3bd958876abc39c46d9e51755183 ItemStack old = itemstack.cloneItemStack(); // CraftBukkit itemstack.a("pages", (NBTBase) nbttaglist); CraftEventFactory.handleEditBookEvent(player, i, old, itemstack); // CraftBukkit -@@ -1072,13 +1073,14 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1076,13 +1077,14 @@ public class PlayerConnection implements PacketListenerPlayIn { itemstack1.setTag(nbttagcompound.clone()); } @@ -35,7 +35,7 @@ index eaddc933261aeccc963ac0f35eebb387c16ae6a0..67fa3bd958876abc39c46d9e51755183 ChatComponentText chatcomponenttext = new ChatComponentText(s1); String s2 = IChatBaseComponent.ChatSerializer.a((IChatBaseComponent) chatcomponenttext); -@@ -1090,6 +1092,16 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1094,6 +1096,16 @@ public class PlayerConnection implements PacketListenerPlayIn { } } diff --git a/patches/Purpur/patches/server/0084-Entity-lifespan.patch b/patches/Purpur/patches/server/0083-Entity-lifespan.patch similarity index 97% rename from patches/Purpur/patches/server/0084-Entity-lifespan.patch rename to patches/Purpur/patches/server/0083-Entity-lifespan.patch index 4cd8774f..d2c9c935 100644 --- a/patches/Purpur/patches/server/0084-Entity-lifespan.patch +++ b/patches/Purpur/patches/server/0083-Entity-lifespan.patch @@ -92,10 +92,10 @@ index 9807441d53fcf4ef7aaffe3801542f5a371eb7af..ee005e482396f8ff7e46a7ca981c843a } diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 67fa3bd958876abc39c46d9e517551836b0e86ed..94353290087df17e441dba8fe8999ad558652cda 100644 +index 70cb98b3db5f9966e91da0ccd81e7610455a4f4e..48d032ed74effcfd66e1ab01548913964bca4d19 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -2296,6 +2296,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2298,6 +2298,7 @@ public class PlayerConnection implements PacketListenerPlayIn { boolean triggerLeashUpdate = itemInHand != null && itemInHand.getItem() == Items.LEAD && entity instanceof EntityInsentient; Item origItem = this.player.inventory.getItemInHand() == null ? null : this.player.inventory.getItemInHand().getItem(); PlayerInteractEntityEvent event; diff --git a/patches/Purpur/patches/server/0085-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/Purpur/patches/server/0084-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch similarity index 92% rename from patches/Purpur/patches/server/0085-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch rename to patches/Purpur/patches/server/0084-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index aa0173a7..cd64f9bc 100644 --- a/patches/Purpur/patches/server/0085-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/Purpur/patches/server/0084-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index ba678ad67d1a48724738a71e1ff3b4e85b672f2c..67f33647cd66c32fcc6d91edd7f66684c0e6464f 100644 +index 8bc0fb58ef18ce7828451857a97460bbde567c6b..a8cd7f0abf58e69d276e469bd7d5ef6ae619263d 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -281,6 +281,7 @@ public abstract class EntityLiving extends Entity { @@ -17,10 +17,10 @@ index ba678ad67d1a48724738a71e1ff3b4e85b672f2c..67f33647cd66c32fcc6d91edd7f66684 } } diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 6bc2ef56fb36fa86c4318ffe3cecd3e28c28d2c4..d4d1d03990a3ad25eebaba4f0beec8578e3e0624 100644 +index a609d62b6ad8b3be8fc6ae85dc3b1bcc0513a121..3f071154ad6b44f9fc9791addd7605bf0860d9a6 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -2412,4 +2412,26 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -2414,4 +2414,26 @@ public class EntityPlayer extends EntityHuman implements ICrafting { return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end diff --git a/patches/Purpur/patches/server/0086-Squid-EAR-immunity.patch b/patches/Purpur/patches/server/0085-Squid-EAR-immunity.patch similarity index 91% rename from patches/Purpur/patches/server/0086-Squid-EAR-immunity.patch rename to patches/Purpur/patches/server/0085-Squid-EAR-immunity.patch index 72311de1..10eb1517 100644 --- a/patches/Purpur/patches/server/0086-Squid-EAR-immunity.patch +++ b/patches/Purpur/patches/server/0085-Squid-EAR-immunity.patch @@ -21,10 +21,10 @@ index 5d35651f43de81c8cf047479ad9c88c4b3f1c38c..32bb2524641722d16b6bafcc6b1af279 public boolean villagerUseBrainTicksOnlyWhenLagging = true; public boolean villagerCanBeLeashed = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index f80526939be358ac46430f35f3fdc7f88038c262..66b7c75929cd98737628b9d4f22829b5b65b8373 100644 +index f2e978107ef1163ceadb3ea7594eba6e900a8a28..05b165f4f2de1f09164c33c0b222dc660c86ebb9 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -376,6 +376,7 @@ public class ActivationRange +@@ -377,6 +377,7 @@ public class ActivationRange */ public static boolean checkIfActive(Entity entity) { diff --git a/patches/Purpur/patches/server/0087-Configurable-end-spike-seed.patch b/patches/Purpur/patches/server/0086-Configurable-end-spike-seed.patch similarity index 100% rename from patches/Purpur/patches/server/0087-Configurable-end-spike-seed.patch rename to patches/Purpur/patches/server/0086-Configurable-end-spike-seed.patch diff --git a/patches/Purpur/patches/server/0088-Configurable-dungeon-seed.patch b/patches/Purpur/patches/server/0087-Configurable-dungeon-seed.patch similarity index 100% rename from patches/Purpur/patches/server/0088-Configurable-dungeon-seed.patch rename to patches/Purpur/patches/server/0087-Configurable-dungeon-seed.patch diff --git a/patches/Purpur/patches/server/0089-Phantoms-burn-in-light.patch b/patches/Purpur/patches/server/0088-Phantoms-burn-in-light.patch similarity index 100% rename from patches/Purpur/patches/server/0089-Phantoms-burn-in-light.patch rename to patches/Purpur/patches/server/0088-Phantoms-burn-in-light.patch diff --git a/patches/Purpur/patches/server/0090-Configurable-villager-breeding.patch b/patches/Purpur/patches/server/0089-Configurable-villager-breeding.patch similarity index 93% rename from patches/Purpur/patches/server/0090-Configurable-villager-breeding.patch rename to patches/Purpur/patches/server/0089-Configurable-villager-breeding.patch index 2a12e0bd..99448886 100644 --- a/patches/Purpur/patches/server/0090-Configurable-villager-breeding.patch +++ b/patches/Purpur/patches/server/0089-Configurable-villager-breeding.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable villager breeding diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index c06425434c97645b914c07940528901a2979ce1b..a0bfef54c853d57c9a5c6d3f9f19591649295357 100644 +index 8002c55497f772eadae3242cad06d529571e97bf..762f1acf435c6e7b6d695fc1b2120de0116f46da 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -642,7 +642,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -640,7 +640,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @Override public boolean canBreed() { diff --git a/patches/Purpur/patches/server/0091-Redstone-deactivates-spawners.patch b/patches/Purpur/patches/server/0090-Redstone-deactivates-spawners.patch similarity index 100% rename from patches/Purpur/patches/server/0091-Redstone-deactivates-spawners.patch rename to patches/Purpur/patches/server/0090-Redstone-deactivates-spawners.patch diff --git a/patches/Purpur/patches/server/0092-Totems-work-in-inventory.patch b/patches/Purpur/patches/server/0091-Totems-work-in-inventory.patch similarity index 96% rename from patches/Purpur/patches/server/0092-Totems-work-in-inventory.patch rename to patches/Purpur/patches/server/0091-Totems-work-in-inventory.patch index 84abbbcb..8b9f5ff2 100644 --- a/patches/Purpur/patches/server/0092-Totems-work-in-inventory.patch +++ b/patches/Purpur/patches/server/0091-Totems-work-in-inventory.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Totems work in inventory diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 67f33647cd66c32fcc6d91edd7f66684c0e6464f..a7a5917fc7c6bbdecab26884cac361bcfb5b4178 100644 +index a8cd7f0abf58e69d276e469bd7d5ef6ae619263d..4b7ff69eac4dd5fd5c9b0b26d133daeb128c445d 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -1328,6 +1328,19 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/Purpur/patches/server/0095-Populator-seed-controls.patch b/patches/Purpur/patches/server/0092-Populator-seed-controls.patch similarity index 100% rename from patches/Purpur/patches/server/0095-Populator-seed-controls.patch rename to patches/Purpur/patches/server/0092-Populator-seed-controls.patch diff --git a/patches/Purpur/patches/server/0096-Add-vindicator-johnny-spawn-chance.patch b/patches/Purpur/patches/server/0093-Add-vindicator-johnny-spawn-chance.patch similarity index 100% rename from patches/Purpur/patches/server/0096-Add-vindicator-johnny-spawn-chance.patch rename to patches/Purpur/patches/server/0093-Add-vindicator-johnny-spawn-chance.patch diff --git a/patches/Purpur/patches/server/0093-Fix-death-message-colors.patch b/patches/Purpur/patches/server/0093-Fix-death-message-colors.patch deleted file mode 100644 index fc409783..00000000 --- a/patches/Purpur/patches/server/0093-Fix-death-message-colors.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Sun, 19 Jul 2020 14:08:33 -0500 -Subject: [PATCH] Fix death message colors - - -diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index d4d1d03990a3ad25eebaba4f0beec8578e3e0624..14a3e6f1f60770eea0477f863eed7abe48880a84 100644 ---- a/src/main/java/net/minecraft/server/EntityPlayer.java -+++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -853,7 +853,24 @@ public class EntityPlayer extends EntityHuman implements ICrafting { - - IChatBaseComponent defaultMessage = this.getCombatTracker().getDeathMessage(); - -- String deathmessage = defaultMessage.getString(); -+ // Purpur start -+ String deathmessage; -+ String json = ""; -+ try { -+ json = IChatBaseComponent.ChatSerializer.componentToJson(defaultMessage); -+ net.md_5.bungee.api.chat.BaseComponent[] parsed = net.md_5.bungee.chat.ComponentSerializer.parse(json); -+ net.md_5.bungee.api.chat.TextComponent wrapped = new net.md_5.bungee.api.chat.TextComponent(parsed); -+ deathmessage = wrapped.toLegacyText(); -+ } catch (Exception e) { -+ deathmessage = defaultMessage.getString(); -+ MinecraftServer.LOGGER.warn("There was a problem processing the death message json component!"); -+ MinecraftServer.LOGGER.warn("We have fallen back to legacy colorless death message to prevent real errors"); -+ MinecraftServer.LOGGER.warn("Please report this to Purpur!"); -+ MinecraftServer.LOGGER.warn("JSON: " + json); -+ MinecraftServer.LOGGER.warn("The following error describes what went wrong:"); -+ e.printStackTrace(); -+ } -+ // Purpur end - org.bukkit.event.entity.PlayerDeathEvent event = CraftEventFactory.callPlayerDeathEvent(this, loot, deathmessage, keepInventory); - // Paper start - cancellable death event - if (event.isCancelled()) { diff --git a/patches/Purpur/patches/server/0097-Add-option-to-disable-mushroom-block-updates.patch b/patches/Purpur/patches/server/0094-Add-option-to-disable-mushroom-block-updates.patch similarity index 100% rename from patches/Purpur/patches/server/0097-Add-option-to-disable-mushroom-block-updates.patch rename to patches/Purpur/patches/server/0094-Add-option-to-disable-mushroom-block-updates.patch diff --git a/patches/Purpur/patches/server/0094-Duplicate-paper-s-vanilla-scoreboard-colors-patch-to.patch b/patches/Purpur/patches/server/0094-Duplicate-paper-s-vanilla-scoreboard-colors-patch-to.patch deleted file mode 100644 index d5074167..00000000 --- a/patches/Purpur/patches/server/0094-Duplicate-paper-s-vanilla-scoreboard-colors-patch-to.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Sun, 19 Jul 2020 15:30:50 -0500 -Subject: [PATCH] Duplicate paper's vanilla scoreboard colors patch to sync - chat event - - -diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 94353290087df17e441dba8fe8999ad558652cda..05f2cc5904f196c70e8e83625810673f6110aba0 100644 ---- a/src/main/java/net/minecraft/server/PlayerConnection.java -+++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -2055,7 +2055,15 @@ public class PlayerConnection implements PacketListenerPlayIn { - return null; - } - -- String message = String.format(queueEvent.getFormat(), queueEvent.getPlayer().getDisplayName(), queueEvent.getMessage()); -+ // Purpur Start - Support for vanilla world scoreboard name coloring (copied from paper's diff below) -+ String displayName = queueEvent.getPlayer().getDisplayName(); -+ if (PlayerConnection.this.player.getWorld().paperConfig.useVanillaScoreboardColoring) { -+ IChatBaseComponent nameFromTeam = ScoreboardTeam.a(PlayerConnection.this.player.getScoreboardTeam(), PlayerConnection.this.player.getDisplayName()); -+ // Explicitly add a RESET here, vanilla uses components for this now... -+ displayName = new net.md_5.bungee.api.chat.TextComponent(net.md_5.bungee.chat.ComponentSerializer.parse(IChatBaseComponent.ChatSerializer.componentToJson(nameFromTeam))).toLegacyText() + org.bukkit.ChatColor.RESET; -+ } -+ String message = String.format(queueEvent.getFormat(), displayName, queueEvent.getMessage()); -+ // Purpur end - PlayerConnection.this.minecraftServer.console.sendMessage(message); - if (((LazyPlayerSet) queueEvent.getRecipients()).isLazy()) { - for (Object player : PlayerConnection.this.minecraftServer.getPlayerList().players) { -@@ -2088,7 +2096,7 @@ public class PlayerConnection implements PacketListenerPlayIn { - // Paper Start - (Meh) Support for vanilla world scoreboard name coloring - String displayName = event.getPlayer().getDisplayName(); - if (this.player.getWorld().paperConfig.useVanillaScoreboardColoring) { -- IChatBaseComponent nameFromTeam = ScoreboardTeam.a(this.player.getScoreboardTeam(), ((CraftPlayer) player).getHandle().getDisplayName()); -+ IChatBaseComponent nameFromTeam = ScoreboardTeam.a(this.player.getScoreboardTeam(), this.player.getDisplayName()); // Purpur - why are we casting bukkit player back to nms player when we already have a nms player... - // Explicitly add a RESET here, vanilla uses components for this now... - displayName = new net.md_5.bungee.api.chat.TextComponent(net.md_5.bungee.chat.ComponentSerializer.parse(IChatBaseComponent.ChatSerializer.componentToJson(nameFromTeam))).toLegacyText() + org.bukkit.ChatColor.RESET; - } diff --git a/patches/Purpur/patches/server/0098-Dispensers-place-anvils-option.patch b/patches/Purpur/patches/server/0095-Dispensers-place-anvils-option.patch similarity index 97% rename from patches/Purpur/patches/server/0098-Dispensers-place-anvils-option.patch rename to patches/Purpur/patches/server/0095-Dispensers-place-anvils-option.patch index 89c47720..cbebe020 100644 --- a/patches/Purpur/patches/server/0098-Dispensers-place-anvils-option.patch +++ b/patches/Purpur/patches/server/0095-Dispensers-place-anvils-option.patch @@ -33,7 +33,7 @@ index 30ba21ac1bced18a9d0946b7c3ed55971ada48bb..23796bd657f071a337fdf76d777e33c2 return this.k; } diff --git a/src/main/java/net/minecraft/server/IDispenseBehavior.java b/src/main/java/net/minecraft/server/IDispenseBehavior.java -index 7b8a470d97ccf0fdcdb8eef9368195486e09913b..d1f9d2884d055efbe72b01f86b0bdaf13ed122a5 100644 +index 1277a9c8f06936c53f02dc6cfd2eb5184a7b37a2..5675544e018ce6d4fa608680989980edb0ea625a 100644 --- a/src/main/java/net/minecraft/server/IDispenseBehavior.java +++ b/src/main/java/net/minecraft/server/IDispenseBehavior.java @@ -915,6 +915,23 @@ public interface IDispenseBehavior { diff --git a/patches/Purpur/patches/server/0099-Allow-anvil-colors.patch b/patches/Purpur/patches/server/0096-Allow-anvil-colors.patch similarity index 55% rename from patches/Purpur/patches/server/0099-Allow-anvil-colors.patch rename to patches/Purpur/patches/server/0096-Allow-anvil-colors.patch index 44781299..8f946d11 100644 --- a/patches/Purpur/patches/server/0099-Allow-anvil-colors.patch +++ b/patches/Purpur/patches/server/0096-Allow-anvil-colors.patch @@ -5,30 +5,36 @@ Subject: [PATCH] Allow anvil colors diff --git a/src/main/java/net/minecraft/server/ContainerAnvil.java b/src/main/java/net/minecraft/server/ContainerAnvil.java -index 4aa6b035a6a8ea39401c6566cd286de39f60e942..5e4e59e5c8478b76078fdda14e5ced76304d489c 100644 +index 4aa6b035a6a8ea39401c6566cd286de39f60e942..02924766a4c655f149b58bf1ded8e0610f8900a3 100644 --- a/src/main/java/net/minecraft/server/ContainerAnvil.java +++ b/src/main/java/net/minecraft/server/ContainerAnvil.java -@@ -251,6 +251,25 @@ public class ContainerAnvil extends ContainerAnvilAbstract { +@@ -10,6 +10,13 @@ import org.apache.logging.log4j.Logger; + import org.bukkit.craftbukkit.inventory.CraftInventoryView; + // CraftBukkit end + ++// Purpur start ++import io.papermc.paper.adventure.PaperAdventure; ++import net.kyori.adventure.text.Component; ++ ++import static net.kyori.adventure.text.format.TextDecoration.ITALIC; ++// Purpur end ++ + public class ContainerAnvil extends ContainerAnvilAbstract { + + private static final Logger LOGGER = LogManager.getLogger(); +@@ -251,6 +258,17 @@ public class ContainerAnvil extends ContainerAnvilAbstract { } else if (!this.renameText.equals(itemstack.getName().getString())) { b1 = 1; i += b1; + // Purpur start + if (player != null && player.world.purpurConfig.anvilAllowColors && player.getBukkitEntity().hasPermission("purpur.anvil.color")) { -+ String json = ""; -+ try { -+ String coloredText = net.md_5.bungee.api.ChatColor.translateAlternateColorCodes('&', this.renameText); -+ net.md_5.bungee.api.chat.BaseComponent[] bungeeComp = net.md_5.bungee.api.chat.TextComponent.fromLegacyText(coloredText); -+ json = net.md_5.bungee.chat.ComponentSerializer.toString(bungeeComp); -+ IChatBaseComponent nmsComp = IChatBaseComponent.ChatSerializer.jsonToComponent(json); -+ itemstack1.a(nmsComp); -+ } catch (Exception e) { -+ MinecraftServer.LOGGER.warn("There was a problem processing item name json component on anvil!"); -+ MinecraftServer.LOGGER.warn("We have fallen back to legacy colorless item name to prevent real errors"); -+ MinecraftServer.LOGGER.warn("Please report this to Purpur!"); -+ MinecraftServer.LOGGER.warn("JSON: " + json); -+ MinecraftServer.LOGGER.warn("The following error describes what went wrong:"); -+ e.printStackTrace(); ++ final Component renameTextComponent; ++ if (renameText.startsWith("&r") && player.getBukkitEntity().hasPermission("purpur.anvil.remove_italics")) { ++ renameTextComponent = PaperAdventure.LEGACY_AMPERSAND.deserialize(renameText.substring(2)).decoration(ITALIC, false); ++ } else { ++ renameTextComponent = PaperAdventure.LEGACY_AMPERSAND.deserialize(renameText); + } ++ itemstack1.a(PaperAdventure.asVanilla(renameTextComponent)); + } else + // Purpur end itemstack1.a((IChatBaseComponent) (new ChatComponentText(this.renameText))); diff --git a/patches/Purpur/patches/server/0100-Add-no-tick-block-list.patch b/patches/Purpur/patches/server/0097-Add-no-tick-block-list.patch similarity index 100% rename from patches/Purpur/patches/server/0100-Add-no-tick-block-list.patch rename to patches/Purpur/patches/server/0097-Add-no-tick-block-list.patch diff --git a/patches/Purpur/patches/server/0101-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/Purpur/patches/server/0098-Add-option-to-disable-dolphin-treasure-searching.patch similarity index 100% rename from patches/Purpur/patches/server/0101-Add-option-to-disable-dolphin-treasure-searching.patch rename to patches/Purpur/patches/server/0098-Add-option-to-disable-dolphin-treasure-searching.patch diff --git a/patches/Purpur/patches/server/0102-Short-enderman-height.patch b/patches/Purpur/patches/server/0099-Short-enderman-height.patch similarity index 97% rename from patches/Purpur/patches/server/0102-Short-enderman-height.patch rename to patches/Purpur/patches/server/0099-Short-enderman-height.patch index 0b73b0a9..e536d472 100644 --- a/patches/Purpur/patches/server/0102-Short-enderman-height.patch +++ b/patches/Purpur/patches/server/0099-Short-enderman-height.patch @@ -17,7 +17,7 @@ index 7b175240e44b0c7eb5044d7bcaf54dac22f50f2a..e3364032669b473c799b759f5f89468b if (this.tryEscape(EndermanEscapeEvent.Reason.INDIRECT)) { // Paper start for (int i = 0; i < 64; ++i) { diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java -index 37b984a5b6c1c6e146e1c4b0947d1e39a051cfbb..919cf670327bed6faa50f29c9bf7a9b54174f7f2 100644 +index ed1e0bd379b95bc090c7cdf57de70ec9cc2dac5a..06fe0fca1936853748997c63f325df99da5fa2ee 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java +++ b/src/main/java/net/minecraft/server/EntityTypes.java @@ -137,7 +137,8 @@ public class EntityTypes { diff --git a/patches/Purpur/patches/server/0103-Stop-squids-floating-on-top-of-water.patch b/patches/Purpur/patches/server/0100-Stop-squids-floating-on-top-of-water.patch similarity index 94% rename from patches/Purpur/patches/server/0103-Stop-squids-floating-on-top-of-water.patch rename to patches/Purpur/patches/server/0100-Stop-squids-floating-on-top-of-water.patch index d8aff135..788f66df 100644 --- a/patches/Purpur/patches/server/0103-Stop-squids-floating-on-top-of-water.patch +++ b/patches/Purpur/patches/server/0100-Stop-squids-floating-on-top-of-water.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index d888dbb2f6c20eee98c0c8b0d1c62ba30615e8eb..b3b654da3c5a036871248b0a7c8e6ca77b44345d 100644 +index 4b9e44aad705247c075e435ebc6eb9b1393f7b17..30408e9e8b4acec56a95852558ead6a581b8565c 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -3448,8 +3448,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -3461,8 +3461,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.lastYaw = this.yaw; } diff --git a/patches/Purpur/patches/server/0104-Ridables.patch b/patches/Purpur/patches/server/0101-Ridables.patch similarity index 97% rename from patches/Purpur/patches/server/0104-Ridables.patch rename to patches/Purpur/patches/server/0101-Ridables.patch index 180fe149..f223fe0b 100644 --- a/patches/Purpur/patches/server/0104-Ridables.patch +++ b/patches/Purpur/patches/server/0101-Ridables.patch @@ -3,7 +3,6 @@ From: William Blake Galbreath Date: Sun, 5 Jul 2020 22:19:49 -0500 Subject: [PATCH] Ridables -test diff --git a/src/main/java/net/minecraft/server/AttributeDefaults.java b/src/main/java/net/minecraft/server/AttributeDefaults.java index 8f95a4e49714e352b9cdf82d7f4acdd3459978ad..ab05b5e403cf54756aa35891dc0d950187a9d4ec 100644 @@ -162,18 +161,9 @@ index bd0267ee4b3782f6d1ec39cba7966ba4f62f1adf..8b36ac2b0950a827763aa2357700f37e this.B = true; return this; diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index b3b654da3c5a036871248b0a7c8e6ca77b44345d..40432014000b0e6113dc06ab36b64111fa50ad50 100644 +index 30408e9e8b4acec56a95852558ead6a581b8565c..8be2b1ed66c3a72d2b752881b16b8a402cce2768 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -80,7 +80,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke - public com.destroystokyo.paper.loottable.PaperLootableInventoryData lootableData; // Paper - private CraftEntity bukkitEntity; - -- PlayerChunkMap.EntityTracker tracker; // Paper -+ PlayerChunkMap.EntityTracker tracker; public PlayerChunkMap.EntityTracker getTracker() { return tracker; } // Paper // Purpur - boolean collisionLoadChunks = false; // Paper - Throwable addedToWorldStack; // Paper - entity debug - public CraftEntity getBukkitEntity() { @@ -105,7 +105,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke private int id; public boolean i; public final boolean blocksEntitySpawning() { return this.i; } // Paper - OBFHELPER @@ -201,7 +191,7 @@ index b3b654da3c5a036871248b0a7c8e6ca77b44345d..40432014000b0e6113dc06ab36b64111 private float headHeight; // CraftBukkit start public boolean persist = true; -@@ -1482,6 +1482,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1495,6 +1495,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return !this.justCreated && this.M.getDouble(TagsFluid.LAVA) > 0.0D; } @@ -209,7 +199,7 @@ index b3b654da3c5a036871248b0a7c8e6ca77b44345d..40432014000b0e6113dc06ab36b64111 public void a(float f, Vec3D vec3d) { Vec3D vec3d1 = a(vec3d, f, this.yaw); -@@ -2238,6 +2239,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2251,6 +2252,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return this.a(entity, false); } @@ -217,7 +207,7 @@ index b3b654da3c5a036871248b0a7c8e6ca77b44345d..40432014000b0e6113dc06ab36b64111 public boolean a(Entity entity, boolean flag) { for (Entity entity1 = entity; entity1.vehicle != null; entity1 = entity1.vehicle) { if (entity1.vehicle == this) { -@@ -2333,6 +2335,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2346,6 +2348,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.passengers.add(entity); } @@ -231,7 +221,7 @@ index b3b654da3c5a036871248b0a7c8e6ca77b44345d..40432014000b0e6113dc06ab36b64111 } return true; // CraftBukkit } -@@ -2373,6 +2382,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2386,6 +2395,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return false; } // Spigot end @@ -244,7 +234,7 @@ index b3b654da3c5a036871248b0a7c8e6ca77b44345d..40432014000b0e6113dc06ab36b64111 this.passengers.remove(entity); entity.j = 60; } -@@ -2538,6 +2553,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2551,6 +2566,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.setFlag(4, flag); } @@ -252,7 +242,7 @@ index b3b654da3c5a036871248b0a7c8e6ca77b44345d..40432014000b0e6113dc06ab36b64111 public boolean bE() { return this.glowing || this.world.isClientSide && this.getFlag(6); } -@@ -2760,6 +2776,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2773,6 +2789,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke public void setHeadRotation(float f) {} @@ -260,7 +250,7 @@ index b3b654da3c5a036871248b0a7c8e6ca77b44345d..40432014000b0e6113dc06ab36b64111 public void n(float f) {} public boolean bL() { -@@ -3201,6 +3218,18 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -3214,6 +3231,18 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return false; } @@ -279,7 +269,7 @@ index b3b654da3c5a036871248b0a7c8e6ca77b44345d..40432014000b0e6113dc06ab36b64111 @Override public void sendMessage(IChatBaseComponent ichatbasecomponent, UUID uuid) {} -@@ -3653,4 +3682,47 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -3666,4 +3695,47 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return ((ChunkProviderServer) world.getChunkProvider()).isInEntityTickingChunk(this); } // Paper end @@ -328,10 +318,10 @@ index b3b654da3c5a036871248b0a7c8e6ca77b44345d..40432014000b0e6113dc06ab36b64111 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java -index 0a59e02d762a096cb3de62e0f8105cc5a5fab8d4..bdf4e798ac8ca27edebd0122b894d15a76ecb9d0 100644 +index 451ffcfd1fc9fa3091dc2bd697e5d829dcf6443f..7677f4a2ec8bacadcbc6e68e13f56256f1963552 100644 --- a/src/main/java/net/minecraft/server/EntityBat.java +++ b/src/main/java/net/minecraft/server/EntityBat.java -@@ -14,9 +14,48 @@ public class EntityBat extends EntityAmbient { +@@ -15,9 +15,48 @@ public class EntityBat extends EntityAmbient { public EntityBat(EntityTypes entitytypes, World world) { super(entitytypes, world); @@ -380,7 +370,7 @@ index 0a59e02d762a096cb3de62e0f8105cc5a5fab8d4..bdf4e798ac8ca27edebd0122b894d15a @Override protected void initDatawatcher() { super.initDatawatcher(); -@@ -61,7 +100,7 @@ public class EntityBat extends EntityAmbient { +@@ -62,7 +101,7 @@ public class EntityBat extends EntityAmbient { protected void collideNearby() {} public static AttributeProvider.Builder m() { @@ -389,7 +379,7 @@ index 0a59e02d762a096cb3de62e0f8105cc5a5fab8d4..bdf4e798ac8ca27edebd0122b894d15a } public boolean isAsleep() { -@@ -93,6 +132,13 @@ public class EntityBat extends EntityAmbient { +@@ -94,6 +133,13 @@ public class EntityBat extends EntityAmbient { @Override protected void mobTick() { @@ -878,10 +868,10 @@ index cfb009c811bd2908d38da1b0007cb7aaed4e42c3..1219b0aa9c62bc9a1bda45cc9e9a27f1 this.world.addEntity(mooshroom); this.die(); diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java -index 2256b81624b12b6f6cb54250b24fa12ad6da621d..d186f257fa3bc613be7ec79cd6a6ff2e747cba78 100644 +index 36bf307985624a3567eb1196e034470bd7002e1e..7e5ede0f644a6e303be36ab0915d346a02760daa 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java -@@ -18,12 +18,27 @@ public class EntityCreeper extends EntityMonster { +@@ -19,12 +19,27 @@ public class EntityCreeper extends EntityMonster { public int maxFuseTicks = 30; public int explosionRadius = 3; private int bs; @@ -909,7 +899,7 @@ index 2256b81624b12b6f6cb54250b24fa12ad6da621d..d186f257fa3bc613be7ec79cd6a6ff2e @Override public GroupDataEntity prepare(WorldAccess worldaccess, DifficultyDamageScaler difficultydamagescaler, EnumMobSpawn enummobspawn, @javax.annotation.Nullable GroupDataEntity groupdataentity, @javax.annotation.Nullable NBTTagCompound nbttagcompound) { double chance = worldaccess.getMinecraftWorld().purpurConfig.creeperChargedChance; -@@ -32,18 +47,69 @@ public class EntityCreeper extends EntityMonster { +@@ -33,18 +48,69 @@ public class EntityCreeper extends EntityMonster { } return super.prepare(worldaccess, difficultydamagescaler, enummobspawn, groupdataentity, nbttagcompound); } @@ -979,7 +969,7 @@ index 2256b81624b12b6f6cb54250b24fa12ad6da621d..d186f257fa3bc613be7ec79cd6a6ff2e this.targetSelector.a(1, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); this.targetSelector.a(2, new PathfinderGoalHurtByTarget(this, new Class[0])); } -@@ -174,6 +240,7 @@ public class EntityCreeper extends EntityMonster { +@@ -175,6 +241,7 @@ public class EntityCreeper extends EntityMonster { return (Integer) this.datawatcher.get(EntityCreeper.b); } @@ -987,7 +977,7 @@ index 2256b81624b12b6f6cb54250b24fa12ad6da621d..d186f257fa3bc613be7ec79cd6a6ff2e public void a(int i) { this.datawatcher.set(EntityCreeper.b, i); } -@@ -274,6 +341,7 @@ public class EntityCreeper extends EntityMonster { +@@ -275,6 +342,7 @@ public class EntityCreeper extends EntityMonster { com.destroystokyo.paper.event.entity.CreeperIgniteEvent event = new com.destroystokyo.paper.event.entity.CreeperIgniteEvent((org.bukkit.entity.Creeper) getBukkitEntity(), ignited); if (event.callEvent()) { this.datawatcher.set(EntityCreeper.d, event.isIgnited()); @@ -1185,7 +1175,7 @@ index 1a102816921fa3b40f6d364bb826db4459f68eb2..125eab60f2b4657e52a71eddf7586c57 @Override diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java -index a5a2182455542bb8fd62941bd0da2f38ba698f35..17a9217ed2d1677371d12b4ab0552378cd71652f 100644 +index f777aea69dc9949aae3251e9a530b8cffb251bad..497d05996ab84f599aa0a02f853149f074e4d3cb 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 { @@ -1326,15 +1316,6 @@ index a5a2182455542bb8fd62941bd0da2f38ba698f35..17a9217ed2d1677371d12b4ab0552378 if (this.bF != null) { this.bF.b(this); } -@@ -949,7 +1018,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { - - @Override - protected boolean n(Entity entity) { -- return false; -+ return getRideCooldown() <= 0; // Purpur - } - - @Override diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java index e3364032669b473c799b759f5f89468b7584d9f5..995849212c25568d3aa28ada78babf8b8e669960 100644 --- a/src/main/java/net/minecraft/server/EntityEnderman.java @@ -1998,10 +1979,10 @@ index f958751b16abcc36910bb0b655ff2360459e2e4c..4ffc61acdff8c51dc9b111e3024c828f protected void eK() { this.getAttributeInstance(GenericAttributes.MAX_HEALTH).setValue((double) this.fp()); diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -index 7604fd83de9cfe93d427a9a1f6bbbee76aa861e8..7958b69b2d4bee87ff5b38b8f724d248f41dff66 100644 +index 784819d252d94e8040a87f53431fcf2c7a19d1a7..8fde406273bbea0b9d2dea2362cf6372b7a5c9ae 100644 --- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java +++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -@@ -39,12 +39,27 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven +@@ -40,12 +40,27 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven protected EntityHorseAbstract(EntityTypes entitytypes, World world) { super(entitytypes, world); @@ -2029,7 +2010,7 @@ index 7604fd83de9cfe93d427a9a1f6bbbee76aa861e8..7958b69b2d4bee87ff5b38b8f724d248 this.goalSelector.a(1, new PathfinderGoalPanic(this, 1.2D)); this.goalSelector.a(1, new PathfinderGoalTame(this, 1.2D)); this.goalSelector.a(2, new PathfinderGoalBreed(this, 1.0D, EntityHorseAbstract.class)); -@@ -52,6 +67,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven +@@ -53,6 +68,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven this.goalSelector.a(6, new PathfinderGoalRandomStrollLand(this, 0.7D)); this.goalSelector.a(7, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F)); this.goalSelector.a(8, new PathfinderGoalRandomLookaround(this)); @@ -2144,10 +2125,10 @@ index 0e98173607c810e0e74552a2ba8febf292357c39..559ba50977147b8e2a0e7c1e7dc281fa + protected void eV() { 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 093df82d49bfa6c34f081a719b5212ec8a312657..e6e180ea46529e80eeab95f550dee5f3f8198ba8 100644 +index 10365180f518042d56929d0c0061e5297b73cf9b..9266a37f66337a6051c8472934e2e396e1131736 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java -@@ -2136,4 +2136,15 @@ public abstract class EntityHuman extends EntityLiving { +@@ -2149,4 +2149,15 @@ public abstract class EntityHuman extends EntityLiving { return this.g; } } @@ -2373,7 +2354,7 @@ index bdff2368836dca230a6622a205d5772834afc6ee..9ee03b233b71d1b4b85a9a5e1f0ea9fe 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 a7a5917fc7c6bbdecab26884cac361bcfb5b4178..1cdc181bb5e756bddca01ea8f10d319e35309733 100644 +index 4b7ff69eac4dd5fd5c9b0b26d133daeb128c445d..af2b6bb559d78dd912eee02281f5446f31e55eae 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -463,7 +463,7 @@ public abstract class EntityLiving extends Entity { @@ -2575,10 +2556,10 @@ index 874dd39825b41f4e2b366446359920989961f084..cd28463e2bf944d94c121c8f8d6e3722 @Override diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java -index 38df17bd206c908582ece2c4105235feaf0f2227..7966b34f8d202d2260a35baa4cd594e4def89257 100644 +index 91cfe60f764a573e3724b48a9ae02e806c1e4fb8..e38d165fefb4d552ded2198536a6663a5688070d 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java -@@ -20,6 +20,18 @@ public class EntityMushroomCow extends EntityCow implements IShearable { +@@ -21,6 +21,18 @@ public class EntityMushroomCow extends EntityCow implements IShearable { super(entitytypes, world); } @@ -2597,7 +2578,7 @@ index 38df17bd206c908582ece2c4105235feaf0f2227..7966b34f8d202d2260a35baa4cd594e4 @Override public float a(BlockPosition blockposition, IWorldReader iworldreader) { return iworldreader.getType(blockposition.down()).a(Blocks.MYCELIUM) ? 10.0F : iworldreader.y(blockposition) - 0.5F; -@@ -81,7 +93,7 @@ public class EntityMushroomCow extends EntityCow implements IShearable { +@@ -82,7 +94,7 @@ public class EntityMushroomCow extends EntityCow implements IShearable { } else if (itemstack.getItem() == Items.SHEARS && this.canShear()) { // CraftBukkit start if (!CraftEventFactory.handlePlayerShearEntityEvent(entityhuman, this, itemstack, enumhand)) { @@ -2606,7 +2587,7 @@ index 38df17bd206c908582ece2c4105235feaf0f2227..7966b34f8d202d2260a35baa4cd594e4 } // CraftBukkit end this.shear(SoundCategory.PLAYERS); -@@ -101,7 +113,7 @@ public class EntityMushroomCow extends EntityCow implements IShearable { +@@ -102,7 +114,7 @@ public class EntityMushroomCow extends EntityCow implements IShearable { Optional> optional = this.l(itemstack); if (!optional.isPresent()) { @@ -3038,7 +3019,7 @@ index bdfe073dcd255a7359127f9ae3a962642be5526d..c70281fddcbe5a97a1eb176def99cdf3 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 7f52c39234e69b612b89993ce4503c20690064ed..dade0bb29422ebd68fae0edb74cbbf6d3ab89d64 100644 +index 6ea3e4ffc3f42f4282adf3554944f24d92ca2079..bf7ecd7a7d805cc8f1314a348d7b13f848da46b5 100644 --- a/src/main/java/net/minecraft/server/EntityPig.java +++ b/src/main/java/net/minecraft/server/EntityPig.java @@ -19,9 +19,22 @@ public class EntityPig extends EntityAnimal implements ISteerable, ISaddleable { @@ -3213,10 +3194,10 @@ index a3a428da99574c485fcf2b8c7944e0d8354146ee..cf7de0127166f6175a6246062c8664e6 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 14a3e6f1f60770eea0477f863eed7abe48880a84..cdc0145f569f58b8f8b9da0e9ce5e1b5b4489fe7 100644 +index 3f071154ad6b44f9fc9791addd7605bf0860d9a6..71f37abf27edb79b81dfb7651674fc84698e3f23 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -509,6 +509,15 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -512,6 +512,15 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } this.advancementDataPlayer.b(this); @@ -3505,7 +3486,7 @@ index f17608730fca96af4f9779863a8c25723a3bd5cf..95f4592944a53aab0ff9843ae8e7c9b9 this.d = flag; } diff --git a/src/main/java/net/minecraft/server/EntityRavager.java b/src/main/java/net/minecraft/server/EntityRavager.java -index fd1ac7df68a0caebe35290cdf7a9c37519342b61..a9021458814d84a3a82088f91956db73562c3b10 100644 +index e78f158d9c682c60d42c17e0f171d492552e4079..9d0a462bfc56994ee35478cc9e565123620a9f08 100644 --- a/src/main/java/net/minecraft/server/EntityRavager.java +++ b/src/main/java/net/minecraft/server/EntityRavager.java @@ -20,14 +20,37 @@ public class EntityRavager extends EntityRaider { @@ -3607,10 +3588,10 @@ index 2908e9cc47947daad19391d38da3c2a300f67fe5..a151d4295c02930687a23212647de60c 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 7bedaf02c4a56067f55a5d15cb18c002df87a404..30e0e14162cce0c0d228139d4c537243a400ef13 100644 +index 49f6ee064fa7b79c7a9fd7a3344ed2334ce1f9f6..11a6b939ebb51cdda907531d30b7beb3a8562673 100644 --- a/src/main/java/net/minecraft/server/EntityShulker.java +++ b/src/main/java/net/minecraft/server/EntityShulker.java -@@ -29,12 +29,26 @@ public class EntityShulker extends EntityGolem implements IMonster { +@@ -30,12 +30,26 @@ public class EntityShulker extends EntityGolem implements IMonster { this.f = 5; } @@ -3637,7 +3618,7 @@ index 7bedaf02c4a56067f55a5d15cb18c002df87a404..30e0e14162cce0c0d228139d4c537243 this.targetSelector.a(1, (new PathfinderGoalHurtByTarget(this, new Class[0])).a(new Class[0])); // CraftBukkit - decompile error this.targetSelector.a(2, new EntityShulker.d(this)); this.targetSelector.a(3, new EntityShulker.c(this)); -@@ -518,7 +532,7 @@ public class EntityShulker extends EntityGolem implements IMonster { +@@ -519,7 +533,7 @@ public class EntityShulker extends EntityGolem implements IMonster { private int b; @@ -3775,10 +3756,10 @@ index c872be77a6cd767520d5412b38ec4ed4fa87ac2f..96cb080d940db22330598a8806726088 protected void initPathfinder() { this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityPiglinAbstract.class, true)); diff --git a/src/main/java/net/minecraft/server/EntitySlime.java b/src/main/java/net/minecraft/server/EntitySlime.java -index 8a1ff579ddf2fef191bc370dc51dd2e6404d9a22..3c14ed27e5b487451846f6811f189e6fba05d32d 100644 +index 80fab9290479f876fd78997c1bd55fe6b00aac45..7f3d57a9399f60465fae27f03fc57df625f5016d 100644 --- a/src/main/java/net/minecraft/server/EntitySlime.java +++ b/src/main/java/net/minecraft/server/EntitySlime.java -@@ -34,12 +34,45 @@ public class EntitySlime extends EntityInsentient implements IMonster { +@@ -35,12 +35,45 @@ public class EntitySlime extends EntityInsentient implements IMonster { this.moveController = new EntitySlime.ControllerMoveSlime(this); } @@ -3824,7 +3805,7 @@ index 8a1ff579ddf2fef191bc370dc51dd2e6404d9a22..3c14ed27e5b487451846f6811f189e6f this.targetSelector.a(1, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, 10, true, false, (entityliving) -> { return Math.abs(entityliving.locY() - this.locY()) <= 4.0D; })); -@@ -325,11 +358,12 @@ public class EntitySlime extends EntityInsentient implements IMonster { +@@ -326,11 +359,12 @@ public class EntitySlime extends EntityInsentient implements IMonster { } @Override @@ -3838,7 +3819,7 @@ index 8a1ff579ddf2fef191bc370dc51dd2e6404d9a22..3c14ed27e5b487451846f6811f189e6f } @Nullable -@@ -498,10 +532,10 @@ public class EntitySlime extends EntityInsentient implements IMonster { +@@ -499,10 +533,10 @@ public class EntitySlime extends EntityInsentient implements IMonster { // Paper end } @@ -3851,7 +3832,7 @@ index 8a1ff579ddf2fef191bc370dc51dd2e6404d9a22..3c14ed27e5b487451846f6811f189e6f private final EntitySlime k; private boolean l; -@@ -523,15 +557,27 @@ public class EntitySlime extends EntityInsentient implements IMonster { +@@ -524,15 +558,27 @@ public class EntitySlime extends EntityInsentient implements IMonster { @Override public void a() { @@ -3881,7 +3862,7 @@ index 8a1ff579ddf2fef191bc370dc51dd2e6404d9a22..3c14ed27e5b487451846f6811f189e6f if (this.j-- <= 0) { this.j = this.k.eJ(); if (this.l) { -@@ -548,7 +594,7 @@ public class EntitySlime extends EntityInsentient implements IMonster { +@@ -549,7 +595,7 @@ public class EntitySlime extends EntityInsentient implements IMonster { this.a.q(0.0F); } } else { @@ -3891,10 +3872,10 @@ index 8a1ff579ddf2fef191bc370dc51dd2e6404d9a22..3c14ed27e5b487451846f6811f189e6f } diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index 51396cbd18d0e053e788f82bf4a3bc2533f20e11..66a90507aaf16bb8512a77f3c9aa501697e49862 100644 +index c39f3c06eb199a24f32a5c581e877073b580502c..e370de0ade49ac81d746588bf0991101eba0ce2d 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java -@@ -13,12 +13,26 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -14,12 +14,26 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt super(entitytypes, world); } @@ -3921,7 +3902,7 @@ index 51396cbd18d0e053e788f82bf4a3bc2533f20e11..66a90507aaf16bb8512a77f3c9aa5016 this.targetSelector.a(1, new PathfinderGoalNearestAttackableTarget<>(this, EntityInsentient.class, 10, true, false, (entityliving) -> { return entityliving instanceof IMonster; })); -@@ -70,6 +84,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -71,6 +85,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt return; } @@ -3929,7 +3910,7 @@ index 51396cbd18d0e053e788f82bf4a3bc2533f20e11..66a90507aaf16bb8512a77f3c9aa5016 IBlockData iblockdata = Blocks.SNOW.getBlockData(); for (int l = 0; l < 4; ++l) { -@@ -112,7 +127,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -113,7 +128,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt if (itemstack.getItem() == Items.SHEARS && this.canShear()) { // CraftBukkit start if (!CraftEventFactory.handlePlayerShearEntityEvent(entityhuman, this, itemstack, enumhand)) { @@ -3938,7 +3919,7 @@ index 51396cbd18d0e053e788f82bf4a3bc2533f20e11..66a90507aaf16bb8512a77f3c9aa5016 } // CraftBukkit end this.shear(SoundCategory.PLAYERS); -@@ -132,7 +147,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -133,7 +148,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt return EnumInteractionResult.SUCCESS; // Purpur end } else { @@ -4238,10 +4219,10 @@ index 4ad393bc99881d813e2b349fb929fc8e69631723..2b34e6cf3b86319bd2875d92b6390288 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/EntityVex.java b/src/main/java/net/minecraft/server/EntityVex.java -index ed6a47ad2fd973695fbb151d1a44000ec3639e54..ac75ed3e2e0e0cd8f91de9ff188e173591443b72 100644 +index 9a33866e7529e1636c228bab01205737bc678b47..9336fbbd46c7c6ac11adf8e4cc2735f81c9ed639 100644 --- a/src/main/java/net/minecraft/server/EntityVex.java +++ b/src/main/java/net/minecraft/server/EntityVex.java -@@ -19,6 +19,45 @@ public class EntityVex extends EntityMonster { +@@ -18,6 +18,45 @@ public class EntityVex extends EntityMonster { this.f = 3; } @@ -4287,7 +4268,7 @@ index ed6a47ad2fd973695fbb151d1a44000ec3639e54..ac75ed3e2e0e0cd8f91de9ff188e1735 @Override public void move(EnumMoveType enummovetype, Vec3D vec3d) { super.move(enummovetype, vec3d); -@@ -27,7 +66,7 @@ public class EntityVex extends EntityMonster { +@@ -26,7 +65,7 @@ public class EntityVex extends EntityMonster { @Override public void tick() { @@ -4296,7 +4277,7 @@ index ed6a47ad2fd973695fbb151d1a44000ec3639e54..ac75ed3e2e0e0cd8f91de9ff188e1735 super.tick(); this.noclip = false; this.setNoGravity(true); -@@ -42,17 +81,19 @@ public class EntityVex extends EntityMonster { +@@ -41,17 +80,19 @@ public class EntityVex extends EntityMonster { protected void initPathfinder() { super.initPathfinder(); this.goalSelector.a(0, new PathfinderGoalFloat(this)); @@ -4317,7 +4298,7 @@ index ed6a47ad2fd973695fbb151d1a44000ec3639e54..ac75ed3e2e0e0cd8f91de9ff188e1735 } @Override -@@ -284,14 +325,14 @@ public class EntityVex extends EntityMonster { +@@ -283,14 +324,14 @@ public class EntityVex extends EntityMonster { } } @@ -4335,10 +4316,10 @@ index ed6a47ad2fd973695fbb151d1a44000ec3639e54..ac75ed3e2e0e0cd8f91de9ff188e1735 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 a0bfef54c853d57c9a5c6d3f9f19591649295357..548a993a1de939396d075f9176e0d60eebc7b010 100644 +index 762f1acf435c6e7b6d695fc1b2120de0116f46da..15e052cb844df310c62d8a5695e8da6c633d94b6 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -75,8 +75,19 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -73,8 +73,19 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } // Purpur start @@ -4358,7 +4339,7 @@ index a0bfef54c853d57c9a5c6d3f9f19591649295357..548a993a1de939396d075f9176e0d60e if (world.purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.0D, false, TEMPT_ITEMS)); } -@@ -241,7 +252,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -239,7 +250,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation if (itemstack.getItem() != Items.VILLAGER_SPAWN_EGG && this.isAlive() && !this.eN() && !this.isSleeping()) { if (this.isBaby()) { this.fk(); @@ -4367,7 +4348,7 @@ index a0bfef54c853d57c9a5c6d3f9f19591649295357..548a993a1de939396d075f9176e0d60e } else { boolean flag = this.getOffers().isEmpty(); -@@ -254,8 +265,9 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -252,8 +263,9 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } if (flag) { @@ -4379,10 +4360,10 @@ index a0bfef54c853d57c9a5c6d3f9f19591649295357..548a993a1de939396d075f9176e0d60e this.h(entityhuman); } diff --git a/src/main/java/net/minecraft/server/EntityVillagerTrader.java b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -index 298d2b6f6e352bb82f3a5a307466bb6e8f47d9d3..d41960088bb8bc6a7fece0ef152403c43a768dde 100644 +index 432956d9d5f2706014d67232b88e6b86011484f3..b9418fac0a05d4bb5f8f215a5704bba332e3f7cb 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -@@ -24,6 +24,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -25,6 +25,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { @Override protected void initPathfinder() { this.goalSelector.a(0, new PathfinderGoalFloat(this)); @@ -4390,7 +4371,7 @@ index 298d2b6f6e352bb82f3a5a307466bb6e8f47d9d3..d41960088bb8bc6a7fece0ef152403c4 this.goalSelector.a(0, new PathfinderGoalUseItem<>(this, PotionUtil.a(new ItemStack(Items.POTION), Potions.INVISIBILITY), SoundEffects.ENTITY_WANDERING_TRADER_DISAPPEARED, (entityvillagertrader) -> { return this.world.isNight() && !entityvillagertrader.isInvisible(); })); -@@ -49,6 +50,16 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -50,6 +51,16 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { } // Purpur - start @@ -4407,7 +4388,7 @@ index 298d2b6f6e352bb82f3a5a307466bb6e8f47d9d3..d41960088bb8bc6a7fece0ef152403c4 @Override public boolean a(EntityHuman entityhuman) { return world.purpurConfig.villagerTraderCanBeLeashed && !this.isLeashed(); -@@ -76,8 +87,9 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -77,8 +88,9 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { } if (this.getOffers().isEmpty()) { @@ -4488,7 +4469,7 @@ index ca3c5150bcfe2a92b49ad5a27c23dd37a7054fbb..323d79a99402b0f6952b4fb873170069 this.targetSelector.a(2, this.br); this.targetSelector.a(3, this.bs); diff --git a/src/main/java/net/minecraft/server/EntityWither.java b/src/main/java/net/minecraft/server/EntityWither.java -index 2e623ef9be036ea467e9e41817c2eced018f8f93..59382230aec623f7de889c30a0ed6a2a3fa35a05 100644 +index b1159f0258eca2bee52ec0939ba86792d24a1f99..6fc097d2ae11ec5d1c12ce070c8d69d2249cf3c7 100644 --- a/src/main/java/net/minecraft/server/EntityWither.java +++ b/src/main/java/net/minecraft/server/EntityWither.java @@ -32,6 +32,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { @@ -4621,9 +4602,9 @@ index 2e623ef9be036ea467e9e41817c2eced018f8f93..59382230aec623f7de889c30a0ed6a2a this.goalSelector.a(7, new PathfinderGoalRandomLookaround(this)); + this.targetSelector.a(0, new PathfinderGoalHasRider(this)); // Purpur this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this, new Class[0])); + if(this.world.paperConfig.fixWitherTargetingBug) this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, 0, false, false, null)); // Paper - Fix MC-29274 this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityInsentient.class, 0, false, false, EntityWither.by)); - } -@@ -194,6 +302,16 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -195,6 +303,16 @@ public class EntityWither extends EntityMonster implements IRangedEntity { @Override protected void mobTick() { @@ -4640,7 +4621,7 @@ index 2e623ef9be036ea467e9e41817c2eced018f8f93..59382230aec623f7de889c30a0ed6a2a int i; if (this.getInvul() > 0) { -@@ -377,7 +495,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -378,7 +496,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { this.bossBattle.removePlayer(entityplayer); } @@ -4649,7 +4630,7 @@ index 2e623ef9be036ea467e9e41817c2eced018f8f93..59382230aec623f7de889c30a0ed6a2a if (i <= 0) { return this.locX(); } else { -@@ -388,11 +506,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -389,11 +507,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { } } @@ -4663,7 +4644,7 @@ index 2e623ef9be036ea467e9e41817c2eced018f8f93..59382230aec623f7de889c30a0ed6a2a if (i <= 0) { return this.locZ(); } else { -@@ -516,7 +634,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -517,7 +635,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { } public static AttributeProvider.Builder eK() { @@ -4672,7 +4653,7 @@ index 2e623ef9be036ea467e9e41817c2eced018f8f93..59382230aec623f7de889c30a0ed6a2a } public int getInvul() { -@@ -528,11 +646,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -529,11 +647,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { } public int getHeadTarget(int i) { @@ -4686,15 +4667,6 @@ index 2e623ef9be036ea467e9e41817c2eced018f8f93..59382230aec623f7de889c30a0ed6a2a } public final boolean isPowered() { return this.S_(); } // Paper - OBFHELPER -@@ -547,7 +665,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { - - @Override - protected boolean n(Entity entity) { -- return false; -+ return getRideCooldown() <= 0; // Purpur - } - - @Override diff --git a/src/main/java/net/minecraft/server/EntityWolf.java b/src/main/java/net/minecraft/server/EntityWolf.java index dcbb34313fedb21e180a0b76610a787e6419d404..9ae7168595dd66860e09ef87f946b18b010e54b1 100644 --- a/src/main/java/net/minecraft/server/EntityWolf.java @@ -4800,10 +4772,10 @@ index e76e6ebde73b93dc06e76b71cdf6371c3654160a..d92fe8013fb3b43cb7eabdf1c624291b this.eL(); } diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java -index 2ff49b5c8ba62f781cdaef2d19c0504cb710b3ff..7e1e056bdd966a14a184eb76717116998b6e5cb3 100644 +index 291748b3436c18653fa959cfd8c92240aa17508c..2076fe3e467c16bb400a75f9ea82f5b0773126be 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java -@@ -47,6 +47,16 @@ public class EntityZombie extends EntityMonster { +@@ -46,6 +46,16 @@ public class EntityZombie extends EntityMonster { } // Purpur start @@ -4820,7 +4792,7 @@ index 2ff49b5c8ba62f781cdaef2d19c0504cb710b3ff..7e1e056bdd966a14a184eb7671711699 public boolean jockeyOnlyBaby() { return world.purpurConfig.zombieJockeyOnlyBaby; } -@@ -62,9 +72,11 @@ public class EntityZombie extends EntityMonster { +@@ -61,9 +71,11 @@ public class EntityZombie extends EntityMonster { @Override protected void initPathfinder() { @@ -4854,7 +4826,7 @@ index ce6d79780197eb9300130036a8ed84648a17f9cf..02b0ae550a0ed33b5b43beedf3b14059 public boolean jockeyOnlyBaby() { return world.purpurConfig.huskJockeyOnlyBaby; diff --git a/src/main/java/net/minecraft/server/EntityZombieVillager.java b/src/main/java/net/minecraft/server/EntityZombieVillager.java -index 505c83f3e3ad61c2d4d40c4df017e1f7a9a3ad8c..0c47477b416980d2e932321730525bf5a8feda4f 100644 +index 5a71381c9f1832710001b6bfa63d6815c3cd1ab0..5b6ed77fb2b92b5bf701de436c8d7235bfe82685 100644 --- a/src/main/java/net/minecraft/server/EntityZombieVillager.java +++ b/src/main/java/net/minecraft/server/EntityZombieVillager.java @@ -29,6 +29,16 @@ public class EntityZombieVillager extends EntityZombie implements VillagerDataHo @@ -4917,10 +4889,10 @@ index dc9f2a1a132b3a7925bd62aa1da0512afd90b8b1..b7e540dfeeabb13227596ecfc6eddabf Entity entity1 = this.getShooter(); // Paper start - Cancel hit for vanished players diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1296d06bd7c4abb3a43679e382e833199b5b54a2..eea187723c1931a5db9a2d79a1abddd664d890a1 100644 +index a3ddf2839738e089a02d841f5b6fd759c3047305..85c14df768ec844b710bf2b32eb7f85c9e6b47ea 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1411,6 +1411,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant 0; // Paper worldserver.hasEntityMoveEvent = EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper @@ -4975,10 +4947,10 @@ index 0000000000000000000000000000000000000000..44929182dfd7ad847d9657c324f440cb + } +} diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 05f2cc5904f196c70e8e83625810673f6110aba0..ef222cdfdfb49dcdcb0e3bf6f6cabc765be003cc 100644 +index 48d032ed74effcfd66e1ab01548913964bca4d19..7be03bb416a5723ce65411ba5d0b967040e8033c 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -2313,6 +2313,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2307,6 +2307,8 @@ public class PlayerConnection implements PacketListenerPlayIn { } this.server.getPluginManager().callEvent(event); @@ -5728,7 +5700,7 @@ index 637cac2758a44e72794953b9fbca2accb7d86b6a..d8b5e091047210a8eff45e493f07d30f zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); 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 0000000000000000000000000000000000000000..0b16a7b6345ff42ea0f42ca79155a50e2fe4926b +index 0000000000000000000000000000000000000000..868c1ce1952193cba5ff0ce35e9d607478df7a53 --- /dev/null +++ b/src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java @@ -0,0 +1,76 @@ @@ -5776,7 +5748,7 @@ index 0000000000000000000000000000000000000000..0b16a7b6345ff42ea0f42ca79155a50e + entity.setHeadRotation(entity.yaw); + entity.pitch = normalizePitch(pitch + pitchOffset); + -+ entity.getTracker().broadcast(new PacketPlayOutEntity ++ entity.tracker.broadcast(new PacketPlayOutEntity + .PacketPlayOutRelEntityMoveLook(entity.getId(), + (short) 0, (short) 0, (short) 0, + (byte) MathHelper.d(entity.yaw * 256.0F / 360.0F), @@ -6369,10 +6341,10 @@ index 0000000000000000000000000000000000000000..9a9e46d7ee247f9e43ae5c697f10e466 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index a6d849facba1526ae2a2b7f3fb9a140d0b50289c..b56ca054b37f5887e13b481baad8132f1d28638b 100644 +index 2af3bee540ee25ea32a7548fd0d64dea16a0a268..5471422d23d261a06c67f9374cae933430ec03a0 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1160,4 +1160,26 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1174,4 +1174,26 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return getHandle().isTicking(); } // Paper end @@ -6400,10 +6372,10 @@ index a6d849facba1526ae2a2b7f3fb9a140d0b50289c..b56ca054b37f5887e13b481baad8132f + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 9ff0f70154367b99317ed3927a97ec08c7e9e015..90c0033e31ad5e115568bc092d3515b5b99e965a 100644 +index 82e36ba35c0bd4d5b3e13281bad1a0664c25c6e0..c4d0082bb0d310ad16de36df03dd99225c5cadb0 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -527,6 +527,18 @@ public class CraftEventFactory { +@@ -528,6 +528,18 @@ public class CraftEventFactory { } craftServer.getPluginManager().callEvent(event); @@ -6422,7 +6394,7 @@ index 9ff0f70154367b99317ed3927a97ec08c7e9e015..90c0033e31ad5e115568bc092d3515b5 return event; } -@@ -927,6 +939,7 @@ public class CraftEventFactory { +@@ -928,6 +940,7 @@ public class CraftEventFactory { damageCause = DamageCause.ENTITY_EXPLOSION; } event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), entity.getBukkitEntity(), damageCause, modifiers, modifierFunctions); @@ -6430,7 +6402,7 @@ index 9ff0f70154367b99317ed3927a97ec08c7e9e015..90c0033e31ad5e115568bc092d3515b5 } event.setCancelled(cancelled); -@@ -1011,6 +1024,7 @@ public class CraftEventFactory { +@@ -1012,6 +1025,7 @@ public class CraftEventFactory { if (!event.isCancelled()) { event.getEntity().setLastDamageCause(event); } @@ -6438,7 +6410,7 @@ index 9ff0f70154367b99317ed3927a97ec08c7e9e015..90c0033e31ad5e115568bc092d3515b5 return event; } -@@ -1060,6 +1074,7 @@ public class CraftEventFactory { +@@ -1061,6 +1075,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions); diff --git a/patches/Purpur/patches/server/0105-Use-configured-height-for-nether-surface-builders.patch b/patches/Purpur/patches/server/0102-Use-configured-height-for-nether-surface-builders.patch similarity index 100% rename from patches/Purpur/patches/server/0105-Use-configured-height-for-nether-surface-builders.patch rename to patches/Purpur/patches/server/0102-Use-configured-height-for-nether-surface-builders.patch diff --git a/patches/Purpur/patches/server/0106-Crying-obsidian-valid-for-portal-frames.patch b/patches/Purpur/patches/server/0103-Crying-obsidian-valid-for-portal-frames.patch similarity index 97% rename from patches/Purpur/patches/server/0106-Crying-obsidian-valid-for-portal-frames.patch rename to patches/Purpur/patches/server/0103-Crying-obsidian-valid-for-portal-frames.patch index 8d9ccefa..adca5d20 100644 --- a/patches/Purpur/patches/server/0106-Crying-obsidian-valid-for-portal-frames.patch +++ b/patches/Purpur/patches/server/0103-Crying-obsidian-valid-for-portal-frames.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Crying obsidian valid for portal frames diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java -index 1fc98698b81c079ebe4a524200232db1fe143bdf..d621b11ba9029a732a819e0558d6f8a439990dbe 100644 +index 47726a4394d1876d054c6f1c3f5408a81b623e69..d3026d8911c73e23315a545b9eb0753306c0e825 100644 --- a/src/main/java/net/minecraft/server/Block.java +++ b/src/main/java/net/minecraft/server/Block.java @@ -100,6 +100,7 @@ public class Block extends BlockBase implements IMaterial { diff --git a/patches/Purpur/patches/server/0107-Entities-can-use-portals-configuration.patch b/patches/Purpur/patches/server/0104-Entities-can-use-portals-configuration.patch similarity index 92% rename from patches/Purpur/patches/server/0107-Entities-can-use-portals-configuration.patch rename to patches/Purpur/patches/server/0104-Entities-can-use-portals-configuration.patch index 2e7b2e0e..665fccbe 100644 --- a/patches/Purpur/patches/server/0107-Entities-can-use-portals-configuration.patch +++ b/patches/Purpur/patches/server/0104-Entities-can-use-portals-configuration.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entities can use portals configuration diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 40432014000b0e6113dc06ab36b64111fa50ad50..444305d11eb1652b8618b5e2a41992974622e1a0 100644 +index 8be2b1ed66c3a72d2b752881b16b8a402cce2768..fb78ae9c89b035fdac213b7294f94d425a7f57f4 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -2414,7 +2414,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2427,7 +2427,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke public void d(BlockPosition blockposition) { if (this.ai()) { this.resetPortalCooldown(); @@ -17,7 +17,7 @@ index 40432014000b0e6113dc06ab36b64111fa50ad50..444305d11eb1652b8618b5e2a4199297 if (!this.world.isClientSide && !blockposition.equals(this.ac)) { this.ac = blockposition.immutableCopy(); } -@@ -2994,7 +2994,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -3007,7 +3007,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke } public boolean canPortal() { diff --git a/patches/Purpur/patches/server/0108-LivingEntity-broadcastItemBreak.patch b/patches/Purpur/patches/server/0105-LivingEntity-broadcastItemBreak.patch similarity index 100% rename from patches/Purpur/patches/server/0108-LivingEntity-broadcastItemBreak.patch rename to patches/Purpur/patches/server/0105-LivingEntity-broadcastItemBreak.patch diff --git a/patches/Purpur/patches/server/0109-Customizable-wither-health-and-healing.patch b/patches/Purpur/patches/server/0106-Customizable-wither-health-and-healing.patch similarity index 94% rename from patches/Purpur/patches/server/0109-Customizable-wither-health-and-healing.patch rename to patches/Purpur/patches/server/0106-Customizable-wither-health-and-healing.patch index ad8dd4d7..3e777724 100644 --- a/patches/Purpur/patches/server/0109-Customizable-wither-health-and-healing.patch +++ b/patches/Purpur/patches/server/0106-Customizable-wither-health-and-healing.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Customizable wither health and healing Adds the ability to customize the health of the wither, as well as the amount that it heals, and how often. diff --git a/src/main/java/net/minecraft/server/EntityWither.java b/src/main/java/net/minecraft/server/EntityWither.java -index 59382230aec623f7de889c30a0ed6a2a3fa35a05..121eefd5d89f88c762b19088c657a41f9850b619 100644 +index 6fc097d2ae11ec5d1c12ce070c8d69d2249cf3c7..c9037d847b12a705194a0bd70f11c5dae8f50bfa 100644 --- a/src/main/java/net/minecraft/server/EntityWither.java +++ b/src/main/java/net/minecraft/server/EntityWither.java @@ -150,6 +150,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { @@ -21,7 +21,7 @@ index 59382230aec623f7de889c30a0ed6a2a3fa35a05..121eefd5d89f88c762b19088c657a41f // Purpur end @Override -@@ -353,7 +358,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -354,7 +359,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { this.setInvul(i); if (this.ticksLived % 10 == 0) { @@ -30,7 +30,7 @@ index 59382230aec623f7de889c30a0ed6a2a3fa35a05..121eefd5d89f88c762b19088c657a41f } } else { -@@ -462,8 +467,10 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -463,8 +468,10 @@ public class EntityWither extends EntityMonster implements IRangedEntity { } } diff --git a/patches/Purpur/patches/server/0110-Allow-toggling-special-MobSpawners-per-world.patch b/patches/Purpur/patches/server/0107-Allow-toggling-special-MobSpawners-per-world.patch similarity index 100% rename from patches/Purpur/patches/server/0110-Allow-toggling-special-MobSpawners-per-world.patch rename to patches/Purpur/patches/server/0107-Allow-toggling-special-MobSpawners-per-world.patch diff --git a/patches/Purpur/patches/server/0111-Raid-cooldown-setting.patch b/patches/Purpur/patches/server/0108-Raid-cooldown-setting.patch similarity index 100% rename from patches/Purpur/patches/server/0111-Raid-cooldown-setting.patch rename to patches/Purpur/patches/server/0108-Raid-cooldown-setting.patch diff --git a/patches/Purpur/patches/server/0112-Despawn-rate-config-options-per-projectile-type.patch b/patches/Purpur/patches/server/0109-Despawn-rate-config-options-per-projectile-type.patch similarity index 95% rename from patches/Purpur/patches/server/0112-Despawn-rate-config-options-per-projectile-type.patch rename to patches/Purpur/patches/server/0109-Despawn-rate-config-options-per-projectile-type.patch index e8ba78c3..7d566b30 100644 --- a/patches/Purpur/patches/server/0112-Despawn-rate-config-options-per-projectile-type.patch +++ b/patches/Purpur/patches/server/0109-Despawn-rate-config-options-per-projectile-type.patch @@ -80,10 +80,10 @@ index edce89169b3ca2894852087b83a6bf035ba43c3f..4951abdfa13d170b7075a0223dd0096d + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityEnderPearl.java b/src/main/java/net/minecraft/server/EntityEnderPearl.java -index 63b4a449b56ef549830e4bbd3eab116e64379189..e8650c1bfa8f94ba461b7094125679112d825980 100644 +index e42dd066e76a3d2bc3270774f48bb8c8fd47cc38..44dbe818b19c927098c1e6b2bcb556378be5637c 100644 --- a/src/main/java/net/minecraft/server/EntityEnderPearl.java +++ b/src/main/java/net/minecraft/server/EntityEnderPearl.java -@@ -106,4 +106,11 @@ public class EntityEnderPearl extends EntityProjectileThrowable { +@@ -107,4 +107,11 @@ public class EntityEnderPearl extends EntityProjectileThrowable { return super.b(worldserver); } @@ -96,10 +96,10 @@ index 63b4a449b56ef549830e4bbd3eab116e64379189..e8650c1bfa8f94ba461b709412567911 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityFireworks.java b/src/main/java/net/minecraft/server/EntityFireworks.java -index dd18eabd7104995f0e6a8ecb279a3872b46773de..601f639275f4df983f19aa9cb0dc5f2611387853 100644 +index d8faa18724baa240fca78a35c362cf661615ec4d..e4c2bf2de6c032332b7557c240bb458297bdd33f 100644 --- a/src/main/java/net/minecraft/server/EntityFireworks.java +++ b/src/main/java/net/minecraft/server/EntityFireworks.java -@@ -300,4 +300,11 @@ public class EntityFireworks extends IProjectile { +@@ -301,4 +301,11 @@ public class EntityFireworks extends IProjectile { public Packet P() { return new PacketPlayOutSpawnEntity(this); } @@ -112,10 +112,10 @@ index dd18eabd7104995f0e6a8ecb279a3872b46773de..601f639275f4df983f19aa9cb0dc5f26 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityFishingHook.java b/src/main/java/net/minecraft/server/EntityFishingHook.java -index 0816ab54bc99bcf29356b56516e83759a3f2988f..2bad182d9d6248c1e8ac9138e46d192dccc2a973 100644 +index 9841c7c27cd296a5156ba79ab734d45922bacaf7..f0502c7f5419f637641b48d8c87f5df206e4f922 100644 --- a/src/main/java/net/minecraft/server/EntityFishingHook.java +++ b/src/main/java/net/minecraft/server/EntityFishingHook.java -@@ -578,4 +578,11 @@ public class EntityFishingHook extends IProjectile { +@@ -579,4 +579,11 @@ public class EntityFishingHook extends IProjectile { private HookState() {} } @@ -160,10 +160,10 @@ index 480a02a8f6ec7110f9af8f2037fdc09a7a54ef01..aa9afb60808a9988b38cf588ec9f649e + // Purpur end } diff --git a/src/main/java/net/minecraft/server/EntityPotion.java b/src/main/java/net/minecraft/server/EntityPotion.java -index ddf1f80f3ba45e09cd13ca646a8ec6e8d47be555..bd84a3ac6146cfe6952a9334820696b4583b45b5 100644 +index b338cb771aa8ba7a810b8129ca04640d115b68ba..dfc0538cc8cb8015fe79978ee360c86127118330 100644 --- a/src/main/java/net/minecraft/server/EntityPotion.java +++ b/src/main/java/net/minecraft/server/EntityPotion.java -@@ -240,4 +240,11 @@ public class EntityPotion extends EntityProjectileThrowable { +@@ -241,4 +241,11 @@ public class EntityPotion extends EntityProjectileThrowable { } } diff --git a/patches/Purpur/patches/server/0114-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/Purpur/patches/server/0110-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 97% rename from patches/Purpur/patches/server/0114-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/Purpur/patches/server/0110-Add-option-to-disable-zombie-aggressiveness-towards-.patch index ebfb530d..d44ee205 100644 --- a/patches/Purpur/patches/server/0114-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/Purpur/patches/server/0110-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -45,10 +45,10 @@ index 125eab60f2b4657e52a71eddf7586c574945252e..638efc67d66001ee085957d4698f51a7 this.targetSelector.a(5, new PathfinderGoalNearestAttackableTarget<>(this, EntityTurtle.class, 10, true, false, EntityTurtle.bo)); } diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java -index 7e1e056bdd966a14a184eb76717116998b6e5cb3..fd28ef623f8b6db5e36328d4ef2771e841db0a9d 100644 +index 2076fe3e467c16bb400a75f9ea82f5b0773126be..e4de6e2f8b72c0ede3ad34666a5dfde5c5363b56 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java -@@ -86,7 +86,18 @@ public class EntityZombie extends EntityMonster { +@@ -85,7 +85,18 @@ public class EntityZombie extends EntityMonster { this.goalSelector.a(7, new PathfinderGoalRandomStrollLand(this, 1.0D)); this.targetSelector.a(1, (new PathfinderGoalHurtByTarget(this, new Class[0])).a(EntityPigZombie.class)); this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); diff --git a/patches/Purpur/patches/server/0115-Persistent-TileEntity-Lore-and-DisplayName.patch b/patches/Purpur/patches/server/0111-Persistent-TileEntity-Lore-and-DisplayName.patch similarity index 95% rename from patches/Purpur/patches/server/0115-Persistent-TileEntity-Lore-and-DisplayName.patch rename to patches/Purpur/patches/server/0111-Persistent-TileEntity-Lore-and-DisplayName.patch index 369b6b06..6fdf68dc 100644 --- a/patches/Purpur/patches/server/0115-Persistent-TileEntity-Lore-and-DisplayName.patch +++ b/patches/Purpur/patches/server/0111-Persistent-TileEntity-Lore-and-DisplayName.patch @@ -7,7 +7,7 @@ Makes it so that when a TileEntity is placed in the world and then broken, the dropped ItemStack retains any original custom display name/lore. diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java -index d621b11ba9029a732a819e0558d6f8a439990dbe..c276a2896ba73d86e7e18d656903b36d2970ac41 100644 +index d3026d8911c73e23315a545b9eb0753306c0e825..2c8d7024879392f37e53dfb72cc07971c7b4f27c 100644 --- a/src/main/java/net/minecraft/server/Block.java +++ b/src/main/java/net/minecraft/server/Block.java @@ -207,7 +207,7 @@ public class Block extends BlockBase implements IMaterial { @@ -79,10 +79,10 @@ index d621b11ba9029a732a819e0558d6f8a439990dbe..c276a2896ba73d86e7e18d656903b36d 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/ItemBlock.java b/src/main/java/net/minecraft/server/ItemBlock.java -index 9d62bc6d600526881dccb44d158e30f565078cec..b8c71925a6e4c58fcefba0ab38270aaa236aabba 100644 +index ae2ad70699347e169d941266ec3ad1af4c9b3786..e4aea92040b58a5c87258ac6fd735f21709a45a3 100644 --- a/src/main/java/net/minecraft/server/ItemBlock.java +++ b/src/main/java/net/minecraft/server/ItemBlock.java -@@ -96,7 +96,24 @@ public class ItemBlock extends Item { +@@ -97,7 +97,24 @@ public class ItemBlock extends Item { } protected boolean a(BlockPosition blockposition, World world, @Nullable EntityHuman entityhuman, ItemStack itemstack, IBlockData iblockdata) { @@ -109,10 +109,10 @@ index 9d62bc6d600526881dccb44d158e30f565078cec..b8c71925a6e4c58fcefba0ab38270aaa @Nullable diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java -index 58d958a88ac5af5b889d719d9f1ea90ce45cf184..8e8749095427b44e04582593114cae8cf6d00f42 100644 +index 060c1206e4b5da6be50fff605894fb2a46f57c1b..c0d465749093b1a18bd5179eb28ae06a00850185 100644 --- a/src/main/java/net/minecraft/server/TileEntity.java +++ b/src/main/java/net/minecraft/server/TileEntity.java -@@ -90,9 +90,25 @@ public abstract class TileEntity implements KeyedObject { // Paper +@@ -93,9 +93,25 @@ public abstract class TileEntity implements KeyedObject { // Paper this.persistentDataContainer.putAll((NBTTagCompound) persistentDataTag); } // CraftBukkit end @@ -138,7 +138,7 @@ index 58d958a88ac5af5b889d719d9f1ea90ce45cf184..8e8749095427b44e04582593114cae8c return this.b(nbttagcompound); } -@@ -253,4 +269,25 @@ public abstract class TileEntity implements KeyedObject { // Paper +@@ -256,4 +272,25 @@ public abstract class TileEntity implements KeyedObject { // Paper return null; } // CraftBukkit end diff --git a/patches/Purpur/patches/server/0116-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/Purpur/patches/server/0112-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/Purpur/patches/server/0116-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/Purpur/patches/server/0112-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/Purpur/patches/server/0117-Flying-squids-Oh-my.patch b/patches/Purpur/patches/server/0113-Flying-squids-Oh-my.patch similarity index 100% rename from patches/Purpur/patches/server/0117-Flying-squids-Oh-my.patch rename to patches/Purpur/patches/server/0113-Flying-squids-Oh-my.patch diff --git a/patches/Purpur/patches/server/0113-PaperPR-Add-hex-color-code-support-for-console-loggi.patch b/patches/Purpur/patches/server/0113-PaperPR-Add-hex-color-code-support-for-console-loggi.patch deleted file mode 100644 index b0118f91..00000000 --- a/patches/Purpur/patches/server/0113-PaperPR-Add-hex-color-code-support-for-console-loggi.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Esophose -Date: Thu, 27 Aug 2020 12:25:18 -0500 -Subject: [PATCH] PaperPR - Add hex color code support for console logging - - -diff --git a/src/main/java/com/destroystokyo/paper/console/TerminalConsoleCommandSender.java b/src/main/java/com/destroystokyo/paper/console/TerminalConsoleCommandSender.java -index 685deaa0e5d1ddc13e3a7c0471b1cfcf1710c869..2a0ada490b15b0c4939dd4304f86e01634fb1cfa 100644 ---- a/src/main/java/com/destroystokyo/paper/console/TerminalConsoleCommandSender.java -+++ b/src/main/java/com/destroystokyo/paper/console/TerminalConsoleCommandSender.java -@@ -1,17 +1,52 @@ - package com.destroystokyo.paper.console; - -+import java.awt.Color; -+import java.util.regex.Matcher; -+import java.util.regex.Pattern; -+import net.minecrell.terminalconsole.MinecraftFormattingConverter; -+import net.minecrell.terminalconsole.TerminalConsoleAppender; - import org.apache.logging.log4j.LogManager; - import org.apache.logging.log4j.Logger; -+import org.apache.logging.log4j.util.PropertiesUtil; -+import org.bukkit.ChatColor; - import org.bukkit.craftbukkit.command.CraftConsoleCommandSender; - - public class TerminalConsoleCommandSender extends CraftConsoleCommandSender { - - private static final Logger LOGGER = LogManager.getRootLogger(); -+ private static final char ANSI_ESC_CHAR = '\u001B'; -+ private static final String RGB_STRING = ANSI_ESC_CHAR + "[38;2;%d;%d;%dm"; -+ private static final String ANSI_RESET = ANSI_ESC_CHAR + "[m"; -+ private static final Pattern HEX_PATTERN = Pattern.compile("(?i)(" + ChatColor.COLOR_CHAR + "x(" + ChatColor.COLOR_CHAR + "[0-9a-f]){6})"); -+ private static final boolean keepFormatting = PropertiesUtil.getProperties().getBooleanProperty(MinecraftFormattingConverter.KEEP_FORMATTING_PROPERTY); - - @Override - public void sendRawMessage(String message) { - // TerminalConsoleAppender supports color codes directly in log messages -- LOGGER.info(message); -+ // However, we need to convert hex colors manually, as those do not get transformed -+ LOGGER.info(hexMagicToAnsi(message)); - } - -+ private static String hexMagicToAnsi(String input) { -+ // If formatting should be kept, just leave the input as-is -+ if (keepFormatting || !net.pl3x.purpur.PurpurConfig.useHexColorsInConsole) // Purpur -+ return input; -+ -+ // If Ansi is not supported, just strip out any hex coloring -+ if (!TerminalConsoleAppender.isAnsiSupported()) -+ return HEX_PATTERN.matcher(input).replaceAll(""); -+ -+ Matcher matcher = HEX_PATTERN.matcher(input); -+ StringBuffer buffer = new StringBuffer(); -+ while (matcher.find()) { -+ String hex = matcher.group().replace(String.valueOf(ChatColor.COLOR_CHAR), "").replace('x', '#'); -+ Color color = Color.decode(hex); -+ String replacement = String.format(RGB_STRING, color.getRed(), color.getGreen(), color.getBlue()); -+ matcher.appendReplacement(buffer, replacement); -+ } -+ matcher.appendTail(buffer); -+ -+ // We add the Ansi reset to the end of each message to prevent the color from carrying over to the next logged message -+ return buffer.toString() + ANSI_RESET; -+ } - } -diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index a5febd7671ae1818edb18955d5e8176303c92c93..966834c737c4f388f76fcc515f266f684de593b5 100644 ---- a/src/main/java/net/pl3x/purpur/PurpurConfig.java -+++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java -@@ -220,9 +220,11 @@ public class PurpurConfig { - - public static boolean loggerSuppressInitLegacyMaterialError = false; - public static boolean loggerSuppressIgnoredAdvancementWarnings = false; -+ public static boolean useHexColorsInConsole = true; - private static void loggerSettings() { - loggerSuppressInitLegacyMaterialError = getBoolean("settings.logger.suppress-init-legacy-material-errors", loggerSuppressInitLegacyMaterialError); - loggerSuppressIgnoredAdvancementWarnings = getBoolean("settings.logger.suppress-ignored-advancement-warnings", loggerSuppressIgnoredAdvancementWarnings); -+ useHexColorsInConsole = getBoolean("settings.logger.hex-color-support-in-console", useHexColorsInConsole); - } - - public static boolean tpsCatchup = true; diff --git a/patches/Purpur/patches/server/0118-Infinity-bow-settings.patch b/patches/Purpur/patches/server/0114-Infinity-bow-settings.patch similarity index 100% rename from patches/Purpur/patches/server/0118-Infinity-bow-settings.patch rename to patches/Purpur/patches/server/0114-Infinity-bow-settings.patch diff --git a/patches/Purpur/patches/server/0119-Stonecutter-damage.patch b/patches/Purpur/patches/server/0115-Stonecutter-damage.patch similarity index 100% rename from patches/Purpur/patches/server/0119-Stonecutter-damage.patch rename to patches/Purpur/patches/server/0115-Stonecutter-damage.patch diff --git a/patches/Purpur/patches/server/0120-Configurable-daylight-cycle.patch b/patches/Purpur/patches/server/0116-Configurable-daylight-cycle.patch similarity index 100% rename from patches/Purpur/patches/server/0120-Configurable-daylight-cycle.patch rename to patches/Purpur/patches/server/0116-Configurable-daylight-cycle.patch diff --git a/patches/Purpur/patches/server/0121-Allow-infinite-and-mending-enchantments-together.patch b/patches/Purpur/patches/server/0117-Allow-infinite-and-mending-enchantments-together.patch similarity index 95% rename from patches/Purpur/patches/server/0121-Allow-infinite-and-mending-enchantments-together.patch rename to patches/Purpur/patches/server/0117-Allow-infinite-and-mending-enchantments-together.patch index fbbe9361..30dc5086 100644 --- a/patches/Purpur/patches/server/0121-Allow-infinite-and-mending-enchantments-together.patch +++ b/patches/Purpur/patches/server/0117-Allow-infinite-and-mending-enchantments-together.patch @@ -17,7 +17,7 @@ index 408cfa460920f74e0394ab27101ecb12cceb9c43..3d4e34f7070a48c436284ba7744a94ae } } diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 966834c737c4f388f76fcc515f266f684de593b5..47d323038914fd601e17499802bf3dae5f842d31 100644 +index a5febd7671ae1818edb18955d5e8176303c92c93..a20d7ac486a915fae2c6c7d42aa07d44f42438db 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -197,6 +197,16 @@ public class PurpurConfig { diff --git a/patches/Purpur/patches/server/0122-Infinite-fuel-furnace.patch b/patches/Purpur/patches/server/0118-Infinite-fuel-furnace.patch similarity index 92% rename from patches/Purpur/patches/server/0122-Infinite-fuel-furnace.patch rename to patches/Purpur/patches/server/0118-Infinite-fuel-furnace.patch index 26047db6..b18d6d13 100644 --- a/patches/Purpur/patches/server/0122-Infinite-fuel-furnace.patch +++ b/patches/Purpur/patches/server/0118-Infinite-fuel-furnace.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Infinite fuel furnace diff --git a/src/main/java/net/minecraft/server/TileEntityFurnace.java b/src/main/java/net/minecraft/server/TileEntityFurnace.java -index e75e676d196d9f5a3409ec50645fab611b0afdad..76ea1d003b43d822e2b85eec3b8740155efd531a 100644 +index 935c7f111a7d7b9cc7c8e384d43e7ab6092cfc5f..48359a7e79b64026e38e7cd17505d8944106e089 100644 --- a/src/main/java/net/minecraft/server/TileEntityFurnace.java +++ b/src/main/java/net/minecraft/server/TileEntityFurnace.java -@@ -278,6 +278,22 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I +@@ -279,6 +279,22 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I if (!this.world.isClientSide) { ItemStack itemstack = (ItemStack) this.items.get(1); @@ -31,7 +31,7 @@ index e75e676d196d9f5a3409ec50645fab611b0afdad..76ea1d003b43d822e2b85eec3b874015 if (!this.isBurning() && (itemstack.isEmpty() || ((ItemStack) this.items.get(0)).isEmpty())) { if (!this.isBurning() && this.cookTime > 0) { this.cookTime = MathHelper.clamp(this.cookTime - 2, 0, this.cookTimeTotal); -@@ -331,6 +347,8 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I +@@ -332,6 +348,8 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I flag1 = true; this.world.setTypeAndData(this.position, (IBlockData) this.world.getType(this.position).set(BlockFurnace.LIT, this.isBurning()), 3); } diff --git a/patches/Purpur/patches/server/0123-Arrows-should-not-reset-despawn-counter.patch b/patches/Purpur/patches/server/0119-Arrows-should-not-reset-despawn-counter.patch similarity index 100% rename from patches/Purpur/patches/server/0123-Arrows-should-not-reset-despawn-counter.patch rename to patches/Purpur/patches/server/0119-Arrows-should-not-reset-despawn-counter.patch diff --git a/patches/Purpur/patches/server/0124-Add-tablist-suffix-option-for-afk.patch b/patches/Purpur/patches/server/0120-Add-tablist-suffix-option-for-afk.patch similarity index 90% rename from patches/Purpur/patches/server/0124-Add-tablist-suffix-option-for-afk.patch rename to patches/Purpur/patches/server/0120-Add-tablist-suffix-option-for-afk.patch index 3080289d..9b8e2c3d 100644 --- a/patches/Purpur/patches/server/0124-Add-tablist-suffix-option-for-afk.patch +++ b/patches/Purpur/patches/server/0120-Add-tablist-suffix-option-for-afk.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add tablist suffix option for afk diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index cdc0145f569f58b8f8b9da0e9ce5e1b5b4489fe7..871119dc506ff3bcd96f57fb5f5923227e0c7f1f 100644 +index 71f37abf27edb79b81dfb7651674fc84698e3f23..ee91832c0e2cad32c5bfe1baad2aeab9228535c0 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -1995,7 +1995,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1980,7 +1980,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } if (world.purpurConfig.idleTimeoutUpdateTabList) { @@ -22,7 +22,7 @@ index cdc0145f569f58b8f8b9da0e9ce5e1b5b4489fe7..871119dc506ff3bcd96f57fb5f592322 ((WorldServer) world).everyoneSleeping(); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 47d323038914fd601e17499802bf3dae5f842d31..74c76b7f3e0992a90acec338a96077bf4f7afd2a 100644 +index a20d7ac486a915fae2c6c7d42aa07d44f42438db..767715963a79b06c8a0988b65bc589dc9c351138 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -135,12 +135,14 @@ public class PurpurConfig { diff --git a/patches/Purpur/patches/server/0125-Ability-to-re-add-farmland-mechanics-from-Alpha.patch b/patches/Purpur/patches/server/0121-Ability-to-re-add-farmland-mechanics-from-Alpha.patch similarity index 100% rename from patches/Purpur/patches/server/0125-Ability-to-re-add-farmland-mechanics-from-Alpha.patch rename to patches/Purpur/patches/server/0121-Ability-to-re-add-farmland-mechanics-from-Alpha.patch diff --git a/patches/Purpur/patches/server/0126-Add-adjustable-breeding-cooldown-to-config.patch b/patches/Purpur/patches/server/0122-Add-adjustable-breeding-cooldown-to-config.patch similarity index 97% rename from patches/Purpur/patches/server/0126-Add-adjustable-breeding-cooldown-to-config.patch rename to patches/Purpur/patches/server/0122-Add-adjustable-breeding-cooldown-to-config.patch index 021d73b8..e4e982df 100644 --- a/patches/Purpur/patches/server/0126-Add-adjustable-breeding-cooldown-to-config.patch +++ b/patches/Purpur/patches/server/0122-Add-adjustable-breeding-cooldown-to-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add adjustable breeding cooldown to config diff --git a/src/main/java/net/minecraft/server/EntityAnimal.java b/src/main/java/net/minecraft/server/EntityAnimal.java -index bba343542e7e6fa83ec802d97b4c139bb210ab28..d9f9e2235d091e14e5d34bb9a3273e7f56e94295 100644 +index b290218e506d5e4ddd1af17f91de19a588bbcfbd..cf9be4be18e913e49e9150358c66138b64319ed8 100644 --- a/src/main/java/net/minecraft/server/EntityAnimal.java +++ b/src/main/java/net/minecraft/server/EntityAnimal.java -@@ -120,7 +120,7 @@ public abstract class EntityAnimal extends EntityAgeable { +@@ -121,7 +121,7 @@ public abstract class EntityAnimal extends EntityAgeable { if (this.k(itemstack)) { int i = this.getAge(); @@ -17,7 +17,7 @@ index bba343542e7e6fa83ec802d97b4c139bb210ab28..d9f9e2235d091e14e5d34bb9a3273e7f this.a(entityhuman, itemstack); this.g(entityhuman); return EnumInteractionResult.SUCCESS; -@@ -212,6 +212,14 @@ public abstract class EntityAnimal extends EntityAgeable { +@@ -213,6 +213,14 @@ public abstract class EntityAnimal extends EntityAgeable { if (entityplayer == null && entityanimal.getBreedCause() != null) { entityplayer = entityanimal.getBreedCause(); } diff --git a/patches/Purpur/patches/server/0127-Make-animal-breeding-times-configurable.patch b/patches/Purpur/patches/server/0123-Make-entity-breeding-times-configurable.patch similarity index 88% rename from patches/Purpur/patches/server/0127-Make-animal-breeding-times-configurable.patch rename to patches/Purpur/patches/server/0123-Make-entity-breeding-times-configurable.patch index ada8316f..cc35052d 100644 --- a/patches/Purpur/patches/server/0127-Make-animal-breeding-times-configurable.patch +++ b/patches/Purpur/patches/server/0123-Make-entity-breeding-times-configurable.patch @@ -1,14 +1,31 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: jmp Date: Sun, 15 Nov 2020 02:18:15 -0800 -Subject: [PATCH] Make animal breeding times configurable +Subject: [PATCH] Make entity breeding times configurable +diff --git a/src/main/java/net/minecraft/server/BehaviorMakeLove.java b/src/main/java/net/minecraft/server/BehaviorMakeLove.java +index 7bdcc7bb26a1f7c8fc2562016af8598b9a7b4de3..d22b1742e2bf9c390590851de45b2e66f1444b47 100644 +--- a/src/main/java/net/minecraft/server/BehaviorMakeLove.java ++++ b/src/main/java/net/minecraft/server/BehaviorMakeLove.java +@@ -102,8 +102,10 @@ public class BehaviorMakeLove extends Behavior { + if (entityvillager2 == null) { + return Optional.empty(); + } else { +- entityvillager.setAgeRaw(6000); +- entityvillager1.setAgeRaw(6000); ++ // Purpur start ++ entityvillager.setAgeRaw(worldserver.purpurConfig.villagerBreedingTicks); ++ entityvillager1.setAgeRaw(worldserver.purpurConfig.villagerBreedingTicks); ++ // Purpur end + entityvillager2.setAgeRaw(-24000); + entityvillager2.setPositionRotation(entityvillager.locX(), entityvillager.locY(), entityvillager.locZ(), 0.0F, 0.0F); + worldserver.addAllEntities(entityvillager2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason diff --git a/src/main/java/net/minecraft/server/EntityAnimal.java b/src/main/java/net/minecraft/server/EntityAnimal.java -index d9f9e2235d091e14e5d34bb9a3273e7f56e94295..dd6725debe0cf72dce13b6f2cac0556060e0eb41 100644 +index cf9be4be18e913e49e9150358c66138b64319ed8..c1d2b12418464203c1da8af8da61a9cc9305bb65 100644 --- a/src/main/java/net/minecraft/server/EntityAnimal.java +++ b/src/main/java/net/minecraft/server/EntityAnimal.java -@@ -13,6 +13,7 @@ public abstract class EntityAnimal extends EntityAgeable { +@@ -14,6 +14,7 @@ public abstract class EntityAnimal extends EntityAgeable { public int loveTicks; public UUID breedCause; public ItemStack breedItem; // CraftBukkit - Add breedItem variable @@ -16,7 +33,7 @@ index d9f9e2235d091e14e5d34bb9a3273e7f56e94295..dd6725debe0cf72dce13b6f2cac05560 protected EntityAnimal(EntityTypes entitytypes, World world) { super(entitytypes, world); -@@ -234,8 +235,10 @@ public abstract class EntityAnimal extends EntityAgeable { +@@ -235,8 +236,10 @@ public abstract class EntityAnimal extends EntityAgeable { CriterionTriggers.o.a(entityplayer, this, entityanimal, entityageable); } @@ -94,7 +111,7 @@ index 1219b0aa9c62bc9a1bda45cc9e9a27f14a28fe2e..63497ca0266073dc0a16b7dc22641d08 @Override diff --git a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java -index f5defe4713c6be7d32fb2116110516717460284e..e87f5aeb97fc35ff2b3464f31a2ec18432774cd4 100644 +index f5defe4713c6be7d32fb2116110516717460284e..b5f036af81ddd3c1b0e388a28383f0b6a63d128c 100644 --- a/src/main/java/net/minecraft/server/EntityFox.java +++ b/src/main/java/net/minecraft/server/EntityFox.java @@ -86,6 +86,11 @@ public class EntityFox extends EntityAnimal { @@ -109,6 +126,19 @@ index f5defe4713c6be7d32fb2116110516717460284e..e87f5aeb97fc35ff2b3464f31a2ec184 // Purpur end @Override +@@ -1300,8 +1305,10 @@ public class EntityFox extends EntityAnimal { + CriterionTriggers.o.a(entityplayer2, this.animal, this.partner, (EntityAgeable) entityfox); + } + +- this.animal.setAgeRaw(6000); +- this.partner.setAgeRaw(6000); ++ // Purpur start ++ this.animal.setAgeRaw(this.animal.getPurpurBreedTime()); ++ this.partner.setAgeRaw(this.partner.getPurpurBreedTime()); ++ // Purpur end + this.animal.resetLove(); + this.partner.resetLove(); + entityfox.setAgeRaw(-24000); diff --git a/src/main/java/net/minecraft/server/EntityHoglin.java b/src/main/java/net/minecraft/server/EntityHoglin.java index 548ff4449faca0abdf72487276fe49207bacfe17..a1578aade4a535144b5e40277c902f2e9ab9e940 100644 --- a/src/main/java/net/minecraft/server/EntityHoglin.java @@ -222,10 +252,10 @@ index 1099277868f92fdaf4b0ec3a982f26f20ead7369..3bc6e6df9e0107debe5b15f5f7aad97a public void setStrength(int i) { diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java -index 7966b34f8d202d2260a35baa4cd594e4def89257..eb1f95d8bae4bc2580849614ba879dd1a8792ecb 100644 +index e38d165fefb4d552ded2198536a6663a5688070d..46d031ef3cebfe30e07840ef1c9d60a97a24cd1b 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java -@@ -30,6 +30,11 @@ public class EntityMushroomCow extends EntityCow implements IShearable { +@@ -31,6 +31,11 @@ public class EntityMushroomCow extends EntityCow implements IShearable { public boolean isRidableInWater() { return world.purpurConfig.mooshroomRidableInWater; } @@ -286,7 +316,7 @@ index e402d4a77b57b8b12b7575a9793c30d7acfa7fb0..398e92bf7053c411bd98626efe4261e1 @Nullable diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java -index dade0bb29422ebd68fae0edb74cbbf6d3ab89d64..7172e8cabf5b715ae9a1087b0d11e6cee81ea6e4 100644 +index bf7ecd7a7d805cc8f1314a348d7b13f848da46b5..eae841eeac75a35a9dc5a53c57538ac5264ece68 100644 --- a/src/main/java/net/minecraft/server/EntityPig.java +++ b/src/main/java/net/minecraft/server/EntityPig.java @@ -29,6 +29,11 @@ public class EntityPig extends EntityAnimal implements ISteerable, ISaddleable { @@ -398,7 +428,7 @@ index 9ae7168595dd66860e09ef87f946b18b010e54b1..6c25f667eecdf345289a0dbf885c9d71 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 84b2b8618162f81369dac9e8341374447d9b1737..2b68f25b6a589de13c534e10f9f24a45f7274963 100644 +index 84b2b8618162f81369dac9e8341374447d9b1737..abc9b4fc27fdef37e3444cc3d885acab9f4d3f23 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -434,10 +434,12 @@ public class PurpurWorldConfig { @@ -625,7 +655,23 @@ index 84b2b8618162f81369dac9e8341374447d9b1737..2b68f25b6a589de13c534e10f9f24a45 } public boolean vexRidable = false; -@@ -1040,9 +1078,11 @@ public class PurpurWorldConfig { +@@ -969,6 +1007,7 @@ public class PurpurWorldConfig { + public int villagerSpawnIronGolemRadius = 0; + public int villagerSpawnIronGolemLimit = 0; + public boolean villagerCanBreed = true; ++ public int villagerBreedingTicks = 6000; + private void villagerSettings() { + villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); + villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); +@@ -980,6 +1019,7 @@ public class PurpurWorldConfig { + villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius); + villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit); + villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); ++ villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); + } + + public boolean villagerTraderRidable = false; +@@ -1040,9 +1080,11 @@ public class PurpurWorldConfig { public boolean wolfRidable = false; public boolean wolfRidableInWater = false; diff --git a/patches/Purpur/patches/server/0128-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/Purpur/patches/server/0124-Apply-display-names-from-item-forms-of-entities-to-e.patch similarity index 98% rename from patches/Purpur/patches/server/0128-Apply-display-names-from-item-forms-of-entities-to-e.patch rename to patches/Purpur/patches/server/0124-Apply-display-names-from-item-forms-of-entities-to-e.patch index f2c3325e..e23a64a7 100644 --- a/patches/Purpur/patches/server/0128-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/patches/Purpur/patches/server/0124-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -25,7 +25,7 @@ index 9e37bf25689691f9640b294c482978e8e3b6e627..759a8f95038778aead2f33a65a2d8f2d } diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java -index 603910a6f9ecc34be9eb2d4fb28e5c2e20aca90a..72d2eea40c37b5fa627c8deeda1802734e94f866 100644 +index 05c702bbdb8addea5c69faa0479609e8959945f1..fcb4936e78d56907b0e56d0aaf7f8361513d0a4e 100644 --- a/src/main/java/net/minecraft/server/EntityBoat.java +++ b/src/main/java/net/minecraft/server/EntityBoat.java @@ -155,7 +155,13 @@ public class EntityBoat extends Entity { @@ -154,7 +154,7 @@ index a4edfb02fd350433020b0f3699726b6127ab9933..3f9062d8eca3ce53c0fb9e9e40330aa4 NBTTagCompound nbttagcompound = this.a("display"); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2b68f25b6a589de13c534e10f9f24a45f7274963..a3f4e6ccf8d8099ddde37ca774ca14e270005c51 100644 +index abc9b4fc27fdef37e3444cc3d885acab9f4d3f23..7915a0204597a3711c1f177cf504a1c3c603e91e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -83,8 +83,10 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0129-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/Purpur/patches/server/0125-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch similarity index 63% rename from patches/Purpur/patches/server/0129-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch rename to patches/Purpur/patches/server/0125-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch index 3dceabb3..049eb236 100644 --- a/patches/Purpur/patches/server/0129-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch +++ b/patches/Purpur/patches/server/0125-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch @@ -5,23 +5,23 @@ Subject: [PATCH] Set name visible when using a Name Tag on an Armor Stand diff --git a/src/main/java/net/minecraft/server/ItemNameTag.java b/src/main/java/net/minecraft/server/ItemNameTag.java -index 01163ce38602f9345f00ee0535b4e73be7c6d735..a7efce97318fcf95d98f33ad4ac2da69a1ba0df0 100644 +index a34772e329df62d9176b0aa392197e2771c69da4..b6f2270aae3422f5ee5bae0f955f5807f5cadf59 100644 --- a/src/main/java/net/minecraft/server/ItemNameTag.java +++ b/src/main/java/net/minecraft/server/ItemNameTag.java -@@ -11,6 +11,11 @@ public class ItemNameTag extends Item { - if (itemstack.hasName() && !(entityliving instanceof EntityHuman)) { - if (!entityhuman.world.isClientSide && entityliving.isAlive()) { - entityliving.setCustomName(itemstack.getName()); +@@ -20,6 +20,11 @@ public class ItemNameTag extends Item { + if (!event.callEvent()) return EnumInteractionResult.PASS; + EntityLiving newEntityLiving = ((org.bukkit.craftbukkit.entity.CraftLivingEntity) event.getEntity()).getHandle(); + newEntityLiving.setCustomName(event.getName() != null ? PaperAdventure.asVanilla(event.getName()) : null); + // Purpur start -+ if (entityhuman.world.purpurConfig.armorstandFixNametags && entityliving instanceof EntityArmorStand) { -+ entityliving.setCustomNameVisible(true); ++ if (entityhuman.world.purpurConfig.armorstandFixNametags && newEntityLiving instanceof EntityArmorStand) { ++ newEntityLiving.setCustomNameVisible(true); + } + // Purpur end - if (entityliving instanceof EntityInsentient) { - ((EntityInsentient) entityliving).setPersistent(); + if (event.isPersistent() && newEntityLiving instanceof EntityInsentient) { + ((EntityInsentient) newEntityLiving).setPersistent(); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a3f4e6ccf8d8099ddde37ca774ca14e270005c51..bb39abc44c7151a57b9af66cb77f2ed8e043a4f0 100644 +index 7915a0204597a3711c1f177cf504a1c3c603e91e..9a419e2e591113015bd122202aba2a8aa8494f63 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -84,9 +84,11 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0130-Add-twisting-and-weeping-vines-growth-rates.patch b/patches/Purpur/patches/server/0126-Add-twisting-and-weeping-vines-growth-rates.patch similarity index 97% rename from patches/Purpur/patches/server/0130-Add-twisting-and-weeping-vines-growth-rates.patch rename to patches/Purpur/patches/server/0126-Add-twisting-and-weeping-vines-growth-rates.patch index 0481d42f..e2de87ec 100644 --- a/patches/Purpur/patches/server/0130-Add-twisting-and-weeping-vines-growth-rates.patch +++ b/patches/Purpur/patches/server/0126-Add-twisting-and-weeping-vines-growth-rates.patch @@ -67,7 +67,7 @@ index 23dca1940375d243531fc4a891f04e937ae2f48f..94ffadb91fec65a721cf0c8fa98bad70 + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index bb39abc44c7151a57b9af66cb77f2ed8e043a4f0..ceaf3e4716262eaa3b29c63ca041bafa8b30efbc 100644 +index 9a419e2e591113015bd122202aba2a8aa8494f63..8f59e8412c2d82211274abdc9fc9bb94f117960d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -419,6 +419,16 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0131-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch b/patches/Purpur/patches/server/0127-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch similarity index 98% rename from patches/Purpur/patches/server/0131-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch rename to patches/Purpur/patches/server/0127-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch index eeb2c63b..2391f3b1 100644 --- a/patches/Purpur/patches/server/0131-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch +++ b/patches/Purpur/patches/server/0127-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch @@ -89,7 +89,7 @@ index 94ffadb91fec65a721cf0c8fa98bad708a2ca269..067df63ab27ecb9fe0a0d012b16efbd5 // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index ceaf3e4716262eaa3b29c63ca041bafa8b30efbc..732773250e70cfcb7fda55758d73305e2b97cd97 100644 +index 8f59e8412c2d82211274abdc9fc9bb94f117960d..84172893cb5dd9aa61296d9bfb4cf0ea1ff91e9d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -366,6 +366,11 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0132-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/Purpur/patches/server/0128-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch similarity index 95% rename from patches/Purpur/patches/server/0132-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch rename to patches/Purpur/patches/server/0128-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch index bb011122..a934c9f1 100644 --- a/patches/Purpur/patches/server/0132-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch +++ b/patches/Purpur/patches/server/0128-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch @@ -21,7 +21,7 @@ index 995849212c25568d3aa28ada78babf8b8e669960..acb2b3ed04ea0bf19335415310ce22cd static class PathfinderGoalEndermanPickupBlock extends PathfinderGoal { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 732773250e70cfcb7fda55758d73305e2b97cd97..89bea8f3889d2d2f1469ad1dc5af5cda70153a17 100644 +index 84172893cb5dd9aa61296d9bfb4cf0ea1ff91e9d..6c7e898dd42e958553d929b94ce5ddb9542001ee 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -588,10 +588,12 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0133-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch b/patches/Purpur/patches/server/0129-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch similarity index 84% rename from patches/Purpur/patches/server/0133-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch rename to patches/Purpur/patches/server/0129-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch index e774a7bf..f86b279b 100644 --- a/patches/Purpur/patches/server/0133-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch +++ b/patches/Purpur/patches/server/0129-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add critical hit check to EntityDamagedByEntityEvent diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index e6e180ea46529e80eeab95f550dee5f3f8198ba8..b6bfd8f5073ce481dfe2b1667ece42d32eaeb227 100644 +index 9266a37f66337a6051c8472934e2e396e1131736..4e55f64f8da344bdd5fe142f87cc6ea129bdeabe 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java -@@ -71,6 +71,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -73,6 +73,7 @@ public abstract class EntityHuman extends EntityLiving { // Paper start public boolean affectsSpawning = true; // Paper end @@ -16,7 +16,7 @@ index e6e180ea46529e80eeab95f550dee5f3f8198ba8..b6bfd8f5073ce481dfe2b1667ece42d3 // CraftBukkit start public boolean fauxSleeping; -@@ -1058,6 +1059,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1060,6 +1061,7 @@ public abstract class EntityHuman extends EntityLiving { flag2 = flag2 && !world.paperConfig.disablePlayerCrits; // Paper flag2 = flag2 && !this.isSprinting(); if (flag2) { @@ -24,7 +24,7 @@ index e6e180ea46529e80eeab95f550dee5f3f8198ba8..b6bfd8f5073ce481dfe2b1667ece42d3 f *= 1.5F; } -@@ -1094,6 +1096,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1096,6 +1098,7 @@ public abstract class EntityHuman extends EntityLiving { Vec3D vec3d = entity.getMot(); boolean flag5 = entity.damageEntity(DamageSource.playerAttack(this), f); @@ -33,10 +33,10 @@ index e6e180ea46529e80eeab95f550dee5f3f8198ba8..b6bfd8f5073ce481dfe2b1667ece42d3 if (flag5) { if (i > 0) { diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 90c0033e31ad5e115568bc092d3515b5b99e965a..d98fbec82ae9110974ca562edbd7e07090e35bb0 100644 +index c4d0082bb0d310ad16de36df03dd99225c5cadb0..22aaa4efd0f5e89f66abf6a9054b595f52e7129b 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1073,7 +1073,7 @@ public class CraftEventFactory { +@@ -1074,7 +1074,7 @@ public class CraftEventFactory { private static EntityDamageEvent callEntityDamageEvent(Entity damager, Entity damagee, DamageCause cause, Map modifiers, Map> modifierFunctions, boolean cancelled) { EntityDamageEvent event; if (damager != null) { diff --git a/patches/Purpur/patches/server/0134-Add-configurable-snowball-damage.patch b/patches/Purpur/patches/server/0130-Add-configurable-snowball-damage.patch similarity index 95% rename from patches/Purpur/patches/server/0134-Add-configurable-snowball-damage.patch rename to patches/Purpur/patches/server/0130-Add-configurable-snowball-damage.patch index 7b4a4cc7..18bcc048 100644 --- a/patches/Purpur/patches/server/0134-Add-configurable-snowball-damage.patch +++ b/patches/Purpur/patches/server/0130-Add-configurable-snowball-damage.patch @@ -18,7 +18,7 @@ index 34a5f481e6ed1357861dca15fb4013ec8484a292..d7bab4446a5a8eef98c10b1f6eb89de9 entity.damageEntity(DamageSource.projectile(this, this.getShooter()), (float) i); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 89bea8f3889d2d2f1469ad1dc5af5cda70153a17..5290b84281d68ac6fb15c997983507aee85e58f7 100644 +index 6c7e898dd42e958553d929b94ce5ddb9542001ee..9dcbce33274f599e4846588afc6d38b8353d6422 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -214,6 +214,11 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0135-Zombie-break-door-minimum-difficulty-option.patch b/patches/Purpur/patches/server/0131-Zombie-break-door-minimum-difficulty-option.patch similarity index 94% rename from patches/Purpur/patches/server/0135-Zombie-break-door-minimum-difficulty-option.patch rename to patches/Purpur/patches/server/0131-Zombie-break-door-minimum-difficulty-option.patch index 8f13d01f..f2a94693 100644 --- a/patches/Purpur/patches/server/0135-Zombie-break-door-minimum-difficulty-option.patch +++ b/patches/Purpur/patches/server/0131-Zombie-break-door-minimum-difficulty-option.patch @@ -40,7 +40,7 @@ index 7488a12926c5ee4adc3bc1fa3973988350381544..23870a271b759a953a095df835e08ea2 + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 5290b84281d68ac6fb15c997983507aee85e58f7..4e80fab96f7c9f0192bcda91acf761750cf8621c 100644 +index 9dcbce33274f599e4846588afc6d38b8353d6422..4801be1715f70655ee3aed53e5db10ac18dc7a82 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -2,6 +2,7 @@ package net.pl3x.purpur; @@ -51,7 +51,7 @@ index 5290b84281d68ac6fb15c997983507aee85e58f7..4e80fab96f7c9f0192bcda91acf76175 import net.minecraft.server.Explosion; import net.minecraft.server.IRegistry; import net.minecraft.server.Item; -@@ -1130,6 +1131,7 @@ public class PurpurWorldConfig { +@@ -1132,6 +1133,7 @@ public class PurpurWorldConfig { public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; @@ -59,7 +59,7 @@ index 5290b84281d68ac6fb15c997983507aee85e58f7..4e80fab96f7c9f0192bcda91acf76175 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1137,6 +1139,11 @@ public class PurpurWorldConfig { +@@ -1139,6 +1141,11 @@ public class PurpurWorldConfig { zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); diff --git a/patches/Purpur/patches/server/0136-Add-demo-command.patch b/patches/Purpur/patches/server/0132-Add-demo-command.patch similarity index 98% rename from patches/Purpur/patches/server/0136-Add-demo-command.patch rename to patches/Purpur/patches/server/0132-Add-demo-command.patch index 16d4ac02..11cbaa41 100644 --- a/patches/Purpur/patches/server/0136-Add-demo-command.patch +++ b/patches/Purpur/patches/server/0132-Add-demo-command.patch @@ -30,7 +30,7 @@ index 08cbc787e2bf6587878bdeffa7248e5d23cdcf98..57d39ed441ec7be933f4fce48225f527 public static final PacketPlayOutGameStateChange.a h = new PacketPlayOutGameStateChange.a(7); public static final PacketPlayOutGameStateChange.a i = new PacketPlayOutGameStateChange.a(8); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 74c76b7f3e0992a90acec338a96077bf4f7afd2a..9294bfab12ef88690e359ff90551c5c615cdd3dd 100644 +index 767715963a79b06c8a0988b65bc589dc9c351138..fa03879f52f89988d1f43a6cab9e202c88ff6d8d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -136,6 +136,7 @@ public class PurpurConfig { diff --git a/patches/Purpur/patches/server/0137-Left-handed-API.patch b/patches/Purpur/patches/server/0133-Left-handed-API.patch similarity index 100% rename from patches/Purpur/patches/server/0137-Left-handed-API.patch rename to patches/Purpur/patches/server/0133-Left-handed-API.patch diff --git a/patches/Purpur/patches/server/0138-Origami-Fix-ProtocolLib-issues-on-Java-15.patch b/patches/Purpur/patches/server/0134-Origami-Fix-ProtocolLib-issues-on-Java-15.patch similarity index 97% rename from patches/Purpur/patches/server/0138-Origami-Fix-ProtocolLib-issues-on-Java-15.patch rename to patches/Purpur/patches/server/0134-Origami-Fix-ProtocolLib-issues-on-Java-15.patch index 59e16c6e..9ec02655 100644 --- a/patches/Purpur/patches/server/0138-Origami-Fix-ProtocolLib-issues-on-Java-15.patch +++ b/patches/Purpur/patches/server/0134-Origami-Fix-ProtocolLib-issues-on-Java-15.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Origami - Fix ProtocolLib issues on Java 15 diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index 6a0ec0105399066dede622b45c9471b32c162cf6..548c62a838848a9183e14f91b21a9dc309d8a3b2 100644 +index 65de374d485f31f8cd6f4e03941173565074ea0e..ea86843fa0313da15b905cbd712c15e7b217daa4 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java @@ -394,9 +394,9 @@ public class NetworkManager extends SimpleChannelInboundHandler> { diff --git a/patches/Purpur/patches/server/0139-Changeable-Mob-Left-Handed-Chance.patch b/patches/Purpur/patches/server/0135-Changeable-Mob-Left-Handed-Chance.patch similarity index 95% rename from patches/Purpur/patches/server/0139-Changeable-Mob-Left-Handed-Chance.patch rename to patches/Purpur/patches/server/0135-Changeable-Mob-Left-Handed-Chance.patch index 80917ab1..122b3d40 100644 --- a/patches/Purpur/patches/server/0139-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/Purpur/patches/server/0135-Changeable-Mob-Left-Handed-Chance.patch @@ -18,7 +18,7 @@ index b64278a8e349467305b75b2180a4a423ed49d7e4..08efc5fec023acf68da1b5931a9b5eb8 } else { this.setLeftHanded(false); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 4e80fab96f7c9f0192bcda91acf761750cf8621c..da99f39a17513be21222c7c1289f638b36b1ca58 100644 +index 4801be1715f70655ee3aed53e5db10ac18dc7a82..f9c43a764a609e8c4339868cb0088b3c09ec29f4 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -129,8 +129,10 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0140-Add-boat-fall-damage-config.patch b/patches/Purpur/patches/server/0136-Add-boat-fall-damage-config.patch similarity index 92% rename from patches/Purpur/patches/server/0140-Add-boat-fall-damage-config.patch rename to patches/Purpur/patches/server/0136-Add-boat-fall-damage-config.patch index 12001e41..5280e212 100644 --- a/patches/Purpur/patches/server/0140-Add-boat-fall-damage-config.patch +++ b/patches/Purpur/patches/server/0136-Add-boat-fall-damage-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add boat fall damage config diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 871119dc506ff3bcd96f57fb5f5923227e0c7f1f..63b919bef1a4420e02b4822097cadc1af9cd97a2 100644 +index ee91832c0e2cad32c5bfe1baad2aeab9228535c0..0031fef270d36234e1675ccd494a87cf33ad9ed0 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -1031,7 +1031,16 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1011,7 +1011,16 @@ public class EntityPlayer extends EntityHuman implements ICrafting { if (this.isInvulnerable(damagesource)) { return false; } else { @@ -27,7 +27,7 @@ index 871119dc506ff3bcd96f57fb5f5923227e0c7f1f..63b919bef1a4420e02b4822097cadc1a if (!flag && isSpawnInvulnerable() && damagesource != DamageSource.OUT_OF_WORLD) { // Purpur diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index da99f39a17513be21222c7c1289f638b36b1ca58..e6e31aa9cc9df9e4810f5bed22500e6590cffb6c 100644 +index f9c43a764a609e8c4339868cb0088b3c09ec29f4..684a2fa594176a5f456d5f203a47aba15469c727 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -224,6 +224,7 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0141-Config-migration-disable-saving-projectiles-to-disk-.patch b/patches/Purpur/patches/server/0137-Config-migration-disable-saving-projectiles-to-disk-.patch similarity index 94% rename from patches/Purpur/patches/server/0141-Config-migration-disable-saving-projectiles-to-disk-.patch rename to patches/Purpur/patches/server/0137-Config-migration-disable-saving-projectiles-to-disk-.patch index 01814cd5..8fc65175 100644 --- a/patches/Purpur/patches/server/0141-Config-migration-disable-saving-projectiles-to-disk-.patch +++ b/patches/Purpur/patches/server/0137-Config-migration-disable-saving-projectiles-to-disk-.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Config migration: disable saving projectiles to disk -> diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 9294bfab12ef88690e359ff90551c5c615cdd3dd..e928716d7a2dcb390507b746763e6f7eaae241b5 100644 +index fa03879f52f89988d1f43a6cab9e202c88ff6d8d..d25d2e43c2dc3588b98b1d76f84ab10c957f2104 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -1,6 +1,7 @@ @@ -36,7 +36,7 @@ index 9294bfab12ef88690e359ff90551c5c615cdd3dd..e928716d7a2dcb390507b746763e6f7e public static String afkBroadcastBack = "§e§o%s is no longer AFK"; public static String afkTabListPrefix = "[AFK] "; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index e6e31aa9cc9df9e4810f5bed22500e6590cffb6c..d4f90fc2f48df7d7be38086285754e8be9e006f5 100644 +index 684a2fa594176a5f456d5f203a47aba15469c727..6d64e78e2a06dbc40863b34de6bdb8d019334f7f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -1,5 +1,6 @@ diff --git a/patches/Purpur/patches/server/0142-Snow-Golem-rate-of-fire-config.patch b/patches/Purpur/patches/server/0138-Snow-Golem-rate-of-fire-config.patch similarity index 92% rename from patches/Purpur/patches/server/0142-Snow-Golem-rate-of-fire-config.patch rename to patches/Purpur/patches/server/0138-Snow-Golem-rate-of-fire-config.patch index b744d700..783ca2f1 100644 --- a/patches/Purpur/patches/server/0142-Snow-Golem-rate-of-fire-config.patch +++ b/patches/Purpur/patches/server/0138-Snow-Golem-rate-of-fire-config.patch @@ -10,10 +10,10 @@ If min-shoot-interval-ticks and max-shoot-interval-ticks are both set to 0, snow golems won't shoot any snowballs. diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index 66a90507aaf16bb8512a77f3c9aa501697e49862..4c083bcfe7d083713b418486f0918f39b96bdb65 100644 +index e370de0ade49ac81d746588bf0991101eba0ce2d..338c78efe43641686be0d6b3a241865ec5fe56bd 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java -@@ -28,7 +28,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -29,7 +29,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt @Override protected void initPathfinder() { this.goalSelector.a(0, new PathfinderGoalHasRider(this)); // Purpur @@ -23,7 +23,7 @@ index 66a90507aaf16bb8512a77f3c9aa501697e49862..4c083bcfe7d083713b418486f0918f39 this.goalSelector.a(3, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F)); this.goalSelector.a(4, new PathfinderGoalRandomLookaround(this)); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d4f90fc2f48df7d7be38086285754e8be9e006f5..cb8646621dcbf6683b5bc980c1c46f1ad629de05 100644 +index 6d64e78e2a06dbc40863b34de6bdb8d019334f7f..c51cca18eb13a0743d9c7748c58a3669d6178216 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -981,12 +981,20 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0143-PaperPR-Config-option-for-Piglins-guarding-chests.patch b/patches/Purpur/patches/server/0139-PaperPR-Config-option-for-Piglins-guarding-chests.patch similarity index 94% rename from patches/Purpur/patches/server/0143-PaperPR-Config-option-for-Piglins-guarding-chests.patch rename to patches/Purpur/patches/server/0139-PaperPR-Config-option-for-Piglins-guarding-chests.patch index bfb117c8..3f5e7ab5 100644 --- a/patches/Purpur/patches/server/0143-PaperPR-Config-option-for-Piglins-guarding-chests.patch +++ b/patches/Purpur/patches/server/0139-PaperPR-Config-option-for-Piglins-guarding-chests.patch @@ -5,7 +5,7 @@ Subject: [PATCH] PaperPR - Config option for Piglins guarding chests diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 0776e68340b0510cc99084bea80791d562dfea40..39f297a968f3ff31119cefcc629ec459f263d426 100644 +index fd675585c61387156892b179af593ad640873d45..9f5edd3285bd477a73e18cfe3af51b441b3eeae1 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -704,6 +704,11 @@ public class PaperWorldConfig { diff --git a/patches/Purpur/patches/server/0144-EMC-Configurable-disable-give-dropping.patch b/patches/Purpur/patches/server/0140-EMC-Configurable-disable-give-dropping.patch similarity index 95% rename from patches/Purpur/patches/server/0144-EMC-Configurable-disable-give-dropping.patch rename to patches/Purpur/patches/server/0140-EMC-Configurable-disable-give-dropping.patch index bd6e539a..ac23c280 100644 --- a/patches/Purpur/patches/server/0144-EMC-Configurable-disable-give-dropping.patch +++ b/patches/Purpur/patches/server/0140-EMC-Configurable-disable-give-dropping.patch @@ -20,7 +20,7 @@ index 1d22c45af884a917e77e02c272fcbae74794200c..7bf90f27fdc48440ef229cca0e100d2c itemstack.setCount(1); entityitem = entityplayer.drop(itemstack, false); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index e928716d7a2dcb390507b746763e6f7eaae241b5..bce8781a2a1d856429d00b8cd9c9ac03425e1bbb 100644 +index d25d2e43c2dc3588b98b1d76f84ab10c957f2104..a9c6b2aee5c87981f783b6004b4ffb048df5657d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -192,6 +192,11 @@ public class PurpurConfig { diff --git a/patches/Purpur/patches/server/0145-Config-migration-climbing-should-not-bypass-cramming.patch b/patches/Purpur/patches/server/0141-Config-migration-climbing-should-not-bypass-cramming.patch similarity index 92% rename from patches/Purpur/patches/server/0145-Config-migration-climbing-should-not-bypass-cramming.patch rename to patches/Purpur/patches/server/0141-Config-migration-climbing-should-not-bypass-cramming.patch index 1467d674..5077cfd1 100644 --- a/patches/Purpur/patches/server/0145-Config-migration-climbing-should-not-bypass-cramming.patch +++ b/patches/Purpur/patches/server/0141-Config-migration-climbing-should-not-bypass-cramming.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Config migration: climbing should not bypass cramming diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index bce8781a2a1d856429d00b8cd9c9ac03425e1bbb..83c1176888ead8fe045f1e1dfc78115ad2bf69f3 100644 +index a9c6b2aee5c87981f783b6004b4ffb048df5657d..03d5a9f923597c07d050465e261efe9a8bc935a6 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -144,6 +144,17 @@ public class PurpurConfig { @@ -28,7 +28,7 @@ index bce8781a2a1d856429d00b8cd9c9ac03425e1bbb..83c1176888ead8fe045f1e1dfc78115a public static String afkBroadcastBack = "§e§o%s is no longer AFK"; public static String afkTabListPrefix = "[AFK] "; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index cb8646621dcbf6683b5bc980c1c46f1ad629de05..7f51df85a93765bb2e6130b96c832fdecc0c3915 100644 +index c51cca18eb13a0743d9c7748c58a3669d6178216..4b291b6bd8e74a4affd6a6ea7e1ace50d78ff7eb 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -96,6 +96,17 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0146-Lobotomize-stuck-villagers.patch b/patches/Purpur/patches/server/0142-Lobotomize-stuck-villagers.patch similarity index 87% rename from patches/Purpur/patches/server/0146-Lobotomize-stuck-villagers.patch rename to patches/Purpur/patches/server/0142-Lobotomize-stuck-villagers.patch index 0d795f1f..aa7d48e6 100644 --- a/patches/Purpur/patches/server/0146-Lobotomize-stuck-villagers.patch +++ b/patches/Purpur/patches/server/0142-Lobotomize-stuck-villagers.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Lobotomize stuck villagers diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 444305d11eb1652b8618b5e2a41992974622e1a0..b861922586dc08a660050e9f2f94433b54c16def 100644 +index fb78ae9c89b035fdac213b7294f94d425a7f57f4..1ec8dcfcbacf373682cb46fee354e3cfd6d3f1b5 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -114,7 +114,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -18,10 +18,10 @@ index 444305d11eb1652b8618b5e2a41992974622e1a0..b861922586dc08a660050e9f2f94433b public float yaw; public float pitch; diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 548a993a1de939396d075f9176e0d60eebc7b010..b3f71c9dcada0ae14172c5694564a9f54a6e556e 100644 +index 15e052cb844df310c62d8a5695e8da6c633d94b6..a04123b5897a150439846abe5b25a3a13419f00e 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -187,15 +187,37 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -185,15 +185,37 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } // Spigot End @@ -59,7 +59,7 @@ index 548a993a1de939396d075f9176e0d60eebc7b010..b3f71c9dcada0ae14172c5694564a9f5 this.world.getMethodProfiler().exit(); if (this.bF) { this.bF = false; -@@ -327,6 +349,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -325,6 +347,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation return true; } @@ -67,7 +67,7 @@ index 548a993a1de939396d075f9176e0d60eebc7b010..b3f71c9dcada0ae14172c5694564a9f5 public void fb() { this.fp(); Iterator iterator = this.getOffers().iterator(); -@@ -361,6 +384,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -359,6 +382,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation return this.bD == 0 || this.bD < 2 && this.world.getTime() > this.bC + 2400L; } @@ -88,22 +88,22 @@ index b92ca4a6de01f3f86367fb8dfe3591b08a3e9218..1208464fba96daf276c9cc0c1c9b18db // Paper start - add target parameter return this.a(blockposition, null, i); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7f51df85a93765bb2e6130b96c832fdecc0c3915..c42b76c449c55ece8ca08e596253e20aab3ecb09 100644 +index 4b291b6bd8e74a4affd6a6ea7e1ace50d78ff7eb..dd8c9cd8e45b49bcee4825abb4e30537ef3dafd4 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1075,6 +1075,8 @@ public class PurpurWorldConfig { - public int villagerSpawnIronGolemRadius = 0; +@@ -1076,6 +1076,8 @@ public class PurpurWorldConfig { public int villagerSpawnIronGolemLimit = 0; public boolean villagerCanBreed = true; + public int villagerBreedingTicks = 6000; + public boolean villagerLobotomizeEnabled = false; + public int villagerLobotomizeCheck = 60; private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1086,6 +1088,13 @@ public class PurpurWorldConfig { - villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius); +@@ -1088,6 +1090,13 @@ public class PurpurWorldConfig { villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit); villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); + villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); + if (PurpurConfig.version < 9) { + boolean oldValue = getBoolean("mobs.villager.lobotomize-1x1", villagerLobotomizeEnabled); + set("mobs.villager.lobotomize.enabled", oldValue); diff --git a/patches/Purpur/patches/server/0147-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/Purpur/patches/server/0143-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch similarity index 95% rename from patches/Purpur/patches/server/0147-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch rename to patches/Purpur/patches/server/0143-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index ab87ff1b..681a3d14 100644 --- a/patches/Purpur/patches/server/0147-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/patches/Purpur/patches/server/0143-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -133,10 +133,10 @@ index 2d91869660c36b4cd7bfe887956a26802cce7f8a..e376306bc2555620d1a61af2296f3dd8 } else { object = new BehaviorWork(); diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index b3f71c9dcada0ae14172c5694564a9f54a6e556e..60962553e4f374b38de82f2cd4d72cef3d956c72 100644 +index a04123b5897a150439846abe5b25a3a13419f00e..9b925bf9b7946eecb16f94d49a9823139c5fd641 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -131,7 +131,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -129,7 +129,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation behaviorcontroller.a(Activity.PLAY, Behaviors.a(0.5F)); } else { behaviorcontroller.setSchedule(Schedule.VILLAGER_DEFAULT); @@ -145,7 +145,7 @@ index b3f71c9dcada0ae14172c5694564a9f54a6e556e..60962553e4f374b38de82f2cd4d72cef } behaviorcontroller.a(Activity.CORE, Behaviors.a(villagerprofession, 0.5F)); -@@ -845,6 +845,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -843,6 +843,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @Override public boolean i(ItemStack itemstack) { Item item = itemstack.getItem(); @@ -157,7 +157,7 @@ index b3f71c9dcada0ae14172c5694564a9f54a6e556e..60962553e4f374b38de82f2cd4d72cef return (EntityVillager.bs.contains(item) || this.getVillagerData().getProfession().c().contains(item)) && this.getInventory().b(itemstack); } -@@ -866,6 +871,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -864,6 +869,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } public boolean canPlant() { @@ -170,10 +170,10 @@ index b3f71c9dcada0ae14172c5694564a9f54a6e556e..60962553e4f374b38de82f2cd4d72cef } diff --git a/src/main/java/net/minecraft/server/IInventory.java b/src/main/java/net/minecraft/server/IInventory.java -index 46b88056b852a7f91d32862dea7bd3a7ea4a1226..64f1767f66a5a91833225faa1b1444e62c6a0205 100644 +index 317349bf382ee6671066fd5556ee339179165ff0..26094ed0089982ed60e28d7c110884cff793108d 100644 --- a/src/main/java/net/minecraft/server/IInventory.java +++ b/src/main/java/net/minecraft/server/IInventory.java -@@ -31,6 +31,7 @@ public interface IInventory extends Clearable { +@@ -32,6 +32,7 @@ public interface IInventory extends Clearable { return true; } @@ -181,7 +181,7 @@ index 46b88056b852a7f91d32862dea7bd3a7ea4a1226..64f1767f66a5a91833225faa1b1444e6 default int a(Item item) { int i = 0; -@@ -45,6 +46,7 @@ public interface IInventory extends Clearable { +@@ -46,6 +47,7 @@ public interface IInventory extends Clearable { return i; } @@ -234,11 +234,11 @@ index 3c60da7ac6faebe9d964e893974e42613c59b4c1..6493f220a0cf627e82e5f3f3c85e9934 public static final VillagerProfession FISHERMAN = a("fisherman", VillagePlaceType.i, SoundEffects.ENTITY_VILLAGER_WORK_FISHERMAN); public static final VillagerProfession FLETCHER = a("fletcher", VillagePlaceType.j, SoundEffects.ENTITY_VILLAGER_WORK_FLETCHER); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c42b76c449c55ece8ca08e596253e20aab3ecb09..c690238bb16d7172ba53321f9512a7bb9c5683fd 100644 +index dd8c9cd8e45b49bcee4825abb4e30537ef3dafd4..12c54e4874d8cd687c1680e9184a3f01fab11b39 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1077,6 +1077,8 @@ public class PurpurWorldConfig { - public boolean villagerCanBreed = true; +@@ -1078,6 +1078,8 @@ public class PurpurWorldConfig { + public int villagerBreedingTicks = 6000; public boolean villagerLobotomizeEnabled = false; public int villagerLobotomizeCheck = 60; + public boolean villagerClericsFarmWarts = false; @@ -246,7 +246,7 @@ index c42b76c449c55ece8ca08e596253e20aab3ecb09..c690238bb16d7172ba53321f9512a7bb private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1095,6 +1097,8 @@ public class PurpurWorldConfig { +@@ -1097,6 +1099,8 @@ public class PurpurWorldConfig { } villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled); villagerLobotomizeCheck = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheck); diff --git a/patches/Purpur/patches/server/0148-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/Purpur/patches/server/0144-Toggle-for-Zombified-Piglin-death-always-counting-as.patch similarity index 95% rename from patches/Purpur/patches/server/0148-Toggle-for-Zombified-Piglin-death-always-counting-as.patch rename to patches/Purpur/patches/server/0144-Toggle-for-Zombified-Piglin-death-always-counting-as.patch index e80bb2ec..75b428a5 100644 --- a/patches/Purpur/patches/server/0148-Toggle-for-Zombified-Piglin-death-always-counting-as.patch +++ b/patches/Purpur/patches/server/0144-Toggle-for-Zombified-Piglin-death-always-counting-as.patch @@ -35,10 +35,10 @@ index 3327dbbf87d8f43cbc7cd728df2f4c6a33dae40d..57f3358b8dfd53f5b1d2e976d64b809f } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c690238bb16d7172ba53321f9512a7bb9c5683fd..27f053eb3929de9baa2f20c95fff3e6413ddc4ee 100644 +index 12c54e4874d8cd687c1680e9184a3f01fab11b39..f7ccf7ce209c047dbfe18539fba6a12ca3765c78 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1208,12 +1208,14 @@ public class PurpurWorldConfig { +@@ -1210,12 +1210,14 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyOnlyBaby = true; public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; diff --git a/patches/Purpur/patches/server/0149-Spread-out-and-optimise-player-list-ticks.patch b/patches/Purpur/patches/server/0145-Spread-out-and-optimise-player-list-ticks.patch similarity index 88% rename from patches/Purpur/patches/server/0149-Spread-out-and-optimise-player-list-ticks.patch rename to patches/Purpur/patches/server/0145-Spread-out-and-optimise-player-list-ticks.patch index 6ac4516e..ab0d7f99 100644 --- a/patches/Purpur/patches/server/0149-Spread-out-and-optimise-player-list-ticks.patch +++ b/patches/Purpur/patches/server/0145-Spread-out-and-optimise-player-list-ticks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Spread out and optimise player list ticks diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index 726e3292318f6a0de474f68fe30da4a954c7600a..58a184c518c557b7e4cfeebba9e4a7a9fbaf8c85 100644 +index 86f534c871a3c9b9ca71b20daa7780dfdab9e76d..d454b6c61c1a7d0ae9d6c2979cb865531acf405f 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -71,7 +71,7 @@ public abstract class PlayerList { +@@ -68,7 +68,7 @@ public abstract class PlayerList { private int viewDistance; private EnumGamemode u; private boolean v; @@ -17,7 +17,7 @@ index 726e3292318f6a0de474f68fe30da4a954c7600a..58a184c518c557b7e4cfeebba9e4a7a9 // CraftBukkit start private CraftServer cserver; -@@ -929,22 +929,23 @@ public abstract class PlayerList { +@@ -928,22 +928,23 @@ public abstract class PlayerList { } public void tick() { @@ -56,10 +56,10 @@ index 726e3292318f6a0de474f68fe30da4a954c7600a..58a184c518c557b7e4cfeebba9e4a7a9 public void sendAll(Packet packet) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 62ef7bb712e91fed150bf9c16c11635a9aaaab67..16fdd444a8064df688b1760760d584b36a700957 100644 +index ca15efea5da7be1717a211b9b3556c755788561a..400e26c96f00e9f8895a45e70f22552ec17f2436 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1381,7 +1381,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1435,7 +1435,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean canSee(Player player) { diff --git a/patches/Purpur/patches/server/0150-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/Purpur/patches/server/0146-Configurable-chance-for-wolves-to-spawn-rabid.patch similarity index 98% rename from patches/Purpur/patches/server/0150-Configurable-chance-for-wolves-to-spawn-rabid.patch rename to patches/Purpur/patches/server/0146-Configurable-chance-for-wolves-to-spawn-rabid.patch index c7f3acee..9097da80 100644 --- a/patches/Purpur/patches/server/0150-Configurable-chance-for-wolves-to-spawn-rabid.patch +++ b/patches/Purpur/patches/server/0146-Configurable-chance-for-wolves-to-spawn-rabid.patch @@ -7,7 +7,7 @@ Configurable chance to spawn a wolf that is rabid. Rabid wolves attack all players, mobs, and animals. diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 1cdc181bb5e756bddca01ea8f10d319e35309733..0aebf35a5b631417d32572cd90bf59b5568ade60 100644 +index af2b6bb559d78dd912eee02281f5446f31e55eae..79fde7b4763642dc4941899ab186db9dfab3b574 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2102,6 +2102,7 @@ public abstract class EntityLiving extends Entity { @@ -201,10 +201,10 @@ index 9a4819815c7a4bf2fd4a92c4169ace35f2261704..da29898574d30d5fecc5a44ad7b36556 public PathfinderGoalAvoidTarget(EntityCreature entitycreature, Class oclass, Predicate predicate, float f, double d0, double d1, Predicate predicate1) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 27f053eb3929de9baa2f20c95fff3e6413ddc4ee..56e1af807e3f2763c0878c5003bc062bdf50355e 100644 +index f7ccf7ce209c047dbfe18539fba6a12ca3765c78..aea3e3ae09d2df797d284104eafb957e8f11a109 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1159,10 +1159,14 @@ public class PurpurWorldConfig { +@@ -1161,10 +1161,14 @@ public class PurpurWorldConfig { public boolean wolfRidable = false; public boolean wolfRidableInWater = false; diff --git a/patches/Purpur/patches/server/0151-Configurable-default-wolf-collar-color.patch b/patches/Purpur/patches/server/0147-Configurable-default-wolf-collar-color.patch similarity index 94% rename from patches/Purpur/patches/server/0151-Configurable-default-wolf-collar-color.patch rename to patches/Purpur/patches/server/0147-Configurable-default-wolf-collar-color.patch index 4d1a50bf..121be503 100644 --- a/patches/Purpur/patches/server/0151-Configurable-default-wolf-collar-color.patch +++ b/patches/Purpur/patches/server/0147-Configurable-default-wolf-collar-color.patch @@ -24,7 +24,7 @@ index 5fe2e9f4bfbdc08690eacd6196e59529dc7953e8..fd62dc51258876275adbe02f750fd881 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 56e1af807e3f2763c0878c5003bc062bdf50355e..f025bc73be48716310f1716d2cabbd5af5c39727 100644 +index aea3e3ae09d2df797d284104eafb957e8f11a109..3790fcea3a556a979eacaf5b03e5ebc4c3a02925 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; @@ -35,7 +35,7 @@ index 56e1af807e3f2763c0878c5003bc062bdf50355e..f025bc73be48716310f1716d2cabbd5a import net.minecraft.server.EnumDifficulty; import net.minecraft.server.Explosion; import net.minecraft.server.IRegistry; -@@ -1159,12 +1160,18 @@ public class PurpurWorldConfig { +@@ -1161,12 +1162,18 @@ public class PurpurWorldConfig { public boolean wolfRidable = false; public boolean wolfRidableInWater = false; diff --git a/patches/Purpur/patches/server/0152-Configurable-entity-base-attributes.patch b/patches/Purpur/patches/server/0148-Configurable-entity-base-attributes.patch similarity index 97% rename from patches/Purpur/patches/server/0152-Configurable-entity-base-attributes.patch rename to patches/Purpur/patches/server/0148-Configurable-entity-base-attributes.patch index 3cc4d309..1928e5ac 100644 --- a/patches/Purpur/patches/server/0152-Configurable-entity-base-attributes.patch +++ b/patches/Purpur/patches/server/0148-Configurable-entity-base-attributes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java -index bdf4e798ac8ca27edebd0122b894d15a76ecb9d0..7718ec8ad3c1833e0bcc713c2e96e054e87453ad 100644 +index 7677f4a2ec8bacadcbc6e68e13f56256f1963552..5ba96d6073d2f30c22c1fa28fdea30857b6f2d59 100644 --- a/src/main/java/net/minecraft/server/EntityBat.java +++ b/src/main/java/net/minecraft/server/EntityBat.java -@@ -54,6 +54,18 @@ public class EntityBat extends EntityAmbient { +@@ -55,6 +55,18 @@ public class EntityBat extends EntityAmbient { setMot(mot.a(0.9D)); } } @@ -136,10 +136,10 @@ index 63497ca0266073dc0a16b7dc22641d08c3eaf400..951531d65709ee3064371cbf4b3a9831 @Override diff --git a/src/main/java/net/minecraft/server/EntityCreeper.java b/src/main/java/net/minecraft/server/EntityCreeper.java -index d186f257fa3bc613be7ec79cd6a6ff2e747cba78..b48610fefc8c72922a00dbab861de7b34d5ec1cf 100644 +index 7e5ede0f644a6e303be36ab0915d346a02760daa..523988bcc0607198dfb73afca5932ed6dd82cca1 100644 --- a/src/main/java/net/minecraft/server/EntityCreeper.java +++ b/src/main/java/net/minecraft/server/EntityCreeper.java -@@ -96,6 +96,11 @@ public class EntityCreeper extends EntityMonster { +@@ -97,6 +97,11 @@ public class EntityCreeper extends EntityMonster { } return getForward() == 0 && getStrafe() == 0; // do not jump if standing still } @@ -188,7 +188,7 @@ index 638efc67d66001ee085957d4698f51a7daac77fc..a766910663e47b05d1e38908b5db7471 @Override diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java -index 17a9217ed2d1677371d12b4ab0552378cd71652f..8e16ae4be41a0f20b057b70e9ef255c548a36f08 100644 +index 497d05996ab84f599aa0a02f853149f074e4d3cb..29c8e1b67396df160cdb7ecf4e1a563fc1acd5ac 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java @@ -97,6 +97,11 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { @@ -252,7 +252,7 @@ index c75dc75611991028e9de6db7c57304e913251a6b..f0ecc6e6ef5843714a6423af5d661985 @Override diff --git a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java -index e87f5aeb97fc35ff2b3464f31a2ec18432774cd4..c63878087ff0414602c4e7ed768a62f8e4899a3a 100644 +index b5f036af81ddd3c1b0e388a28383f0b6a63d128c..7a3fb7a41e987adee675fbfd11f2648cf5de3e53 100644 --- a/src/main/java/net/minecraft/server/EntityFox.java +++ b/src/main/java/net/minecraft/server/EntityFox.java @@ -91,6 +91,11 @@ public class EntityFox extends EntityAnimal { @@ -358,10 +358,10 @@ index 669bce5d9806c80bddc247fe103ff20dc6aaa8a5..e78e89d187f923239f23e37d5141e2e6 @Override diff --git a/src/main/java/net/minecraft/server/EntityHorseAbstract.java b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -index 7958b69b2d4bee87ff5b38b8f724d248f41dff66..645431cccc8f852fd87f2b3095fd4b19bc480345 100644 +index 8fde406273bbea0b9d2dea2362cf6372b7a5c9ae..2bed0a08eaad5fee5d5e85ba6cb3d3e8e1be1c2c 100644 --- a/src/main/java/net/minecraft/server/EntityHorseAbstract.java +++ b/src/main/java/net/minecraft/server/EntityHorseAbstract.java -@@ -55,6 +55,32 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven +@@ -56,6 +56,32 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven public boolean isRidableInWater() { return false; } @@ -394,7 +394,7 @@ index 7958b69b2d4bee87ff5b38b8f724d248f41dff66..645431cccc8f852fd87f2b3095fd4b19 // Purpur end @Override -@@ -863,15 +889,15 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven +@@ -864,15 +890,15 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven } @@ -413,7 +413,7 @@ index 7958b69b2d4bee87ff5b38b8f724d248f41dff66..645431cccc8f852fd87f2b3095fd4b19 return (0.44999998807907104D + this.random.nextDouble() * 0.3D + this.random.nextDouble() * 0.3D + this.random.nextDouble() * 0.3D) * 0.25D; } -@@ -994,7 +1020,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven +@@ -995,7 +1021,7 @@ public abstract class EntityHorseAbstract extends EntityAnimal implements IInven groupdataentity = new EntityAgeable.a(0.2F); } @@ -617,10 +617,10 @@ index cd28463e2bf944d94c121c8f8d6e37221754c168..ac24a9de3b2b24bc8afebf54ea0a947f public static AttributeProvider.Builder m() { diff --git a/src/main/java/net/minecraft/server/EntityMushroomCow.java b/src/main/java/net/minecraft/server/EntityMushroomCow.java -index eb1f95d8bae4bc2580849614ba879dd1a8792ecb..6c26cd909aff83947108e272700d13e6cc9f2b09 100644 +index 46d031ef3cebfe30e07840ef1c9d60a97a24cd1b..c97dac30010c7d574aa7087f3a84581bfc386473 100644 --- a/src/main/java/net/minecraft/server/EntityMushroomCow.java +++ b/src/main/java/net/minecraft/server/EntityMushroomCow.java -@@ -35,6 +35,11 @@ public class EntityMushroomCow extends EntityCow implements IShearable { +@@ -36,6 +36,11 @@ public class EntityMushroomCow extends EntityCow implements IShearable { int getPurpurBreedTime() { return this.world.purpurConfig.mooshroomBreedingTicks; } @@ -713,7 +713,7 @@ index c70281fddcbe5a97a1eb176def99cdf31de37579..80cc4467d601b653583e387eb4be6f3b @Override diff --git a/src/main/java/net/minecraft/server/EntityPig.java b/src/main/java/net/minecraft/server/EntityPig.java -index 7172e8cabf5b715ae9a1087b0d11e6cee81ea6e4..61ea94586ec60dae8e7b32d91403fe93f81fc246 100644 +index eae841eeac75a35a9dc5a53c57538ac5264ece68..9cf07531c674402e3ecc87229638578989340a13 100644 --- a/src/main/java/net/minecraft/server/EntityPig.java +++ b/src/main/java/net/minecraft/server/EntityPig.java @@ -34,6 +34,11 @@ public class EntityPig extends EntityAnimal implements ISteerable, ISaddleable { @@ -854,7 +854,7 @@ index b7f4d61f0038d865ef9ee3c14f6dc146f8de5ac4..0583fc55056a29e7629c76b72800c727 // CraftBukkit start - code from constructor diff --git a/src/main/java/net/minecraft/server/EntityRavager.java b/src/main/java/net/minecraft/server/EntityRavager.java -index a9021458814d84a3a82088f91956db73562c3b10..9e21603cb1681cc702084fdeebb6f93754d87bc8 100644 +index 9d0a462bfc56994ee35478cc9e565123620a9f08..820938c76e787fac6c65eb000491232d5b749dee 100644 --- a/src/main/java/net/minecraft/server/EntityRavager.java +++ b/src/main/java/net/minecraft/server/EntityRavager.java @@ -39,6 +39,11 @@ public class EntityRavager extends EntityRaider { @@ -902,10 +902,10 @@ index 32130c0681501e3e5a47b199f0bb39daac416ed3..d9fe8cf00088dba516ea2bfd7e9590d9 @Override diff --git a/src/main/java/net/minecraft/server/EntityShulker.java b/src/main/java/net/minecraft/server/EntityShulker.java -index 30e0e14162cce0c0d228139d4c537243a400ef13..d264b9469c891a0b81986d9be12b2cd8510b6015 100644 +index 11a6b939ebb51cdda907531d30b7beb3a8562673..3f1cb739709cc16a9f7073ec8fafb448b734a948 100644 --- a/src/main/java/net/minecraft/server/EntityShulker.java +++ b/src/main/java/net/minecraft/server/EntityShulker.java -@@ -39,6 +39,11 @@ public class EntityShulker extends EntityGolem implements IMonster { +@@ -40,6 +40,11 @@ public class EntityShulker extends EntityGolem implements IMonster { public boolean isRidableInWater() { return world.purpurConfig.shulkerRidableInWater; } @@ -982,10 +982,10 @@ index 96cb080d940db22330598a8806726088b79a53c1..ee7805dccac9c4dcdf4fa83ab8041953 @Override diff --git a/src/main/java/net/minecraft/server/EntitySlime.java b/src/main/java/net/minecraft/server/EntitySlime.java -index 3c14ed27e5b487451846f6811f189e6fba05d32d..36b384fd8fc29b270bb8c0ccc66ffad15183cf94 100644 +index 7f3d57a9399f60465fae27f03fc57df625f5016d..c3737457c521715b640b138dc41863dfba6e4ae8 100644 --- a/src/main/java/net/minecraft/server/EntitySlime.java +++ b/src/main/java/net/minecraft/server/EntitySlime.java -@@ -10,6 +10,7 @@ import com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent; +@@ -11,6 +11,7 @@ import com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent; import com.destroystokyo.paper.event.entity.SlimeSwimEvent; import com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent; import com.destroystokyo.paper.event.entity.SlimeWanderEvent; @@ -993,7 +993,7 @@ index 3c14ed27e5b487451846f6811f189e6fba05d32d..36b384fd8fc29b270bb8c0ccc66ffad1 import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Slime; // Paper end -@@ -24,6 +25,7 @@ import org.bukkit.event.entity.SlimeSplitEvent; +@@ -25,6 +26,7 @@ import org.bukkit.event.entity.SlimeSplitEvent; public class EntitySlime extends EntityInsentient implements IMonster { private static final DataWatcherObject bo = DataWatcher.a(EntitySlime.class, DataWatcherRegistry.b); @@ -1001,7 +1001,7 @@ index 3c14ed27e5b487451846f6811f189e6fba05d32d..36b384fd8fc29b270bb8c0ccc66ffad1 public float b; public float c; public float d; -@@ -63,6 +65,25 @@ public class EntitySlime extends EntityInsentient implements IMonster { +@@ -64,6 +66,25 @@ public class EntitySlime extends EntityInsentient implements IMonster { } return true; // do not jump() in wasd controller, let vanilla controller handle } @@ -1027,7 +1027,7 @@ index 3c14ed27e5b487451846f6811f189e6fba05d32d..36b384fd8fc29b270bb8c0ccc66ffad1 // Purpur end @Override -@@ -89,7 +110,7 @@ public class EntitySlime extends EntityInsentient implements IMonster { +@@ -90,7 +111,7 @@ public class EntitySlime extends EntityInsentient implements IMonster { this.datawatcher.set(EntitySlime.bo, i); this.af(); this.updateSize(); @@ -1037,10 +1037,10 @@ index 3c14ed27e5b487451846f6811f189e6fba05d32d..36b384fd8fc29b270bb8c0ccc66ffad1 this.getAttributeInstance(GenericAttributes.ATTACK_DAMAGE).setValue((double) i); if (flag) { diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index 4c083bcfe7d083713b418486f0918f39b96bdb65..fa0c459dcd773e003a2852c594ec7254e4eb11b8 100644 +index 338c78efe43641686be0d6b3a241865ec5fe56bd..1dd13dfea91a05b1e83b065328092a17d41a605f 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java -@@ -23,6 +23,11 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -24,6 +24,11 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt public boolean isRidableInWater() { return world.purpurConfig.snowGolemRidableInWater; } @@ -1133,10 +1133,10 @@ index 067f7f28b02b388d56b93b1ed8274799757196e6..0233b65a996111af7bdc10e4da2d70e5 public void setHomePos(BlockPosition blockposition) { diff --git a/src/main/java/net/minecraft/server/EntityVex.java b/src/main/java/net/minecraft/server/EntityVex.java -index ac75ed3e2e0e0cd8f91de9ff188e173591443b72..af85dcc824e4ad50eca2ccd957da7b68c05d6b41 100644 +index 9336fbbd46c7c6ac11adf8e4cc2735f81c9ed639..3fcbfc7cdf78f71d23b2e2b2990c21db6f493f31 100644 --- a/src/main/java/net/minecraft/server/EntityVex.java +++ b/src/main/java/net/minecraft/server/EntityVex.java -@@ -56,6 +56,11 @@ public class EntityVex extends EntityMonster { +@@ -55,6 +55,11 @@ public class EntityVex extends EntityMonster { public boolean b(float f, float f1) { return false; // no fall damage please } @@ -1149,10 +1149,10 @@ index ac75ed3e2e0e0cd8f91de9ff188e173591443b72..af85dcc824e4ad50eca2ccd957da7b68 @Override diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 60962553e4f374b38de82f2cd4d72cef3d956c72..eef51f8e5734b897164ca9514e7b49b2678416e6 100644 +index 9b925bf9b7946eecb16f94d49a9823139c5fd641..850dae5f20649854f013c0e530a3325455b5db4a 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -95,6 +95,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -93,6 +93,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation public boolean a(EntityHuman entityhuman) { return world.purpurConfig.villagerCanBeLeashed && !this.isLeashed(); } @@ -1165,10 +1165,10 @@ index 60962553e4f374b38de82f2cd4d72cef3d956c72..eef51f8e5734b897164ca9514e7b49b2 @Override diff --git a/src/main/java/net/minecraft/server/EntityVillagerTrader.java b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -index d41960088bb8bc6a7fece0ef152403c43a768dde..9eb9ace0f59366787bc2789ecabf7800b6d29d5c 100644 +index b9418fac0a05d4bb5f8f215a5704bba332e3f7cb..a37aee151bce19ee74e6eae6b67e522a4b28f5a8 100644 --- a/src/main/java/net/minecraft/server/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/server/EntityVillagerTrader.java -@@ -64,6 +64,11 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -65,6 +65,11 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { public boolean a(EntityHuman entityhuman) { return world.purpurConfig.villagerTraderCanBeLeashed && !this.isLeashed(); } @@ -1245,10 +1245,10 @@ index d92fe8013fb3b43cb7eabdf1c624291b7e881889..bcc4aa1d3f09e43016d0009cd04dd6b7 @Override diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java -index fd28ef623f8b6db5e36328d4ef2771e841db0a9d..4dc027577656b423cd06a1eca5fdf9c9a5fcf107 100644 +index e4de6e2f8b72c0ede3ad34666a5dfde5c5363b56..c87f05f2d511a135fe67943f96fe41d06882e57b 100644 --- a/src/main/java/net/minecraft/server/EntityZombie.java +++ b/src/main/java/net/minecraft/server/EntityZombie.java -@@ -68,6 +68,15 @@ public class EntityZombie extends EntityMonster { +@@ -67,6 +67,15 @@ public class EntityZombie extends EntityMonster { public boolean jockeyTryExistingChickens() { return world.purpurConfig.zombieJockeyTryExistingChickens; } @@ -1264,7 +1264,7 @@ index fd28ef623f8b6db5e36328d4ef2771e841db0a9d..4dc027577656b423cd06a1eca5fdf9c9 // Purpur end @Override -@@ -550,7 +559,7 @@ public class EntityZombie extends EntityMonster { +@@ -549,7 +558,7 @@ public class EntityZombie extends EntityMonster { } protected void eV() { @@ -1294,7 +1294,7 @@ index 02b0ae550a0ed33b5b43beedf3b1405985c58c13..966a14b4122b5ca43832a57fcbc16214 public static boolean a(EntityTypes entitytypes, WorldAccess worldaccess, 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 0c47477b416980d2e932321730525bf5a8feda4f..dc850677c29c16805f28af00b2a633638a776f0d 100644 +index 5b6ed77fb2b92b5bf701de436c8d7235bfe82685..48e501130dea326ffc6503bc2e9306dffd8797f9 100644 --- a/src/main/java/net/minecraft/server/EntityZombieVillager.java +++ b/src/main/java/net/minecraft/server/EntityZombieVillager.java @@ -53,6 +53,15 @@ public class EntityZombieVillager extends EntityZombie implements VillagerDataHo @@ -1314,7 +1314,7 @@ index 0c47477b416980d2e932321730525bf5a8feda4f..dc850677c29c16805f28af00b2a63363 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7ddb84db4 100644 +index 3790fcea3a556a979eacaf5b03e5ebc4c3a02925..31114da5cc21c5f3b59ea97e34bddfd09c2a5198 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -484,30 +484,58 @@ public class PurpurWorldConfig { @@ -2327,7 +2327,7 @@ index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7 } public boolean villagerRidable = false; -@@ -1080,6 +1566,7 @@ public class PurpurWorldConfig { +@@ -1081,6 +1567,7 @@ public class PurpurWorldConfig { public int villagerLobotomizeCheck = 60; public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; @@ -2335,7 +2335,7 @@ index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1100,33 +1587,60 @@ public class PurpurWorldConfig { +@@ -1102,33 +1589,60 @@ public class PurpurWorldConfig { villagerLobotomizeCheck = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheck); villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); @@ -2396,7 +2396,7 @@ index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7 } public boolean witherRidable = false; -@@ -1143,19 +1657,30 @@ public class PurpurWorldConfig { +@@ -1145,19 +1659,30 @@ public class PurpurWorldConfig { witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); if (PurpurConfig.version < 8) { double oldValue = getDouble("mobs.wither.max-health", witherMaxHealth); @@ -2429,7 +2429,7 @@ index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7 } public boolean wolfRidable = false; -@@ -1164,6 +1689,7 @@ public class PurpurWorldConfig { +@@ -1166,6 +1691,7 @@ public class PurpurWorldConfig { public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; @@ -2437,7 +2437,7 @@ index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7 private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -1175,13 +1701,26 @@ public class PurpurWorldConfig { +@@ -1177,13 +1703,26 @@ public class PurpurWorldConfig { wolfMilkCuresRabies = getBoolean("mobs.wolf.milk-cures-rabid-wolves", wolfMilkCuresRabies); wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); @@ -2464,7 +2464,7 @@ index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7 } public boolean zombieRidable = false; -@@ -1191,6 +1730,8 @@ public class PurpurWorldConfig { +@@ -1193,6 +1732,8 @@ public class PurpurWorldConfig { public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public EnumDifficulty zombieBreakDoorMinDifficulty = EnumDifficulty.HARD; @@ -2473,7 +2473,7 @@ index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1203,15 +1744,40 @@ public class PurpurWorldConfig { +@@ -1205,15 +1746,40 @@ public class PurpurWorldConfig { } catch (IllegalArgumentException ignore) { zombieBreakDoorMinDifficulty = EnumDifficulty.HARD; } @@ -2514,7 +2514,7 @@ index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7 } public boolean zombifiedPiglinRidable = false; -@@ -1220,6 +1786,8 @@ public class PurpurWorldConfig { +@@ -1222,6 +1788,8 @@ public class PurpurWorldConfig { public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; @@ -2523,7 +2523,7 @@ index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -1227,6 +1795,13 @@ public class PurpurWorldConfig { +@@ -1229,6 +1797,13 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); @@ -2537,7 +2537,7 @@ index f025bc73be48716310f1716d2cabbd5af5c39727..72d1ccb375496ffaa3d02d7c65f3cfb7 } public boolean zombieVillagerRidable = false; -@@ -1234,11 +1809,20 @@ public class PurpurWorldConfig { +@@ -1236,11 +1811,20 @@ public class PurpurWorldConfig { public boolean zombieVillagerJockeyOnlyBaby = true; public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; diff --git a/patches/Purpur/patches/server/0153-Phantom-flames-on-swoop.patch b/patches/Purpur/patches/server/0149-Phantom-flames-on-swoop.patch similarity index 95% rename from patches/Purpur/patches/server/0153-Phantom-flames-on-swoop.patch rename to patches/Purpur/patches/server/0149-Phantom-flames-on-swoop.patch index 9054095e..1f996c38 100644 --- a/patches/Purpur/patches/server/0153-Phantom-flames-on-swoop.patch +++ b/patches/Purpur/patches/server/0149-Phantom-flames-on-swoop.patch @@ -17,7 +17,7 @@ index 80cc4467d601b653583e387eb4be6f3b739058e6..52a3ae1eda874b41e5d71c16b8ab24d3 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 72d1ccb375496ffaa3d02d7c65f3cfb7ddb84db4..1b0e8f2fbdfe6d48ed86ae49f296bbf6ebd0bd23 100644 +index 31114da5cc21c5f3b59ea97e34bddfd09c2a5198..b630887b4ba9288e9724e97658d903ab334c3f8b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -1148,6 +1148,7 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0154-Option-for-chests-to-open-even-with-a-solid-block-on.patch b/patches/Purpur/patches/server/0150-Option-for-chests-to-open-even-with-a-solid-block-on.patch similarity index 94% rename from patches/Purpur/patches/server/0154-Option-for-chests-to-open-even-with-a-solid-block-on.patch rename to patches/Purpur/patches/server/0150-Option-for-chests-to-open-even-with-a-solid-block-on.patch index 1072f526..a3073254 100644 --- a/patches/Purpur/patches/server/0154-Option-for-chests-to-open-even-with-a-solid-block-on.patch +++ b/patches/Purpur/patches/server/0150-Option-for-chests-to-open-even-with-a-solid-block-on.patch @@ -17,7 +17,7 @@ index c4ff93a6b908c1bd157c7fe45b504909b189d09c..71a32a317e38b9c8f802fd5dd9ae546f return iblockaccess.getType(blockposition1).isOccluding(iblockaccess, blockposition1); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1b0e8f2fbdfe6d48ed86ae49f296bbf6ebd0bd23..9c6992fe621065151238281fe101566b6e634ad4 100644 +index b630887b4ba9288e9724e97658d903ab334c3f8b..98211b159564f1674c84a5ec7cce37a1f077af5e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -381,6 +381,11 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0155-Implement-TPSBar.patch b/patches/Purpur/patches/server/0151-Implement-TPSBar.patch similarity index 94% rename from patches/Purpur/patches/server/0155-Implement-TPSBar.patch rename to patches/Purpur/patches/server/0151-Implement-TPSBar.patch index 07f24910..9465da1c 100644 --- a/patches/Purpur/patches/server/0155-Implement-TPSBar.patch +++ b/patches/Purpur/patches/server/0151-Implement-TPSBar.patch @@ -17,10 +17,10 @@ index b5cc099746e9f05ea69bc438bda22a5ac3ebc3c5..bbd17231a4f7ad0ddde6eb5e589a6c40 if (commanddispatcher_servertype.d) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index eea187723c1931a5db9a2d79a1abddd664d890a1..33d43478b1bc4b0ca3f16ba80e0cd99bc6f5311e 100644 +index 85c14df768ec844b710bf2b32eb7f85c9e6b47ea..17591457a33e6994cd26bb1487a7879a11411a9c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -469,6 +469,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant 100) { PlayerConnection.LOGGER.warn(this.player.getName() + " tried to send a book with too many pages"); @@ -16,7 +16,7 @@ index ef222cdfdfb49dcdcb0e3bf6f6cabc765be003cc..95c1ba7241069ad291c2acef6972937a minecraftServer.scheduleOnMain(() -> this.disconnect("Book too large!")); return; } -@@ -978,6 +979,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -982,6 +983,7 @@ public class PlayerConnection implements PacketListenerPlayIn { int byteLength = testString.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; if (byteLength > 256 * 4) { PlayerConnection.LOGGER.warn(this.player.getName() + " tried to send a book with with a page too large!"); @@ -24,7 +24,7 @@ index ef222cdfdfb49dcdcb0e3bf6f6cabc765be003cc..95c1ba7241069ad291c2acef6972937a minecraftServer.scheduleOnMain(() -> this.disconnect("Book too large!")); return; } -@@ -1001,6 +1003,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1005,6 +1007,7 @@ public class PlayerConnection implements PacketListenerPlayIn { if (byteTotal > byteAllowed) { PlayerConnection.LOGGER.warn(this.player.getName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size()); diff --git a/patches/Purpur/patches/server/0158-Full-netherite-armor-grants-fire-resistance.patch b/patches/Purpur/patches/server/0154-Full-netherite-armor-grants-fire-resistance.patch similarity index 93% rename from patches/Purpur/patches/server/0158-Full-netherite-armor-grants-fire-resistance.patch rename to patches/Purpur/patches/server/0154-Full-netherite-armor-grants-fire-resistance.patch index 42b81996..f56f1e9c 100644 --- a/patches/Purpur/patches/server/0158-Full-netherite-armor-grants-fire-resistance.patch +++ b/patches/Purpur/patches/server/0154-Full-netherite-armor-grants-fire-resistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Full netherite armor grants fire resistance diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index b6bfd8f5073ce481dfe2b1667ece42d32eaeb227..81f7d5bc581b42289a79121da15868999ab9feef 100644 +index 4e55f64f8da344bdd5fe142f87cc6ea129bdeabe..c2e0f449400d7477be6310c8d59efe21a517afb3 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java -@@ -234,6 +234,16 @@ public abstract class EntityHuman extends EntityLiving { +@@ -236,6 +236,16 @@ public abstract class EntityHuman extends EntityLiving { this.addEffect(new MobEffect(MobEffects.WATER_BREATHING, 200, 0, false, false, true), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.TURTLE_HELMET); // CraftBukkit } @@ -26,7 +26,7 @@ index b6bfd8f5073ce481dfe2b1667ece42d32eaeb227..81f7d5bc581b42289a79121da1586899 protected ItemCooldown i() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 31c902edfec4a69dfa36cd31ec1a82f3ac0fc621..f6d4ac90f9bad65743a02be21b0f7b52f6772659 100644 +index f19da65bcc79bd70bf9b5ac33867e49b6838cb7d..af33ee28276ac9848805765af6d51bf4b9f3c372 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -310,6 +310,19 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0159-Fix-rotating-UP-DOWN-CW-and-CCW.patch b/patches/Purpur/patches/server/0155-Fix-rotating-UP-DOWN-CW-and-CCW.patch similarity index 100% rename from patches/Purpur/patches/server/0159-Fix-rotating-UP-DOWN-CW-and-CCW.patch rename to patches/Purpur/patches/server/0155-Fix-rotating-UP-DOWN-CW-and-CCW.patch diff --git a/patches/Purpur/patches/server/0160-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/Purpur/patches/server/0156-Add-mobGriefing-bypass-to-everything-affected.patch similarity index 96% rename from patches/Purpur/patches/server/0160-Add-mobGriefing-bypass-to-everything-affected.patch rename to patches/Purpur/patches/server/0156-Add-mobGriefing-bypass-to-everything-affected.patch index 2263221d..c1226ed7 100644 --- a/patches/Purpur/patches/server/0160-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/Purpur/patches/server/0156-Add-mobGriefing-bypass-to-everything-affected.patch @@ -45,7 +45,7 @@ index 099e0d3df219408ebe2a741a02e53eb9f7def28e..73dc0f499c456c21d298013fbab8c79e org.bukkit.event.Cancellable cancellable; if (entity instanceof EntityHuman) { diff --git a/src/main/java/net/minecraft/server/BlockTurtleEgg.java b/src/main/java/net/minecraft/server/BlockTurtleEgg.java -index 92cca6c44f12a9283988b84681aac760f1c38d7e..31f2ca273eb35aa389caf328abe1b0e87c8846f8 100644 +index 0f147dc938cef428452bd3137c68b52a78f9fbde..276aac9afd5d987cf388a87718453c4737049073 100644 --- a/src/main/java/net/minecraft/server/BlockTurtleEgg.java +++ b/src/main/java/net/minecraft/server/BlockTurtleEgg.java @@ -177,7 +177,7 @@ public class BlockTurtleEgg extends Block { @@ -58,7 +58,7 @@ index 92cca6c44f12a9283988b84681aac760f1c38d7e..31f2ca273eb35aa389caf328abe1b0e8 return true; // Purpur end diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java -index 8e16ae4be41a0f20b057b70e9ef255c548a36f08..87b691afd226ec9c59685261c20454c2d312ca17 100644 +index 29c8e1b67396df160cdb7ecf4e1a563fc1acd5ac..fd019a7d8940150ba776e211fe5f7ecb4ffbc89c 100644 --- a/src/main/java/net/minecraft/server/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java @@ -489,7 +489,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { @@ -106,7 +106,7 @@ index f0ecc6e6ef5843714a6423af5d6619856ef23977..5f24c36bf45a656e2204754491137867 } else { List list = EntityEvoker.this.world.a(EntitySheep.class, this.e, EntityEvoker.this, EntityEvoker.this.getBoundingBox().grow(16.0D, 4.0D, 16.0D)); diff --git a/src/main/java/net/minecraft/server/EntityFox.java b/src/main/java/net/minecraft/server/EntityFox.java -index c63878087ff0414602c4e7ed768a62f8e4899a3a..18d14aca159db9c82a2f56020f503b5d3c4aae59 100644 +index 7a3fb7a41e987adee675fbfd11f2648cf5de3e53..ff78bd607f19a1b9f37281946db3f705c844f7cc 100644 --- a/src/main/java/net/minecraft/server/EntityFox.java +++ b/src/main/java/net/minecraft/server/EntityFox.java @@ -1002,7 +1002,7 @@ public class EntityFox extends EntityAnimal { @@ -146,7 +146,7 @@ index d12de20cf4bb2345c616d3cc0b9f50bddb5135ee..3f3be1b2ded6ad118ae7860c1231c7af // CraftBukkit start - fire ExplosionPrimeEvent ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 0aebf35a5b631417d32572cd90bf59b5568ade60..330f27f649a2ab1567ebc1b547f1f2a5ce645055 100644 +index 79fde7b4763642dc4941899ab186db9dfab3b574..38f94d4983b69e265441a2b8365702df57a881f5 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -1473,7 +1473,7 @@ public abstract class EntityLiving extends Entity { @@ -185,7 +185,7 @@ index ad2a2c27f0ef064064ded28cc049a6856d476808..e07f224289a937689a26d58639899abb if (this.b.fb() && !this.b.fa().a() && this.b.eN() && !ItemStack.matches(this.b.getEquipment(EnumItemSlot.HEAD), Raid.s())) { diff --git a/src/main/java/net/minecraft/server/EntityRavager.java b/src/main/java/net/minecraft/server/EntityRavager.java -index 9e21603cb1681cc702084fdeebb6f93754d87bc8..f9df1389189962ce08e50647baffd9eecb00968a 100644 +index 820938c76e787fac6c65eb000491232d5b749dee..3606440e41ab3193fadebb455c0967dbc0ccbb63 100644 --- a/src/main/java/net/minecraft/server/EntityRavager.java +++ b/src/main/java/net/minecraft/server/EntityRavager.java @@ -137,7 +137,7 @@ public class EntityRavager extends EntityRaider { @@ -233,10 +233,10 @@ index 4ed7a20bfed267776628457a4b33178bac7d1972..e7e12ce2338102b875444c3f3cc76785 // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index fa0c459dcd773e003a2852c594ec7254e4eb11b8..88eeabeb89fe733c462a667d7564da3b125952a2 100644 +index 1dd13dfea91a05b1e83b065328092a17d41a605f..eb6344a5671408ae9fdd6013774baa13addf304b 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java -@@ -85,7 +85,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -86,7 +86,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt this.damageEntity(CraftEventFactory.MELTING, 1.0F); // CraftBukkit - DamageSource.BURN -> CraftEventFactory.MELTING } @@ -246,10 +246,10 @@ index fa0c459dcd773e003a2852c594ec7254e4eb11b8..88eeabeb89fe733c462a667d7564da3b } diff --git a/src/main/java/net/minecraft/server/EntityWither.java b/src/main/java/net/minecraft/server/EntityWither.java -index 121eefd5d89f88c762b19088c657a41f9850b619..d198221508ffbba1c2eddc4ebc06fe0f63941c92 100644 +index c9037d847b12a705194a0bd70f11c5dae8f50bfa..8679f9f5210632349915558016c3273f5ef0527d 100644 --- a/src/main/java/net/minecraft/server/EntityWither.java +++ b/src/main/java/net/minecraft/server/EntityWither.java -@@ -322,7 +322,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -323,7 +323,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { if (this.getInvul() > 0) { i = this.getInvul() - 1; if (i <= 0) { @@ -258,7 +258,7 @@ index 121eefd5d89f88c762b19088c657a41f9850b619..d198221508ffbba1c2eddc4ebc06fe0f // CraftBukkit start // this.world.createExplosion(this, this.locX(), this.getHeadY(), this.locZ(), 7.0F, false, explosion_effect); ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), 7.0F, false); -@@ -434,7 +434,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -435,7 +435,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { if (this.bw > 0) { --this.bw; @@ -325,10 +325,10 @@ index b7e1e7e35a33cf6a476b11284ebdb0cdda524af2..9e8f720ee0a39ccc27d671df4ae83ef4 this.c.setTypeAndData(blockposition1, Blocks.DIRT.getBlockData(), 2); } diff --git a/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java b/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java -index c03ebbc933197be3e7097ea3f7b7cd08c90db7bb..37c1d1ac1bfcaf84d00135ad3c9d9e9b213fdaea 100644 +index 6ea402c603b9b54705e79a2fdc61fe5a254479a3..0119eb85fbb2aa85b402f7e0ff712e83c79880a4 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalRemoveBlock.java -@@ -23,7 +23,7 @@ public class PathfinderGoalRemoveBlock extends PathfinderGoalGotoTarget { +@@ -24,7 +24,7 @@ public class PathfinderGoalRemoveBlock extends PathfinderGoalGotoTarget { @Override public boolean a() { @@ -338,7 +338,7 @@ index c03ebbc933197be3e7097ea3f7b7cd08c90db7bb..37c1d1ac1bfcaf84d00135ad3c9d9e9b } else if (this.c > 0) { --this.c; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f6d4ac90f9bad65743a02be21b0f7b52f6772659..106240d48b6bd472545bb46fdada3e023d3cfdca 100644 +index af33ee28276ac9848805765af6d51bf4b9f3c372..f9cd952ebddab8c963a8cc51755e3019c9286bd0 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -252,6 +252,7 @@ public class PurpurWorldConfig { @@ -525,7 +525,7 @@ index f6d4ac90f9bad65743a02be21b0f7b52f6772659..106240d48b6bd472545bb46fdada3e02 snowGolemDropsPumpkin = getBoolean("mobs.snow_golem.drop-pumpkin-when-sheared", snowGolemDropsPumpkin); snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack); snowGolemSnowBallMin = getInt("mobs.snow_golem.min-shoot-interval-ticks", snowGolemSnowBallMin); -@@ -1668,6 +1694,7 @@ public class PurpurWorldConfig { +@@ -1670,6 +1696,7 @@ public class PurpurWorldConfig { public boolean witherRidable = false; public boolean witherRidableInWater = false; public double witherMaxY = 256D; @@ -533,7 +533,7 @@ index f6d4ac90f9bad65743a02be21b0f7b52f6772659..106240d48b6bd472545bb46fdada3e02 public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; public double witherMaxHealth = 300.0D; -@@ -1675,6 +1702,7 @@ public class PurpurWorldConfig { +@@ -1677,6 +1704,7 @@ public class PurpurWorldConfig { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); witherMaxY = getDouble("mobs.wither.ridable-max-y", witherMaxY); @@ -541,7 +541,7 @@ index f6d4ac90f9bad65743a02be21b0f7b52f6772659..106240d48b6bd472545bb46fdada3e02 witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); if (PurpurConfig.version < 8) { -@@ -1747,6 +1775,7 @@ public class PurpurWorldConfig { +@@ -1749,6 +1777,7 @@ public class PurpurWorldConfig { public boolean zombieRidable = false; public boolean zombieRidableInWater = false; @@ -549,7 +549,7 @@ index f6d4ac90f9bad65743a02be21b0f7b52f6772659..106240d48b6bd472545bb46fdada3e02 public boolean zombieJockeyOnlyBaby = true; public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; -@@ -1757,6 +1786,7 @@ public class PurpurWorldConfig { +@@ -1759,6 +1788,7 @@ public class PurpurWorldConfig { private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); diff --git a/patches/Purpur/patches/server/0161-Config-to-allow-Note-Block-sounds-when-blocked.patch b/patches/Purpur/patches/server/0157-Config-to-allow-Note-Block-sounds-when-blocked.patch similarity index 96% rename from patches/Purpur/patches/server/0161-Config-to-allow-Note-Block-sounds-when-blocked.patch rename to patches/Purpur/patches/server/0157-Config-to-allow-Note-Block-sounds-when-blocked.patch index c5a06602..039f187f 100644 --- a/patches/Purpur/patches/server/0161-Config-to-allow-Note-Block-sounds-when-blocked.patch +++ b/patches/Purpur/patches/server/0157-Config-to-allow-Note-Block-sounds-when-blocked.patch @@ -22,7 +22,7 @@ index df69d00d3a38417e53f433cd1eb1f6cf3ec9b55b..6bb6e229c8734d7b9f4e3cd3dd1b4b64 org.bukkit.event.block.NotePlayEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callNotePlayEvent(world, blockposition, data.get(BlockNote.INSTRUMENT), data.get(BlockNote.NOTE)); if (!event.isCancelled()) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 106240d48b6bd472545bb46fdada3e023d3cfdca..2b25d505a5b5d8799177beacfaa9a5bcddb939ef 100644 +index f9cd952ebddab8c963a8cc51755e3019c9286bd0..e1b2a39ea8847716c44d265a62492b5e6cbe262d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -254,6 +254,7 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0162-Add-EntityTeleportHinderedEvent.patch b/patches/Purpur/patches/server/0158-Add-EntityTeleportHinderedEvent.patch similarity index 91% rename from patches/Purpur/patches/server/0162-Add-EntityTeleportHinderedEvent.patch rename to patches/Purpur/patches/server/0158-Add-EntityTeleportHinderedEvent.patch index d0bfea07..f2bbe72c 100644 --- a/patches/Purpur/patches/server/0162-Add-EntityTeleportHinderedEvent.patch +++ b/patches/Purpur/patches/server/0158-Add-EntityTeleportHinderedEvent.patch @@ -50,10 +50,10 @@ index e731b6d811d179f07f84278d2cce75e0d98092ab..f0e5c378c4612192c1d4c74aa81e598f WorldServer worldserver = ((WorldServer) world).getMinecraftServer().getWorldServer(resourcekey); diff --git a/src/main/java/net/minecraft/server/BlockPortal.java b/src/main/java/net/minecraft/server/BlockPortal.java -index 4132cd4c6f13cfa1c0cda43daaa908ff3c07f32b..6dab6ee15f34c401bfe71041f46a9d5b9732770b 100644 +index bd78d55ee94f1359739a9d790092d07c613eac0f..a574ef929ac60584ff6e1b2c76722456cc3895ff 100644 --- a/src/main/java/net/minecraft/server/BlockPortal.java +++ b/src/main/java/net/minecraft/server/BlockPortal.java -@@ -63,7 +63,15 @@ public class BlockPortal extends Block { +@@ -60,7 +60,15 @@ public class BlockPortal extends Block { @Override public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Entity entity) { @@ -71,10 +71,10 @@ index 4132cd4c6f13cfa1c0cda43daaa908ff3c07f32b..6dab6ee15f34c401bfe71041f46a9d5b EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ())); world.getServer().getPluginManager().callEvent(event); diff --git a/src/main/java/net/minecraft/server/TileEntityEndGateway.java b/src/main/java/net/minecraft/server/TileEntityEndGateway.java -index ed8e91bf6c8b9d410d439bdddd5067d346a20a7e..127b5d8215f2bb4c5c523c5a77ebccfbf5fc25ff 100644 +index e616b3759561e0d6e471f914f3dc843fe7464f2e..4a443827a316415c2c047ca468d965a80fce1fb1 100644 --- a/src/main/java/net/minecraft/server/TileEntityEndGateway.java +++ b/src/main/java/net/minecraft/server/TileEntityEndGateway.java -@@ -125,9 +125,18 @@ public class TileEntityEndGateway extends TileEntityEnderPortal implements ITick +@@ -126,9 +126,18 @@ public class TileEntityEndGateway extends TileEntityEnderPortal implements ITick } } @@ -94,10 +94,10 @@ index ed8e91bf6c8b9d410d439bdddd5067d346a20a7e..127b5d8215f2bb4c5c523c5a77ebccfb if (this.exitPortal == null && this.world.getTypeKey() == DimensionManager.THE_END) { // CraftBukkit - work in alternate worlds this.a((WorldServer) this.world); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2b25d505a5b5d8799177beacfaa9a5bcddb939ef..31d011ad08b2756fb236099cb92cd37b6a2934ff 100644 +index e1b2a39ea8847716c44d265a62492b5e6cbe262d..2391e1ddbe062dde5cb9a240b0a6a85ed793e569 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1879,4 +1879,9 @@ public class PurpurWorldConfig { +@@ -1881,4 +1881,9 @@ public class PurpurWorldConfig { zombieVillagerMaxHealth = getDouble("mobs.zombie_villager.attributes.max_health", zombieVillagerMaxHealth); zombieVillagerSpawnReinforcements = getDouble("mobs.zombie_villager.attributes.spawn_reinforcements", zombieVillagerSpawnReinforcements); } @@ -108,10 +108,10 @@ index 2b25d505a5b5d8799177beacfaa9a5bcddb939ef..31d011ad08b2756fb236099cb92cd37b + } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index b56ca054b37f5887e13b481baad8132f1d28638b..eb0ce05d25ba33626d2dd3e3380d805c560bfe58 100644 +index 5471422d23d261a06c67f9374cae933430ec03a0..4c592f6d4d6cbeb4c3225e7794f4b1d6c8d62394 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -521,6 +521,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -522,6 +522,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { location.checkFinite(); if (entity.isVehicle() || entity.dead) { @@ -123,10 +123,10 @@ index b56ca054b37f5887e13b481baad8132f1d28638b..eb0ce05d25ba33626d2dd3e3380d805c } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 16fdd444a8064df688b1760760d584b36a700957..77caf8d52cc0cafb99948787e72a0fd09743aa00 100644 +index 400e26c96f00e9f8895a45e70f22552ec17f2436..ec450146f82b656616c8b60cc05d727437eaa0b6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -115,6 +115,7 @@ import org.bukkit.entity.EntityType; +@@ -117,6 +117,7 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerRegisterChannelEvent; import org.bukkit.event.player.PlayerTeleportEvent; @@ -134,7 +134,7 @@ index 16fdd444a8064df688b1760760d584b36a700957..77caf8d52cc0cafb99948787e72a0fd0 import org.bukkit.event.player.PlayerUnregisterChannelEvent; import org.bukkit.inventory.InventoryView.Property; import org.bukkit.inventory.ItemStack; -@@ -790,6 +791,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -874,6 +875,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } if (entity.isVehicle()) { diff --git a/patches/Purpur/patches/server/0163-Add-StructureGenerateEvent.patch b/patches/Purpur/patches/server/0159-Add-StructureGenerateEvent.patch similarity index 100% rename from patches/Purpur/patches/server/0163-Add-StructureGenerateEvent.patch rename to patches/Purpur/patches/server/0159-Add-StructureGenerateEvent.patch diff --git a/patches/Purpur/patches/server/0164-Farmland-trampling-changes.patch b/patches/Purpur/patches/server/0160-Farmland-trampling-changes.patch similarity index 96% rename from patches/Purpur/patches/server/0164-Farmland-trampling-changes.patch rename to patches/Purpur/patches/server/0160-Farmland-trampling-changes.patch index a6122926..8ad046e7 100644 --- a/patches/Purpur/patches/server/0164-Farmland-trampling-changes.patch +++ b/patches/Purpur/patches/server/0160-Farmland-trampling-changes.patch @@ -28,7 +28,7 @@ index 73dc0f499c456c21d298013fbab8c79ebcdecd6b..6b65a4b1845c6770f92ceebd04827595 if (CraftEventFactory.callEntityChangeBlockEvent(entity, blockposition, Blocks.DIRT.getBlockData()).isCancelled()) { return; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 31d011ad08b2756fb236099cb92cd37b6a2934ff..92f16b14a0da17da7a731301892535982605347a 100644 +index 2391e1ddbe062dde5cb9a240b0a6a85ed793e569..e248681fc8d1c91077e2135a70347bf4c5282686 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -413,10 +413,14 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0165-Movement-options-for-armour-stands.patch b/patches/Purpur/patches/server/0161-Movement-options-for-armour-stands.patch similarity index 94% rename from patches/Purpur/patches/server/0165-Movement-options-for-armour-stands.patch rename to patches/Purpur/patches/server/0161-Movement-options-for-armour-stands.patch index d3fd10e7..f2b41af0 100644 --- a/patches/Purpur/patches/server/0165-Movement-options-for-armour-stands.patch +++ b/patches/Purpur/patches/server/0161-Movement-options-for-armour-stands.patch @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index b861922586dc08a660050e9f2f94433b54c16def..1c407f3050ba34afd33ce66b6ef8ef682010091a 100644 +index 1ec8dcfcbacf373682cb46fee354e3cfd6d3f1b5..85ffb2e72dbf08604c004732f17aee9ec7e1ff9d 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1360,7 +1360,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1373,7 +1373,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return this.isInWater() || flag; } @@ -66,7 +66,7 @@ index 759a8f95038778aead2f33a65a2d8f2d6b26a765..74fda434ed7beb6612f46ed75fdccad5 + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 92f16b14a0da17da7a731301892535982605347a..2c555ac0bee9e0a37fada8c04e75699f2cb311bc 100644 +index e248681fc8d1c91077e2135a70347bf4c5282686..a494a9e15456cf684c62957e8563ef06627695f9 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -111,10 +111,16 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0166-Fix-stuck-in-portals.patch b/patches/Purpur/patches/server/0162-Fix-stuck-in-portals.patch similarity index 85% rename from patches/Purpur/patches/server/0166-Fix-stuck-in-portals.patch rename to patches/Purpur/patches/server/0162-Fix-stuck-in-portals.patch index 623f6910..97a85642 100644 --- a/patches/Purpur/patches/server/0166-Fix-stuck-in-portals.patch +++ b/patches/Purpur/patches/server/0162-Fix-stuck-in-portals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix stuck in portals diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 1c407f3050ba34afd33ce66b6ef8ef682010091a..a2ba87dac005572d2617b6fe2c92f6984665588c 100644 +index 85ffb2e72dbf08604c004732f17aee9ec7e1ff9d..49a1447bae91294a23ccab27c2809bea0c4c90a3 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -2411,12 +2411,15 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -2424,12 +2424,15 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke return new Vec2F(this.pitch, this.yaw); } @@ -25,10 +25,10 @@ index 1c407f3050ba34afd33ce66b6ef8ef682010091a..a2ba87dac005572d2617b6fe2c92f698 this.inPortal = true; diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 63b919bef1a4420e02b4822097cadc1af9cd97a2..9013e8655d6e09f830adda8001567ab889a22479 100644 +index 0031fef270d36234e1675ccd494a87cf33ad9ed0..912952ff7c50b416bddd63469a592cf563e8a2cd 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -1181,6 +1181,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1161,6 +1161,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { playerlist.d(this); worldserver1.removePlayer(this); this.dead = false; @@ -37,7 +37,7 @@ index 63b919bef1a4420e02b4822097cadc1af9cd97a2..9013e8655d6e09f830adda8001567ab8 // CraftBukkit end this.spawnIn(worldserver); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2c555ac0bee9e0a37fada8c04e75699f2cb311bc..3df5798e91b767aa0843a3cc520116c02b5e277e 100644 +index a494a9e15456cf684c62957e8563ef06627695f9..c268ec1b3b3e558283d869629079049343b2f15d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -350,6 +350,11 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0167-Fix-PlayerEditBookEvent-not-saving-new-book.patch b/patches/Purpur/patches/server/0163-Fix-PlayerEditBookEvent-not-saving-new-book.patch similarity index 86% rename from patches/Purpur/patches/server/0167-Fix-PlayerEditBookEvent-not-saving-new-book.patch rename to patches/Purpur/patches/server/0163-Fix-PlayerEditBookEvent-not-saving-new-book.patch index 3c4c39f7..56a2c53b 100644 --- a/patches/Purpur/patches/server/0167-Fix-PlayerEditBookEvent-not-saving-new-book.patch +++ b/patches/Purpur/patches/server/0163-Fix-PlayerEditBookEvent-not-saving-new-book.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix PlayerEditBookEvent not saving new book diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 95c1ba7241069ad291c2acef6972937ac7c4c7c7..1471785da53a18edf31a20212f3cc6c19de92822 100644 +index 9ff35aa827cf5b937b8dcbcabafd27301574c35d..f7a031920c68d5d5d505d86ab1b513ac53f5bf84 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -1061,7 +1061,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1065,7 +1065,7 @@ public class PlayerConnection implements PacketListenerPlayIn { list.stream().map(s -> s = color(s, hasPerm, false)).map(NBTTagString::a).forEach(nbttaglist::add); // Purpur - edit book ItemStack old = itemstack.cloneItemStack(); // CraftBukkit itemstack.a("pages", (NBTBase) nbttaglist); diff --git a/patches/Purpur/patches/server/0168-Config-to-use-infinity-bows-without-arrows.patch b/patches/Purpur/patches/server/0164-Config-to-use-infinity-bows-without-arrows.patch similarity index 96% rename from patches/Purpur/patches/server/0168-Config-to-use-infinity-bows-without-arrows.patch rename to patches/Purpur/patches/server/0164-Config-to-use-infinity-bows-without-arrows.patch index 344d04bd..56ead80d 100644 --- a/patches/Purpur/patches/server/0168-Config-to-use-infinity-bows-without-arrows.patch +++ b/patches/Purpur/patches/server/0164-Config-to-use-infinity-bows-without-arrows.patch @@ -20,7 +20,7 @@ index 8241f3dafa5852bed7a3967e7260b36f47198dba..edfb09fe673a9a7fe4e0410c0c0eeeda } else { entityhuman.c(enumhand); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3df5798e91b767aa0843a3cc520116c02b5e277e..200ac6aff09a38198b13d4cb91b5c08fddf83261 100644 +index c268ec1b3b3e558283d869629079049343b2f15d..2db8241602382927ae9365a5026451e199f48d36 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -209,10 +209,12 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0169-Toggle-for-water-sensitive-mob-damage.patch b/patches/Purpur/patches/server/0165-Toggle-for-water-sensitive-mob-damage.patch similarity index 95% rename from patches/Purpur/patches/server/0169-Toggle-for-water-sensitive-mob-damage.patch rename to patches/Purpur/patches/server/0165-Toggle-for-water-sensitive-mob-damage.patch index d98b854b..9fd263f9 100644 --- a/patches/Purpur/patches/server/0169-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/Purpur/patches/server/0165-Toggle-for-water-sensitive-mob-damage.patch @@ -45,7 +45,7 @@ index 08efc5fec023acf68da1b5931a9b5eb8c16e9fc3..d6a086f59d9df8ef7f727e6a83fa51a1 } return; diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 330f27f649a2ab1567ebc1b547f1f2a5ce645055..5f9d8999ae7a1d742918e58c0f1bb36fc74d45fe 100644 +index 38f94d4983b69e265441a2b8365702df57a881f5..50fa5f8395fea3ba6fa202a5a38519cd55ae00e0 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2876,6 +2876,7 @@ public abstract class EntityLiving extends Entity { @@ -57,10 +57,10 @@ index 330f27f649a2ab1567ebc1b547f1f2a5ce645055..5f9d8999ae7a1d742918e58c0f1bb36f return false; } diff --git a/src/main/java/net/minecraft/server/EntitySnowman.java b/src/main/java/net/minecraft/server/EntitySnowman.java -index 88eeabeb89fe733c462a667d7564da3b125952a2..2c22447c361962d76e0e18986e5406eb635ab46f 100644 +index eb6344a5671408ae9fdd6013774baa13addf304b..663c6dd23e0aa75266cefc8f0514d2ca9dc51553 100644 --- a/src/main/java/net/minecraft/server/EntitySnowman.java +++ b/src/main/java/net/minecraft/server/EntitySnowman.java -@@ -70,7 +70,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt +@@ -71,7 +71,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt @Override public boolean dO() { @@ -83,7 +83,7 @@ index 964956a0027bf0941ff75d658be760b754772fa0..7c5472a5138011a3376b7b6ec2467bdf @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 200ac6aff09a38198b13d4cb91b5c08fddf83261..2d379971fbe5c90c5e2e518bdae1d2e74f7ebc52 100644 +index 2db8241602382927ae9365a5026451e199f48d36..9973677fb2ebce985b25efddc1015c6d5f0758a8 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -569,6 +569,7 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0170-Config-to-always-tame-in-Creative.patch b/patches/Purpur/patches/server/0166-Config-to-always-tame-in-Creative.patch similarity index 96% rename from patches/Purpur/patches/server/0170-Config-to-always-tame-in-Creative.patch rename to patches/Purpur/patches/server/0166-Config-to-always-tame-in-Creative.patch index da9633de..33b69cd4 100644 --- a/patches/Purpur/patches/server/0170-Config-to-always-tame-in-Creative.patch +++ b/patches/Purpur/patches/server/0166-Config-to-always-tame-in-Creative.patch @@ -46,7 +46,7 @@ index 03bcbf7c280476ef0e6fe87e3a96edb75544bddb..5bf2a3205671a7cb001835ab241c34bc this.navigation.o(); this.setGoalTarget((EntityLiving) null); diff --git a/src/main/java/net/minecraft/server/PathfinderGoalTame.java b/src/main/java/net/minecraft/server/PathfinderGoalTame.java -index fc831dc26eaeab802d5fee456d5c662fe3f8bdfd..76dda6f777fbdf515990651594b5b3fa57cc1f66 100644 +index 8757c6487a433b1fa5c46b50c559aeca82f84b8d..b841f87f9d6b7c9c67e2497607cbd927909c3ddc 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalTame.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalTame.java @@ -58,7 +58,7 @@ public class PathfinderGoalTame extends PathfinderGoal { @@ -59,7 +59,7 @@ index fc831dc26eaeab802d5fee456d5c662fe3f8bdfd..76dda6f777fbdf515990651594b5b3fa return; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2d379971fbe5c90c5e2e518bdae1d2e74f7ebc52..5d1f77c20429f74590d22e9c5dec3f45056664d5 100644 +index 9973677fb2ebce985b25efddc1015c6d5f0758a8..6481f8a964846ee835c2196197bd765d013377a4 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -255,6 +255,7 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0171-End-crystal-explosion-options.patch b/patches/Purpur/patches/server/0167-End-crystal-explosion-options.patch similarity index 97% rename from patches/Purpur/patches/server/0171-End-crystal-explosion-options.patch rename to patches/Purpur/patches/server/0167-End-crystal-explosion-options.patch index 49143400..ec6d2706 100644 --- a/patches/Purpur/patches/server/0171-End-crystal-explosion-options.patch +++ b/patches/Purpur/patches/server/0167-End-crystal-explosion-options.patch @@ -52,10 +52,10 @@ index 1942fae27051af79b6eb1d790a219da100bf889e..0e2f9777fe1b62f8da20bf7559150e1d this.a(damagesource); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 5d1f77c20429f74590d22e9c5dec3f45056664d5..73ff19d8aed27e6717c201ef59b17f4b26056aa4 100644 +index 6481f8a964846ee835c2196197bd765d013377a4..20c4cd5ffe4d132012f1e55401e08cb894b80294 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1911,4 +1911,33 @@ public class PurpurWorldConfig { +@@ -1913,4 +1913,33 @@ public class PurpurWorldConfig { private void imposeTeleportRestrictionsOnGateways() { imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways); } diff --git a/patches/Purpur/patches/server/0172-Add-unsafe-Entity-serialization-API.patch b/patches/Purpur/patches/server/0168-Add-unsafe-Entity-serialization-API.patch similarity index 92% rename from patches/Purpur/patches/server/0172-Add-unsafe-Entity-serialization-API.patch rename to patches/Purpur/patches/server/0168-Add-unsafe-Entity-serialization-API.patch index 78886ad7..ae5fbc45 100644 --- a/patches/Purpur/patches/server/0172-Add-unsafe-Entity-serialization-API.patch +++ b/patches/Purpur/patches/server/0168-Add-unsafe-Entity-serialization-API.patch @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/server/EntityTypes.java b/src/main/java/net/minecraft/server/EntityTypes.java -index 919cf670327bed6faa50f29c9bf7a9b54174f7f2..631eb682e81e30d2a937fd1eafccd8a9ab82d21e 100644 +index 06fe0fca1936853748997c63f325df99da5fa2ee..730b91680b226df624180d64019c2984d0e29422 100644 --- a/src/main/java/net/minecraft/server/EntityTypes.java +++ b/src/main/java/net/minecraft/server/EntityTypes.java -@@ -380,6 +380,7 @@ public class EntityTypes { +@@ -394,6 +394,7 @@ public class EntityTypes { return this.bf.create(this, world); } @@ -29,10 +29,10 @@ index 919cf670327bed6faa50f29c9bf7a9b54174f7f2..631eb682e81e30d2a937fd1eafccd8a9 return SystemUtils.a(a(nbttagcompound).map((entitytypes) -> { return entitytypes.a(world); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index eb0ce05d25ba33626d2dd3e3380d805c560bfe58..7c30064237bd58673de710915b1a9437335a3e8a 100644 +index 4c592f6d4d6cbeb4c3225e7794f4b1d6c8d62394..b441dac8f31b679aa7e36d23848d34e298e6abba 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1185,5 +1185,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1199,5 +1199,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { public boolean isRidableInWater() { return getHandle().isRidableInWater(); } @@ -46,10 +46,10 @@ index eb0ce05d25ba33626d2dd3e3380d805c560bfe58..7c30064237bd58673de710915b1a9437 // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 37c561fb775cf7dd955b185b4ea94fecc574be63..821b8665b4ed70c010a0824df99de2667fd4c8ba 100644 +index 7de7afae711800154735411947ff140c76d5171f..b14e9a2cd6e849fe91a2512f379036a284323420 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -383,9 +383,14 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -390,9 +390,14 @@ public final class CraftMagicNumbers implements UnsafeValues { Preconditions.checkNotNull(item, "null cannot be serialized"); Preconditions.checkArgument(item.getType() != Material.AIR, "air cannot be serialized"); @@ -66,7 +66,7 @@ index 37c561fb775cf7dd955b185b4ea94fecc574be63..821b8665b4ed70c010a0824df99de266 try { net.minecraft.server.NBTCompressedStreamTools.writeNBT( compound, -@@ -398,26 +403,58 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -405,26 +410,58 @@ public final class CraftMagicNumbers implements UnsafeValues { return outputStream.toByteArray(); } @@ -126,4 +126,4 @@ index 37c561fb775cf7dd955b185b4ea94fecc574be63..821b8665b4ed70c010a0824df99de266 + @Override public String getTranslationKey(Material mat) { - return getItem(mat).getOrCreateDescriptionId(); + if (mat.isBlock()) { diff --git a/patches/Purpur/patches/server/0173-Add-ghast-allow-griefing-option.patch b/patches/Purpur/patches/server/0169-Add-ghast-allow-griefing-option.patch similarity index 97% rename from patches/Purpur/patches/server/0173-Add-ghast-allow-griefing-option.patch rename to patches/Purpur/patches/server/0169-Add-ghast-allow-griefing-option.patch index 43bd290d..c5cf04e4 100644 --- a/patches/Purpur/patches/server/0173-Add-ghast-allow-griefing-option.patch +++ b/patches/Purpur/patches/server/0169-Add-ghast-allow-griefing-option.patch @@ -38,7 +38,7 @@ index 3f3be1b2ded6ad118ae7860c1231c7affc0715b6..48174610518af8d053149e609c1b140e // CraftBukkit start - fire ExplosionPrimeEvent ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 73ff19d8aed27e6717c201ef59b17f4b26056aa4..99853bbf5d5a173bb109bfb863476464cb0bee1f 100644 +index 20c4cd5ffe4d132012f1e55401e08cb894b80294..64657c3c9250d8767702a54bb0ee3a23f43da04a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -866,6 +866,7 @@ public class PurpurWorldConfig { diff --git a/patches/Purpur/patches/server/0170-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/Purpur/patches/server/0170-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch new file mode 100644 index 00000000..3ef08444 --- /dev/null +++ b/patches/Purpur/patches/server/0170-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch @@ -0,0 +1,79 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: jmp +Date: Sat, 20 Feb 2021 14:47:08 -0800 +Subject: [PATCH] Configs for if Wither/Ender Dragon can ride vehicles + + +diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java +index 49a1447bae91294a23ccab27c2809bea0c4c90a3..94af972e115491d0f4394dd290ec2d9d426b8d32 100644 +--- a/src/main/java/net/minecraft/server/Entity.java ++++ b/src/main/java/net/minecraft/server/Entity.java +@@ -2274,7 +2274,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + } + } + +- protected boolean n(Entity entity) { ++ protected boolean n(Entity entity) { // Purpur - canRide + return !this.isSneaking() && this.j <= 0; + } + +diff --git a/src/main/java/net/minecraft/server/EntityEnderDragon.java b/src/main/java/net/minecraft/server/EntityEnderDragon.java +index fd019a7d8940150ba776e211fe5f7ecb4ffbc89c..9e27d3ccfd6a5ee00cac72c3137189b1be1f81fb 100644 +--- a/src/main/java/net/minecraft/server/EntityEnderDragon.java ++++ b/src/main/java/net/minecraft/server/EntityEnderDragon.java +@@ -1023,6 +1023,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { + + @Override + protected boolean n(Entity entity) { ++ if (this.world.purpurConfig.enderDragonCanRideVehicles) return this.getRideCooldown() <= 0; // Purpur + return false; + } + +diff --git a/src/main/java/net/minecraft/server/EntityWither.java b/src/main/java/net/minecraft/server/EntityWither.java +index 8679f9f5210632349915558016c3273f5ef0527d..e238352bd41069936da2860b707f071c9aef0062 100644 +--- a/src/main/java/net/minecraft/server/EntityWither.java ++++ b/src/main/java/net/minecraft/server/EntityWither.java +@@ -673,6 +673,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { + + @Override + protected boolean n(Entity entity) { ++ if (this.world.purpurConfig.witherCanRideVehicles) return this.getRideCooldown() <= 0; // Purpur + return false; + } + +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 64657c3c9250d8767702a54bb0ee3a23f43da04a..958b0ee8af21e4176e9d35af88294919c509a2c1 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -773,6 +773,7 @@ public class PurpurWorldConfig { + public boolean enderDragonAlwaysDropsFullExp = false; + public boolean enderDragonBypassMobGriefing = false; + public double enderDragonMaxHealth = 200.0D; ++ public boolean enderDragonCanRideVehicles = false; + private void enderDragonSettings() { + enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); + enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); +@@ -789,6 +790,7 @@ public class PurpurWorldConfig { + set("mobs.ender_dragon.attributes.max_health", oldValue); + } + enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); ++ enderDragonCanRideVehicles = getBoolean("mobs.ender_dragon.can-ride-vehicles", enderDragonCanRideVehicles); + } + + public boolean endermanRidable = false; +@@ -1731,6 +1733,7 @@ public class PurpurWorldConfig { + public float witherHealthRegenAmount = 1.0f; + public int witherHealthRegenDelay = 20; + public double witherMaxHealth = 300.0D; ++ public boolean witherCanRideVehicles = false; + private void witherSettings() { + witherRidable = getBoolean("mobs.wither.ridable", witherRidable); + witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); +@@ -1748,6 +1751,7 @@ public class PurpurWorldConfig { + set("mobs.wither.attributes.max_health", oldValue); + } + witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); ++ witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); + } + + public boolean witherSkeletonRidable = false; diff --git a/patches/Purpur/patches/server/0171-Dont-run-with-scissors.patch b/patches/Purpur/patches/server/0171-Dont-run-with-scissors.patch new file mode 100644 index 00000000..6b4f4596 --- /dev/null +++ b/patches/Purpur/patches/server/0171-Dont-run-with-scissors.patch @@ -0,0 +1,45 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: JustDoom +Date: Fri, 5 Mar 2021 14:23:16 -0500 +Subject: [PATCH] Dont run with scissors! + + +diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java +index f7a031920c68d5d5d505d86ab1b513ac53f5bf84..100ab4ae37a0d71a0d9bc3202802f705e1260ee1 100644 +--- a/src/main/java/net/minecraft/server/PlayerConnection.java ++++ b/src/main/java/net/minecraft/server/PlayerConnection.java +@@ -1388,6 +1388,12 @@ public class PlayerConnection implements PacketListenerPlayIn { + this.player.fallDistance = 0.0F; + } + ++ // Purpur Start ++ if (this.player.isSprinting() && this.player.getWorldServer().purpurConfig.dontRunWithScissors && (this.player.getItemInHand(EnumHand.MAIN_HAND).getItem() == Items.SHEARS || this.player.getItemInHand(EnumHand.OFF_HAND).getItem() == Items.SHEARS) && (int) (Math.random() * 10) == 0) { ++ this.player.damageEntity(net.minecraft.server.DamageSource.MAGIC, (float) this.player.getWorldServer().purpurConfig.scissorsRunningDamage); ++ } ++ // Purpur End ++ + this.player.checkMovement(this.player.locX() - d0, this.player.locY() - d1, this.player.locZ() - d2); + this.o = this.player.locX(); + this.p = this.player.locY(); +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 958b0ee8af21e4176e9d35af88294919c509a2c1..5f14c6c0e62ce5bece342b850e201357314061b2 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -168,6 +168,8 @@ public class PurpurWorldConfig { + public List itemImmuneToCactus = new ArrayList<>(); + public List itemImmuneToExplosion = new ArrayList<>(); + public List itemImmuneToFire = new ArrayList<>(); ++ public boolean dontRunWithScissors = false; ++ public double scissorsRunningDamage = 1D; + private void itemSettings() { + itemImmuneToCactus.clear(); + getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { +@@ -196,6 +198,8 @@ public class PurpurWorldConfig { + Item item = IRegistry.ITEM.get(new MinecraftKey(key.toString())); + if (item != Items.AIR) itemImmuneToFire.add(item); + }); ++ dontRunWithScissors = getBoolean("gameplay-mechanics.item.shears.damage-if-sprinting", dontRunWithScissors); ++ scissorsRunningDamage = getDouble("gameplay-mechanics.item.shears.sprinting-damage", scissorsRunningDamage); + } + + public boolean idleTimeoutKick = true; diff --git a/patches/Purpur/patches/server/0172-One-Punch-Man.patch b/patches/Purpur/patches/server/0172-One-Punch-Man.patch new file mode 100644 index 00000000..dcf9aa99 --- /dev/null +++ b/patches/Purpur/patches/server/0172-One-Punch-Man.patch @@ -0,0 +1,66 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Fourmisain <8464472+Fourmisain@users.noreply.github.com> +Date: Fri, 5 Mar 2021 17:42:35 -0500 +Subject: [PATCH] One Punch Man! + + +diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java +index 50fa5f8395fea3ba6fa202a5a38519cd55ae00e0..c8f23b21cbe8625f7344c118eb62bab7e55e42e2 100644 +--- a/src/main/java/net/minecraft/server/EntityLiving.java ++++ b/src/main/java/net/minecraft/server/EntityLiving.java +@@ -1921,6 +1921,23 @@ public abstract class EntityLiving extends Entity { + ((EntityPlayer) damagesource.getEntity()).a(StatisticList.DAMAGE_DEALT_ABSORBED, Math.round(f2 * 10.0F)); + } + ++ // Purpur start ++ if (damagesource.getEntity().world.purpurConfig.creativeOnePunch && damagesource.getEntity() instanceof EntityHuman) { ++ EntityHuman entityHuman = (EntityHuman) damagesource.getEntity(); ++ if (entityHuman.isCreative()) { ++ double attackDamage = 0; ++ ++ for (AttributeModifier modifier : entityHuman.getItemInMainHand().getAttributeModifiers(EnumItemSlot.MAINHAND).get(GenericAttributes.ATTACK_DAMAGE)) { ++ attackDamage += modifier.getAmount(); ++ } ++ ++ if (attackDamage == 0) { ++ this.setHealth(0); ++ } ++ } ++ } ++ // Purpur end ++ + if (f > 0 || !human) { + if (human) { + // PAIL: Be sure to drag all this code from the EntityHuman subclass each update. +diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java +index 3f9062d8eca3ce53c0fb9e9e40330aa4e3296c9a..47e3ac6bcebacd9c424ddcc49774e06e05f02fe2 100644 +--- a/src/main/java/net/minecraft/server/ItemStack.java ++++ b/src/main/java/net/minecraft/server/ItemStack.java +@@ -842,6 +842,7 @@ public final class ItemStack { + this.getOrCreateTag().setInt("RepairCost", i); + } + ++ public Multimap getAttributeModifiers(EnumItemSlot enumitemslot) { return this.a(enumitemslot); } // Purpur - OBFHELPER + public Multimap a(EnumItemSlot enumitemslot) { + Object object; + +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 5f14c6c0e62ce5bece342b850e201357314061b2..1e7c75c1f8830b5c2660c2cf8aab0167916ff501 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -274,6 +274,7 @@ public class PurpurWorldConfig { + public double voidDamageHeight = -64.0D; + public int raidCooldownSeconds = 0; + public int animalBreedingCooldownSeconds = 0; ++ public boolean creativeOnePunch = false; + private void miscGameplayMechanicsSettings() { + useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); + alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); +@@ -291,6 +292,7 @@ public class PurpurWorldConfig { + voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); + raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); + animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds); ++ creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); + } + + public boolean catSpawning; diff --git a/patches/Purpur/patches/server/0173-Add-config-for-snow-on-blue-ice.patch b/patches/Purpur/patches/server/0173-Add-config-for-snow-on-blue-ice.patch new file mode 100644 index 00000000..bd9867df --- /dev/null +++ b/patches/Purpur/patches/server/0173-Add-config-for-snow-on-blue-ice.patch @@ -0,0 +1,46 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Fri, 5 Mar 2021 17:59:05 -0600 +Subject: [PATCH] Add config for snow on blue ice + + +diff --git a/src/main/java/net/minecraft/server/BlockSnow.java b/src/main/java/net/minecraft/server/BlockSnow.java +index 66f188c9eb6431eedfd655a1dd4a35b5141e7196..21fd6689e1e6e837debc3c39d155402bca084595 100644 +--- a/src/main/java/net/minecraft/server/BlockSnow.java ++++ b/src/main/java/net/minecraft/server/BlockSnow.java +@@ -56,7 +56,18 @@ public class BlockSnow extends Block { + public boolean canPlace(IBlockData iblockdata, IWorldReader iworldreader, BlockPosition blockposition) { + IBlockData iblockdata1 = iworldreader.getType(blockposition.down()); + +- return !iblockdata1.a(Blocks.ICE) && !iblockdata1.a(Blocks.PACKED_ICE) && !iblockdata1.a(Blocks.BARRIER) ? (!iblockdata1.a(Blocks.HONEY_BLOCK) && !iblockdata1.a(Blocks.SOUL_SAND) ? Block.a(iblockdata1.getCollisionShape(iworldreader, blockposition.down()), EnumDirection.UP) || iblockdata1.getBlock() == this && (Integer) iblockdata1.get(BlockSnow.LAYERS) == 8 : true) : false; ++ // Purpur start - rewrite this whole return to make more sense ++ if (iblockdata1.equals(Blocks.ICE) || iblockdata1.equals(Blocks.PACKED_ICE) || iblockdata1.equals(Blocks.BARRIER)) { ++ return false; ++ } ++ if (iblockdata1.equals(Blocks.BLUE_ICE) && !iworldreader.getWorldBorder().world.purpurConfig.snowOnBlueIce) { ++ return false; ++ } ++ if (iblockdata1.equals(Blocks.HONEY_BLOCK) || iblockdata1.equals(Blocks.SOUL_SAND)) { ++ return true; ++ } ++ return Block.a(iblockdata1.getCollisionShape(iworldreader, blockposition.down()), EnumDirection.UP) || iblockdata1.equals(this) && iblockdata1.get(LAYERS) == 8; ++ // Purpur end + } + + @Override +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 1e7c75c1f8830b5c2660c2cf8aab0167916ff501..bf8a842e7c43946c87c8f27afdf364b1475cf44e 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -419,6 +419,11 @@ public class PurpurWorldConfig { + } + } + ++ public boolean snowOnBlueIce = true; ++ private void blueIceSettings() { ++ snowOnBlueIce = getBoolean("blocks.blue_ice.allow-snow-formation", snowOnBlueIce); ++ } ++ + public boolean chestOpenWithBlockOnTop = false; + private void chestSettings() { + chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop); diff --git a/patches/Tuinity/patches/api/0001-Tuinity-POM-Changes.patch b/patches/Tuinity/patches/api/0001-Tuinity-POM-Changes.patch index 9766ed55..96539f34 100644 --- a/patches/Tuinity/patches/api/0001-Tuinity-POM-Changes.patch +++ b/patches/Tuinity/patches/api/0001-Tuinity-POM-Changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Tuinity POM Changes diff --git a/pom.xml b/pom.xml -index 6c6ae6b48094c86c74cd4e9f4214056f63e6ac68..c441d455e2273b63d2cec136872a5025182d75d6 100644 +index ff3894bfa4ddb54b56c28792debaf2218ee3a044..821df3413345c613eccff158f8081cf9ba848a14 100644 --- a/pom.xml +++ b/pom.xml @@ -3,18 +3,18 @@ diff --git a/patches/Tuinity/patches/api/0002-Tuinity-config.patch b/patches/Tuinity/patches/api/0002-Tuinity-config.patch index 5892dc79..93aa13a4 100644 --- a/patches/Tuinity/patches/api/0002-Tuinity-config.patch +++ b/patches/Tuinity/patches/api/0002-Tuinity-config.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Tuinity config API to retrieve raw YamlConfiguration + timing exports diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 8e01e1bbb7cfd98b47dbdb3a0e132dafd1413de6..b45ad8df8b7a44c9e6d12326e5ea85e8d166a16c 100644 +index f3e27d2d02a9407bb1b091b8c1125ad5abf99e55..b3e7b2a8eaa3980e34bc74a846320b7871dc6e4b 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1482,6 +1482,14 @@ public interface Server extends PluginMessageRecipient { +@@ -1595,6 +1595,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi } // Paper end diff --git a/patches/Tuinity/patches/server/0002-Brand-changes.patch b/patches/Tuinity/patches/server/0002-Brand-changes.patch index d6c066da..24f7312d 100644 --- a/patches/Tuinity/patches/server/0002-Brand-changes.patch +++ b/patches/Tuinity/patches/server/0002-Brand-changes.patch @@ -40,10 +40,10 @@ index 550232cb3819138b3bae0fa1c51429485e8bc593..229c3b0f0c650b501f31147adaa17194 throwable = throwable1; throw throwable1; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ccf2d0b090f0c360dfc7886bb0726e099acec42c..95dd6f2034439699399b0f51ab2b761a5747331d 100644 +index c572ef2830f2653e2b30622bbac0a3b072bacd7a..2131f7322640879496692b73fd2a8c52b059ae24 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1450,7 +1450,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant void mergeSortedSets(final java.util.function.Consumer consumer, final java.util.Comparator comparator, final java.util.SortedSet...sets) { final ObjectRBTreeSet all = new ObjectRBTreeSet<>(comparator); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 95dd6f2034439699399b0f51ab2b761a5747331d..c9692b3e50c503affaadd217c166029182def6e4 100644 +index 2131f7322640879496692b73fd2a8c52b059ae24..74f89ea456e23937d0fec14831508365f3014ab0 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -152,6 +152,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; public boolean serverAutoSave = false; // Paper -@@ -969,6 +970,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant iasynctaskhandler, ILightAccess ilightaccess, ChunkGenerator chunkgenerator, WorldLoadListener worldloadlistener, Supplier supplier, int i, boolean flag) { super(new File(convertable_conversionsession.a(worldserver.getDimensionKey()), "region"), datafixer, flag); -@@ -444,6 +459,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -445,6 +460,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { PlayerChunkMap.this.sendChunk(player, new ChunkCoordIntPair(rangeX, rangeZ), null, true, false); // unloaded, loaded }); // Paper end - no-tick view distance @@ -2443,7 +2443,7 @@ index 49008cdec739b19409fdaf1b0ed806a6c0e93200..fb46fdeb22a7c31c8d132bdc80d657ae } // Paper start - Chunk Prioritization public void queueHolderUpdate(PlayerChunk playerchunk) { -@@ -778,6 +796,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -779,6 +797,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { playerchunk.a(j); } else { playerchunk = new PlayerChunk(new ChunkCoordIntPair(i), j, this.lightEngine, this.p, this); @@ -2451,7 +2451,7 @@ index 49008cdec739b19409fdaf1b0ed806a6c0e93200..fb46fdeb22a7c31c8d132bdc80d657ae } this.updatingChunks.put(i, playerchunk); -@@ -1020,7 +1039,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1021,7 +1040,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { if (completablefuture1 != completablefuture) { this.a(i, playerchunk); } else { @@ -2462,7 +2462,7 @@ index 49008cdec739b19409fdaf1b0ed806a6c0e93200..fb46fdeb22a7c31c8d132bdc80d657ae if (ichunkaccess instanceof Chunk) { ((Chunk) ichunkaccess).setLoaded(false); } -@@ -1044,6 +1065,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1045,6 +1066,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.lightEngine.queueUpdate(); this.worldLoadListener.a(ichunkaccess.getPos(), (ChunkStatus) null); } @@ -2470,7 +2470,7 @@ index 49008cdec739b19409fdaf1b0ed806a6c0e93200..fb46fdeb22a7c31c8d132bdc80d657ae } }; -@@ -1710,6 +1732,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1711,6 +1733,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return chunkHolder == null ? null : chunkHolder.getAvailableChunkNow(); } // Paper end diff --git a/patches/Tuinity/patches/server/0005-Tuinity-Server-Config.patch b/patches/Tuinity/patches/server/0005-Tuinity-Server-Config.patch index 20336d1d..08fa449c 100644 --- a/patches/Tuinity/patches/server/0005-Tuinity-Server-Config.patch +++ b/patches/Tuinity/patches/server/0005-Tuinity-Server-Config.patch @@ -262,10 +262,10 @@ index 0000000000000000000000000000000000000000..0f66484a80d3cc7caaf8a111bd50229e +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 5504facd2e453238caa71d98743be5416d4dd4fe..fcba187bbdc1b468cfea2bc922187d9b8959a9d5 100644 +index d4793a1d476d8d6687ec8782501c31265f284daa..617ba6fb85c55967360ca270ee8feeff5acbf8e0 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -169,6 +169,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -175,6 +175,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 @@ -274,10 +274,10 @@ index 5504facd2e453238caa71d98743be5416d4dd4fe..fcba187bbdc1b468cfea2bc922187d9b this.setPVP(dedicatedserverproperties.pvp); this.setAllowFlight(dedicatedserverproperties.allowFlight); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c9692b3e50c503affaadd217c166029182def6e4..7177c1a0cc991916d98c82f025a910fa1e812493 100644 +index 74f89ea456e23937d0fec14831508365f3014ab0..dc8e4a86ddae9ea4dfd62e591523fdc8a6599151 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -953,6 +953,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant list = this.tracker.getPassengers(); + List list = this.tracker.passengers; // Paper - do not copy list if (!list.equals(this.p)) { diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index fb46fdeb22a7c31c8d132bdc80d657ae82c191be..2be8c1b7974f3f6271be60872d45123ba9743672 100644 +index 2630de4a807062f1c455352801c65567e7e86208..fc1138b3be832231b075151518a2493e1623ddfc 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -200,6 +200,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -201,6 +201,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Paper end - no-tick view distance void addPlayerToDistanceMaps(EntityPlayer player) { @@ -235,7 +235,7 @@ index fb46fdeb22a7c31c8d132bdc80d657ae82c191be..2be8c1b7974f3f6271be60872d45123b 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 -@@ -230,6 +231,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -231,6 +232,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } void removePlayerFromDistanceMaps(EntityPlayer player) { @@ -243,7 +243,7 @@ index fb46fdeb22a7c31c8d132bdc80d657ae82c191be..2be8c1b7974f3f6271be60872d45123b // 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); -@@ -247,6 +249,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -248,6 +250,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } void updateMaps(EntityPlayer player) { @@ -251,7 +251,7 @@ index fb46fdeb22a7c31c8d132bdc80d657ae82c191be..2be8c1b7974f3f6271be60872d45123b 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 -@@ -774,6 +777,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -775,6 +778,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { @Nullable private PlayerChunk a(long i, int j, @Nullable PlayerChunk playerchunk, int k) { @@ -259,7 +259,7 @@ index fb46fdeb22a7c31c8d132bdc80d657ae82c191be..2be8c1b7974f3f6271be60872d45123b if (k > PlayerChunkMap.GOLDEN_TICKET && j > PlayerChunkMap.GOLDEN_TICKET) { return playerchunk; } else { -@@ -1081,6 +1085,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1082,6 +1086,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } protected boolean b() { @@ -267,7 +267,7 @@ index fb46fdeb22a7c31c8d132bdc80d657ae82c191be..2be8c1b7974f3f6271be60872d45123b if (!this.updatingChunksModified) { return false; } else { -@@ -1520,6 +1525,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1521,6 +1526,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } public void setViewDistance(int i) { // Paper - public @@ -275,7 +275,7 @@ index fb46fdeb22a7c31c8d132bdc80d657ae82c191be..2be8c1b7974f3f6271be60872d45123b 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) { -@@ -1533,6 +1539,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1534,6 +1540,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Paper start - no-tick view distance public final void setNoTickViewDistance(int viewDistance) { diff --git a/patches/Tuinity/patches/server/0009-Delay-chunk-unloads.patch b/patches/Tuinity/patches/server/0009-Delay-chunk-unloads.patch index 13981bb2..4958ff10 100644 --- a/patches/Tuinity/patches/server/0009-Delay-chunk-unloads.patch +++ b/patches/Tuinity/patches/server/0009-Delay-chunk-unloads.patch @@ -247,10 +247,10 @@ index 5c789b25f1df2eae8ea8ceb4ba977ba336fe6d5e..ab0417b3897911ba29602d696f4842bf return new TicketType<>(s, comparator, 0L); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 22eba9372d334c65d009721e808c958dfc271308..a5e2c7924580489c19e7c80536feb0f96df55d71 100644 +index cade3ed6079011f44eba613dece3d69ec18f8f04..3c7e3db06be46b20c417b7ef36a17affa4c6ef78 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -504,6 +504,7 @@ public class CraftWorld implements World { +@@ -505,6 +505,7 @@ public class CraftWorld implements World { org.spigotmc.AsyncCatcher.catchOp("chunk unload"); // Spigot if (isChunkLoaded(x, z)) { world.getChunkProvider().removeTicket(TicketType.PLUGIN, new ChunkCoordIntPair(x, z), 0, Unit.INSTANCE); // Paper diff --git a/patches/Tuinity/patches/server/0011-Lag-compensate-block-breaking.patch b/patches/Tuinity/patches/server/0011-Lag-compensate-block-breaking.patch index 9af804fc..0844293a 100644 --- a/patches/Tuinity/patches/server/0011-Lag-compensate-block-breaking.patch +++ b/patches/Tuinity/patches/server/0011-Lag-compensate-block-breaking.patch @@ -23,10 +23,10 @@ index 7b12e7610444ff20f2c3f458887bd7d4e6715036..994c735958dc0ee0dfd8c28820fcd4f5 public final String worldName; diff --git a/src/main/java/net/minecraft/server/PlayerInteractManager.java b/src/main/java/net/minecraft/server/PlayerInteractManager.java -index 114e986e5132e5e4bb42d0f08a067429bce53ba6..05656ea8448aa569e8dd480461e2d5f70d01568b 100644 +index d57784c5dd44cc110b7c863ffff82263178e7d9a..967443a44106563fe71a528703751ff00415f61a 100644 --- a/src/main/java/net/minecraft/server/PlayerInteractManager.java +++ b/src/main/java/net/minecraft/server/PlayerInteractManager.java -@@ -21,14 +21,29 @@ public class PlayerInteractManager { +@@ -22,14 +22,29 @@ public class PlayerInteractManager { private EnumGamemode gamemode; private EnumGamemode e; private boolean f; @@ -59,7 +59,7 @@ index 114e986e5132e5e4bb42d0f08a067429bce53ba6..05656ea8448aa569e8dd480461e2d5f7 public PlayerInteractManager(WorldServer worldserver) { this.gamemode = EnumGamemode.NOT_SET; this.e = EnumGamemode.NOT_SET; -@@ -84,7 +99,7 @@ public class PlayerInteractManager { +@@ -85,7 +100,7 @@ public class PlayerInteractManager { if (iblockdata == null || iblockdata.isAir()) { // Paper this.j = false; } else { @@ -68,7 +68,7 @@ index 114e986e5132e5e4bb42d0f08a067429bce53ba6..05656ea8448aa569e8dd480461e2d5f7 if (f >= 1.0F) { this.j = false; -@@ -104,7 +119,7 @@ public class PlayerInteractManager { +@@ -105,7 +120,7 @@ public class PlayerInteractManager { this.m = -1; this.f = false; } else { @@ -77,7 +77,7 @@ index 114e986e5132e5e4bb42d0f08a067429bce53ba6..05656ea8448aa569e8dd480461e2d5f7 } } -@@ -112,6 +127,12 @@ public class PlayerInteractManager { +@@ -113,6 +128,12 @@ public class PlayerInteractManager { private float a(IBlockData iblockdata, BlockPosition blockposition, int i) { int j = this.currentTick - i; @@ -90,7 +90,7 @@ index 114e986e5132e5e4bb42d0f08a067429bce53ba6..05656ea8448aa569e8dd480461e2d5f7 float f = iblockdata.getDamage(this.player, this.player.world, blockposition) * (float) (j + 1); int k = (int) (f * 10.0F); -@@ -179,7 +200,7 @@ public class PlayerInteractManager { +@@ -180,7 +201,7 @@ public class PlayerInteractManager { return; } @@ -99,7 +99,7 @@ index 114e986e5132e5e4bb42d0f08a067429bce53ba6..05656ea8448aa569e8dd480461e2d5f7 float f = 1.0F; iblockdata = this.world.getType(blockposition); -@@ -232,12 +253,12 @@ public class PlayerInteractManager { +@@ -233,12 +254,12 @@ public class PlayerInteractManager { int j = (int) (f * 10.0F); this.world.a(this.player.getId(), blockposition, j); @@ -114,7 +114,7 @@ index 114e986e5132e5e4bb42d0f08a067429bce53ba6..05656ea8448aa569e8dd480461e2d5f7 iblockdata = this.world.getType(blockposition); if (!iblockdata.isAir()) { -@@ -254,12 +275,18 @@ public class PlayerInteractManager { +@@ -255,12 +276,18 @@ public class PlayerInteractManager { this.f = false; this.j = true; this.k = blockposition; @@ -134,7 +134,7 @@ index 114e986e5132e5e4bb42d0f08a067429bce53ba6..05656ea8448aa569e8dd480461e2d5f7 } else if (packetplayinblockdig_enumplayerdigtype == PacketPlayInBlockDig.EnumPlayerDigType.ABORT_DESTROY_BLOCK) { this.f = false; if (!Objects.equals(this.h, blockposition) && !BlockPosition.ZERO.equals(this.h)) { -@@ -271,7 +298,7 @@ public class PlayerInteractManager { +@@ -272,7 +299,7 @@ public class PlayerInteractManager { } this.world.a(this.player.getId(), blockposition, -1); @@ -143,7 +143,7 @@ index 114e986e5132e5e4bb42d0f08a067429bce53ba6..05656ea8448aa569e8dd480461e2d5f7 } } -@@ -281,7 +308,13 @@ public class PlayerInteractManager { +@@ -282,7 +309,13 @@ public class PlayerInteractManager { public void a(BlockPosition blockposition, PacketPlayInBlockDig.EnumPlayerDigType packetplayinblockdig_enumplayerdigtype, String s) { if (this.breakBlock(blockposition)) { diff --git a/patches/Tuinity/patches/server/0013-Per-World-Spawn-Limits.patch b/patches/Tuinity/patches/server/0013-Per-World-Spawn-Limits.patch index 88bed567..c53d62c5 100644 --- a/patches/Tuinity/patches/server/0013-Per-World-Spawn-Limits.patch +++ b/patches/Tuinity/patches/server/0013-Per-World-Spawn-Limits.patch @@ -34,10 +34,10 @@ index 994c735958dc0ee0dfd8c28820fcd4f50057aad0..a302cda14aa2dd6550cca03b07be21cd } \ No newline at end of file diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index a5e2c7924580489c19e7c80536feb0f96df55d71..506d14966fd8fd91fa26274537a2cb7b5bb9fdf1 100644 +index 3c7e3db06be46b20c417b7ef36a17affa4c6ef78..80944242cb0c16a7b2b1c6b193656e78c2e58dd5 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -341,6 +341,14 @@ public class CraftWorld implements World { +@@ -342,6 +342,14 @@ public class CraftWorld implements World { this.generator = gen; environment = env; diff --git a/patches/Tuinity/patches/server/0014-Detail-more-information-in-watchdog-dumps.patch b/patches/Tuinity/patches/server/0014-Detail-more-information-in-watchdog-dumps.patch index 4056f206..f8dbba88 100644 --- a/patches/Tuinity/patches/server/0014-Detail-more-information-in-watchdog-dumps.patch +++ b/patches/Tuinity/patches/server/0014-Detail-more-information-in-watchdog-dumps.patch @@ -7,7 +7,7 @@ Subject: [PATCH] Detail more information in watchdog dumps - Dump player name, player uuid, position, and world for packet handling diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 0b25e0a4d050e77fa2fabd4e389d4ce693431aca..7690b5a8b0c595d664f88d161f5da7932d9fa034 100644 +index 6eee9c858dffad0bb0ce06d850deec0725789c9f..32dadb91a30b67202a463cf5c9abc998efecad80 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -599,7 +599,39 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -91,8 +91,27 @@ index 0b25e0a4d050e77fa2fabd4e389d4ce693431aca..7690b5a8b0c595d664f88d161f5da793 int i = MathHelper.floor(d0); int j = MathHelper.floor(d1); int k = MathHelper.floor(d2); +diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java +index fb1e3c705b8abee13695762cdfd0e9f1bfdb5ad8..ed9c06c91a3ee77dad6e616cf28a34a4177ce6e3 100644 +--- a/src/main/java/net/minecraft/server/NetworkManager.java ++++ b/src/main/java/net/minecraft/server/NetworkManager.java +@@ -387,7 +387,14 @@ public class NetworkManager extends SimpleChannelInboundHandler> { + } + + if (this.packetListener instanceof PlayerConnection) { ++ // Tuinity start - detailed watchdog information ++ PlayerConnectionUtils.packetProcessing.push(this.packetListener); ++ try { ++ // Tuinity end - detailed watchdog information + ((PlayerConnection) this.packetListener).tick(); ++ } finally { // Tuinity start - detailed watchdog information ++ PlayerConnectionUtils.packetProcessing.pop(); ++ } // Tuinity start - detailed watchdog information + } + + if (this.channel != null) { diff --git a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java -index 8c7080777b370f97e1291dfedde5b419290f39cc..7fff1b3e4eda519851b714502d33122c1e408009 100644 +index 8c7080777b370f97e1291dfedde5b419290f39cc..8112b01f15c33f50fe5ec9aebf75d8091d440994 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 { @@ -100,8 +119,8 @@ index 8c7080777b370f97e1291dfedde5b419290f39cc..7fff1b3e4eda519851b714502d33122c } + // 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(); ++ static final java.util.concurrent.ConcurrentLinkedDeque packetProcessing = new java.util.concurrent.ConcurrentLinkedDeque<>(); ++ static final java.util.concurrent.atomic.AtomicLong totalMainThreadPacketsProcessed = new java.util.concurrent.atomic.AtomicLong(); + + public static long getTotalProcessedPackets() { + return totalMainThreadPacketsProcessed.get(); @@ -183,47 +202,59 @@ index e285038154d83cbf0d7c0b6b8a247c11b9e20119..97a9a201a055520a7ab92b3ecc8987eb public void a(Entity entity, Entity entity1) { diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index ae8903ee1decd22e2ad6138f29fbc757b807e0a7..58d01c6f8abcd9e1792495abd08b186f9d03f834 100644 +index ae8903ee1decd22e2ad6138f29fbc757b807e0a7..089ddda8892c3660c5dcb62d0fd56544857a2eba 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java -@@ -65,6 +65,84 @@ public class WatchdogThread extends Thread +@@ -65,6 +65,78 @@ public class WatchdogThread extends Thread } } + // Tuinity start - log detailed tick information ++ private void dumpEntity(net.minecraft.server.Entity entity) { ++ Logger log = Bukkit.getServer().getLogger(); ++ 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 + ", entity class: " + entity.getClass().getName()); ++ log.log(Level.SEVERE, "Entity status: dead: " + entity.dead + ", valid: " + entity.valid + ", alive: " + entity.isAlive() + ", is passenger: " + entity.isPassenger()); ++ log.log(Level.SEVERE, "Entity UUID: " + entityUUID); ++ log.log(Level.SEVERE, "Position: world: '" + (world == null ? "unknown world?" : world.getWorld().getName()) + "' at location (" + posX + ", " + posY + ", " + posZ + ")"); ++ log.log(Level.SEVERE, "Velocity: " + (mot == null ? "unknown velocity" : mot.toString()) + " (in blocks per tick)"); ++ log.log(Level.SEVERE, "Entity AABB: " + entity.getBoundingBox()); ++ 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()); ++ } ++ } ++ + 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(); ++ this.dumpEntity(entity); ++ net.minecraft.server.Entity vehicle = entity.getVehicle(); ++ if (vehicle != null) { ++ log.log(Level.SEVERE, "Detailing vehicle for above entity:"); ++ this.dumpEntity(vehicle); + } -+ -+ 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.getWorld().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 @@ -232,32 +263,14 @@ index ae8903ee1decd22e2ad6138f29fbc757b807e0a7..58d01c6f8abcd9e1792495abd08b186f + 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, "Handling packet for player connection or ticking 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.getWorld().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()); ++ this.dumpEntity(player); ++ net.minecraft.server.Entity vehicle = player.getVehicle(); ++ if (vehicle != null) { ++ log.log(Level.SEVERE, "Detailing vehicle for above entity:"); ++ this.dumpEntity(vehicle); + } + log.log(Level.SEVERE, "Total packets processed on the main thread for all players: " + totalPackets); + } @@ -271,7 +284,7 @@ index ae8903ee1decd22e2ad6138f29fbc757b807e0a7..58d01c6f8abcd9e1792495abd08b186f @Override public void run() { -@@ -121,6 +199,7 @@ public class WatchdogThread extends Thread +@@ -121,6 +193,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 diff --git a/patches/Tuinity/patches/server/0015-Execute-chunk-tasks-mid-tick.patch b/patches/Tuinity/patches/server/0015-Execute-chunk-tasks-mid-tick.patch index 2e156eeb..48cc592b 100644 --- a/patches/Tuinity/patches/server/0015-Execute-chunk-tasks-mid-tick.patch +++ b/patches/Tuinity/patches/server/0015-Execute-chunk-tasks-mid-tick.patch @@ -101,10 +101,10 @@ index 4082c4f366bce1784759bda773d3d35472403ade..7bb23731b548d5344013429a7d7df136 @Override protected boolean executeNext() { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 7177c1a0cc991916d98c82f025a910fa1e812493..0fc9b6356165fbee30d765dacc3586c2f8a4ba00 100644 +index dc8e4a86ddae9ea4dfd62e591523fdc8a6599151..b96ffaab1253a8f1bd36f542865feeaebeadbff5 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -986,7 +986,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant { @@ -231,7 +231,7 @@ index 7177c1a0cc991916d98c82f025a910fa1e812493..0fc9b6356165fbee30d765dacc3586c2 return !this.canOversleep(); }); isOversleep = false;MinecraftTimings.serverOversleep.stopTiming(); -@@ -1292,16 +1348,16 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant> { diff --git a/patches/Tuinity/patches/server/0020-Make-CallbackExecutor-strict-again.patch b/patches/Tuinity/patches/server/0020-Make-CallbackExecutor-strict-again.patch index 65a45258..ead8baec 100644 --- a/patches/Tuinity/patches/server/0020-Make-CallbackExecutor-strict-again.patch +++ b/patches/Tuinity/patches/server/0020-Make-CallbackExecutor-strict-again.patch @@ -35,10 +35,10 @@ index c8c4d4f3d5a0ca6255473f3f256eeb32f18a9984..e1a17abda657c7eb7aee7cd0763bcb48 } catch (Throwable thr) { if (thr instanceof ThreadDeath) { diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 75fba9065ef178207e964e3e5516fa81743fc88c..5c7fb3cb21478ff6a88e47d1e63c9baba4a8d5e7 100644 +index 394029b8b2e0e35f7ada9016c53698cc6164eccb..cd8921c41b2e275746fe63e107fcf52fa39c9e9b 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -121,31 +121,28 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -122,31 +122,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 { diff --git a/patches/Tuinity/patches/server/0021-Optimise-entity-hard-collision-checking.patch b/patches/Tuinity/patches/server/0021-Optimise-entity-hard-collision-checking.patch index 5d697967..ac4a9644 100644 --- a/patches/Tuinity/patches/server/0021-Optimise-entity-hard-collision-checking.patch +++ b/patches/Tuinity/patches/server/0021-Optimise-entity-hard-collision-checking.patch @@ -90,7 +90,7 @@ index 3bcd63a754538ccfc5965207a8fc79faa31925c0..dface62144bb230c576e9eafad1016d1 } if (entity instanceof EntityItem) { diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 7690b5a8b0c595d664f88d161f5da7932d9fa034..eff1f15e0e776f987e692505abb28a3c7998e883 100644 +index 32dadb91a30b67202a463cf5c9abc998efecad80..4c67a767e65b8a76c5f5a267d0b4ddf28494bc55 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -230,6 +230,41 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke diff --git a/patches/Tuinity/patches/server/0025-Highly-optimise-single-and-multi-AABB-VoxelShapes-an.patch b/patches/Tuinity/patches/server/0025-Highly-optimise-single-and-multi-AABB-VoxelShapes-an.patch index c847c05d..66656566 100644 --- a/patches/Tuinity/patches/server/0025-Highly-optimise-single-and-multi-AABB-VoxelShapes-an.patch +++ b/patches/Tuinity/patches/server/0025-Highly-optimise-single-and-multi-AABB-VoxelShapes-an.patch @@ -614,7 +614,7 @@ index 95ef96286855624590b72d69514b0fc0e08fddba..73163b417af7e522a4509bf9c1ab56d6 T t0 = this.h.a(this.a.a(i)); diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index eff1f15e0e776f987e692505abb28a3c7998e883..fc2c4d127ec2eecfcec681fbe9599b72b09b078a 100644 +index 4c67a767e65b8a76c5f5a267d0b4ddf28494bc55..99b01cb35e2af2d61688b0b10ad1c655b9f2e4c3 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -136,7 +136,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -936,10 +936,10 @@ index 2371557d083446b17ffebdae576b1cc39e939eb1..e79e773f2219f9a9ae076fcbc8108b79 0, 2, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue(), diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 0fc9b6356165fbee30d765dacc3586c2f8a4ba00..b75cc467809250b8dbe98e57c69e5378583a28c5 100644 +index b96ffaab1253a8f1bd36f542865feeaebeadbff5..29e7b4aa6e94566d446221cd28c2f60fdb3fccab 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1322,6 +1322,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant this.e() && axisalignedbb.minX < this.g() && axisalignedbb.maxZ > this.f() && axisalignedbb.minZ < this.h(); } @@ -1433,7 +1433,7 @@ index f011869880fedae4b69e505491e8bdbc5f51dfba..0d10d317cd0b60fc0866ae505c7fd71f public VoxelShape c() { return this.j.m(); } -@@ -67,18 +115,22 @@ public class WorldBorder { +@@ -70,18 +118,22 @@ public class WorldBorder { return Math.min(d6, d3); } diff --git a/patches/Tuinity/patches/server/0026-Reduce-allocation-rate-from-crammed-entities.patch b/patches/Tuinity/patches/server/0026-Reduce-allocation-rate-from-crammed-entities.patch index 8e197058..dada4c27 100644 --- a/patches/Tuinity/patches/server/0026-Reduce-allocation-rate-from-crammed-entities.patch +++ b/patches/Tuinity/patches/server/0026-Reduce-allocation-rate-from-crammed-entities.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Reduce allocation rate from crammed entities diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index b7a362bd9c5e9dae909b863335bae3a94d404a16..87b66c284208f12e9e7cd1c9950ada8d0fbf26a5 100644 +index 9a79371b40803947ed5deef68c50d45683aaae52..d568db532de83a85d5c387121cec151c160f36bf 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -2879,7 +2879,11 @@ public abstract class EntityLiving extends Entity { diff --git a/patches/Tuinity/patches/server/0028-Use-entity-ticking-chunk-map-for-entity-tracker.patch b/patches/Tuinity/patches/server/0028-Use-entity-ticking-chunk-map-for-entity-tracker.patch index acddc530..9edcdbfa 100644 --- a/patches/Tuinity/patches/server/0028-Use-entity-ticking-chunk-map-for-entity-tracker.patch +++ b/patches/Tuinity/patches/server/0028-Use-entity-ticking-chunk-map-for-entity-tracker.patch @@ -7,10 +7,10 @@ Should bring us back in-line with tracker performance before the loaded entity list reversion. diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 5c7fb3cb21478ff6a88e47d1e63c9baba4a8d5e7..4c57c9999960f7c4467407a7d5102476a3a9305c 100644 +index cd8921c41b2e275746fe63e107fcf52fa39c9e9b..a6f7ae34a30fb3007bee3c8031a950a2a9026178 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -2068,22 +2068,25 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2069,22 +2069,25 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private final void processTrackQueue() { this.world.timings.tracker1.startTiming(); try { diff --git a/patches/Tuinity/patches/server/0029-Improve-paper-prevent-moving-into-unloaded-chunk-che.patch b/patches/Tuinity/patches/server/0029-Improve-paper-prevent-moving-into-unloaded-chunk-che.patch index ec3720f8..2f54ff37 100644 --- a/patches/Tuinity/patches/server/0029-Improve-paper-prevent-moving-into-unloaded-chunk-che.patch +++ b/patches/Tuinity/patches/server/0029-Improve-paper-prevent-moving-into-unloaded-chunk-che.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Improve paper prevent moving into unloaded chunk check Check the AABB of the move diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 87b1ff21957d5d708209257e569785aeaf191181..f1be42b5f1d0eb403e6895e8ff1d106861fa4298 100644 +index 3435eb1584546d2963324372ddab1645dcf6327a..8871e9dbbfe7e815012b914d930aeeed4c602d67 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -419,7 +419,9 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -423,7 +423,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 @@ -20,7 +20,7 @@ index 87b1ff21957d5d708209257e569785aeaf191181..f1be42b5f1d0eb403e6895e8ff1d1068 this.networkManager.sendPacket(new PacketPlayOutVehicleMove(entity)); return; } -@@ -1138,7 +1140,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1142,7 +1144,7 @@ public class PlayerConnection implements PacketListenerPlayIn { speed = player.abilities.walkSpeed * 10f; } // Paper start - Prevent moving into unloaded chunks diff --git a/patches/Tuinity/patches/server/0030-Improve-async-tp-to-not-load-chunks-when-crossing-wo.patch b/patches/Tuinity/patches/server/0030-Improve-async-tp-to-not-load-chunks-when-crossing-wo.patch index 8bbbad23..4a5409c1 100644 --- a/patches/Tuinity/patches/server/0030-Improve-async-tp-to-not-load-chunks-when-crossing-wo.patch +++ b/patches/Tuinity/patches/server/0030-Improve-async-tp-to-not-load-chunks-when-crossing-wo.patch @@ -7,10 +7,10 @@ Fixes an issue where a getCubes call would load neighbouring chunks. Loads less chunks than paper's implementation diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 475dc1aa2cba77c13033938e719a66707f358914..a6d849facba1526ae2a2b7f3fb9a140d0b50289c 100644 +index 2fc101869775711533a1e50f9ae608cd74d36d3a..2af3bee540ee25ea32a7548fd0d64dea16a0a268 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -508,27 +508,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -509,27 +509,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { entity.setHeadRotation(yaw); } @@ -39,7 +39,7 @@ index 475dc1aa2cba77c13033938e719a66707f358914..a6d849facba1526ae2a2b7f3fb9a140d @Override public boolean teleport(Location location) { -@@ -562,6 +542,37 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -563,6 +543,37 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return true; } diff --git a/patches/Tuinity/patches/server/0031-Revert-getChunkAt-Async-retaining-chunks-for-long-pe.patch b/patches/Tuinity/patches/server/0031-Revert-getChunkAt-Async-retaining-chunks-for-long-pe.patch index 29c16a9c..630aa81f 100644 --- a/patches/Tuinity/patches/server/0031-Revert-getChunkAt-Async-retaining-chunks-for-long-pe.patch +++ b/patches/Tuinity/patches/server/0031-Revert-getChunkAt-Async-retaining-chunks-for-long-pe.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Revert getChunkAt(Async) retaining chunks for long periods of diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 506d14966fd8fd91fa26274537a2cb7b5bb9fdf1..20b0b7d9ad095622fa7ad6dd02c4c3f248672cf0 100644 +index 80944242cb0c16a7b2b1c6b193656e78c2e58dd5..eb90c0802e3ca344885ee14fd852e963a66f5f33 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -422,14 +422,7 @@ public class CraftWorld implements World { +@@ -423,14 +423,7 @@ public class CraftWorld implements World { @Override public Chunk getChunkAt(int x, int z) { @@ -25,7 +25,7 @@ index 506d14966fd8fd91fa26274537a2cb7b5bb9fdf1..20b0b7d9ad095622fa7ad6dd02c4c3f2 } // Paper start -@@ -2576,7 +2569,7 @@ public class CraftWorld implements World { +@@ -2590,7 +2583,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); diff --git a/patches/Tuinity/patches/server/0032-Rework-PlayerChunk-main-thread-checks.patch b/patches/Tuinity/patches/server/0032-Rework-PlayerChunk-main-thread-checks.patch index ecbc49fe..8ceedf47 100644 --- a/patches/Tuinity/patches/server/0032-Rework-PlayerChunk-main-thread-checks.patch +++ b/patches/Tuinity/patches/server/0032-Rework-PlayerChunk-main-thread-checks.patch @@ -74,10 +74,10 @@ index b03865a932d341ae2fdad6c9447979fa9e95fc14..9a321c8a0a357ca1fd47d0c7fe4fe7af 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 4c57c9999960f7c4467407a7d5102476a3a9305c..68a0865fb2ef38f3bd2acc648855567a1d39ccc1 100644 +index a6f7ae34a30fb3007bee3c8031a950a2a9026178..997e0a6e67966645ab386ca050439b1f3dd3177e 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -1270,7 +1270,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1271,7 +1271,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } // Paper end this.mailboxWorldGen.a(ChunkTaskQueueSorter.a(playerchunk, runnable)); diff --git a/patches/Tuinity/patches/server/0035-Optimise-collision-checking-in-player-move-packet-ha.patch b/patches/Tuinity/patches/server/0035-Optimise-collision-checking-in-player-move-packet-ha.patch index fbb0186a..5bd73248 100644 --- a/patches/Tuinity/patches/server/0035-Optimise-collision-checking-in-player-move-packet-ha.patch +++ b/patches/Tuinity/patches/server/0035-Optimise-collision-checking-in-player-move-packet-ha.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimise collision checking in player move packet handling Move collision logic to just the hasNewCollision call instead of getCubes + hasNewCollision diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index f1be42b5f1d0eb403e6895e8ff1d106861fa4298..4185ec46435ddf48d9e25c4d71ac4e14eb6301cf 100644 +index 8871e9dbbfe7e815012b914d930aeeed4c602d67..9146b60cff0aa06e2f6b6003bfe9e2be9d2f0d56 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -434,12 +434,14 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -438,12 +438,14 @@ public class PlayerConnection implements PacketListenerPlayIn { return; } @@ -25,7 +25,7 @@ index f1be42b5f1d0eb403e6895e8ff1d106861fa4298..4185ec46435ddf48d9e25c4d71ac4e14 double d11 = d7; d6 = d3 - entity.locX(); -@@ -453,16 +455,25 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -457,16 +459,25 @@ public class PlayerConnection implements PacketListenerPlayIn { boolean flag1 = false; if (d10 > org.spigotmc.SpigotConfig.movedWronglyThreshold) { // Spigot @@ -55,7 +55,7 @@ index f1be42b5f1d0eb403e6895e8ff1d106861fa4298..4185ec46435ddf48d9e25c4d71ac4e14 entity.setLocation(d0, d1, d2, f, f1); player.setLocation(d0, d1, d2, this.player.yaw, this.player.pitch); // CraftBukkit this.networkManager.sendPacket(new PacketPlayOutVehicleMove(entity)); -@@ -548,7 +559,32 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -552,7 +563,32 @@ public class PlayerConnection implements PacketListenerPlayIn { } private boolean a(Entity entity) { @@ -89,7 +89,7 @@ index f1be42b5f1d0eb403e6895e8ff1d106861fa4298..4185ec46435ddf48d9e25c4d71ac4e14 } @Override -@@ -1070,7 +1106,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1074,7 +1110,7 @@ public class PlayerConnection implements PacketListenerPlayIn { } if (this.teleportPos != null) { @@ -98,7 +98,7 @@ index f1be42b5f1d0eb403e6895e8ff1d106861fa4298..4185ec46435ddf48d9e25c4d71ac4e14 this.A = this.e; this.a(this.teleportPos.x, this.teleportPos.y, this.teleportPos.z, this.player.yaw, this.player.pitch); } -@@ -1157,7 +1193,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1161,7 +1197,7 @@ public class PlayerConnection implements PacketListenerPlayIn { } } @@ -107,7 +107,7 @@ index f1be42b5f1d0eb403e6895e8ff1d106861fa4298..4185ec46435ddf48d9e25c4d71ac4e14 d7 = d4 - this.o; d8 = d5 - this.p; -@@ -1196,6 +1232,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1200,6 +1236,7 @@ public class PlayerConnection implements PacketListenerPlayIn { } this.player.move(EnumMoveType.PLAYER, new Vec3D(d7, d8, d9)); @@ -115,7 +115,7 @@ index f1be42b5f1d0eb403e6895e8ff1d106861fa4298..4185ec46435ddf48d9e25c4d71ac4e14 this.player.setOnGround(packetplayinflying.b()); // CraftBukkit - SPIGOT-5810, SPIGOT-5835: reset by this.player.move // Paper start - prevent position desync if (this.teleportPos != null) { -@@ -1215,12 +1252,23 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1219,12 +1256,23 @@ public class PlayerConnection implements PacketListenerPlayIn { boolean flag1 = false; if (!this.player.H() && d11 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.playerInteractManager.isCreative() && this.player.playerInteractManager.getGameMode() != EnumGamemode.SPECTATOR) { // Spigot @@ -141,7 +141,7 @@ index f1be42b5f1d0eb403e6895e8ff1d106861fa4298..4185ec46435ddf48d9e25c4d71ac4e14 this.a(d0, d1, d2, f, f1); } else { // CraftBukkit start - fire PlayerMoveEvent -@@ -1307,6 +1355,26 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1311,6 +1359,26 @@ public class PlayerConnection implements PacketListenerPlayIn { } } diff --git a/patches/Tuinity/patches/server/0037-Separate-lookup-locking-from-state-access-in-UserCac.patch b/patches/Tuinity/patches/server/0037-Separate-lookup-locking-from-state-access-in-UserCac.patch index 48f8b8a1..2ad3a800 100644 --- a/patches/Tuinity/patches/server/0037-Separate-lookup-locking-from-state-access-in-UserCac.patch +++ b/patches/Tuinity/patches/server/0037-Separate-lookup-locking-from-state-access-in-UserCac.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Separate lookup locking from state access in UserCache Prevent lookups from stalling simple state access/write calls diff --git a/src/main/java/net/minecraft/server/UserCache.java b/src/main/java/net/minecraft/server/UserCache.java -index aa1b18ffa1e2b7f865f63b7df81d8f3b3d5aa966..3f9ba8ef2ae4f870c1567454fcb6678895a5094a 100644 +index 8c3aa47a28914fd69a7f2e55a8c8f91d8e02371e..afc2ddf519cf4930663f1859b8ce89a7b825f332 100644 --- a/src/main/java/net/minecraft/server/UserCache.java +++ b/src/main/java/net/minecraft/server/UserCache.java @@ -49,6 +49,11 @@ public class UserCache { @@ -80,7 +80,7 @@ index aa1b18ffa1e2b7f865f63b7df81d8f3b3d5aa966..3f9ba8ef2ae4f870c1567454fcb66788 } // Paper start -@@ -287,7 +300,9 @@ public class UserCache { +@@ -288,7 +301,9 @@ public class UserCache { } private Stream a(int i) { diff --git a/patches/Tuinity/patches/server/0043-Do-not-allow-ticket-level-changes-while-unloading-pl.patch b/patches/Tuinity/patches/server/0043-Do-not-allow-ticket-level-changes-while-unloading-pl.patch index 76b949a3..8cca29ed 100644 --- a/patches/Tuinity/patches/server/0043-Do-not-allow-ticket-level-changes-while-unloading-pl.patch +++ b/patches/Tuinity/patches/server/0043-Do-not-allow-ticket-level-changes-while-unloading-pl.patch @@ -20,10 +20,10 @@ index 0e5e7a321dc7066444d92387968a7c41cb3a8470..ce0bb4d228a73d8353d67828529879e1 boolean flag = this.chunkMapDistance.a(this.playerChunkMap); boolean flag1 = this.playerChunkMap.b(); diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 68a0865fb2ef38f3bd2acc648855567a1d39ccc1..83f070229098ad31b8ae65ffcebe52886ef2884d 100644 +index 997e0a6e67966645ab386ca050439b1f3dd3177e..32c384dad5201987fe2545526efa6551e538e388 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -775,6 +775,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -776,6 +776,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 @@ -31,7 +31,7 @@ index 68a0865fb2ef38f3bd2acc648855567a1d39ccc1..83f070229098ad31b8ae65ffcebe5288 if (k > PlayerChunkMap.GOLDEN_TICKET && j > PlayerChunkMap.GOLDEN_TICKET) { return playerchunk; } else { -@@ -1032,6 +1033,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1033,6 +1034,8 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } // Paper end @@ -40,7 +40,7 @@ index 68a0865fb2ef38f3bd2acc648855567a1d39ccc1..83f070229098ad31b8ae65ffcebe5288 private void a(long i, PlayerChunk playerchunk) { CompletableFuture completablefuture = playerchunk.getChunkSave(); Consumer consumer = (ichunkaccess) -> { // CraftBukkit - decompile error -@@ -1040,6 +1043,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1041,6 +1044,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { if (completablefuture1 != completablefuture) { this.a(i, playerchunk); } else { @@ -53,7 +53,7 @@ index 68a0865fb2ef38f3bd2acc648855567a1d39ccc1..83f070229098ad31b8ae65ffcebe5288 // Tuinity start boolean removed; if ((removed = this.pendingUnload.remove(i, playerchunk)) && ichunkaccess != null) { // Tuinity end -@@ -1067,6 +1076,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1068,6 +1077,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.worldLoadListener.a(ichunkaccess.getPos(), (ChunkStatus) null); } if (removed) this.dataRegionManager.removeChunk(playerchunk.location.x, playerchunk.location.z); // Tuinity diff --git a/patches/Tuinity/patches/server/0045-Add-packet-limiter-config.patch b/patches/Tuinity/patches/server/0045-Add-packet-limiter-config.patch index ae687484..9fcce973 100644 --- a/patches/Tuinity/patches/server/0045-Add-packet-limiter-config.patch +++ b/patches/Tuinity/patches/server/0045-Add-packet-limiter-config.patch @@ -126,7 +126,7 @@ index a302cda14aa2dd6550cca03b07be21cdcb993061..03a59aabc2a35daf7eee899967b569a8 public final String worldName; diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index 39f19c82bbd3c17c64c8b2ed06727a95d28a4674..c918eba753180670a22e25afe58307cd2d289952 100644 +index a7530cfe7055017e8a98ee5422b48437c2dd18d1..f9aa04f2980aa5e952d64ae8c9f3629f7e76e2a0 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java @@ -178,8 +178,63 @@ public class NetworkManager extends SimpleChannelInboundHandler> { diff --git a/patches/Tuinity/patches/server/0046-Optimise-closest-entity-lookup.patch b/patches/Tuinity/patches/server/0046-Optimise-closest-entity-lookup.patch index aba57425..ca38c4a4 100644 --- a/patches/Tuinity/patches/server/0046-Optimise-closest-entity-lookup.patch +++ b/patches/Tuinity/patches/server/0046-Optimise-closest-entity-lookup.patch @@ -57,10 +57,10 @@ index 387eeb5d770ba9fe564c61df8cc92ac8b1569f61..21e50c75e0bffaa5cc5faf6aa81ae742 } diff --git a/src/main/java/com/tuinity/tuinity/world/ChunkEntitySlices.java b/src/main/java/com/tuinity/tuinity/world/ChunkEntitySlices.java new file mode 100644 -index 0000000000000000000000000000000000000000..9cc14620d26d63a9e8fec7735625b22411b43e98 +index 0000000000000000000000000000000000000000..7aca38ebeb21af1a952e72c7f3906ff4970aca0e --- /dev/null +++ b/src/main/java/com/tuinity/tuinity/world/ChunkEntitySlices.java -@@ -0,0 +1,401 @@ +@@ -0,0 +1,399 @@ +package com.tuinity.tuinity.world; + +import it.unimi.dsi.fastutil.objects.Reference2ObjectMap; @@ -397,11 +397,9 @@ index 0000000000000000000000000000000000000000..9cc14620d26d63a9e8fec7735625b224 + continue; + } + -+ if (predicate != null && !predicate.test(entity)) { -+ continue; -+ } -+ -+ into.add(entity); ++ if (predicate == null || predicate.test(entity)) { ++ into.add(entity); ++ } // else: continue to test the ender dragon parts + + if (entity instanceof EntityEnderDragon) { + for (final EntityComplexPart part : ((EntityEnderDragon)entity).children) { diff --git a/patches/Tuinity/patches/server/0047-Optimise-nearby-player-lookups.patch b/patches/Tuinity/patches/server/0047-Optimise-nearby-player-lookups.patch index 9b75fc9b..651e73c7 100644 --- a/patches/Tuinity/patches/server/0047-Optimise-nearby-player-lookups.patch +++ b/patches/Tuinity/patches/server/0047-Optimise-nearby-player-lookups.patch @@ -185,10 +185,10 @@ index 48976b1f07aeb0d588d0856f18b6fd07b2d18e05..a22021766b3bffa4f96d1d4ee546b12e // Paper end - optimise isOutsideOfRange // Paper start - optimize chunk status progression without jumping through thread pool diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 83f070229098ad31b8ae65ffcebe52886ef2884d..f9753b5ada318e39b48a7fd954afdd0e48cd091c 100644 +index 32c384dad5201987fe2545526efa6551e538e388..952bae3101323e40da0fb03e962c2d5cbca6d1ca 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -195,6 +195,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -196,6 +196,12 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerViewDistanceTickMap; public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerViewDistanceNoTickMap; // Paper end - no-tick view distance @@ -201,7 +201,7 @@ index 83f070229098ad31b8ae65ffcebe52886ef2884d..f9753b5ada318e39b48a7fd954afdd0e void addPlayerToDistanceMaps(EntityPlayer player) { com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Cannot update distance maps off of the main thread"); // Tuinity -@@ -225,6 +231,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -226,6 +232,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.playerViewDistanceBroadcastMap.add(player, chunkX, chunkZ, effectiveNoTickViewDistance + 1); // clients need an extra neighbour to render the full view distance configured player.needsChunkCenterUpdate = false; // Paper end - no-tick view distance @@ -211,7 +211,7 @@ index 83f070229098ad31b8ae65ffcebe52886ef2884d..f9753b5ada318e39b48a7fd954afdd0e } void removePlayerFromDistanceMaps(EntityPlayer player) { -@@ -243,6 +252,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -244,6 +253,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.playerViewDistanceTickMap.remove(player); this.playerViewDistanceNoTickMap.remove(player); // Paper end - no-tick view distance @@ -221,7 +221,7 @@ index 83f070229098ad31b8ae65ffcebe52886ef2884d..f9753b5ada318e39b48a7fd954afdd0e } void updateMaps(EntityPlayer player) { -@@ -274,6 +286,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -275,6 +287,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.playerViewDistanceBroadcastMap.update(player, chunkX, chunkZ, effectiveNoTickViewDistance + 1); // clients need an extra neighbour to render the full view distance configured player.needsChunkCenterUpdate = false; // Paper end - no-tick view distance @@ -231,7 +231,7 @@ index 83f070229098ad31b8ae65ffcebe52886ef2884d..f9753b5ada318e39b48a7fd954afdd0e } // Paper end -@@ -462,6 +477,23 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -463,6 +478,23 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Tuinity start this.dataRegionManager = new com.tuinity.tuinity.chunk.SingleThreadChunkRegionManager<>(this.world, RegionData.class, 2, (1.0 / 3.0), "Data"); // Tuinity end diff --git a/patches/Tuinity/patches/server/0048-Remove-streams-for-villager-AI.patch b/patches/Tuinity/patches/server/0048-Remove-streams-for-villager-AI.patch index ff5490ce..1e83d3e6 100644 --- a/patches/Tuinity/patches/server/0048-Remove-streams-for-villager-AI.patch +++ b/patches/Tuinity/patches/server/0048-Remove-streams-for-villager-AI.patch @@ -462,7 +462,7 @@ index a33303c31881b6391723e16a06d7841d48679958..ce57e6a4acac97d6da82202094306e7e return this.b.equals(entityliving.getEntityType()) && this.d.test(entityliving); } diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index fc2c4d127ec2eecfcec681fbe9599b72b09b078a..630fb7784be996d4503a81fc20a6c7f65a10e7dd 100644 +index 99b01cb35e2af2d61688b0b10ad1c655b9f2e4c3..1b56d83bdac536e8189901f03ad58e82d33ac8a3 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -1589,6 +1589,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -546,123 +546,6 @@ index ad3609f2b884f64f1a1a449036cece49a46e933e..d3d28f97f9d2f969a182aec5e0947b69 } } else if (this.b < 5) { this.a.long2LongEntrySet().removeIf((entry) -> { -diff --git a/src/main/java/net/minecraft/server/SensorNearestItems.java b/src/main/java/net/minecraft/server/SensorNearestItems.java -index 2e747158d48ab28ac1611990cc97aa4a9e30b30e..1de170b9fe6f2888da6dcf0151aaf1f865691c6a 100644 ---- a/src/main/java/net/minecraft/server/SensorNearestItems.java -+++ b/src/main/java/net/minecraft/server/SensorNearestItems.java -@@ -18,20 +18,23 @@ public class SensorNearestItems extends Sensor { - - protected void a(WorldServer worldserver, EntityInsentient entityinsentient) { - BehaviorController behaviorcontroller = entityinsentient.getBehaviorController(); -- List list = worldserver.a(EntityItem.class, entityinsentient.getBoundingBox().grow(8.0D, 4.0D, 8.0D), (entityitem) -> { -- return true; -+ // Tuinity start - remove streams -+ List list = worldserver.a(EntityItem.class, entityinsentient.getBoundingBox().grow(8.0D, 4.0D, 8.0D), (EntityItem item) -> { -+ return entityinsentient.i(item.getItemStack()) && item.a((Entity)entityinsentient, 9.0D); // copied from removed code, make sure to update - move here so we sort less - }); - -- entityinsentient.getClass(); -- list.sort(Comparator.comparingDouble(entityinsentient::h)); -- Stream stream = list.stream().filter((entityitem) -> { -- return entityinsentient.i(entityitem.getItemStack()); -- }).filter((entityitem) -> { -- return entityitem.a((Entity) entityinsentient, 9.0D); -- }); -- -- entityinsentient.getClass(); -- Optional optional = stream.filter(entityinsentient::hasLineOfSight).findFirst(); -+ list.sort(Comparator.comparingDouble(entityinsentient::h)); // better to take the sort perf hit than using line of sight more than we need to. -+ EntityItem nearest = null; -+ for (int index = 0, len = list.size(); index < len; ++index) { -+ EntityItem item = list.get(index); -+ if (entityinsentient.hasLineOfSight(item)) { -+ nearest = item; -+ break; -+ } -+ } -+ -+ Optional optional = Optional.ofNullable(nearest); -+ // Tuinity end - remove streams - - behaviorcontroller.setMemory(MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM, optional); - } -diff --git a/src/main/java/net/minecraft/server/SensorNearestLivingEntities.java b/src/main/java/net/minecraft/server/SensorNearestLivingEntities.java -index f6568a54ab85bc3a682f6fbb19dda7a783625bbe..4005df5ef3dec956a54feff539db2e63c226059a 100644 ---- a/src/main/java/net/minecraft/server/SensorNearestLivingEntities.java -+++ b/src/main/java/net/minecraft/server/SensorNearestLivingEntities.java -@@ -21,10 +21,17 @@ public class SensorNearestLivingEntities extends Sensor { - list.sort(Comparator.comparingDouble(entityliving::h)); - BehaviorController behaviorcontroller = entityliving.getBehaviorController(); - -- behaviorcontroller.setMemory(MemoryModuleType.MOBS, (Object) list); -- behaviorcontroller.setMemory(MemoryModuleType.VISIBLE_MOBS, list.stream().filter((entityliving1) -> { -- return a(entityliving, entityliving1); -- }).collect(Collectors.toList())); -+ behaviorcontroller.setMemory(MemoryModuleType.MOBS, list); // Tuinity - decompile fix -+ // Tuinity start - remove streams -+ List visible = new java.util.ArrayList<>(list.size()); -+ for (int index = 0, len = list.size(); index < len; ++index) { -+ EntityLiving nearby = list.get(index); -+ if (Sensor.a(entityliving, nearby)) { // copied from removed code, make sure to update -+ visible.add(nearby); -+ } -+ } -+ behaviorcontroller.setMemory(MemoryModuleType.VISIBLE_MOBS, visible); -+ // Tuinity end - remove streams - } - - @Override -diff --git a/src/main/java/net/minecraft/server/SensorNearestPlayers.java b/src/main/java/net/minecraft/server/SensorNearestPlayers.java -index 904a6d5ac61d2ac81f1057068383e9ab432852db..fa2d366ca6695c099c29469bf69a7845350b4f07 100644 ---- a/src/main/java/net/minecraft/server/SensorNearestPlayers.java -+++ b/src/main/java/net/minecraft/server/SensorNearestPlayers.java -@@ -19,22 +19,31 @@ public class SensorNearestPlayers extends Sensor { - - @Override - protected void a(WorldServer worldserver, EntityLiving entityliving) { -- Stream stream = worldserver.getPlayers().stream().filter(IEntitySelector.g).filter((entityplayer) -> { -- return entityliving.a((Entity) entityplayer, 16.0D); -- }); -- -- entityliving.getClass(); -- List list = (List) stream.sorted(Comparator.comparingDouble(entityliving::h)).collect(Collectors.toList()); -+ // Tuinity start - remove streams -+ List nearby = (List)worldserver.getNearbyPlayers(entityliving, entityliving.locX(), entityliving.locY(), entityliving.locZ(), -+ 16.0, IEntitySelector.g); -+ nearby.sort((e1, e2) -> Double.compare(entityliving.getDistanceSquared(e1), entityliving.getDistanceSquared(e2))); - BehaviorController behaviorcontroller = entityliving.getBehaviorController(); - -- behaviorcontroller.setMemory(MemoryModuleType.NEAREST_PLAYERS, (Object) list); -- List list1 = (List) list.stream().filter((entityhuman) -> { -- return a(entityliving, (EntityLiving) entityhuman); -- }).collect(Collectors.toList()); -- -- behaviorcontroller.setMemory(MemoryModuleType.NEAREST_VISIBLE_PLAYER, (Object) (list1.isEmpty() ? null : (EntityHuman) list1.get(0))); -- Optional optional = list1.stream().filter(IEntitySelector.f).findFirst(); -- -- behaviorcontroller.setMemory(MemoryModuleType.NEAREST_VISIBLE_TARGETABLE_PLAYER, optional); -+ behaviorcontroller.setMemory(MemoryModuleType.NEAREST_PLAYERS, nearby); -+ EntityHuman first = null; -+ EntityHuman firstNonSpectator = null; -+ for (int index = 0, len = nearby.size(); index < len; ++index) { -+ EntityHuman entity = nearby.get(index); -+ if (!Sensor.a(entityliving, (EntityLiving)entity)) { // copied from removed code, make sure to update -+ continue; -+ } -+ if (first == null) { -+ first = entity; -+ } -+ if (IEntitySelector.f.test(entity)) { // copied from removed code, make sure to update -+ firstNonSpectator = entity; -+ break; -+ } -+ } -+ -+ behaviorcontroller.setMemory(MemoryModuleType.NEAREST_VISIBLE_PLAYER, first); -+ behaviorcontroller.setMemory(MemoryModuleType.NEAREST_VISIBLE_TARGETABLE_PLAYER, Optional.ofNullable(firstNonSpectator)); -+ // Tuinity end - remove streams - } - } diff --git a/src/main/java/net/minecraft/server/SensorVillagerBabies.java b/src/main/java/net/minecraft/server/SensorVillagerBabies.java index a367bbfde4fbfeca6d01dec49c05f5e185aab43a..794b33a13b7f11b973caf085b0bded9b2135a4d7 100644 --- a/src/main/java/net/minecraft/server/SensorVillagerBabies.java diff --git a/patches/Tuinity/patches/server/0051-Add-Velocity-natives-for-encryption-and-compression.patch b/patches/Tuinity/patches/server/0051-Add-Velocity-natives-for-encryption-and-compression.patch index 1860e1dd..b3cc75d2 100644 --- a/patches/Tuinity/patches/server/0051-Add-Velocity-natives-for-encryption-and-compression.patch +++ b/patches/Tuinity/patches/server/0051-Add-Velocity-natives-for-encryption-and-compression.patch @@ -23,10 +23,10 @@ index 650c6b91440d4ce1c5f82517a00056673750e74e..ddb06df414408461e2ad270e4849514c diff --git a/src/main/java/net/minecraft/server/LoginListener.java b/src/main/java/net/minecraft/server/LoginListener.java -index c61cd50df0c81f7ab12bd0c955fd6f07f2b02e64..d987483255195c0bde713a92676baced1eaff2b3 100644 +index 6be12b7ae8501c22a7c544638c44fc6faedd5b07..2b4ac8d1f3218e89b73fb9e1d3eed8cb8bf7334d 100644 --- a/src/main/java/net/minecraft/server/LoginListener.java +++ b/src/main/java/net/minecraft/server/LoginListener.java -@@ -234,7 +234,7 @@ public class LoginListener implements PacketLoginInListener { +@@ -235,7 +235,7 @@ public class LoginListener implements PacketLoginInListener { s = (new BigInteger(MinecraftEncryption.a("", this.server.getKeyPair().getPublic(), this.loginKey))).toString(16); this.g = LoginListener.EnumProtocolState.AUTHENTICATING; @@ -36,10 +36,10 @@ index c61cd50df0c81f7ab12bd0c955fd6f07f2b02e64..d987483255195c0bde713a92676baced throw new IllegalStateException("Protocol error", cryptographyexception); } diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index c918eba753180670a22e25afe58307cd2d289952..3945233e2182f38a7b4419792ca2a931b90ed787 100644 +index f9aa04f2980aa5e952d64ae8c9f3629f7e76e2a0..d63a547bb1ce8e7eb9298127d3ff662f2e1191b7 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java -@@ -542,10 +542,16 @@ public class NetworkManager extends SimpleChannelInboundHandler> { +@@ -549,10 +549,16 @@ public class NetworkManager extends SimpleChannelInboundHandler> { return this.channel instanceof LocalChannel || this.channel instanceof LocalServerChannel; } diff --git a/patches/Tuinity/patches/server/0052-Optimise-non-flush-packet-sending.patch b/patches/Tuinity/patches/server/0052-Optimise-non-flush-packet-sending.patch index cc090c11..ecb7ebf0 100644 --- a/patches/Tuinity/patches/server/0052-Optimise-non-flush-packet-sending.patch +++ b/patches/Tuinity/patches/server/0052-Optimise-non-flush-packet-sending.patch @@ -51,7 +51,7 @@ index ddb06df414408461e2ad270e4849514cc7d3ec78..e83e4241a56fe131a75fe21cc1518992 com.googlecode.json-simple diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java -index 3945233e2182f38a7b4419792ca2a931b90ed787..6a0ec0105399066dede622b45c9471b32c162cf6 100644 +index d63a547bb1ce8e7eb9298127d3ff662f2e1191b7..65de374d485f31f8cd6f4e03941173565074ea0e 100644 --- a/src/main/java/net/minecraft/server/NetworkManager.java +++ b/src/main/java/net/minecraft/server/NetworkManager.java @@ -27,6 +27,8 @@ import org.apache.logging.log4j.Logger; diff --git a/patches/Tuinity/patches/server/0053-Do-not-retain-playerchunkmap-instance-in-light-threa.patch b/patches/Tuinity/patches/server/0053-Do-not-retain-playerchunkmap-instance-in-light-threa.patch index a34b75c3..6e4d03bb 100644 --- a/patches/Tuinity/patches/server/0053-Do-not-retain-playerchunkmap-instance-in-light-threa.patch +++ b/patches/Tuinity/patches/server/0053-Do-not-retain-playerchunkmap-instance-in-light-threa.patch @@ -7,10 +7,10 @@ The executor returned is finalizable and of course that causes issues. diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index f9753b5ada318e39b48a7fd954afdd0e48cd091c..83e036f74ee00afd012f237de0642ee5699d13f8 100644 +index 952bae3101323e40da0fb03e962c2d5cbca6d1ca..1ac744eb0bd90d6ffd57adfdfb1e54d6bb67992a 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -340,9 +340,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -341,9 +341,10 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.worldLoadListener = worldloadlistener; // Paper start - use light thread diff --git a/patches/Tuinity/patches/server/0054-Do-not-load-chunks-during-a-crash-report.patch b/patches/Tuinity/patches/server/0054-Do-not-load-chunks-during-a-crash-report.patch index 871edb8f..6a071718 100644 --- a/patches/Tuinity/patches/server/0054-Do-not-load-chunks-during-a-crash-report.patch +++ b/patches/Tuinity/patches/server/0054-Do-not-load-chunks-during-a-crash-report.patch @@ -22,10 +22,10 @@ index 7511e38130f38703164395a670f12d1af648ff04..e602efcb3fad390bb6bff1055e782bba } value.append("},"); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 20b0b7d9ad095622fa7ad6dd02c4c3f248672cf0..15ce459aa15a8bb936740a8c055f4304e21312d2 100644 +index eb90c0802e3ca344885ee14fd852e963a66f5f33..3e54e643d28ced3074c4b044bc8a2238de05ccc2 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -719,6 +719,30 @@ public class CraftWorld implements World { +@@ -720,6 +720,30 @@ public class CraftWorld implements World { return ret.entrySet().stream().collect(ImmutableMap.toImmutableMap(Map.Entry::getKey, (entry) -> entry.getValue().build())); } diff --git a/patches/Tuinity/patches/server/0055-Improve-abnormal-server-shutdown-process.patch b/patches/Tuinity/patches/server/0055-Improve-abnormal-server-shutdown-process.patch index c774e61a..bb13b15e 100644 --- a/patches/Tuinity/patches/server/0055-Improve-abnormal-server-shutdown-process.patch +++ b/patches/Tuinity/patches/server/0055-Improve-abnormal-server-shutdown-process.patch @@ -11,10 +11,10 @@ gui. It looks like during sigint shutdown there can be some deadlock between the server thread and awt shutdown thread here. diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index fcba187bbdc1b468cfea2bc922187d9b8959a9d5..ecff0657e5666ddc2e6a5c3111bfb2b8dd2b78d3 100644 +index 617ba6fb85c55967360ca270ee8feeff5acbf8e0..2644b190813cc934914aeab78fbd6515d1a37c4a 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -358,7 +358,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -360,7 +360,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer } if (this.q != null) { @@ -24,10 +24,10 @@ index fcba187bbdc1b468cfea2bc922187d9b8959a9d5..ecff0657e5666ddc2e6a5c3111bfb2b8 if (this.remoteControlListener != null) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b75cc467809250b8dbe98e57c69e5378583a28c5..1768554b00ea0b7a57ebbed1f0bc5d8fd6f02f76 100644 +index 29e7b4aa6e94566d446221cd28c2f60fdb3fccab..7ac34a8959a797bf2af96f3f402fa65cffe3d666 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -751,10 +751,11 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant changedBlocksSet; + public final void blocksChangedInChunk(final ILightAccess lightAccess, final int chunkX, final int chunkZ, + final Set positions, final Boolean[] changedSections) { + this.setupCaches(lightAccess, chunkX * 16 + 7, 128, chunkZ * 16 + 7, true, true); + try { ++ this.changedBlocksSet = positions; + final IChunkAccess chunk = this.getChunkInCache(chunkX, chunkZ); + if (this.isClientSide && chunk == null) { + return; @@ -1896,6 +1900,7 @@ index 0000000000000000000000000000000000000000..d1aff9117e74d8cd7c3ca9334edfaf17 + } + this.updateVisible(lightAccess); + } finally { ++ this.changedBlocksSet = null; + this.destroyCaches(); + } + } @@ -4445,10 +4450,10 @@ index cebd808e273dbdb88feb16920dd7a2f60390b34f..33b8f4e0f09fdc41c8ea48b6ed77af19 final com.destroystokyo.paper.util.maplist.IBlockDataList tickingList = new com.destroystokyo.paper.util.maplist.IBlockDataList(); // Paper diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index a9a409eebabae11ab84cf9bcced1f9a030b4a479..173a210392d71cdfc551f095dc0d9c9040d22d3f 100644 +index d51925612bc3d37164a8e821833ef1721b6e6976..cf14b83ec3c2b9a2812f50f3bca991e029bf7c67 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -528,6 +528,185 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -531,6 +531,185 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } } @@ -4726,7 +4731,7 @@ index be5384ee41290b24b0c419c3e8f4553db34b2399..df28f7a6bf4c650a22ddf046eae4d5e8 IBlockAccess getWorld(); diff --git a/src/main/java/net/minecraft/server/LightEngineThreaded.java b/src/main/java/net/minecraft/server/LightEngineThreaded.java -index 2f9c97dd4e1d705a87772d18c7ab4883a876af08..001ac05cf26237eec8a77c476e678ff6d0840311 100644 +index 2f9c97dd4e1d705a87772d18c7ab4883a876af08..b2f51a6786d4bb92c9cbbceeea812375b1a49bd6 100644 --- a/src/main/java/net/minecraft/server/LightEngineThreaded.java +++ b/src/main/java/net/minecraft/server/LightEngineThreaded.java @@ -2,6 +2,11 @@ package net.minecraft.server; @@ -5088,7 +5093,7 @@ index 2f9c97dd4e1d705a87772d18c7ab4883a876af08..001ac05cf26237eec8a77c476e678ff6 + LightEngineThreaded.this.queueUpdate(); + }).whenComplete((IChunkAccess chunk, Throwable throwable) -> { + if (throwable != null && !(throwable instanceof ThreadDeath)) { -+ MinecraftServer.LOGGER.fatal("Failed to light chunk " + chunk.getPos().toString() + " in world '" + this.theLightEngine.getWorld().getWorld().getName() + "'"); ++ MinecraftServer.LOGGER.fatal("Failed to light chunk " + ichunkaccess.getPos().toString() + " in world '" + this.theLightEngine.getWorld().getWorld().getName() + "'"); + } + }); + } @@ -5292,10 +5297,10 @@ index a22021766b3bffa4f96d1d4ee546b12e96b5ca58..3127fc9dd87e82243e167862cae83ac8 } diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 83e036f74ee00afd012f237de0642ee5699d13f8..da27ccccdce7756b94e36cc92e60b96d325412b1 100644 +index 1ac744eb0bd90d6ffd57adfdfb1e54d6bb67992a..a5bc387980b229c61b416fc1f31235a9e65ed4b5 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -1319,6 +1319,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1320,6 +1320,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Tuinity end - force competion on the main thread } diff --git a/patches/Tuinity/patches/server/0062-Optimise-WorldServer-notify.patch b/patches/Tuinity/patches/server/0062-Optimise-WorldServer-notify.patch index a2425356..1793d178 100644 --- a/patches/Tuinity/patches/server/0062-Optimise-WorldServer-notify.patch +++ b/patches/Tuinity/patches/server/0062-Optimise-WorldServer-notify.patch @@ -44,10 +44,10 @@ index 55fa3911703f96cf1f97c82b19d8e2d0d220016b..b92ca4a6de01f3f86367fb8dfe3591b0 Vec3D vec3d = new Vec3D(((double) pathpoint.a + this.a.locX()) / 2.0D, ((double) pathpoint.b + this.a.locY()) / 2.0D, ((double) pathpoint.c + this.a.locZ()) / 2.0D); diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index da27ccccdce7756b94e36cc92e60b96d325412b1..490f5ce6b688101e40d2dd2683c95da2b6d5e7d5 100644 +index a5bc387980b229c61b416fc1f31235a9e65ed4b5..754780b1d15aecd84d725a16b8ea41a498efcb4b 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -294,7 +294,15 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -295,7 +295,15 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Tuinity start public static enum RegionData implements com.tuinity.tuinity.chunk.SingleThreadChunkRegionManager.RegionDataCreator { diff --git a/patches/Tuinity/patches/server/0063-Actually-unload-POI-data.patch b/patches/Tuinity/patches/server/0063-Actually-unload-POI-data.patch index ebb66d55..9f1717b9 100644 --- a/patches/Tuinity/patches/server/0063-Actually-unload-POI-data.patch +++ b/patches/Tuinity/patches/server/0063-Actually-unload-POI-data.patch @@ -25,10 +25,10 @@ index 13d067f48647dea63ef1bf3a2a3e0868074ba75f..04afd7f285db2f281a038e0be6f557b8 this.a(Long.MAX_VALUE, i, j, flag); } diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index 490f5ce6b688101e40d2dd2683c95da2b6d5e7d5..e6d39c98d0422a4f841cc836e2ac6a357b4db83a 100644 +index 754780b1d15aecd84d725a16b8ea41a498efcb4b..f9844f3a939c29a635fe56fcb1759c279efb0627 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -841,6 +841,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -842,6 +842,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { playerchunk = new PlayerChunk(new ChunkCoordIntPair(i), j, this.lightEngine, this.p, this); this.dataRegionManager.addChunk(playerchunk.location.x, playerchunk.location.z); // Tuinity } @@ -36,7 +36,7 @@ index 490f5ce6b688101e40d2dd2683c95da2b6d5e7d5..e6d39c98d0422a4f841cc836e2ac6a35 this.updatingChunks.put(i, playerchunk); this.updatingChunksModified = true; -@@ -966,7 +967,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -967,7 +968,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } @@ -45,7 +45,7 @@ index 490f5ce6b688101e40d2dd2683c95da2b6d5e7d5..e6d39c98d0422a4f841cc836e2ac6a35 protected void unloadChunks(BooleanSupplier booleansupplier) { GameProfilerFiller gameprofilerfiller = this.world.getMethodProfiler(); -@@ -1117,6 +1118,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1118,6 +1119,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.worldLoadListener.a(ichunkaccess.getPos(), (ChunkStatus) null); } if (removed) this.dataRegionManager.removeChunk(playerchunk.location.x, playerchunk.location.z); // Tuinity @@ -53,7 +53,7 @@ index 490f5ce6b688101e40d2dd2683c95da2b6d5e7d5..e6d39c98d0422a4f841cc836e2ac6a35 } finally { this.unloadingPlayerChunk = unloadingBefore; } // Tuinity - do not allow ticket level changes while unloading chunks } -@@ -1209,6 +1211,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1210,6 +1212,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { this.getVillagePlace().loadInData(chunkcoordintpair, chunkHolder.poiData); chunkHolder.tasks.forEach(Runnable::run); diff --git a/patches/Tuinity/patches/server/0064-Send-full-pos-packets-for-hard-colliding-entities.patch b/patches/Tuinity/patches/server/0064-Send-full-pos-packets-for-hard-colliding-entities.patch index 17021066..5d23ef25 100644 --- a/patches/Tuinity/patches/server/0064-Send-full-pos-packets-for-hard-colliding-entities.patch +++ b/patches/Tuinity/patches/server/0064-Send-full-pos-packets-for-hard-colliding-entities.patch @@ -26,7 +26,7 @@ index ceeb515f4528551659598d9999917f8596e3eded..0959aa6855a150b121b9b75885216c46 public final String worldName; diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java -index 526c1419af7bd0b6098a8f9a0a24a64ba61c6ebc..81869215876d10a84ab27c0e6f41963c1346fd1c 100644 +index 798ebfdcd8e06ffb576964da006e77bd188ad274..2402c18e6a18221a43bea9fc68278da9d19eede4 100644 --- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java +++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java @@ -157,7 +157,7 @@ public class EntityTrackerEntry { diff --git a/patches/Tuinity/patches/server/0065-Fix-chunks-refusing-to-unload-at-low-TPS.patch b/patches/Tuinity/patches/server/0065-Fix-chunks-refusing-to-unload-at-low-TPS.patch index b20477b7..43550ee2 100644 --- a/patches/Tuinity/patches/server/0065-Fix-chunks-refusing-to-unload-at-low-TPS.patch +++ b/patches/Tuinity/patches/server/0065-Fix-chunks-refusing-to-unload-at-low-TPS.patch @@ -10,10 +10,10 @@ chunk future to complete. We can simply schedule to the immediate executor to get this effect, rather than the main mailbox. diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java -index e6d39c98d0422a4f841cc836e2ac6a357b4db83a..61570ab947b5a153a4c2bcb5a09344f060e6052d 100644 +index f9844f3a939c29a635fe56fcb1759c279efb0627..3fe03b92658b157d6c7875dcaae6bbd41952ccd5 100644 --- a/src/main/java/net/minecraft/server/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java -@@ -1497,9 +1497,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1498,9 +1498,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { chunk.B(); return chunk; }); diff --git a/patches/Tuinity/patches/server/0066-Fix-incorrect-isRealPlayer-init.patch b/patches/Tuinity/patches/server/0066-Fix-incorrect-isRealPlayer-init.patch index aa2ca1a4..0640e292 100644 --- a/patches/Tuinity/patches/server/0066-Fix-incorrect-isRealPlayer-init.patch +++ b/patches/Tuinity/patches/server/0066-Fix-incorrect-isRealPlayer-init.patch @@ -9,18 +9,18 @@ paper placed their logic. So it wont correctly set in this case. Fix by moving it to a different place. diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index 1eb44877e7384ae0a028a12b832684126b8d50ec..eabd1aa2b740bcb6db40be300cd6daf59674fa3f 100644 +index 184a0d30f4a1d4a6a07449fdd1375a8582da9332..d03d0c13cca1762078617744253a9757b388958f 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -98,6 +98,7 @@ public abstract class PlayerList { - } +@@ -96,6 +96,7 @@ public abstract class PlayerList { + abstract public void loadAndSaveFiles(); // Paper - moved from DedicatedPlayerList constructor public void a(NetworkManager networkmanager, EntityPlayer entityplayer) { + entityplayer.isRealPlayer = true; // Paper // Tuinity - this is a better place to write this that works and isn't overriden by plugins EntityPlayer prev = pendingPlayers.put(entityplayer.getUniqueID(), entityplayer);// Paper if (prev != null) { disconnectPendingPlayer(prev); -@@ -637,7 +638,7 @@ public abstract class PlayerList { +@@ -636,7 +637,7 @@ public abstract class PlayerList { SocketAddress socketaddress = loginlistener.networkManager.getSocketAddress(); EntityPlayer entity = new EntityPlayer(this.server, this.server.getWorldServer(World.OVERWORLD), gameprofile, new PlayerInteractManager(this.server.getWorldServer(World.OVERWORLD))); diff --git a/patches/Tuinity/patches/server/0067-Do-not-run-raytrace-logic-for-AIR.patch b/patches/Tuinity/patches/server/0067-Do-not-run-raytrace-logic-for-AIR.patch new file mode 100644 index 00000000..c56ebb03 --- /dev/null +++ b/patches/Tuinity/patches/server/0067-Do-not-run-raytrace-logic-for-AIR.patch @@ -0,0 +1,22 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Spottedleaf +Date: Sun, 7 Mar 2021 13:15:04 -0800 +Subject: [PATCH] Do not run raytrace logic for AIR + +Saves approx. 5% for the raytrace call, as most (expensive) +raytracing tends to go through air and returning early is an +easy win. The remaining problems with this function +are mostly with the block getting itself. + +diff --git a/src/main/java/net/minecraft/server/IBlockAccess.java b/src/main/java/net/minecraft/server/IBlockAccess.java +index 5c3eb4fc7e5aec2ad8d0050673fc8f4d2bff6a71..5ccf6b483fe15d4ad12ce2d3d11e9440ee9e8ab7 100644 +--- a/src/main/java/net/minecraft/server/IBlockAccess.java ++++ b/src/main/java/net/minecraft/server/IBlockAccess.java +@@ -55,6 +55,7 @@ public interface IBlockAccess { + return MovingObjectPositionBlock.a(raytrace1.a(), EnumDirection.a(vec3d.x, vec3d.y, vec3d.z), new BlockPosition(raytrace1.a())); + } + // Paper end ++ if (iblockdata.isAir()) return null; // Tuinity - optimise air cases + Fluid fluid = iblockdata.getFluid(); // Tuinity - don't need to go to world state again + Vec3D vec3d = raytrace1.b(); + Vec3D vec3d1 = raytrace1.a(); diff --git a/patches/Tuinity/patches/server/0068-Make-entity-tracker-use-highest-range-of-passengers.patch b/patches/Tuinity/patches/server/0068-Make-entity-tracker-use-highest-range-of-passengers.patch new file mode 100644 index 00000000..bf2ddfee --- /dev/null +++ b/patches/Tuinity/patches/server/0068-Make-entity-tracker-use-highest-range-of-passengers.patch @@ -0,0 +1,50 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Spottedleaf +Date: Sun, 7 Mar 2021 14:14:47 -0800 +Subject: [PATCH] Make entity tracker use highest range of passengers + +This should prevent people from having to up their animal range +just so players riding horses or whatever can be seen at the +configured player range. + +diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java +index 50c61b633faaa47a86172315b53899d3747c8e27..2ec48858be8eb2c522c9685b43bd36b3b581cf8b 100644 +--- a/src/main/java/net/minecraft/server/Entity.java ++++ b/src/main/java/net/minecraft/server/Entity.java +@@ -225,8 +225,21 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke + } + + final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet getPlayersInTrackRange() { +- return ((WorldServer)this.world).getChunkProvider().playerChunkMap.playerEntityTrackerTrackMaps[this.trackingRangeType.ordinal()] +- .getObjectsInRange(MCUtil.getCoordinateKey(this)); ++ Collection passengers = this.getAllPassengers(); ++ PlayerChunkMap chunkMap = ((WorldServer)this.world).getChunkProvider().playerChunkMap; ++ org.spigotmc.TrackingRange.TrackingRangeType type = this.trackingRangeType; ++ int range = chunkMap.entityTrackerTrackRanges[type.ordinal()]; ++ ++ for (Entity passenger : passengers) { ++ org.spigotmc.TrackingRange.TrackingRangeType passengerType = passenger.trackingRangeType; ++ int passengerRange = chunkMap.entityTrackerTrackRanges[passengerType.ordinal()]; ++ if (passengerRange > range) { ++ type = passengerType; ++ range = passengerRange; ++ } ++ } ++ ++ return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this)); + } + // Paper end - optimise entity tracking + +diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/java/net/minecraft/server/PlayerChunkMap.java +index 3fe03b92658b157d6c7875dcaae6bbd41952ccd5..f9482f19549074e04fc4c1e4d05612a2ea23354c 100644 +--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java ++++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java +@@ -2543,7 +2543,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially + int j = entity.getEntityType().getChunkRange() * 16; + j = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, j); // Paper + +- if (j < i) { // Paper - we need the lowest range thanks to the fact that our tracker doesn't account for passenger logic ++ if (j > i) { // Paper - we need the lowest range thanks to the fact that our tracker doesn't account for passenger logic // Tuinity - not anymore! + i = j; + } + } diff --git a/patches/api/0001-Modify-POM.patch b/patches/api/0001-Modify-POM.patch index d51fef7b..f45ad630 100644 --- a/patches/api/0001-Modify-POM.patch +++ b/patches/api/0001-Modify-POM.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Modify POM diff --git a/pom.xml b/pom.xml -index c441d455e2273b63d2cec136872a5025182d75d6..0a4a2d639e53f6cccc1877896818bbf2d381044d 100644 +index 821df3413345c613eccff158f8081cf9ba848a14..78524688e28e5393a9ff2d2007785a093f8aa0c3 100644 --- a/pom.xml +++ b/pom.xml @@ -3,18 +3,18 @@ diff --git a/patches/api/0002-Yatopia-Config-Redirect-Config.patch b/patches/api/0002-Yatopia-Config-Redirect-Config.patch index a8da9b19..b34f1d52 100644 --- a/patches/api/0002-Yatopia-Config-Redirect-Config.patch +++ b/patches/api/0002-Yatopia-Config-Redirect-Config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Yatopia Config & Redirect Config diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 26c1953d23efd370ac7fd47fc3432edba4724139..5b15169e967803803164f4d3c7f6327f4e2de4a3 100644 +index 7a3be414ef9d54d7a852ba92d704011fa7f125ac..1d65eedf20bc6414202a2bcb2f375a8b23446ddf 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1505,6 +1505,22 @@ public interface Server extends PluginMessageRecipient { +@@ -1618,6 +1618,22 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi } // Purpur end diff --git a/patches/api/0003-Add-GameProfileLookupEvent.patch b/patches/api/0003-Add-GameProfileLookupEvent.patch index 1ae55e01..525c0b29 100644 --- a/patches/api/0003-Add-GameProfileLookupEvent.patch +++ b/patches/api/0003-Add-GameProfileLookupEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add GameProfileLookupEvent diff --git a/pom.xml b/pom.xml -index 0a4a2d639e53f6cccc1877896818bbf2d381044d..e1c693d4d9e26e29d81ca0eee92a11e7dc2943be 100644 +index 78524688e28e5393a9ff2d2007785a093f8aa0c3..61670767a97a9f9e6285961555fed3b7cedf56b0 100644 --- a/pom.xml +++ b/pom.xml @@ -52,6 +52,10 @@ @@ -19,8 +19,8 @@ index 0a4a2d639e53f6cccc1877896818bbf2d381044d..e1c693d4d9e26e29d81ca0eee92a11e7 -@@ -62,6 +66,13 @@ - +@@ -76,6 +80,13 @@ + + @@ -30,9 +30,9 @@ index 0a4a2d639e53f6cccc1877896818bbf2d381044d..e1c693d4d9e26e29d81ca0eee92a11e7 + 1.5.25 + provided + + - it.unimi.dsi - fastutil + net.kyori diff --git a/src/main/java/dev/tr7zw/yatopia/events/GameProfileLookupEvent.java b/src/main/java/dev/tr7zw/yatopia/events/GameProfileLookupEvent.java new file mode 100644 index 0000000000000000000000000000000000000000..313fe42442a93db76f91eaab50a345340f314fa8 diff --git a/patches/api/0004-Add-last-tick-time-API.patch b/patches/api/0004-Add-last-tick-time-API.patch index 24bc429c..e74a88ee 100644 --- a/patches/api/0004-Add-last-tick-time-API.patch +++ b/patches/api/0004-Add-last-tick-time-API.patch @@ -7,10 +7,10 @@ Original patch by: Co-authored-by: tr7zw diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index ba8eb67291c9848b367419f4c8110161ac7fab0d..c3ffbb86d2e61c15e5cf7cd2c6b381c333c228ee 100644 +index 801bef2a060962b5c4f92234401e5bc34a62141a..96ea91b296749ab3ed06ab1e6f3c70c60f9d1307 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -1837,4 +1837,14 @@ public final class Bukkit { +@@ -1963,4 +1963,14 @@ public final class Bukkit { return server.isLagging(); } // Purpur end @@ -26,10 +26,10 @@ index ba8eb67291c9848b367419f4c8110161ac7fab0d..c3ffbb86d2e61c15e5cf7cd2c6b381c3 + // Yatopia end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 5b15169e967803803164f4d3c7f6327f4e2de4a3..10cab1b0939d54bcd2b351c2317baf5ce5e97684 100644 +index 1d65eedf20bc6414202a2bcb2f375a8b23446ddf..2b2d4f9fefd1a5e74dee2ddc20c8228d0ddf0da6 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1637,4 +1637,24 @@ public interface Server extends PluginMessageRecipient { +@@ -1754,4 +1754,24 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ boolean isLagging(); // Purpur end diff --git a/patches/api/0005-Add-NBT-API-as-a-first-class-lib.patch b/patches/api/0005-Add-NBT-API-as-a-first-class-lib.patch index f71770d1..77f1cb2e 100644 --- a/patches/api/0005-Add-NBT-API-as-a-first-class-lib.patch +++ b/patches/api/0005-Add-NBT-API-as-a-first-class-lib.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add NBT API as a first-class lib diff --git a/pom.xml b/pom.xml -index e1c693d4d9e26e29d81ca0eee92a11e7dc2943be..3772b54690f1cbce2f9f175b1b94e9ce9ba75603 100644 +index 61670767a97a9f9e6285961555fed3b7cedf56b0..62a8c9c0f7d66eb51416c1fe723821a082cdfc95 100644 --- a/pom.xml +++ b/pom.xml @@ -56,6 +56,11 @@ @@ -20,7 +20,7 @@ index e1c693d4d9e26e29d81ca0eee92a11e7dc2943be..3772b54690f1cbce2f9f175b1b94e9ce -@@ -170,6 +175,11 @@ +@@ -202,6 +207,11 @@ asm-commons 9.0 @@ -32,7 +32,7 @@ index e1c693d4d9e26e29d81ca0eee92a11e7dc2943be..3772b54690f1cbce2f9f175b1b94e9ce -@@ -245,6 +255,12 @@ +@@ -277,6 +287,12 @@ ${project.build.directory}/dependency-reduced-pom.xml true @@ -98,10 +98,10 @@ index 3b10fcc13893403b29f0260b8605144679e89b82..1e9a96d8b08cc396acf73dc420830093 + // Yatopia end } diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 2b7e8c7f24b2d9dd49db901f6279b8b5930a3006..04f7fedc8ab4aaf35bbe5c028b87c9fd9f235867 100644 +index 1e25f387e053b648477a3e9dace1a6c95e7f8cba..02c5967dcc8591d4324d1218eb8c2ff0cb961647 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -765,4 +765,26 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent +@@ -771,4 +771,26 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent */ boolean spawnAt(@NotNull Location location, @NotNull org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason spawnReason); // Purpur end @@ -129,10 +129,10 @@ index 2b7e8c7f24b2d9dd49db901f6279b8b5930a3006..04f7fedc8ab4aaf35bbe5c028b87c9fd + // Yatopia end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 23cef1e67236a879525f39da994efc9a9c5cd289..a666626d9658f9a7f784514d34794a2ecb944ac9 100644 +index f0c17f1342d9c70cb4fe1fc46dd8b9006037e860..24a3521d074471c0024a8d23acb7963af3e293e1 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java -@@ -1427,4 +1427,42 @@ public class ItemStack implements Cloneable, ConfigurationSerializable { +@@ -1445,4 +1445,42 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, net.kyor } // Purpur end diff --git a/patches/api/0008-Suspected-plugins-report.patch b/patches/api/0008-Suspected-plugins-report.patch index cad34cf3..91e892d4 100644 --- a/patches/api/0008-Suspected-plugins-report.patch +++ b/patches/api/0008-Suspected-plugins-report.patch @@ -111,10 +111,10 @@ index 384edf9890dfbd1cddfdcac4db1ebe9a4d761f78..7c0c63c3f5734d59aa8b57fe3eb3c1fe + // Yatopia end } diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -index 7760be3e34fa20825faf145d9fb5b2855c1a4602..2e8f3efdb683c44b3e42bb0187bc907e64cde288 100644 +index 79d839034d38c941745c6b91f973f908d6cdb8ee..676e2311d6f75e690c0b814c253d91a9d00e4da7 100644 --- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java +++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -@@ -232,4 +232,13 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot +@@ -233,4 +233,13 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot '}'; } // Paper end diff --git a/patches/server/0001-Modify-POM.patch b/patches/server/0001-Modify-POM.patch index 194b52b2..f4215f52 100644 --- a/patches/server/0001-Modify-POM.patch +++ b/patches/server/0001-Modify-POM.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Modify POM diff --git a/pom.xml b/pom.xml -index 752d62eb3b87ab24260ec2c029bae0d2b0e3b908..e790d779d24c2c8d4a74d458839c11bc494eeef1 100644 +index 02bbe784d0a062dd643e37f3ad04b77a78144828..ac2d01ce61a890469867e0b422f953e9652e5a95 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,11 @@ @@ -112,8 +112,8 @@ index 752d62eb3b87ab24260ec2c029bae0d2b0e3b908..e790d779d24c2c8d4a74d458839c11bc test -@@ -161,6 +170,12 @@ - 1.1.0-SNAPSHOT +@@ -168,6 +177,12 @@ + master-SNAPSHOT compile + @@ -125,11 +125,10 @@ index 752d62eb3b87ab24260ec2c029bae0d2b0e3b908..e790d779d24c2c8d4a74d458839c11bc -@@ -174,6 +189,20 @@ - spigotmc-public - https://hub.spigotmc.org/nexus/content/groups/public/ +@@ -186,6 +201,19 @@ + jitpack.io + https://jitpack.io -+ + + destroystokyo-repo + https://papermc.io/repo/repository/maven-public/ @@ -146,7 +145,7 @@ index 752d62eb3b87ab24260ec2c029bae0d2b0e3b908..e790d779d24c2c8d4a74d458839c11bc -@@ -185,15 +214,15 @@ +@@ -197,15 +225,15 @@ diff --git a/patches/server/0002-Brandings.patch b/patches/server/0002-Brandings.patch index ed71e8b3..52d8d47c 100644 --- a/patches/server/0002-Brandings.patch +++ b/patches/server/0002-Brandings.patch @@ -40,7 +40,7 @@ index c1280478ee4565003883df9607d4a8a0e8fe4faa..c6cfdea783eaa40d4eb581a9208d6cdb .completer(new ConsoleCommandCompleter(this.server)) ); diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java -index 83c1176888ead8fe045f1e1dfc78115ad2bf69f3..29ebf64a27ac34a2bfd11a904a5a30e01f766c43 100644 +index 03d5a9f923597c07d050465e261efe9a8bc935a6..439842cb08e600e007a4b447daac182e59d1a1b2 100644 --- a/src/main/java/net/pl3x/purpur/PurpurConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java @@ -182,7 +182,7 @@ public class PurpurConfig { @@ -53,10 +53,10 @@ index 83c1176888ead8fe045f1e1dfc78115ad2bf69f3..29ebf64a27ac34a2bfd11a904a5a30e0 serverModName = getString("settings.server-mod-name", serverModName); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 48dd6de4acf0ef0536a4c562f3eb5f2f90878924..eca800e8396c765ea77c0cbc171bb1a6e4e8707f 100644 +index 12b92ee0491c82a72d1646d14116e187dd965fe6..d5c2fa2363ec898e6fdf16699c3e3e3fef98410c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -231,7 +231,7 @@ import javax.annotation.Nullable; // Paper +@@ -232,7 +232,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper public final class CraftServer implements Server { @@ -79,10 +79,10 @@ index 448538cc8a3d16b028a0a6f0f05c9370a02f4259..e51dcb259d511c369806a83b96c2820f //Thread.sleep(TimeUnit.SECONDS.toMillis(20)); // Paper End diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 821b8665b4ed70c010a0824df99de2667fd4c8ba..939469fa77fad724243abc4d75cba3ae2dd01fcf 100644 +index b14e9a2cd6e849fe91a2512f379036a284323420..54aebe9da1f31b3250b349a91e78eadb7a031096 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -370,7 +370,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -377,7 +377,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { @@ -105,7 +105,7 @@ index 13b98439320ac1401a920c01d7cf5a4b3a23deff..d2f272fd733f7eee9a89029baecccfac if (stream != null) { diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index 58d01c6f8abcd9e1792495abd08b186f9d03f834..476939bde38246eb0fd96e6a4ba8076c9d1b0ff4 100644 +index 089ddda8892c3660c5dcb62d0fd56544857a2eba..8ee165d1c752e53601254f734507370b91ad7b73 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -26,7 +26,7 @@ public class WatchdogThread extends Thread @@ -117,7 +117,7 @@ index 58d01c6f8abcd9e1792495abd08b186f9d03f834..476939bde38246eb0fd96e6a4ba8076c this.timeoutTime = timeoutTime; this.restart = restart; earlyWarningEvery = Math.min(PaperConfig.watchdogPrintEarlyWarningEvery, timeoutTime); // Paper -@@ -162,14 +162,14 @@ public class WatchdogThread extends Thread +@@ -156,14 +156,14 @@ public class WatchdogThread extends Thread if (isLongTimeout) { // Paper end log.log( Level.SEVERE, "------------------------------" ); @@ -135,7 +135,7 @@ index 58d01c6f8abcd9e1792495abd08b186f9d03f834..476939bde38246eb0fd96e6a4ba8076c // if ( net.minecraft.server.World.lastPhysicsProblem != null ) { -@@ -192,12 +192,12 @@ public class WatchdogThread extends Thread +@@ -186,12 +186,12 @@ public class WatchdogThread extends Thread // Paper end } else { @@ -150,7 +150,7 @@ index 58d01c6f8abcd9e1792495abd08b186f9d03f834..476939bde38246eb0fd96e6a4ba8076c ChunkTaskManager.dumpAllChunkLoadInfo(); // Paper this.dumpTickingInfo(); // Tuinity - log detailed tick information dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( server.serverThread.getId(), Integer.MAX_VALUE ), log ); -@@ -213,7 +213,7 @@ public class WatchdogThread extends Thread +@@ -207,7 +207,7 @@ public class WatchdogThread extends Thread dumpThread( thread, log ); } } else { diff --git a/patches/server/0003-Utilities.patch b/patches/server/0003-Utilities.patch index fb5ef182..98dc117b 100644 --- a/patches/server/0003-Utilities.patch +++ b/patches/server/0003-Utilities.patch @@ -9,10 +9,10 @@ Co-authored-by: Mykyta Komarnytskyy Co-authored-by: Ivan Pekov diff --git a/pom.xml b/pom.xml -index e790d779d24c2c8d4a74d458839c11bc494eeef1..04ec0b474a234c04450f04ecf7336d3bb0947420 100644 +index ac2d01ce61a890469867e0b422f953e9652e5a95..05c5ab1e3bc2f6c527332736013d77bb65f29f6d 100644 --- a/pom.xml +++ b/pom.xml -@@ -176,6 +176,12 @@ +@@ -183,6 +183,12 @@ commons-math3 3.6.1 diff --git a/patches/server/0004-Add-GameProfileLookupEvent.patch b/patches/server/0004-Add-GameProfileLookupEvent.patch index 564221dd..e87cb40b 100644 --- a/patches/server/0004-Add-GameProfileLookupEvent.patch +++ b/patches/server/0004-Add-GameProfileLookupEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add GameProfileLookupEvent diff --git a/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java -index 2751ce7f1556da07ef853807a588f096adf6ef7f..8bda2180576d3c58ad592e6158621160a8c4c5cf 100644 +index 6ae316109c8e35fbb6b0aebdee3075beb1445f1b..0c35eefa4abed27b9ca8f4a77a641565f3c54148 100644 --- a/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java +++ b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java -@@ -183,13 +183,24 @@ public class CraftPlayerProfile implements PlayerProfile { +@@ -187,13 +187,24 @@ public class CraftPlayerProfile implements PlayerProfile { boolean isCompleteFromCache = this.completeFromCache(true, onlineMode); if (onlineMode && (!isCompleteFromCache || textures && !hasTextures())) { diff --git a/patches/server/0005-Add-last-tick-time-API.patch b/patches/server/0005-Add-last-tick-time-API.patch index 01f3ab04..b90c5a12 100644 --- a/patches/server/0005-Add-last-tick-time-API.patch +++ b/patches/server/0005-Add-last-tick-time-API.patch @@ -7,10 +7,10 @@ Original patch by: Co-authored-by: tr7zw diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d4dc05a1066bfcd4cdc1bfa04e46aa2d8d6e2fe5..ada93970e324c44aba4f3e817ccaec8a44fa4af3 100644 +index e9c0556af0a8ffd4d85e87bcccf2908444d967eb..dcb757ff80885ead374750a6b9d2247cfd12d70c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -936,6 +936,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant diff --git a/src/main/java/de/minebench/origami/OrigamiConfig.java b/src/main/java/de/minebench/origami/OrigamiConfig.java -index f452cc575adf9137f3b9f1eef1904f8116c7a7ec..15aa603a771c327879a4088609850fb86c6347bd 100644 +index 27599f422be266ad2fdbda49617661801c2c1991..2457b240f3b49dbd5fe0eb603d86418fd65f0205 100644 --- a/src/main/java/de/minebench/origami/OrigamiConfig.java +++ b/src/main/java/de/minebench/origami/OrigamiConfig.java -@@ -136,6 +136,39 @@ public final class OrigamiConfig { +@@ -135,6 +135,39 @@ public final class OrigamiConfig { private void pigmenDontTargetUnlessHit() { pigmenDontTargetUnlessHit = getBoolean("pigmen.dont-target-unless-hit", pigmenDontTargetUnlessHit); } @@ -59,10 +59,10 @@ index f452cc575adf9137f3b9f1eef1904f8116c7a7ec..15aa603a771c327879a4088609850fb8 } \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 39280197902b330dd3d39c721cdef744a15b0550..04623e988ea1f908087b75b729aa1076fb76d8fb 100644 +index 48496d8cc88dd758e68dba8e7051ff8c3c8d99c7..33dc4ecbe165346be6e372883c4ae223741a135b 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2940,7 +2940,7 @@ public abstract class EntityLiving extends Entity { +@@ -2957,7 +2957,7 @@ public abstract class EntityLiving extends Entity { // Paper - end don't run getEntities if we're not going to use its result // Tuinity start - reduce memory allocation from collideNearby List list = com.tuinity.tuinity.util.CachedLists.getTempGetEntitiesList(); diff --git a/patches/server/0009-Add-NBT-API-as-a-first-class-lib.patch b/patches/server/0009-Add-NBT-API-as-a-first-class-lib.patch index eb7a984c..ff551714 100644 --- a/patches/server/0009-Add-NBT-API-as-a-first-class-lib.patch +++ b/patches/server/0009-Add-NBT-API-as-a-first-class-lib.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add NBT API as a first-class lib diff --git a/pom.xml b/pom.xml -index 04ec0b474a234c04450f04ecf7336d3bb0947420..9402ec96f626e5e4f36f7dd678454f9efeb7e254 100644 +index 05c5ab1e3bc2f6c527332736013d77bb65f29f6d..6b235ff5227c8292435bad8720c6bb0ac1c4adf7 100644 --- a/pom.xml +++ b/pom.xml -@@ -358,6 +358,10 @@ +@@ -369,6 +369,10 @@ net.minecraft.server net.minecraft.server.v${minecraft_version} diff --git a/patches/server/0010-Modify-default-configs.patch b/patches/server/0010-Modify-default-configs.patch index 1ca4a7c8..1ec03737 100644 --- a/patches/server/0010-Modify-default-configs.patch +++ b/patches/server/0010-Modify-default-configs.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Modify default configs diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java -index ce14283dd1a1fddbea17c2fbaf1c4ef9d7a7479f..4a21a83c448355d61fb946bd0eb5d752767d536a 100644 +index 4b9fdb4f04b333ce32f7fca8f279bf989e6fd728..992eb7b286becc03549136d031b677dbd6877c17 100644 --- a/src/main/java/com/destroystokyo/paper/PaperConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java @@ -206,7 +206,7 @@ public class PaperConfig { @@ -18,7 +18,7 @@ index ce14283dd1a1fddbea17c2fbaf1c4ef9d7a7479f..4a21a83c448355d61fb946bd0eb5d752 TimingsManager.privacy = getBoolean("timings.server-name-privacy", false); TimingsManager.hiddenConfigs = getList("timings.hidden-config-entries", Lists.newArrayList("database", "settings.bungeecord-addresses", "settings.velocity-support.secret")); diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java -index 39f297a968f3ff31119cefcc629ec459f263d426..c46ef87f02450340e8be6ac3936f72598a7c9088 100644 +index 9f5edd3285bd477a73e18cfe3af51b441b3eeae1..0894428d25ad7ab9a8a05d0bfd93e0e43e7e8c9c 100644 --- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java +++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java @@ -633,7 +633,7 @@ public class PaperWorldConfig { diff --git a/patches/server/0013-lithium-enum_values.patch b/patches/server/0013-lithium-enum_values.patch index 24366fa6..3959c203 100644 --- a/patches/server/0013-lithium-enum_values.patch +++ b/patches/server/0013-lithium-enum_values.patch @@ -39,10 +39,10 @@ index 5d3bb5f393a1e0e4a2e8b9a466530a91279697a9..7f084e7f11a829c10d113c7fb39eec0b if (enumdirection2 != EnumDirection.DOWN && world.isBlockFacePowered(blockposition1.shift(enumdirection2), enumdirection2)) { return true; diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 04623e988ea1f908087b75b729aa1076fb76d8fb..d165d1ec9c2d81f26df0a1a4d5d5f79a6358552b 100644 +index 33dc4ecbe165346be6e372883c4ae223741a135b..cd48e116b9663e1172e6a96f05722443705fdfc2 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java -@@ -2623,10 +2623,12 @@ public abstract class EntityLiving extends Entity { +@@ -2640,10 +2640,12 @@ public abstract class EntityLiving extends Entity { } diff --git a/patches/server/0016-Item-stuck-sleep-config.patch b/patches/server/0016-Item-stuck-sleep-config.patch index ec881820..d4d3a5d2 100644 --- a/patches/server/0016-Item-stuck-sleep-config.patch +++ b/patches/server/0016-Item-stuck-sleep-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Item stuck sleep config diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java -index 954d37ca9e1079616836d3f441845b37c5a541f3..c456e3d6377f5b59c2383da9d52bdb43d3685064 100644 +index 7d2c2e6e58741a6da10117c62a809ae47ee341ee..65280c4b88f01d893acd8bc84f9ab502c0275b76 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java -@@ -85,7 +85,7 @@ public class EntityItem extends Entity { +@@ -86,7 +86,7 @@ public class EntityItem extends Entity { if (this.world.isClientSide) { this.noclip = false; diff --git a/patches/server/0017-Option-for-simpler-Villagers.patch b/patches/server/0017-Option-for-simpler-Villagers.patch index ba0cd98f..432d14a4 100644 --- a/patches/server/0017-Option-for-simpler-Villagers.patch +++ b/patches/server/0017-Option-for-simpler-Villagers.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for simpler Villagers diff --git a/src/main/java/net/minecraft/server/EntityVillager.java b/src/main/java/net/minecraft/server/EntityVillager.java -index 5fc57e2e2afe383ddc9b6d4db714a678c881fa77..b6ae5a18ab1748f71956c2d323eb1011854bd854 100644 +index 9b30273d59eb7f0d40cd54eb9e1d2ebe24b48fca..8ec27653d1c55faeac499ee52117a3801558e518 100644 --- a/src/main/java/net/minecraft/server/EntityVillager.java +++ b/src/main/java/net/minecraft/server/EntityVillager.java -@@ -31,6 +31,7 @@ import org.bukkit.event.entity.VillagerReplenishTradeEvent; +@@ -29,6 +29,7 @@ import org.bukkit.event.entity.VillagerReplenishTradeEvent; public class EntityVillager extends EntityVillagerAbstract implements ReputationHandler, VillagerDataHolder { @@ -16,7 +16,7 @@ index 5fc57e2e2afe383ddc9b6d4db714a678c881fa77..b6ae5a18ab1748f71956c2d323eb1011 private static final DataWatcherObject br = DataWatcher.a(EntityVillager.class, DataWatcherRegistry.q); public static final Map bp = ImmutableMap.of(Items.BREAD, 4, Items.POTATO, 1, Items.CARROT, 1, Items.BEETROOT, 1); private static final Set bs = ImmutableSet.of(Items.BREAD, Items.POTATO, Items.CARROT, Items.WHEAT, Items.WHEAT_SEEDS, Items.BEETROOT, new Item[]{Items.BEETROOT_SEEDS}); -@@ -67,8 +68,14 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -65,8 +66,14 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation public EntityVillager(EntityTypes entitytypes, World world, VillagerType villagertype) { super(entitytypes, world); this.by = new Reputation(); @@ -31,7 +31,7 @@ index 5fc57e2e2afe383ddc9b6d4db714a678c881fa77..b6ae5a18ab1748f71956c2d323eb1011 this.setCanPickupLoot(true); this.setVillagerData(this.getVillagerData().withType(villagertype).withProfession(VillagerProfession.NONE)); this.brainTickOffset = getRandom().nextInt(100); // Purpur -@@ -89,6 +96,38 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -87,6 +94,38 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation protected void initPathfinder() { this.goalSelector.a(0, new PathfinderGoalHasRider(this)); // Purpur if (world.purpurConfig.villagerFollowEmeraldBlock) this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.0D, false, TEMPT_ITEMS)); @@ -70,7 +70,7 @@ index 5fc57e2e2afe383ddc9b6d4db714a678c881fa77..b6ae5a18ab1748f71956c2d323eb1011 } @Override -@@ -114,6 +153,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -112,6 +151,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @Override protected BehaviorController a(Dynamic dynamic) { @@ -78,7 +78,7 @@ index 5fc57e2e2afe383ddc9b6d4db714a678c881fa77..b6ae5a18ab1748f71956c2d323eb1011 BehaviorController behaviorcontroller = this.cK().a(dynamic); this.a(behaviorcontroller); -@@ -213,11 +253,39 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -211,11 +251,39 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation // Purpur end private int behaviorTick = 0; @@ -118,7 +118,7 @@ index 5fc57e2e2afe383ddc9b6d4db714a678c881fa77..b6ae5a18ab1748f71956c2d323eb1011 // Purpur start if (world.purpurConfig.villagerLobotomizeEnabled) inactive = inactive || isLobotomized(); boolean tick = (world.getTime() + brainTickOffset) % world.purpurConfig.villagerBrainTicks == 0; -@@ -344,6 +412,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -342,6 +410,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation this.fl(); } @@ -126,7 +126,7 @@ index 5fc57e2e2afe383ddc9b6d4db714a678c881fa77..b6ae5a18ab1748f71956c2d323eb1011 private void fl() { Iterator iterator = this.getOffers().iterator(); -@@ -418,6 +487,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -416,6 +485,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation return this.fn() && this.fm(); } @@ -134,7 +134,7 @@ index 5fc57e2e2afe383ddc9b6d4db714a678c881fa77..b6ae5a18ab1748f71956c2d323eb1011 private void fo() { int i = 2 - this.bD; -@@ -650,6 +720,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -648,6 +718,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } private void a(Entity entity) { @@ -142,7 +142,7 @@ index 5fc57e2e2afe383ddc9b6d4db714a678c881fa77..b6ae5a18ab1748f71956c2d323eb1011 if (this.world instanceof WorldServer) { Optional> optional = this.bg.getMemory(MemoryModuleType.VISIBLE_MOBS); -@@ -666,6 +737,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -664,6 +735,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } public void a(MemoryModuleType memorymoduletype) { diff --git a/patches/server/0018-Heavily-optimize-furnance-fuel-and-recipe-lookups.patch b/patches/server/0018-Heavily-optimize-furnance-fuel-and-recipe-lookups.patch index ba80230c..cb68d81a 100644 --- a/patches/server/0018-Heavily-optimize-furnance-fuel-and-recipe-lookups.patch +++ b/patches/server/0018-Heavily-optimize-furnance-fuel-and-recipe-lookups.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Heavily optimize furnance fuel and recipe lookups Co-authored-by: Mykyta Komarn diff --git a/src/main/java/net/minecraft/server/TileEntityFurnace.java b/src/main/java/net/minecraft/server/TileEntityFurnace.java -index 76ea1d003b43d822e2b85eec3b8740155efd531a..c1d1ce582c94fd20f42b1979d6edbb6b377adff8 100644 +index 48359a7e79b64026e38e7cd17505d8944106e089..9ff95817cc1ec4f28070e8e91bf8ab64cad7b23c 100644 --- a/src/main/java/net/minecraft/server/TileEntityFurnace.java +++ b/src/main/java/net/minecraft/server/TileEntityFurnace.java -@@ -299,7 +299,10 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I +@@ -300,7 +300,10 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I this.cookTime = MathHelper.clamp(this.cookTime - 2, 0, this.cookTimeTotal); } } else { @@ -21,7 +21,7 @@ index 76ea1d003b43d822e2b85eec3b8740155efd531a..c1d1ce582c94fd20f42b1979d6edbb6b if (!this.isBurning() && this.canBurn(irecipe)) { // CraftBukkit start -@@ -627,4 +630,18 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I +@@ -632,4 +635,18 @@ public abstract class TileEntityFurnace extends TileEntityContainer implements I } } diff --git a/patches/server/0021-Redirect-Configs.patch b/patches/server/0021-Redirect-Configs.patch index 1c886332..7e6b8c16 100644 --- a/patches/server/0021-Redirect-Configs.patch +++ b/patches/server/0021-Redirect-Configs.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Redirect Configs diff --git a/src/main/java/de/minebench/origami/OrigamiConfig.java b/src/main/java/de/minebench/origami/OrigamiConfig.java -index 15aa603a771c327879a4088609850fb86c6347bd..553d6fafbcabafeb008fcf5b60adb8d1a5ffeb6b 100644 +index 2457b240f3b49dbd5fe0eb603d86418fd65f0205..fa6637caf388c5ed1d3371c6433c8ede6c84d0f3 100644 --- a/src/main/java/de/minebench/origami/OrigamiConfig.java +++ b/src/main/java/de/minebench/origami/OrigamiConfig.java @@ -20,6 +20,8 @@ public final class OrigamiConfig { @@ -39,10 +39,10 @@ index 15aa603a771c327879a4088609850fb86c6347bd..553d6fafbcabafeb008fcf5b60adb8d1 for (final Method method : clazz.getDeclaredMethods()) { if (method.getReturnType() != void.class || method.getParameterCount() != 0 || diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java -index 20da9b4333e02a1f24eff0c7bbe17a7231bb3359..4bacbd38bc0b39724f1c07ec5a266942d2d1ed81 100644 +index b55d73e39b5665f5444497e54e940e172109a76b..f6c6fde2e4157b4723706c2d390942026839df98 100644 --- a/src/main/java/net/minecraft/server/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/DedicatedServer.java -@@ -189,7 +189,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer +@@ -197,7 +197,7 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer return false; } // Yatopia end diff --git a/patches/server/0023-Fix-lead-fall-dmg-config.patch b/patches/server/0023-Fix-lead-fall-dmg-config.patch index fe39b14b..3db2af5f 100644 --- a/patches/server/0023-Fix-lead-fall-dmg-config.patch +++ b/patches/server/0023-Fix-lead-fall-dmg-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix lead fall dmg config diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 0fe4c8f9c669f343fef3e2869f22b46d8ef7136b..275d730601c4a60c4bd74eb5e5db52a58b1e2be7 100644 +index 426bebc5cd67ffcc72ee56d437cc13f6846e109c..7c84ba2169dd72177f8426d990da72b6f30b7e4f 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java -@@ -1290,6 +1290,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke +@@ -1303,6 +1303,8 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke this.fallDistance = 0.0F; } else if (d0 < 0.0D) { this.fallDistance = (float) ((double) this.fallDistance - d0); diff --git a/patches/server/0026-Add-timings-for-Pathfinder.patch b/patches/server/0026-Add-timings-for-Pathfinder.patch index f1bab786..2613cd7b 100644 --- a/patches/server/0026-Add-timings-for-Pathfinder.patch +++ b/patches/server/0026-Add-timings-for-Pathfinder.patch @@ -18,7 +18,7 @@ index 68ab5ccb2fcfe1de0503c9336572f28e11832b2d..4d4c25cb328b0ca2e16d3c823214aca5 * Gets a timer associated with a plugins tasks. * @param bukkitTask diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java -index 1208464fba96daf276c9cc0c1c9b18db75b03abc..ae954c018e47cb114f8706a0cea6f4222b14c161 100644 +index b5ea7997040b5bfd98925a146e446aa3c56574da..c6162740b01b51a49cfa312722d82856610e823c 100644 --- a/src/main/java/net/minecraft/server/NavigationAbstract.java +++ b/src/main/java/net/minecraft/server/NavigationAbstract.java @@ -29,6 +29,7 @@ public abstract class NavigationAbstract { diff --git a/patches/server/0031-Stop-wasting-resources-on-JsonList-get.patch b/patches/server/0031-Stop-wasting-resources-on-JsonList-get.patch index cda17655..0b2eaa4d 100644 --- a/patches/server/0031-Stop-wasting-resources-on-JsonList-get.patch +++ b/patches/server/0031-Stop-wasting-resources-on-JsonList-get.patch @@ -14,7 +14,7 @@ Our changes are the following: triggers removing of all stale entries. diff --git a/src/main/java/net/minecraft/server/JsonList.java b/src/main/java/net/minecraft/server/JsonList.java -index 1fc0139cb9694ddea41f57d95774c3b47e8530c5..d683e3e509cc21d007d3e32f68235cfad007d0d0 100644 +index 8da5f976109accc84b26ec4045776aa8a9799f3d..b97931b9234bb0fb95fef4e03f003c63f8da5b88 100644 --- a/src/main/java/net/minecraft/server/JsonList.java +++ b/src/main/java/net/minecraft/server/JsonList.java @@ -69,9 +69,13 @@ public abstract class JsonList> { @@ -55,10 +55,10 @@ index 1fc0139cb9694ddea41f57d95774c3b47e8530c5..d683e3e509cc21d007d3e32f68235cfa Throwable throwable = null; diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index 8b3b0dd9f67a0462737d0c2d61948f33840fceb1..cf53c8fe805764e995cab8eced00f10f9c52fd8e 100644 +index 7aee575ab7bffe8eda4a9fc8c06e580340893fdd..144974e19f29434b988a70b82ecfbb2905d2cfd6 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -648,6 +648,7 @@ public abstract class PlayerList { +@@ -647,6 +647,7 @@ public abstract class PlayerList { GameProfileBanEntry gameprofilebanentry; if (getProfileBans().isBanned(gameprofile) && (gameprofilebanentry = getProfileBans().get(gameprofile)) != null) { // Paper end @@ -66,16 +66,16 @@ index 8b3b0dd9f67a0462737d0c2d61948f33840fceb1..cf53c8fe805764e995cab8eced00f10f chatmessage = new ChatMessage("multiplayer.disconnect.banned.reason", new Object[]{gameprofilebanentry.getReason()}); if (gameprofilebanentry.getExpires() != null) { -@@ -655,7 +656,11 @@ public abstract class PlayerList { +@@ -654,7 +655,11 @@ public abstract class PlayerList { } // return chatmessage; -- if (!gameprofilebanentry.hasExpired()) event.disallow(PlayerLoginEvent.Result.KICK_BANNED, CraftChatMessage.fromComponent(chatmessage)); // Spigot +- if (!gameprofilebanentry.hasExpired()) event.disallow(PlayerLoginEvent.Result.KICK_BANNED, PaperAdventure.asAdventure(chatmessage)); // Spigot // Paper - Adventure + // Yatopia start -+ /* if (!gameprofilebanentry.hasExpired()) */ event.disallow(PlayerLoginEvent.Result.KICK_BANNED, CraftChatMessage.fromComponent(chatmessage)); // Spigot ++ /* if (!gameprofilebanentry.hasExpired()) */ event.disallow(PlayerLoginEvent.Result.KICK_BANNED, PaperAdventure.asAdventure(chatmessage)); // Spigot // Paper - Adventure + } else { + getProfileBans().remove(gameprofile); + } // Yatopia end } else if (!this.isWhitelisted(gameprofile, event)) { // Paper - chatmessage = new ChatMessage("multiplayer.disconnect.not_whitelisted"); + //chatmessage = new ChatMessage("multiplayer.disconnect.not_whitelisted"); // Paper //event.disallow(PlayerLoginEvent.Result.KICK_WHITELIST, org.spigotmc.SpigotConfig.whitelistMessage); // Spigot // Paper - moved to isWhitelisted diff --git a/patches/server/0032-Fix-LightEngineThreaded-memory-leak.patch b/patches/server/0032-Fix-LightEngineThreaded-memory-leak.patch index 92d98410..b87e26c6 100644 --- a/patches/server/0032-Fix-LightEngineThreaded-memory-leak.patch +++ b/patches/server/0032-Fix-LightEngineThreaded-memory-leak.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix LightEngineThreaded memory leak diff --git a/src/main/java/net/minecraft/server/LightEngineThreaded.java b/src/main/java/net/minecraft/server/LightEngineThreaded.java -index 001ac05cf26237eec8a77c476e678ff6d0840311..7b4935dd8c54f5fcb4f26b96c270d3e4102133a3 100644 +index b2f51a6786d4bb92c9cbbceeea812375b1a49bd6..d16157dcbc6f36fa0c8284784641e54413d249be 100644 --- a/src/main/java/net/minecraft/server/LightEngineThreaded.java +++ b/src/main/java/net/minecraft/server/LightEngineThreaded.java @@ -110,6 +110,8 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { diff --git a/patches/server/0033-Respect-PlayerKickEvent-leaveMessage.patch b/patches/server/0033-Respect-PlayerKickEvent-leaveMessage.patch deleted file mode 100644 index 853d27be..00000000 --- a/patches/server/0033-Respect-PlayerKickEvent-leaveMessage.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Ivan Pekov -Date: Thu, 10 Sep 2020 21:16:40 +0300 -Subject: [PATCH] Respect PlayerKickEvent leaveMessage - - -diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java -index 1471785da53a18edf31a20212f3cc6c19de92822..8bb500513b8d3baf2b08137d7b31737792265608 100644 ---- a/src/main/java/net/minecraft/server/PlayerConnection.java -+++ b/src/main/java/net/minecraft/server/PlayerConnection.java -@@ -329,7 +329,7 @@ public class PlayerConnection implements PacketListenerPlayIn { - this.networkManager.sendPacket(new PacketPlayOutKickDisconnect(ichatbasecomponent), (future) -> { - this.networkManager.close(ichatbasecomponent); - }); -- this.a(ichatbasecomponent); // CraftBukkit - fire quit instantly -+ this.a(ichatbasecomponent, event.getLeaveMessage() == null || event.getLeaveMessage().equalsIgnoreCase(leaveMessage) ? null : event.getLeaveMessage()); // CraftBukkit - fire quit instantly // Yatopia - this.networkManager.stopReading(); - MinecraftServer minecraftserver = this.minecraftServer; - NetworkManager networkmanager = this.networkManager; -@@ -1784,6 +1784,11 @@ public class PlayerConnection implements PacketListenerPlayIn { - - @Override - public void a(IChatBaseComponent ichatbasecomponent) { -+ // Yatopia start - added quitMessage parameter -+ a(ichatbasecomponent, null); -+ } -+ public void a(IChatBaseComponent ichatbasecomponent, String quitMessage) { -+ // Yatopia end - // CraftBukkit start - Rarely it would send a disconnect line twice - if (this.processedDisconnect) { - return; -@@ -1799,7 +1804,7 @@ public class PlayerConnection implements PacketListenerPlayIn { - */ - - this.player.p(); -- String quitMessage = this.minecraftServer.getPlayerList().disconnect(this.player); -+ quitMessage = this.minecraftServer.getPlayerList().disconnect(this.player, quitMessage); // Yatopia - if ((quitMessage != null) && (quitMessage.length() > 0)) { - this.minecraftServer.getPlayerList().sendMessage(CraftChatMessage.fromString(quitMessage)); - } -diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index cf53c8fe805764e995cab8eced00f10f9c52fd8e..c094d27c2d46e75212b0742040a7f57bd0406943 100644 ---- a/src/main/java/net/minecraft/server/PlayerList.java -+++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -500,6 +500,11 @@ public abstract class PlayerList { - } - - public String disconnect(EntityPlayer entityplayer) { // CraftBukkit - return string -+ // Yatopia start - add quitMessage parameter -+ return disconnect(entityplayer, null); -+ } -+ public String disconnect(EntityPlayer entityplayer, String quitMessage) { -+ // Yatopia end - WorldServer worldserver = entityplayer.getWorldServer(); - - entityplayer.a(StatisticList.LEAVE_GAME); -@@ -599,7 +604,7 @@ public abstract class PlayerList { - cserver.getScoreboardManager().removePlayer(entityplayer.getBukkitEntity()); - // CraftBukkit end - -- return entityplayer.didPlayerJoinEvent ? playerQuitEvent.getQuitMessage() : null; // CraftBukkit // Paper - don't print quit if we never printed join -+ return entityplayer.didPlayerJoinEvent ? quitMessage != null ? quitMessage : playerQuitEvent.getQuitMessage() : null; // CraftBukkit // Paper - don't print quit if we never printed join // Yatopia - } - - // CraftBukkit start - Whole method, SocketAddress to LoginListener, added hostname to signature, return EntityPlayer diff --git a/patches/server/0034-Shutdown-Bootstrap-thread-pool.patch b/patches/server/0033-Shutdown-Bootstrap-thread-pool.patch similarity index 100% rename from patches/server/0034-Shutdown-Bootstrap-thread-pool.patch rename to patches/server/0033-Shutdown-Bootstrap-thread-pool.patch diff --git a/patches/server/0035-Optimize-Villagers.patch b/patches/server/0034-Optimize-Villagers.patch similarity index 94% rename from patches/server/0035-Optimize-Villagers.patch rename to patches/server/0034-Optimize-Villagers.patch index 67b01e91..4242c0cd 100644 --- a/patches/server/0035-Optimize-Villagers.patch +++ b/patches/server/0034-Optimize-Villagers.patch @@ -14,7 +14,7 @@ The following has been done to fix the mentioned problems: - Added a profession cache, which followed by a stream removal. diff --git a/src/main/java/net/minecraft/server/BehaviorFindPosition.java b/src/main/java/net/minecraft/server/BehaviorFindPosition.java -index 8d445e9c0875db6cf45e4d8bcfce7cd3d5094d94..4afe59084b85f466c8fb2fac2ac77e5097dcd0f0 100644 +index 0594b0bb12c553edbb6284b48328a3dcf5a64ba4..05e03c1643e1e161f8c2b6e5d4e65f60dc99cb26 100644 --- a/src/main/java/net/minecraft/server/BehaviorFindPosition.java +++ b/src/main/java/net/minecraft/server/BehaviorFindPosition.java @@ -48,7 +48,7 @@ public class BehaviorFindPosition extends Behavior { @@ -32,10 +32,10 @@ index 8d445e9c0875db6cf45e4d8bcfce7cd3d5094d94..4afe59084b85f466c8fb2fac2ac77e50 protected void a(WorldServer worldserver, EntityCreature entitycreature, long i) { - this.f = i + 20L + (long) worldserver.getRandom().nextInt(20); + this.f = i + 20L + (long) java.util.concurrent.ThreadLocalRandom.current().nextInt(20); // Yatopia + if (entitycreature.getNavigation().isStuck()) this.f += 200L; // Airplane - wait an additional 10s to check again if they're stuck VillagePlace villageplace = worldserver.y(); - this.g.long2ObjectEntrySet().removeIf((entry) -> { -@@ -287,12 +287,20 @@ public class BehaviorFindPosition extends Behavior { +@@ -288,12 +288,20 @@ public class BehaviorFindPosition extends Behavior { BehaviorFindPosition.a behaviorfindposition_a = (BehaviorFindPosition.a) this.g.get(blockposition.asLong()); if (behaviorfindposition_a == null) { @@ -59,7 +59,7 @@ index 8d445e9c0875db6cf45e4d8bcfce7cd3d5094d94..4afe59084b85f466c8fb2fac2ac77e50 } }; Set set = findNearestPoi(villageplace, this.b.c(), predicate, entitycreature.getChunkCoordinates(), 48, VillagePlace.Occupancy.HAS_SPACE, 5); // Tuinity - remove streams entirely for poi search -@@ -319,7 +327,7 @@ public class BehaviorFindPosition extends Behavior { +@@ -320,7 +328,7 @@ public class BehaviorFindPosition extends Behavior { BlockPosition blockposition1 = (BlockPosition) iterator.next(); this.g.computeIfAbsent(blockposition1.asLong(), (j) -> { diff --git a/patches/server/0036-Optimize-whitelist-command-for-multiple-additions-re.patch b/patches/server/0035-Optimize-whitelist-command-for-multiple-additions-re.patch similarity index 95% rename from patches/server/0036-Optimize-whitelist-command-for-multiple-additions-re.patch rename to patches/server/0035-Optimize-whitelist-command-for-multiple-additions-re.patch index 1fc16f83..1ee5f43e 100644 --- a/patches/server/0036-Optimize-whitelist-command-for-multiple-additions-re.patch +++ b/patches/server/0035-Optimize-whitelist-command-for-multiple-additions-re.patch @@ -111,10 +111,10 @@ index 893d2c1c74ed28dcdb83b71762ccdcbfd50a8f9d..107091a4cae0e4eaba93f69ae91239ab private static int b(CommandListenerWrapper commandlistenerwrapper) throws CommandSyntaxException { diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 81f7d5bc581b42289a79121da15868999ab9feef..7ee038e24cf696b7a32c5c67d4b0dd46c1e60118 100644 +index c2e0f449400d7477be6310c8d59efe21a517afb3..4e95e542fa79a0cf548a939e575ecca55021229a 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java -@@ -76,6 +76,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -78,6 +78,7 @@ public abstract class EntityHuman extends EntityLiving { // CraftBukkit start public boolean fauxSleeping; public int oldLevel = -1; @@ -122,7 +122,7 @@ index 81f7d5bc581b42289a79121da15868999ab9feef..7ee038e24cf696b7a32c5c67d4b0dd46 @Override public CraftHumanEntity getBukkitEntity() { -@@ -1904,6 +1905,15 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1917,6 +1918,15 @@ public abstract class EntityHuman extends EntityLiving { return this.getProfile().getName(); } @@ -139,7 +139,7 @@ index 81f7d5bc581b42289a79121da15868999ab9feef..7ee038e24cf696b7a32c5c67d4b0dd46 public float b(EntityPose entitypose, EntitySize entitysize) { switch (entitypose) { diff --git a/src/main/java/net/minecraft/server/JsonList.java b/src/main/java/net/minecraft/server/JsonList.java -index d683e3e509cc21d007d3e32f68235cfad007d0d0..83109fb0ad57eef2b24b5c3cb5875535e0a8e67f 100644 +index b97931b9234bb0fb95fef4e03f003c63f8da5b88..3a44d9876fc973f18432dd3294d585dbc65f755f 100644 --- a/src/main/java/net/minecraft/server/JsonList.java +++ b/src/main/java/net/minecraft/server/JsonList.java @@ -64,6 +64,20 @@ public abstract class JsonList> { @@ -185,10 +185,10 @@ index d683e3e509cc21d007d3e32f68235cfad007d0d0..83109fb0ad57eef2b24b5c3cb5875535 return (String[]) this.d.keySet().toArray(new String[this.d.size()]); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ada93970e324c44aba4f3e817ccaec8a44fa4af3..2d6f650c98a8254c722eb851d73b42d7066c8f17 100644 +index dcb757ff80885ead374750a6b9d2247cfd12d70c..0585d18a0bd04fe8ceb429e55f962e245b76e54d 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1984,6 +1984,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant recipeType : IRegistry.RECIPE_TYPE) { this.recipes.put(recipeType, new Object2ObjectLinkedOpenHashMap<>()); diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java -index 3f9062d8eca3ce53c0fb9e9e40330aa4e3296c9a..ba16239dd351341bc97a8484369d97ecb655b52b 100644 +index 47e3ac6bcebacd9c424ddcc49774e06e05f02fe2..cf3e4382aecd4c44c45877386eaf8fcc49657029 100644 --- a/src/main/java/net/minecraft/server/ItemStack.java +++ b/src/main/java/net/minecraft/server/ItemStack.java @@ -585,6 +585,7 @@ public final class ItemStack { diff --git a/patches/server/0044-Optimize-advancement-loading.patch b/patches/server/0043-Optimize-advancement-loading.patch similarity index 100% rename from patches/server/0044-Optimize-advancement-loading.patch rename to patches/server/0043-Optimize-advancement-loading.patch diff --git a/patches/server/0045-lithium-PerlinNoiseSamplerMixin.patch b/patches/server/0044-lithium-PerlinNoiseSamplerMixin.patch similarity index 100% rename from patches/server/0045-lithium-PerlinNoiseSamplerMixin.patch rename to patches/server/0044-lithium-PerlinNoiseSamplerMixin.patch diff --git a/patches/server/0046-lithium-VoronoiBiomeAccessTypeMixin.patch b/patches/server/0045-lithium-VoronoiBiomeAccessTypeMixin.patch similarity index 100% rename from patches/server/0046-lithium-VoronoiBiomeAccessTypeMixin.patch rename to patches/server/0045-lithium-VoronoiBiomeAccessTypeMixin.patch diff --git a/patches/server/0047-lithium-NoiseChunkGeneratorMixin.patch b/patches/server/0046-lithium-NoiseChunkGeneratorMixin.patch similarity index 100% rename from patches/server/0047-lithium-NoiseChunkGeneratorMixin.patch rename to patches/server/0046-lithium-NoiseChunkGeneratorMixin.patch diff --git a/patches/server/0048-lithium-reduce-allocations.patch b/patches/server/0047-lithium-reduce-allocations.patch similarity index 87% rename from patches/server/0048-lithium-reduce-allocations.patch rename to patches/server/0047-lithium-reduce-allocations.patch index 692b93aa..8fdfa3fc 100644 --- a/patches/server/0048-lithium-reduce-allocations.patch +++ b/patches/server/0047-lithium-reduce-allocations.patch @@ -11,10 +11,10 @@ Portions of this patch that were sourced from Lithium were remapped from Yarn ma Co-authored-by: Mykyta Komarnytskyy diff --git a/src/main/java/net/minecraft/server/BlockComposter.java b/src/main/java/net/minecraft/server/BlockComposter.java -index 55a5999080b831217b88ed3657e95218fe982c18..8025b5d258fc761f1287a395889e352beb105ad7 100644 +index 115eb270c5b5f19432e30eec41a652939a61dd94..03e8a7abbe6567ee0ecd8a8e4ea85b9bebb7dc4f 100644 --- a/src/main/java/net/minecraft/server/BlockComposter.java +++ b/src/main/java/net/minecraft/server/BlockComposter.java -@@ -305,7 +305,7 @@ public class BlockComposter extends Block implements IInventoryHolder { +@@ -306,7 +306,7 @@ public class BlockComposter extends Block implements IInventoryHolder { @Override public int[] getSlotsForFace(EnumDirection enumdirection) { @@ -23,7 +23,7 @@ index 55a5999080b831217b88ed3657e95218fe982c18..8025b5d258fc761f1287a395889e352b } @Override -@@ -355,7 +355,7 @@ public class BlockComposter extends Block implements IInventoryHolder { +@@ -356,7 +356,7 @@ public class BlockComposter extends Block implements IInventoryHolder { @Override public int[] getSlotsForFace(EnumDirection enumdirection) { @@ -32,7 +32,7 @@ index 55a5999080b831217b88ed3657e95218fe982c18..8025b5d258fc761f1287a395889e352b } @Override -@@ -391,7 +391,7 @@ public class BlockComposter extends Block implements IInventoryHolder { +@@ -392,7 +392,7 @@ public class BlockComposter extends Block implements IInventoryHolder { @Override public int[] getSlotsForFace(EnumDirection enumdirection) { diff --git a/patches/server/0049-Smarter-statistics-ticking.patch b/patches/server/0048-Smarter-statistics-ticking.patch similarity index 94% rename from patches/server/0049-Smarter-statistics-ticking.patch rename to patches/server/0048-Smarter-statistics-ticking.patch index 05883a24..4825e423 100644 --- a/patches/server/0049-Smarter-statistics-ticking.patch +++ b/patches/server/0048-Smarter-statistics-ticking.patch @@ -8,10 +8,10 @@ In vanilla, statistics that count time spent for an action (i.e. time played or With an interval of 20, this patch saves roughly 3ms per tick on a server w/ 80 players online. diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java -index 6b09b5d10ba824d589ee998c19d347074ad81d17..0511d2a37a7cfc906f13df72e91ffed993639376 100644 +index 124802af04f06dfb90d46960975cdad422088dc4..9452eae41bbad0305b3d66ce2fe20667effd2bdf 100644 --- a/src/main/java/net/minecraft/server/EntityHuman.java +++ b/src/main/java/net/minecraft/server/EntityHuman.java -@@ -173,18 +173,23 @@ public abstract class EntityHuman extends EntityLiving { +@@ -175,18 +175,23 @@ public abstract class EntityHuman extends EntityLiving { this.p(); if (!this.world.isClientSide) { this.foodData.a(this); diff --git a/patches/server/0050-Configurable-criterion-triggers.patch b/patches/server/0049-Configurable-criterion-triggers.patch similarity index 91% rename from patches/server/0050-Configurable-criterion-triggers.patch rename to patches/server/0049-Configurable-criterion-triggers.patch index 605d3018..a02e74c7 100644 --- a/patches/server/0050-Configurable-criterion-triggers.patch +++ b/patches/server/0049-Configurable-criterion-triggers.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Configurable criterion triggers This patch adds toggles for three criterion triggers that are called every tick. These can be very unnecessary, and especially in the case of CriterionTriggerEnterBlock, quite heavy. diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java -index 9013e8655d6e09f830adda8001567ab889a22479..53f72db8abbfdd60d4491169f53a4c84c9763983 100644 +index 5118e0c0dd908d7cafe1f53e2ff28d44a6138442..bbe44052661ef6796da5a807fc6ab984abe8e6dd 100644 --- a/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/EntityPlayer.java -@@ -436,6 +436,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -439,6 +439,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @Override protected void a(IBlockData iblockdata) { @@ -17,7 +17,7 @@ index 9013e8655d6e09f830adda8001567ab889a22479..53f72db8abbfdd60d4491169f53a4c84 CriterionTriggers.d.a(this, iblockdata); } -@@ -766,7 +767,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -769,7 +770,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { this.playerConnection.sendPacket(new PacketPlayOutExperience(this.exp, this.expTotal, this.expLevel)); } diff --git a/patches/server/0051-Configurable-BlockPhysicsEvent.patch b/patches/server/0050-Configurable-BlockPhysicsEvent.patch similarity index 94% rename from patches/server/0051-Configurable-BlockPhysicsEvent.patch rename to patches/server/0050-Configurable-BlockPhysicsEvent.patch index d9be5022..8cdd5b18 100644 --- a/patches/server/0051-Configurable-BlockPhysicsEvent.patch +++ b/patches/server/0050-Configurable-BlockPhysicsEvent.patch @@ -8,10 +8,10 @@ Paper does alleviate this quite well by only firing if plugins are listening, bu This patch implements a hard toggle for the event. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 2d6f650c98a8254c722eb851d73b42d7066c8f17..052d02824acb69fbba17ca605afe576b9977820e 100644 +index 0585d18a0bd04fe8ceb429e55f962e245b76e54d..30dc0f03ced95518f380e13f9aa52fc65e0b6298 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1418,7 +1418,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant -Date: Mon, 4 Jan 2021 10:45:49 +0200 -Subject: [PATCH] PaperPR - Fix username connecting with no texture being - overwritten by usercache - - -diff --git a/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java -index 8bda2180576d3c58ad592e6158621160a8c4c5cf..44132e902b653b07b21fd01d13a88870290af439 100644 ---- a/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java -+++ b/src/main/java/com/destroystokyo/paper/profile/CraftPlayerProfile.java -@@ -166,9 +166,15 @@ public class CraftPlayerProfile implements PlayerProfile { - if ((profile.getName() == null || !hasTextures()) && profile.getId() != null) { - GameProfile profile = userCache.getProfile(this.profile.getId()); - if (profile != null) { -+ // Yatopia start - fix username connecting with no texture being overwritten by user cache -+ if (this.profile.getName() == null) { - // if old has it, assume its newer, so overwrite, else use cached if it was set and ours wasn't - copyProfileProperties(this.profile, profile); - this.profile = profile; -+ } else { -+ copyProfileProperties(profile, this.profile); -+ } -+ // Yatopia end - } - } - return this.profile.isComplete(); diff --git a/patches/server/0057-Smol-entity-optimisations.patch b/patches/server/0055-Smol-entity-optimisations.patch similarity index 82% rename from patches/server/0057-Smol-entity-optimisations.patch rename to patches/server/0055-Smol-entity-optimisations.patch index 2d688734..9509f52b 100644 --- a/patches/server/0057-Smol-entity-optimisations.patch +++ b/patches/server/0055-Smol-entity-optimisations.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Smol entity optimisations diff --git a/src/main/java/net/minecraft/server/EntityBat.java b/src/main/java/net/minecraft/server/EntityBat.java -index 778cd2d0e091b455fddf05d9c07605a6c305de94..c6ef1c30d3a2269954fa2bfa0eb34a1478b58df6 100644 +index e384eef05faa449c442334910069d163170a9dcd..c090e0bb941f3d62efed4a0f5676c440b8740951 100644 --- a/src/main/java/net/minecraft/server/EntityBat.java +++ b/src/main/java/net/minecraft/server/EntityBat.java -@@ -266,7 +266,7 @@ public class EntityBat extends EntityAmbient { +@@ -267,7 +267,7 @@ public class EntityBat extends EntityAmbient { if (blockposition.getY() >= generatoraccess.getSeaLevel()) { return false; } else { @@ -17,7 +17,7 @@ index 778cd2d0e091b455fddf05d9c07605a6c305de94..c6ef1c30d3a2269954fa2bfa0eb34a14 byte b0 = 4; if (eJ()) { -@@ -275,6 +275,7 @@ public class EntityBat extends EntityAmbient { +@@ -276,6 +276,7 @@ public class EntityBat extends EntityAmbient { return false; } diff --git a/patches/server/0058-add-config-for-logging-login-location.patch b/patches/server/0056-add-config-for-logging-login-location.patch similarity index 93% rename from patches/server/0058-add-config-for-logging-login-location.patch rename to patches/server/0056-add-config-for-logging-login-location.patch index 8103a53c..7f8b7d2d 100644 --- a/patches/server/0058-add-config-for-logging-login-location.patch +++ b/patches/server/0056-add-config-for-logging-login-location.patch @@ -5,10 +5,10 @@ Subject: [PATCH] add config for logging login location diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java -index c094d27c2d46e75212b0742040a7f57bd0406943..c5b617c2a20163fddcf79a5493a76cb675eab834 100644 +index 144974e19f29434b988a70b82ecfbb2905d2cfd6..a1ac42258438e746fd62479ae59a6a402bf72ad0 100644 --- a/src/main/java/net/minecraft/server/PlayerList.java +++ b/src/main/java/net/minecraft/server/PlayerList.java -@@ -396,7 +396,14 @@ public abstract class PlayerList { +@@ -395,7 +395,14 @@ public abstract class PlayerList { } // Paper end // CraftBukkit - Moved from above, added world diff --git a/patches/server/0059-Preload-ProtocolLib-EnumWrappers.patch b/patches/server/0057-Preload-ProtocolLib-EnumWrappers.patch similarity index 95% rename from patches/server/0059-Preload-ProtocolLib-EnumWrappers.patch rename to patches/server/0057-Preload-ProtocolLib-EnumWrappers.patch index 5171f9d2..d6392f52 100644 --- a/patches/server/0059-Preload-ProtocolLib-EnumWrappers.patch +++ b/patches/server/0057-Preload-ProtocolLib-EnumWrappers.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Preload ProtocolLib EnumWrappers Currently, ProtocolLib load EnumWrappers lazily and causing memory effects issues. This patch preloads EnumWrappers to prevent further NPE. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 17a131b35c2be525d18bc1ba7800a0fe79c2b541..cc48769c4d6e2146244e510a0295308979636314 100644 +index ace04bf4c11b93dd37c047d06879dae14fc1f953..228fbcfca5724be741ebe863e2bff2107a73f0d3 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -960,6 +960,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index cc48769c4d6e2146244e510a0295308979636314..1dcc3c19b7bb88d0c03dd74b5ab1a3245bb94450 100644 +index 228fbcfca5724be741ebe863e2bff2107a73f0d3..67e27a2931acd281803f8003069fac54245d4df6 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -825,7 +825,9 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant> { @@ -76,7 +76,7 @@ index 548c62a838848a9183e14f91b21a9dc309d8a3b2..acded2b5ef02c24f52050fcc8f06ccb5 close(new ChatMessage("disconnect.genericReason", "Internal Exception: " + e.getMessage()));; packet.onPacketDispatchFinish(player, null); diff --git a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java -index 7fff1b3e4eda519851b714502d33122c1e408009..41949bebe38bfa734f1d06df209ca842d1a42933 100644 +index 8112b01f15c33f50fe5ec9aebf75d8091d440994..eb7e229ba4a2e4701a5a7a599f5e18da403a638b 100644 --- a/src/main/java/net/minecraft/server/PlayerConnectionUtils.java +++ b/src/main/java/net/minecraft/server/PlayerConnectionUtils.java @@ -45,6 +45,11 @@ public class PlayerConnectionUtils { @@ -175,10 +175,10 @@ index 0be39dac4b9dd69d7d73d86d64cf1e33e4086e81..c53531bc769ecd39c4f03b7a10c5bc6a + // Yatopia end } diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index 476939bde38246eb0fd96e6a4ba8076c9d1b0ff4..d13bd96716db90a5d9ab65f3c7d025b75947b71a 100644 +index 8ee165d1c752e53601254f734507370b91ad7b73..4a81dde40e2534d99001a02adac12031c26c8104 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java -@@ -140,6 +140,15 @@ public class WatchdogThread extends Thread +@@ -134,6 +134,15 @@ public class WatchdogThread extends Thread log.log(Level.SEVERE, "Handling packet for connection: " + packetListener); } } @@ -194,7 +194,7 @@ index 476939bde38246eb0fd96e6a4ba8076c9d1b0ff4..d13bd96716db90a5d9ab65f3c7d025b7 } // Tuinity end - log detailed tick information -@@ -271,6 +280,10 @@ public class WatchdogThread extends Thread +@@ -265,6 +274,10 @@ public class WatchdogThread extends Thread log.log( Level.SEVERE, "\t\tLocked on:" + monitor.getLockedStackFrame() ); } } diff --git a/upstream/Airplane b/upstream/Airplane index 7dc1546a..86781ecf 160000 --- a/upstream/Airplane +++ b/upstream/Airplane @@ -1 +1 @@ -Subproject commit 7dc1546a25056ffef08ec6f0c7a5fb175be8d7a9 +Subproject commit 86781ecf7c8672b236ba55261c7463e6f979b3f1 diff --git a/upstream/Akarin b/upstream/Akarin index 3950fd57..62342de3 160000 --- a/upstream/Akarin +++ b/upstream/Akarin @@ -1 +1 @@ -Subproject commit 3950fd57413a0aceb3369e17be981ceec0be140a +Subproject commit 62342de306839a28135f5a63818b18c0456306d6 diff --git a/upstream/Empirecraft b/upstream/Empirecraft index 586aef63..3718e178 160000 --- a/upstream/Empirecraft +++ b/upstream/Empirecraft @@ -1 +1 @@ -Subproject commit 586aef6305493a61736f1cd2d3858c3a67113967 +Subproject commit 3718e17875c3389709c538437758f61929e8dfdc diff --git a/upstream/Origami b/upstream/Origami index 168394a2..654b344e 160000 --- a/upstream/Origami +++ b/upstream/Origami @@ -1 +1 @@ -Subproject commit 168394a2ea0f603db3e54a0223315008f622f36f +Subproject commit 654b344ec74220c55734260e73e8b644ee814376 diff --git a/upstream/Purpur b/upstream/Purpur index 40868883..63c370ce 160000 --- a/upstream/Purpur +++ b/upstream/Purpur @@ -1 +1 @@ -Subproject commit 40868883d9942e998923ee576cfa118c90e9e068 +Subproject commit 63c370ce0258d6f65a3ff7bb65f4544f450a0aba diff --git a/upstream/Tuinity b/upstream/Tuinity index a539774b..f87cb795 160000 --- a/upstream/Tuinity +++ b/upstream/Tuinity @@ -1 +1 @@ -Subproject commit a539774b11798c5640509ee33fd84c52b936b24f +Subproject commit f87cb795f6504a7958f2400a456eeb256145d3de diff --git a/upstreamCommits/Airplane b/upstreamCommits/Airplane index 71a17603..ed0795c4 100644 --- a/upstreamCommits/Airplane +++ b/upstreamCommits/Airplane @@ -1 +1 @@ -7dc1546a25056ffef08ec6f0c7a5fb175be8d7a9 \ No newline at end of file +86781ecf7c8672b236ba55261c7463e6f979b3f1 \ No newline at end of file diff --git a/upstreamCommits/Akarin b/upstreamCommits/Akarin index 4fed80ba..826c8fa8 100644 --- a/upstreamCommits/Akarin +++ b/upstreamCommits/Akarin @@ -1 +1 @@ -3950fd57413a0aceb3369e17be981ceec0be140a \ No newline at end of file +62342de306839a28135f5a63818b18c0456306d6 \ No newline at end of file diff --git a/upstreamCommits/Empirecraft b/upstreamCommits/Empirecraft index 0c1221ca..a43a704c 100644 --- a/upstreamCommits/Empirecraft +++ b/upstreamCommits/Empirecraft @@ -1 +1 @@ -586aef6305493a61736f1cd2d3858c3a67113967 \ No newline at end of file +3718e17875c3389709c538437758f61929e8dfdc \ No newline at end of file diff --git a/upstreamCommits/Origami b/upstreamCommits/Origami index bcce8e50..b292a8ff 100644 --- a/upstreamCommits/Origami +++ b/upstreamCommits/Origami @@ -1 +1 @@ -168394a2ea0f603db3e54a0223315008f622f36f \ No newline at end of file +654b344ec74220c55734260e73e8b644ee814376 \ No newline at end of file diff --git a/upstreamCommits/Purpur b/upstreamCommits/Purpur index 1ed373e3..fe22d895 100644 --- a/upstreamCommits/Purpur +++ b/upstreamCommits/Purpur @@ -1 +1 @@ -40868883d9942e998923ee576cfa118c90e9e068 \ No newline at end of file +63c370ce0258d6f65a3ff7bb65f4544f450a0aba \ No newline at end of file diff --git a/upstreamCommits/Tuinity b/upstreamCommits/Tuinity index bf7ea671..f7b59e8f 100644 --- a/upstreamCommits/Tuinity +++ b/upstreamCommits/Tuinity @@ -1 +1 @@ -a539774b11798c5640509ee33fd84c52b936b24f \ No newline at end of file +f87cb795f6504a7958f2400a456eeb256145d3de \ No newline at end of file diff --git a/upstreamConfig/0001-Tuinity.properties b/upstreamConfig/0001-Tuinity.properties index c56d97f4..0720f595 100755 --- a/upstreamConfig/0001-Tuinity.properties +++ b/upstreamConfig/0001-Tuinity.properties @@ -1,4 +1,4 @@ name=Tuinity useBlackList=True -list=server/Do-not-add-passengers-of-entities-that-were-were-abo.patch +list= branch=origin/master \ No newline at end of file diff --git a/upstreamConfig/0002-Purpur.properties b/upstreamConfig/0002-Purpur.properties index a00cd3c1..2aef7053 100755 --- a/upstreamConfig/0002-Purpur.properties +++ b/upstreamConfig/0002-Purpur.properties @@ -1,4 +1,4 @@ name=Purpur useBlackList=True -list=server/Tuinity-Server-Changes.patch,API/Tuinity-API-Changes.patches,server/Add-MC-4-fix-back.patch +list=server/Tuinity-Server-Changes.patch,api/Tuinity-API-Changes.patch,server/Add-MC-4-fix-back.patch branch=origin/ver/1.16.5 diff --git a/upstreamConfig/0004-Akarin.properties b/upstreamConfig/0004-Akarin.properties index 937e1c5b..f32ce015 100644 --- a/upstreamConfig/0004-Akarin.properties +++ b/upstreamConfig/0004-Akarin.properties @@ -1,4 +1,4 @@ name=Akarin useBlackList=False list=server/Disable-the-Snooper.patch,server/Avoid-double-I-O-operation-on-load-player-file.patch,server/Swaps-the-predicate-order-of-collision.patch -branch=origin/ver/1.16.4 +branch=origin/ver/1.16.5 diff --git a/upstreamConfig/0005-Empirecraft.properties b/upstreamConfig/0005-Empirecraft.properties index 7d2b0951..44572f58 100644 --- a/upstreamConfig/0005-Empirecraft.properties +++ b/upstreamConfig/0005-Empirecraft.properties @@ -1,4 +1,4 @@ name=Empirecraft useBlackList=false -list=API/Add-ChatColor.getById.patch,server/Don-t-trigger-Lootable-Refresh-for-non-player-intera.patch,server/Fix-Bukkit.createInventory-with-type-LECTERN.patch,server/dont-load-chunks-for-physics.patch,server/Prevent-grindstones-from-overstacking-items.patch +list=API/Add-ChatColor.getById.patch,server/Don-t-trigger-Lootable-Refresh-for-non-player-intera.patch,server/Fix-Bukkit.createInventory-with-type-LECTERN.patch,server/dont-load-chunks-for-physics.patch branch=origin/master