From 3b162fb788294bcf6fc603ac09d777dabce0c34d Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Wed, 1 Oct 2025 16:18:54 -0400 Subject: [PATCH] Move Purpur patches to first To reduce the difficulty on maintenance and reduce chances to fix conflicts on updating --- ...es.patch => 0001-Purpur-API-Changes.patch} | 31 +- ...{0001-Rebrand.patch => 0002-Rebrand.patch} | 9 +- ...on.patch => 0003-Gale-configuration.patch} | 4 +- ...-support.patch => 0004-SIMD-support.patch} | 0 ...005-Vectorized-map-color-conversion.patch} | 0 ...006-Do-not-log-plugin-library-loads.patch} | 0 ...> 0007-Player-canSee-by-entity-UUID.patch} | 2 +- ...h => 0008-Specific-interval-TPS-API.patch} | 4 +- ....patch => 0009-5-second-TPS-average.patch} | 4 +- ...PI.patch => 0010-Last-tick-time-API.patch} | 10 +- ...try.patch => 0011-Pufferfish-Sentry.patch} | 0 .../features/0017-Leaves-Replay-Mod-API.patch | 8 +- ...001-Purpur-Server-Minecraft-Changes.patch} | 767 +++++++++--------- ...{0001-Rebrand.patch => 0002-Rebrand.patch} | 4 +- ...on.patch => 0003-Gale-configuration.patch} | 31 +- ...af-config.patch => 0004-Leaf-config.patch} | 13 +- ...ommands.patch => 0005-Leaf-Commands.patch} | 14 +- ...tch => 0006-Remove-vanilla-profiler.patch} | 266 +++--- ...=> 0007-Use-platform-math-functions.patch} | 2 +- ...ster-floating-point-positive-modulo.patch} | 4 +- ...pelessRecipe-comparison-for-vanilla.patch} | 0 ...010-Reduce-projectile-chunk-loading.patch} | 2 +- ...een.patch => 0011-Predict-Halloween.patch} | 7 +- ...tch => 0012-Move-random-tick-random.patch} | 12 +- ...imize-random-calls-in-chunk-ticking.patch} | 6 +- ...uce-enderman-teleport-chunk-lookups.patch} | 4 +- ...ing-range-before-getting-visibility.patch} | 4 +- ...ch => 0016-Cache-on-climbable-check.patch} | 8 +- ...lisionContext-a-live-representation.patch} | 0 ...r-checking-for-useless-move-packets.patch} | 0 ...019-Block-goal-does-not-load-chunks.patch} | 0 ...20-Remove-lambda-from-ticking-guard.patch} | 8 +- ...-support.patch => 0021-SIMD-support.patch} | 6 +- ...0022-Make-book-writing-configurable.patch} | 4 +- ...patch => 0023-Reduce-in-wall-checks.patch} | 6 +- ...hat-order-verification-configurable.patch} | 0 ...-respawn-attempt-after-placing-end-.patch} | 2 +- ...-Make-saving-fireworks-configurable.patch} | 0 ...h => 0027-Reduce-hopper-item-checks.patch} | 6 +- ...0028-Reduce-villager-item-re-pickup.patch} | 0 ...29-Variable-entity-wake-up-duration.patch} | 2 +- ...at-commands-before-player-has-joine.patch} | 8 +- ... 0031-Do-not-log-invalid-statistics.patch} | 0 ...2-Do-not-log-empty-message-warnings.patch} | 4 +- ...033-Do-not-log-ignored-advancements.patch} | 2 +- ...4-Do-not-log-setBlock-in-far-chunks.patch} | 0 ...035-Do-not-log-unrecognized-recipes.patch} | 0 ...Do-not-log-expired-message-warnings.patch} | 0 ...> 0037-Do-not-log-Not-Secure-marker.patch} | 4 +- ...not-log-disconnections-with-null-id.patch} | 2 +- ...0039-Do-not-log-run-as-root-warning.patch} | 4 +- ...040-Do-not-log-offline-mode-warning.patch} | 4 +- ...er-showing-in-ping-before-server-fu.patch} | 0 ...-238526.patch => 0042-Fix-MC-238526.patch} | 0 ...-121706.patch => 0043-Fix-MC-121706.patch} | 0 ...nt-resetting-despawn-counter-config.patch} | 4 +- ...ogging-login-locations-configurable.patch} | 6 +- ...ch => 0046-Reduce-array-allocations.patch} | 70 +- ...atch => 0047-Optimize-sun-burn-tick.patch} | 58 +- ...-Optional-allocation-in-EntityBased.patch} | 0 ...rules-map-with-optimized-collection.patch} | 2 +- ...tributes-with-optimized-collections.patch} | 4 +- ...tracker-map-with-optimized-collecti.patch} | 0 ...2-Cache-FluidOcclusionCacheKey-hash.patch} | 0 ...tch => 0053-Cache-ShapePairKey-hash.patch} | 6 +- ...by-multiplication-in-CubePointRange.patch} | 0 ...ace-parts-by-size-in-CubePointRange.patch} | 0 ...k-frozen-ticks-before-landing-block.patch} | 6 +- ... => 0057-Faster-chunk-serialization.patch} | 0 ...=> 0058-Update-boss-bar-within-tick.patch} | 0 ...Skip-secondary-POI-sensor-if-absent.patch} | 24 +- ...kip-entity-move-if-movement-is-zero.patch} | 8 +- ...> 0061-Store-mob-counts-in-an-array.patch} | 0 ...-Use-linked-map-for-entity-trackers.patch} | 0 ...h => 0063-Optimize-noise-generation.patch} | 0 ...0064-Optimize-sheep-offspring-color.patch} | 2 +- ...es-on-entities-with-fire-resistance.patch} | 4 +- ...6-Skip-cloning-advancement-criteria.patch} | 0 ...lock-destruction-packet-allocations.patch} | 8 +- ...-Spread-out-sending-all-player-info.patch} | 16 +- ...dSendEvent-if-there-are-no-listener.patch} | 6 +- ...70-Send-multiple-keep-alive-packets.patch} | 14 +- ...ake-slow-login-timeout-configurable.patch} | 2 +- ...Don-t-load-chunks-to-spawn-phantoms.patch} | 4 +- ...hunks-to-activate-climbing-entities.patch} | 10 +- ...imations-as-the-entity-being-critte.patch} | 4 +- ...5-Ignore-null-legacy-structure-data.patch} | 0 ...random-strolling-into-non-ticking-c.patch} | 0 ...er-in-world-if-kicked-before-being-.patch} | 2 +- ...file.patch => 0078-Global-EULA-file.patch} | 0 ....patch => 0079-5-second-TPS-average.patch} | 6 +- ...atch => 0080-Measure-last-tick-time.patch} | 8 +- ...crease-time-statistics-in-intervals.patch} | 4 +- ...eck-has-physics-before-same-vehicle.patch} | 4 +- ...ible-planar-movement-multiplication.patch} | 4 +- ... 0084-Optimize-matching-item-checks.patch} | 4 +- ...h => 0085-Pre-compute-VarLong-sizes.patch} | 0 ...mize-VarInt-write-and-VarLong-write.patch} | 0 ... 0087-Reduce-RandomSource-instances.patch} | 4 +- ...mStack-lookups-for-reduced-visibilit.patch | 46 -- ...mStack-lookups-for-reduced-visibilit.patch | 52 ++ ...ne-of-sight-cache-with-low-capacity.patch} | 0 ...-of-sight-updates-and-cache-lookups.patch} | 0 ...91-Pufferfish-Optimize-mob-spawning.patch} | 19 +- ...ferfish-Dynamic-Activation-of-Brain.patch} | 102 +-- ...93-Fix-Pufferfish-and-Purpur-patches.patch | 238 +----- .../features/0113-Reduce-canSee-work.patch | 4 +- .../features/0114-Fix-sprint-glitch.patch | 4 +- ...me-missing-Pufferfish-configurations.patch | 14 +- ...missing-purpur-configuration-options.patch | 28 +- ...Configurable-chat-message-signatures.patch | 4 +- .../0133-Faster-random-generator.patch | 8 +- ...Configurable-player-knockback-zombie.patch | 6 +- .../features/0165-Multithreaded-Tracker.patch | 8 +- .../0170-Optimize-Entity-distanceToSqr.patch | 6 +- ...ecessary-calculations-if-player-is-n.patch | 6 +- ...117075-Block-Entities-Unload-Lag-Spi.patch | 6 +- .../0189-Remove-stream-in-villagers.patch | 4 +- .../features/0191-Only-player-pushable.patch | 8 +- .../features/0193-optimize-mob-despawn.patch | 10 +- ...-SparklyPaper-Parallel-world-ticking.patch | 42 +- ...celled-Projectile-Events-still-consu.patch | 6 +- ...10-Raytrace-AntiXray-SDK-integration.patch | 4 +- ...hunk-retrieving-in-entity-fluid-push.patch | 6 +- ...0233-Optimise-player-movement-checks.patch | 4 +- ...e-death-item-drop-knockback-settings.patch | 4 +- ...7-Optimize-getScaledTrackingDistance.patch | 4 +- .../features/0239-Optimize-isEyeInFluid.patch | 10 +- .../0240-Cache-block-state-tags.patch | 4 +- .../0250-Use-UUID-for-cure-reputation.patch | 4 +- .../features/0257-optimize-waypoint.patch | 6 +- .../features/0258-Paw-optimization.patch | 14 +- ...fig-fixClimbingBypassingCrammingRule.patch | 8 +- .../features/0261-Optimise-getEntities.patch | 4 +- ...264-optimize-checkInsideBlocks-calls.patch | 8 +- .../0268-Lithium-equipment-tracking.patch | 6 +- ...0269-fix-purpur-attribute-base-patch.patch | 28 +- .../features/0270-Bump-netty-to-4.2.x.patch | 6 +- .../0276-thread-unsafe-chunk-map.patch | 6 +- .../features/0278-optimize-get-chunk.patch | 4 +- ...0279-remove-shouldTickBlocksAt-check.patch | 4 +- .../0283-counting-chunk-section-fluid.patch | 4 +- .../features/0285-optimize-onClimbable.patch | 10 +- ...ze-applyMovementEmissionAndPlaySound.patch | 4 +- .../0287-optimize-isStateClimbable.patch | 4 +- .../features/0288-optimize-getOnPos.patch | 34 +- .../0289-cache-eye-block-position.patch | 24 +- ...e-updateFluidHeightAndDoFluidPushing.patch | 8 +- .../0291-optimize-checkInsideBlocks.patch | 4 +- .../features/0294-cache-collision-list.patch | 14 +- ...Pluto-Expose-Direction-Plane-s-faces.patch | 6 +- ...-Only-update-frozen-ticks-if-changed.patch | 4 +- ...=> 0001-Purpur-Server-Paper-Changes.patch} | 144 ++-- ...{0001-Rebrand.patch => 0002-Rebrand.patch} | 14 +- ...-metrics.patch => 0003-Gale-metrics.patch} | 0 ...patch => 0004-Gale-semantic-version.patch} | 2 +- ...on.patch => 0005-Gale-configuration.patch} | 10 +- ...h => 0006-Set-Gale-permissions-root.patch} | 0 ...ommands.patch => 0007-Leaf-Commands.patch} | 0 ...patch => 0008-Leaf-JUnit-test-suite.patch} | 0 ...09-Fix-Pufferfish-and-Purpur-patches.patch | 41 - ...pelessRecipe-comparison-for-vanilla.patch} | 0 ...-for-plugins-not-shutting-down-task.patch} | 2 +- ...-support.patch => 0011-SIMD-support.patch} | 0 ...0012-Make-book-writing-configurable.patch} | 0 ...-log-legacy-Material-initialization.patch} | 0 ...> 0014-Do-not-log-Not-Secure-marker.patch} | 0 ...ch => 0015-Reduce-array-allocations.patch} | 0 ... 0016-CraftBukkit-UUID-to-world-map.patch} | 2 +- ...h => 0017-Specific-interval-TPS-API.patch} | 2 +- ....patch => 0018-5-second-TPS-average.patch} | 2 +- ...PI.patch => 0019-Last-tick-time-API.patch} | 2 +- ...-Show-last-tick-time-in-tps-command.patch} | 0 ...h => 0021-Pre-compute-VarLong-sizes.patch} | 0 ...mize-VarInt-write-and-VarLong-write.patch} | 0 ...atch => 0023-Virtual-thread-support.patch} | 0 ...imings.patch => 0024-Remove-Timings.patch} | 0 ...patch => 0025-KeYi-Player-Skull-API.patch} | 6 +- ...atch => 0026-Slice-Smooth-Teleports.patch} | 4 +- ....patch => 0027-Leaves-Protocol-Core.patch} | 2 +- ...patch => 0028-Leaves-Replay-Mod-API.patch} | 6 +- ... => 0029-Skip-event-if-no-listeners.patch} | 0 ...SparklyPaper-Optimize-canSee-checks.patch} | 4 +- ...atch => 0031-Including-5s-in-getTPS.patch} | 2 +- ...eption-on-missing-ResourceKey-value.patch} | 0 ...-Virtual-Thread-for-async-scheduler.patch} | 0 ...onfigurable-chat-message-signatures.patch} | 0 ...ed.patch => 0035-Matter-Secure-Seed.patch} | 2 +- ...tch => 0036-Faster-random-generator.patch} | 0 ...onfigurable-unknown-command-message.patch} | 0 ...world-map-with-optimized-collection.patch} | 2 +- ...ntityType-minecraftToBukkit-convert.patch} | 0 ...patch => 0040-Multithreaded-Tracker.patch} | 4 +- ...-snapshots-for-acquiring-blockstate.patch} | 0 ...CraftServer-getworlds-list-creation.patch} | 2 +- ...k-key.patch => 0043-Cache-chunk-key.patch} | 0 ...> 0044-PlayerInventoryOverflowEvent.patch} | 0 ...17075-Block-Entities-Unload-Lag-Spi.patch} | 0 ...SparklyPaper-Parallel-world-ticking.patch} | 0 ...047-Fish-Parallel-World-Ticking-API.patch} | 2 +- ...r-PR-Throttle-failed-spawn-attempts.patch} | 0 ...tch => 0049-Async-playerdata-saving.patch} | 0 ...g.patch => 0050-Async-chunk-sending.patch} | 0 ...051-Optimise-player-movement-checks.patch} | 0 ...atch => 0052-optimise-ReferenceList.patch} | 0 ...tBiome.patch => 0053-cache-getBiome.patch} | 0 ...hread.patch => 0054-dump-pwt-thread.patch} | 0 ...tion.patch => 0055-Paw-optimization.patch} | 0 ...pawn.patch => 0056-optimize-despawn.patch} | 0 ...patch => 0057-optimize-mob-spawning.patch} | 4 +- ...ch => 0058-Toggleable-async-catcher.patch} | 2 +- ...ta.patch => 0059-cache-profile-data.patch} | 0 ...x.patch => 0060-Bump-netty-to-4.2.x.patch} | 0 213 files changed, 1239 insertions(+), 1467 deletions(-) rename leaf-api/paper-patches/features/{0011-Purpur-API-Changes.patch => 0001-Purpur-API-Changes.patch} (99%) rename leaf-api/paper-patches/features/{0001-Rebrand.patch => 0002-Rebrand.patch} (94%) rename leaf-api/paper-patches/features/{0002-Gale-configuration.patch => 0003-Gale-configuration.patch} (92%) rename leaf-api/paper-patches/features/{0003-SIMD-support.patch => 0004-SIMD-support.patch} (100%) rename leaf-api/paper-patches/features/{0004-Vectorized-map-color-conversion.patch => 0005-Vectorized-map-color-conversion.patch} (100%) rename leaf-api/paper-patches/features/{0005-Do-not-log-plugin-library-loads.patch => 0006-Do-not-log-plugin-library-loads.patch} (100%) rename leaf-api/paper-patches/features/{0006-Player-canSee-by-entity-UUID.patch => 0007-Player-canSee-by-entity-UUID.patch} (96%) rename leaf-api/paper-patches/features/{0007-Specific-interval-TPS-API.patch => 0008-Specific-interval-TPS-API.patch} (93%) rename leaf-api/paper-patches/features/{0008-5-second-TPS-average.patch => 0009-5-second-TPS-average.patch} (95%) rename leaf-api/paper-patches/features/{0009-Last-tick-time-API.patch => 0010-Last-tick-time-API.patch} (89%) rename leaf-api/paper-patches/features/{0010-Pufferfish-Sentry.patch => 0011-Pufferfish-Sentry.patch} (100%) rename leaf-server/minecraft-patches/features/{0092-Purpur-Server-Minecraft-Changes.patch => 0001-Purpur-Server-Minecraft-Changes.patch} (98%) rename leaf-server/minecraft-patches/features/{0001-Rebrand.patch => 0002-Rebrand.patch} (96%) rename leaf-server/minecraft-patches/features/{0002-Gale-configuration.patch => 0003-Gale-configuration.patch} (89%) rename leaf-server/minecraft-patches/features/{0003-Leaf-config.patch => 0004-Leaf-config.patch} (75%) rename leaf-server/minecraft-patches/features/{0004-Leaf-Commands.patch => 0005-Leaf-Commands.patch} (60%) rename leaf-server/minecraft-patches/features/{0005-Remove-vanilla-profiler.patch => 0006-Remove-vanilla-profiler.patch} (90%) rename leaf-server/minecraft-patches/features/{0006-Use-platform-math-functions.patch => 0007-Use-platform-math-functions.patch} (98%) rename leaf-server/minecraft-patches/features/{0007-Faster-floating-point-positive-modulo.patch => 0008-Faster-floating-point-positive-modulo.patch} (93%) rename leaf-server/minecraft-patches/features/{0008-Simpler-ShapelessRecipe-comparison-for-vanilla.patch => 0009-Simpler-ShapelessRecipe-comparison-for-vanilla.patch} (100%) rename leaf-server/minecraft-patches/features/{0009-Reduce-projectile-chunk-loading.patch => 0010-Reduce-projectile-chunk-loading.patch} (97%) rename leaf-server/minecraft-patches/features/{0010-Predict-Halloween.patch => 0011-Predict-Halloween.patch} (90%) rename leaf-server/minecraft-patches/features/{0011-Move-random-tick-random.patch => 0012-Move-random-tick-random.patch} (83%) rename leaf-server/minecraft-patches/features/{0012-Optimize-random-calls-in-chunk-ticking.patch => 0013-Optimize-random-calls-in-chunk-ticking.patch} (97%) rename leaf-server/minecraft-patches/features/{0013-Reduce-enderman-teleport-chunk-lookups.patch => 0014-Reduce-enderman-teleport-chunk-lookups.patch} (94%) rename leaf-server/minecraft-patches/features/{0014-Check-targeting-range-before-getting-visibility.patch => 0015-Check-targeting-range-before-getting-visibility.patch} (94%) rename leaf-server/minecraft-patches/features/{0015-Cache-on-climbable-check.patch => 0016-Cache-on-climbable-check.patch} (90%) rename leaf-server/minecraft-patches/features/{0016-Make-EntityCollisionContext-a-live-representation.patch => 0017-Make-EntityCollisionContext-a-live-representation.patch} (100%) rename leaf-server/minecraft-patches/features/{0017-Better-checking-for-useless-move-packets.patch => 0018-Better-checking-for-useless-move-packets.patch} (100%) rename leaf-server/minecraft-patches/features/{0018-Block-goal-does-not-load-chunks.patch => 0019-Block-goal-does-not-load-chunks.patch} (100%) rename leaf-server/minecraft-patches/features/{0019-Remove-lambda-from-ticking-guard.patch => 0020-Remove-lambda-from-ticking-guard.patch} (93%) rename leaf-server/minecraft-patches/features/{0020-SIMD-support.patch => 0021-SIMD-support.patch} (83%) rename leaf-server/minecraft-patches/features/{0021-Make-book-writing-configurable.patch => 0022-Make-book-writing-configurable.patch} (92%) rename leaf-server/minecraft-patches/features/{0022-Reduce-in-wall-checks.patch => 0023-Reduce-in-wall-checks.patch} (92%) rename leaf-server/minecraft-patches/features/{0023-Make-chat-order-verification-configurable.patch => 0024-Make-chat-order-verification-configurable.patch} (100%) rename leaf-server/minecraft-patches/features/{0024-Make-ender-dragon-respawn-attempt-after-placing-end-.patch => 0025-Make-ender-dragon-respawn-attempt-after-placing-end-.patch} (96%) rename leaf-server/minecraft-patches/features/{0025-Make-saving-fireworks-configurable.patch => 0026-Make-saving-fireworks-configurable.patch} (100%) rename leaf-server/minecraft-patches/features/{0026-Reduce-hopper-item-checks.patch => 0027-Reduce-hopper-item-checks.patch} (97%) rename leaf-server/minecraft-patches/features/{0027-Reduce-villager-item-re-pickup.patch => 0028-Reduce-villager-item-re-pickup.patch} (100%) rename leaf-server/minecraft-patches/features/{0028-Variable-entity-wake-up-duration.patch => 0029-Variable-entity-wake-up-duration.patch} (97%) rename leaf-server/minecraft-patches/features/{0029-Do-not-process-chat-commands-before-player-has-joine.patch => 0030-Do-not-process-chat-commands-before-player-has-joine.patch} (90%) rename leaf-server/minecraft-patches/features/{0030-Do-not-log-invalid-statistics.patch => 0031-Do-not-log-invalid-statistics.patch} (100%) rename leaf-server/minecraft-patches/features/{0031-Do-not-log-empty-message-warnings.patch => 0032-Do-not-log-empty-message-warnings.patch} (89%) rename leaf-server/minecraft-patches/features/{0032-Do-not-log-ignored-advancements.patch => 0033-Do-not-log-ignored-advancements.patch} (96%) rename leaf-server/minecraft-patches/features/{0033-Do-not-log-setBlock-in-far-chunks.patch => 0034-Do-not-log-setBlock-in-far-chunks.patch} (100%) rename leaf-server/minecraft-patches/features/{0034-Do-not-log-unrecognized-recipes.patch => 0035-Do-not-log-unrecognized-recipes.patch} (100%) rename leaf-server/minecraft-patches/features/{0035-Do-not-log-expired-message-warnings.patch => 0036-Do-not-log-expired-message-warnings.patch} (100%) rename leaf-server/minecraft-patches/features/{0036-Do-not-log-Not-Secure-marker.patch => 0037-Do-not-log-Not-Secure-marker.patch} (90%) rename leaf-server/minecraft-patches/features/{0037-Do-not-log-disconnections-with-null-id.patch => 0038-Do-not-log-disconnections-with-null-id.patch} (95%) rename leaf-server/minecraft-patches/features/{0038-Do-not-log-run-as-root-warning.patch => 0039-Do-not-log-run-as-root-warning.patch} (94%) rename leaf-server/minecraft-patches/features/{0039-Do-not-log-offline-mode-warning.patch => 0040-Do-not-log-offline-mode-warning.patch} (94%) rename leaf-server/minecraft-patches/features/{0040-Fix-outdated-server-showing-in-ping-before-server-fu.patch => 0041-Fix-outdated-server-showing-in-ping-before-server-fu.patch} (100%) rename leaf-server/minecraft-patches/features/{0041-Fix-MC-238526.patch => 0042-Fix-MC-238526.patch} (100%) rename leaf-server/minecraft-patches/features/{0042-Fix-MC-121706.patch => 0043-Fix-MC-121706.patch} (100%) rename leaf-server/minecraft-patches/features/{0043-Make-arrow-movement-resetting-despawn-counter-config.patch => 0044-Make-arrow-movement-resetting-despawn-counter-config.patch} (94%) rename leaf-server/minecraft-patches/features/{0044-Make-logging-login-locations-configurable.patch => 0045-Make-logging-login-locations-configurable.patch} (88%) rename leaf-server/minecraft-patches/features/{0045-Reduce-array-allocations.patch => 0046-Reduce-array-allocations.patch} (92%) rename leaf-server/minecraft-patches/features/{0046-Optimize-sun-burn-tick.patch => 0047-Optimize-sun-burn-tick.patch} (87%) rename leaf-server/minecraft-patches/features/{0047-Reduce-lambda-and-Optional-allocation-in-EntityBased.patch => 0048-Reduce-lambda-and-Optional-allocation-in-EntityBased.patch} (100%) rename leaf-server/minecraft-patches/features/{0048-Replace-game-rules-map-with-optimized-collection.patch => 0049-Replace-game-rules-map-with-optimized-collection.patch} (92%) rename leaf-server/minecraft-patches/features/{0049-Replace-AI-attributes-with-optimized-collections.patch => 0050-Replace-AI-attributes-with-optimized-collections.patch} (91%) rename leaf-server/minecraft-patches/features/{0050-Replace-throttle-tracker-map-with-optimized-collecti.patch => 0051-Replace-throttle-tracker-map-with-optimized-collecti.patch} (100%) rename leaf-server/minecraft-patches/features/{0051-Cache-FluidOcclusionCacheKey-hash.patch => 0052-Cache-FluidOcclusionCacheKey-hash.patch} (100%) rename leaf-server/minecraft-patches/features/{0052-Cache-ShapePairKey-hash.patch => 0053-Cache-ShapePairKey-hash.patch} (88%) rename leaf-server/minecraft-patches/features/{0053-Replace-division-by-multiplication-in-CubePointRange.patch => 0054-Replace-division-by-multiplication-in-CubePointRange.patch} (100%) rename leaf-server/minecraft-patches/features/{0054-Replace-parts-by-size-in-CubePointRange.patch => 0055-Replace-parts-by-size-in-CubePointRange.patch} (100%) rename leaf-server/minecraft-patches/features/{0055-Check-frozen-ticks-before-landing-block.patch => 0056-Check-frozen-ticks-before-landing-block.patch} (88%) rename leaf-server/minecraft-patches/features/{0056-Faster-chunk-serialization.patch => 0057-Faster-chunk-serialization.patch} (100%) rename leaf-server/minecraft-patches/features/{0057-Update-boss-bar-within-tick.patch => 0058-Update-boss-bar-within-tick.patch} (100%) rename leaf-server/minecraft-patches/features/{0058-Skip-secondary-POI-sensor-if-absent.patch => 0059-Skip-secondary-POI-sensor-if-absent.patch} (65%) rename leaf-server/minecraft-patches/features/{0059-Skip-entity-move-if-movement-is-zero.patch => 0060-Skip-entity-move-if-movement-is-zero.patch} (88%) rename leaf-server/minecraft-patches/features/{0060-Store-mob-counts-in-an-array.patch => 0061-Store-mob-counts-in-an-array.patch} (100%) rename leaf-server/minecraft-patches/features/{0061-Use-linked-map-for-entity-trackers.patch => 0062-Use-linked-map-for-entity-trackers.patch} (100%) rename leaf-server/minecraft-patches/features/{0062-Optimize-noise-generation.patch => 0063-Optimize-noise-generation.patch} (100%) rename leaf-server/minecraft-patches/features/{0063-Optimize-sheep-offspring-color.patch => 0064-Optimize-sheep-offspring-color.patch} (98%) rename leaf-server/minecraft-patches/features/{0064-Hide-flames-on-entities-with-fire-resistance.patch => 0065-Hide-flames-on-entities-with-fire-resistance.patch} (90%) rename leaf-server/minecraft-patches/features/{0065-Skip-cloning-advancement-criteria.patch => 0066-Skip-cloning-advancement-criteria.patch} (100%) rename leaf-server/minecraft-patches/features/{0066-Reduce-block-destruction-packet-allocations.patch => 0067-Reduce-block-destruction-packet-allocations.patch} (89%) rename leaf-server/minecraft-patches/features/{0067-Spread-out-sending-all-player-info.patch => 0068-Spread-out-sending-all-player-info.patch} (94%) rename leaf-server/minecraft-patches/features/{0068-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch => 0069-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch} (94%) rename leaf-server/minecraft-patches/features/{0069-Send-multiple-keep-alive-packets.patch => 0070-Send-multiple-keep-alive-packets.patch} (92%) rename leaf-server/minecraft-patches/features/{0070-Make-slow-login-timeout-configurable.patch => 0071-Make-slow-login-timeout-configurable.patch} (92%) rename leaf-server/minecraft-patches/features/{0071-Don-t-load-chunks-to-spawn-phantoms.patch => 0072-Don-t-load-chunks-to-spawn-phantoms.patch} (84%) rename leaf-server/minecraft-patches/features/{0072-Don-t-load-chunks-to-activate-climbing-entities.patch => 0073-Don-t-load-chunks-to-activate-climbing-entities.patch} (89%) rename leaf-server/minecraft-patches/features/{0073-Broadcast-crit-animations-as-the-entity-being-critte.patch => 0074-Broadcast-crit-animations-as-the-entity-being-critte.patch} (92%) rename leaf-server/minecraft-patches/features/{0074-Ignore-null-legacy-structure-data.patch => 0075-Ignore-null-legacy-structure-data.patch} (100%) rename leaf-server/minecraft-patches/features/{0075-Prevent-entities-random-strolling-into-non-ticking-c.patch => 0076-Prevent-entities-random-strolling-into-non-ticking-c.patch} (100%) rename leaf-server/minecraft-patches/features/{0076-Do-not-place-player-in-world-if-kicked-before-being-.patch => 0077-Do-not-place-player-in-world-if-kicked-before-being-.patch} (94%) rename leaf-server/minecraft-patches/features/{0077-Global-EULA-file.patch => 0078-Global-EULA-file.patch} (100%) rename leaf-server/minecraft-patches/features/{0078-5-second-TPS-average.patch => 0079-5-second-TPS-average.patch} (92%) rename leaf-server/minecraft-patches/features/{0079-Measure-last-tick-time.patch => 0080-Measure-last-tick-time.patch} (92%) rename leaf-server/minecraft-patches/features/{0080-Increase-time-statistics-in-intervals.patch => 0081-Increase-time-statistics-in-intervals.patch} (96%) rename leaf-server/minecraft-patches/features/{0081-For-collision-check-has-physics-before-same-vehicle.patch => 0082-For-collision-check-has-physics-before-same-vehicle.patch} (90%) rename leaf-server/minecraft-patches/features/{0082-Skip-negligible-planar-movement-multiplication.patch => 0083-Skip-negligible-planar-movement-multiplication.patch} (91%) rename leaf-server/minecraft-patches/features/{0083-Optimize-matching-item-checks.patch => 0084-Optimize-matching-item-checks.patch} (88%) rename leaf-server/minecraft-patches/features/{0084-Pre-compute-VarLong-sizes.patch => 0085-Pre-compute-VarLong-sizes.patch} (100%) rename leaf-server/minecraft-patches/features/{0085-Optimize-VarInt-write-and-VarLong-write.patch => 0086-Optimize-VarInt-write-and-VarLong-write.patch} (100%) rename leaf-server/minecraft-patches/features/{0086-Reduce-RandomSource-instances.patch => 0087-Reduce-RandomSource-instances.patch} (98%) delete mode 100644 leaf-server/minecraft-patches/features/0087-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch create mode 100644 leaf-server/minecraft-patches/features/0088-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch rename leaf-server/minecraft-patches/features/{0088-Initialize-line-of-sight-cache-with-low-capacity.patch => 0089-Initialize-line-of-sight-cache-with-low-capacity.patch} (100%) rename leaf-server/minecraft-patches/features/{0089-Reduce-line-of-sight-updates-and-cache-lookups.patch => 0090-Reduce-line-of-sight-updates-and-cache-lookups.patch} (100%) rename leaf-server/minecraft-patches/features/{0090-Pufferfish-Optimize-mob-spawning.patch => 0091-Pufferfish-Optimize-mob-spawning.patch} (93%) rename leaf-server/minecraft-patches/features/{0091-Pufferfish-Dynamic-Activation-of-Brain.patch => 0092-Pufferfish-Dynamic-Activation-of-Brain.patch} (69%) rename leaf-server/paper-patches/features/{0008-Purpur-Server-Paper-Changes.patch => 0001-Purpur-Server-Paper-Changes.patch} (97%) rename leaf-server/paper-patches/features/{0001-Rebrand.patch => 0002-Rebrand.patch} (99%) rename leaf-server/paper-patches/features/{0002-Gale-metrics.patch => 0003-Gale-metrics.patch} (100%) rename leaf-server/paper-patches/features/{0003-Gale-semantic-version.patch => 0004-Gale-semantic-version.patch} (93%) rename leaf-server/paper-patches/features/{0004-Gale-configuration.patch => 0005-Gale-configuration.patch} (96%) rename leaf-server/paper-patches/features/{0005-Set-Gale-permissions-root.patch => 0006-Set-Gale-permissions-root.patch} (100%) rename leaf-server/paper-patches/features/{0006-Leaf-Commands.patch => 0007-Leaf-Commands.patch} (100%) rename leaf-server/paper-patches/features/{0007-Leaf-JUnit-test-suite.patch => 0008-Leaf-JUnit-test-suite.patch} (100%) delete mode 100644 leaf-server/paper-patches/features/0009-Fix-Pufferfish-and-Purpur-patches.patch rename leaf-server/paper-patches/features/{0010-Simpler-ShapelessRecipe-comparison-for-vanilla.patch => 0009-Simpler-ShapelessRecipe-comparison-for-vanilla.patch} (100%) rename leaf-server/paper-patches/features/{0011-Print-stack-trace-for-plugins-not-shutting-down-task.patch => 0010-Print-stack-trace-for-plugins-not-shutting-down-task.patch} (96%) rename leaf-server/paper-patches/features/{0012-SIMD-support.patch => 0011-SIMD-support.patch} (100%) rename leaf-server/paper-patches/features/{0013-Make-book-writing-configurable.patch => 0012-Make-book-writing-configurable.patch} (100%) rename leaf-server/paper-patches/features/{0014-Do-not-log-legacy-Material-initialization.patch => 0013-Do-not-log-legacy-Material-initialization.patch} (100%) rename leaf-server/paper-patches/features/{0015-Do-not-log-Not-Secure-marker.patch => 0014-Do-not-log-Not-Secure-marker.patch} (100%) rename leaf-server/paper-patches/features/{0016-Reduce-array-allocations.patch => 0015-Reduce-array-allocations.patch} (100%) rename leaf-server/paper-patches/features/{0017-CraftBukkit-UUID-to-world-map.patch => 0016-CraftBukkit-UUID-to-world-map.patch} (96%) rename leaf-server/paper-patches/features/{0018-Specific-interval-TPS-API.patch => 0017-Specific-interval-TPS-API.patch} (93%) rename leaf-server/paper-patches/features/{0019-5-second-TPS-average.patch => 0018-5-second-TPS-average.patch} (98%) rename leaf-server/paper-patches/features/{0020-Last-tick-time-API.patch => 0019-Last-tick-time-API.patch} (96%) rename leaf-server/paper-patches/features/{0021-Show-last-tick-time-in-tps-command.patch => 0020-Show-last-tick-time-in-tps-command.patch} (100%) rename leaf-server/paper-patches/features/{0022-Pre-compute-VarLong-sizes.patch => 0021-Pre-compute-VarLong-sizes.patch} (100%) rename leaf-server/paper-patches/features/{0023-Optimize-VarInt-write-and-VarLong-write.patch => 0022-Optimize-VarInt-write-and-VarLong-write.patch} (100%) rename leaf-server/paper-patches/features/{0024-Virtual-thread-support.patch => 0023-Virtual-thread-support.patch} (100%) rename leaf-server/paper-patches/features/{0025-Remove-Timings.patch => 0024-Remove-Timings.patch} (100%) rename leaf-server/paper-patches/features/{0026-KeYi-Player-Skull-API.patch => 0025-KeYi-Player-Skull-API.patch} (84%) rename leaf-server/paper-patches/features/{0027-Slice-Smooth-Teleports.patch => 0026-Slice-Smooth-Teleports.patch} (90%) rename leaf-server/paper-patches/features/{0028-Leaves-Protocol-Core.patch => 0027-Leaves-Protocol-Core.patch} (94%) rename leaf-server/paper-patches/features/{0029-Leaves-Replay-Mod-API.patch => 0028-Leaves-Replay-Mod-API.patch} (96%) rename leaf-server/paper-patches/features/{0030-Skip-event-if-no-listeners.patch => 0029-Skip-event-if-no-listeners.patch} (100%) rename leaf-server/paper-patches/features/{0031-SparklyPaper-Optimize-canSee-checks.patch => 0030-SparklyPaper-Optimize-canSee-checks.patch} (95%) rename leaf-server/paper-patches/features/{0032-Including-5s-in-getTPS.patch => 0031-Including-5s-in-getTPS.patch} (90%) rename leaf-server/paper-patches/features/{0033-Don-t-throw-exception-on-missing-ResourceKey-value.patch => 0032-Don-t-throw-exception-on-missing-ResourceKey-value.patch} (100%) rename leaf-server/paper-patches/features/{0034-Virtual-Thread-for-async-scheduler.patch => 0033-Virtual-Thread-for-async-scheduler.patch} (100%) rename leaf-server/paper-patches/features/{0035-Mirai-Configurable-chat-message-signatures.patch => 0034-Mirai-Configurable-chat-message-signatures.patch} (100%) rename leaf-server/paper-patches/features/{0036-Matter-Secure-Seed.patch => 0035-Matter-Secure-Seed.patch} (97%) rename leaf-server/paper-patches/features/{0037-Faster-random-generator.patch => 0036-Faster-random-generator.patch} (100%) rename leaf-server/paper-patches/features/{0038-Configurable-unknown-command-message.patch => 0037-Configurable-unknown-command-message.patch} (100%) rename leaf-server/paper-patches/features/{0039-Replace-world-map-with-optimized-collection.patch => 0038-Replace-world-map-with-optimized-collection.patch} (92%) rename leaf-server/paper-patches/features/{0040-Cache-CraftEntityType-minecraftToBukkit-convert.patch => 0039-Cache-CraftEntityType-minecraftToBukkit-convert.patch} (100%) rename leaf-server/paper-patches/features/{0041-Multithreaded-Tracker.patch => 0040-Multithreaded-Tracker.patch} (96%) rename leaf-server/paper-patches/features/{0042-EMC-Don-t-use-snapshots-for-acquiring-blockstate.patch => 0041-EMC-Don-t-use-snapshots-for-acquiring-blockstate.patch} (100%) rename leaf-server/paper-patches/features/{0043-Faster-CraftServer-getworlds-list-creation.patch => 0042-Faster-CraftServer-getworlds-list-creation.patch} (91%) rename leaf-server/paper-patches/features/{0044-Cache-chunk-key.patch => 0043-Cache-chunk-key.patch} (100%) rename leaf-server/paper-patches/features/{0045-PlayerInventoryOverflowEvent.patch => 0044-PlayerInventoryOverflowEvent.patch} (100%) rename leaf-server/paper-patches/features/{0046-Paper-PR-Fix-MC-117075-Block-Entities-Unload-Lag-Spi.patch => 0045-Paper-PR-Fix-MC-117075-Block-Entities-Unload-Lag-Spi.patch} (100%) rename leaf-server/paper-patches/features/{0047-SparklyPaper-Parallel-world-ticking.patch => 0046-SparklyPaper-Parallel-world-ticking.patch} (100%) rename leaf-server/paper-patches/features/{0048-Fish-Parallel-World-Ticking-API.patch => 0047-Fish-Parallel-World-Ticking-API.patch} (96%) rename leaf-server/paper-patches/features/{0049-Paper-PR-Throttle-failed-spawn-attempts.patch => 0048-Paper-PR-Throttle-failed-spawn-attempts.patch} (100%) rename leaf-server/paper-patches/features/{0050-Async-playerdata-saving.patch => 0049-Async-playerdata-saving.patch} (100%) rename leaf-server/paper-patches/features/{0051-Async-chunk-sending.patch => 0050-Async-chunk-sending.patch} (100%) rename leaf-server/paper-patches/features/{0052-Optimise-player-movement-checks.patch => 0051-Optimise-player-movement-checks.patch} (100%) rename leaf-server/paper-patches/features/{0053-optimise-ReferenceList.patch => 0052-optimise-ReferenceList.patch} (100%) rename leaf-server/paper-patches/features/{0054-cache-getBiome.patch => 0053-cache-getBiome.patch} (100%) rename leaf-server/paper-patches/features/{0055-dump-pwt-thread.patch => 0054-dump-pwt-thread.patch} (100%) rename leaf-server/paper-patches/features/{0056-Paw-optimization.patch => 0055-Paw-optimization.patch} (100%) rename leaf-server/paper-patches/features/{0057-optimize-despawn.patch => 0056-optimize-despawn.patch} (100%) rename leaf-server/paper-patches/features/{0058-optimize-mob-spawning.patch => 0057-optimize-mob-spawning.patch} (97%) rename leaf-server/paper-patches/features/{0059-Toggleable-async-catcher.patch => 0058-Toggleable-async-catcher.patch} (91%) rename leaf-server/paper-patches/features/{0060-cache-profile-data.patch => 0059-cache-profile-data.patch} (100%) rename leaf-server/paper-patches/features/{0061-Bump-netty-to-4.2.x.patch => 0060-Bump-netty-to-4.2.x.patch} (100%) diff --git a/leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch b/leaf-api/paper-patches/features/0001-Purpur-API-Changes.patch similarity index 99% rename from leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch rename to leaf-api/paper-patches/features/0001-Purpur-API-Changes.patch index 3015227b..56c45415 100644 --- a/leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch +++ b/leaf-api/paper-patches/features/0001-Purpur-API-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 0c9140aff1fac81adb2edae1dc75cc8b069b8c3b +Commit: 9030575af3aad201072770067d7fba5abc745312 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "co/aikar/timings/TimedEventExecutor.java.patch" @@ -52,10 +52,10 @@ index 8f39c993056ba5564f111f29d1f84bd014a4c95d..cc1afe2e179d5b0f3f5d9c5c730ca385 return GoalKey.of(type, NamespacedKey.minecraft(key)); } diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java -index f738bbcefe288474c5f591dda03d713850633854..c198304386e83edc2ec582fdf66d97d624004771 100644 +index 652ff54e7c50412503725d628bfe72ed03059790..fb1fe2651e53a9bf46b3632c638e13eea9dcda93 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfo.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java -@@ -19,6 +19,13 @@ public interface ServerBuildInfo { +@@ -19,6 +19,12 @@ public interface ServerBuildInfo { */ Key BRAND_PAPER_ID = Key.key("papermc", "paper"); @@ -65,15 +65,14 @@ index f738bbcefe288474c5f591dda03d713850633854..c198304386e83edc2ec582fdf66d97d6 + */ + Key BRAND_PURPUR_ID = Key.key("purpurmc", "purpur"); + // Purpur end -+ - // Leaf start - Rebrand /** - * The brand id for Gale. + * Gets the {@code ServerBuildInfo}. + * diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index ffb2f5d949cc255263674b2a03d4da809b0c36c5..f04f42832a098836bf41e98787c2db35d154c892 100644 +index 3bde4ad79ade5aae18e9073307f637717e8dd9e3..bb21401d142e2a9385d52afe40c54d793103afe2 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -3082,4 +3082,133 @@ public final class Bukkit { +@@ -3016,4 +3016,133 @@ public final class Bukkit { public static void restart() { server.restart(); } @@ -444,11 +443,11 @@ index 6f83097b1097d0ffa81a95e6f0300cb410dfee2b..c1f19d5c1b819873fce1185b4fbf4c72 + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index ad65ee800d9d394d0322e7ca0b71972d81ca66a1..cc12db46d30c2499dea87f953ef6bf1fa18900c9 100644 +index 9bab00ab10c78908090c8a1a12d4c84e9324b08b..69c0ca1b0c0cdbc911ba3f053fafc5624539917d 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2445,6 +2445,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi - +@@ -2387,6 +2387,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi + } // Paper end + // Purpur start @@ -466,10 +465,10 @@ index ad65ee800d9d394d0322e7ca0b71972d81ca66a1..cc12db46d30c2499dea87f953ef6bf1f /** * Sends the component to the player * -@@ -2806,4 +2818,111 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2723,4 +2735,111 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ - long getLastTickOversleepTime(); - // Gale end - YAPFA - last tick time - API + void allowPausing(@NotNull org.bukkit.plugin.Plugin plugin, boolean value); + // Paper end - API to check if the server is sleeping + + // Purpur start - Bring back server name + /** @@ -1008,10 +1007,10 @@ index bc84b892cae5fe7019a3ad481e9da79956efa1fe..48eb5b00c460cccde29d327cef1d63fc + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 65d8986532f89ef4a51dcad7bf779327810efce8..f2dc9ae68a373d9d1d02cc103c9253496eaa0962 100644 +index 672d78811b27d046bea2fb60a5cd8da387d37b92..18ab7ed5819510f6ee6de380cdbb0cff2493f58f 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3942,4 +3942,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3932,4 +3932,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ @ApiStatus.Experimental PlayerGameConnection getConnection(); diff --git a/leaf-api/paper-patches/features/0001-Rebrand.patch b/leaf-api/paper-patches/features/0002-Rebrand.patch similarity index 94% rename from leaf-api/paper-patches/features/0001-Rebrand.patch rename to leaf-api/paper-patches/features/0002-Rebrand.patch index 32eec108..f781f0e5 100644 --- a/leaf-api/paper-patches/features/0001-Rebrand.patch +++ b/leaf-api/paper-patches/features/0002-Rebrand.patch @@ -49,13 +49,14 @@ index 94a9ed024d3859793618152ea559a168bbcbb5e2..e60008693e017bec1b4eb49c84be3898 -. +. diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java -index 652ff54e7c50412503725d628bfe72ed03059790..f738bbcefe288474c5f591dda03d713850633854 100644 +index fb1fe2651e53a9bf46b3632c638e13eea9dcda93..c198304386e83edc2ec582fdf66d97d624004771 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfo.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java -@@ -19,6 +19,21 @@ public interface ServerBuildInfo { +@@ -25,6 +25,22 @@ public interface ServerBuildInfo { */ - Key BRAND_PAPER_ID = Key.key("papermc", "paper"); - + Key BRAND_PURPUR_ID = Key.key("purpurmc", "purpur"); + // Purpur end ++ + // Leaf start - Rebrand + /** + * The brand id for Gale. diff --git a/leaf-api/paper-patches/features/0002-Gale-configuration.patch b/leaf-api/paper-patches/features/0003-Gale-configuration.patch similarity index 92% rename from leaf-api/paper-patches/features/0002-Gale-configuration.patch rename to leaf-api/paper-patches/features/0003-Gale-configuration.patch index f601413b..3041198b 100644 --- a/leaf-api/paper-patches/features/0002-Gale-configuration.patch +++ b/leaf-api/paper-patches/features/0003-Gale-configuration.patch @@ -13,7 +13,7 @@ As part of: Paper (https://github.com/PaperMC/Paper) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 9bab00ab10c78908090c8a1a12d4c84e9324b08b..544791edbd13d4ee711d22e6c8ef48329944e99c 100644 +index 69c0ca1b0c0cdbc911ba3f053fafc5624539917d..26b2555d9fa69f10178c6ed4e2989aaa7c8ab910 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2385,6 +2385,21 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -37,4 +37,4 @@ index 9bab00ab10c78908090c8a1a12d4c84e9324b08b..544791edbd13d4ee711d22e6c8ef4832 + // Paper end - /** + // Purpur start diff --git a/leaf-api/paper-patches/features/0003-SIMD-support.patch b/leaf-api/paper-patches/features/0004-SIMD-support.patch similarity index 100% rename from leaf-api/paper-patches/features/0003-SIMD-support.patch rename to leaf-api/paper-patches/features/0004-SIMD-support.patch diff --git a/leaf-api/paper-patches/features/0004-Vectorized-map-color-conversion.patch b/leaf-api/paper-patches/features/0005-Vectorized-map-color-conversion.patch similarity index 100% rename from leaf-api/paper-patches/features/0004-Vectorized-map-color-conversion.patch rename to leaf-api/paper-patches/features/0005-Vectorized-map-color-conversion.patch diff --git a/leaf-api/paper-patches/features/0005-Do-not-log-plugin-library-loads.patch b/leaf-api/paper-patches/features/0006-Do-not-log-plugin-library-loads.patch similarity index 100% rename from leaf-api/paper-patches/features/0005-Do-not-log-plugin-library-loads.patch rename to leaf-api/paper-patches/features/0006-Do-not-log-plugin-library-loads.patch diff --git a/leaf-api/paper-patches/features/0006-Player-canSee-by-entity-UUID.patch b/leaf-api/paper-patches/features/0007-Player-canSee-by-entity-UUID.patch similarity index 96% rename from leaf-api/paper-patches/features/0006-Player-canSee-by-entity-UUID.patch rename to leaf-api/paper-patches/features/0007-Player-canSee-by-entity-UUID.patch index d97e64a1..85452cf4 100644 --- a/leaf-api/paper-patches/features/0006-Player-canSee-by-entity-UUID.patch +++ b/leaf-api/paper-patches/features/0007-Player-canSee-by-entity-UUID.patch @@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 3584ca0a89f59e391ab6d5be8f2274a6801d025f..cc663ca87a6f64ea891984c72554796f25bb308f 100644 +index 18ab7ed5819510f6ee6de380cdbb0cff2493f58f..f2dc9ae68a373d9d1d02cc103c9253496eaa0962 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -2128,6 +2128,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM diff --git a/leaf-api/paper-patches/features/0007-Specific-interval-TPS-API.patch b/leaf-api/paper-patches/features/0008-Specific-interval-TPS-API.patch similarity index 93% rename from leaf-api/paper-patches/features/0007-Specific-interval-TPS-API.patch rename to leaf-api/paper-patches/features/0008-Specific-interval-TPS-API.patch index 357d520e..7b8d13e0 100644 --- a/leaf-api/paper-patches/features/0007-Specific-interval-TPS-API.patch +++ b/leaf-api/paper-patches/features/0008-Specific-interval-TPS-API.patch @@ -7,7 +7,7 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 3bde4ad79ade5aae18e9073307f637717e8dd9e3..bac8bf1996350e4c16ba9a494c5d9bf052ad7fa3 100644 +index bb21401d142e2a9385d52afe40c54d793103afe2..e64bea6d644154158c0d787ea0dec9f1bdbb69bd 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -2447,6 +2447,35 @@ public final class Bukkit { @@ -47,7 +47,7 @@ index 3bde4ad79ade5aae18e9073307f637717e8dd9e3..bac8bf1996350e4c16ba9a494c5d9bf0 * Get a sample of the servers last tick times (in nanos) * diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 544791edbd13d4ee711d22e6c8ef48329944e99c..ee28284f665cd343930b8c0419009c7420830a67 100644 +index 26b2555d9fa69f10178c6ed4e2989aaa7c8ab910..64172120596544caee8fc7ffe6e8e80a7472686f 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2133,6 +2133,29 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi diff --git a/leaf-api/paper-patches/features/0008-5-second-TPS-average.patch b/leaf-api/paper-patches/features/0009-5-second-TPS-average.patch similarity index 95% rename from leaf-api/paper-patches/features/0008-5-second-TPS-average.patch rename to leaf-api/paper-patches/features/0009-5-second-TPS-average.patch index 0ae6ae53..98bf382c 100644 --- a/leaf-api/paper-patches/features/0008-5-second-TPS-average.patch +++ b/leaf-api/paper-patches/features/0009-5-second-TPS-average.patch @@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index bac8bf1996350e4c16ba9a494c5d9bf052ad7fa3..c899da328fca4dccbf69b2e2d74bcdf31e0e2c33 100644 +index e64bea6d644154158c0d787ea0dec9f1bdbb69bd..71e782a1136e828e72021f628cc98887a98bf9d6 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -2447,7 +2447,30 @@ public final class Bukkit { @@ -72,7 +72,7 @@ index bac8bf1996350e4c16ba9a494c5d9bf052ad7fa3..c899da328fca4dccbf69b2e2d74bcdf3 * Gets the average server TPS over the last 1 minute * diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index ee28284f665cd343930b8c0419009c7420830a67..c067cd28639dada3aaea71298ad78969ddb79954 100644 +index 64172120596544caee8fc7ffe6e8e80a7472686f..287e14dd943f78fd86b1deb328cacaed4c530299 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2133,7 +2133,27 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi diff --git a/leaf-api/paper-patches/features/0009-Last-tick-time-API.patch b/leaf-api/paper-patches/features/0010-Last-tick-time-API.patch similarity index 89% rename from leaf-api/paper-patches/features/0009-Last-tick-time-API.patch rename to leaf-api/paper-patches/features/0010-Last-tick-time-API.patch index 9cb8e767..13a68d29 100644 --- a/leaf-api/paper-patches/features/0009-Last-tick-time-API.patch +++ b/leaf-api/paper-patches/features/0010-Last-tick-time-API.patch @@ -23,7 +23,7 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index c899da328fca4dccbf69b2e2d74bcdf31e0e2c33..ffb2f5d949cc255263674b2a03d4da809b0c36c5 100644 +index 71e782a1136e828e72021f628cc98887a98bf9d6..f04f42832a098836bf41e98787c2db35d154c892 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -3053,6 +3053,20 @@ public final class Bukkit { @@ -48,13 +48,13 @@ index c899da328fca4dccbf69b2e2d74bcdf31e0e2c33..ffb2f5d949cc255263674b2a03d4da80 * @deprecated All methods on this class have been deprecated, see the individual methods for replacements. */ diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index c067cd28639dada3aaea71298ad78969ddb79954..ad65ee800d9d394d0322e7ca0b71972d81ca66a1 100644 +index 287e14dd943f78fd86b1deb328cacaed4c530299..d37a455c9d775b0dcb2e10fe8b0dc4c5c7aacae7 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2781,4 +2781,29 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2900,4 +2900,29 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ - void allowPausing(@NotNull org.bukkit.plugin.Plugin plugin, boolean value); - // Paper end - API to check if the server is sleeping + void clearBlockHighlights(); + // Purpur end - Debug Marker API + + // Gale start - YAPFA - last tick time - API + /** diff --git a/leaf-api/paper-patches/features/0010-Pufferfish-Sentry.patch b/leaf-api/paper-patches/features/0011-Pufferfish-Sentry.patch similarity index 100% rename from leaf-api/paper-patches/features/0010-Pufferfish-Sentry.patch rename to leaf-api/paper-patches/features/0011-Pufferfish-Sentry.patch diff --git a/leaf-api/paper-patches/features/0017-Leaves-Replay-Mod-API.patch b/leaf-api/paper-patches/features/0017-Leaves-Replay-Mod-API.patch index 969ffc07..2578287f 100644 --- a/leaf-api/paper-patches/features/0017-Leaves-Replay-Mod-API.patch +++ b/leaf-api/paper-patches/features/0017-Leaves-Replay-Mod-API.patch @@ -11,7 +11,7 @@ Original project: https://github.com/LeavesMC/Leaves This patch is Powered by ReplayMod(https://github.com/ReplayMod) diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index f04f42832a098836bf41e98787c2db35d154c892..b7782de2fb8e636e82a6ef89a62edeec902b367e 100644 +index f04f42832a098836bf41e98787c2db35d154c892..a1318ed9f8c321bff24de55a719a54ec80b13422 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -3211,4 +3211,10 @@ public final class Bukkit { @@ -26,13 +26,13 @@ index f04f42832a098836bf41e98787c2db35d154c892..b7782de2fb8e636e82a6ef89a62edeec + // Leaves end - Photographer API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index cc12db46d30c2499dea87f953ef6bf1fa18900c9..0d8463905bc15382c284fc31a1be6fbb7ee0a46b 100644 +index d37a455c9d775b0dcb2e10fe8b0dc4c5c7aacae7..5e5a4fa36f48f6c67096cc678a3bcbaee684785f 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2925,4 +2925,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ - void clearBlockHighlights(); - // Purpur end - Debug Marker API + long getLastTickOversleepTime(); + // Gale end - YAPFA - last tick time - API + + // Leaves start - Photographer API + @NotNull org.leavesmc.leaves.entity.photographer.PhotographerManager getPhotographerManager(); diff --git a/leaf-server/minecraft-patches/features/0092-Purpur-Server-Minecraft-Changes.patch b/leaf-server/minecraft-patches/features/0001-Purpur-Server-Minecraft-Changes.patch similarity index 98% rename from leaf-server/minecraft-patches/features/0092-Purpur-Server-Minecraft-Changes.patch rename to leaf-server/minecraft-patches/features/0001-Purpur-Server-Minecraft-Changes.patch index 0f1e21b2..61a7b16b 100644 --- a/leaf-server/minecraft-patches/features/0092-Purpur-Server-Minecraft-Changes.patch +++ b/leaf-server/minecraft-patches/features/0001-Purpur-Server-Minecraft-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur Server Minecraft Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 0c9140aff1fac81adb2edae1dc75cc8b069b8c3b +Commit: 9030575af3aad201072770067d7fba5abc745312 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "net/minecraft/CrashReport.java.patch" @@ -42,10 +42,10 @@ Patches listed below are removed in this patch, They exists in Gale or Leaf: - Rebrand diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java -index c9de5fbb56b7b455b4c8bc59539695fd58a32566..ea01daf583ddd110f153304a6a65ac2d765b9d31 100644 +index ae2bb9a73106febfe5f0d090abd4252bbb5fd27e..ca21597263cb430e2a5ae07e8cecfb0d53a270d2 100644 --- a/io/papermc/paper/entity/activation/ActivationRange.java +++ b/io/papermc/paper/entity/activation/ActivationRange.java -@@ -161,6 +161,8 @@ public final class ActivationRange { +@@ -147,6 +147,8 @@ public final class ActivationRange { continue; } @@ -54,7 +54,7 @@ index c9de5fbb56b7b455b4c8bc59539695fd58a32566..ea01daf583ddd110f153304a6a65ac2d final int worldHeight = world.getHeight(); ActivationRange.maxBB = player.getBoundingBox().inflate(maxRange, worldHeight, maxRange); ActivationType.MISC.boundingBox = player.getBoundingBox().inflate(miscActivationRange, worldHeight, miscActivationRange); -@@ -318,6 +320,7 @@ public final class ActivationRange { +@@ -288,6 +290,7 @@ public final class ActivationRange { * @return */ public static boolean checkIfActive(final Entity entity) { @@ -118,10 +118,10 @@ index 3acfb2a78845dd8081dc3c01d653034232c76e60..51caf352e77df49fc04bf84f1fab29b6 boolean flag = this.source.acceptsSuccess() && !this.silent; boolean flag1 = allowLogging && this.source.shouldInformAdmins() && !this.silent; diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java -index e00624a738e65ab14ec68a8d0e7861522fa32e82..287c0936930ff4f3ca6dc2a4cbfc796a120fe4c0 100644 +index ec1cced129ef42be65d7b2b622638bfae8bd895e..2408a65d64847d13476b2bf77bdf56f205d28795 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java -@@ -249,7 +249,7 @@ public class Commands { +@@ -252,7 +252,7 @@ public class Commands { JfrCommand.register(this.dispatcher); } @@ -130,7 +130,7 @@ index e00624a738e65ab14ec68a8d0e7861522fa32e82..287c0936930ff4f3ca6dc2a4cbfc796a RaidCommand.register(this.dispatcher, context); DebugPathCommand.register(this.dispatcher); DebugMobSpawningCommand.register(this.dispatcher); -@@ -261,6 +261,12 @@ public class Commands { +@@ -264,6 +264,12 @@ public class Commands { } } @@ -143,7 +143,7 @@ index e00624a738e65ab14ec68a8d0e7861522fa32e82..287c0936930ff4f3ca6dc2a4cbfc796a if (selection.includeDedicated) { BanIpCommands.register(this.dispatcher); BanListCommands.register(this.dispatcher); -@@ -277,6 +283,14 @@ public class Commands { +@@ -280,6 +286,14 @@ public class Commands { StopCommand.register(this.dispatcher); TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); @@ -316,7 +316,7 @@ index 41005f6b9f53a9c1125ad5e08538d9f5aacb3571..411e1284a208ca1a097cf6eaa92e1e0d } // Paper end - Buffer joins to world diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java -index b16f3f515a76ddbbd74d73464396cf094cb30599..4134679c838307de7ae410cfc727fada0eeebf6b 100644 +index fd3553bdc1c3cdbf6aa3dc00e0a4987f8eaa4fb8..b06c2c4aa77edafb374f7cf0406cf4d29c6e7f9f 100644 --- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java @@ -109,6 +109,13 @@ public class Main { @@ -330,14 +330,14 @@ index b16f3f515a76ddbbd74d73464396cf094cb30599..4134679c838307de7ae410cfc727fada + org.purpurmc.purpur.PurpurConfig.registerMinecraftDisabledCommands = purpurConfiguration.getBoolean("settings.register-minecraft-disabled-commands"); // Purpur - register disabled minecraft commands + // Purpur end - Add toggle for enchant level clamping - load config files early + - org.dreeam.leaf.config.LeafConfig.loadConfig(); // Leaf - Leaf config io.papermc.paper.plugin.PluginInitializerManager.load(optionSet); // Paper Bootstrap.bootStrap(); + Bootstrap.validate(); diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 3e78cec93eebc5aaca28d4de53c8200f9bb43edd..808f3adbae68cbd9863bfd8fa1d9592cae6b9ddf 100644 +index 9243bb11e3f968d0bf0eb2e3dc9295c0232bc15d..478b9fba67f10dec1717a0d0bcb538cf0ad3afa1 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -266,6 +266,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; // Paper - don't store the vanilla dispatcher -@@ -287,6 +288,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation - public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning + public boolean lagging = false; // Purpur - Lagging threshold + protected boolean upnp = false; // Purpur - UPnP Port Forwarding public static S spin(Function threadFunction) { ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system -@@ -978,6 +981,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent serverLevel.updateLagCompensationTick(); // Paper - lag compensation net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = serverLevel.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers + serverLevel.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur - Ridables + profilerFiller.push(() -> serverLevel + " " + serverLevel.dimension().location()); /* Drop global time updates if (this.tickCount % 20 == 0) { - this.synchronizeTime(serverLevel); diff --git a/net/minecraft/server/PlayerAdvancements.java b/net/minecraft/server/PlayerAdvancements.java -index 63c32ae544d87177c9b3e1f1b73eeb9be904eebf..9ecc19b8a7d4e6b27335b542308f78e5005b0e15 100644 +index fdeca41d40705f28864ce4443d01cd872c9d51b0..8edff6b7e6605e08277a77f5854d2483bffe5f1c 100644 --- a/net/minecraft/server/PlayerAdvancements.java +++ b/net/minecraft/server/PlayerAdvancements.java @@ -194,6 +194,7 @@ public class PlayerAdvancements { @@ -504,7 +504,7 @@ index 4f56cdcf658234b1ca92d38c3df3d31e9be34a15..945d7c0b31fe9ac029e518af92eebd6e ItemEntity itemEntity = serverPlayer.drop(itemStack, false, false, false, null); // Paper - do not fire PlayerDropItemEvent for /give command if (itemEntity != null) { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index ca1406178cfb1a5a10947872585e2dcf3059b460..87fc8861948b50361ec04c5a23406d3abdec6eac 100644 +index 98927d4a5fba2a0dcdb147ac10b82c3286ccdc6b..670553243d26e2faab8a21f099a846d4d1df7927 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -105,6 +105,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -515,8 +515,8 @@ index ca1406178cfb1a5a10947872585e2dcf3059b460..87fc8861948b50361ec04c5a23406d3a new com.destroystokyo.paper.console.PaperConsole(DedicatedServer.this).start(); /* BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); -@@ -188,6 +189,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - org.dreeam.leaf.command.LeafCommands.registerCommands(this); // Leaf - Leaf commands +@@ -183,6 +184,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + io.papermc.paper.command.PaperCommands.registerCommands(this); // Paper - setup /paper command this.server.spark.registerCommandBeforePlugins(this.server); // Paper - spark com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics + // Purpur start - Purpur config files @@ -530,8 +530,8 @@ index ca1406178cfb1a5a10947872585e2dcf3059b460..87fc8861948b50361ec04c5a23406d3a + // Purpur end - Purpur config files com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now - // Gale start - Pufferfish - SIMD support -@@ -242,6 +252,30 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + this.setPvpAllowed(properties.pvp); +@@ -230,6 +240,30 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface if (true) throw new IllegalStateException("Failed to bind to port", var10); // Paper - Propagate failed to bind to port error return false; } @@ -562,15 +562,15 @@ index ca1406178cfb1a5a10947872585e2dcf3059b460..87fc8861948b50361ec04c5a23406d3a // CraftBukkit start this.server.loadPlugins(); -@@ -321,6 +355,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -308,6 +342,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + LOGGER.info("JMX monitoring enabled"); } - if (org.dreeam.leaf.config.modules.async.AsyncMobSpawning.enabled) mobSpawnExecutor.start(); // Pufferfish + org.purpurmc.purpur.task.BossBarTask.startAll(); // Purpur - Implement TPSBar + if (org.purpurmc.purpur.PurpurConfig.beeCountPayload) org.purpurmc.purpur.task.BeehiveTask.instance().register(); // Purpur - Give bee counts in beehives to Purpur clients - return true; } + } diff --git a/net/minecraft/server/dedicated/DedicatedServerProperties.java b/net/minecraft/server/dedicated/DedicatedServerProperties.java index 4a01088da91fc6d620cb804a9ab6d6eb1630b473..b286dc17cda16fca3af9374d2a4a8bd137c24450 100644 --- a/net/minecraft/server/dedicated/DedicatedServerProperties.java @@ -722,10 +722,10 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862 private JComponent buildOnboardingPanel() { String onboardingLink = "https://docs.papermc.io/paper/next-steps"; diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208323fb4e9 100644 +index dda8d38ef61672cc714d9e5a475f9b0412ed5ff9..3c7159d0981c948e71a5612ba4083accb5849ed4 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -204,6 +204,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -206,6 +206,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe private final StructureManager structureManager; private final StructureCheck structureCheck; private final boolean tickTime; @@ -734,7 +734,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 private final RandomSequences randomSequences; // CraftBukkit start -@@ -212,6 +214,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -214,6 +216,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) @@ -742,7 +742,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 @Override public @Nullable LevelChunk getChunkIfLoaded(int x, int z) { -@@ -588,7 +591,24 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -590,7 +593,24 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // CraftBukkit end this.tickTime = tickTime; this.server = server; @@ -768,7 +768,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 this.serverLevelData = serverLevelData; ChunkGenerator chunkGenerator = levelStem.generator(); // CraftBukkit start -@@ -673,6 +693,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -675,6 +695,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.chunkDataController = new ca.spottedleaf.moonrise.patches.chunk_system.io.datacontroller.ChunkDataController((ServerLevel)(Object)this, this.chunkTaskScheduler); // Paper end - rewrite chunk system this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit @@ -776,7 +776,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 } // Paper start -@@ -715,7 +736,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -721,7 +742,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); @@ -785,9 +785,9 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 // Paper start - create time skip event - move up calculations final long newDayTime = this.levelData.getDayTime() + 24000L; org.bukkit.event.world.TimeSkipEvent event = new org.bukkit.event.world.TimeSkipEvent( -@@ -826,6 +847,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - this.serverLevelData.setGameTime(l); +@@ -840,6 +861,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.serverLevelData.getScheduledEvents().tick(this.server, l); + Profiler.get().pop(); if (this.serverLevelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) { + // Purpur start - Configurable daylight cycle + int incrementTicks = isBrightOutside() ? this.purpurConfig.daytimeTicks : this.purpurConfig.nighttimeTicks; @@ -795,11 +795,11 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 + this.preciseTime += 12000 / (double) incrementTicks; + this.setDayTime(this.preciseTime); + } else -+ // Purpur end - Configurable daylight cycle ++ // Purpur end - Configurable daylight cycle this.setDayTime(this.levelData.getDayTime() + 1L); } } -@@ -833,7 +861,21 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -847,7 +875,21 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public void setDayTime(long time) { this.serverLevelData.setDayTime(time); @@ -821,7 +821,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 public void tickCustomSpawners(boolean spawnEnemies, boolean spawnFriendlies) { for (CustomSpawner customSpawner : this.customSpawners) { -@@ -930,9 +972,17 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -951,9 +993,17 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe && this.random.nextDouble() < currentDifficultyAt.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01) // Paper - Configurable spawn chances for skeleton horses && !this.getBlockState(blockPos.below()).is(Blocks.LIGHTNING_ROD); if (flag) { @@ -841,7 +841,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 skeletonHorse.setAge(0); skeletonHorse.setPos(blockPos.getX(), blockPos.getY(), blockPos.getZ()); this.addFreshEntity(skeletonHorse, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit -@@ -965,9 +1015,35 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -988,9 +1038,35 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe if (blockState.is(Blocks.SNOW)) { int layersValue = blockState.getValue(SnowLayerBlock.LAYERS); if (layersValue < Math.min(_int, 8)) { @@ -877,7 +877,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 } } else { org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockFormEvent(this, heightmapPos, Blocks.SNOW.defaultBlockState(), 3, null); // CraftBukkit -@@ -988,7 +1064,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1011,7 +1087,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe pointOfInterestType -> pointOfInterestType.is(PoiTypes.LIGHTNING_ROD), blockPos -> blockPos.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockPos.getX(), blockPos.getZ()) - 1, pos, @@ -886,7 +886,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 PoiManager.Occupancy.ANY ); return optional.map(blockPos -> blockPos.above(1)); -@@ -1037,8 +1113,26 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1060,8 +1136,26 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); Component component; if (this.sleepStatus.areEnoughSleeping(_int)) { @@ -913,7 +913,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 component = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(_int)); } -@@ -1175,6 +1269,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1198,6 +1292,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @VisibleForTesting public void resetWeatherCycle() { // CraftBukkit start @@ -921,7 +921,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // If we stop due to everyone sleeping we should reset the weather duration to some other random value. // Not that everyone ever manages to get the whole server to sleep at the same time.... -@@ -1182,6 +1277,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1205,6 +1300,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.serverLevelData.setRainTime(0); } // CraftBukkit end @@ -929,7 +929,7 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // CraftBukkit start // If we stop due to everyone sleeping we should reset the weather duration to some other random value. -@@ -2705,7 +2801,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2727,7 +2823,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // Spigot start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message // Paper start - Fix merchant inventory not closing on entity removal @@ -939,10 +939,10 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 } // Paper end - Fix merchant inventory not closing on entity removal diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86afb43c6a 100644 +index 9cbc3e1de1a1d0419b72ce074cfa01497a1fdd72..35efaa78b62a38e3d9e4a50baa227c0ff5098ff6 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -428,6 +428,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -429,6 +429,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc public boolean isRealPlayer; // Paper public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public @Nullable org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event @@ -952,7 +952,7 @@ index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86 // Paper start - rewrite chunk system private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -@@ -561,6 +564,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -562,6 +565,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.respawnConfig = input.read("respawn", ServerPlayer.RespawnConfig.CODEC).orElse(null); this.spawnExtraParticlesOnFall = input.getBooleanOr("spawn_extra_particles_on_fall", false); this.raidOmenPosition = input.read("raid_omen_position", BlockPos.CODEC).orElse(null); @@ -963,7 +963,7 @@ index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86 } @Override -@@ -578,6 +585,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -579,6 +586,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc output.storeNullable("raid_omen_position", BlockPos.CODEC, this.raidOmenPosition); this.saveEnderPearls(output); this.getBukkitEntity().setExtraData(output); // CraftBukkit @@ -973,7 +973,7 @@ index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86 } private void saveParentVehicle(ValueOutput output) { -@@ -787,6 +797,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -788,6 +798,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this, true); @@ -989,7 +989,7 @@ index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86 } private void updatePlayerAttributes() { -@@ -1078,6 +1097,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1079,6 +1098,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc // Paper - moved up to sendClientboundPlayerCombatKillPacket() sendClientboundPlayerCombatKillPacket(event.getShowDeathMessages(), deathScreenMessage); // Paper - Expand PlayerDeathEvent Team team = this.getTeam(); @@ -997,7 +997,7 @@ index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86 if (team == null || team.getDeathMessageVisibility() == Team.Visibility.ALWAYS) { this.server.getPlayerList().broadcastSystemMessage(deathMessage, false); } else if (team.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) { -@@ -1184,6 +1204,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1185,6 +1205,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc if (this.isInvulnerableTo(level, damageSource)) { return false; } else { @@ -1016,7 +1016,7 @@ index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86 Entity entity = damageSource.getEntity(); if (!( // Paper - split the if statement. If below statement is false, hurtServer would not have been evaluated. Return false. !(entity instanceof Player player && !this.canHarmPlayer(player)) -@@ -1433,6 +1465,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1438,6 +1470,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc serverLevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); this.unsetRemoved(); // CraftBukkit end @@ -1024,7 +1024,7 @@ index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86 this.setServerLevel(level); this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); -@@ -1548,7 +1581,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1554,7 +1587,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc new AABB(vec3.x() - 8.0, vec3.y() - 5.0, vec3.z() - 8.0, vec3.x() + 8.0, vec3.y() + 5.0, vec3.z() + 8.0), monster -> monster.isPreventingPlayerRest(this.level(), this) ); @@ -1033,7 +1033,7 @@ index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86 return Either.left(Player.BedSleepingProblem.NOT_SAFE); } } -@@ -1585,7 +1618,19 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1591,7 +1624,19 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc CriteriaTriggers.SLEPT_IN_BED.trigger(this); }); if (!this.level().canSleepThroughNights()) { @@ -1054,7 +1054,7 @@ index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86 } this.level().updateSleepingPlayerList(); -@@ -1677,6 +1722,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1683,6 +1728,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @Override public void openTextEdit(SignBlockEntity signEntity, boolean isFrontText) { @@ -1062,7 +1062,7 @@ index f68b92a85b2223d22cb96ee0f8d588af5696b947..fb585637383db4592f97f0c9040ffa86 this.connection.send(new ClientboundBlockUpdatePacket(this.level(), signEntity.getBlockPos())); this.connection.send(new ClientboundOpenSignEditorPacket(signEntity.getBlockPos(), isFrontText)); } -@@ -1986,6 +2032,26 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1992,6 +2038,26 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -1285,12 +1285,12 @@ index cfbf34964288526e93d0a5b212c1b60296c10430..d638821595138ef972163925136eb572 + // Purpur end - Shift right click to use exp for mending } diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 37de0c46b065851ea0f0d01e415980e47cc3cfb5..c5ed0843fdcb066d7fa0aa3075796333862ad923 100644 +index f02800e4e941b05bde6f0d5fac76e2b6ec5b9832..58215f4a156e4cf57338e78975be7b6abfd961db 100644 --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -56,6 +56,10 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack - private static final long KEEPALIVE_LIMIT = KEEPALIVE_LIMIT_IN_SECONDS * 1000; - // Gale end - Purpur - send multiple keep-alive packets +@@ -53,6 +53,10 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + public final java.util.Map packCallbacks = new java.util.concurrent.ConcurrentHashMap<>(); // Paper - adventure resource pack callbacks + private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit protected static final net.minecraft.resources.ResourceLocation MINECRAFT_BRAND = net.minecraft.resources.ResourceLocation.withDefaultNamespace("brand"); // Paper - Brand support + // Purpur start - Purpur client support + protected static final net.minecraft.resources.ResourceLocation PURPUR_CLIENT = net.minecraft.resources.ResourceLocation.fromNamespaceAndPath("purpur", "client"); @@ -1299,7 +1299,7 @@ index 37de0c46b065851ea0f0d01e415980e47cc3cfb5..c5ed0843fdcb066d7fa0aa3075796333 // Paper start - retain certain values public @Nullable String playerBrand; public final java.util.Set pluginMessagerChannels; -@@ -194,6 +198,12 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -178,6 +182,12 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack return; } @@ -1313,7 +1313,7 @@ index 37de0c46b065851ea0f0d01e415980e47cc3cfb5..c5ed0843fdcb066d7fa0aa3075796333 this.playerBrand = new net.minecraft.network.FriendlyByteBuf(io.netty.buffer.Unpooled.wrappedBuffer(data)).readUtf(256); } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b25fe64c8 100644 +index ca13dd72f173be6714965c506f2d48dcd3c9e569..d6e96a191469c8b263031da18a2e519032dd79d7 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -338,6 +338,20 @@ public class ServerGamePacketListenerImpl @@ -1367,7 +1367,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1282,6 +1305,10 @@ public class ServerGamePacketListenerImpl +@@ -1277,6 +1300,10 @@ public class ServerGamePacketListenerImpl final int maxBookPageSize = pageMax.intValue(); final double multiplier = Math.clamp(io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier, 0.3D, 1D); long byteAllowed = maxBookPageSize; @@ -1378,7 +1378,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b for (final String page : pageList) { final int byteLength = page.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; byteTotal += byteLength; -@@ -1306,7 +1333,8 @@ public class ServerGamePacketListenerImpl +@@ -1301,7 +1328,8 @@ public class ServerGamePacketListenerImpl } if (byteTotal > byteAllowed) { @@ -1388,7 +1388,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect return; } -@@ -1325,31 +1353,45 @@ public class ServerGamePacketListenerImpl +@@ -1320,31 +1348,45 @@ public class ServerGamePacketListenerImpl Optional optional = packet.title(); optional.ifPresent(list::add); list.addAll(packet.pages()); @@ -1438,7 +1438,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b itemStack.set( DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getName().getString(), 0, list, true) -@@ -1363,6 +1405,16 @@ public class ServerGamePacketListenerImpl +@@ -1358,6 +1400,16 @@ public class ServerGamePacketListenerImpl return this.player.isTextFilteringEnabled() ? Filterable.passThrough(filteredText.filteredOrEmpty()) : Filterable.from(filteredText); } @@ -1455,7 +1455,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b @Override public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); -@@ -1402,7 +1454,15 @@ public class ServerGamePacketListenerImpl +@@ -1397,7 +1449,15 @@ public class ServerGamePacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); @@ -1472,7 +1472,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause } else { ServerLevel serverLevel = this.player.level(); -@@ -1584,7 +1644,7 @@ public class ServerGamePacketListenerImpl +@@ -1579,7 +1639,7 @@ public class ServerGamePacketListenerImpl movedWrongly = true; if (event.getLogWarning()) // Paper end @@ -1481,7 +1481,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b } // Paper } -@@ -1649,6 +1709,8 @@ public class ServerGamePacketListenerImpl +@@ -1644,6 +1704,8 @@ public class ServerGamePacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -1490,7 +1490,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1704,6 +1766,13 @@ public class ServerGamePacketListenerImpl +@@ -1699,6 +1761,13 @@ public class ServerGamePacketListenerImpl this.player.tryResetCurrentImpulseContext(); } @@ -1504,7 +1504,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b this.player.checkMovementStatistics(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1721,6 +1790,17 @@ public class ServerGamePacketListenerImpl +@@ -1716,6 +1785,17 @@ public class ServerGamePacketListenerImpl } } @@ -1522,7 +1522,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b private boolean shouldCheckPlayerMovement(boolean isElytraMovement) { if (this.isSingleplayerOwner()) { return false; -@@ -2118,6 +2198,7 @@ public class ServerGamePacketListenerImpl +@@ -2113,6 +2193,7 @@ public class ServerGamePacketListenerImpl boolean cancelled; if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) { @@ -1530,7 +1530,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemInHand, hand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2765,6 +2846,7 @@ public class ServerGamePacketListenerImpl +@@ -2760,6 +2841,7 @@ public class ServerGamePacketListenerImpl AABB boundingBox = target.getBoundingBox(); if (this.player.canInteractWithEntity(boundingBox, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0))) { // Paper - configurable lenience value for interact range @@ -1538,7 +1538,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b packet.dispatch( new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand hand, ServerGamePacketListenerImpl.EntityInteraction entityInteraction, PlayerInteractEntityEvent event) { // CraftBukkit -@@ -2778,6 +2860,8 @@ public class ServerGamePacketListenerImpl +@@ -2773,6 +2855,8 @@ public class ServerGamePacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); final boolean resendData = event.isCancelled() || !ServerGamePacketListenerImpl.this.player.getItemInHand(hand).is(itemType); @@ -1547,7 +1547,7 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b // Entity in bucket - SPIGOT-4048 and SPIGOT-6859 if (itemType == Items.WATER_BUCKET && target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && resendData) { target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it -@@ -3497,7 +3581,7 @@ public class ServerGamePacketListenerImpl +@@ -3492,7 +3576,7 @@ public class ServerGamePacketListenerImpl @Override public void handleChangeGameMode(ServerboundChangeGameModePacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); @@ -1557,10 +1557,10 @@ index a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9..2c7f35ec3276f420875cf52596ada42b "Player {} tried to change game mode to {} without required permissions", this.player.getGameProfile().getName(), diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index f9fad100d3e5e4b44a5b0f88e288e6fac7a250f7..6d320ed179393e47398c44f2ba2b2285016f349e 100644 +index ebf4d4516233c002b33084f1679044b23869d848..20ba45054c243fbb85e50cf0bdf75648730cb0bc 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -285,7 +285,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -273,7 +273,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, ServerLoginPacketListenerImpl.LOGGER.warn("Failed to verify username but will let them in anyway!"); ServerLoginPacketListenerImpl.this.startClientVerification(ServerLoginPacketListenerImpl.this.createOfflineProfile(string1)); // Spigot } else { @@ -1570,18 +1570,18 @@ index f9fad100d3e5e4b44a5b0f88e288e6fac7a250f7..6d320ed179393e47398c44f2ba2b2285 } } catch (AuthenticationUnavailableException var4) { diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index adc430c3f36bda2d77b76ae7735ce4fe12e33974..6396083993d248683b887774d2db3f3f03825033 100644 +index 33b1a6fdf169001093642cc8200d2789e80692b0..6c4aaa63f1171df770d97aca47a84ce95bb2d0d0 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -412,6 +412,7 @@ public abstract class PlayerList { +@@ -401,6 +401,7 @@ public abstract class PlayerList { scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); } // Paper end - Configurable player collision + org.purpurmc.purpur.task.BossBarTask.addToAll(player); // Purpur - Implement TPSBar - if (org.galemc.gale.configuration.GaleGlobalConfiguration.get().logToConsole.playerLoginLocations) { // Gale - JettPack - make logging login location configurable PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), loggableAddress, player.getId(), serverLevel.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ()); - // Gale start - JettPack - make logging login location configurable -@@ -525,6 +526,7 @@ public abstract class PlayerList { + // Paper start - Send empty chunk, so players aren't stuck in the world loading screen with our chunk system not sending chunks when dead + if (player.isDeadOrDying()) { +@@ -508,6 +509,7 @@ public abstract class PlayerList { } public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player, net.kyori.adventure.text.Component leaveMessage) { // Paper end - Fix kick event leave message not being sent @@ -1589,7 +1589,7 @@ index adc430c3f36bda2d77b76ae7735ce4fe12e33974..6396083993d248683b887774d2db3f3f ServerLevel serverLevel = player.level(); player.awardStat(Stats.LEAVE_GAME); // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it -@@ -953,6 +955,20 @@ public abstract class PlayerList { +@@ -893,6 +895,20 @@ public abstract class PlayerList { } } @@ -1610,7 +1610,7 @@ index adc430c3f36bda2d77b76ae7735ce4fe12e33974..6396083993d248683b887774d2db3f3f public void broadcastAll(Packet packet, ResourceKey dimension) { for (ServerPlayer serverPlayer : this.players) { if (serverPlayer.level().dimension() == dimension) { -@@ -1037,6 +1053,7 @@ public abstract class PlayerList { +@@ -977,6 +993,7 @@ public abstract class PlayerList { } else { b = (byte)(24 + permLevel); } @@ -1618,7 +1618,7 @@ index adc430c3f36bda2d77b76ae7735ce4fe12e33974..6396083993d248683b887774d2db3f3f player.connection.send(new ClientboundEntityEventPacket(player, b)); } -@@ -1045,11 +1062,32 @@ public abstract class PlayerList { +@@ -985,11 +1002,32 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -1738,7 +1738,7 @@ index 4cec197634fac341cca1ed108f1ecb0561f72461..aa6213ca382e4901363317df1e30332c } } diff --git a/net/minecraft/world/damagesource/DamageSource.java b/net/minecraft/world/damagesource/DamageSource.java -index 9926848124f0b74ebb615fbbc45d95ebce64233f..5a663f66820d95449ccf9117e72159a10bcd04d6 100644 +index bb021fc9de91f8c4f79e6a753d57fa157efbbda7..5fa92eef9c6b88cf96d3fe427e4d4f16953e8094 100644 --- a/net/minecraft/world/damagesource/DamageSource.java +++ b/net/minecraft/world/damagesource/DamageSource.java @@ -30,6 +30,8 @@ public class DamageSource { @@ -1923,10 +1923,10 @@ index 1fc9e1ad541c46124183a401b2a7d99aea69cecf..881271f0bc77a8a8a7d31daad9a8188b } diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082ff4e7adae 100644 +index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..613d412374b0ec465364565f9f445cc32385097a 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -146,6 +146,7 @@ import org.jetbrains.annotations.Contract; +@@ -148,6 +148,7 @@ import org.jetbrains.annotations.Contract; import org.slf4j.Logger; public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess, ScoreHolder, DataComponentGetter, ca.spottedleaf.moonrise.patches.chunk_system.entity.ChunkSystemEntity, ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity { // Paper - rewrite chunk system // Paper - optimise entity tracker @@ -1934,7 +1934,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f // CraftBukkit start private static final int CURRENT_LEVEL = 2; public boolean preserveMotion = true; // Paper - Fix Entity Teleportation and cancel velocity if teleported; keep initial motion on first snapTo -@@ -279,8 +280,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -280,8 +281,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public double xOld; public double yOld; public double zOld; @@ -1945,7 +1945,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f public int tickCount; private int remainingFireTicks; public boolean wasTouchingWater; -@@ -314,8 +316,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -315,8 +317,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public PortalProcessor portalProcess; public int portalCooldown; private boolean invulnerable; @@ -1956,7 +1956,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f private boolean hasGlowingTag; private final Set tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0}; -@@ -372,6 +374,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -371,6 +373,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public long activatedTick = Integer.MIN_VALUE; public boolean isTemporarilyActive; public long activatedImmunityTick = Integer.MIN_VALUE; @@ -1964,7 +1964,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f public void inactiveTick() { } -@@ -534,10 +537,39 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -533,10 +536,39 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Paper end - optimise entity tracker @@ -2004,7 +2004,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f this.position = Vec3.ZERO; this.blockPosition = BlockPos.ZERO; this.chunkPosition = ChunkPos.ZERO; -@@ -914,6 +946,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -911,6 +943,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage @@ -2012,7 +2012,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f this.onBelowWorld(); } } -@@ -1901,7 +1934,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1889,7 +1922,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean fireImmune() { @@ -2021,7 +2021,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f } public boolean causeFallDamage(double fallDistance, float damageMultiplier, DamageSource damageSource) { -@@ -2607,6 +2640,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2585,6 +2618,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess output.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -2033,7 +2033,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f } catch (Throwable var7) { CrashReport crashReport = CrashReport.forThrowable(var7, "Saving entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being saved"); -@@ -2727,6 +2765,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2705,6 +2743,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } freezeLocked = input.getBooleanOr("Paper.FreezeLock", false); // Paper end @@ -2043,7 +2043,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f } catch (Throwable var7) { CrashReport crashReport = CrashReport.forThrowable(var7, "Loading entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded"); -@@ -3005,6 +3046,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2983,6 +3024,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.isAlive() && this instanceof Leashable leashable2) { if (leashable2.getLeashHolder() == player) { if (!this.level().isClientSide()) { @@ -2051,7 +2051,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f // Paper start - EntityUnleashEvent if (!org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerUnleashEntityEvent( leashable2, player, hand, !player.hasInfiniteMaterials(), true -@@ -3300,6 +3342,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3278,6 +3320,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -2065,7 +2065,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3341,6 +3390,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3319,6 +3368,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -2080,7 +2080,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { this.passengers = ImmutableList.of(); } else { -@@ -3410,15 +3467,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3388,15 +3445,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Vec3.directionFromRotation(this.getRotationVector()); } @@ -2100,7 +2100,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f } } } -@@ -3620,7 +3680,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3601,7 +3661,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public int getMaxAirSupply() { @@ -2109,7 +2109,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f } public int getAirSupply() { -@@ -4167,7 +4227,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4155,7 +4215,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public boolean canUsePortal(boolean allowPassengers) { @@ -2118,7 +2118,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f } public boolean canTeleport(Level fromLevel, Level toLevel) { -@@ -4697,6 +4757,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4680,6 +4740,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Mth.lerp(partialTick, this.yRotO, this.yRot); } @@ -2131,7 +2131,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f // Paper start - optimise collisions public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { if (this.touchingUnloadedChunk()) { -@@ -5133,7 +5199,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5106,7 +5172,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { @@ -2140,7 +2140,7 @@ index 5d1f50b49a1d55268b716f6e6b91f82b9851ad57..7b371f70f1c05e75e32fa6357989082f } public void onExplosionHit(@Nullable Entity entity) { -@@ -5391,4 +5457,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5364,4 +5430,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition()); } // Paper end - Expose entity id counter @@ -2199,10 +2199,10 @@ index 15daba9062d54a5bdf335c3645a3227ccb5a8e06..1842cbe25cc0f9be937caf0a78e915bd public static final Predicate PLAYER_AFFECTS_SPAWNING = (entity) -> { return !entity.isSpectator() && entity.isAlive() && entity instanceof Player player && player.affectsSpawning; diff --git a/net/minecraft/world/entity/EntityType.java b/net/minecraft/world/entity/EntityType.java -index 388689c44cf63ade939e271d490051c9b3fe8034..e65b1818c49e1b7d04d5bcc912804c821f00bdbc 100644 +index 96e1f8f40a0af4350155f192ac2126b523c9f0f5..9950fccc0a708e701b81fcabc9e8f370e6d3a19d 100644 --- a/net/minecraft/world/entity/EntityType.java +++ b/net/minecraft/world/entity/EntityType.java -@@ -1106,6 +1106,16 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -1105,6 +1105,16 @@ public class EntityType implements FeatureElement, EntityTypeT return register(vanillaEntityId(key), builder); } @@ -2219,7 +2219,7 @@ index 388689c44cf63ade939e271d490051c9b3fe8034..e65b1818c49e1b7d04d5bcc912804c82 public static ResourceLocation getKey(EntityType entityType) { return BuiltInRegistries.ENTITY_TYPE.getKey(entityType); } -@@ -1336,6 +1346,16 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -1335,6 +1345,16 @@ public class EntityType implements FeatureElement, EntityTypeT return this.category; } @@ -2236,7 +2236,7 @@ index 388689c44cf63ade939e271d490051c9b3fe8034..e65b1818c49e1b7d04d5bcc912804c82 public String getDescriptionId() { return this.descriptionId; } -@@ -1395,7 +1415,11 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -1394,7 +1414,11 @@ public class EntityType implements FeatureElement, EntityTypeT entity.load(input); }, // Paper end - Don't fire sync event during generation @@ -2324,10 +2324,10 @@ index aab9adb8313c4b18279c7fd7500ef04bda09c6c1..86a694b94045b47f6e98c480645f7573 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf11527216c8f9173 100644 +index c3c3b7dfb01317c902687b7de192f8a5a910a565..a3b985cc454b2c62e7642f7eb05de590ecde9272 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -236,9 +236,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -238,9 +238,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected int noActionTime; public float lastHurt; public boolean jumping; @@ -2340,7 +2340,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 protected InterpolationHandler interpolation = new InterpolationHandler(this); protected double lerpYHeadRot; protected int lerpHeadSteps; -@@ -284,11 +284,13 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -286,11 +286,13 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API public int shieldBlockingDelay = this.level().paperConfig().misc.shieldBlockingDelay; // Paper - Make shield blocking delay configurable @@ -2355,7 +2355,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 this.craftAttributes = new org.bukkit.craftbukkit.attribute.CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - this.setHealth(this.getMaxHealth()) inlined and simplified to skip the instanceof check for Player, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, this.getMaxHealth()); -@@ -307,6 +309,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -309,6 +311,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin return new EntityEquipment(); } @@ -2364,7 +2364,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 public Brain getBrain() { return this.brain; } -@@ -362,6 +366,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -364,6 +368,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin .add(Attributes.CAMERA_DISTANCE) .add(Attributes.WAYPOINT_TRANSMIT_RANGE); } @@ -2372,7 +2372,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 @Override protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) { -@@ -443,6 +448,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -444,6 +449,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (d < 0.0) { double damagePerBlock = serverLevel1.getWorldBorder().getDamagePerBlock(); if (damagePerBlock > 0.0) { @@ -2385,7 +2385,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 this.hurtServer(serverLevel1, this.damageSources().outOfBorder(), Math.max(1, Mth.floor(-d * damagePerBlock))); } } -@@ -455,10 +466,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -456,10 +467,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin && (!flag || !((Player)this).getAbilities().invulnerable); if (flag1) { this.setAirSupply(this.decreaseAirSupply(this.getAirSupply())); @@ -2398,7 +2398,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 } } else if (this.getAirSupply() < this.getMaxAirSupply()) { this.setAirSupply(this.increaseAirSupply(this.getAirSupply())); -@@ -775,6 +786,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -779,6 +790,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.getSleepingPos().ifPresent(blockPos -> output.store("sleeping_pos", BlockPos.CODEC, blockPos)); DataResult> dataResult = this.brain.serializeStart(NbtOps.INSTANCE).map(tag -> new Dynamic<>(NbtOps.INSTANCE, tag)); dataResult.resultOrPartial(LOGGER::error).ifPresent(dynamic -> output.store("Brain", Codec.PASSTHROUGH, (Dynamic)dynamic)); @@ -2406,7 +2406,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 if (this.lastHurtByPlayer != null) { this.lastHurtByPlayer.store(output, "last_hurt_by_player"); output.putInt("last_hurt_by_player_memory_time", this.lastHurtByPlayerMemoryTime); -@@ -901,6 +913,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -905,6 +917,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } // Paper - The sleeping pos will always also set the actual pos, so a desync suggests something is wrong }, this::clearSleepingPos); input.read("Brain", Codec.PASSTHROUGH).ifPresent(dynamic -> this.brain = this.makeBrain((Dynamic)dynamic)); @@ -2414,29 +2414,30 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 this.lastHurtByPlayer = EntityReference.read(input, "last_hurt_by_player"); this.lastHurtByPlayerMemoryTime = input.getIntOr("last_hurt_by_player_memory_time", 0); this.lastHurtByMob = EntityReference.read(input, "last_hurt_by_mob"); -@@ -1035,16 +1048,31 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1039,15 +1052,33 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (lookingEntity != null) { - // Gale start - Petal - reduce skull ItemStack lookups for reduced visibility + ItemStack itemBySlot = this.getItemBySlot(EquipmentSlot.HEAD); EntityType type = lookingEntity.getType(); -- if (type == EntityType.SKELETON && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.SKELETON_SKULL) -- || type == EntityType.ZOMBIE && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.ZOMBIE_HEAD) -- || type == EntityType.PIGLIN && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.PIGLIN_HEAD) -- || type == EntityType.PIGLIN_BRUTE && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.PIGLIN_HEAD) -- || type == EntityType.CREEPER && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.CREEPER_HEAD)) { +- if (type == EntityType.SKELETON && itemBySlot.is(Items.SKELETON_SKULL) +- || type == EntityType.ZOMBIE && itemBySlot.is(Items.ZOMBIE_HEAD) +- || type == EntityType.PIGLIN && itemBySlot.is(Items.PIGLIN_HEAD) +- || type == EntityType.PIGLIN_BRUTE && itemBySlot.is(Items.PIGLIN_HEAD) +- || type == EntityType.CREEPER && itemBySlot.is(Items.CREEPER_HEAD)) { - d *= 0.5; -- } + // Purpur start - Mob head visibility percent + if (type == EntityType.SKELETON && itemBySlot.is(Items.SKELETON_SKULL)) { + d *= lookingEntity.level().purpurConfig.skeletonHeadVisibilityPercent; -+ } else if (type == EntityType.ZOMBIE && itemBySlot.is(Items.ZOMBIE_HEAD)) { -+ d *= lookingEntity.level().purpurConfig.zombieHeadVisibilityPercent; -+ } else if ((type == EntityType.PIGLIN || type == EntityType.PIGLIN_BRUTE) && itemBySlot.is(Items.PIGLIN_HEAD)) { -+ d *= lookingEntity.level().purpurConfig.piglinHeadVisibilityPercent; -+ } else if (type == EntityType.CREEPER && itemBySlot.is(Items.CREEPER_HEAD)) { -+ d *= lookingEntity.level().purpurConfig.creeperHeadVisibilityPercent; + } ++ else if (type == EntityType.ZOMBIE && itemBySlot.is(Items.ZOMBIE_HEAD)) { ++ d *= lookingEntity.level().purpurConfig.zombieHeadVisibilityPercent; ++ } ++ else if ((type == EntityType.PIGLIN || type == EntityType.PIGLIN_BRUTE) && itemBySlot.is(Items.PIGLIN_HEAD)) { ++ d *= lookingEntity.level().purpurConfig.piglinHeadVisibilityPercent; ++ } ++ else if (type == EntityType.CREEPER && itemBySlot.is(Items.CREEPER_HEAD)) { ++ d *= lookingEntity.level().purpurConfig.creeperHeadVisibilityPercent; + } + // Purpur end - Mob head visibility percent - // Gale end - Petal - reduce skull ItemStack lookups for reduced visibility } + // Purpur start - Configurable mob blindness @@ -2453,7 +2454,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 return d; } -@@ -1090,6 +1118,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1093,6 +1124,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin Iterator iterator = this.activeEffects.values().iterator(); while (iterator.hasNext()) { MobEffectInstance effect = iterator.next(); @@ -2461,7 +2462,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 EntityPotionEffectEvent event = CraftEventFactory.callEntityPotionEffectChangeEvent(this, effect, null, cause, EntityPotionEffectEvent.Action.CLEARED); if (event.isCancelled()) { continue; -@@ -1420,6 +1449,24 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1417,6 +1449,24 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.stopSleeping(); } @@ -2486,7 +2487,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 this.noActionTime = 0; if (amount < 0.0F) { amount = 0.0F; -@@ -1681,10 +1728,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1678,10 +1728,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin protected Player resolvePlayerResponsibleForDamage(DamageSource damageSource) { Entity entity = damageSource.getEntity(); if (entity instanceof Player player) { @@ -2499,7 +2500,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 } else { this.lastHurtByPlayer = null; this.lastHurtByPlayerMemoryTime = 0; -@@ -1735,6 +1782,18 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1732,6 +1782,18 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } } @@ -2518,7 +2519,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 final org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; final EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemStack == null); -@@ -1880,7 +1939,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1877,7 +1939,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.level() instanceof ServerLevel serverLevel) { boolean var6 = false; if (this.dead && entitySource instanceof WitherBoss) { // Paper @@ -2527,7 +2528,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 BlockPos blockPos = this.blockPosition(); BlockState blockState = Blocks.WITHER_ROSE.defaultBlockState(); if (this.level().getBlockState(blockPos).isAir() && blockState.canSurvive(this.level(), blockPos)) { -@@ -1910,6 +1969,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1907,6 +1969,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin boolean flag = this.lastHurtByPlayerMemoryTime > 0; this.dropEquipment(level); // CraftBukkit - from below if (this.shouldDropLoot() && level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { @@ -2535,7 +2536,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 this.dropFromLootTable(level, damageSource, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1918,6 +1978,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1915,6 +1978,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin // Paper end this.dropCustomDeathLoot(level, damageSource, flag); this.clearEquipmentSlots = prev; // Paper @@ -2543,7 +2544,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 } // CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment -@@ -3010,6 +3071,21 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -2969,6 +3033,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.5)); } else { @@ -2561,11 +2562,10 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 + return; + } + // Purpur end - Ridables -+ this.moveRelative(amount, relative); this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.91F)); -@@ -3150,6 +3226,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3109,6 +3187,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin float f = (float)(d * 10.0 - 3.0); if (f > 0.0F) { this.playSound(this.getFallDamageSound((int)f), 1.0F, 1.0F); @@ -2573,9 +2573,9 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 this.hurt(this.damageSources().flyIntoWall(), f); } } -@@ -3593,8 +3670,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin - +@@ -3571,8 +3650,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.pushEntities(); + profilerFiller.pop(); // Paper start - Add EntityMoveEvent - if (((ServerLevel) this.level()).hasEntityMoveEvent && !(this instanceof Player)) { - if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { @@ -2586,7 +2586,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone()); -@@ -3604,11 +3683,52 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3582,11 +3663,52 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.absSnapTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -2639,7 +2639,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 } protected void applyInput() { -@@ -3642,7 +3762,18 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3620,7 +3742,18 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin .filter(equipmentSlot1 -> canGlideUsing(this.getItemBySlot(equipmentSlot1), equipmentSlot1)) .toList(); EquipmentSlot equipmentSlot = Util.getRandom(list, this.random); @@ -2659,7 +2659,7 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 } this.gameEvent(GameEvent.ELYTRA_GLIDE); -@@ -4540,6 +4671,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -4518,6 +4651,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType()); } @@ -2673,10 +2673,10 @@ index 66e248f348731318590ebd3bd070b7fddf5f0379..fa5010a42970741b930fddedf1152721 return slot != EquipmentSlot.HEAD && slot != EquipmentSlot.MAINHAND && slot != EquipmentSlot.OFFHAND ? SlotAccess.forEquipmentSlot(entity, slot, itemStack -> itemStack.isEmpty() || entity.getEquipmentSlotForItem(itemStack) == slot) diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13bdac59c66 100644 +index e0b3cb2b2694768803ed347a1026b881fd624951..035eb50335daa88679672cba550ed87ac3fa5873 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -138,13 +138,14 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -140,13 +140,14 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab private int homeRadius = -1; public boolean aware = true; // CraftBukkit public net.kyori.adventure.util.TriState despawnInPeacefulOverride = net.kyori.adventure.util.TriState.NOT_SET; // Paper - allow changing despawnInPeaceful @@ -2693,7 +2693,7 @@ index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13b this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(level); -@@ -283,6 +284,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -285,6 +286,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab target = null; } } @@ -2701,10 +2701,10 @@ index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13b this.target = target; return true; // CraftBukkit end -@@ -322,8 +324,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab - this.resetAmbientSoundTime(); - this.playAmbientSound(); +@@ -328,8 +330,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } + + profilerFiller.pop(); + incrementTicksSinceLastInteraction(); // Purpur - Entity lifespan } @@ -2730,7 +2730,7 @@ index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13b @Override protected void playHurtSound(DamageSource source) { this.resetAmbientSoundTime(); -@@ -427,6 +449,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -433,6 +455,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab output.putString("Paper.DespawnInPeacefulOverride", this.despawnInPeacefulOverride.name()); } // Paper end - allow changing despawnInPeaceful @@ -2738,7 +2738,7 @@ index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13b } @Override -@@ -455,6 +478,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -461,6 +484,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.setNoAi(input.getBooleanOr("NoAI", false)); this.aware = input.getBooleanOr("Bukkit.Aware", true); // CraftBukkit this.despawnInPeacefulOverride = input.read("Paper.DespawnInPeacefulOverride", io.papermc.paper.util.PaperCodecs.TRI_STATE_CODEC).orElse(net.kyori.adventure.util.TriState.NOT_SET); // Paper - allow changing despawnInPeaceful @@ -2746,7 +2746,7 @@ index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13b } @Override -@@ -507,7 +531,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -515,7 +539,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab && this.canPickUpLoot() && this.isAlive() && !this.dead @@ -2755,7 +2755,7 @@ index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13b Vec3i pickupReach = this.getPickupReach(); for (ItemEntity itemEntity : this.level() -@@ -1170,7 +1194,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1201,7 +1225,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab ); } @@ -2764,7 +2764,7 @@ index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13b return spawnGroupData; } -@@ -1258,7 +1282,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1289,7 +1313,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -2773,7 +2773,7 @@ index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13b } public boolean isWithinHome() { -@@ -1507,6 +1531,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1538,6 +1562,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.playAttackSound(); } @@ -2781,36 +2781,29 @@ index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13b return flag; } -@@ -1518,26 +1543,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab - private net.minecraft.world.phys.Vec3 cached_position; - // Gale end - JettPack - optimize sun burn tick - cache eye blockpos +@@ -1545,19 +1570,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab + } + public boolean isSunBurnTick() { - if (this.level().isBrightOutside() && !this.level().isClientSide) { -- // Gale start - JettPack - optimize sun burn tick - optimizations and cache eye blockpos -- if (this.cached_position != this.position) { -- this.cached_eye_blockpos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); -- this.cached_position = this.position; -- } -- -- float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(cached_eye_blockpos); // Pass BlockPos to getBrightness -- -- // Check brightness first -- if (lightLevelDependentMagicValue <= 0.5F) return false; -- if (this.random.nextFloat() * 30.0F >= (lightLevelDependentMagicValue - 0.4F) * 2.0F) return false; -- // Gale end - JettPack - optimize sun burn tick - optimizations and cache eye blockpos -- +- float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(); +- BlockPos blockPos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); - boolean flag = this.isInWaterOrRain() || this.isInPowderSnow || this.wasInPowderSnow; -- -- return !flag && this.level().canSeeSky(this.cached_eye_blockpos); // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos +- if (lightLevelDependentMagicValue > 0.5F +- && this.random.nextFloat() * 30.0F < (lightLevelDependentMagicValue - 0.4F) * 2.0F +- && !flag +- && this.level().canSeeSky(blockPos)) { +- return true; +- } - } - -- return false; // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos - diff on change +- return false; + // Purpur - implemented in Entity - API for any mob to burn daylight + return super.isSunBurnTick(); } @Override -@@ -1585,4 +1592,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1605,4 +1619,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.getNavigation().updatePathfinderMaxVisitedNodes(); } } @@ -2870,12 +2863,12 @@ index 37c6567701fe10011a364b8def9ebf3391376592..706bdb81f831ee79afb8c32feba1a13b + // Purpur end - Ridables } diff --git a/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index 58d8424262db14b2dca0b2c5a40748b6c0c18e83..0ac398b8b10aae5e67a797b2991c66874003f282 100644 +index fdb02fc40579866167e8cc9bcefbd961588b53a6..7dd8c1c8e27410854ce1ee90defc607c2710b5a2 100644 --- a/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/net/minecraft/world/entity/ai/attributes/AttributeMap.java -@@ -20,14 +20,21 @@ public class AttributeMap { - private final Set attributesToUpdate = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>(0); - // Gale end - Lithium - replace AI attributes with optimized collections +@@ -18,14 +18,21 @@ public class AttributeMap { + private final Set attributesToSync = new ObjectOpenHashSet<>(); + private final Set attributesToUpdate = new ObjectOpenHashSet<>(); private final AttributeSupplier supplier; + private final net.minecraft.world.entity.LivingEntity entity; // Purpur - Ridables @@ -2897,7 +2890,7 @@ index 58d8424262db14b2dca0b2c5a40748b6c0c18e83..0ac398b8b10aae5e67a797b2991c6687 this.attributesToSync.add(instance); } } -@@ -41,7 +48,7 @@ public class AttributeMap { +@@ -39,7 +46,7 @@ public class AttributeMap { } public Collection getSyncableAttributes() { @@ -3296,13 +3289,13 @@ index 066faa704338c573472381e1ebd063e0d52aaaa4..1f96fd5085bacb4c584576c7cb9f51e7 // Paper end - optimise POI access if (path != null && path.canReach()) { diff --git a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -index a608092a6e72b9be92624e36dbf19539985cd9d5..60ec389615cfcad388ed37b8d3ee04e87db36755 100644 +index f0583076ef62189508a392a76c3fb6b741bbdde9..dc4a9ddb8479e9d0c4895b19d7d677cdd8ad3faa 100644 --- a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +++ b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -@@ -29,6 +29,13 @@ public class SecondaryPoiSensor extends Sensor { - return; - } - // Gale end - Lithium - skip secondary POI sensor if absent +@@ -22,6 +22,13 @@ public class SecondaryPoiSensor extends Sensor { + + @Override + protected void doTick(ServerLevel level, Villager entity) { + // Purpur start - Option for Villager Clerics to farm Nether Wart - make sure clerics don't wander to soul sand when the option is off + Brain brain = entity.getBrain(); + if (!level.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().profession().is(net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { @@ -3313,7 +3306,7 @@ index a608092a6e72b9be92624e36dbf19539985cd9d5..60ec389615cfcad388ed37b8d3ee04e8 ResourceKey resourceKey = level.dimension(); BlockPos blockPos = entity.blockPosition(); List list = Lists.newArrayList(); -@@ -45,7 +52,7 @@ public class SecondaryPoiSensor extends Sensor { +@@ -38,7 +45,7 @@ public class SecondaryPoiSensor extends Sensor { } } @@ -3323,7 +3316,7 @@ index a608092a6e72b9be92624e36dbf19539985cd9d5..60ec389615cfcad388ed37b8d3ee04e8 brain.setMemory(MemoryModuleType.SECONDARY_JOB_SITE, list); } else { diff --git a/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/net/minecraft/world/entity/ai/targeting/TargetingConditions.java -index 17a08a3af468093668a41f154c2beb69c6617efa..398a97a72dca785204f6b7b8fc4abe5cd64de51e 100644 +index 2f8920d8ee765d057a22d76f24f7d7dc1b0b17ca..6f0fcaeaba2fec2ad944d63550f0c3e29bd9133c 100644 --- a/net/minecraft/world/entity/ai/targeting/TargetingConditions.java +++ b/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -64,6 +64,10 @@ public class TargetingConditions { @@ -3338,7 +3331,7 @@ index 17a08a3af468093668a41f154c2beb69c6617efa..398a97a72dca785204f6b7b8fc4abe5c if (entity == null) { if (this.isCombat && (!target.canBeSeenAsEnemy() || level.getDifficulty() == Difficulty.PEACEFUL)) { diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java -index a6487b63a277f7ca9681924850718f1dced746b1..59a849f5471a94bfbf364fe169d1a27a402629bd 100644 +index 912b099a51269f92f250c7d6094ad41817749f93..e54a956caa33f3ed343c5d160b1c763d6b981f50 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java @@ -44,11 +44,87 @@ public class Bat extends AmbientCreature { @@ -3462,14 +3455,14 @@ index a6487b63a277f7ca9681924850718f1dced746b1..59a849f5471a94bfbf364fe169d1a27a i = 7; } else if (randomSource.nextBoolean()) { return false; -@@ -278,6 +362,7 @@ public class Bat extends AmbientCreature { - */ - private static long nextHalloweenEnd = 0; +@@ -245,6 +329,7 @@ public class Bat extends AmbientCreature { + } + } + public static boolean isHalloweenSeason(Level level) { return level.purpurConfig.forceHalloweenSeason || isHalloween(); } // Purpur - Halloween options and optimizations private static boolean isHalloween() { - long currentEpochMillis = System.currentTimeMillis(); - + LocalDate localDate = LocalDate.now(); + int i = localDate.get(ChronoField.DAY_OF_MONTH); diff --git a/net/minecraft/world/entity/animal/AbstractCow.java b/net/minecraft/world/entity/animal/AbstractCow.java index dd8ea03ba823996a5c97562e357650ab34d0e32e..61e7300bbf272398b2faebf5e537d9c2ddedc6d6 100644 --- a/net/minecraft/world/entity/animal/AbstractCow.java @@ -4611,10 +4604,10 @@ index 517c546cfc8eca2191df57289e6a22ac64fc867c..8964bb5098c0dc36741af3656af6bc0b } } diff --git a/net/minecraft/world/entity/animal/HappyGhast.java b/net/minecraft/world/entity/animal/HappyGhast.java -index f07dcf7d45b1b717faeae0c4129fb00a22fb7d57..9763a5e24e0fed9b49b6ac59911f6c9f8e893db5 100644 +index 272f57aca640e045efca64dd018b221335c667ee..fb37669b4d66bb853eabf2d15a369d7ad5a2dbb9 100644 --- a/net/minecraft/world/entity/animal/HappyGhast.java +++ b/net/minecraft/world/entity/animal/HappyGhast.java -@@ -124,6 +124,47 @@ public class HappyGhast extends Animal { +@@ -126,6 +126,47 @@ public class HappyGhast extends Animal { this.removeAllGoals(goal -> true); } @@ -4662,7 +4655,7 @@ index f07dcf7d45b1b717faeae0c4129fb00a22fb7d57..9763a5e24e0fed9b49b6ac59911f6c9f @Override protected void ageBoundaryReached() { if (this.isBaby()) { -@@ -147,7 +188,7 @@ public class HappyGhast extends Animal { +@@ -149,7 +190,7 @@ public class HappyGhast extends Animal { @Override protected float sanitizeScale(float scale) { @@ -6148,10 +6141,10 @@ index 8738424b92726f45de2c166a063d46e1071e8b29..9bdc1f10e3b40672449ad166f130ecab this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0, this.turtle.getSpeed() * d1 * 0.1, 0.0)); } diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index 69500fa0b207fc3d5b1bc2bd665fa39f6725d23d..7127d8e5fff81be017f0aa04606cb8404ad7b2fd 100644 +index b7b964bd4e2d611a3e48ece072d5787193077a92..f372d8b21282e8fdd00dd19eb14ce6ee45b358b0 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -112,10 +112,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -114,10 +114,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS private float spinningAnimationTicks; private float spinningAnimationTicks0; public boolean forceDancing = false; // CraftBukkit @@ -6176,7 +6169,7 @@ index 69500fa0b207fc3d5b1bc2bd665fa39f6725d23d..7127d8e5fff81be017f0aa04606cb840 this.setCanPickUpLoot(this.canPickUpLoot()); this.vibrationUser = new Allay.VibrationUser(); this.vibrationData = new VibrationSystem.Data(); -@@ -131,6 +144,36 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -133,6 +146,36 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS } // CraftBukkit end @@ -6213,19 +6206,19 @@ index 69500fa0b207fc3d5b1bc2bd665fa39f6725d23d..7127d8e5fff81be017f0aa04606cb840 @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -225,6 +268,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS - private int behaviorTick = 0; // Pufferfish - @Override +@@ -228,6 +271,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS protected void customServerAiStep(ServerLevel level) { -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("allayBrain"); ++ if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - AllayAi.updateActivity(this); + profilerFiller.pop(); + profilerFiller.push("allayActivityUpdate"); diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index ee2c6c86631ba50a4e8503131c678596bc2c0363..6fbeaff7178a21338920d6738767033260b7a726 100644 +index c1798db2972c8f2a343cf6e16fd9354ff212d906..0da5c51c4830cf1826261f4d8877303b34c6cb87 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -@@ -80,6 +80,38 @@ public class Armadillo extends Animal { +@@ -82,6 +82,38 @@ public class Armadillo extends Animal { return Animal.createAnimalAttributes().add(Attributes.MAX_HEALTH, 12.0).add(Attributes.MOVEMENT_SPEED, 0.14); } @@ -6265,10 +6258,10 @@ index ee2c6c86631ba50a4e8503131c678596bc2c0363..6fbeaff7178a21338920d67387670332 protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 3475ecbd95fac6c6b6e792a23cb15cdb3395985f..02db38fa315ecb9d5bdba74848012710106b662e 100644 +index b0467750dab4c6f411fd2f318009d25f83d94bc0..40e4cc14f10bd465ee7bee124e7e194c74c070b4 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -120,6 +120,52 @@ public class Axolotl extends Animal implements Bucketable { +@@ -122,6 +122,52 @@ public class Axolotl extends Animal implements Bucketable { this.lookControl = new Axolotl.AxolotlLookControl(this, 20); } @@ -6321,15 +6314,15 @@ index 3475ecbd95fac6c6b6e792a23cb15cdb3395985f..02db38fa315ecb9d5bdba74848012710 @Override public float getWalkTargetValue(BlockPos pos, LevelReader level) { return 0.0F; -@@ -328,6 +374,7 @@ public class Axolotl extends Animal implements Bucketable { - private int behaviorTick = 0; // Pufferfish - @Override +@@ -331,6 +377,7 @@ public class Axolotl extends Animal implements Bucketable { protected void customServerAiStep(ServerLevel level) { -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("axolotlBrain"); ++ if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - AxolotlAi.updateActivity(this); -@@ -575,23 +622,31 @@ public class Axolotl extends Animal implements Bucketable { + profilerFiller.pop(); + profilerFiller.push("axolotlActivityUpdate"); +@@ -580,23 +627,31 @@ public class Axolotl extends Animal implements Bucketable { } @Override @@ -6364,10 +6357,10 @@ index 3475ecbd95fac6c6b6e792a23cb15cdb3395985f..02db38fa315ecb9d5bdba74848012710 super.tick(); } diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java -index adc336c6cec601b8855c1013adf1eebf018597f0..949b6c563658e6e46ac5842d6f088ecae6d4cd0c 100644 +index 757b63ee059c95e673a098706b4ee7ab4fc21f70..0c698241b10f84afb17ae10d3661a90bc62ec243 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java -@@ -89,6 +89,20 @@ public class Camel extends AbstractHorse { +@@ -91,6 +91,20 @@ public class Camel extends AbstractHorse { groundPathNavigation.setCanWalkOverFences(true); } @@ -6388,7 +6381,7 @@ index adc336c6cec601b8855c1013adf1eebf018597f0..949b6c563658e6e46ac5842d6f088eca @Override protected void addAdditionalSaveData(ValueOutput output) { super.addAdditionalSaveData(output); -@@ -322,6 +336,23 @@ public class Camel extends AbstractHorse { +@@ -329,6 +343,23 @@ public class Camel extends AbstractHorse { return this.dashCooldown; } @@ -6413,10 +6406,10 @@ index adc336c6cec601b8855c1013adf1eebf018597f0..949b6c563658e6e46ac5842d6f088eca public SoundEvent getAmbientSound() { return SoundEvents.CAMEL_AMBIENT; diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index f5c9ef8909f3852fc7a203265ae057232fa403ad..c4db078db0b7bb2bd8f6757a8bd13d60a7a4fa14 100644 +index 66f503e045ccb0985ec718b39be07eea538fad8d..8d6da6ce15c266c7b4b9763a37516d2b160f1b85 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java -@@ -104,6 +104,8 @@ public class Frog extends Animal { +@@ -106,6 +106,8 @@ public class Frog extends Animal { public final AnimationState croakAnimationState = new AnimationState(); public final AnimationState tongueAnimationState = new AnimationState(); public final AnimationState swimIdleAnimationState = new AnimationState(); @@ -6425,7 +6418,7 @@ index f5c9ef8909f3852fc7a203265ae057232fa403ad..c4db078db0b7bb2bd8f6757a8bd13d60 public Frog(EntityType entityType, Level level) { super(entityType, level); -@@ -111,7 +113,62 @@ public class Frog extends Animal { +@@ -113,7 +115,62 @@ public class Frog extends Animal { this.setPathfindingMalus(PathType.WATER, 4.0F); this.setPathfindingMalus(PathType.TRAPDOOR, -1.0F); this.moveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 0.1F, true); @@ -6488,15 +6481,15 @@ index f5c9ef8909f3852fc7a203265ae057232fa403ad..c4db078db0b7bb2bd8f6757a8bd13d60 @Override protected Brain.Provider brainProvider() { -@@ -203,6 +260,7 @@ public class Frog extends Animal { - private int behaviorTick = 0; // Pufferfish - @Override +@@ -206,6 +263,7 @@ public class Frog extends Animal { protected void customServerAiStep(ServerLevel level) { -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("frogBrain"); ++ if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - FrogAi.updateActivity(this); -@@ -385,7 +443,7 @@ public class Frog extends Animal { + profilerFiller.pop(); + profilerFiller.push("frogActivityUpdate"); +@@ -390,7 +448,7 @@ public class Frog extends Animal { return level.getBlockState(pos.below()).is(BlockTags.FROGS_SPAWNABLE_ON) && isBrightEnoughToSpawn(level, pos); } @@ -6506,10 +6499,10 @@ index f5c9ef8909f3852fc7a203265ae057232fa403ad..c4db078db0b7bb2bd8f6757a8bd13d60 super(mob); } diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java -index 5392cb211a3dc841ab38710a4ef688bde7fbe067..a3858465569c40fcfc7c8c4c4735335ac83cb078 100644 +index 17f58246849ed407821a987b200cc765eb7943f9..40b57095812fc1dd2ed14da4933fc949afd855b2 100644 --- a/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/net/minecraft/world/entity/animal/frog/Tadpole.java -@@ -64,13 +64,50 @@ public class Tadpole extends AbstractFish { +@@ -66,13 +66,50 @@ public class Tadpole extends AbstractFish { MemoryModuleType.IS_PANICKING ); public boolean ageLocked; // Paper @@ -6561,19 +6554,19 @@ index 5392cb211a3dc841ab38710a4ef688bde7fbe067..a3858465569c40fcfc7c8c4c4735335a @Override protected PathNavigation createNavigation(Level level) { return new WaterBoundPathNavigation(this, level); -@@ -99,6 +136,7 @@ public class Tadpole extends AbstractFish { - private int behaviorTick = 0; // Pufferfish - @Override +@@ -102,6 +139,7 @@ public class Tadpole extends AbstractFish { protected void customServerAiStep(ServerLevel level) { -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("tadpoleBrain"); ++ if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - TadpoleAi.updateActivity(this); + profilerFiller.pop(); + profilerFiller.push("tadpoleActivityUpdate"); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 2a72d7f422c340dabef11a6dc680358207bee637..11b020704a673c69bd2d4ab6313ea32e8e97cc23 100644 +index 75af1b92a0a60cffa3317d83bd599a3d4d26f93c..979befb6a51c855e439d7576db57abf1143731be 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -113,6 +113,44 @@ public class Goat extends Animal { +@@ -115,6 +115,44 @@ public class Goat extends Animal { .orElseGet(() -> new ItemStack(Items.GOAT_HORN)); } @@ -6618,15 +6611,15 @@ index 2a72d7f422c340dabef11a6dc680358207bee637..11b020704a673c69bd2d4ab6313ea32e @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -189,6 +227,7 @@ public class Goat extends Animal { - private int behaviorTick = 0; // Pufferfish - @Override +@@ -192,6 +230,7 @@ public class Goat extends Animal { protected void customServerAiStep(ServerLevel level) { -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("goatBrain"); ++ if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - GoatAi.updateActivity(this); -@@ -391,6 +430,7 @@ public class Goat extends Animal { + profilerFiller.pop(); + profilerFiller.push("goatActivityUpdate"); +@@ -396,6 +435,7 @@ public class Goat extends Animal { // Paper start - Goat ram API public void ram(net.minecraft.world.entity.LivingEntity entity) { @@ -7305,10 +7298,10 @@ index 4e4887cd2c6d6d22966395d68ed59da090f609a3..500c87f5f7b2eda637103125d6e541f7 this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.1, stack -> stack.is(ItemTags.SHEEP_FOOD), false)); diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 05d269b51715a71fa653900e7187b07d001afdb7..a762fc8a4616c4e48e11accdca2129fd47f300e6 100644 +index 6a9f31c1f39cc14ad7b5ae3af85908bc7a4caae4..745c821facbbf0e9641e371bb26a8d6abde7a813 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -@@ -87,6 +87,38 @@ public class Sniffer extends Animal { +@@ -89,6 +89,38 @@ public class Sniffer extends Animal { this.setPathfindingMalus(PathType.DAMAGE_CAUTIOUS, -1.0F); } @@ -7347,6 +7340,14 @@ index 05d269b51715a71fa653900e7187b07d001afdb7..a762fc8a4616c4e48e11accdca2129fd @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); +@@ -467,6 +499,7 @@ public class Sniffer extends Animal { + protected void customServerAiStep(ServerLevel level) { + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("snifferBrain"); ++ if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider + this.getBrain().tick(level, this); + profilerFiller.popPush("snifferActivityUpdate"); + SnifferAi.updateActivity(this); diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java index dca01e7e6af74bc6e26d4968ccdf0c34f8707b94..7e7cb9db1c84bdb173b444bec90663a93fb3b549 100644 --- a/net/minecraft/world/entity/animal/wolf/Wolf.java @@ -8195,7 +8196,7 @@ index 030721328b05526c3f56d9875859ee8860a1d36b..e3c34d5f00ce64b3c08b10cfcb3dd14e } diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java -index 9952e84dd94b8773c5ba8fcc4526e7714ebc2136..95d835ce4c733cbea457427a0d065c05a59704d9 100644 +index 5ee368580d878a3845349c3d50cc0dc549c42cab..83fdd22eeb141079e05018ebf5cef70e7eb78726 100644 --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java @@ -91,10 +91,13 @@ public class ArmorStand extends LivingEntity { @@ -8282,7 +8283,7 @@ index cc34cadac8896a5f546d0879e795fea08d0c3f98..26a08b16de2318d5080be59a29c5f11e } } diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java -index fcb1f6806908eb66592dc52f2b57286498cf7032..7dc97fccfd329253e0f6532d1cc2c06264674e15 100644 +index 51804b611f469f2ab53e455e8c633b867b00cc88..d650d4f34fde0682ab76360408f7ff6a7d4b4c3a 100644 --- a/net/minecraft/world/entity/item/ItemEntity.java +++ b/net/minecraft/world/entity/item/ItemEntity.java @@ -56,6 +56,12 @@ public class ItemEntity extends Entity implements TraceableEntity { @@ -8298,7 +8299,7 @@ index fcb1f6806908eb66592dc52f2b57286498cf7032..7dc97fccfd329253e0f6532d1cc2c062 public ItemEntity(EntityType entityType, Level level) { super(entityType, level); -@@ -370,7 +376,16 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -342,7 +348,16 @@ public class ItemEntity extends Entity implements TraceableEntity { @Override public final boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) { @@ -8316,7 +8317,7 @@ index fcb1f6806908eb66592dc52f2b57286498cf7032..7dc97fccfd329253e0f6532d1cc2c062 return false; } else if (!level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && damageSource.getEntity() instanceof Mob) { return false; -@@ -549,6 +564,12 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -521,6 +536,12 @@ public class ItemEntity extends Entity implements TraceableEntity { public void setItem(ItemStack stack) { this.getEntityData().set(DATA_ITEM, stack); this.despawnRate = this.level().paperConfig().entities.spawning.altItemDespawnRate.enabled ? this.level().paperConfig().entities.spawning.altItemDespawnRate.items.getOrDefault(stack.getItem(), this.level().spigotConfig.itemDespawnRate) : this.level().spigotConfig.itemDespawnRate; // Paper - Alternative item-despawn-rate @@ -8367,7 +8368,7 @@ index 17d54d38dcec39eefeb989cd576cc640a36e82f5..ef070f8a9ab3a4676e2141f7c0bc20a0 + // Purpur end - Shears can defuse TNT } diff --git a/net/minecraft/world/entity/monster/AbstractSkeleton.java b/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 894a3d988d0530d42d3a282b61cdb445a0f820ad..482de769f1b1fc0eac176cbc41a96f639dcc2d2d 100644 +index 894a3d988d0530d42d3a282b61cdb445a0f820ad..53ab51ffa5dd7d30a25f17dea0d9106bf30b49ba 100644 --- a/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -64,21 +64,24 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -8442,7 +8443,7 @@ index 894a3d988d0530d42d3a282b61cdb445a0f820ad..482de769f1b1fc0eac176cbc41a96f63 if (this.level() instanceof ServerLevel serverLevel) { Projectile.Delayed delayedEntity = Projectile.spawnProjectileUsingShootDelayed( // Paper - delayed - arrow, serverLevel, projectile, d, d1 + squareRoot * 0.2F, d2, 1.6F, 14 - serverLevel.getDifficulty().getId() * 4 -+ arrow, serverLevel, projectile, d, d1 + squareRoot * 0.2F, d2, 1.6F, serverLevel.purpurConfig.skeletonBowAccuracyMap.getOrDefault(serverLevel.getDifficulty().getId(), (float) (14 - serverLevel.getDifficulty().getId() * 4)) // Purpur - skeleton bow accuracy option ++ arrow, serverLevel, projectile, d, d1 + squareRoot * 0.2F, d2, 1.6F, serverLevel.purpurConfig.skeletonBowAccuracyMap.getOrDefault(serverLevel.getDifficulty().getId(), (float) (14 - serverLevel.getDifficulty().getId() * 4)) // Purpur - skeleton bow accuracy option ); // Paper start - call EntityShootBowEvent @@ -9027,7 +9028,7 @@ index 7eef05b988d52391ab061382fd8898705c705e03..ab1c050ff326a072e817a05958b8f4ec return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.3F).add(Attributes.ATTACK_DAMAGE, 8.0).add(Attributes.MAX_HEALTH, 80.0); } diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java -index 9b0235c50426accde002cbb0a09a992f13b05cd7..58887b2cc931892f96793edd7a7d1db22cb8686c 100644 +index 4edd94ac765d2ab107612504b67e6e07da609313..fcdb3ee493e65bf002e78862f00061336e731ede 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -86,12 +86,45 @@ public class EnderMan extends Monster implements NeutralMob { @@ -9113,7 +9114,7 @@ index 9b0235c50426accde002cbb0a09a992f13b05cd7..58887b2cc931892f96793edd7a7d1db2 float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(); if (lightLevelDependentMagicValue > 0.5F && level.canSeeSky(this.blockPosition()) -@@ -380,6 +414,8 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -372,6 +406,8 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) { if (this.isInvulnerableTo(level, damageSource)) { return false; @@ -9122,7 +9123,7 @@ index 9b0235c50426accde002cbb0a09a992f13b05cd7..58887b2cc931892f96793edd7a7d1db2 } else { AbstractThrownPotion abstractThrownPotion1 = damageSource.getDirectEntity() instanceof AbstractThrownPotion abstractThrownPotion ? abstractThrownPotion -@@ -396,6 +432,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -388,6 +424,7 @@ public class EnderMan extends Monster implements NeutralMob { } else { boolean flag = abstractThrownPotion1 != null && this.hurtWithCleanWater(level, damageSource, abstractThrownPotion1, amount); @@ -9130,7 +9131,7 @@ index 9b0235c50426accde002cbb0a09a992f13b05cd7..58887b2cc931892f96793edd7a7d1db2 if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper - EndermanEscapeEvent for (int i = 0; i < 64; i++) { if (this.teleport()) { -@@ -439,7 +476,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -431,7 +468,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean requiresCustomPersistence() { @@ -9139,7 +9140,7 @@ index 9b0235c50426accde002cbb0a09a992f13b05cd7..58887b2cc931892f96793edd7a7d1db2 } static class EndermanFreezeWhenLookedAt extends Goal { -@@ -483,8 +520,9 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -475,8 +512,9 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { @@ -9150,7 +9151,7 @@ index 9b0235c50426accde002cbb0a09a992f13b05cd7..58887b2cc931892f96793edd7a7d1db2 && this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0; } -@@ -632,8 +670,9 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -624,8 +662,9 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { @@ -9895,10 +9896,10 @@ index 5ef9566b16a4d0300ee45a993c46e734db156416..04d5910d736dee2a88a2602f4a984954 return false; } else { diff --git a/net/minecraft/world/entity/monster/Phantom.java b/net/minecraft/world/entity/monster/Phantom.java -index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f90da75181 100644 +index 666d50b738622d26cc15ccc3c11414490296abf6..08ae6d0cab1f15c9c3dc02d7eaa68bb8a57b384f 100644 --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -49,19 +49,110 @@ public class Phantom extends Mob implements Enemy { +@@ -49,19 +49,111 @@ public class Phantom extends Mob implements Enemy { @Nullable public BlockPos anchorPoint; Phantom.AttackPhase attackPhase = Phantom.AttackPhase.CIRCLE; @@ -9991,6 +9992,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 + } + // Purpur end - Toggle for water sensitive mob damage + ++ //private boolean shouldBurnInDay = true; // Purpur - moved to LivingEntity; keep methods for ABI compatibility - API for any mob to burn daylight + // Purpur start - API for any mob to burn daylight + public boolean shouldBurnInDay() { + boolean burnFromDaylight = this.shouldBurnInDay && this.level().purpurConfig.phantomBurnInDaylight; @@ -10010,7 +10012,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % TICKS_PER_FLAP == 0; -@@ -74,9 +165,17 @@ public class Phantom extends Mob implements Enemy { +@@ -74,9 +166,17 @@ public class Phantom extends Mob implements Enemy { @Override protected void registerGoals() { @@ -10031,7 +10033,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -92,7 +191,11 @@ public class Phantom extends Mob implements Enemy { +@@ -92,7 +192,11 @@ public class Phantom extends Mob implements Enemy { private void updatePhantomSizeInfo() { this.refreshDimensions(); @@ -10044,7 +10046,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 } public int getPhantomSize() { -@@ -117,6 +220,23 @@ public class Phantom extends Mob implements Enemy { +@@ -117,6 +221,23 @@ public class Phantom extends Mob implements Enemy { return true; } @@ -10068,7 +10070,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 @Override public void tick() { super.tick(); -@@ -148,10 +268,7 @@ public class Phantom extends Mob implements Enemy { +@@ -148,10 +269,7 @@ public class Phantom extends Mob implements Enemy { @Override public void aiStep() { @@ -10080,7 +10082,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 super.aiStep(); } -@@ -167,6 +284,15 @@ public class Phantom extends Mob implements Enemy { +@@ -167,6 +285,15 @@ public class Phantom extends Mob implements Enemy { @Override public void travel(Vec3 travelVector) { this.travelFlying(travelVector, 0.2F); @@ -10096,7 +10098,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 } @Override -@@ -174,7 +300,11 @@ public class Phantom extends Mob implements Enemy { +@@ -174,7 +301,11 @@ public class Phantom extends Mob implements Enemy { ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData ) { this.anchorPoint = this.blockPosition().above(5); @@ -10109,7 +10111,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); } -@@ -185,7 +315,7 @@ public class Phantom extends Mob implements Enemy { +@@ -185,7 +316,7 @@ public class Phantom extends Mob implements Enemy { this.setPhantomSize(input.getIntOr("size", 0)); // Paper start this.spawningEntity = input.read("Paper.SpawningEntity", net.minecraft.core.UUIDUtil.CODEC).orElse(null); @@ -10118,7 +10120,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 // Paper end } -@@ -196,7 +326,7 @@ public class Phantom extends Mob implements Enemy { +@@ -196,7 +327,7 @@ public class Phantom extends Mob implements Enemy { output.putInt("size", this.getPhantomSize()); // Paper start output.storeNullable("Paper.SpawningEntity", net.minecraft.core.UUIDUtil.CODEC, this.spawningEntity); @@ -10127,7 +10129,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 // Paper end } -@@ -266,6 +396,7 @@ public class Phantom extends Mob implements Enemy { +@@ -266,6 +397,7 @@ public class Phantom extends Mob implements Enemy { List nearbyPlayers = serverLevel.getNearbyPlayers( this.attackTargeting, Phantom.this, Phantom.this.getBoundingBox().inflate(16.0, 64.0, 16.0) ); @@ -10135,7 +10137,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 if (!nearbyPlayers.isEmpty()) { nearbyPlayers.sort(Comparator.comparing(Entity::getY).reversed()); -@@ -416,25 +547,160 @@ public class Phantom extends Mob implements Enemy { +@@ -416,25 +548,160 @@ public class Phantom extends Mob implements Enemy { } } @@ -10299,7 +10301,7 @@ index 666d50b738622d26cc15ccc3c11414490296abf6..a376615bc30a168c95a9a800b06801f9 if (Phantom.this.horizontalCollision) { Phantom.this.setYRot(Phantom.this.getYRot() + 180.0F); this.speed = 0.1F; -@@ -501,6 +767,12 @@ public class Phantom extends Mob implements Enemy { +@@ -501,6 +768,12 @@ public class Phantom extends Mob implements Enemy { return false; } else if (!target.isAlive()) { return false; @@ -11503,10 +11505,10 @@ index 3ff71ba1bd29faa4d8380dad9397ab34ef930234..b3f5b2e3e2cfc378de948c0e186727d5 protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java -index 662b95d27f6630ec27fd88ca279e395438faa96b..2a905e8cdf22f9d7f38cc41c1474e80f704d0cb1 100644 +index 0dbc528bcad2b2f79585e2462a265d43fcbebe76..e37c6dcbe62cba2cb7f33ac1792d539f9b07aa24 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java -@@ -85,6 +85,45 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -87,6 +87,45 @@ public class Zoglin extends Monster implements HoglinBase { this.xpReward = 5; } @@ -11552,14 +11554,14 @@ index 662b95d27f6630ec27fd88ca279e395438faa96b..2a905e8cdf22f9d7f38cc41c1474e80f @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -248,6 +287,7 @@ public class Zoglin extends Monster implements HoglinBase { - - @Override +@@ -252,6 +291,7 @@ public class Zoglin extends Monster implements HoglinBase { protected void customServerAiStep(ServerLevel level) { + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("zoglinBrain"); + if (getRider() == null || !this.isControllable()) // Purpur - only use brain if no rider this.getBrain().tick(level, this); + profilerFiller.pop(); this.updateActivity(); - } diff --git a/net/minecraft/world/entity/monster/Zombie.java b/net/minecraft/world/entity/monster/Zombie.java index a23607874a72723914cbfeea0ad1c51236c044d8..ab4dc7b3a7593d255dbd7d1df667fce3504af3ed 100644 --- a/net/minecraft/world/entity/monster/Zombie.java @@ -11963,11 +11965,23 @@ index 822712eaff2f6c579d982734ab14a00c02182770..f58c48d9de85fda3d13079f3e56b31af } @Nullable +diff --git a/net/minecraft/world/entity/monster/breeze/Breeze.java b/net/minecraft/world/entity/monster/breeze/Breeze.java +index c12653070d62c44b97a07676f24caf7ab570cd2a..4e47a1e6d1dcf15a316ff6bed6c03e9c42777853 100644 +--- a/net/minecraft/world/entity/monster/breeze/Breeze.java ++++ b/net/minecraft/world/entity/monster/breeze/Breeze.java +@@ -234,6 +234,7 @@ public class Breeze extends Monster { + protected void customServerAiStep(ServerLevel level) { + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("breezeBrain"); ++ if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider + this.getBrain().tick(level, this); + profilerFiller.popPush("breezeActivityUpdate"); + BreezeAi.updateActivity(this); diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java -index f66bd6cc4aab828e847b990b193be54cd0d0dc01..775c11f658b81379784f7e5bdfdc8105b3410480 100644 +index 567e7952efec69b4222563fae724d18a9902bb05..1b01d2b37dd221d5832cb68c072af9863aeb6868 100644 --- a/net/minecraft/world/entity/monster/creaking/Creaking.java +++ b/net/minecraft/world/entity/monster/creaking/Creaking.java -@@ -101,6 +101,37 @@ public class Creaking extends Monster { +@@ -103,6 +103,37 @@ public class Creaking extends Monster { return this.getHomePos() != null; } @@ -12005,7 +12019,7 @@ index f66bd6cc4aab828e847b990b193be54cd0d0dc01..775c11f658b81379784f7e5bdfdc8105 @Override protected BodyRotationControl createBodyControl() { return new Creaking.CreakingBodyRotationControl(this); -@@ -567,28 +598,28 @@ public class Creaking extends Monster { +@@ -572,28 +603,28 @@ public class Creaking extends Monster { } } @@ -12041,10 +12055,10 @@ index f66bd6cc4aab828e847b990b193be54cd0d0dc01..775c11f658b81379784f7e5bdfdc8105 } } diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 084f82a7baaa309aa80cc33b4c01e54cf6da4b42..3c126b1610718a407c16775a935b295ecbaab533 100644 +index 0ecf8533f6cad081df8713856feb74db93028f71..6062167a25d9d66c0264624f0761bcb9d47f0c77 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -94,6 +94,52 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -96,6 +96,52 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { this.xpReward = 5; } @@ -12097,19 +12111,19 @@ index 084f82a7baaa309aa80cc33b4c01e54cf6da4b42..3c126b1610718a407c16775a935b295e @VisibleForTesting public void setTimeInOverworld(int timeInOverworld) { this.timeInOverworld = timeInOverworld; -@@ -161,6 +207,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { - private int behaviorTick; // Pufferfish - @Override +@@ -164,6 +210,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { protected void customServerAiStep(ServerLevel level) { -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("hoglinBrain"); ++ if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); + profilerFiller.pop(); HoglinAi.updateActivity(this); diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 3e6cbf0166486995f7adcbd7b99a8b8c919956cd..fb58af763cf75c80703360a5c668168775b1458c 100644 +index 8392ff1316f0c5be685a6ded7ccd08933c10ff4e..b5ab1ea7ebf1e1a67f51f53f92fbc2a84506174a 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -135,6 +135,45 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -137,6 +137,45 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento this.xpReward = 5; } @@ -12155,15 +12169,15 @@ index 3e6cbf0166486995f7adcbd7b99a8b8c919956cd..fb58af763cf75c80703360a5c6681687 @Override protected void addAdditionalSaveData(ValueOutput output) { super.addAdditionalSaveData(output); -@@ -319,6 +358,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento - private int behaviorTick; // Pufferfish - @Override +@@ -322,6 +361,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento protected void customServerAiStep(ServerLevel level) { -+ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("piglinBrain"); ++ if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); + profilerFiller.pop(); PiglinAi.updateActivity(this); -@@ -421,7 +461,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -424,7 +464,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override public boolean wantsToPickUp(ServerLevel level, ItemStack stack) { @@ -12203,10 +12217,10 @@ index 4b1a3772f9e6b9e4efcf11e14b0fb882512ec86d..2841c765b2bd804f08bd0e603b4b29cf piglin.getBrain().eraseMemory(MemoryModuleType.WALK_TARGET); piglin.getNavigation().stop(); diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 589a130f8855f464c1930a0aa8b54c0326a22e23..c4eb58d0b0c51e930f9cb72e1de0103902badba7 100644 +index 219978cb0341b2d691f44c1146707d875788881e..70ee15527fa6f30783d6a58bb767b18124f25c53 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -@@ -63,6 +63,45 @@ public class PiglinBrute extends AbstractPiglin { +@@ -65,6 +65,45 @@ public class PiglinBrute extends AbstractPiglin { this.xpReward = 20; } @@ -12252,19 +12266,19 @@ index 589a130f8855f464c1930a0aa8b54c0326a22e23..c4eb58d0b0c51e930f9cb72e1de01039 public static AttributeSupplier.Builder createAttributes() { return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 50.0) -@@ -113,6 +152,7 @@ public class PiglinBrute extends AbstractPiglin { - - @Override +@@ -117,6 +156,7 @@ public class PiglinBrute extends AbstractPiglin { protected void customServerAiStep(ServerLevel level) { + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("piglinBruteBrain"); + if (getRider() == null || this.isControllable()) // Purpur - only use brain if no rider this.getBrain().tick(level, this); + profilerFiller.pop(); PiglinBruteAi.updateActivity(this); - PiglinBruteAi.maybePlayActivitySound(this); diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java -index 6a9d3b749e251d3dac6fda13318bf5a0bf21f82b..147fb3eecf651dcee63d63255542ef2680140f66 100644 +index 4a4cc7f9c95d4f4b6ad4948e3ed3504efbbcef15..bc691e17a974a3b4175ceb34f7e40291f1f1f83c 100644 --- a/net/minecraft/world/entity/monster/warden/Warden.java +++ b/net/minecraft/world/entity/monster/warden/Warden.java -@@ -122,8 +122,32 @@ public class Warden extends Monster implements VibrationSystem { +@@ -124,8 +124,32 @@ public class Warden extends Monster implements VibrationSystem { this.setPathfindingMalus(PathType.LAVA, 8.0F); this.setPathfindingMalus(PathType.DAMAGE_FIRE, 0.0F); this.setPathfindingMalus(PathType.DANGER_FIRE, 0.0F); @@ -12297,7 +12311,15 @@ index 6a9d3b749e251d3dac6fda13318bf5a0bf21f82b..147fb3eecf651dcee63d63255542ef26 @Override public Packet getAddEntityPacket(ServerEntity entity) { return new ClientboundAddEntityPacket(this, entity, this.hasPose(Pose.EMERGING) ? 1 : 0); -@@ -386,6 +410,7 @@ public class Warden extends Monster implements VibrationSystem { +@@ -281,6 +305,7 @@ public class Warden extends Monster implements VibrationSystem { + protected void customServerAiStep(ServerLevel level) { + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("wardenBrain"); ++ if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider + this.getBrain().tick(level, this); + profilerFiller.pop(); + super.customServerAiStep(level); +@@ -389,6 +414,7 @@ public class Warden extends Monster implements VibrationSystem { @Contract("null->false") public boolean canTargetEntity(@Nullable Entity entity) { @@ -12361,13 +12383,13 @@ index e282b6ab6d0d1c11ee40f5f436bd50fa90ddc88b..d6ae13c19481ce33bfa0b6c9db632830 this.spawnCat(pos, level, true); } diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index f37759161b2a682612c6676cdd0d15908259776c..014bb5b6e82bb11b756430999522f4b8f9356d9f 100644 +index e1e2bdb35866a8f32a41f6efd24ad77cf916b2e9..cab85afb6a460297511b0d391364670124d5a3f3 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java @@ -178,6 +178,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + MemoryModuleType.MEETING_POINT, + (villager, poiType) -> poiType.is(PoiTypes.MEETING) ); - - public long nextGolemPanic = -1; // Pufferfish + private boolean isLobotomized = false; public boolean isLobotomized() { return this.isLobotomized; } // Purpur - Lobotomize stuck villagers + private int notLobotomizedCount = 0; // Purpur - Lobotomize stuck villagers @@ -12495,13 +12517,16 @@ index f37759161b2a682612c6676cdd0d15908259776c..014bb5b6e82bb11b756430999522f4b8 } public boolean assignProfessionWhenSpawned() { -@@ -293,12 +392,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -292,11 +391,22 @@ public class Villager extends AbstractVillager implements ReputationEventHandler // Paper start - EAR 2 this.customServerAiStep(level, false); } - protected void customServerAiStep(ServerLevel level, final boolean inactive) { + protected void customServerAiStep(ServerLevel level, boolean inactive) { // Purpur - Lobotomize stuck villagers - not final // Paper end - EAR 2 + ProfilerFiller profilerFiller = Profiler.get(); + profilerFiller.push("villagerBrain"); +- if (!inactive) this.getBrain().tick(level, this); // Paper - EAR 2 + // Purpur start - Lobotomize stuck villagers + if (this.level().purpurConfig.villagerLobotomizeEnabled) { + // treat as inactive if lobotomized @@ -12510,16 +12535,14 @@ index f37759161b2a682612c6676cdd0d15908259776c..014bb5b6e82bb11b756430999522f4b8 + this.isLobotomized = false; + } + // Purpur end - Lobotomize stuck villagers - // Pufferfish start -- if (!inactive && this.behaviorTick++ % this.activatedPriority == 0) { -+ if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - Ridables - this.getBrain().tick(level, this); // Paper - EAR 2 - } ++ if (!inactive && (getRider() == null || !this.isControllable())) { // Purpur - Ridables ++ this.getBrain().tick(level, this); // Paper - EAR 2 ++ } + else if (this.isLobotomized && shouldRestock()) restock(); // Purpur - Lobotomize stuck villagers - // Pufferfish end + profilerFiller.pop(); if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; -@@ -354,7 +462,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -352,7 +462,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return super.mobInteract(player, hand); } else if (this.isBaby()) { this.setUnhappy(); @@ -12528,7 +12551,7 @@ index f37759161b2a682612c6676cdd0d15908259776c..014bb5b6e82bb11b756430999522f4b8 } else { if (!this.level().isClientSide) { boolean isEmpty = this.getOffers().isEmpty(); -@@ -367,9 +475,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -365,9 +475,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (isEmpty) { @@ -12542,7 +12565,7 @@ index f37759161b2a682612c6676cdd0d15908259776c..014bb5b6e82bb11b756430999522f4b8 this.startTrading(player); } -@@ -506,7 +617,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -504,7 +617,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public void updateDemand() { for (MerchantOffer merchantOffer : this.getOffers()) { @@ -12551,7 +12574,7 @@ index f37759161b2a682612c6676cdd0d15908259776c..014bb5b6e82bb11b756430999522f4b8 } } -@@ -699,7 +810,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -697,7 +810,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -12560,7 +12583,7 @@ index f37759161b2a682612c6676cdd0d15908259776c..014bb5b6e82bb11b756430999522f4b8 } private boolean hungry() { -@@ -866,7 +977,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -864,7 +977,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public boolean hasFarmSeeds() { @@ -12569,7 +12592,7 @@ index f37759161b2a682612c6676cdd0d15908259776c..014bb5b6e82bb11b756430999522f4b8 } @Override -@@ -921,6 +1032,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -919,6 +1032,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public void spawnGolemIfNeeded(ServerLevel serverLevel, long gameTime, int minVillagerAmount) { @@ -12577,7 +12600,7 @@ index f37759161b2a682612c6676cdd0d15908259776c..014bb5b6e82bb11b756430999522f4b8 if (this.wantsToSpawnGolem(gameTime)) { AABB aabb = this.getBoundingBox().inflate(10.0, 10.0, 10.0); List entitiesOfClass = serverLevel.getEntitiesOfClass(Villager.class, aabb); -@@ -994,6 +1106,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -992,6 +1106,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -12723,10 +12746,10 @@ index fce3f0f81d3195045cdc9ad7320f1d92f033c36d..352f55882ea77e8d89942e6c58ef3b4b blockPos = blockPos1; break; diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 76b35938176a592beb8d490e11cf9970e5d09405..5841fc8c069286321dcc03e000049d7c88a3d3b6 100644 +index e5e08dbefead90e9fe2bb05e4f0257f7aa4c0686..d72e338232b95826b63d784ac0731f5a20bf8dcb 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -220,17 +220,40 @@ public abstract class Player extends LivingEntity { +@@ -219,17 +219,40 @@ public abstract class Player extends LivingEntity { private int currentImpulseContextResetGraceTime = 0; public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage @@ -12764,10 +12787,10 @@ index 76b35938176a592beb8d490e11cf9970e5d09405..5841fc8c069286321dcc03e000049d7c + } + // Purpur end - Ridables + - public final int sendAllPlayerInfoBucketIndex; // Gale - Purpur - spread out sending all player info - public Player(Level level, GameProfile gameProfile) { -@@ -291,6 +314,12 @@ public abstract class Player extends LivingEntity { + super(EntityType.PLAYER, level); + this.setUUID(gameProfile.getId()); +@@ -287,6 +310,12 @@ public abstract class Player extends LivingEntity { @Override public void tick() { @@ -12780,7 +12803,7 @@ index 76b35938176a592beb8d490e11cf9970e5d09405..5841fc8c069286321dcc03e000049d7c this.noPhysics = this.isSpectator(); if (this.isSpectator() || this.isPassenger()) { this.setOnGround(false); -@@ -373,6 +402,17 @@ public abstract class Player extends LivingEntity { +@@ -365,6 +394,17 @@ public abstract class Player extends LivingEntity { this.turtleHelmetTick(); } @@ -12798,7 +12821,7 @@ index 76b35938176a592beb8d490e11cf9970e5d09405..5841fc8c069286321dcc03e000049d7c this.cooldowns.tick(); this.updatePlayerPose(); if (this.currentImpulseContextResetGraceTime > 0) { -@@ -638,7 +678,7 @@ public abstract class Player extends LivingEntity { +@@ -630,7 +670,7 @@ public abstract class Player extends LivingEntity { List list = Lists.newArrayList(); for (Entity entity : entities) { @@ -12807,7 +12830,7 @@ index 76b35938176a592beb8d490e11cf9970e5d09405..5841fc8c069286321dcc03e000049d7c list.add(entity); } else if (!entity.isRemoved()) { this.touch(entity); -@@ -1234,7 +1274,7 @@ public abstract class Player extends LivingEntity { +@@ -1226,7 +1266,7 @@ public abstract class Player extends LivingEntity { flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits if (flag2) { damageSource = damageSource.critical(); // Paper - critical damage API @@ -12816,7 +12839,7 @@ index 76b35938176a592beb8d490e11cf9970e5d09405..5841fc8c069286321dcc03e000049d7c } float f2 = f + f1; -@@ -1830,7 +1870,23 @@ public abstract class Player extends LivingEntity { +@@ -1822,7 +1862,23 @@ public abstract class Player extends LivingEntity { @Override protected int getBaseExperienceReward(ServerLevel level) { @@ -12841,7 +12864,7 @@ index 76b35938176a592beb8d490e11cf9970e5d09405..5841fc8c069286321dcc03e000049d7c } @Override -@@ -1869,6 +1925,13 @@ public abstract class Player extends LivingEntity { +@@ -1861,6 +1917,13 @@ public abstract class Player extends LivingEntity { return this.inventory.add(stack); } @@ -12856,7 +12879,7 @@ index 76b35938176a592beb8d490e11cf9970e5d09405..5841fc8c069286321dcc03e000049d7c if (this.isPassenger() || !this.onGround() || this.isInWater() || this.isInPowderSnow) { return false; diff --git a/net/minecraft/world/entity/projectile/AbstractArrow.java b/net/minecraft/world/entity/projectile/AbstractArrow.java -index fe738894f82480c6a7c2ff8fde895daaa0ba8bc6..9874c20c2c1b0ebdbaa58f719ddefdac463accbe 100644 +index 11adb3eacce9d46f15e6c5216e9b2494df158baf..92295796823d9b7595a85754f429f25bda65cfdd 100644 --- a/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/net/minecraft/world/entity/projectile/AbstractArrow.java @@ -76,6 +76,7 @@ public abstract class AbstractArrow extends Projectile { @@ -12926,10 +12949,10 @@ index f736f72b8e76dd82236badcdd2756f0d4da89aa4..0dbfbadcabcf1b719addb034e676cb51 protected double getDefaultGravity() { return 0.06; diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java -index e705dca7c5e2b9604cce7bce1ae80ebbbdecc20e..5daa37fc0e44d3c4f3755ec3d3d89213f6670de1 100644 +index dae6619f4670c6f68dae7e4b10b0b6a8bbe6dc2e..44166e077009ef0bdab95ed2df7c8252bf6bb87f 100644 --- a/net/minecraft/world/entity/projectile/Projectile.java +++ b/net/minecraft/world/entity/projectile/Projectile.java -@@ -485,7 +485,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -436,7 +436,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { @Override public boolean mayInteract(ServerLevel level, BlockPos pos) { Entity owner = this.getOwner(); @@ -14044,10 +14067,10 @@ index 7c54e658acf32ba260457e32f4cc6620f80a5f3c..d49a5360d4a21e5b15bac94a823831e2 } else if (!player.getProjectile(itemInHand).isEmpty()) { this.startSoundPlayed = false; diff --git a/net/minecraft/world/item/DyeColor.java b/net/minecraft/world/item/DyeColor.java -index d9c03b5e3768146bc8bcae2f86387b62ae89450b..eceb19b432d1bf5f1931568e78ab1e257ae657d1 100644 +index 76bb211843eee94334fbba87e5fa5ba5430f89ba..c9cde255117b46690b2b6670d009a00b051af016 100644 --- a/net/minecraft/world/item/DyeColor.java +++ b/net/minecraft/world/item/DyeColor.java -@@ -216,4 +216,10 @@ public enum DyeColor implements StringRepresentable { +@@ -126,4 +126,10 @@ public enum DyeColor implements StringRepresentable { private static CraftingInput makeCraftColorInput(DyeColor first, DyeColor second) { return CraftingInput.of(2, 1, List.of(new ItemStack(DyeItem.byColor(first)), new ItemStack(DyeItem.byColor(second)))); } @@ -14072,7 +14095,7 @@ index 2dc15a06572401c22fa4b8009fa1cdc3ceef0473..75ce17c1fa8c74981c44f3dab7e82351 if (event.callEvent() && thrownEgg.attemptSpawn()) { if (event.shouldConsume()) { diff --git a/net/minecraft/world/item/EndCrystalItem.java b/net/minecraft/world/item/EndCrystalItem.java -index 49f94f242a0906e74eb58313cf095a0b04c304c4..0db35674726e3039f2c20aed1993d6d3843f8d29 100644 +index 05ec512839898f96d9769bb0d00f6ba11dda0c4b..6e4a3c9c090a68bf5785a01d815c275411859c7b 100644 --- a/net/minecraft/world/item/EndCrystalItem.java +++ b/net/minecraft/world/item/EndCrystalItem.java @@ -24,7 +24,7 @@ public class EndCrystalItem extends Item { @@ -14176,7 +14199,7 @@ index 3bf3d4030c4da65fa386a8b8083d259a6046d15e..77a8d5d334cd93d23149afa8e58f4114 consumer.accept(context); if (player != null) { diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index 6ceb6cf302bad28e453fa89ec16083b0e0c5c398..8c713d90e81df61d65fa6770516afc4704bbbb6f 100644 +index da16f4831c875e07c25d7ed041bed493db614658..d3892cc9ef3ab66a45fe3ab72e8a5ef8b904b7c0 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java @@ -450,6 +450,7 @@ public final class ItemStack implements DataComponentHolder { @@ -14407,7 +14430,7 @@ index 92a2a9c84d8f0a44dffee22834f5ae6c6b4fec43..e2cdb3d43eca6e0e52fb00fbf3801f4b if (event.callEvent() && thrownPotion.attemptSpawn()) { if (event.shouldConsume()) { diff --git a/net/minecraft/world/item/TridentItem.java b/net/minecraft/world/item/TridentItem.java -index 2c38f40e87e711942c41c0740fbb2b4080ab9bcf..3e2c23968087e8c60051059720edc3259c44bfa8 100644 +index 2c38f40e87e711942c41c0740fbb2b4080ab9bcf..8f7e6ac2ccb845133f6af69d2aac9b8674b1cc56 100644 --- a/net/minecraft/world/item/TridentItem.java +++ b/net/minecraft/world/item/TridentItem.java @@ -83,7 +83,7 @@ public class TridentItem extends Item implements ProjectileItem { @@ -14427,11 +14450,10 @@ index 2c38f40e87e711942c41c0740fbb2b4080ab9bcf..3e2c23968087e8c60051059720edc325 if (event.shouldConsume()) { stack.hurtWithoutBreaking(1, player); // Paper - PlayerLaunchProjectileEvent } -@@ -125,6 +126,18 @@ public class TridentItem extends Item implements ProjectileItem { +@@ -125,6 +126,17 @@ public class TridentItem extends Item implements ProjectileItem { f1 *= tridentSpinAttackStrength / squareRoot; f2 *= tridentSpinAttackStrength / squareRoot; if (!org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(player, stack, f, f1, f2)) return false; // Paper - Add player riptide event -+ + // Purpur start - Implement elytra settings + List list = net.minecraft.world.entity.EquipmentSlot.VALUES.stream().filter((enumitemslot) -> LivingEntity.canGlideUsing(entity.getItemBySlot(enumitemslot), enumitemslot)).toList(); + if (!list.isEmpty()) { @@ -14488,7 +14510,7 @@ index 879c8fe1f20decc793cfa39e686b61d521bd76ba..9c383a1028988cdd3de8b29ba72a4d7b } diff --git a/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/net/minecraft/world/item/enchantment/EnchantmentHelper.java -index b20415b47e209aedbc60ff17238e575dfe33849a..657ca9d8b1dc10777e73c450c9b8a4d52e314388 100644 +index 66234431b265e0596275ca468cd40f8da98c22e2..e0cc0b49ea47bb38f7f4fe5ef3c793b0009d03c9 100644 --- a/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/net/minecraft/world/item/enchantment/EnchantmentHelper.java @@ -606,4 +606,58 @@ public class EnchantmentHelper { @@ -14633,7 +14655,7 @@ index 9175a7e4e6076626cb46144c5858c2f2474f1858..452b6df03152dbd2311774bf4872983d if (distance < 0.0 || d < distance * distance) { return true; diff --git a/net/minecraft/world/level/GameRules.java b/net/minecraft/world/level/GameRules.java -index 966ca1e0e828e4176e12cbcf8c4a6b16489708de..e4ac7ee4e39b609aa70d6d4b766962a4c942911e 100644 +index d5536dd40a1e9a2e05967652f690abbbca287852..d510503a8ad272255aeba20a916642828023fd19 100644 --- a/net/minecraft/world/level/GameRules.java +++ b/net/minecraft/world/level/GameRules.java @@ -354,6 +354,13 @@ public class GameRules { @@ -14651,19 +14673,18 @@ index 966ca1e0e828e4176e12cbcf8c4a6b16489708de..e4ac7ee4e39b609aa70d6d4b766962a4 return this.getRule(key).get(); } diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 1f7b3db02e59c4cbc93bc0e4e42bd20e0031c4bd..bee67a32c63df0901b9a9b6b3f6e7a35bb87025e 100644 +index be16627136f7b3979e62308f58b96a2b16ee9f62..a0f3795f3aee1541ddab81da3cd8391f0a70e03d 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -164,12 +164,56 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -160,11 +160,55 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl } - // Gale end - Gale configuration + // Paper end - add paper world config + public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur - Purpur config files public static @Nullable BlockPos lastPhysicsProblem; // Spigot private int tileTickPosition; public final Map explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here - public final ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom simpleRandom = new ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom(net.minecraft.world.level.levelgen.RandomSupport.generateUniqueSeed()); // Gale - Pufferfish - move random tick random + // Purpur start - Add adjustable breeding cooldown to config + private com.google.common.cache.Cache playerBreedingCooldowns; @@ -14711,10 +14732,10 @@ index 1f7b3db02e59c4cbc93bc0e4e42bd20e0031c4bd..bee67a32c63df0901b9a9b6b3f6e7a35 public CraftWorld getWorld() { return this.world; } -@@ -846,6 +890,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -840,6 +884,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl + // Paper end - getblock optimisations - cache world height/sections this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config - this.galeConfig = galeWorldConfigCreator.apply(this.spigotConfig); // Gale - Gale configuration + this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName(), environment); // Purpur - Purpur config files + this.playerBreedingCooldowns = this.getNewBreedingCooldownCache(); // Purpur - Add adjustable breeding cooldown to config this.generator = generator; @@ -14736,10 +14757,10 @@ index 1f7b3db02e59c4cbc93bc0e4e42bd20e0031c4bd..bee67a32c63df0901b9a9b6b3f6e7a35 + // Purpur end - Add allow water in end world option } diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java -index ccbeda714085118b4dddf9fac6f3de2ed7a6426e..102d88fc2989f80a39826e50ee706d853bfb2c5e 100644 +index 4f647507d06d45a65b4b1793219d90c65e110225..f0f5aa48af099c8244cd59da2c1dac6744a41abe 100644 --- a/net/minecraft/world/level/NaturalSpawner.java +++ b/net/minecraft/world/level/NaturalSpawner.java -@@ -254,7 +254,7 @@ public final class NaturalSpawner { +@@ -261,7 +261,7 @@ public final class NaturalSpawner { mutableBlockPos.set(x, y, z); double d = x + 0.5; double d1 = z + 0.5; @@ -14749,10 +14770,10 @@ index ccbeda714085118b4dddf9fac6f3de2ed7a6426e..102d88fc2989f80a39826e50ee706d85 double d2 = nearestPlayer.distanceToSqr(d, y, d1); if (level.isLoadedAndInBounds(mutableBlockPos) && isRightDistanceToPlayerAndSpawnPoint(level, chunk, mutableBlockPos, d2)) { // Paper - don't load chunks for mob spawn diff --git a/net/minecraft/world/level/ServerExplosion.java b/net/minecraft/world/level/ServerExplosion.java -index fa4695b7ee56724b4d47ce4da0a5aeb8b5467db4..1669c21534a453c9cf16b992df7a6bf276dea887 100644 +index 07e4025ca6c9c31905db2e6921138a0ded479dde..b80924fbe054b00fe5117df896358e330f41e993 100644 --- a/net/minecraft/world/level/ServerExplosion.java +++ b/net/minecraft/world/level/ServerExplosion.java -@@ -646,6 +646,23 @@ public class ServerExplosion implements Explosion { +@@ -648,6 +648,23 @@ public class ServerExplosion implements Explosion { this.directMappedBlockCache = new ca.spottedleaf.moonrise.patches.collisions.ExplosionBlockCache[BLOCK_EXPLOSION_CACHE_WIDTH * BLOCK_EXPLOSION_CACHE_WIDTH * BLOCK_EXPLOSION_CACHE_WIDTH]; this.mutablePos = new BlockPos.MutableBlockPos(); // Paper end - collision optimisations @@ -14916,7 +14937,7 @@ index e1193bcb666b7d38c511df7c1ebddb5897cefa8f..29248afa290b3143375f0538b4dfc80a level.scheduleTick(pos, this, _int); } diff --git a/net/minecraft/world/level/block/Block.java b/net/minecraft/world/level/block/Block.java -index cc5e4e82c2339d17edf76b9212774c9dfd8e514d..4a92d21c2b1a9473d001534cb88cdc37108dd716 100644 +index be6f37f91569c659c609e5e8d38671ca86f8cd95..d023c985344807db2180665a15d282fa50754299 100644 --- a/net/minecraft/world/level/block/Block.java +++ b/net/minecraft/world/level/block/Block.java @@ -99,6 +99,10 @@ public class Block extends BlockBehaviour implements ItemLike { @@ -15218,7 +15239,7 @@ index c4937d1b482e2ec60961bda62ad6cc155f0ce8f7..43f9d4b8a7ab4cd0a1a5dee9d0c0c779 return level.getBlockState(blockPos).isRedstoneConductor(level, blockPos); } diff --git a/net/minecraft/world/level/block/ComposterBlock.java b/net/minecraft/world/level/block/ComposterBlock.java -index 7977ecd013c55359f179b4b7f895099b7eb02294..be9fe9147cca1293c09dbfae0109a3c07a5c1e16 100644 +index a647d76d365a60b95a3eb7927ac426bf70d417f3..3eb11df5d14ec63911be630ca99d8d9903723f9b 100644 --- a/net/minecraft/world/level/block/ComposterBlock.java +++ b/net/minecraft/world/level/block/ComposterBlock.java @@ -250,17 +250,27 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { @@ -16209,7 +16230,7 @@ index 0b6debe0e55e404e6f34b3bc437fe7c7a30cec7c..a70f552fddc58efdce770c36abb548ef if (!level.addFreshEntity(witherBoss, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BUILD_WITHER)) { return; diff --git a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -index ca2cab797fc16f0961ce994fcb45029589b3c370..beda1b89b8083c63b9e177495ef063a7e5574627 100644 +index 36a72a11d28f99bfe85868461925b778cc01478e..57eae0dbb614f57e2a352613c7490145bbfeb5a1 100644 --- a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java @@ -186,6 +186,21 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit @@ -16694,7 +16715,7 @@ index 04527a5c65ad630f794fed9071d485aedd02257a..77731406cb3dc417aa2fe1cb4352f3d2 NoiseCache cache = noiseCache.get().computeIfAbsent(noise, noiseKey -> new NoiseCache()); // Paper - Perf: Optimize end generation diff --git a/net/minecraft/world/level/levelgen/PhantomSpawner.java b/net/minecraft/world/level/levelgen/PhantomSpawner.java -index 77ecbcdec8e176b1a45e87d33f64b1a12c532e26..acd3161d88a22a4f6246321cb2af9195e416f94c 100644 +index b3cfab9c82fe12694f5d2f56bd922828e51df680..d99bda335e7d3b49919fd6732b0052a9da70df70 100644 --- a/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/net/minecraft/world/level/levelgen/PhantomSpawner.java @@ -38,13 +38,13 @@ public class PhantomSpawner implements CustomSpawner { @@ -16714,8 +16735,8 @@ index 77ecbcdec8e176b1a45e87d33f64b1a12c532e26..acd3161d88a22a4f6246321cb2af9195 ServerStatsCounter stats = serverPlayer.getStats(); int i = Mth.clamp(stats.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE); int i1 = 24000; -@@ -64,7 +64,7 @@ public class PhantomSpawner implements CustomSpawner { - // Gale end - MultiPaper - don't load chunks to spawn phantoms +@@ -56,7 +56,7 @@ public class PhantomSpawner implements CustomSpawner { + FluidState fluidState = level.getFluidState(blockPos1); if (NaturalSpawner.isValidEmptySpawnBlock(level, blockPos1, blockState, fluidState, EntityType.PHANTOM)) { SpawnGroupData spawnGroupData = null; - int i2 = 1 + randomSource.nextInt(currentDifficultyAt.getDifficulty().getId() + 1); @@ -16830,7 +16851,7 @@ index b19260f442fe272efed8e61d1316bf0d6ff38023..0ecc5a49de322d531c33042858f8420d private static final double SAFE_TRAVEL_MAX_VERTICAL_DELTA = 1.0; private final Direction.Axis axis; diff --git a/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java -index 98971a07757d29d6926a0aa05f229b8020af42b6..bf01c9d54248ceb8f97cf1e1c0e4234a338cb8ce 100644 +index c8f23011a8942a5be970c606f67142cbd202b97e..7bbeed6c998c91e68376d3f17a510d68e3cd0b27 100644 --- a/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java +++ b/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java @@ -81,6 +81,7 @@ public class MapItemSavedData extends SavedData { diff --git a/leaf-server/minecraft-patches/features/0001-Rebrand.patch b/leaf-server/minecraft-patches/features/0002-Rebrand.patch similarity index 96% rename from leaf-server/minecraft-patches/features/0001-Rebrand.patch rename to leaf-server/minecraft-patches/features/0002-Rebrand.patch index 254db63b..0f04b5ad 100644 --- a/leaf-server/minecraft-patches/features/0001-Rebrand.patch +++ b/leaf-server/minecraft-patches/features/0002-Rebrand.patch @@ -35,10 +35,10 @@ index 3e0e88afcf010d9a3d46e48bca5cbdf98fe97544..18e63dca2a315ad01fa5b80ec126f4ea public SystemReport getSystemReport() { diff --git a/net/minecraft/world/damagesource/DamageSource.java b/net/minecraft/world/damagesource/DamageSource.java -index bb021fc9de91f8c4f79e6a753d57fa157efbbda7..9926848124f0b74ebb615fbbc45d95ebce64233f 100644 +index 5fa92eef9c6b88cf96d3fe427e4d4f16953e8094..5a663f66820d95449ccf9117e72159a10bcd04d6 100644 --- a/net/minecraft/world/damagesource/DamageSource.java +++ b/net/minecraft/world/damagesource/DamageSource.java -@@ -49,7 +49,7 @@ public class DamageSource { +@@ -75,7 +75,7 @@ public class DamageSource { public DamageSource eventEntityDamager(final Entity entity) { if (this.directEntity != null) { diff --git a/leaf-server/minecraft-patches/features/0002-Gale-configuration.patch b/leaf-server/minecraft-patches/features/0003-Gale-configuration.patch similarity index 89% rename from leaf-server/minecraft-patches/features/0002-Gale-configuration.patch rename to leaf-server/minecraft-patches/features/0003-Gale-configuration.patch index 6337923d..2be671d4 100644 --- a/leaf-server/minecraft-patches/features/0002-Gale-configuration.patch +++ b/leaf-server/minecraft-patches/features/0003-Gale-configuration.patch @@ -13,10 +13,10 @@ As part of: Paper (https://github.com/PaperMC/Paper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index d6dcb6d146d89a8fb96e7c669e5deb802223abd6..84f4f0c87f904a31f3f972e9fb1da8a01474dfca 100644 +index 478b9fba67f10dec1717a0d0bcb538cf0ad3afa1..f6dd9e279155969ba05b44083018e074e11b0bb9 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -300,6 +300,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation -@@ -471,6 +472,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, AutoCl - return this.paperConfig; +@@ -160,6 +160,13 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl } // Paper end - add paper world config + + // Gale start - Gale configuration + private final org.galemc.gale.configuration.GaleWorldConfiguration galeConfig; + public org.galemc.gale.configuration.GaleWorldConfiguration galeConfig() { + return this.galeConfig; + } + // Gale end - Gale configuration - ++ + public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur - Purpur config files public static @Nullable BlockPos lastPhysicsProblem; // Spigot private int tileTickPosition; -@@ -827,6 +833,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -871,6 +878,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl org.bukkit.World.Environment environment, // Paper java.util.function.Function paperWorldConfigCreator, // Paper - create paper world config @@ -131,11 +132,11 @@ index c41df4b1fff1f65532256e835dc30fadbb4f8c8b..4b96e512905aca3b69408145054c0658 java.util.concurrent.Executor executor // Paper - Anti-Xray ) { // Paper start - getblock optimisations - cache world height/sections -@@ -840,6 +848,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl - // Paper end - getblock optimisations - cache world height/sections +@@ -885,6 +894,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config + this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName(), environment); // Purpur - Purpur config files + this.galeConfig = galeWorldConfigCreator.apply(this.spigotConfig); // Gale - Gale configuration + this.playerBreedingCooldowns = this.getNewBreedingCooldownCache(); // Purpur - Add adjustable breeding cooldown to config this.generator = generator; this.world = new CraftWorld((ServerLevel) this, generator, biomeProvider, environment); - diff --git a/leaf-server/minecraft-patches/features/0003-Leaf-config.patch b/leaf-server/minecraft-patches/features/0004-Leaf-config.patch similarity index 75% rename from leaf-server/minecraft-patches/features/0003-Leaf-config.patch rename to leaf-server/minecraft-patches/features/0004-Leaf-config.patch index 75ae390b..3f76ea99 100644 --- a/leaf-server/minecraft-patches/features/0003-Leaf-config.patch +++ b/leaf-server/minecraft-patches/features/0004-Leaf-config.patch @@ -13,14 +13,15 @@ Update config reload: (Or sync reload) diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java -index fd3553bdc1c3cdbf6aa3dc00e0a4987f8eaa4fb8..b16f3f515a76ddbbd74d73464396cf094cb30599 100644 +index b06c2c4aa77edafb374f7cf0406cf4d29c6e7f9f..1de83fa9507d1432442b15d008b9c30b27acf810 100644 --- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java -@@ -109,10 +109,12 @@ public class Main { - JvmProfiler.INSTANCE.start(Environment.SERVER); - } +@@ -116,10 +116,13 @@ public class Main { + org.purpurmc.purpur.PurpurConfig.registerMinecraftDisabledCommands = purpurConfiguration.getBoolean("settings.register-minecraft-disabled-commands"); // Purpur - register disabled minecraft commands + // Purpur end - Add toggle for enchant level clamping - load config files early + org.dreeam.leaf.config.LeafConfig.loadConfig(); // Leaf - Leaf config ++ io.papermc.paper.plugin.PluginInitializerManager.load(optionSet); // Paper Bootstrap.bootStrap(); Bootstrap.validate(); @@ -30,10 +31,10 @@ index fd3553bdc1c3cdbf6aa3dc00e0a4987f8eaa4fb8..b16f3f515a76ddbbd74d73464396cf09 DedicatedServerSettings dedicatedServerSettings = new DedicatedServerSettings(optionSet); // CraftBukkit - CLI argument support dedicatedServerSettings.forceSave(); diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index b737c4a6ae23342d71efeec99bee61eee1f1a67d..a795aa7a812a1773ba76d03ab8dba6e9b1ecf298 100644 +index f6dd9e279155969ba05b44083018e074e11b0bb9..c4c7491dfee075e2c75f11631558bed89061f4f6 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1186,6 +1186,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop contextChain = finishParsing(parseResults, command, commandSourceStack); try { -@@ -387,8 +383,6 @@ public class Commands { +@@ -401,8 +397,6 @@ public class Commands { commandSourceStack.sendFailure(Component.literal(Util.describeError(var12))); LOGGER.error("'/{}' threw an exception", command, var12); } @@ -81,7 +81,7 @@ index ec1cced129ef42be65d7b2b622638bfae8bd895e..f6017445c495c65fc71b10d2a8ed4f5d } } -@@ -445,7 +439,7 @@ public class Commands { +@@ -459,7 +453,7 @@ public class Commands { int max = Math.max(1, server.getGameRules().getInt(GameRules.RULE_MAX_COMMAND_CHAIN_LENGTH)); int _int = server.getGameRules().getInt(GameRules.RULE_MAX_COMMAND_FORK_COUNT); @@ -169,7 +169,7 @@ index 18071dcc69cc28471dddb7de94e803ec1e5fc2e4..e30bb9c4046200c1a6e4e917d15b205f } } diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index a795aa7a812a1773ba76d03ab8dba6e9b1ecf298..d3cf7176903bede5c8c7a7e3dae3f585027f8354 100644 +index c4c7491dfee075e2c75f11631558bed89061f4f6..a084ac0399e5b3a321ad53fcfb3d7052192d2a36 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -114,19 +114,8 @@ import net.minecraft.util.TimeUtil; @@ -206,7 +206,7 @@ index a795aa7a812a1773ba76d03ab8dba6e9b1ecf298..d3cf7176903bede5c8c7a7e3dae3f585 private ServerConnectionListener connection; public final ChunkProgressListenerFactory progressListenerFactory; @Nullable -@@ -992,9 +974,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop false : this::haveTime); // Paper start - rewrite chunk system -@@ -1262,7 +1234,6 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.tickCount % autosavePeriod == 0; try { this.isSaving = true; -@@ -1559,10 +1523,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop serverPlayer1.connection.suspendFlushing()); this.server.getScheduler().mainThreadHeartbeat(); // CraftBukkit // Paper start - optimise Folia entity scheduler -@@ -1676,9 +1632,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent +@@ -1745,17 +1699,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Purpur - Ridables - profilerFiller.push(() -> serverLevel + " " + serverLevel.dimension().location()); /* Drop global time updates if (this.tickCount % 20 == 0) { @@ -348,7 +348,7 @@ index a795aa7a812a1773ba76d03ab8dba6e9b1ecf298..d3cf7176903bede5c8c7a7e3dae3f585 try { serverLevel.tick(hasTimeLeft); } catch (Throwable var7) { -@@ -1732,34 +1681,24 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { if (!entity.isRemoved()) { if (!tickRateManager.isEntityFrozen(entity)) { @@ -970,7 +970,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 if (true) { // Paper - rewrite chunk system Entity vehicle = entity.getVehicle(); if (vehicle != null) { -@@ -807,21 +788,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -828,21 +809,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe entity.stopRiding(); } @@ -992,7 +992,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 } @Override -@@ -836,9 +811,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -857,9 +832,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe if (this.tickTime) { long l = this.levelData.getGameTime() + 1L; this.serverLevelData.setGameTime(l); @@ -1000,9 +1000,9 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 this.serverLevelData.getScheduledEvents().tick(this.server, l); - Profiler.get().pop(); if (this.serverLevelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) { - this.setDayTime(this.levelData.getDayTime() + 1L); - } -@@ -917,8 +890,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe + // Purpur start - Configurable daylight cycle + int incrementTicks = isBrightOutside() ? this.purpurConfig.daytimeTicks : this.purpurConfig.nighttimeTicks; +@@ -959,8 +932,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ChunkPos pos = chunk.getPos(); int minBlockX = pos.getMinBlockX(); int minBlockZ = pos.getMinBlockZ(); @@ -1011,7 +1011,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 if (!this.paperConfig().environment.disableIceAndSnow) { // Paper - Option to disable ice and snow for (int i = 0; i < randomTickSpeed; i++) { -@@ -928,12 +899,9 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -970,12 +941,9 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } } // Paper - Option to disable ice and snow @@ -1024,7 +1024,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 } public void tickThunder(LevelChunk chunk) { -@@ -941,8 +909,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -983,8 +951,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe boolean isRaining = this.isRaining(); int minBlockX = pos.getMinBlockX(); int minBlockZ = pos.getMinBlockZ(); @@ -1033,7 +1033,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 if (!this.paperConfig().environment.disableThunder && isRaining && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - Option to disable thunder BlockPos blockPos = this.findLightningTargetAround(this.getBlockRandomPos(minBlockX, 0, minBlockZ, 15)); if (this.isRainingAt(blockPos)) { -@@ -968,8 +934,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1018,8 +984,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } } } @@ -1042,7 +1042,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 } @VisibleForTesting -@@ -1267,17 +1231,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1363,17 +1327,13 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } // Paper end - log detailed entity tick information entity.setOldPosAndRot(); @@ -1060,7 +1060,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 for (Entity entity1 : entity.getPassengers()) { this.tickPassenger(entity, entity1, isActive); // Paper - EAR 2 -@@ -1298,9 +1258,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1394,9 +1354,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe passengerEntity.setOldPosAndRot(); passengerEntity.tickCount++; passengerEntity.totalEntityAge++; // Paper - age-like counter for all entities @@ -1070,7 +1070,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 // Paper start - EAR 2 if (isActive) { passengerEntity.rideTick(); -@@ -1312,7 +1269,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1408,7 +1365,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ridingEntity.positionRider(passengerEntity); } // Paper end - EAR 2 @@ -1079,7 +1079,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 for (Entity entity : passengerEntity.getPassengers()) { this.tickPassenger(passengerEntity, entity, isActive); // Paper - EAR 2 diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 9cbc3e1de1a1d0419b72ce074cfa01497a1fdd72..822691293834c4da31adb2573fbc87467db2daa5 100644 +index 35efaa78b62a38e3d9e4a50baa227c0ff5098ff6..cdeac61ab3322e1dc375d1496d088407885df6b1 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -106,8 +106,6 @@ import net.minecraft.util.HashOps; @@ -1091,7 +1091,7 @@ index 9cbc3e1de1a1d0419b72ce074cfa01497a1fdd72..822691293834c4da31adb2573fbc8746 import net.minecraft.world.Container; import net.minecraft.world.Difficulty; import net.minecraft.world.InteractionHand; -@@ -1418,14 +1416,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1450,14 +1448,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.unsetRemoved(); */ // CraftBukkit end @@ -1106,7 +1106,7 @@ index 9cbc3e1de1a1d0419b72ce074cfa01497a1fdd72..822691293834c4da31adb2573fbc8746 // CraftBukkit start this.isChangingDimension = true; // CraftBukkit - Set teleport invulnerability only if player changing worlds LevelData worlddata = level.getLevelData(); -@@ -1442,7 +1436,6 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1475,7 +1469,6 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); level.addDuringTeleport(this); @@ -1115,7 +1115,7 @@ index 9cbc3e1de1a1d0419b72ce074cfa01497a1fdd72..822691293834c4da31adb2573fbc8746 this.stopUsingItem(); this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities())); diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index f02800e4e941b05bde6f0d5fac76e2b6ec5b9832..149660c1196481275ca03830d64cf33b5ce98163 100644 +index 58215f4a156e4cf57338e78975be7b6abfd961db..dc55800b006f3ad67c94108af915b645e33a75dd 100644 --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -26,7 +26,6 @@ import net.minecraft.network.protocol.cookie.ServerboundCookieResponsePacket; @@ -1126,7 +1126,7 @@ index f02800e4e941b05bde6f0d5fac76e2b6ec5b9832..149660c1196481275ca03830d64cf33b import org.slf4j.Logger; public abstract class ServerCommonPacketListenerImpl implements ServerCommonPacketListener { -@@ -260,7 +259,6 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -270,7 +269,6 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } protected void keepConnectionAlive() { @@ -1134,7 +1134,7 @@ index f02800e4e941b05bde6f0d5fac76e2b6ec5b9832..149660c1196481275ca03830d64cf33b long millis = Util.getMillis(); // Paper start - improve keepalives if (this.checkIfClosed(millis) && !this.processedDisconnect) { -@@ -281,8 +279,6 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -291,8 +289,6 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack // Paper end - improve keepalives } } @@ -1234,7 +1234,7 @@ index 64b0508ef21952c65b0b967b756b2a4c64d96899..b6b03fbbd669e6331b30255df5419611 protected abstract T prepare(ResourceManager resourceManager, ProfilerFiller profiler); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532c50564d5 100644 +index 613d412374b0ec465364565f9f445cc32385097a..04425c357eedda8049d3e1780011b274ce3ec575 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -80,8 +80,6 @@ import net.minecraft.tags.TagKey; @@ -1246,7 +1246,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.Nameable; -@@ -841,8 +839,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -873,8 +871,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public void baseTick() { @@ -1255,7 +1255,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Prevent entity loading causing async lookups this.inBlockState = null; if (this.isPassenger() && this.getVehicle().isRemoved()) { -@@ -896,8 +892,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -928,8 +924,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.level() instanceof ServerLevel serverLevelx && this instanceof Leashable) { Leashable.tickLeash(serverLevelx, (Entity & Leashable)this); } @@ -1264,7 +1264,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 } public void setSharedFlagOnFire(boolean isOnFire) { -@@ -1117,8 +1111,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1150,8 +1144,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1273,7 +1273,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7) { movement = movement.multiply(this.stuckSpeedMultiplier); this.stuckSpeedMultiplier = Vec3.ZERO; -@@ -1127,7 +1119,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1160,7 +1152,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper start - ignore movement changes while inactive. if (isTemporarilyActive && !(this instanceof ItemEntity) && movement == getDeltaMovement() && type == MoverType.SELF) { setDeltaMovement(Vec3.ZERO); @@ -1281,7 +1281,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 return; } // Paper end -@@ -1152,8 +1143,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1185,8 +1176,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.setPos(vec32); } @@ -1290,7 +1290,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 boolean flag = !Mth.equal(movement.x, vec3.x); boolean flag1 = !Mth.equal(movement.z, vec3.z); this.horizontalCollision = flag || flag1; -@@ -1176,7 +1165,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1209,7 +1198,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } if (this.isRemoved()) { @@ -1298,7 +1298,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 } else { if (this.horizontalCollision) { Vec3 deltaMovement = this.getDeltaMovement(); -@@ -1220,7 +1208,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1253,7 +1241,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess float blockSpeedFactor = this.getBlockSpeedFactor(); this.setDeltaMovement(this.getDeltaMovement().multiply(blockSpeedFactor, 1.0, blockSpeedFactor)); @@ -1306,7 +1306,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 } } // Paper start - detailed watchdog information -@@ -3406,8 +3393,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3466,8 +3453,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.processPortalCooldown(); if (this.portalProcess != null) { if (this.portalProcess.processPortalTeleportation(serverLevel, this, this.canUsePortal(false))) { @@ -1315,7 +1315,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 this.setPortalCooldown(); TeleportTransition portalDestination = this.portalProcess.getPortalDestination(serverLevel, this); if (portalDestination != null) { -@@ -3418,7 +3403,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3478,7 +3463,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1323,7 +1323,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 } else if (this.portalProcess.hasExpired()) { this.portalProcess = null; } -@@ -3985,15 +3969,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4045,15 +4029,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess entity.teleport(this.calculatePassengerTransition(teleportTransition, entity)); } @@ -1339,7 +1339,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 return this; } -@@ -4009,11 +3990,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4069,11 +4050,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -1351,7 +1351,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 return null; } else { // Paper start - Fix item duplication and teleport issues -@@ -4033,7 +4011,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4093,7 +4071,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess newLevel.resetEmptyTime(); teleportTransition.postTeleportTransition().onTransition(entityx); this.teleportSpectators(teleportTransition, oldLevel); @@ -1360,7 +1360,7 @@ index d8c2d88a0a533cbdce666ce3753de8aa210cdd3b..e45c92dc6e9b934b19bbd33e1fd65532 } } diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index c3c3b7dfb01317c902687b7de192f8a5a910a565..c2f93f2e71ea5cab84a5821d952a6f90dc1068ed 100644 +index a3b985cc454b2c62e7642f7eb05de590ecde9272..9fee96683e2738745aedd57ee3665701ab682db5 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -69,8 +69,6 @@ import net.minecraft.tags.FluidTags; @@ -1372,7 +1372,7 @@ index c3c3b7dfb01317c902687b7de192f8a5a910a565..c2f93f2e71ea5cab84a5821d952a6f90 import net.minecraft.world.Difficulty; import net.minecraft.world.InteractionHand; import net.minecraft.world.damagesource.CombatRules; -@@ -429,8 +427,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -434,8 +432,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } super.baseTick(); @@ -1381,7 +1381,7 @@ index c3c3b7dfb01317c902687b7de192f8a5a910a565..c2f93f2e71ea5cab84a5821d952a6f90 if (this.fireImmune() || this.level().isClientSide) { this.clearFire(); } -@@ -515,7 +511,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -526,7 +522,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.yBodyRotO = this.yBodyRot; this.yRotO = this.getYRot(); this.xRotO = this.getXRot(); @@ -1389,7 +1389,7 @@ index c3c3b7dfb01317c902687b7de192f8a5a910a565..c2f93f2e71ea5cab84a5821d952a6f90 } @Override -@@ -3285,11 +3280,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3364,11 +3359,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin f1 = this.getYRot(); } @@ -1401,7 +1401,7 @@ index c3c3b7dfb01317c902687b7de192f8a5a910a565..c2f93f2e71ea5cab84a5821d952a6f90 // Paper start - stop large pitch and yaw changes from crashing the server this.yRotO += Math.round((this.getYRot() - this.yRotO) / 360.0F) * 360.0F; -@@ -3301,7 +3292,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3380,7 +3371,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.yHeadRotO += Math.round((this.yHeadRot - this.yHeadRotO) / 360.0F) * 360.0F; // Paper end - stop large pitch and yaw changes from crashing the server @@ -1409,7 +1409,7 @@ index c3c3b7dfb01317c902687b7de192f8a5a910a565..c2f93f2e71ea5cab84a5821d952a6f90 if (this.isFallFlying()) { this.fallFlyTicks++; } else { -@@ -3477,21 +3467,15 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3556,21 +3546,15 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } this.setDeltaMovement(d, d1, d2); @@ -1431,7 +1431,7 @@ index c3c3b7dfb01317c902687b7de192f8a5a910a565..c2f93f2e71ea5cab84a5821d952a6f90 if (this.jumping && this.isAffectedByFluids()) { double fluidHeight; if (this.isInLava()) { -@@ -3520,8 +3504,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3599,8 +3583,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.noJumpDelay = 0; } @@ -1440,7 +1440,7 @@ index c3c3b7dfb01317c902687b7de192f8a5a910a565..c2f93f2e71ea5cab84a5821d952a6f90 if (this.isFallFlying()) { this.updateFallFlying(); } -@@ -3546,9 +3528,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3625,9 +3607,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.calculateEntityAnimation(this instanceof FlyingAnimal); } @@ -1450,7 +1450,7 @@ index c3c3b7dfb01317c902687b7de192f8a5a910a565..c2f93f2e71ea5cab84a5821d952a6f90 if ((!this.isInPowderSnow || !this.canFreeze()) && !this.freezeLocked) { // Paper - Freeze Tick Lock API this.setTicksFrozen(Math.max(0, this.getTicksFrozen() - 2)); } -@@ -3558,18 +3538,14 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3637,18 +3617,14 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.tickCount % 40 == 0 && this.isFullyFrozen() && this.canFreeze()) { this.hurtServer(serverLevel, this.damageSources().freeze(), 1.0F); } @@ -1467,10 +1467,10 @@ index c3c3b7dfb01317c902687b7de192f8a5a910a565..c2f93f2e71ea5cab84a5821d952a6f90 this.pushEntities(); - profilerFiller.pop(); // Paper start - Add EntityMoveEvent - if (((ServerLevel) this.level()).hasEntityMoveEvent && !(this instanceof Player)) { - if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { + // Purpur start - Ridables + if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index e0b3cb2b2694768803ed347a1026b881fd624951..c620341e33dc1805f1c033a969d0a15e1484c176 100644 +index 035eb50335daa88679672cba550ed87ac3fa5873..b2026e29a0633f971bf551fad8be7161bb6293f3 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -26,8 +26,6 @@ import net.minecraft.sounds.SoundEvent; @@ -1482,7 +1482,7 @@ index e0b3cb2b2694768803ed347a1026b881fd624951..c620341e33dc1805f1c033a969d0a15e import net.minecraft.world.Container; import net.minecraft.world.Difficulty; import net.minecraft.world.DifficultyInstance; -@@ -320,14 +318,10 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -322,14 +320,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @Override public void baseTick() { super.baseTick(); @@ -1492,12 +1492,12 @@ index e0b3cb2b2694768803ed347a1026b881fd624951..c620341e33dc1805f1c033a969d0a15e this.resetAmbientSoundTime(); this.playAmbientSound(); } -- + - profilerFiller.pop(); + incrementTicksSinceLastInteraction(); // Purpur - Entity lifespan } - @Override -@@ -509,8 +503,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -533,8 +528,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @Override public void aiStep() { super.aiStep(); @@ -1506,7 +1506,7 @@ index e0b3cb2b2694768803ed347a1026b881fd624951..c620341e33dc1805f1c033a969d0a15e if (this.level() instanceof ServerLevel serverLevel && this.canPickUpLoot() && this.isAlive() -@@ -533,8 +525,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -557,8 +550,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } } } @@ -1515,7 +1515,7 @@ index e0b3cb2b2694768803ed347a1026b881fd624951..c620341e33dc1805f1c033a969d0a15e } protected Vec3i getPickupReach() { -@@ -754,42 +744,21 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -778,42 +769,21 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab return; } // Paper end - Allow nerfed mobs to jump and float @@ -1664,7 +1664,7 @@ index c569074403b1d8b443aaa98ba9cf9bbd0e98bd2d..b1aa7294f9479f45fcde77c5ea46db9f this.seen.add(id); } else { diff --git a/net/minecraft/world/entity/animal/HappyGhast.java b/net/minecraft/world/entity/animal/HappyGhast.java -index 272f57aca640e045efca64dd018b221335c667ee..f07dcf7d45b1b717faeae0c4129fb00a22fb7d57 100644 +index fb37669b4d66bb853eabf2d15a369d7ad5a2dbb9..9763a5e24e0fed9b49b6ac59911f6c9f8e893db5 100644 --- a/net/minecraft/world/entity/animal/HappyGhast.java +++ b/net/minecraft/world/entity/animal/HappyGhast.java @@ -14,8 +14,6 @@ import net.minecraft.sounds.SoundEvents; @@ -1676,7 +1676,7 @@ index 272f57aca640e045efca64dd018b221335c667ee..f07dcf7d45b1b717faeae0c4129fb00a import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; -@@ -385,13 +383,8 @@ public class HappyGhast extends Animal { +@@ -426,13 +424,8 @@ public class HappyGhast extends Animal { @Override protected void customServerAiStep(ServerLevel level) { if (this.isBaby()) { @@ -1691,7 +1691,7 @@ index 272f57aca640e045efca64dd018b221335c667ee..f07dcf7d45b1b717faeae0c4129fb00a this.checkRestriction(); diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index b7b964bd4e2d611a3e48ece072d5787193077a92..de3bf0b62371f06ecb5d2035638e352ca0c06182 100644 +index f372d8b21282e8fdd00dd19eb14ce6ee45b358b0..dd10b0535baf48aea47020d890f102800b0af11a 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java @@ -25,8 +25,6 @@ import net.minecraft.tags.GameEventTags; @@ -1703,12 +1703,13 @@ index b7b964bd4e2d611a3e48ece072d5787193077a92..de3bf0b62371f06ecb5d2035638e352c import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.SimpleContainer; -@@ -226,13 +224,8 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -269,14 +267,9 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("allayBrain"); + if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.pop(); - profilerFiller.push("allayActivityUpdate"); @@ -1718,7 +1719,7 @@ index b7b964bd4e2d611a3e48ece072d5787193077a92..de3bf0b62371f06ecb5d2035638e352c } diff --git a/net/minecraft/world/entity/animal/armadillo/Armadillo.java b/net/minecraft/world/entity/animal/armadillo/Armadillo.java -index c1798db2972c8f2a343cf6e16fd9354ff212d906..ee2c6c86631ba50a4e8503131c678596bc2c0363 100644 +index 0da5c51c4830cf1826261f4d8877303b34c6cb87..6fbeaff7178a21338920d6738767033260b7a726 100644 --- a/net/minecraft/world/entity/animal/armadillo/Armadillo.java +++ b/net/minecraft/world/entity/animal/armadillo/Armadillo.java @@ -23,8 +23,6 @@ import net.minecraft.util.ByIdMap; @@ -1730,7 +1731,7 @@ index c1798db2972c8f2a343cf6e16fd9354ff212d906..ee2c6c86631ba50a4e8503131c678596 import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; -@@ -135,13 +133,8 @@ public class Armadillo extends Animal { +@@ -167,13 +165,8 @@ public class Armadillo extends Animal { @Override protected void customServerAiStep(ServerLevel level) { @@ -1745,7 +1746,7 @@ index c1798db2972c8f2a343cf6e16fd9354ff212d906..ee2c6c86631ba50a4e8503131c678596 this.forceDrops = true; // CraftBukkit if (this.dropFromGiftLootTable(level, BuiltInLootTables.ARMADILLO_SHED, this::spawnAtLocation)) { diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index b0467750dab4c6f411fd2f318009d25f83d94bc0..6a5e9e9582e322aaa1555933de97e545ba74f8f4 100644 +index 40e4cc14f10bd465ee7bee124e7e194c74c070b4..deb2fdea7be9dda1c4b267ac25326bb9b05ae739 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -31,8 +31,6 @@ import net.minecraft.util.ByIdMap; @@ -1757,12 +1758,13 @@ index b0467750dab4c6f411fd2f318009d25f83d94bc0..6a5e9e9582e322aaa1555933de97e545 import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -@@ -329,13 +327,8 @@ public class Axolotl extends Animal implements Bucketable { +@@ -375,14 +373,9 @@ public class Axolotl extends Animal implements Bucketable { @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("axolotlBrain"); + if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.pop(); - profilerFiller.push("axolotlActivityUpdate"); @@ -1772,7 +1774,7 @@ index b0467750dab4c6f411fd2f318009d25f83d94bc0..6a5e9e9582e322aaa1555933de97e545 Optional memory = this.getBrain().getMemory(MemoryModuleType.PLAY_DEAD_TICKS); this.setPlayingDead(memory.isPresent() && memory.get() > 0); diff --git a/net/minecraft/world/entity/animal/camel/Camel.java b/net/minecraft/world/entity/animal/camel/Camel.java -index 757b63ee059c95e673a098706b4ee7ab4fc21f70..adc336c6cec601b8855c1013adf1eebf018597f0 100644 +index 0c698241b10f84afb17ae10d3661a90bc62ec243..949b6c563658e6e46ac5842d6f088ecae6d4cd0c 100644 --- a/net/minecraft/world/entity/animal/camel/Camel.java +++ b/net/minecraft/world/entity/animal/camel/Camel.java @@ -18,8 +18,6 @@ import net.minecraft.tags.BlockTags; @@ -1784,7 +1786,7 @@ index 757b63ee059c95e673a098706b4ee7ab4fc21f70..adc336c6cec601b8855c1013adf1eebf import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -@@ -159,14 +157,9 @@ public class Camel extends AbstractHorse { +@@ -173,14 +171,9 @@ public class Camel extends AbstractHorse { @Override protected void customServerAiStep(ServerLevel level) { @@ -1800,7 +1802,7 @@ index 757b63ee059c95e673a098706b4ee7ab4fc21f70..adc336c6cec601b8855c1013adf1eebf } diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index 66f503e045ccb0985ec718b39be07eea538fad8d..b8703409dd3dc8e3020ed81b44ce4812984c88c3 100644 +index 8d6da6ce15c266c7b4b9763a37516d2b160f1b85..f67d18f32f73e0e6be35939781bd0bd0188cdfbd 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java @@ -28,8 +28,6 @@ import net.minecraft.tags.ItemTags; @@ -1812,12 +1814,13 @@ index 66f503e045ccb0985ec718b39be07eea538fad8d..b8703409dd3dc8e3020ed81b44ce4812 import net.minecraft.world.DifficultyInstance; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AgeableMob; -@@ -204,13 +202,8 @@ public class Frog extends Animal { +@@ -261,14 +259,9 @@ public class Frog extends Animal { @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("frogBrain"); + if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.pop(); - profilerFiller.push("frogActivityUpdate"); @@ -1827,7 +1830,7 @@ index 66f503e045ccb0985ec718b39be07eea538fad8d..b8703409dd3dc8e3020ed81b44ce4812 } diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java -index 17f58246849ed407821a987b200cc765eb7943f9..c1510a6f1146f446ed65a1f08984af6c29de439a 100644 +index 40b57095812fc1dd2ed14da4933fc949afd855b2..e5cefb1d327053761a8c2195c6f39128a23520c1 100644 --- a/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/net/minecraft/world/entity/animal/frog/Tadpole.java @@ -12,8 +12,6 @@ import net.minecraft.server.level.ServerLevel; @@ -1839,12 +1842,13 @@ index 17f58246849ed407821a987b200cc765eb7943f9..c1510a6f1146f446ed65a1f08984af6c import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; -@@ -100,13 +98,8 @@ public class Tadpole extends AbstractFish { +@@ -137,14 +135,9 @@ public class Tadpole extends AbstractFish { @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("tadpoleBrain"); + if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.pop(); - profilerFiller.push("tadpoleActivityUpdate"); @@ -1854,7 +1858,7 @@ index 17f58246849ed407821a987b200cc765eb7943f9..c1510a6f1146f446ed65a1f08984af6c } diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 75af1b92a0a60cffa3317d83bd599a3d4d26f93c..bdac4929db71a39fc02985109cedc9cd316ec3cc 100644 +index 979befb6a51c855e439d7576db57abf1143731be..d8b726fb954a3b8ca20f3f500e4087d5936e7646 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java @@ -20,8 +20,6 @@ import net.minecraft.tags.ItemTags; @@ -1866,12 +1870,13 @@ index 75af1b92a0a60cffa3317d83bd599a3d4d26f93c..bdac4929db71a39fc02985109cedc9cd import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -@@ -190,13 +188,8 @@ public class Goat extends Animal { +@@ -228,14 +226,9 @@ public class Goat extends Animal { @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("goatBrain"); + if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.pop(); - profilerFiller.push("goatActivityUpdate"); @@ -1881,7 +1886,7 @@ index 75af1b92a0a60cffa3317d83bd599a3d4d26f93c..bdac4929db71a39fc02985109cedc9cd } diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 6a9f31c1f39cc14ad7b5ae3af85908bc7a4caae4..05d269b51715a71fa653900e7187b07d001afdb7 100644 +index 745c821facbbf0e9641e371bb26a8d6abde7a813..71e7931f7007f73b552bbc2cbc8e843e10b40b43 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java @@ -29,8 +29,6 @@ import net.minecraft.tags.BlockTags; @@ -1893,12 +1898,13 @@ index 6a9f31c1f39cc14ad7b5ae3af85908bc7a4caae4..05d269b51715a71fa653900e7187b07d import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; -@@ -465,12 +463,8 @@ public class Sniffer extends Animal { +@@ -497,13 +495,9 @@ public class Sniffer extends Animal { @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("snifferBrain"); + if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.popPush("snifferActivityUpdate"); SnifferAi.updateActivity(this); @@ -1907,7 +1913,7 @@ index 6a9f31c1f39cc14ad7b5ae3af85908bc7a4caae4..05d269b51715a71fa653900e7187b07d } diff --git a/net/minecraft/world/entity/monster/Zoglin.java b/net/minecraft/world/entity/monster/Zoglin.java -index 0dbc528bcad2b2f79585e2462a265d43fcbebe76..662b95d27f6630ec27fd88ca279e395438faa96b 100644 +index e37c6dcbe62cba2cb7f33ac1792d539f9b07aa24..2a905e8cdf22f9d7f38cc41c1474e80f704d0cb1 100644 --- a/net/minecraft/world/entity/monster/Zoglin.java +++ b/net/minecraft/world/entity/monster/Zoglin.java @@ -14,8 +14,6 @@ import net.minecraft.network.syncher.SynchedEntityData; @@ -1919,19 +1925,20 @@ index 0dbc528bcad2b2f79585e2462a265d43fcbebe76..662b95d27f6630ec27fd88ca279e3954 import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.damagesource.DamageSource; -@@ -250,10 +248,7 @@ public class Zoglin extends Monster implements HoglinBase { +@@ -289,11 +287,8 @@ public class Zoglin extends Monster implements HoglinBase { @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("zoglinBrain"); + if (getRider() == null || !this.isControllable()) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.pop(); this.updateActivity(); } diff --git a/net/minecraft/world/entity/monster/breeze/Breeze.java b/net/minecraft/world/entity/monster/breeze/Breeze.java -index c12653070d62c44b97a07676f24caf7ab570cd2a..d91ce14cc39b1b6ccd558f53ed605d4c6a5acae5 100644 +index 4e47a1e6d1dcf15a316ff6bed6c03e9c42777853..793db0e9977fe64e7cdbe5b337deb6d8e32f0627 100644 --- a/net/minecraft/world/entity/monster/breeze/Breeze.java +++ b/net/minecraft/world/entity/monster/breeze/Breeze.java @@ -12,8 +12,6 @@ import net.minecraft.sounds.SoundEvent; @@ -1943,12 +1950,13 @@ index c12653070d62c44b97a07676f24caf7ab570cd2a..d91ce14cc39b1b6ccd558f53ed605d4c import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AnimationState; import net.minecraft.world.entity.Entity; -@@ -232,12 +230,8 @@ public class Breeze extends Monster { +@@ -232,13 +230,9 @@ public class Breeze extends Monster { @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("breezeBrain"); + if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.popPush("breezeActivityUpdate"); BreezeAi.updateActivity(this); @@ -1957,7 +1965,7 @@ index c12653070d62c44b97a07676f24caf7ab570cd2a..d91ce14cc39b1b6ccd558f53ed605d4c } diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java -index 567e7952efec69b4222563fae724d18a9902bb05..f66bd6cc4aab828e847b990b193be54cd0d0dc01 100644 +index 1b01d2b37dd221d5832cb68c072af9863aeb6868..775c11f658b81379784f7e5bdfdc8105b3410480 100644 --- a/net/minecraft/world/entity/monster/creaking/Creaking.java +++ b/net/minecraft/world/entity/monster/creaking/Creaking.java @@ -16,8 +16,6 @@ import net.minecraft.server.level.ServerLevel; @@ -1969,7 +1977,7 @@ index 567e7952efec69b4222563fae724d18a9902bb05..f66bd6cc4aab828e847b990b193be54c import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AnimationState; import net.minecraft.world.entity.Entity; -@@ -205,10 +203,7 @@ public class Creaking extends Monster { +@@ -236,10 +234,7 @@ public class Creaking extends Monster { @Override protected void customServerAiStep(ServerLevel level) { @@ -1981,7 +1989,7 @@ index 567e7952efec69b4222563fae724d18a9902bb05..f66bd6cc4aab828e847b990b193be54c } diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 0ecf8533f6cad081df8713856feb74db93028f71..bde6f9d9d1cc7a5ee8334ee9207afae304ddcfa9 100644 +index 6062167a25d9d66c0264624f0761bcb9d47f0c77..952fba6d141576089e563e829cae4a177f19d639 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -15,8 +15,6 @@ import net.minecraft.sounds.SoundEvents; @@ -1993,19 +2001,20 @@ index 0ecf8533f6cad081df8713856feb74db93028f71..bde6f9d9d1cc7a5ee8334ee9207afae3 import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -@@ -162,10 +160,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -208,11 +206,8 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("hoglinBrain"); + if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.pop(); HoglinAi.updateActivity(this); if (this.isConverting()) { this.timeInOverworld++; diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 8392ff1316f0c5be685a6ded7ccd08933c10ff4e..689f200554d8c03313b3d194f209c527f315c29a 100644 +index b5ab1ea7ebf1e1a67f51f53f92fbc2a84506174a..03b6640c95c86ea9f6219d6e39feffa4643dd648 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -16,8 +16,6 @@ import net.minecraft.tags.ItemTags; @@ -2017,19 +2026,20 @@ index 8392ff1316f0c5be685a6ded7ccd08933c10ff4e..689f200554d8c03313b3d194f209c527 import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -@@ -320,10 +318,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -359,11 +357,8 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("piglinBrain"); + if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.pop(); PiglinAi.updateActivity(this); super.customServerAiStep(level); } diff --git a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java -index 219978cb0341b2d691f44c1146707d875788881e..589a130f8855f464c1930a0aa8b54c0326a22e23 100644 +index 70ee15527fa6f30783d6a58bb767b18124f25c53..c4eb58d0b0c51e930f9cb72e1de0103902badba7 100644 --- a/net/minecraft/world/entity/monster/piglin/PiglinBrute.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinBrute.java @@ -8,8 +8,6 @@ import net.minecraft.server.level.ServerLevel; @@ -2041,19 +2051,20 @@ index 219978cb0341b2d691f44c1146707d875788881e..589a130f8855f464c1930a0aa8b54c03 import net.minecraft.world.DifficultyInstance; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.EntitySpawnReason; -@@ -115,10 +113,7 @@ public class PiglinBrute extends AbstractPiglin { +@@ -154,11 +152,8 @@ public class PiglinBrute extends AbstractPiglin { @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("piglinBruteBrain"); + if (getRider() == null || this.isControllable()) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.pop(); PiglinBruteAi.updateActivity(this); PiglinBruteAi.maybePlayActivitySound(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java -index 4a4cc7f9c95d4f4b6ad4948e3ed3504efbbcef15..dd6666bd8b8df4148a1557627ce2a6ddab245ed6 100644 +index bc691e17a974a3b4175ceb34f7e40291f1f1f83c..091b9cc338e37efbecdd4187a9824dae7bff2af9 100644 --- a/net/minecraft/world/entity/monster/warden/Warden.java +++ b/net/minecraft/world/entity/monster/warden/Warden.java @@ -27,8 +27,6 @@ import net.minecraft.tags.TagKey; @@ -2065,19 +2076,20 @@ index 4a4cc7f9c95d4f4b6ad4948e3ed3504efbbcef15..dd6666bd8b8df4148a1557627ce2a6dd import net.minecraft.world.DifficultyInstance; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.effect.MobEffectInstance; -@@ -279,10 +277,7 @@ public class Warden extends Monster implements VibrationSystem { +@@ -303,11 +301,8 @@ public class Warden extends Monster implements VibrationSystem { @Override protected void customServerAiStep(ServerLevel level) { - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("wardenBrain"); + if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider this.getBrain().tick(level, this); - profilerFiller.pop(); super.customServerAiStep(level); if ((this.tickCount + this.getId()) % 120 == 0) { applyDarknessAround(level, this.position(), this, 20); diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index e1e2bdb35866a8f32a41f6efd24ad77cf916b2e9..6cf2af33d22d3df8374746f5926f3f2d5093431d 100644 +index cab85afb6a460297511b0d391364670124d5a3f3..db5c287161c50bafd672b9cb439b3a06b1ff16d7 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java @@ -35,8 +35,6 @@ import net.minecraft.stats.Stats; @@ -2089,19 +2101,25 @@ index e1e2bdb35866a8f32a41f6efd24ad77cf916b2e9..6cf2af33d22d3df8374746f5926f3f2d import net.minecraft.world.Difficulty; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; -@@ -294,10 +292,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -393,8 +391,6 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } - protected void customServerAiStep(ServerLevel level, final boolean inactive) { + protected void customServerAiStep(ServerLevel level, boolean inactive) { // Purpur - Lobotomize stuck villagers - not final // Paper end - EAR 2 - ProfilerFiller profilerFiller = Profiler.get(); - profilerFiller.push("villagerBrain"); - if (!inactive) this.getBrain().tick(level, this); // Paper - EAR 2 + // Purpur start - Lobotomize stuck villagers + if (this.level().purpurConfig.villagerLobotomizeEnabled) { + // treat as inactive if lobotomized +@@ -407,7 +403,6 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + this.getBrain().tick(level, this); // Paper - EAR 2 + } + else if (this.isLobotomized && shouldRestock()) restock(); // Purpur - Lobotomize stuck villagers - profilerFiller.pop(); if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; } diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 623ecd274667a8f91d5694d3284d14b8432f4c7a..f3fcfbc5dcf3ead4b2826e8f09b0ff6c7450f945 100644 +index e37635e452a38140099ba0a1fd5fcc6e8eaea2cd..9a0cd86cffaaa974c0e4dfeec646cbb9a0a3431c 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -35,8 +35,6 @@ import net.minecraft.util.AbortableIterationConsumer; @@ -2113,7 +2131,7 @@ index 623ecd274667a8f91d5694d3284d14b8432f4c7a..f3fcfbc5dcf3ead4b2826e8f09b0ff6c import net.minecraft.world.DifficultyInstance; import net.minecraft.world.TickRateManager; import net.minecraft.world.damagesource.DamageSource; -@@ -215,7 +213,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -260,7 +258,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @Override public final List getEntitiesOfClass(final Class entityClass, final AABB boundingBox, final Predicate predicate) { @@ -2121,7 +2139,7 @@ index 623ecd274667a8f91d5694d3284d14b8432f4c7a..f3fcfbc5dcf3ead4b2826e8f09b0ff6c final List ret = new java.util.ArrayList<>(); ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(entityClass, null, boundingBox, ret, predicate); -@@ -225,7 +222,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -270,7 +267,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @Override public final List moonrise$getHardCollidingEntities(final Entity entity, final AABB box, final Predicate predicate) { @@ -2129,7 +2147,7 @@ index 623ecd274667a8f91d5694d3284d14b8432f4c7a..f3fcfbc5dcf3ead4b2826e8f09b0ff6c final List ret = new java.util.ArrayList<>(); ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getHardCollidingEntities(entity, box, ret, predicate); -@@ -1452,8 +1448,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1499,8 +1495,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl } protected void tickBlockEntities() { @@ -2138,7 +2156,7 @@ index 623ecd274667a8f91d5694d3284d14b8432f4c7a..f3fcfbc5dcf3ead4b2826e8f09b0ff6c this.tickingBlockEntities = true; if (!this.pendingBlockEntityTickers.isEmpty()) { this.blockEntityTickers.addAll(this.pendingBlockEntityTickers); -@@ -1483,7 +1477,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1530,7 +1524,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl this.blockEntityTickers.removeAll(toRemove); // Paper - Fix MC-117075 this.tickingBlockEntities = false; @@ -2146,7 +2164,7 @@ index 623ecd274667a8f91d5694d3284d14b8432f4c7a..f3fcfbc5dcf3ead4b2826e8f09b0ff6c this.spigotConfig.currentPrimedTnt = 0; // Spigot } -@@ -1735,7 +1728,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1782,7 +1775,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @Override public List getEntities(@Nullable Entity entity, AABB boundingBox, Predicate predicate) { @@ -2154,7 +2172,7 @@ index 623ecd274667a8f91d5694d3284d14b8432f4c7a..f3fcfbc5dcf3ead4b2826e8f09b0ff6c List list = Lists.newArrayList(); // Paper start - rewrite chunk system -@@ -1764,8 +1756,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1811,8 +1803,6 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl public void getEntities(final EntityTypeTest entityTypeTest, final AABB boundingBox, final Predicate predicate, final List into, final int maxCount) { @@ -2164,7 +2182,7 @@ index 623ecd274667a8f91d5694d3284d14b8432f4c7a..f3fcfbc5dcf3ead4b2826e8f09b0ff6c if (maxCount != Integer.MAX_VALUE) { ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemLevel)this).moonrise$getEntityLookup().getEntities(byType, boundingBox, into, predicate, maxCount); diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java -index 4f647507d06d45a65b4b1793219d90c65e110225..ccbeda714085118b4dddf9fac6f3de2ed7a6426e 100644 +index f0f5aa48af099c8244cd59da2c1dac6744a41abe..102d88fc2989f80a39826e50ee706d853bfb2c5e 100644 --- a/net/minecraft/world/level/NaturalSpawner.java +++ b/net/minecraft/world/level/NaturalSpawner.java @@ -23,8 +23,6 @@ import net.minecraft.tags.BlockTags; @@ -2196,7 +2214,7 @@ index 4f647507d06d45a65b4b1793219d90c65e110225..ccbeda714085118b4dddf9fac6f3de2e // Paper start - Add mobcaps commands diff --git a/net/minecraft/world/level/ServerExplosion.java b/net/minecraft/world/level/ServerExplosion.java -index 07e4025ca6c9c31905db2e6921138a0ded479dde..fa4695b7ee56724b4d47ce4da0a5aeb8b5467db4 100644 +index b80924fbe054b00fe5117df896358e330f41e993..1669c21534a453c9cf16b992df7a6bf276dea887 100644 --- a/net/minecraft/world/level/ServerExplosion.java +++ b/net/minecraft/world/level/ServerExplosion.java @@ -13,8 +13,6 @@ import net.minecraft.Util; @@ -2208,7 +2226,7 @@ index 07e4025ca6c9c31905db2e6921138a0ded479dde..fa4695b7ee56724b4d47ce4da0a5aeb8 import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -@@ -652,10 +650,7 @@ public class ServerExplosion implements Explosion { +@@ -669,10 +667,7 @@ public class ServerExplosion implements Explosion { List list = this.calculateExplodedPositions(); this.hurtEntities(); if (this.interactsWithBlocks()) { diff --git a/leaf-server/minecraft-patches/features/0006-Use-platform-math-functions.patch b/leaf-server/minecraft-patches/features/0007-Use-platform-math-functions.patch similarity index 98% rename from leaf-server/minecraft-patches/features/0006-Use-platform-math-functions.patch rename to leaf-server/minecraft-patches/features/0007-Use-platform-math-functions.patch index 256f08e2..eb854841 100644 --- a/leaf-server/minecraft-patches/features/0006-Use-platform-math-functions.patch +++ b/leaf-server/minecraft-patches/features/0007-Use-platform-math-functions.patch @@ -99,7 +99,7 @@ public class Main { ``` diff --git a/net/minecraft/util/Mth.java b/net/minecraft/util/Mth.java -index ab3a221c115992d0f4ea921aa92cf0976b815ff4..75da3011058918e1da6936522f19a2ccdb843d73 100644 +index e2602c6d817794616eb05a471077447804b835a1..5cf68a28b09f6f877667622c4df7c059951b553d 100644 --- a/net/minecraft/util/Mth.java +++ b/net/minecraft/util/Mth.java @@ -58,18 +58,15 @@ public class Mth { diff --git a/leaf-server/minecraft-patches/features/0007-Faster-floating-point-positive-modulo.patch b/leaf-server/minecraft-patches/features/0008-Faster-floating-point-positive-modulo.patch similarity index 93% rename from leaf-server/minecraft-patches/features/0007-Faster-floating-point-positive-modulo.patch rename to leaf-server/minecraft-patches/features/0008-Faster-floating-point-positive-modulo.patch index 77652834..f220b904 100644 --- a/leaf-server/minecraft-patches/features/0007-Faster-floating-point-positive-modulo.patch +++ b/leaf-server/minecraft-patches/features/0008-Faster-floating-point-positive-modulo.patch @@ -9,7 +9,7 @@ Gale - https://galemc.org The JMH benchmark of this patch can be found in SunBox's `FasterFloatingPointPositiveModulo` diff --git a/net/minecraft/util/Mth.java b/net/minecraft/util/Mth.java -index 75da3011058918e1da6936522f19a2ccdb843d73..1b60fa34e4d6a5c00a983bf94e4d16d1eb46c665 100644 +index 5cf68a28b09f6f877667622c4df7c059951b553d..c7547b66ea54af6e904c4ccdc68bc64dbd96720d 100644 --- a/net/minecraft/util/Mth.java +++ b/net/minecraft/util/Mth.java @@ -149,14 +149,26 @@ public class Mth { @@ -42,7 +42,7 @@ index 75da3011058918e1da6936522f19a2ccdb843d73..1b60fa34e4d6a5c00a983bf94e4d16d1 return number % multiple == 0; } diff --git a/net/minecraft/world/level/levelgen/blending/Blender.java b/net/minecraft/world/level/levelgen/blending/Blender.java -index 01e5b29d6e9a5c53c0e23b61ed0c1d7be1a0fe08..314a189e2099e3688fd23e7100120abea6886ccd 100644 +index 1e61bda5bed34eb8ed5727c528e218a1a1b72bd3..001b3cec50498186ab4f309118776c2ed6cce911 100644 --- a/net/minecraft/world/level/levelgen/blending/Blender.java +++ b/net/minecraft/world/level/levelgen/blending/Blender.java @@ -144,7 +144,7 @@ public class Blender { diff --git a/leaf-server/minecraft-patches/features/0008-Simpler-ShapelessRecipe-comparison-for-vanilla.patch b/leaf-server/minecraft-patches/features/0009-Simpler-ShapelessRecipe-comparison-for-vanilla.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0008-Simpler-ShapelessRecipe-comparison-for-vanilla.patch rename to leaf-server/minecraft-patches/features/0009-Simpler-ShapelessRecipe-comparison-for-vanilla.patch diff --git a/leaf-server/minecraft-patches/features/0009-Reduce-projectile-chunk-loading.patch b/leaf-server/minecraft-patches/features/0010-Reduce-projectile-chunk-loading.patch similarity index 97% rename from leaf-server/minecraft-patches/features/0009-Reduce-projectile-chunk-loading.patch rename to leaf-server/minecraft-patches/features/0010-Reduce-projectile-chunk-loading.patch index 8203eb83..126853bd 100644 --- a/leaf-server/minecraft-patches/features/0009-Reduce-projectile-chunk-loading.patch +++ b/leaf-server/minecraft-patches/features/0010-Reduce-projectile-chunk-loading.patch @@ -31,7 +31,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java -index ee16a05b8b2747ce95fcae1616c96143a5dec74e..36124bfd4189e35208875e971733889410242641 100644 +index 44166e077009ef0bdab95ed2df7c8252bf6bb87f..5daa37fc0e44d3c4f3755ec3d3d89213f6670de1 100644 --- a/net/minecraft/world/entity/projectile/Projectile.java +++ b/net/minecraft/world/entity/projectile/Projectile.java @@ -50,6 +50,55 @@ public abstract class Projectile extends Entity implements TraceableEntity { diff --git a/leaf-server/minecraft-patches/features/0010-Predict-Halloween.patch b/leaf-server/minecraft-patches/features/0011-Predict-Halloween.patch similarity index 90% rename from leaf-server/minecraft-patches/features/0010-Predict-Halloween.patch rename to leaf-server/minecraft-patches/features/0011-Predict-Halloween.patch index 10f426e9..819019e1 100644 --- a/leaf-server/minecraft-patches/features/0010-Predict-Halloween.patch +++ b/leaf-server/minecraft-patches/features/0011-Predict-Halloween.patch @@ -12,13 +12,14 @@ Cache the date result to prevent calculate in every call The JMH benchmark of this patch can be found in SunBox's `PredictHalloween` diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java -index 912b099a51269f92f250c7d6094ad41817749f93..a6487b63a277f7ca9681924850718f1dced746b1 100644 +index e54a956caa33f3ed343c5d160b1c763d6b981f50..c4985dd71a93670ee24e6f07f99b72ee1040eb99 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -245,11 +245,62 @@ public class Bat extends AmbientCreature { - } +@@ -330,11 +330,63 @@ public class Bat extends AmbientCreature { } + public static boolean isHalloweenSeason(Level level) { return level.purpurConfig.forceHalloweenSeason || isHalloween(); } // Purpur - Halloween options and optimizations ++ + // Gale start - predict Halloween + /** + * The 1-indexed month of the year that Halloween starts (inclusive). diff --git a/leaf-server/minecraft-patches/features/0011-Move-random-tick-random.patch b/leaf-server/minecraft-patches/features/0012-Move-random-tick-random.patch similarity index 83% rename from leaf-server/minecraft-patches/features/0011-Move-random-tick-random.patch rename to leaf-server/minecraft-patches/features/0012-Move-random-tick-random.patch index 00d6fda6..b0760e31 100644 --- a/leaf-server/minecraft-patches/features/0011-Move-random-tick-random.patch +++ b/leaf-server/minecraft-patches/features/0012-Move-random-tick-random.patch @@ -19,10 +19,10 @@ require it to be initialized earlier. By moving it to the superclass, we initialize it earlier, ensuring that it is available sooner. diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 1413511500ce8ae25cc4af1d54fc33c8912c24bc..0665c2ec275086b8c555c550af93dfef197fba07 100644 +index 9238db4c47d5297d992139988631ab38a5967a89..7b7794eb8f9a663bd6d4f6e27ddf907c0aed8c5a 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -834,8 +834,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -876,8 +876,6 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } // Paper start - optimise random ticking @@ -32,14 +32,14 @@ index 1413511500ce8ae25cc4af1d54fc33c8912c24bc..0665c2ec275086b8c555c550af93dfef final LevelChunkSection[] sections = chunk.getSections(); final int minSection = ca.spottedleaf.moonrise.common.util.WorldUtil.getMinSection((ServerLevel)(Object)this); diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 9f630dda781dd540ab5655bd7ce916949eeee61c..19a9b37bad1d465440047cbde9a00b12ba5d9a4b 100644 +index 9a0cd86cffaaa974c0e4dfeec646cbb9a0a3431c..29dd1231df15d9f8e91f4f259f704817f92f895d 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -168,6 +168,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -170,6 +170,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl private int tileTickPosition; public final Map explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here + public final ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom simpleRandom = new ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom(net.minecraft.world.level.levelgen.RandomSupport.generateUniqueSeed()); // Gale - Pufferfish - move random tick random - public CraftWorld getWorld() { - return this.world; + // Purpur start - Add adjustable breeding cooldown to config + private com.google.common.cache.Cache playerBreedingCooldowns; diff --git a/leaf-server/minecraft-patches/features/0012-Optimize-random-calls-in-chunk-ticking.patch b/leaf-server/minecraft-patches/features/0013-Optimize-random-calls-in-chunk-ticking.patch similarity index 97% rename from leaf-server/minecraft-patches/features/0012-Optimize-random-calls-in-chunk-ticking.patch rename to leaf-server/minecraft-patches/features/0013-Optimize-random-calls-in-chunk-ticking.patch index fc037015..23204e90 100644 --- a/leaf-server/minecraft-patches/features/0012-Optimize-random-calls-in-chunk-ticking.patch +++ b/leaf-server/minecraft-patches/features/0013-Optimize-random-calls-in-chunk-ticking.patch @@ -64,10 +64,10 @@ index 6020b71802babb35ef60aca65afe9c2612c05bb7..e53440bd5f0e659db0745a009540520f this.tickChunks(l); // Gale - Purpur - remove vanilla profiler } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 0665c2ec275086b8c555c550af93dfef197fba07..6bc70c1d53049a1f75268ab9944bfb1557ca74ee 100644 +index 7b7794eb8f9a663bd6d4f6e27ddf907c0aed8c5a..3507691e6f18b90464627617e11b2fcd36ce7f68 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -883,13 +883,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -925,13 +925,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } // Paper end - optimise random ticking @@ -84,7 +84,7 @@ index 0665c2ec275086b8c555c550af93dfef197fba07..6bc70c1d53049a1f75268ab9944bfb15 for (int i = 0; i < randomTickSpeed; i++) { if (simpleRandom.nextInt(48) == 0) { // Paper - optimise random ticking this.tickPrecipitation(this.getBlockRandomPos(minBlockX, 0, minBlockZ, 15)); -@@ -907,7 +909,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -949,7 +951,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe boolean isRaining = this.isRaining(); int minBlockX = pos.getMinBlockX(); int minBlockZ = pos.getMinBlockZ(); diff --git a/leaf-server/minecraft-patches/features/0013-Reduce-enderman-teleport-chunk-lookups.patch b/leaf-server/minecraft-patches/features/0014-Reduce-enderman-teleport-chunk-lookups.patch similarity index 94% rename from leaf-server/minecraft-patches/features/0013-Reduce-enderman-teleport-chunk-lookups.patch rename to leaf-server/minecraft-patches/features/0014-Reduce-enderman-teleport-chunk-lookups.patch index 9f584756..248a1e39 100644 --- a/leaf-server/minecraft-patches/features/0013-Reduce-enderman-teleport-chunk-lookups.patch +++ b/leaf-server/minecraft-patches/features/0014-Reduce-enderman-teleport-chunk-lookups.patch @@ -31,10 +31,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java -index 4edd94ac765d2ab107612504b67e6e07da609313..9b0235c50426accde002cbb0a09a992f13b05cd7 100644 +index fcdb3ee493e65bf002e78862f00061336e731ede..58887b2cc931892f96793edd7a7d1db22cb8686c 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -296,11 +296,19 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -330,11 +330,19 @@ public class EnderMan extends Monster implements NeutralMob { private boolean teleport(double x, double y, double z) { BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos(x, y, z); diff --git a/leaf-server/minecraft-patches/features/0014-Check-targeting-range-before-getting-visibility.patch b/leaf-server/minecraft-patches/features/0015-Check-targeting-range-before-getting-visibility.patch similarity index 94% rename from leaf-server/minecraft-patches/features/0014-Check-targeting-range-before-getting-visibility.patch rename to leaf-server/minecraft-patches/features/0015-Check-targeting-range-before-getting-visibility.patch index 3690c8b4..1e9e4ddf 100644 --- a/leaf-server/minecraft-patches/features/0014-Check-targeting-range-before-getting-visibility.patch +++ b/leaf-server/minecraft-patches/features/0015-Check-targeting-range-before-getting-visibility.patch @@ -31,10 +31,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/net/minecraft/world/entity/ai/targeting/TargetingConditions.java -index 2f8920d8ee765d057a22d76f24f7d7dc1b0b17ca..17a08a3af468093668a41f154c2beb69c6617efa 100644 +index 6f0fcaeaba2fec2ad944d63550f0c3e29bd9133c..398a97a72dca785204f6b7b8fc4abe5cd64de51e 100644 --- a/net/minecraft/world/entity/ai/targeting/TargetingConditions.java +++ b/net/minecraft/world/entity/ai/targeting/TargetingConditions.java -@@ -75,9 +75,18 @@ public class TargetingConditions { +@@ -79,9 +79,18 @@ public class TargetingConditions { } if (this.range > 0.0) { diff --git a/leaf-server/minecraft-patches/features/0015-Cache-on-climbable-check.patch b/leaf-server/minecraft-patches/features/0016-Cache-on-climbable-check.patch similarity index 90% rename from leaf-server/minecraft-patches/features/0015-Cache-on-climbable-check.patch rename to leaf-server/minecraft-patches/features/0016-Cache-on-climbable-check.patch index 4f95f747..2577e917 100644 --- a/leaf-server/minecraft-patches/features/0015-Cache-on-climbable-check.patch +++ b/leaf-server/minecraft-patches/features/0016-Cache-on-climbable-check.patch @@ -31,10 +31,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java -index ae2bb9a73106febfe5f0d090abd4252bbb5fd27e..eee9c41e40402e52b73f34a734b4cbdeb6cfbc22 100644 +index ca21597263cb430e2a5ae07e8cecfb0d53a270d2..baad463b434f76df9a345baf3406fc4cdbda4fa2 100644 --- a/io/papermc/paper/entity/activation/ActivationRange.java +++ b/io/papermc/paper/entity/activation/ActivationRange.java -@@ -221,7 +221,7 @@ public final class ActivationRange { +@@ -223,7 +223,7 @@ public final class ActivationRange { } // special cases. if (entity instanceof final LivingEntity living) { @@ -44,10 +44,10 @@ index ae2bb9a73106febfe5f0d090abd4252bbb5fd27e..eee9c41e40402e52b73f34a734b4cbde } if (entity instanceof final Mob mob && mob.getTarget() != null) { diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index c2f93f2e71ea5cab84a5821d952a6f90dc1068ed..bd22f0bca65be702a92641a95e944e43f882e440 100644 +index 9fee96683e2738745aedd57ee3665701ab682db5..031549e966e3a4bf08c5d2a40ed961b34879b360 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -2115,6 +2115,21 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -2179,6 +2179,21 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin return this.lastClimbablePos; } diff --git a/leaf-server/minecraft-patches/features/0016-Make-EntityCollisionContext-a-live-representation.patch b/leaf-server/minecraft-patches/features/0017-Make-EntityCollisionContext-a-live-representation.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0016-Make-EntityCollisionContext-a-live-representation.patch rename to leaf-server/minecraft-patches/features/0017-Make-EntityCollisionContext-a-live-representation.patch diff --git a/leaf-server/minecraft-patches/features/0017-Better-checking-for-useless-move-packets.patch b/leaf-server/minecraft-patches/features/0018-Better-checking-for-useless-move-packets.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0017-Better-checking-for-useless-move-packets.patch rename to leaf-server/minecraft-patches/features/0018-Better-checking-for-useless-move-packets.patch diff --git a/leaf-server/minecraft-patches/features/0018-Block-goal-does-not-load-chunks.patch b/leaf-server/minecraft-patches/features/0019-Block-goal-does-not-load-chunks.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0018-Block-goal-does-not-load-chunks.patch rename to leaf-server/minecraft-patches/features/0019-Block-goal-does-not-load-chunks.patch diff --git a/leaf-server/minecraft-patches/features/0019-Remove-lambda-from-ticking-guard.patch b/leaf-server/minecraft-patches/features/0020-Remove-lambda-from-ticking-guard.patch similarity index 93% rename from leaf-server/minecraft-patches/features/0019-Remove-lambda-from-ticking-guard.patch rename to leaf-server/minecraft-patches/features/0020-Remove-lambda-from-ticking-guard.patch index 9d6148ac..39d9c02b 100644 --- a/leaf-server/minecraft-patches/features/0019-Remove-lambda-from-ticking-guard.patch +++ b/leaf-server/minecraft-patches/features/0020-Remove-lambda-from-ticking-guard.patch @@ -33,10 +33,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 6bc70c1d53049a1f75268ab9944bfb1557ca74ee..a9c2f419200483673f6743ed94af110a8e875e71 100644 +index 3507691e6f18b90464627617e11b2fcd36ce7f68..8159f75106bd88412d8a04fe17c0fee3ed2d0a0d 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -788,7 +788,19 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -809,7 +809,19 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe entity.stopRiding(); } @@ -58,10 +58,10 @@ index 6bc70c1d53049a1f75268ab9944bfb1557ca74ee..a9c2f419200483673f6743ed94af110a } } diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index a4c915c8fdd167bfa2c5ef20c5ec7acc53c89726..a0254e85fccebb66ce02bd58f9d461addd8ad73d 100644 +index 29dd1231df15d9f8e91f4f259f704817f92f895d..40c2b4a5dc836055433f2402a63824dcdb451072 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -1489,10 +1489,10 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1536,10 +1536,10 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level().getWorld().getName(), entity.getX(), entity.getY(), entity.getZ()); MinecraftServer.LOGGER.error(msg, var6); getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, var6))); // Paper - ServerExceptionEvent diff --git a/leaf-server/minecraft-patches/features/0020-SIMD-support.patch b/leaf-server/minecraft-patches/features/0021-SIMD-support.patch similarity index 83% rename from leaf-server/minecraft-patches/features/0020-SIMD-support.patch rename to leaf-server/minecraft-patches/features/0021-SIMD-support.patch index bb1bb191..c961b520 100644 --- a/leaf-server/minecraft-patches/features/0020-SIMD-support.patch +++ b/leaf-server/minecraft-patches/features/0021-SIMD-support.patch @@ -13,11 +13,11 @@ As part of: Pufferfish (https://github.com/pufferfish-gg/Pufferfish) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index b63f1b27c60faf90b3d991b9a88b0642afa29a93..38266ae67c440e94d30cd16ab09232906e1e8d7d 100644 +index 95974662877830cb6251b769e01b2b9c70f77c60..b051ba05ee699242e8040cfde69d598edb346a65 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -190,6 +190,13 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics +@@ -200,6 +200,13 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + org.dreeam.leaf.command.LeafCommands.registerCommands(this); // Leaf - Leaf commands com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now + // Gale start - Pufferfish - SIMD support diff --git a/leaf-server/minecraft-patches/features/0021-Make-book-writing-configurable.patch b/leaf-server/minecraft-patches/features/0022-Make-book-writing-configurable.patch similarity index 92% rename from leaf-server/minecraft-patches/features/0021-Make-book-writing-configurable.patch rename to leaf-server/minecraft-patches/features/0022-Make-book-writing-configurable.patch index c0c3a1dd..76ab9941 100644 --- a/leaf-server/minecraft-patches/features/0021-Make-book-writing-configurable.patch +++ b/leaf-server/minecraft-patches/features/0022-Make-book-writing-configurable.patch @@ -22,10 +22,10 @@ you to easily disable books, should you want to preemptively remove this functionality before additional exploits are found. diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index ca13dd72f173be6714965c506f2d48dcd3c9e569..81d6bad5ef230de7852c79a607eb2f5aa32768da 100644 +index d6e96a191469c8b263031da18a2e519032dd79d7..57ed8c8d482ecd9573bf2a74cc0a453ede22c898 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1269,6 +1269,11 @@ public class ServerGamePacketListenerImpl +@@ -1292,6 +1292,11 @@ public class ServerGamePacketListenerImpl @Override public void handleEditBook(ServerboundEditBookPacket packet) { diff --git a/leaf-server/minecraft-patches/features/0022-Reduce-in-wall-checks.patch b/leaf-server/minecraft-patches/features/0023-Reduce-in-wall-checks.patch similarity index 92% rename from leaf-server/minecraft-patches/features/0022-Reduce-in-wall-checks.patch rename to leaf-server/minecraft-patches/features/0023-Reduce-in-wall-checks.patch index 303458d1..6f7faa3f 100644 --- a/leaf-server/minecraft-patches/features/0022-Reduce-in-wall-checks.patch +++ b/leaf-server/minecraft-patches/features/0023-Reduce-in-wall-checks.patch @@ -28,10 +28,10 @@ but is so much cheaper than the suffocation check that it's worth keeping it. diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index bd22f0bca65be702a92641a95e944e43f882e440..1b7d8a8838e9b75bc12ce4b9f30429110e9af913 100644 +index 031549e966e3a4bf08c5d2a40ed961b34879b360..cca89a4ab166d57212fb8b65c91babd9297aaee1 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -433,7 +433,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -438,7 +438,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.isAlive() && this.level() instanceof ServerLevel serverLevel1) { boolean flag = this instanceof Player; @@ -43,7 +43,7 @@ index bd22f0bca65be702a92641a95e944e43f882e440..1b7d8a8838e9b75bc12ce4b9f3042911 this.hurtServer(serverLevel1, this.damageSources().inWall(), 1.0F); } else if (flag && !serverLevel1.getWorldBorder().isWithinBounds(this.getBoundingBox())) { double d = serverLevel1.getWorldBorder().getDistanceToBorder(this) + serverLevel1.getWorldBorder().getDamageSafeZone(); -@@ -1399,6 +1402,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1431,6 +1434,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin return this.getHealth() <= 0.0F; } diff --git a/leaf-server/minecraft-patches/features/0023-Make-chat-order-verification-configurable.patch b/leaf-server/minecraft-patches/features/0024-Make-chat-order-verification-configurable.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0023-Make-chat-order-verification-configurable.patch rename to leaf-server/minecraft-patches/features/0024-Make-chat-order-verification-configurable.patch diff --git a/leaf-server/minecraft-patches/features/0024-Make-ender-dragon-respawn-attempt-after-placing-end-.patch b/leaf-server/minecraft-patches/features/0025-Make-ender-dragon-respawn-attempt-after-placing-end-.patch similarity index 96% rename from leaf-server/minecraft-patches/features/0024-Make-ender-dragon-respawn-attempt-after-placing-end-.patch rename to leaf-server/minecraft-patches/features/0025-Make-ender-dragon-respawn-attempt-after-placing-end-.patch index bb5c1d97..6f2a4911 100644 --- a/leaf-server/minecraft-patches/features/0024-Make-ender-dragon-respawn-attempt-after-placing-end-.patch +++ b/leaf-server/minecraft-patches/features/0025-Make-ender-dragon-respawn-attempt-after-placing-end-.patch @@ -29,7 +29,7 @@ search to attempt respawning the ender dragon whenever a player places an end crystal. diff --git a/net/minecraft/world/item/EndCrystalItem.java b/net/minecraft/world/item/EndCrystalItem.java -index 05ec512839898f96d9769bb0d00f6ba11dda0c4b..49f94f242a0906e74eb58313cf095a0b04c304c4 100644 +index 6e4a3c9c090a68bf5785a01d815c275411859c7b..0db35674726e3039f2c20aed1993d6d3843f8d29 100644 --- a/net/minecraft/world/item/EndCrystalItem.java +++ b/net/minecraft/world/item/EndCrystalItem.java @@ -49,10 +49,12 @@ public class EndCrystalItem extends Item { diff --git a/leaf-server/minecraft-patches/features/0025-Make-saving-fireworks-configurable.patch b/leaf-server/minecraft-patches/features/0026-Make-saving-fireworks-configurable.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0025-Make-saving-fireworks-configurable.patch rename to leaf-server/minecraft-patches/features/0026-Make-saving-fireworks-configurable.patch diff --git a/leaf-server/minecraft-patches/features/0026-Reduce-hopper-item-checks.patch b/leaf-server/minecraft-patches/features/0027-Reduce-hopper-item-checks.patch similarity index 97% rename from leaf-server/minecraft-patches/features/0026-Reduce-hopper-item-checks.patch rename to leaf-server/minecraft-patches/features/0027-Reduce-hopper-item-checks.patch index 9191909b..6e41a972 100644 --- a/leaf-server/minecraft-patches/features/0026-Reduce-hopper-item-checks.patch +++ b/leaf-server/minecraft-patches/features/0027-Reduce-hopper-item-checks.patch @@ -17,10 +17,10 @@ Licensed under: MIT (https://opensource.org/licenses/MIT) Only do an item "suck in" action once per second diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java -index 51804b611f469f2ab53e455e8c633b867b00cc88..fcb1f6806908eb66592dc52f2b57286498cf7032 100644 +index d650d4f34fde0682ab76360408f7ff6a7d4b4c3a..7dc97fccfd329253e0f6532d1cc2c06264674e15 100644 --- a/net/minecraft/world/entity/item/ItemEntity.java +++ b/net/minecraft/world/entity/item/ItemEntity.java -@@ -148,7 +148,13 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -154,7 +154,13 @@ public class ItemEntity extends Entity implements TraceableEntity { } // CraftBukkit end this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause @@ -34,7 +34,7 @@ index 51804b611f469f2ab53e455e8c633b867b00cc88..fcb1f6806908eb66592dc52f2b572864 } // Paper end - EAR 2 -@@ -232,9 +238,31 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -238,9 +244,31 @@ public class ItemEntity extends Entity implements TraceableEntity { } // CraftBukkit end this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); // CraftBukkit - add Bukkit remove cause diff --git a/leaf-server/minecraft-patches/features/0027-Reduce-villager-item-re-pickup.patch b/leaf-server/minecraft-patches/features/0028-Reduce-villager-item-re-pickup.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0027-Reduce-villager-item-re-pickup.patch rename to leaf-server/minecraft-patches/features/0028-Reduce-villager-item-re-pickup.patch diff --git a/leaf-server/minecraft-patches/features/0028-Variable-entity-wake-up-duration.patch b/leaf-server/minecraft-patches/features/0029-Variable-entity-wake-up-duration.patch similarity index 97% rename from leaf-server/minecraft-patches/features/0028-Variable-entity-wake-up-duration.patch rename to leaf-server/minecraft-patches/features/0029-Variable-entity-wake-up-duration.patch index 14b3b3af..6591706a 100644 --- a/leaf-server/minecraft-patches/features/0028-Variable-entity-wake-up-duration.patch +++ b/leaf-server/minecraft-patches/features/0029-Variable-entity-wake-up-duration.patch @@ -9,7 +9,7 @@ Gale - https://galemc.org TODO: Replace random of wakeUpDurationRandom if needed. diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java -index eee9c41e40402e52b73f34a734b4cbdeb6cfbc22..63ff39f3db2e695c8a14b021045c17f6d3d2f23d 100644 +index baad463b434f76df9a345baf3406fc4cdbda4fa2..0a628a5da0380d1cb0add600629bb221c3631a6b 100644 --- a/io/papermc/paper/entity/activation/ActivationRange.java +++ b/io/papermc/paper/entity/activation/ActivationRange.java @@ -59,27 +59,41 @@ public final class ActivationRange { diff --git a/leaf-server/minecraft-patches/features/0029-Do-not-process-chat-commands-before-player-has-joine.patch b/leaf-server/minecraft-patches/features/0030-Do-not-process-chat-commands-before-player-has-joine.patch similarity index 90% rename from leaf-server/minecraft-patches/features/0029-Do-not-process-chat-commands-before-player-has-joine.patch rename to leaf-server/minecraft-patches/features/0030-Do-not-process-chat-commands-before-player-has-joine.patch index e6ba981b..521e9aa8 100644 --- a/leaf-server/minecraft-patches/features/0029-Do-not-process-chat-commands-before-player-has-joine.patch +++ b/leaf-server/minecraft-patches/features/0030-Do-not-process-chat-commands-before-player-has-joine.patch @@ -13,7 +13,7 @@ As part of: EmpireCraft (https://github.com/starlis/empirecraft) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 822691293834c4da31adb2573fbc87467db2daa5..917908e69154c5c5c9f847ae47548ee3d9221bc2 100644 +index cdeac61ab3322e1dc375d1496d088407885df6b1..3ef933e32bbc1b1bfd37b05eb39061b40af8f0c4 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -424,6 +424,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -25,10 +25,10 @@ index 822691293834c4da31adb2573fbc87467db2daa5..917908e69154c5c5c9f847ae47548ee3 public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public @Nullable org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 81d6bad5ef230de7852c79a607eb2f5aa32768da..08c0b02e8f70dfc349da2b534435b5f09f99e2b8 100644 +index 57ed8c8d482ecd9573bf2a74cc0a453ede22c898..c6efe5551ee1c8b93af2abf620d1e1b47168d58e 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2443,7 +2443,7 @@ public class ServerGamePacketListenerImpl +@@ -2524,7 +2524,7 @@ public class ServerGamePacketListenerImpl this.disconnectAsync(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper - add proper async disconnect } else if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN) { // CraftBukkit - dead men tell no tales this.send(new ClientboundSystemChatPacket(Component.translatable("chat.disabled.options").withStyle(ChatFormatting.RED), false)); @@ -38,7 +38,7 @@ index 81d6bad5ef230de7852c79a607eb2f5aa32768da..08c0b02e8f70dfc349da2b534435b5f0 // CraftBukkit start if (sync) { diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 33b1a6fdf169001093642cc8200d2789e80692b0..c0129b6e5c74a5412546c167fb03b705686c996f 100644 +index 6c4aaa63f1171df770d97aca47a84ce95bb2d0d0..846dc90d2722695757cc9213b19b83d8f6c0dd6f 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -335,6 +335,8 @@ public abstract class PlayerList { diff --git a/leaf-server/minecraft-patches/features/0030-Do-not-log-invalid-statistics.patch b/leaf-server/minecraft-patches/features/0031-Do-not-log-invalid-statistics.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0030-Do-not-log-invalid-statistics.patch rename to leaf-server/minecraft-patches/features/0031-Do-not-log-invalid-statistics.patch diff --git a/leaf-server/minecraft-patches/features/0031-Do-not-log-empty-message-warnings.patch b/leaf-server/minecraft-patches/features/0032-Do-not-log-empty-message-warnings.patch similarity index 89% rename from leaf-server/minecraft-patches/features/0031-Do-not-log-empty-message-warnings.patch rename to leaf-server/minecraft-patches/features/0032-Do-not-log-empty-message-warnings.patch index a1d8480c..a27efa0f 100644 --- a/leaf-server/minecraft-patches/features/0031-Do-not-log-empty-message-warnings.patch +++ b/leaf-server/minecraft-patches/features/0032-Do-not-log-empty-message-warnings.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 08c0b02e8f70dfc349da2b534435b5f09f99e2b8..7b4eb3773bc88cc5b5287b55388a4dab2a2f562b 100644 +index c6efe5551ee1c8b93af2abf620d1e1b47168d58e..6c6e13e1103e1383e15b0cb062d57226dd0810ec 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2525,7 +2525,7 @@ public class ServerGamePacketListenerImpl +@@ -2606,7 +2606,7 @@ public class ServerGamePacketListenerImpl // CraftBukkit start String rawMessage = message.signedContent(); if (rawMessage.isEmpty()) { diff --git a/leaf-server/minecraft-patches/features/0032-Do-not-log-ignored-advancements.patch b/leaf-server/minecraft-patches/features/0033-Do-not-log-ignored-advancements.patch similarity index 96% rename from leaf-server/minecraft-patches/features/0032-Do-not-log-ignored-advancements.patch rename to leaf-server/minecraft-patches/features/0033-Do-not-log-ignored-advancements.patch index 59a14d2e..0e588596 100644 --- a/leaf-server/minecraft-patches/features/0032-Do-not-log-ignored-advancements.patch +++ b/leaf-server/minecraft-patches/features/0033-Do-not-log-ignored-advancements.patch @@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/PlayerAdvancements.java b/net/minecraft/server/PlayerAdvancements.java -index fdeca41d40705f28864ce4443d01cd872c9d51b0..63c32ae544d87177c9b3e1f1b73eeb9be904eebf 100644 +index 8edff6b7e6605e08277a77f5854d2483bffe5f1c..9ecc19b8a7d4e6b27335b542308f78e5005b0e15 100644 --- a/net/minecraft/server/PlayerAdvancements.java +++ b/net/minecraft/server/PlayerAdvancements.java @@ -147,7 +147,7 @@ public class PlayerAdvancements { diff --git a/leaf-server/minecraft-patches/features/0033-Do-not-log-setBlock-in-far-chunks.patch b/leaf-server/minecraft-patches/features/0034-Do-not-log-setBlock-in-far-chunks.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0033-Do-not-log-setBlock-in-far-chunks.patch rename to leaf-server/minecraft-patches/features/0034-Do-not-log-setBlock-in-far-chunks.patch diff --git a/leaf-server/minecraft-patches/features/0034-Do-not-log-unrecognized-recipes.patch b/leaf-server/minecraft-patches/features/0035-Do-not-log-unrecognized-recipes.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0034-Do-not-log-unrecognized-recipes.patch rename to leaf-server/minecraft-patches/features/0035-Do-not-log-unrecognized-recipes.patch diff --git a/leaf-server/minecraft-patches/features/0035-Do-not-log-expired-message-warnings.patch b/leaf-server/minecraft-patches/features/0036-Do-not-log-expired-message-warnings.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0035-Do-not-log-expired-message-warnings.patch rename to leaf-server/minecraft-patches/features/0036-Do-not-log-expired-message-warnings.patch diff --git a/leaf-server/minecraft-patches/features/0036-Do-not-log-Not-Secure-marker.patch b/leaf-server/minecraft-patches/features/0037-Do-not-log-Not-Secure-marker.patch similarity index 90% rename from leaf-server/minecraft-patches/features/0036-Do-not-log-Not-Secure-marker.patch rename to leaf-server/minecraft-patches/features/0037-Do-not-log-Not-Secure-marker.patch index 3641843a..61d4772f 100644 --- a/leaf-server/minecraft-patches/features/0036-Do-not-log-Not-Secure-marker.patch +++ b/leaf-server/minecraft-patches/features/0037-Do-not-log-Not-Secure-marker.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index c0129b6e5c74a5412546c167fb03b705686c996f..0509c3b79a01a18ddb1a6ed41c1668ee5d3c50e7 100644 +index 846dc90d2722695757cc9213b19b83d8f6c0dd6f..5e6dea9ea487ffdb9be0e194dd4c4857cc0070cf 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1256,7 +1256,7 @@ public abstract class PlayerList { +@@ -1294,7 +1294,7 @@ public abstract class PlayerList { public void broadcastChatMessage(PlayerChatMessage message, Predicate shouldFilterMessageTo, @Nullable ServerPlayer sender, ChatType.Bound boundChatType, @Nullable Function unsignedFunction) { // Paper end boolean flag = this.verifyChatTrusted(message); diff --git a/leaf-server/minecraft-patches/features/0037-Do-not-log-disconnections-with-null-id.patch b/leaf-server/minecraft-patches/features/0038-Do-not-log-disconnections-with-null-id.patch similarity index 95% rename from leaf-server/minecraft-patches/features/0037-Do-not-log-disconnections-with-null-id.patch rename to leaf-server/minecraft-patches/features/0038-Do-not-log-disconnections-with-null-id.patch index b5c0489c..c409df2e 100644 --- a/leaf-server/minecraft-patches/features/0037-Do-not-log-disconnections-with-null-id.patch +++ b/leaf-server/minecraft-patches/features/0038-Do-not-log-disconnections-with-null-id.patch @@ -17,7 +17,7 @@ Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) This can help to hide annoying scanning bots from showing up in console. diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index ebf4d4516233c002b33084f1679044b23869d848..5bac1c0ba691e516f2d603583971df7fe7ac212c 100644 +index 20ba45054c243fbb85e50cf0bdf75648730cb0bc..a9864c7619751f89f81434823538dc5658047fb9 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -124,6 +124,15 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, diff --git a/leaf-server/minecraft-patches/features/0038-Do-not-log-run-as-root-warning.patch b/leaf-server/minecraft-patches/features/0039-Do-not-log-run-as-root-warning.patch similarity index 94% rename from leaf-server/minecraft-patches/features/0038-Do-not-log-run-as-root-warning.patch rename to leaf-server/minecraft-patches/features/0039-Do-not-log-run-as-root-warning.patch index 28a06993..378070de 100644 --- a/leaf-server/minecraft-patches/features/0038-Do-not-log-run-as-root-warning.patch +++ b/leaf-server/minecraft-patches/features/0039-Do-not-log-run-as-root-warning.patch @@ -41,10 +41,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 38266ae67c440e94d30cd16ab09232906e1e8d7d..e7e4262981bcbf75a5c6a76f4588c91de15bf975 100644 +index b051ba05ee699242e8040cfde69d598edb346a65..e527909f361ef27ce1f0cc17e4ebf96a9c4887ca 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -142,7 +142,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -143,7 +143,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface } // Paper start - detect running as root diff --git a/leaf-server/minecraft-patches/features/0039-Do-not-log-offline-mode-warning.patch b/leaf-server/minecraft-patches/features/0040-Do-not-log-offline-mode-warning.patch similarity index 94% rename from leaf-server/minecraft-patches/features/0039-Do-not-log-offline-mode-warning.patch rename to leaf-server/minecraft-patches/features/0040-Do-not-log-offline-mode-warning.patch index bb7e4ba8..0ffaa98f 100644 --- a/leaf-server/minecraft-patches/features/0039-Do-not-log-offline-mode-warning.patch +++ b/leaf-server/minecraft-patches/features/0040-Do-not-log-offline-mode-warning.patch @@ -41,10 +41,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index e7e4262981bcbf75a5c6a76f4588c91de15bf975..9c8d88e81ad9d06966bcec0ef134c8e658b9b51e 100644 +index e527909f361ef27ce1f0cc17e4ebf96a9c4887ca..c5b6c892a029bdd12008a0212413cf5d9e6a1a69 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -253,7 +253,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -287,7 +287,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface String proxyFlavor = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "Velocity" : "BungeeCord"; String proxyLink = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "https://docs.papermc.io/velocity/security" : "http://www.spigotmc.org/wiki/firewall-guide/"; // Paper end - Add Velocity IP Forwarding Support diff --git a/leaf-server/minecraft-patches/features/0040-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/leaf-server/minecraft-patches/features/0041-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0040-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to leaf-server/minecraft-patches/features/0041-Fix-outdated-server-showing-in-ping-before-server-fu.patch diff --git a/leaf-server/minecraft-patches/features/0041-Fix-MC-238526.patch b/leaf-server/minecraft-patches/features/0042-Fix-MC-238526.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0041-Fix-MC-238526.patch rename to leaf-server/minecraft-patches/features/0042-Fix-MC-238526.patch diff --git a/leaf-server/minecraft-patches/features/0042-Fix-MC-121706.patch b/leaf-server/minecraft-patches/features/0043-Fix-MC-121706.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0042-Fix-MC-121706.patch rename to leaf-server/minecraft-patches/features/0043-Fix-MC-121706.patch diff --git a/leaf-server/minecraft-patches/features/0043-Make-arrow-movement-resetting-despawn-counter-config.patch b/leaf-server/minecraft-patches/features/0044-Make-arrow-movement-resetting-despawn-counter-config.patch similarity index 94% rename from leaf-server/minecraft-patches/features/0043-Make-arrow-movement-resetting-despawn-counter-config.patch rename to leaf-server/minecraft-patches/features/0044-Make-arrow-movement-resetting-despawn-counter-config.patch index 3873ff46..32a9ea66 100644 --- a/leaf-server/minecraft-patches/features/0043-Make-arrow-movement-resetting-despawn-counter-config.patch +++ b/leaf-server/minecraft-patches/features/0044-Make-arrow-movement-resetting-despawn-counter-config.patch @@ -42,10 +42,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/world/entity/projectile/AbstractArrow.java b/net/minecraft/world/entity/projectile/AbstractArrow.java -index 11adb3eacce9d46f15e6c5216e9b2494df158baf..fe738894f82480c6a7c2ff8fde895daaa0ba8bc6 100644 +index 92295796823d9b7595a85754f429f25bda65cfdd..9874c20c2c1b0ebdbaa58f719ddefdac463accbe 100644 --- a/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -349,7 +349,7 @@ public abstract class AbstractArrow extends Projectile { +@@ -350,7 +350,7 @@ public abstract class AbstractArrow extends Projectile { this.setInGround(false); Vec3 deltaMovement = this.getDeltaMovement(); this.setDeltaMovement(deltaMovement.multiply(this.random.nextFloat() * 0.2F, this.random.nextFloat() * 0.2F, this.random.nextFloat() * 0.2F)); diff --git a/leaf-server/minecraft-patches/features/0044-Make-logging-login-locations-configurable.patch b/leaf-server/minecraft-patches/features/0045-Make-logging-login-locations-configurable.patch similarity index 88% rename from leaf-server/minecraft-patches/features/0044-Make-logging-login-locations-configurable.patch rename to leaf-server/minecraft-patches/features/0045-Make-logging-login-locations-configurable.patch index a90a2e55..ccea40b7 100644 --- a/leaf-server/minecraft-patches/features/0044-Make-logging-login-locations-configurable.patch +++ b/leaf-server/minecraft-patches/features/0045-Make-logging-login-locations-configurable.patch @@ -13,13 +13,13 @@ As part of: JettPack (https://gitlab.com/Titaniumtown/JettPack) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 0509c3b79a01a18ddb1a6ed41c1668ee5d3c50e7..f4a73d3f56d6a10493752653bd50c8caeda63a94 100644 +index 5e6dea9ea487ffdb9be0e194dd4c4857cc0070cf..04d58f375aa31e308d88f2f663ac6a48bc9a868e 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -403,7 +403,13 @@ public abstract class PlayerList { - scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); +@@ -404,7 +404,13 @@ public abstract class PlayerList { } // Paper end - Configurable player collision + org.purpurmc.purpur.task.BossBarTask.addToAll(player); // Purpur - Implement TPSBar + if (org.galemc.gale.configuration.GaleGlobalConfiguration.get().logToConsole.playerLoginLocations) { // Gale - JettPack - make logging login location configurable PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), loggableAddress, player.getId(), serverLevel.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ()); + // Gale start - JettPack - make logging login location configurable diff --git a/leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch b/leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch similarity index 92% rename from leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch rename to leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch index 88535dee..3707a630 100644 --- a/leaf-server/minecraft-patches/features/0045-Reduce-array-allocations.patch +++ b/leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch @@ -153,10 +153,10 @@ index 5df8ee3955593e70f0e67e91431e464d177bdeeb..b7581796dda77bca66c03e421f2a83a9 if (!itemBySlot.isEmpty()) { list.add(Pair.of(equipmentSlot, itemBySlot.copy())); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index a9c2f419200483673f6743ed94af110a8e875e71..617eb1b9d30d499124576c5d7cb5152571cc6b84 100644 +index 8159f75106bd88412d8a04fe17c0fee3ed2d0a0d..4015e93837ced87936fb3a868ff8186d9d5c2efc 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1228,7 +1228,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1324,7 +1324,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public static List getCurrentlyTickingEntities() { Entity ticking = currentlyTickingEntity.get(); @@ -166,10 +166,10 @@ index a9c2f419200483673f6743ed94af110a8e875e71..617eb1b9d30d499124576c5d7cb51525 return ret; } diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 917908e69154c5c5c9f847ae47548ee3d9221bc2..e4976eff4d18a1a1a752956c7e214122ddb05401 100644 +index 3ef933e32bbc1b1bfd37b05eb39061b40af8f0c4..1f39e60b3e91018ded0b2e172e565d449337890e 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1104,7 +1104,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1124,7 +1124,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.getInventory().getNonEquipmentItems().set(i, net.minecraft.world.item.ItemStack.EMPTY); } } @@ -179,10 +179,10 @@ index 917908e69154c5c5c9f847ae47548ee3d9221bc2..e4976eff4d18a1a1a752956c7e214122 this.getInventory().equipment.set(value, net.minecraft.world.item.ItemStack.EMPTY); } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 7b4eb3773bc88cc5b5287b55388a4dab2a2f562b..a2e43621a9ad2eb7eef0b4a5d7c9bf0f627b9bc9 100644 +index 6c6e13e1103e1383e15b0cb062d57226dd0810ec..2c7f35ec3276f420875cf52596ada42b25fe64c8 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2795,7 +2795,7 @@ public class ServerGamePacketListenerImpl +@@ -2879,7 +2879,7 @@ public class ServerGamePacketListenerImpl // SPIGOT-7136 - Allays if (target instanceof net.minecraft.world.entity.animal.allay.Allay || target instanceof net.minecraft.world.entity.animal.horse.AbstractHorse) { // Paper - Fix horse armor desync ServerGamePacketListenerImpl.this.send(new net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket( @@ -231,10 +231,10 @@ index 3eea236bd1fd401fefdf7c5cc553a3db335029c7..3739272cbc73b7c4f15a2fbe874905cf if (!itemBySlot.isEmpty()) { newMob.setItemSlot(equipmentSlot, itemBySlot.copyAndClear()); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index f22af336ac2949a91a6aebde6eaf4fef8545cb59..e81774a2fbcafb5909b966f71d31379c8b5a7426 100644 +index 04425c357eedda8049d3e1780011b274ce3ec575..0c19cba4dd93df79d24d9e50ae538022dedf6724 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -3076,7 +3076,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3118,7 +3118,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } private boolean attemptToShearEquipment(Player player, InteractionHand hand, ItemStack stack, Mob mob) { @@ -289,10 +289,10 @@ index b383836c200ca9f7bd84639367aa81b57868fb25..3af4a6dcc81afaf2860325fe5852c9a9 private static Map createForAllSlots(List equipmentSlots, float dropChance) { diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 1b7d8a8838e9b75bc12ce4b9f30429110e9af913..82354cc62df5b7793ef13c6731d84457cee42092 100644 +index cca89a4ab166d57212fb8b65c91babd9297aaee1..b813bf88dc3e6add77e060df731211d1c57e7e69 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -3358,7 +3358,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3437,7 +3437,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin Map equipmentChanges = null; // Paper end - EntityEquipmentChangedEvent @@ -301,7 +301,7 @@ index 1b7d8a8838e9b75bc12ce4b9f30429110e9af913..82354cc62df5b7793ef13c6731d84457 ItemStack itemStack = this.lastEquipmentItems.get(equipmentSlot); ItemStack itemBySlot = this.getItemBySlot(equipmentSlot); if (this.equipmentHasChanged(itemStack, itemBySlot)) { -@@ -3630,7 +3630,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3763,7 +3763,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin public boolean canGlide() { if (!this.onGround() && !this.isPassenger() && !this.hasEffect(MobEffects.LEVITATION)) { @@ -311,10 +311,10 @@ index 1b7d8a8838e9b75bc12ce4b9f30429110e9af913..82354cc62df5b7793ef13c6731d84457 return true; } diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index c620341e33dc1805f1c033a969d0a15e1484c176..4aec1fd4efbb3dd139542c55d06503716723f326 100644 +index b2026e29a0633f971bf551fad8be7161bb6293f3..eef6b4b6ccc02e23c5a2707eaeb3566e32e47362 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -339,7 +339,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -362,7 +362,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab if (this.xpReward > 0) { int i = this.xpReward; @@ -323,7 +323,7 @@ index c620341e33dc1805f1c033a969d0a15e1484c176..4aec1fd4efbb3dd139542c55d0650371 if (equipmentSlot.canIncreaseExperience()) { ItemStack itemBySlot = this.getItemBySlot(equipmentSlot); if (!itemBySlot.isEmpty() && this.dropChances.byEquipment(equipmentSlot) <= 1.0F) { -@@ -963,7 +963,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -988,7 +988,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab protected void dropCustomDeathLoot(ServerLevel level, DamageSource damageSource, boolean recentlyHit) { super.dropCustomDeathLoot(level, damageSource, recentlyHit); @@ -332,7 +332,7 @@ index c620341e33dc1805f1c033a969d0a15e1484c176..4aec1fd4efbb3dd139542c55d0650371 if (this.shouldSkipLoot(equipmentSlot)) continue; // Paper ItemStack itemBySlot = this.getItemBySlot(equipmentSlot); float f = this.dropChances.byEquipment(equipmentSlot); -@@ -1007,7 +1007,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1032,7 +1032,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab public Set dropPreservedEquipment(ServerLevel level, Predicate filter) { Set set = new HashSet<>(); @@ -341,7 +341,7 @@ index c620341e33dc1805f1c033a969d0a15e1484c176..4aec1fd4efbb3dd139542c55d0650371 ItemStack itemBySlot = this.getItemBySlot(equipmentSlot); if (!itemBySlot.isEmpty()) { if (!filter.test(itemBySlot)) { -@@ -1135,7 +1135,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1160,7 +1160,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab protected void populateDefaultEquipmentEnchantments(ServerLevelAccessor level, RandomSource random, DifficultyInstance difficulty) { this.enchantSpawnedWeapon(level, random, difficulty); @@ -350,7 +350,7 @@ index c620341e33dc1805f1c033a969d0a15e1484c176..4aec1fd4efbb3dd139542c55d0650371 if (equipmentSlot.getType() == EquipmentSlot.Type.HUMANOID_ARMOR) { this.enchantSpawnedArmor(level, random, equipmentSlot, difficulty); } -@@ -1552,7 +1552,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1567,7 +1567,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab protected void removeAfterChangingDimensions() { super.removeAfterChangingDimensions(); @@ -360,10 +360,10 @@ index c620341e33dc1805f1c033a969d0a15e1484c176..4aec1fd4efbb3dd139542c55d0650371 if (!itemBySlot.isEmpty()) { itemBySlot.setCount(0); diff --git a/net/minecraft/world/entity/decoration/ArmorStand.java b/net/minecraft/world/entity/decoration/ArmorStand.java -index 5ee368580d878a3845349c3d50cc0dc549c42cab..9952e84dd94b8773c5ba8fcc4526e7714ebc2136 100644 +index 83fdd22eeb141079e05018ebf5cef70e7eb78726..95d835ce4c733cbea457427a0d065c05a59704d9 100644 --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -456,7 +456,7 @@ public class ArmorStand extends LivingEntity { +@@ -460,7 +460,7 @@ public class ArmorStand extends LivingEntity { this.playBrokenSound(); // this.dropAllDeathLoot(level, damageSource); // CraftBukkit - moved down @@ -372,7 +372,7 @@ index 5ee368580d878a3845349c3d50cc0dc549c42cab..9952e84dd94b8773c5ba8fcc4526e771 ItemStack itemStack = this.equipment.get(equipmentSlot); // Paper - move equipment removal past event call if (!itemStack.isEmpty()) { this.drops.add(new DefaultDrop(itemStack, stack -> Block.popResource(this.level(), this.blockPosition().above(), stack))); // CraftBukkit - add to drops // Paper - Restore vanilla drops behavior; mirror so we can destroy it later - though this call site was safe & spawn drops correctly} -@@ -465,7 +465,7 @@ public class ArmorStand extends LivingEntity { +@@ -469,7 +469,7 @@ public class ArmorStand extends LivingEntity { // Paper start - move equipment removal past event call org.bukkit.event.entity.EntityDeathEvent event = this.dropAllDeathLoot(level, damageSource); if (!event.isCancelled()) { @@ -382,10 +382,10 @@ index 5ee368580d878a3845349c3d50cc0dc549c42cab..9952e84dd94b8773c5ba8fcc4526e771 } } diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index e5e08dbefead90e9fe2bb05e4f0257f7aa4c0686..5160c349f1ace36d6de11f23e0f957f37fc19165 100644 +index d72e338232b95826b63d784ac0731f5a20bf8dcb..84e4b4b97e00b65ea5258f5b35d39833942f3757 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -413,7 +413,7 @@ public abstract class Player extends LivingEntity { +@@ -453,7 +453,7 @@ public abstract class Player extends LivingEntity { } private boolean isEquipped(Item item) { @@ -395,10 +395,10 @@ index e5e08dbefead90e9fe2bb05e4f0257f7aa4c0686..5160c349f1ace36d6de11f23e0f957f3 Equippable equippable = itemBySlot.get(DataComponents.EQUIPPABLE); if (itemBySlot.is(item) && equippable != null && equippable.slot() == equipmentSlot) { diff --git a/net/minecraft/world/item/ItemStack.java b/net/minecraft/world/item/ItemStack.java -index da16f4831c875e07c25d7ed041bed493db614658..951c86278e8cb5cd801a5db2ebfabef8c6d813ef 100644 +index d3892cc9ef3ab66a45fe3ab72e8a5ef8b904b7c0..08ae689a36d7c48ffa71fbcea20ef0b733d918ba 100644 --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java -@@ -1149,7 +1149,7 @@ public final class ItemStack implements DataComponentHolder { +@@ -1179,7 +1179,7 @@ public final class ItemStack implements DataComponentHolder { private void addAttributeTooltips(Consumer tooltipAdder, TooltipDisplay tooltipDisplay, @Nullable Player player) { if (tooltipDisplay.shows(DataComponents.ATTRIBUTE_MODIFIERS)) { @@ -434,7 +434,7 @@ index 7a620eb92b1e672cedd72ec4d986c01eba337686..0460da0124d2c48b7fed45fa182537fd ItemStack itemBySlot = entity.getItemBySlot(equipmentSlot); if (!itemBySlot.isEmpty()) { diff --git a/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/net/minecraft/world/item/enchantment/EnchantmentHelper.java -index 66234431b265e0596275ca468cd40f8da98c22e2..b20415b47e209aedbc60ff17238e575dfe33849a 100644 +index e0cc0b49ea47bb38f7f4fe5ef3c793b0009d03c9..657ca9d8b1dc10777e73c450c9b8a4d52e314388 100644 --- a/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/net/minecraft/world/item/enchantment/EnchantmentHelper.java @@ -153,7 +153,7 @@ public class EnchantmentHelper { @@ -456,10 +456,10 @@ index 66234431b265e0596275ca468cd40f8da98c22e2..b20415b47e209aedbc60ff17238e575d if (filter.test(itemBySlot)) { ItemEnchantments itemEnchantments = itemBySlot.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY); diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index a0254e85fccebb66ce02bd58f9d461addd8ad73d..1f7b3db02e59c4cbc93bc0e4e42bd20e0031c4bd 100644 +index 40c2b4a5dc836055433f2402a63824dcdb451072..66f81b3a76b086ef95ea070894cf4d633e482038 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -1825,7 +1825,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1872,7 +1872,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl public org.bukkit.entity.Entity[] getChunkEntities(int chunkX, int chunkZ) { ca.spottedleaf.moonrise.patches.chunk_system.level.entity.ChunkEntitySlices slices = ((ServerLevel)this).moonrise$getEntityLookup().getChunk(chunkX, chunkZ); if (slices == null) { @@ -468,7 +468,7 @@ index a0254e85fccebb66ce02bd58f9d461addd8ad73d..1f7b3db02e59c4cbc93bc0e4e42bd20e } List ret = new java.util.ArrayList<>(); -@@ -1836,7 +1836,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1883,7 +1883,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl } } @@ -478,10 +478,10 @@ index a0254e85fccebb66ce02bd58f9d461addd8ad73d..1f7b3db02e59c4cbc93bc0e4e42bd20e // Paper end - rewrite chunk system diff --git a/net/minecraft/world/level/block/ComposterBlock.java b/net/minecraft/world/level/block/ComposterBlock.java -index a647d76d365a60b95a3eb7927ac426bf70d417f3..7977ecd013c55359f179b4b7f895099b7eb02294 100644 +index 3eb11df5d14ec63911be630ca99d8d9903723f9b..be9fe9147cca1293c09dbfae0109a3c07a5c1e16 100644 --- a/net/minecraft/world/level/block/ComposterBlock.java +++ b/net/minecraft/world/level/block/ComposterBlock.java -@@ -419,7 +419,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -448,7 +448,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { @Override public int[] getSlotsForFace(Direction side) { @@ -490,7 +490,7 @@ index a647d76d365a60b95a3eb7927ac426bf70d417f3..7977ecd013c55359f179b4b7f895099b } @Override -@@ -454,7 +454,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -483,7 +483,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { @Override public int[] getSlotsForFace(Direction side) { @@ -499,7 +499,7 @@ index a647d76d365a60b95a3eb7927ac426bf70d417f3..7977ecd013c55359f179b4b7f895099b } @Override -@@ -505,7 +505,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { +@@ -534,7 +534,7 @@ public class ComposterBlock extends Block implements WorldlyContainerHolder { @Override public int[] getSlotsForFace(Direction side) { @@ -509,7 +509,7 @@ index a647d76d365a60b95a3eb7927ac426bf70d417f3..7977ecd013c55359f179b4b7f895099b @Override diff --git a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -index 36a72a11d28f99bfe85868461925b778cc01478e..ca2cab797fc16f0961ce994fcb45029589b3c370 100644 +index 57eae0dbb614f57e2a352613c7490145bbfeb5a1..beda1b89b8083c63b9e177495ef063a7e5574627 100644 --- a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java @@ -44,7 +44,7 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit @@ -522,10 +522,10 @@ index 36a72a11d28f99bfe85868461925b778cc01478e..ca2cab797fc16f0961ce994fcb450295 private static final int[] SLOTS_FOR_SIDES = new int[]{1}; public static final int DATA_LIT_DURATION = 1; diff --git a/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java -index c8f23011a8942a5be970c606f67142cbd202b97e..98971a07757d29d6926a0aa05f229b8020af42b6 100644 +index 7bbeed6c998c91e68376d3f17a510d68e3cd0b27..bf01c9d54248ceb8f97cf1e1c0e4234a338cb8ce 100644 --- a/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java +++ b/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java -@@ -258,7 +258,7 @@ public class MapItemSavedData extends SavedData { +@@ -259,7 +259,7 @@ public class MapItemSavedData extends SavedData { } private static boolean hasMapInvisibilityItemEquipped(Player player) { diff --git a/leaf-server/minecraft-patches/features/0046-Optimize-sun-burn-tick.patch b/leaf-server/minecraft-patches/features/0047-Optimize-sun-burn-tick.patch similarity index 87% rename from leaf-server/minecraft-patches/features/0046-Optimize-sun-burn-tick.patch rename to leaf-server/minecraft-patches/features/0047-Optimize-sun-burn-tick.patch index a59bd10f..28acc972 100644 --- a/leaf-server/minecraft-patches/features/0046-Optimize-sun-burn-tick.patch +++ b/leaf-server/minecraft-patches/features/0047-Optimize-sun-burn-tick.patch @@ -13,39 +13,13 @@ As part of: JettPack (https://gitlab.com/Titaniumtown/JettPack) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index e81774a2fbcafb5909b966f71d31379c8b5a7426..229daac5767e8d65b2d0c37303d3490ef97e21ff 100644 +index 0c19cba4dd93df79d24d9e50ae538022dedf6724..070e74bb044b54a7d7cba88a50e679511cb432a4 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -2087,10 +2087,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - - @Deprecated - public float getLightLevelDependentMagicValue() { -+ return this.getLightLevelDependentMagicValue(BlockPos.containing(this.getX(), this.getEyeY(), this.getZ())); // Gale - JettPack - optimize sun burn tick - allow passing BlockPos to getLightLevelDependentMagicValue -+ } -+ -+ // Gale start - JettPack - optimize sun burn tick - allow passing BlockPos to getLightLevelDependentMagicValue -+ /** -+ * @deprecated -+ */ -+ @Deprecated -+ public float getLightLevelDependentMagicValue(BlockPos pos) { - return this.level().hasChunkAt(this.getBlockX(), this.getBlockZ()) -- ? this.level().getLightLevelDependentMagicValue(BlockPos.containing(this.getX(), this.getEyeY(), this.getZ())) -+ ? this.level.getLightLevelDependentMagicValue(pos) - : 0.0F; - } -+ // Gale end - JettPack - optimize sun burn tick - allow passing BlockPos to getLightLevelDependentMagicValue - - public void absSnapTo(double x, double y, double z, float yRot, float xRot) { - this.absSnapTo(x, y, z); -diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 4aec1fd4efbb3dd139542c55d06503716723f326..37c6567701fe10011a364b8def9ebf3391376592 100644 ---- a/net/minecraft/world/entity/Mob.java -+++ b/net/minecraft/world/entity/Mob.java -@@ -1513,20 +1513,31 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab - protected void playAttackSound() { - } +@@ -541,20 +541,31 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + // Purpur end - Add canSaveToDisk to Entity + // Purpur start - copied from Mob - API for any mob to burn daylight + // Gale start - JettPack - optimize sun burn tick - cache eye blockpos + private BlockPos cached_eye_blockpos; + private net.minecraft.world.phys.Vec3 cached_position; @@ -81,5 +55,27 @@ index 4aec1fd4efbb3dd139542c55d06503716723f326..37c6567701fe10011a364b8def9ebf33 - return false; + return false; // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos - diff on change } + // Purpur end - copied from Mob - API for any mob to burn daylight - @Override +@@ -2120,10 +2131,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + + @Deprecated + public float getLightLevelDependentMagicValue() { ++ return this.getLightLevelDependentMagicValue(BlockPos.containing(this.getX(), this.getEyeY(), this.getZ())); // Gale - JettPack - optimize sun burn tick - allow passing BlockPos to getLightLevelDependentMagicValue ++ } ++ ++ // Gale start - JettPack - optimize sun burn tick - allow passing BlockPos to getLightLevelDependentMagicValue ++ /** ++ * @deprecated ++ */ ++ @Deprecated ++ public float getLightLevelDependentMagicValue(BlockPos pos) { + return this.level().hasChunkAt(this.getBlockX(), this.getBlockZ()) +- ? this.level().getLightLevelDependentMagicValue(BlockPos.containing(this.getX(), this.getEyeY(), this.getZ())) ++ ? this.level.getLightLevelDependentMagicValue(pos) + : 0.0F; + } ++ // Gale end - JettPack - optimize sun burn tick - allow passing BlockPos to getLightLevelDependentMagicValue + + public void absSnapTo(double x, double y, double z, float yRot, float xRot) { + this.absSnapTo(x, y, z); diff --git a/leaf-server/minecraft-patches/features/0047-Reduce-lambda-and-Optional-allocation-in-EntityBased.patch b/leaf-server/minecraft-patches/features/0048-Reduce-lambda-and-Optional-allocation-in-EntityBased.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0047-Reduce-lambda-and-Optional-allocation-in-EntityBased.patch rename to leaf-server/minecraft-patches/features/0048-Reduce-lambda-and-Optional-allocation-in-EntityBased.patch diff --git a/leaf-server/minecraft-patches/features/0048-Replace-game-rules-map-with-optimized-collection.patch b/leaf-server/minecraft-patches/features/0049-Replace-game-rules-map-with-optimized-collection.patch similarity index 92% rename from leaf-server/minecraft-patches/features/0048-Replace-game-rules-map-with-optimized-collection.patch rename to leaf-server/minecraft-patches/features/0049-Replace-game-rules-map-with-optimized-collection.patch index f76f8ee0..4a79c37a 100644 --- a/leaf-server/minecraft-patches/features/0048-Replace-game-rules-map-with-optimized-collection.patch +++ b/leaf-server/minecraft-patches/features/0049-Replace-game-rules-map-with-optimized-collection.patch @@ -13,7 +13,7 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium) Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html) diff --git a/net/minecraft/world/level/GameRules.java b/net/minecraft/world/level/GameRules.java -index d5536dd40a1e9a2e05967652f690abbbca287852..966ca1e0e828e4176e12cbcf8c4a6b16489708de 100644 +index d510503a8ad272255aeba20a916642828023fd19..e4ac7ee4e39b609aa70d6d4b766962a4c942911e 100644 --- a/net/minecraft/world/level/GameRules.java +++ b/net/minecraft/world/level/GameRules.java @@ -288,7 +288,7 @@ public class GameRules { diff --git a/leaf-server/minecraft-patches/features/0049-Replace-AI-attributes-with-optimized-collections.patch b/leaf-server/minecraft-patches/features/0050-Replace-AI-attributes-with-optimized-collections.patch similarity index 91% rename from leaf-server/minecraft-patches/features/0049-Replace-AI-attributes-with-optimized-collections.patch rename to leaf-server/minecraft-patches/features/0050-Replace-AI-attributes-with-optimized-collections.patch index 393e129a..32b72f5f 100644 --- a/leaf-server/minecraft-patches/features/0049-Replace-AI-attributes-with-optimized-collections.patch +++ b/leaf-server/minecraft-patches/features/0050-Replace-AI-attributes-with-optimized-collections.patch @@ -13,7 +13,7 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium) Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html) diff --git a/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index fdb02fc40579866167e8cc9bcefbd961588b53a6..58d8424262db14b2dca0b2c5a40748b6c0c18e83 100644 +index 7dd8c1c8e27410854ce1ee90defc607c2710b5a2..0ac398b8b10aae5e67a797b2991c66874003f282 100644 --- a/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/net/minecraft/world/entity/ai/attributes/AttributeMap.java @@ -14,9 +14,11 @@ import net.minecraft.core.Holder; @@ -29,5 +29,5 @@ index fdb02fc40579866167e8cc9bcefbd961588b53a6..58d8424262db14b2dca0b2c5a40748b6 + private final Set attributesToUpdate = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>(0); + // Gale end - Lithium - replace AI attributes with optimized collections private final AttributeSupplier supplier; + private final net.minecraft.world.entity.LivingEntity entity; // Purpur - Ridables - public AttributeMap(AttributeSupplier supplier) { diff --git a/leaf-server/minecraft-patches/features/0050-Replace-throttle-tracker-map-with-optimized-collecti.patch b/leaf-server/minecraft-patches/features/0051-Replace-throttle-tracker-map-with-optimized-collecti.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0050-Replace-throttle-tracker-map-with-optimized-collecti.patch rename to leaf-server/minecraft-patches/features/0051-Replace-throttle-tracker-map-with-optimized-collecti.patch diff --git a/leaf-server/minecraft-patches/features/0051-Cache-FluidOcclusionCacheKey-hash.patch b/leaf-server/minecraft-patches/features/0052-Cache-FluidOcclusionCacheKey-hash.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0051-Cache-FluidOcclusionCacheKey-hash.patch rename to leaf-server/minecraft-patches/features/0052-Cache-FluidOcclusionCacheKey-hash.patch diff --git a/leaf-server/minecraft-patches/features/0052-Cache-ShapePairKey-hash.patch b/leaf-server/minecraft-patches/features/0053-Cache-ShapePairKey-hash.patch similarity index 88% rename from leaf-server/minecraft-patches/features/0052-Cache-ShapePairKey-hash.patch rename to leaf-server/minecraft-patches/features/0053-Cache-ShapePairKey-hash.patch index 92815446..88ff5140 100644 --- a/leaf-server/minecraft-patches/features/0052-Cache-ShapePairKey-hash.patch +++ b/leaf-server/minecraft-patches/features/0053-Cache-ShapePairKey-hash.patch @@ -9,10 +9,10 @@ Gale - https://galemc.org The JMH benchmark of this patch can be found in SunBox's `RecordHashCode` diff --git a/net/minecraft/world/level/block/Block.java b/net/minecraft/world/level/block/Block.java -index be6f37f91569c659c609e5e8d38671ca86f8cd95..cc5e4e82c2339d17edf76b9212774c9dfd8e514d 100644 +index d023c985344807db2180665a15d282fa50754299..4a92d21c2b1a9473d001534cb88cdc37108dd716 100644 --- a/net/minecraft/world/level/block/Block.java +++ b/net/minecraft/world/level/block/Block.java -@@ -610,7 +610,20 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -641,7 +641,20 @@ public class Block extends BlockBehaviour implements ItemLike { } // CraftBukkit end @@ -34,7 +34,7 @@ index be6f37f91569c659c609e5e8d38671ca86f8cd95..cc5e4e82c2339d17edf76b9212774c9d @Override public boolean equals(Object other) { return other instanceof Block.ShapePairKey shapePairKey && this.first == shapePairKey.first && this.second == shapePairKey.second; -@@ -618,7 +631,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -649,7 +662,7 @@ public class Block extends BlockBehaviour implements ItemLike { @Override public int hashCode() { diff --git a/leaf-server/minecraft-patches/features/0053-Replace-division-by-multiplication-in-CubePointRange.patch b/leaf-server/minecraft-patches/features/0054-Replace-division-by-multiplication-in-CubePointRange.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0053-Replace-division-by-multiplication-in-CubePointRange.patch rename to leaf-server/minecraft-patches/features/0054-Replace-division-by-multiplication-in-CubePointRange.patch diff --git a/leaf-server/minecraft-patches/features/0054-Replace-parts-by-size-in-CubePointRange.patch b/leaf-server/minecraft-patches/features/0055-Replace-parts-by-size-in-CubePointRange.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0054-Replace-parts-by-size-in-CubePointRange.patch rename to leaf-server/minecraft-patches/features/0055-Replace-parts-by-size-in-CubePointRange.patch diff --git a/leaf-server/minecraft-patches/features/0055-Check-frozen-ticks-before-landing-block.patch b/leaf-server/minecraft-patches/features/0056-Check-frozen-ticks-before-landing-block.patch similarity index 88% rename from leaf-server/minecraft-patches/features/0055-Check-frozen-ticks-before-landing-block.patch rename to leaf-server/minecraft-patches/features/0056-Check-frozen-ticks-before-landing-block.patch index 362bd5ec..721233c3 100644 --- a/leaf-server/minecraft-patches/features/0055-Check-frozen-ticks-before-landing-block.patch +++ b/leaf-server/minecraft-patches/features/0056-Check-frozen-ticks-before-landing-block.patch @@ -13,10 +13,10 @@ As part of: Lithium (https://github.com/CaffeineMC/lithium) Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html) diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 82354cc62df5b7793ef13c6731d84457cee42092..55277151febdf464e0a4679336a1464d3e4069b8 100644 +index b813bf88dc3e6add77e060df731211d1c57e7e69..2e4aaeb6054089d2a2c4cdbd892a9ac9dacee599 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -535,10 +535,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -546,10 +546,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } protected void tryAddFrost() { @@ -28,7 +28,7 @@ index 82354cc62df5b7793ef13c6731d84457cee42092..55277151febdf464e0a4679336a1464d if (attribute == null) { return; } -@@ -546,7 +545,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -557,7 +556,6 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin float f = -0.05F * this.getPercentFrozen(); attribute.addTransientModifier(new AttributeModifier(SPEED_MODIFIER_POWDER_SNOW_ID, f, AttributeModifier.Operation.ADD_VALUE)); } diff --git a/leaf-server/minecraft-patches/features/0056-Faster-chunk-serialization.patch b/leaf-server/minecraft-patches/features/0057-Faster-chunk-serialization.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0056-Faster-chunk-serialization.patch rename to leaf-server/minecraft-patches/features/0057-Faster-chunk-serialization.patch diff --git a/leaf-server/minecraft-patches/features/0057-Update-boss-bar-within-tick.patch b/leaf-server/minecraft-patches/features/0058-Update-boss-bar-within-tick.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0057-Update-boss-bar-within-tick.patch rename to leaf-server/minecraft-patches/features/0058-Update-boss-bar-within-tick.patch diff --git a/leaf-server/minecraft-patches/features/0058-Skip-secondary-POI-sensor-if-absent.patch b/leaf-server/minecraft-patches/features/0059-Skip-secondary-POI-sensor-if-absent.patch similarity index 65% rename from leaf-server/minecraft-patches/features/0058-Skip-secondary-POI-sensor-if-absent.patch rename to leaf-server/minecraft-patches/features/0059-Skip-secondary-POI-sensor-if-absent.patch index 62076347..9015e079 100644 --- a/leaf-server/minecraft-patches/features/0058-Skip-secondary-POI-sensor-if-absent.patch +++ b/leaf-server/minecraft-patches/features/0059-Skip-secondary-POI-sensor-if-absent.patch @@ -17,24 +17,22 @@ Licensed under: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html) villagers that have no secondary POI (farmland) do not search for it diff --git a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -index f0583076ef62189508a392a76c3fb6b741bbdde9..a608092a6e72b9be92624e36dbf19539985cd9d5 100644 +index dc4a9ddb8479e9d0c4895b19d7d677cdd8ad3faa..572a37676aebb517220fdbb94d3ca76a203936da 100644 --- a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +++ b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -@@ -22,6 +22,13 @@ public class SecondaryPoiSensor extends Sensor { - - @Override +@@ -24,7 +24,10 @@ public class SecondaryPoiSensor extends Sensor { protected void doTick(ServerLevel level, Villager entity) { + // Purpur start - Option for Villager Clerics to farm Nether Wart - make sure clerics don't wander to soul sand when the option is off + Brain brain = entity.getBrain(); +- if (!level.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().profession().is(net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { + // Gale start - Lithium - skip secondary POI sensor if absent + var secondaryPoi = entity.getVillagerData().profession().value().secondaryPoi(); -+ if (secondaryPoi.isEmpty()) { -+ entity.getBrain().eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); -+ return; -+ } -+ // Gale end - Lithium - skip secondary POI sensor if absent - ResourceKey resourceKey = level.dimension(); - BlockPos blockPos = entity.blockPosition(); - List list = Lists.newArrayList(); -@@ -31,7 +38,7 @@ public class SecondaryPoiSensor extends Sensor { ++ if (secondaryPoi.isEmpty() || (!level.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().profession().is(net.minecraft.world.entity.npc.VillagerProfession.CLERIC))) { ++ // Gale end - Lithium - skip secondary POI sensor if absent + brain.eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); + return; + } +@@ -38,7 +41,7 @@ public class SecondaryPoiSensor extends Sensor { for (int i2 = -2; i2 <= 2; i2++) { for (int i3 = -4; i3 <= 4; i3++) { BlockPos blockPos1 = blockPos.offset(i1, i2, i3); diff --git a/leaf-server/minecraft-patches/features/0059-Skip-entity-move-if-movement-is-zero.patch b/leaf-server/minecraft-patches/features/0060-Skip-entity-move-if-movement-is-zero.patch similarity index 88% rename from leaf-server/minecraft-patches/features/0059-Skip-entity-move-if-movement-is-zero.patch rename to leaf-server/minecraft-patches/features/0060-Skip-entity-move-if-movement-is-zero.patch index 054c81a1..59c5521f 100644 --- a/leaf-server/minecraft-patches/features/0059-Skip-entity-move-if-movement-is-zero.patch +++ b/leaf-server/minecraft-patches/features/0060-Skip-entity-move-if-movement-is-zero.patch @@ -13,10 +13,10 @@ As part of: VMP (https://github.com/RelativityMC/VMP-fabric) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 9c7d16a53d71abd672ad4cfca522d34f0534b32a..c96ed3410ec10e9e8885685a9c1f4bfc0b62d23e 100644 +index 070e74bb044b54a7d7cba88a50e679511cb432a4..4c28bd2ac200ad01e330e211e0b27b4f41087cb9 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -260,6 +260,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -261,6 +261,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public float yRotO; public float xRotO; private AABB bb = INITIAL_AABB; @@ -24,7 +24,7 @@ index 9c7d16a53d71abd672ad4cfca522d34f0534b32a..c96ed3410ec10e9e8885685a9c1f4bfc public boolean onGround; public boolean horizontalCollision; public boolean verticalCollision; -@@ -1086,6 +1087,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1130,6 +1131,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper end - detailed watchdog information public void move(MoverType type, Vec3 movement) { @@ -37,7 +37,7 @@ index 9c7d16a53d71abd672ad4cfca522d34f0534b32a..c96ed3410ec10e9e8885685a9c1f4bfc final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity // Paper start - detailed watchdog information ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread("Cannot move an entity off-main"); -@@ -4375,6 +4382,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4446,6 +4453,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public final void setBoundingBox(AABB bb) { diff --git a/leaf-server/minecraft-patches/features/0060-Store-mob-counts-in-an-array.patch b/leaf-server/minecraft-patches/features/0061-Store-mob-counts-in-an-array.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0060-Store-mob-counts-in-an-array.patch rename to leaf-server/minecraft-patches/features/0061-Store-mob-counts-in-an-array.patch diff --git a/leaf-server/minecraft-patches/features/0061-Use-linked-map-for-entity-trackers.patch b/leaf-server/minecraft-patches/features/0062-Use-linked-map-for-entity-trackers.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0061-Use-linked-map-for-entity-trackers.patch rename to leaf-server/minecraft-patches/features/0062-Use-linked-map-for-entity-trackers.patch diff --git a/leaf-server/minecraft-patches/features/0062-Optimize-noise-generation.patch b/leaf-server/minecraft-patches/features/0063-Optimize-noise-generation.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0062-Optimize-noise-generation.patch rename to leaf-server/minecraft-patches/features/0063-Optimize-noise-generation.patch diff --git a/leaf-server/minecraft-patches/features/0063-Optimize-sheep-offspring-color.patch b/leaf-server/minecraft-patches/features/0064-Optimize-sheep-offspring-color.patch similarity index 98% rename from leaf-server/minecraft-patches/features/0063-Optimize-sheep-offspring-color.patch rename to leaf-server/minecraft-patches/features/0064-Optimize-sheep-offspring-color.patch index 9d0bcd58..750bcd38 100644 --- a/leaf-server/minecraft-patches/features/0063-Optimize-sheep-offspring-color.patch +++ b/leaf-server/minecraft-patches/features/0064-Optimize-sheep-offspring-color.patch @@ -46,7 +46,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/world/item/DyeColor.java b/net/minecraft/world/item/DyeColor.java -index 76bb211843eee94334fbba87e5fa5ba5430f89ba..d9c03b5e3768146bc8bcae2f86387b62ae89450b 100644 +index c9cde255117b46690b2b6670d009a00b051af016..eceb19b432d1bf5f1931568e78ab1e257ae657d1 100644 --- a/net/minecraft/world/item/DyeColor.java +++ b/net/minecraft/world/item/DyeColor.java @@ -111,7 +111,97 @@ public enum DyeColor implements StringRepresentable { diff --git a/leaf-server/minecraft-patches/features/0064-Hide-flames-on-entities-with-fire-resistance.patch b/leaf-server/minecraft-patches/features/0065-Hide-flames-on-entities-with-fire-resistance.patch similarity index 90% rename from leaf-server/minecraft-patches/features/0064-Hide-flames-on-entities-with-fire-resistance.patch rename to leaf-server/minecraft-patches/features/0065-Hide-flames-on-entities-with-fire-resistance.patch index 39db93f0..0295b228 100644 --- a/leaf-server/minecraft-patches/features/0064-Hide-flames-on-entities-with-fire-resistance.patch +++ b/leaf-server/minecraft-patches/features/0065-Hide-flames-on-entities-with-fire-resistance.patch @@ -13,10 +13,10 @@ As part of: Slice (https://github.com/Cryptite/Slice) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 6a4eaccf82e4d94dad657318e307a24d1ce2b9c1..c845bea5d31296efa03d07e5133e988ef3c57808 100644 +index 4c28bd2ac200ad01e330e211e0b27b4f41087cb9..abd600a0a73895e2ee9e9448c9a07356dae1eeb4 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -886,7 +886,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -929,7 +929,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.checkBelowWorld(); if (!this.level().isClientSide) { diff --git a/leaf-server/minecraft-patches/features/0065-Skip-cloning-advancement-criteria.patch b/leaf-server/minecraft-patches/features/0066-Skip-cloning-advancement-criteria.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0065-Skip-cloning-advancement-criteria.patch rename to leaf-server/minecraft-patches/features/0066-Skip-cloning-advancement-criteria.patch diff --git a/leaf-server/minecraft-patches/features/0066-Reduce-block-destruction-packet-allocations.patch b/leaf-server/minecraft-patches/features/0067-Reduce-block-destruction-packet-allocations.patch similarity index 89% rename from leaf-server/minecraft-patches/features/0066-Reduce-block-destruction-packet-allocations.patch rename to leaf-server/minecraft-patches/features/0067-Reduce-block-destruction-packet-allocations.patch index 15a83d16..5d092dac 100644 --- a/leaf-server/minecraft-patches/features/0066-Reduce-block-destruction-packet-allocations.patch +++ b/leaf-server/minecraft-patches/features/0067-Reduce-block-destruction-packet-allocations.patch @@ -13,10 +13,10 @@ As part of: SportPaper (https://github.com/Electroid/SportPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 617eb1b9d30d499124576c5d7cb5152571cc6b84..ad114ca013e0d09d40755acbe916586868a519ed 100644 +index 4015e93837ced87936fb3a868ff8186d9d5c2efc..23ed9f6ee15b3e6fbdf00bbd7492da9f060d2bbf 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -1579,6 +1579,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1675,6 +1675,15 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @Override public void destroyBlockProgress(int breakerId, BlockPos pos, int progress) { @@ -32,7 +32,7 @@ index 617eb1b9d30d499124576c5d7cb5152571cc6b84..ad114ca013e0d09d40755acbe9165868 // CraftBukkit start Player breakerPlayer = null; Entity entity = this.getEntity(breakerId); -@@ -1595,7 +1604,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1691,7 +1700,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe .callEvent(); } // Paper end - Add BlockBreakProgressUpdateEvent @@ -41,7 +41,7 @@ index 617eb1b9d30d499124576c5d7cb5152571cc6b84..ad114ca013e0d09d40755acbe9165868 if (serverPlayer != null && serverPlayer.level() == this && serverPlayer.getId() != breakerId) { double d = pos.getX() - serverPlayer.getX(); double d1 = pos.getY() - serverPlayer.getY(); -@@ -1606,7 +1615,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -1702,7 +1711,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } // CraftBukkit end if (d * d + d1 * d1 + d2 * d2 < 1024.0) { diff --git a/leaf-server/minecraft-patches/features/0067-Spread-out-sending-all-player-info.patch b/leaf-server/minecraft-patches/features/0068-Spread-out-sending-all-player-info.patch similarity index 94% rename from leaf-server/minecraft-patches/features/0067-Spread-out-sending-all-player-info.patch rename to leaf-server/minecraft-patches/features/0068-Spread-out-sending-all-player-info.patch index 4221c85b..83297310 100644 --- a/leaf-server/minecraft-patches/features/0067-Spread-out-sending-all-player-info.patch +++ b/leaf-server/minecraft-patches/features/0068-Spread-out-sending-all-player-info.patch @@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index f4a73d3f56d6a10493752653bd50c8caeda63a94..366d476730923c70f6734e12b21ba3d7f9750643 100644 +index 04d58f375aa31e308d88f2f663ac6a48bc9a868e..e8ccec1fafd91c18f649f259ce4929160f2025b7 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -113,6 +113,7 @@ public abstract class PlayerList { @@ -56,7 +56,7 @@ index f4a73d3f56d6a10493752653bd50c8caeda63a94..366d476730923c70f6734e12b21ba3d7 // this.broadcastAll(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(player))); // CraftBukkit - replaced with loop below // Paper start - Fire PlayerJoinEvent when Player is actually ready; correctly register player BEFORE PlayerJoinEvent, so the entity is valid and doesn't require tick delay hacks player.supressTrackerForLogin = true; -@@ -583,6 +585,7 @@ public abstract class PlayerList { +@@ -585,6 +587,7 @@ public abstract class PlayerList { player.getAdvancements().stopListening(); this.players.remove(player); this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot @@ -64,7 +64,7 @@ index f4a73d3f56d6a10493752653bd50c8caeda63a94..366d476730923c70f6734e12b21ba3d7 this.server.getCustomBossEvents().onPlayerDisconnect(player); UUID uuid = player.getUUID(); ServerPlayer serverPlayer = this.playersByUUID.get(uuid); -@@ -685,6 +688,7 @@ public abstract class PlayerList { +@@ -687,6 +690,7 @@ public abstract class PlayerList { player.stopRiding(); // CraftBukkit this.players.remove(player); this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot @@ -72,7 +72,7 @@ index f4a73d3f56d6a10493752653bd50c8caeda63a94..366d476730923c70f6734e12b21ba3d7 player.level().removePlayerImmediately(player, reason); // TeleportTransition teleportTransition = player.findRespawnPositionAndUseSpawnBlock(!keepInventory, TeleportTransition.DO_NOTHING); // ServerLevel level = teleportTransition.newLevel(); -@@ -763,6 +767,7 @@ public abstract class PlayerList { +@@ -765,6 +769,7 @@ public abstract class PlayerList { this.players.add(serverPlayer); this.playersByName.put(serverPlayer.getScoreboardName().toLowerCase(java.util.Locale.ROOT), serverPlayer); // Spigot this.playersByUUID.put(serverPlayer.getUUID(), serverPlayer); @@ -80,7 +80,7 @@ index f4a73d3f56d6a10493752653bd50c8caeda63a94..366d476730923c70f6734e12b21ba3d7 } // serverPlayer.initInventoryMenu(); serverPlayer.setHealth(serverPlayer.getHealth()); -@@ -865,18 +870,58 @@ public abstract class PlayerList { +@@ -867,18 +872,58 @@ public abstract class PlayerList { } public void tick() { @@ -145,12 +145,12 @@ index f4a73d3f56d6a10493752653bd50c8caeda63a94..366d476730923c70f6734e12b21ba3d7 public void broadcastAll(Packet packet, net.minecraft.world.entity.player.Player entityhuman) { for (ServerPlayer entityplayer : this.players) { // Paper - replace for i with for each for thread safety diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index 5160c349f1ace36d6de11f23e0f957f37fc19165..6207ffb19f8d98ea6496e4d80495bf590b1be7ca 100644 +index 84e4b4b97e00b65ea5258f5b35d39833942f3757..db43fcfa46658a3ac9ea14e6c4337b68c4f729ad 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -230,9 +230,12 @@ public abstract class Player extends LivingEntity { +@@ -253,9 +253,12 @@ public abstract class Player extends LivingEntity { } - // CraftBukkit end + // Purpur end - Ridables + public final int sendAllPlayerInfoBucketIndex; // Gale - Purpur - spread out sending all player info + diff --git a/leaf-server/minecraft-patches/features/0068-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch b/leaf-server/minecraft-patches/features/0069-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch similarity index 94% rename from leaf-server/minecraft-patches/features/0068-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch rename to leaf-server/minecraft-patches/features/0069-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch index 1e7dd2aa..15b785d8 100644 --- a/leaf-server/minecraft-patches/features/0068-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch +++ b/leaf-server/minecraft-patches/features/0069-Skip-PlayerCommandSendEvent-if-there-are-no-listener.patch @@ -37,10 +37,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/commands/Commands.java b/net/minecraft/commands/Commands.java -index f6017445c495c65fc71b10d2a8ed4f5d3d225668..e00624a738e65ab14ec68a8d0e7861522fa32e82 100644 +index a41a6cbf08a636309b2e4cf527ab8922a09f784c..287c0936930ff4f3ca6dc2a4cbfc796a120fe4c0 100644 --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java -@@ -498,6 +498,7 @@ public class Commands { +@@ -512,6 +512,7 @@ public class Commands { private void runSync(ServerPlayer player, java.util.Collection bukkit, RootCommandNode rootCommandNode) { // Paper end - Perf: Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootCommandNode, true).callEvent(); // Paper - Brigadier API @@ -48,7 +48,7 @@ index f6017445c495c65fc71b10d2a8ed4f5d3d225668..e00624a738e65ab14ec68a8d0e786152 org.bukkit.event.player.PlayerCommandSendEvent event = new org.bukkit.event.player.PlayerCommandSendEvent(player.getBukkitEntity(), new java.util.LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); -@@ -508,6 +509,7 @@ public class Commands { +@@ -522,6 +523,7 @@ public class Commands { } } // CraftBukkit end diff --git a/leaf-server/minecraft-patches/features/0069-Send-multiple-keep-alive-packets.patch b/leaf-server/minecraft-patches/features/0070-Send-multiple-keep-alive-packets.patch similarity index 92% rename from leaf-server/minecraft-patches/features/0069-Send-multiple-keep-alive-packets.patch rename to leaf-server/minecraft-patches/features/0070-Send-multiple-keep-alive-packets.patch index de73c0f0..9e8bd010 100644 --- a/leaf-server/minecraft-patches/features/0069-Send-multiple-keep-alive-packets.patch +++ b/leaf-server/minecraft-patches/features/0070-Send-multiple-keep-alive-packets.patch @@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 149660c1196481275ca03830d64cf33b5ce98163..9f5a5ee6a0acc2b6bad9eb4441e8404a45ae314b 100644 +index dc55800b006f3ad67c94108af915b645e33a75dd..e2265ea4bfffa17082357575616948459f0f4885 100644 --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -38,10 +38,11 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -63,9 +63,9 @@ index 149660c1196481275ca03830d64cf33b5ce98163..9f5a5ee6a0acc2b6bad9eb4441e8404a + private static final long KEEPALIVE_LIMIT = KEEPALIVE_LIMIT_IN_SECONDS * 1000; + // Gale end - Purpur - send multiple keep-alive packets protected static final net.minecraft.resources.ResourceLocation MINECRAFT_BRAND = net.minecraft.resources.ResourceLocation.withDefaultNamespace("brand"); // Paper - Brand support - // Paper start - retain certain values - public @Nullable String playerBrand; -@@ -103,6 +107,18 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + // Purpur start - Purpur client support + protected static final net.minecraft.resources.ResourceLocation PURPUR_CLIENT = net.minecraft.resources.ResourceLocation.fromNamespaceAndPath("purpur", "client"); +@@ -107,6 +111,18 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack // Paper start - improve keepalives long now = System.nanoTime(); io.papermc.paper.util.KeepAlive.PendingKeepAlive pending = this.keepAlive.pendingKeepAlives.peek(); @@ -84,7 +84,7 @@ index 149660c1196481275ca03830d64cf33b5ce98163..9f5a5ee6a0acc2b6bad9eb4441e8404a if (pending != null && pending.challengeId() == packet.getId()) { this.keepAlive.pendingKeepAlives.remove(pending); -@@ -114,6 +130,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -118,6 +134,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack this.latency = this.keepAlive.pingCalculator5s.getAvgLatencyMS(); return; } @@ -92,7 +92,7 @@ index 149660c1196481275ca03830d64cf33b5ce98163..9f5a5ee6a0acc2b6bad9eb4441e8404a for (java.util.Iterator itr = this.keepAlive.pendingKeepAlives.iterator(); itr.hasNext();) { io.papermc.paper.util.KeepAlive.PendingKeepAlive ka = itr.next(); -@@ -261,6 +278,24 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -271,6 +288,24 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack protected void keepConnectionAlive() { long millis = Util.getMillis(); // Paper start - improve keepalives @@ -117,7 +117,7 @@ index 149660c1196481275ca03830d64cf33b5ce98163..9f5a5ee6a0acc2b6bad9eb4441e8404a if (this.checkIfClosed(millis) && !this.processedDisconnect) { long currTime = System.nanoTime(); -@@ -279,6 +314,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -289,6 +324,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack // Paper end - improve keepalives } } diff --git a/leaf-server/minecraft-patches/features/0070-Make-slow-login-timeout-configurable.patch b/leaf-server/minecraft-patches/features/0071-Make-slow-login-timeout-configurable.patch similarity index 92% rename from leaf-server/minecraft-patches/features/0070-Make-slow-login-timeout-configurable.patch rename to leaf-server/minecraft-patches/features/0071-Make-slow-login-timeout-configurable.patch index ae37bf19..b27fab8d 100644 --- a/leaf-server/minecraft-patches/features/0070-Make-slow-login-timeout-configurable.patch +++ b/leaf-server/minecraft-patches/features/0071-Make-slow-login-timeout-configurable.patch @@ -7,7 +7,7 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 5bac1c0ba691e516f2d603583971df7fe7ac212c..f9fad100d3e5e4b44a5b0f88e288e6fac7a250f7 100644 +index a9864c7619751f89f81434823538dc5658047fb9..6d320ed179393e47398c44f2ba2b2285016f349e 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -105,7 +105,10 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, diff --git a/leaf-server/minecraft-patches/features/0071-Don-t-load-chunks-to-spawn-phantoms.patch b/leaf-server/minecraft-patches/features/0072-Don-t-load-chunks-to-spawn-phantoms.patch similarity index 84% rename from leaf-server/minecraft-patches/features/0071-Don-t-load-chunks-to-spawn-phantoms.patch rename to leaf-server/minecraft-patches/features/0072-Don-t-load-chunks-to-spawn-phantoms.patch index 458214b2..9f81a400 100644 --- a/leaf-server/minecraft-patches/features/0071-Don-t-load-chunks-to-spawn-phantoms.patch +++ b/leaf-server/minecraft-patches/features/0072-Don-t-load-chunks-to-spawn-phantoms.patch @@ -13,7 +13,7 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/world/level/levelgen/PhantomSpawner.java b/net/minecraft/world/level/levelgen/PhantomSpawner.java -index b3cfab9c82fe12694f5d2f56bd922828e51df680..77ecbcdec8e176b1a45e87d33f64b1a12c532e26 100644 +index d99bda335e7d3b49919fd6732b0052a9da70df70..acd3161d88a22a4f6246321cb2af9195e416f94c 100644 --- a/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/net/minecraft/world/level/levelgen/PhantomSpawner.java @@ -52,8 +52,16 @@ public class PhantomSpawner implements CustomSpawner { @@ -34,4 +34,4 @@ index b3cfab9c82fe12694f5d2f56bd922828e51df680..77ecbcdec8e176b1a45e87d33f64b1a1 + // Gale end - MultiPaper - don't load chunks to spawn phantoms if (NaturalSpawner.isValidEmptySpawnBlock(level, blockPos1, blockState, fluidState, EntityType.PHANTOM)) { SpawnGroupData spawnGroupData = null; - int i2 = 1 + randomSource.nextInt(currentDifficultyAt.getDifficulty().getId() + 1); + int i2 = level.purpurConfig.phantomSpawnMinPerAttempt + randomSource.nextInt((level.purpurConfig.phantomSpawnMaxPerAttempt < 0 ? currentDifficultyAt.getDifficulty().getId() : level.purpurConfig.phantomSpawnMaxPerAttempt - level.purpurConfig.phantomSpawnMinPerAttempt) + 1); // Purpur - Add phantom spawning options diff --git a/leaf-server/minecraft-patches/features/0072-Don-t-load-chunks-to-activate-climbing-entities.patch b/leaf-server/minecraft-patches/features/0073-Don-t-load-chunks-to-activate-climbing-entities.patch similarity index 89% rename from leaf-server/minecraft-patches/features/0072-Don-t-load-chunks-to-activate-climbing-entities.patch rename to leaf-server/minecraft-patches/features/0073-Don-t-load-chunks-to-activate-climbing-entities.patch index 3781697b..f69bfb90 100644 --- a/leaf-server/minecraft-patches/features/0072-Don-t-load-chunks-to-activate-climbing-entities.patch +++ b/leaf-server/minecraft-patches/features/0073-Don-t-load-chunks-to-activate-climbing-entities.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index bf204f97d8b1820cfc0000df89df37d30f035707..b9594f76a5cb76dd77602ea780b404727ef59c45 100644 +index abd600a0a73895e2ee9e9448c9a07356dae1eeb4..934963dc3932bbecde012712844d3c628217095c 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -4874,6 +4874,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4951,6 +4951,16 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.inBlockState; } @@ -28,10 +28,10 @@ index bf204f97d8b1820cfc0000df89df37d30f035707..b9594f76a5cb76dd77602ea780b40472 return this.chunkPosition; } diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 55277151febdf464e0a4679336a1464d3e4069b8..d54c09c48edbfc999abd834b68ea5ceea13f39d2 100644 +index 2e4aaeb6054089d2a2c4cdbd892a9ac9dacee599..e2f0fb071f3d5cb30ecb9f67e5ce02b1915fc729 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -2129,8 +2129,17 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -2193,8 +2193,17 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin public boolean onClimbableCached() { if (!this.blockPosition().equals(this.lastClimbingPosition)) { @@ -51,7 +51,7 @@ index 55277151febdf464e0a4679336a1464d3e4069b8..d54c09c48edbfc999abd834b68ea5cee } return this.cachedOnClimbable; -@@ -2138,11 +2147,25 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -2202,11 +2211,25 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin // Gale end - Airplane - cache on climbable check public boolean onClimbable() { diff --git a/leaf-server/minecraft-patches/features/0073-Broadcast-crit-animations-as-the-entity-being-critte.patch b/leaf-server/minecraft-patches/features/0074-Broadcast-crit-animations-as-the-entity-being-critte.patch similarity index 92% rename from leaf-server/minecraft-patches/features/0073-Broadcast-crit-animations-as-the-entity-being-critte.patch rename to leaf-server/minecraft-patches/features/0074-Broadcast-crit-animations-as-the-entity-being-critte.patch index 94917242..8c38c0e2 100644 --- a/leaf-server/minecraft-patches/features/0073-Broadcast-crit-animations-as-the-entity-being-critte.patch +++ b/leaf-server/minecraft-patches/features/0074-Broadcast-crit-animations-as-the-entity-being-critte.patch @@ -13,10 +13,10 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index e4976eff4d18a1a1a752956c7e214122ddb05401..ee2671510d46a92732934cd5df0a0e42c4cae1f6 100644 +index 1f39e60b3e91018ded0b2e172e565d449337890e..f64e1d565c27163615eb44d42a0358075d3f8760 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -2128,12 +2128,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2194,12 +2194,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @Override public void crit(Entity entityHit) { diff --git a/leaf-server/minecraft-patches/features/0074-Ignore-null-legacy-structure-data.patch b/leaf-server/minecraft-patches/features/0075-Ignore-null-legacy-structure-data.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0074-Ignore-null-legacy-structure-data.patch rename to leaf-server/minecraft-patches/features/0075-Ignore-null-legacy-structure-data.patch diff --git a/leaf-server/minecraft-patches/features/0075-Prevent-entities-random-strolling-into-non-ticking-c.patch b/leaf-server/minecraft-patches/features/0076-Prevent-entities-random-strolling-into-non-ticking-c.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0075-Prevent-entities-random-strolling-into-non-ticking-c.patch rename to leaf-server/minecraft-patches/features/0076-Prevent-entities-random-strolling-into-non-ticking-c.patch diff --git a/leaf-server/minecraft-patches/features/0076-Do-not-place-player-in-world-if-kicked-before-being-.patch b/leaf-server/minecraft-patches/features/0077-Do-not-place-player-in-world-if-kicked-before-being-.patch similarity index 94% rename from leaf-server/minecraft-patches/features/0076-Do-not-place-player-in-world-if-kicked-before-being-.patch rename to leaf-server/minecraft-patches/features/0077-Do-not-place-player-in-world-if-kicked-before-being-.patch index 8175c983..504d2a45 100644 --- a/leaf-server/minecraft-patches/features/0076-Do-not-place-player-in-world-if-kicked-before-being-.patch +++ b/leaf-server/minecraft-patches/features/0077-Do-not-place-player-in-world-if-kicked-before-being-.patch @@ -14,7 +14,7 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 366d476730923c70f6734e12b21ba3d7f9750643..adc430c3f36bda2d77b76ae7735ce4fe12e33974 100644 +index e8ccec1fafd91c18f649f259ce4929160f2025b7..6396083993d248683b887774d2db3f3f03825033 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -236,6 +236,13 @@ public abstract class PlayerList { diff --git a/leaf-server/minecraft-patches/features/0077-Global-EULA-file.patch b/leaf-server/minecraft-patches/features/0078-Global-EULA-file.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0077-Global-EULA-file.patch rename to leaf-server/minecraft-patches/features/0078-Global-EULA-file.patch diff --git a/leaf-server/minecraft-patches/features/0078-5-second-TPS-average.patch b/leaf-server/minecraft-patches/features/0079-5-second-TPS-average.patch similarity index 92% rename from leaf-server/minecraft-patches/features/0078-5-second-TPS-average.patch rename to leaf-server/minecraft-patches/features/0079-5-second-TPS-average.patch index 8548c54b..1bb4ce9c 100644 --- a/leaf-server/minecraft-patches/features/0078-5-second-TPS-average.patch +++ b/leaf-server/minecraft-patches/features/0079-5-second-TPS-average.patch @@ -37,10 +37,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index d3cf7176903bede5c8c7a7e3dae3f585027f8354..c5ab5079c953ce9263491b791ebe421032e8f74d 100644 +index a084ac0399e5b3a321ad53fcfb3d7052192d2a36..ee6cc3413a15f40559803b9edf871e78d589880b 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1094,6 +1094,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 2147483647L ? Integer.MAX_VALUE : (int)l1; int coprime = this.getCoprime(i); diff --git a/leaf-server/minecraft-patches/features/0087-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch b/leaf-server/minecraft-patches/features/0087-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch deleted file mode 100644 index 2a906a70..00000000 --- a/leaf-server/minecraft-patches/features/0087-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martijn Muijsers -Date: Wed, 30 Aug 2023 20:17:20 +0200 -Subject: [PATCH] Reduce skull ItemStack lookups for reduced visibility - -License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) -Gale - https://galemc.org - -This patch is based on the following patch: -"feat: reduce sensor work" -By: peaches94 -As part of: Petal (https://github.com/Bloom-host/Petal) -Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) - -* Petal description * - -this patch is focused around the sensors used for ai -delete the line of sight cache less often and use a faster nearby comparison - -diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index d54c09c48edbfc999abd834b68ea5ceea13f39d2..66e248f348731318590ebd3bd070b7fddf5f0379 100644 ---- a/net/minecraft/world/entity/LivingEntity.java -+++ b/net/minecraft/world/entity/LivingEntity.java -@@ -1033,15 +1033,16 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin - } - - if (lookingEntity != null) { -- ItemStack itemBySlot = this.getItemBySlot(EquipmentSlot.HEAD); -+ // Gale start - Petal - reduce skull ItemStack lookups for reduced visibility - EntityType type = lookingEntity.getType(); -- if (type == EntityType.SKELETON && itemBySlot.is(Items.SKELETON_SKULL) -- || type == EntityType.ZOMBIE && itemBySlot.is(Items.ZOMBIE_HEAD) -- || type == EntityType.PIGLIN && itemBySlot.is(Items.PIGLIN_HEAD) -- || type == EntityType.PIGLIN_BRUTE && itemBySlot.is(Items.PIGLIN_HEAD) -- || type == EntityType.CREEPER && itemBySlot.is(Items.CREEPER_HEAD)) { -+ if (type == EntityType.SKELETON && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.SKELETON_SKULL) -+ || type == EntityType.ZOMBIE && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.ZOMBIE_HEAD) -+ || type == EntityType.PIGLIN && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.PIGLIN_HEAD) -+ || type == EntityType.PIGLIN_BRUTE && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.PIGLIN_HEAD) -+ || type == EntityType.CREEPER && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.CREEPER_HEAD)) { - d *= 0.5; - } -+ // Gale end - Petal - reduce skull ItemStack lookups for reduced visibility - } - - return d; diff --git a/leaf-server/minecraft-patches/features/0088-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch b/leaf-server/minecraft-patches/features/0088-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch new file mode 100644 index 00000000..569bd93b --- /dev/null +++ b/leaf-server/minecraft-patches/features/0088-Reduce-skull-ItemStack-lookups-for-reduced-visibilit.patch @@ -0,0 +1,52 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Martijn Muijsers +Date: Wed, 30 Aug 2023 20:17:20 +0200 +Subject: [PATCH] Reduce skull ItemStack lookups for reduced visibility + +License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) +Gale - https://galemc.org + +This patch is based on the following patch: +"feat: reduce sensor work" +By: peaches94 +As part of: Petal (https://github.com/Bloom-host/Petal) +Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) + +* Petal description * + +this patch is focused around the sensors used for ai +delete the line of sight cache less often and use a faster nearby comparison + +diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java +index e2f0fb071f3d5cb30ecb9f67e5ce02b1915fc729..763d8e61e36629f625bffad0993ec22da2eefa91 100644 +--- a/net/minecraft/world/entity/LivingEntity.java ++++ b/net/minecraft/world/entity/LivingEntity.java +@@ -1046,22 +1046,23 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin + } + + if (lookingEntity != null) { +- ItemStack itemBySlot = this.getItemBySlot(EquipmentSlot.HEAD); ++ // Gale start - Petal - reduce skull ItemStack lookups for reduced visibility + EntityType type = lookingEntity.getType(); + // Purpur start - Mob head visibility percent +- if (type == EntityType.SKELETON && itemBySlot.is(Items.SKELETON_SKULL)) { ++ if (type == EntityType.SKELETON && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.SKELETON_SKULL)) { + d *= lookingEntity.level().purpurConfig.skeletonHeadVisibilityPercent; + } +- else if (type == EntityType.ZOMBIE && itemBySlot.is(Items.ZOMBIE_HEAD)) { ++ else if (type == EntityType.ZOMBIE && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.ZOMBIE_HEAD)) { + d *= lookingEntity.level().purpurConfig.zombieHeadVisibilityPercent; + } +- else if ((type == EntityType.PIGLIN || type == EntityType.PIGLIN_BRUTE) && itemBySlot.is(Items.PIGLIN_HEAD)) { ++ else if ((type == EntityType.PIGLIN || type == EntityType.PIGLIN_BRUTE) && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.PIGLIN_HEAD)) { + d *= lookingEntity.level().purpurConfig.piglinHeadVisibilityPercent; + } +- else if (type == EntityType.CREEPER && itemBySlot.is(Items.CREEPER_HEAD)) { ++ else if (type == EntityType.CREEPER && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.CREEPER_HEAD)) { + d *= lookingEntity.level().purpurConfig.creeperHeadVisibilityPercent; + } + // Purpur end - Mob head visibility percent ++ // Gale end - Petal - reduce skull ItemStack lookups for reduced visibility + } + + // Purpur start - Configurable mob blindness diff --git a/leaf-server/minecraft-patches/features/0088-Initialize-line-of-sight-cache-with-low-capacity.patch b/leaf-server/minecraft-patches/features/0089-Initialize-line-of-sight-cache-with-low-capacity.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0088-Initialize-line-of-sight-cache-with-low-capacity.patch rename to leaf-server/minecraft-patches/features/0089-Initialize-line-of-sight-cache-with-low-capacity.patch diff --git a/leaf-server/minecraft-patches/features/0089-Reduce-line-of-sight-updates-and-cache-lookups.patch b/leaf-server/minecraft-patches/features/0090-Reduce-line-of-sight-updates-and-cache-lookups.patch similarity index 100% rename from leaf-server/minecraft-patches/features/0089-Reduce-line-of-sight-updates-and-cache-lookups.patch rename to leaf-server/minecraft-patches/features/0090-Reduce-line-of-sight-updates-and-cache-lookups.patch diff --git a/leaf-server/minecraft-patches/features/0090-Pufferfish-Optimize-mob-spawning.patch b/leaf-server/minecraft-patches/features/0091-Pufferfish-Optimize-mob-spawning.patch similarity index 93% rename from leaf-server/minecraft-patches/features/0090-Pufferfish-Optimize-mob-spawning.patch rename to leaf-server/minecraft-patches/features/0091-Pufferfish-Optimize-mob-spawning.patch index 3526ef0b..965f6551 100644 --- a/leaf-server/minecraft-patches/features/0090-Pufferfish-Optimize-mob-spawning.patch +++ b/leaf-server/minecraft-patches/features/0091-Pufferfish-Optimize-mob-spawning.patch @@ -22,18 +22,18 @@ and, in my opinion, worth the low risk of minor mob-spawning-related inconsistencies. diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index e5a10873e2ee8e4f75861eee46dec16c701c086f..47e714fc564898f9a04a89a6b1b72f4c3adce2a0 100644 +index 9bed48b34c998db5af83cc18732e2c7997e87c4e..f75d03465eb587a2dfdd40b17aad5dc785f4578e 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -286,6 +286,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping +@@ -289,6 +289,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function threadFunction) { ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system -@@ -1049,6 +1050,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop. diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java -index 63ff39f3db2e695c8a14b021045c17f6d3d2f23d..c9de5fbb56b7b455b4c8bc59539695fd58a32566 100644 +index 0a628a5da0380d1cb0add600629bb221c3631a6b..ea01daf583ddd110f153304a6a65ac2d765b9d31 100644 --- a/io/papermc/paper/entity/activation/ActivationRange.java +++ b/io/papermc/paper/entity/activation/ActivationRange.java -@@ -179,6 +179,22 @@ public final class ActivationRange { +@@ -181,6 +181,22 @@ public final class ActivationRange { } ActivationRange.activateEntity(entity); @@ -56,7 +56,7 @@ index 63ff39f3db2e695c8a14b021045c17f6d3d2f23d..c9de5fbb56b7b455b4c8bc59539695fd } } } -@@ -190,11 +206,11 @@ public final class ActivationRange { +@@ -192,11 +208,11 @@ public final class ActivationRange { */ private static void activateEntity(final Entity entity) { if (MinecraftServer.currentTick > entity.activatedTick) { @@ -71,10 +71,10 @@ index 63ff39f3db2e695c8a14b021045c17f6d3d2f23d..c9de5fbb56b7b455b4c8bc59539695fd } } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index ad114ca013e0d09d40755acbe916586868a519ed..3f70fca36f67fa421314ff92d372a97112a19025 100644 +index 23ed9f6ee15b3e6fbdf00bbd7492da9f060d2bbf..1d128d0613d92eb95a753be33a1134c857d0e388 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -775,6 +775,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -796,6 +796,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.entityTickList .forEach( entity -> { @@ -83,10 +83,10 @@ index ad114ca013e0d09d40755acbe916586868a519ed..3f70fca36f67fa421314ff92d372a971 if (!tickRateManager.isEntityFrozen(entity)) { entity.checkDespawn(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 479cb2a3135b86bf1ae5132f8ddfbfb59c85cafc..1d2d06db06c6a44204a647822b1a2812567f64d9 100644 +index b74146f1c31e91bf1b27025c834c2282254817b6..96f597cb13d3e2ea0722df9d6104242a130c87c5 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -364,6 +364,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -366,6 +366,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public boolean fixedPose = false; // Paper - Expand Pose API private final int despawnTime; // Paper - entity despawn time limit public int totalEntityAge; // Paper - age-like counter for all entities @@ -96,7 +96,7 @@ index 479cb2a3135b86bf1ae5132f8ddfbfb59c85cafc..1d2d06db06c6a44204a647822b1a2812 // Paper start - EAR 2 public final boolean defaultActivationState; diff --git a/net/minecraft/world/entity/EntityType.java b/net/minecraft/world/entity/EntityType.java -index 96e1f8f40a0af4350155f192ac2126b523c9f0f5..388689c44cf63ade939e271d490051c9b3fe8034 100644 +index 9950fccc0a708e701b81fcabc9e8f370e6d3a19d..e65b1818c49e1b7d04d5bcc912804c821f00bdbc 100644 --- a/net/minecraft/world/entity/EntityType.java +++ b/net/minecraft/world/entity/EntityType.java @@ -1085,6 +1085,7 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -125,139 +125,147 @@ index f6c673b1abe53afcb14fd68d590431027ed29f67..21deb221b87ecb70c8a0dc963ab79124 } } diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index de3bf0b62371f06ecb5d2035638e352ca0c06182..69500fa0b207fc3d5b1bc2bd665fa39f6725d23d 100644 +index dd10b0535baf48aea47020d890f102800b0af11a..8ced2ffe906a5653a9e4c353456a2b71ade9ee8d 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -222,8 +222,10 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -265,9 +265,10 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS return 0.4F; } + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep(ServerLevel level) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish +- if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider // Pufferfish this.getBrain().tick(level, this); AllayAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 6a5e9e9582e322aaa1555933de97e545ba74f8f4..3475ecbd95fac6c6b6e792a23cb15cdb3395985f 100644 +index deb2fdea7be9dda1c4b267ac25326bb9b05ae739..d8a65c8096fc8ec1ccef43c1b264da11335d2499 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -325,8 +325,10 @@ public class Axolotl extends Animal implements Bucketable { +@@ -371,9 +371,10 @@ public class Axolotl extends Animal implements Bucketable { return true; } + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep(ServerLevel level) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish +- if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider // Pufferfish this.getBrain().tick(level, this); AxolotlAi.updateActivity(this); if (!this.isNoAi()) { diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index b8703409dd3dc8e3020ed81b44ce4812984c88c3..f5c9ef8909f3852fc7a203265ae057232fa403ad 100644 +index f67d18f32f73e0e6be35939781bd0bd0188cdfbd..bf8d1789e45722a1fa00fe48b08a9b0c11895423 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java -@@ -200,8 +200,10 @@ public class Frog extends Animal { +@@ -257,9 +257,10 @@ public class Frog extends Animal { VariantUtils.readVariant(input, Registries.FROG_VARIANT).ifPresent(this::setVariant); } + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep(ServerLevel level) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish +- if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider // Pufferfish this.getBrain().tick(level, this); FrogAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java -index c1510a6f1146f446ed65a1f08984af6c29de439a..5392cb211a3dc841ab38710a4ef688bde7fbe067 100644 +index e5cefb1d327053761a8c2195c6f39128a23520c1..dfe2f1c62b773e97f61e30ef39bb1d00c3aa2d52 100644 --- a/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/net/minecraft/world/entity/animal/frog/Tadpole.java -@@ -96,8 +96,10 @@ public class Tadpole extends AbstractFish { +@@ -133,9 +133,10 @@ public class Tadpole extends AbstractFish { return SoundEvents.TADPOLE_FLOP; } + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep(ServerLevel level) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish +- if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider // Pufferfish this.getBrain().tick(level, this); TadpoleAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index bdac4929db71a39fc02985109cedc9cd316ec3cc..2a72d7f422c340dabef11a6dc680358207bee637 100644 +index d8b726fb954a3b8ca20f3f500e4087d5936e7646..5c2e458c6043eda98fe2f9e306e5efc49afd7509 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -186,8 +186,10 @@ public class Goat extends Animal { +@@ -224,9 +224,10 @@ public class Goat extends Animal { return (Brain)super.getBrain(); } + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep(ServerLevel level) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish +- if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider // Pufferfish this.getBrain().tick(level, this); GoatAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index bde6f9d9d1cc7a5ee8334ee9207afae304ddcfa9..084f82a7baaa309aa80cc33b4c01e54cf6da4b42 100644 +index 952fba6d141576089e563e829cae4a177f19d639..e64ca3d5b4ad5601e66989f7f0c33a343b2bb8b7 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -158,8 +158,10 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -204,9 +204,10 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { return (Brain)super.getBrain(); } + private int behaviorTick; // Pufferfish @Override protected void customServerAiStep(ServerLevel level) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish +- if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider // Pufferfish this.getBrain().tick(level, this); HoglinAi.updateActivity(this); if (this.isConverting()) { diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index 689f200554d8c03313b3d194f209c527f315c29a..3e6cbf0166486995f7adcbd7b99a8b8c919956cd 100644 +index 03b6640c95c86ea9f6219d6e39feffa4643dd648..91c60e2b5f9e3b8b785b7fa48db12817037be790 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -316,8 +316,10 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -355,9 +355,10 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento return !this.cannotHunt; } + private int behaviorTick; // Pufferfish @Override protected void customServerAiStep(ServerLevel level) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish +- if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider // Pufferfish this.getBrain().tick(level, this); PiglinAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java -index dd6666bd8b8df4148a1557627ce2a6ddab245ed6..6a9d3b749e251d3dac6fda13318bf5a0bf21f82b 100644 +index 091b9cc338e37efbecdd4187a9824dae7bff2af9..322e6c68429f94151ff275496cd1726dc260aa0a 100644 --- a/net/minecraft/world/entity/monster/warden/Warden.java +++ b/net/minecraft/world/entity/monster/warden/Warden.java -@@ -275,8 +275,10 @@ public class Warden extends Monster implements VibrationSystem { +@@ -299,9 +299,10 @@ public class Warden extends Monster implements VibrationSystem { } } + private int behaviorTick = 0; // Pufferfish @Override protected void customServerAiStep(ServerLevel level) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish +- if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider // Pufferfish this.getBrain().tick(level, this); super.customServerAiStep(level); if ((this.tickCount + this.getId()) % 120 == 0) { diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 6cf2af33d22d3df8374746f5926f3f2d5093431d..f37759161b2a682612c6676cdd0d15908259776c 100644 +index db5c287161c50bafd672b9cb439b3a06b1ff16d7..e67f8940e2f5eb58dff3208bbc1602a1adfe4778 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -177,6 +177,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - (villager, poiType) -> poiType.is(PoiTypes.MEETING) - ); +@@ -179,6 +179,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + private boolean isLobotomized = false; public boolean isLobotomized() { return this.isLobotomized; } // Purpur - Lobotomize stuck villagers + private int notLobotomizedCount = 0; // Purpur - Lobotomize stuck villagers + public long nextGolemPanic = -1; // Pufferfish + public Villager(EntityType entityType, Level level) { this(entityType, level, VillagerType.PLAINS); } -@@ -285,6 +287,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -384,6 +386,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Paper end - EAR 2 @@ -265,16 +273,12 @@ index 6cf2af33d22d3df8374746f5926f3f2d5093431d..f37759161b2a682612c6676cdd0d1590 @Override protected void customServerAiStep(ServerLevel level) { // Paper start - EAR 2 -@@ -292,7 +295,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - } - protected void customServerAiStep(ServerLevel level, final boolean inactive) { - // Paper end - EAR 2 -- if (!inactive) this.getBrain().tick(level, this); // Paper - EAR 2 -+ // Pufferfish start -+ if (!inactive && this.behaviorTick++ % this.activatedPriority == 0) { -+ this.getBrain().tick(level, this); // Paper - EAR 2 -+ } -+ // Pufferfish end - if (this.assignProfessionWhenSpawned) { - this.assignProfessionWhenSpawned = false; +@@ -399,7 +402,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + this.isLobotomized = false; } + // Purpur end - Lobotomize stuck villagers +- if (!inactive && (getRider() == null || !this.isControllable())) { // Purpur - Ridables ++ if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - Ridables // Pufferfish + this.getBrain().tick(level, this); // Paper - EAR 2 + } + else if (this.isLobotomized && shouldRestock()) restock(); // Purpur - Lobotomize stuck villagers diff --git a/leaf-server/minecraft-patches/features/0093-Fix-Pufferfish-and-Purpur-patches.patch b/leaf-server/minecraft-patches/features/0093-Fix-Pufferfish-and-Purpur-patches.patch index 27c56437..379224d3 100644 --- a/leaf-server/minecraft-patches/features/0093-Fix-Pufferfish-and-Purpur-patches.patch +++ b/leaf-server/minecraft-patches/features/0093-Fix-Pufferfish-and-Purpur-patches.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix Pufferfish and Purpur patches diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 808f3adbae68cbd9863bfd8fa1d9592cae6b9ddf..b1245f93c915da28d245e6b5c6904166742211fa 100644 +index f75d03465eb587a2dfdd40b17aad5dc785f4578e..ef99bac2177ad9cd0a34da880741ce8ec1443ea2 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -277,7 +277,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping +@@ -289,7 +289,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function threadFunction) { + ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system @@ -1243,9 +1243,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0.5F -- && this.random.nextFloat() * 30.0F < (lightLevelDependentMagicValue - 0.4F) * 2.0F -- && !flag -- && this.level().canSeeSky(blockPos)) { -- return true; -+ // Gale start - JettPack - optimize sun burn tick - optimizations and cache eye blockpos -+ if (this.cached_position != this.position) { -+ this.cached_eye_blockpos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); -+ this.cached_position = this.position; - } -+ -+ float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(cached_eye_blockpos); // Pass BlockPos to getBrightness -+ -+ // Check brightness first -+ if (lightLevelDependentMagicValue <= 0.5F) return false; -+ if (this.random.nextFloat() * 30.0F >= (lightLevelDependentMagicValue - 0.4F) * 2.0F) return false; -+ // Gale end - JettPack - optimize sun burn tick - optimizations and cache eye blockpos -+ -+ boolean flag = this.isInWaterOrRain() || this.isInPowderSnow || this.wasInPowderSnow; -+ -+ return !flag && this.level().canSeeSky(this.cached_eye_blockpos); // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos - } - -- return false; -+ return false; // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos - diff on change - } - // Purpur end - copied from Mob - API for any mob to burn daylight -+ // Leaf end - Fix Pufferfish and Purpur patches - - public Entity(EntityType entityType, Level level) { - this.type = entityType; -diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index fa5010a42970741b930fddedf11527216c8f9173..5aa749c46b0b84dfe1584788617e0f184e850239 100644 ---- a/net/minecraft/world/entity/LivingEntity.java -+++ b/net/minecraft/world/entity/LivingEntity.java -@@ -1049,13 +1049,13 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin - // Gale start - Petal - reduce skull ItemStack lookups for reduced visibility - EntityType type = lookingEntity.getType(); - // Purpur start - Mob head visibility percent -- if (type == EntityType.SKELETON && itemBySlot.is(Items.SKELETON_SKULL)) { -+ if (type == EntityType.SKELETON && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.SKELETON_SKULL)) { // Leaf - Fix Pufferfish and Purpur patches - d *= lookingEntity.level().purpurConfig.skeletonHeadVisibilityPercent; -- } else if (type == EntityType.ZOMBIE && itemBySlot.is(Items.ZOMBIE_HEAD)) { -+ } else if (type == EntityType.ZOMBIE && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.ZOMBIE_HEAD)) { // Leaf - Fix Pufferfish and Purpur patches - d *= lookingEntity.level().purpurConfig.zombieHeadVisibilityPercent; -- } else if ((type == EntityType.PIGLIN || type == EntityType.PIGLIN_BRUTE) && itemBySlot.is(Items.PIGLIN_HEAD)) { -+ } else if ((type == EntityType.PIGLIN || type == EntityType.PIGLIN_BRUTE) && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.PIGLIN_HEAD)) { // Leaf - Fix Pufferfish and Purpur patches - d *= lookingEntity.level().purpurConfig.piglinHeadVisibilityPercent; -- } else if (type == EntityType.CREEPER && itemBySlot.is(Items.CREEPER_HEAD)) { -+ } else if (type == EntityType.CREEPER && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.CREEPER_HEAD)) { // Leaf - Fix Pufferfish and Purpur patches - d *= lookingEntity.level().purpurConfig.creeperHeadVisibilityPercent; - } - // Purpur end - Mob head visibility percent -diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 706bdb81f831ee79afb8c32feba1a13bdac59c66..26db3eb9dfc3d9c0c7efa4cf25827f15c37a7775 100644 ---- a/net/minecraft/world/entity/Mob.java -+++ b/net/minecraft/world/entity/Mob.java -@@ -1538,10 +1538,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab - protected void playAttackSound() { - } - -- // Gale start - JettPack - optimize sun burn tick - cache eye blockpos -- private BlockPos cached_eye_blockpos; -- private net.minecraft.world.phys.Vec3 cached_position; -- // Gale end - JettPack - optimize sun burn tick - cache eye blockpos - public boolean isSunBurnTick() { - // Purpur - implemented in Entity - API for any mob to burn daylight - return super.isSunBurnTick(); -diff --git a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -index 60ec389615cfcad388ed37b8d3ee04e87db36755..34fe1d3bd6603225f84ab18794bbb1189d4b4f49 100644 ---- a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -+++ b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -@@ -22,20 +22,17 @@ public class SecondaryPoiSensor extends Sensor { - - @Override - protected void doTick(ServerLevel level, Villager entity) { -- // Gale start - Lithium - skip secondary POI sensor if absent -+ // Leaf start - Fix Pufferfish and Purpur patches -+ // Purpur: Option for Villager Clerics to farm Nether Wart - make sure clerics don't wander to soul sand when the option is off -+ // Gale: Lithium - skip secondary POI sensor if absent - var secondaryPoi = entity.getVillagerData().profession().value().secondaryPoi(); -- if (secondaryPoi.isEmpty()) { -- entity.getBrain().eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); -- return; -- } -- // Gale end - Lithium - skip secondary POI sensor if absent -- // Purpur start - Option for Villager Clerics to farm Nether Wart - make sure clerics don't wander to soul sand when the option is off - Brain brain = entity.getBrain(); -- if (!level.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().profession().is(net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { -+ if (secondaryPoi.isEmpty() || !level.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().profession().is(net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { - brain.eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); - return; - } - // Purpur end - Option for Villager Clerics to farm Nether Wart -+ // Leaf end - Fix Pufferfish and Purpur patches - ResourceKey resourceKey = level.dimension(); - BlockPos blockPos = entity.blockPosition(); - List list = Lists.newArrayList(); -diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index 7127d8e5fff81be017f0aa04606cb8404ad7b2fd..a25976d6f0dec86b88017cd5f86f3b51c8d7444b 100644 ---- a/net/minecraft/world/entity/animal/allay/Allay.java -+++ b/net/minecraft/world/entity/animal/allay/Allay.java -@@ -268,8 +268,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS - private int behaviorTick = 0; // Pufferfish - @Override - protected void customServerAiStep(ServerLevel level) { -- //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches - this.getBrain().tick(level, this); - AllayAi.updateActivity(this); - super.customServerAiStep(level); -diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 02db38fa315ecb9d5bdba74848012710106b662e..2cdf2fb60d4d3642f0870944be9bd5abafa9e817 100644 ---- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java -+++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -374,8 +374,7 @@ public class Axolotl extends Animal implements Bucketable { - private int behaviorTick = 0; // Pufferfish - @Override - protected void customServerAiStep(ServerLevel level) { -- //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches - this.getBrain().tick(level, this); - AxolotlAi.updateActivity(this); - if (!this.isNoAi()) { -diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index c4db078db0b7bb2bd8f6757a8bd13d60a7a4fa14..a7e9179c287671a689cb5ce668b5a33896da87a4 100644 ---- a/net/minecraft/world/entity/animal/frog/Frog.java -+++ b/net/minecraft/world/entity/animal/frog/Frog.java -@@ -260,8 +260,7 @@ public class Frog extends Animal { - private int behaviorTick = 0; // Pufferfish - @Override - protected void customServerAiStep(ServerLevel level) { -- //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches - this.getBrain().tick(level, this); - FrogAi.updateActivity(this); - super.customServerAiStep(level); -diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java -index a3858465569c40fcfc7c8c4c4735335ac83cb078..5abdf4253f1d0a6f35d8e05f7a0a2b4100083f76 100644 ---- a/net/minecraft/world/entity/animal/frog/Tadpole.java -+++ b/net/minecraft/world/entity/animal/frog/Tadpole.java -@@ -136,8 +136,7 @@ public class Tadpole extends AbstractFish { - private int behaviorTick = 0; // Pufferfish - @Override - protected void customServerAiStep(ServerLevel level) { -- //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches - this.getBrain().tick(level, this); - TadpoleAi.updateActivity(this); - super.customServerAiStep(level); -diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 11b020704a673c69bd2d4ab6313ea32e8e97cc23..c608c71eb601c169f543823c5c342b8928b9cf50 100644 ---- a/net/minecraft/world/entity/animal/goat/Goat.java -+++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -227,8 +227,7 @@ public class Goat extends Animal { - private int behaviorTick = 0; // Pufferfish - @Override - protected void customServerAiStep(ServerLevel level) { -- //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches - this.getBrain().tick(level, this); - GoatAi.updateActivity(this); - super.customServerAiStep(level); -diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 3c126b1610718a407c16775a935b295ecbaab533..8c9f240badf5a678ee4e1815e010a204f8704f4e 100644 ---- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java -+++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -207,8 +207,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { - private int behaviorTick; // Pufferfish - @Override - protected void customServerAiStep(ServerLevel level) { -- //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches - this.getBrain().tick(level, this); - HoglinAi.updateActivity(this); - if (this.isConverting()) { -diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index fb58af763cf75c80703360a5c668168775b1458c..e442784741f1d0b4892284b6811343f954b50182 100644 ---- a/net/minecraft/world/entity/monster/piglin/Piglin.java -+++ b/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -358,8 +358,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento - private int behaviorTick; // Pufferfish - @Override - protected void customServerAiStep(ServerLevel level) { -- //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Leaf - Fix Pufferfish and Purpur patches - this.getBrain().tick(level, this); - PiglinAi.updateActivity(this); - super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java index 5daa37fc0e44d3c4f3755ec3d3d89213f6670de1..c98a15653e388e7d8301ac4f6baa11095b7b18cc 100644 --- a/net/minecraft/world/entity/projectile/Projectile.java @@ -306,7 +82,7 @@ index 5daa37fc0e44d3c4f3755ec3d3d89213f6670de1..c98a15653e388e7d8301ac4f6baa1109 this.setDeltaMovement(0, this.getDeltaMovement().y, 0); } diff --git a/net/minecraft/world/food/FoodProperties.java b/net/minecraft/world/food/FoodProperties.java -index 20f702c8266eb54a8835861188eb937f4732e078..b6a1b7e8546402ae7640a45878c074439edeace0 100644 +index 20f702c8266eb54a8835861188eb937f4732e078..5951b6f860cf3cda35f2d79d4c38ff7f253382fe 100644 --- a/net/minecraft/world/food/FoodProperties.java +++ b/net/minecraft/world/food/FoodProperties.java @@ -43,9 +43,15 @@ public record FoodProperties(int nutrition, float saturation, boolean canAlwaysE diff --git a/leaf-server/minecraft-patches/features/0113-Reduce-canSee-work.patch b/leaf-server/minecraft-patches/features/0113-Reduce-canSee-work.patch index 1bb1d9e3..72c6b9d6 100644 --- a/leaf-server/minecraft-patches/features/0113-Reduce-canSee-work.patch +++ b/leaf-server/minecraft-patches/features/0113-Reduce-canSee-work.patch @@ -7,10 +7,10 @@ Co-authored by: Martijn Muijsers Co-authored by: MachineBreaker diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index bee67a32c63df0901b9a9b6b3f6e7a35bb87025e..191214e2c3019e9e55cc1d9658c2446557f40173 100644 +index 66f81b3a76b086ef95ea070894cf4d633e482038..da9a6901a8bb2d3b3a5de023d595faa0e2ef5dff 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -988,17 +988,19 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -989,17 +989,19 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl for (int i = 0, len = entities.size(); i < len; ++i) { Entity entity = entities.get(i); diff --git a/leaf-server/minecraft-patches/features/0114-Fix-sprint-glitch.patch b/leaf-server/minecraft-patches/features/0114-Fix-sprint-glitch.patch index 6cb20fe3..f6a9d6f1 100644 --- a/leaf-server/minecraft-patches/features/0114-Fix-sprint-glitch.patch +++ b/leaf-server/minecraft-patches/features/0114-Fix-sprint-glitch.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix sprint glitch diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 5aa749c46b0b84dfe1584788617e0f184e850239..1ba42eaaf9ceb41c5ef184f3002135c0781abe33 100644 +index 763d8e61e36629f625bffad0993ec22da2eefa91..d5994607475e69f8a0da41d5198ba63dfa5a27df 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -1419,7 +1419,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -1422,7 +1422,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin player.setRealHealth(health); } diff --git a/leaf-server/minecraft-patches/features/0118-Plazma-Add-some-missing-Pufferfish-configurations.patch b/leaf-server/minecraft-patches/features/0118-Plazma-Add-some-missing-Pufferfish-configurations.patch index 6a63b0ce..da097fa7 100644 --- a/leaf-server/minecraft-patches/features/0118-Plazma-Add-some-missing-Pufferfish-configurations.patch +++ b/leaf-server/minecraft-patches/features/0118-Plazma-Add-some-missing-Pufferfish-configurations.patch @@ -57,17 +57,18 @@ index 949b6c563658e6e46ac5842d6f088ecae6d4cd0c..c2107133d3def5ef5de7837499d33b5d CamelAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index a762fc8a4616c4e48e11accdca2129fd47f300e6..08bc21733c08b9df28803b36d3fb17aa3cc29345 100644 +index 71e7931f7007f73b552bbc2cbc8e843e10b40b43..b30187ddfa806fb3e3dee1e3062e86d71d81ff79 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -@@ -493,8 +493,10 @@ public class Sniffer extends Animal { +@@ -493,9 +493,10 @@ public class Sniffer extends Animal { return Brain.provider(SnifferAi.MEMORY_TYPES, SnifferAi.SENSOR_TYPES); } + private int behaviorTick; // Leaf - Plazma - Add missing Pufferfish configurations @Override protected void customServerAiStep(ServerLevel level) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Leaf - Plazma - Add missing Pufferfish configurations +- if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider // Leaf - Plazma - Add missing Pufferfish configurations this.getBrain().tick(level, this); SnifferAi.updateActivity(this); super.customServerAiStep(level); @@ -88,17 +89,18 @@ index 2a905e8cdf22f9d7f38cc41c1474e80f704d0cb1..385e6d997ea511dd44a7319879baff14 this.updateActivity(); } diff --git a/net/minecraft/world/entity/monster/breeze/Breeze.java b/net/minecraft/world/entity/monster/breeze/Breeze.java -index d91ce14cc39b1b6ccd558f53ed605d4c6a5acae5..52558a99c915da3c46e5f63bd8014cfcdb38505f 100644 +index 793db0e9977fe64e7cdbe5b337deb6d8e32f0627..63ad731c12b6749742d08cac14d2c10aee87e910 100644 --- a/net/minecraft/world/entity/monster/breeze/Breeze.java +++ b/net/minecraft/world/entity/monster/breeze/Breeze.java -@@ -228,8 +228,10 @@ public class Breeze extends Monster { +@@ -228,9 +228,10 @@ public class Breeze extends Monster { return pos.closerThan(center, 4.0, 10.0); } + private int behaviorTick; // Leaf - Plazma - Add missing Pufferfish configurations @Override protected void customServerAiStep(ServerLevel level) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) // Leaf - Plazma - Add missing Pufferfish configurations +- if ((getRider() == null || !this.isControllable())) // Purpur - only use brain if no rider ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Purpur - only use brain if no rider // Leaf - Plazma - Add missing Pufferfish configurations this.getBrain().tick(level, this); BreezeAi.updateActivity(this); super.customServerAiStep(level); diff --git a/leaf-server/minecraft-patches/features/0119-Plazma-Add-missing-purpur-configuration-options.patch b/leaf-server/minecraft-patches/features/0119-Plazma-Add-missing-purpur-configuration-options.patch index 7d820784..925e0ddf 100644 --- a/leaf-server/minecraft-patches/features/0119-Plazma-Add-missing-purpur-configuration-options.patch +++ b/leaf-server/minecraft-patches/features/0119-Plazma-Add-missing-purpur-configuration-options.patch @@ -9,7 +9,7 @@ Original project: https://github.com/PlazmaMC/PlazmaBukkit Add more Purpur configurable options for entities diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index a25976d6f0dec86b88017cd5f86f3b51c8d7444b..cb88b1afe261f95998a19fcb555f91143834ba3a 100644 +index 8ced2ffe906a5653a9e4c353456a2b71ade9ee8d..0291f80470899f38de872271e602565b2161b520 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java @@ -174,6 +174,18 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @@ -64,7 +64,7 @@ index c2107133d3def5ef5de7837499d33b5dbf5c20b6..04c3fb56a4014025b6a9c01e97f0ffbd CamelAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index 7d450b6ccde99657a7fac354ae386a80f9f7e879..7143a7b8aae713fd7f2f167a949f98b964e72c78 100644 +index e016a3d9fce58d6bb85e491e88088e112ac4f843..d337b7f34d8fe558eb2aff571082cdebfdf6209c 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java @@ -170,6 +170,23 @@ public class Frog extends Animal { @@ -92,7 +92,7 @@ index 7d450b6ccde99657a7fac354ae386a80f9f7e879..7143a7b8aae713fd7f2f167a949f98b9 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java -index 5d3479a55a10444e3ad3d9ec16160f9d520a1dc6..0e322f480e0a6302124847e26c4bed06678e78e4 100644 +index 10bf3023de012986047fdc0aed0d83d848316732..8ede266ae541b4c25e942b842c5ad5e6693a261d 100644 --- a/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/net/minecraft/world/entity/animal/frog/Tadpole.java @@ -108,6 +108,23 @@ public class Tadpole extends AbstractFish { @@ -120,7 +120,7 @@ index 5d3479a55a10444e3ad3d9ec16160f9d520a1dc6..0e322f480e0a6302124847e26c4bed06 protected PathNavigation createNavigation(Level level) { return new WaterBoundPathNavigation(this, level); diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 08bc21733c08b9df28803b36d3fb17aa3cc29345..1f545d4c9a3de0d6630a92481920ed6c3553ce97 100644 +index b30187ddfa806fb3e3dee1e3062e86d71d81ff79..4d872b3d21928a817795a21ee0c35ef1b9c0c34e 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java @@ -119,6 +119,18 @@ public class Sniffer extends Animal { @@ -142,15 +142,6 @@ index 08bc21733c08b9df28803b36d3fb17aa3cc29345..1f545d4c9a3de0d6630a92481920ed6c @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -496,7 +508,7 @@ public class Sniffer extends Animal { - private int behaviorTick; // Leaf - Plazma - Add missing Pufferfish configurations - @Override - protected void customServerAiStep(ServerLevel level) { -- if (this.behaviorTick++ % this.activatedPriority == 0) // Leaf - Plazma - Add missing Pufferfish configurations -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Leaf - Plazma - Add missing Pufferfish configurations // Leaf - Plazma - Add missing purpur configuration options - this.getBrain().tick(level, this); - SnifferAi.updateActivity(this); - super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/monster/creaking/Creaking.java b/net/minecraft/world/entity/monster/creaking/Creaking.java index 49f962bbbce22dd26555ee2092ceff96e82aa6b2..ef0522feaa1cc9704f778309c1e6cf1d68379376 100644 --- a/net/minecraft/world/entity/monster/creaking/Creaking.java @@ -184,7 +175,7 @@ index 49f962bbbce22dd26555ee2092ceff96e82aa6b2..ef0522feaa1cc9704f778309c1e6cf1d CreakingAi.updateActivity(this); } diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java -index a6109ac9d7f8a9aa4074b3e9504244b1d565a2d4..e0bd1268f77b7234331c9fea0b11b5b04a66a4ad 100644 +index f626fa0c30873916f973f66e8d67c7e001c2630c..51c56751738c8991d8db770ff4f1b5877ee9f13d 100644 --- a/net/minecraft/world/entity/monster/warden/Warden.java +++ b/net/minecraft/world/entity/monster/warden/Warden.java @@ -148,6 +148,23 @@ public class Warden extends Monster implements VibrationSystem { @@ -211,15 +202,6 @@ index a6109ac9d7f8a9aa4074b3e9504244b1d565a2d4..e0bd1268f77b7234331c9fea0b11b5b0 @Override public Packet getAddEntityPacket(ServerEntity entity) { return new ClientboundAddEntityPacket(this, entity, this.hasPose(Pose.EMERGING) ? 1 : 0); -@@ -302,7 +319,7 @@ public class Warden extends Monster implements VibrationSystem { - private int behaviorTick = 0; // Pufferfish - @Override - protected void customServerAiStep(ServerLevel level) { -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Leaf - Plazma - Add missing purpur configuration options - this.getBrain().tick(level, this); - super.customServerAiStep(level); - if ((this.tickCount + this.getId()) % 120 == 0) { diff --git a/net/minecraft/world/entity/vehicle/AbstractChestBoat.java b/net/minecraft/world/entity/vehicle/AbstractChestBoat.java index 04b8d4be8d7b36585041b5ff69251d4150e54cae..c73840d0a08366b2d2ee3286589ab4e4e03d122d 100644 --- a/net/minecraft/world/entity/vehicle/AbstractChestBoat.java diff --git a/leaf-server/minecraft-patches/features/0130-Mirai-Configurable-chat-message-signatures.patch b/leaf-server/minecraft-patches/features/0130-Mirai-Configurable-chat-message-signatures.patch index abef7de1..66f506a0 100644 --- a/leaf-server/minecraft-patches/features/0130-Mirai-Configurable-chat-message-signatures.patch +++ b/leaf-server/minecraft-patches/features/0130-Mirai-Configurable-chat-message-signatures.patch @@ -91,10 +91,10 @@ index a491be4250de3199c3e1aa9e5482b568692bd2f5..5db038df25a1b5bf2f7395464250dc0b public record Favicon(byte[] iconBytes) { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 87fc8861948b50361ec04c5a23406d3abdec6eac..77f11179836636424927843f5f10c3fd23d2b2d4 100644 +index 9f6d5409d3767d68e13c8679e34d9938b329393f..8350d6f00764c792f5f4f2c2e91df6777cb06e0d 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -614,6 +614,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -613,6 +613,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @Override public boolean enforceSecureProfile() { diff --git a/leaf-server/minecraft-patches/features/0133-Faster-random-generator.patch b/leaf-server/minecraft-patches/features/0133-Faster-random-generator.patch index 2d4a4cd1..0c378a28 100644 --- a/leaf-server/minecraft-patches/features/0133-Faster-random-generator.patch +++ b/leaf-server/minecraft-patches/features/0133-Faster-random-generator.patch @@ -27,7 +27,7 @@ index 91574985958950dffe0f393d7dfac4818af3b151..eaaa66c4d86d4ebda0acf8f1dbe8ecb5 final ServerLevel world = this.level; final int randomTickSpeed = world.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 3e4d17bf0a67e8196baf405b3e95c4fb49df000d..7734bb9678c58edba6148d48c6b8d89e0345bed1 100644 +index 645bb18c5e3a13e89227b9d05a52eeb882fdd03b..220061621a676e5cefd6a442b40f216f6dced60c 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -895,7 +895,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -97,7 +97,7 @@ index 8516d47b0ba79d91638837199e7ae0fb6cb44a79..4f4b55dd099dd2c2fea118b18b535881 RandomSource fork(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 514d9eff053c59069a24a982d5fb0b619e532a4c..0904b331e800e6f1663b30bdbdc697dfa4f3f019 100644 +index 96f597cb13d3e2ea0722df9d6104242a130c87c5..cd59762a7f856037ebf230086da378b4510a5b0d 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -155,7 +155,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -110,7 +110,7 @@ index 514d9eff053c59069a24a982d5fb0b619e532a4c..0904b331e800e6f1663b30bdbdc697df private static final class RandomRandomSource extends ca.spottedleaf.moonrise.common.util.ThreadUnsafeRandom { public RandomRandomSource() { diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 191214e2c3019e9e55cc1d9658c2446557f40173..3f02f57eca3768d843e58dd2936f37c7f5743402 100644 +index da9a6901a8bb2d3b3a5de023d595faa0e2ef5dff..6d8c0121ebc2bc919aa4148328e6d9e52d54f185 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -117,7 +117,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @@ -122,7 +122,7 @@ index 191214e2c3019e9e55cc1d9658c2446557f40173..3f02f57eca3768d843e58dd2936f37c7 @Deprecated private final RandomSource threadSafeRandom = RandomSource.createThreadSafe(); private final Holder dimensionTypeRegistration; -@@ -169,7 +169,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -170,7 +170,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl private int tileTickPosition; public final Map explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here diff --git a/leaf-server/minecraft-patches/features/0160-Configurable-player-knockback-zombie.patch b/leaf-server/minecraft-patches/features/0160-Configurable-player-knockback-zombie.patch index 9e12c033..d943e1bf 100644 --- a/leaf-server/minecraft-patches/features/0160-Configurable-player-knockback-zombie.patch +++ b/leaf-server/minecraft-patches/features/0160-Configurable-player-knockback-zombie.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable player knockback zombie diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 6214467ae7e2e9d84e46abed00a94bc22d4a3da7..1904cdab2e2cc6e6996d4d1ba578f2dd0a005d08 100644 +index b312a28c1ad5fbf5ef67f7794bee481bce4e29ca..d6a44dc753b09f2c18dd26134bcabd20de1550ec 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -2111,6 +2111,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -2114,6 +2114,8 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } public void knockback(double strength, double x, double z, @Nullable Entity attacker, io.papermc.paper.event.entity.EntityKnockbackEvent.Cause eventCause) { // Paper - knockback events @@ -17,7 +17,7 @@ index 6214467ae7e2e9d84e46abed00a94bc22d4a3da7..1904cdab2e2cc6e6996d4d1ba578f2dd strength *= 1.0 - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE); if (true || !(strength <= 0.0)) { // CraftBukkit - Call event even when force is 0 // this.hasImpulse = true; // CraftBukkit - Move down -@@ -2141,6 +2143,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -2144,6 +2146,20 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } } diff --git a/leaf-server/minecraft-patches/features/0165-Multithreaded-Tracker.patch b/leaf-server/minecraft-patches/features/0165-Multithreaded-Tracker.patch index 335c408b..3af12d4a 100644 --- a/leaf-server/minecraft-patches/features/0165-Multithreaded-Tracker.patch +++ b/leaf-server/minecraft-patches/features/0165-Multithreaded-Tracker.patch @@ -150,7 +150,7 @@ index 9c0c99b936b4a82ebfe924866e53ec71f7bbe9ad..2ccff968cb2065d34fad4d27573f9e30 .add( new ClientboundUpdateAttributesPacket.AttributeSnapshot( diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 07c371c4d65b4fec7b9701a7de62f18399d80df0..d8512ea61ef99587c72aa4853e91b49bd1887bf7 100644 +index bc643159911320de9d8f6b88e23db93a2b192ea6..aaac2c85d20c0ef446787cb973b55a80c8bfeb8d 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -1733,6 +1733,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, AutoCl @@ -24,7 +24,7 @@ index 3f02f57eca3768d843e58dd2936f37c7f5743402..4ba44c325c7a29d398ed10335108bc5c protected final NeighborUpdater neighborUpdater; private final List pendingBlockEntityTickers = Lists.newArrayList(); private boolean tickingBlockEntities; -@@ -1507,13 +1507,11 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1508,13 +1508,11 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl boolean runsNormally = this.tickRateManager().runsNormally(); int tickedEntities = 0; // Paper - rewrite chunk system @@ -39,7 +39,7 @@ index 3f02f57eca3768d843e58dd2936f37c7f5743402..4ba44c325c7a29d398ed10335108bc5c } else if (runsNormally && this.shouldTickBlocksAt(tickingBlockEntity.getPos())) { tickingBlockEntity.tick(); // Paper start - rewrite chunk system -@@ -1523,7 +1521,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1524,7 +1522,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl // Paper end - rewrite chunk system } } diff --git a/leaf-server/minecraft-patches/features/0189-Remove-stream-in-villagers.patch b/leaf-server/minecraft-patches/features/0189-Remove-stream-in-villagers.patch index 1b1a21f2..735a79ed 100644 --- a/leaf-server/minecraft-patches/features/0189-Remove-stream-in-villagers.patch +++ b/leaf-server/minecraft-patches/features/0189-Remove-stream-in-villagers.patch @@ -41,10 +41,10 @@ index 72cca4897f9697573fd6987a5f0d2df52761b8c3..04eea77cf84aaeb781608e48f2aa32f3 private static void throwHalfStack(Villager villager, Set stack, LivingEntity entity) { diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index e6a750ab472eba53de1e5f9e2f507f3a0a9d94d4..d3a86b2d9de3be3bdd38682712472b86b90f5661 100644 +index 2c6f0d9a91367a0dc9b211b9ae9fafeb7efde315..2b20cd647ec00b3503cf5634dfbe9b9a8f8edbc4 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -973,7 +973,17 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -971,7 +971,17 @@ public class Villager extends AbstractVillager implements ReputationEventHandler private int countFoodPointsInInventory() { SimpleContainer inventory = this.getInventory(); diff --git a/leaf-server/minecraft-patches/features/0191-Only-player-pushable.patch b/leaf-server/minecraft-patches/features/0191-Only-player-pushable.patch index 4889aa76..20a40a82 100644 --- a/leaf-server/minecraft-patches/features/0191-Only-player-pushable.patch +++ b/leaf-server/minecraft-patches/features/0191-Only-player-pushable.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Only player pushable Useful for extreme cases like massive entities collide together in a small area diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 600e107371507b081c151af26a7d3ff85c59d418..5aec9481b3b9e59911a948c876e4e2a5b0876357 100644 +index 3d782ffd7170b0ff0b9ca5d7987e92026921426b..f69512541e1f72c6234ab29cb42cccddc95538eb 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -3694,7 +3694,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3696,7 +3696,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.checkAutoSpinAttack(boundingBox, this.getBoundingBox()); } @@ -18,7 +18,7 @@ index 600e107371507b081c151af26a7d3ff85c59d418..5aec9481b3b9e59911a948c876e4e2a5 // Paper start - Add EntityMoveEvent // Purpur start - Ridables if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { -@@ -3841,7 +3841,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3843,7 +3843,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin return; } // Paper end - don't run getEntities if we're not going to use its result @@ -32,7 +32,7 @@ index 600e107371507b081c151af26a7d3ff85c59d418..5aec9481b3b9e59911a948c876e4e2a5 if (!pushableEntities.isEmpty()) { if (this.level() instanceof ServerLevel serverLevel) { // Paper - don't run getEntities if we're not going to use its result; moved up -@@ -3875,6 +3880,44 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3877,6 +3882,44 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } } diff --git a/leaf-server/minecraft-patches/features/0193-optimize-mob-despawn.patch b/leaf-server/minecraft-patches/features/0193-optimize-mob-despawn.patch index e8dad9e8..63dc54a4 100644 --- a/leaf-server/minecraft-patches/features/0193-optimize-mob-despawn.patch +++ b/leaf-server/minecraft-patches/features/0193-optimize-mob-despawn.patch @@ -5,7 +5,7 @@ Subject: [PATCH] optimize mob despawn diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 105423d248df2647d78e6f1a288e9b41003ad437..06294e4036991a803deefc20e35160c5ff76a81b 100644 +index 2dfdf64386c75557050e458fd56644f909950865..30bb5b9d021d01dea272313763b0748856ce28a6 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -797,13 +797,19 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -38,10 +38,10 @@ index 105423d248df2647d78e6f1a288e9b41003ad437..06294e4036991a803deefc20e35160c5 final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting ChunkPos pos = chunk.getPos(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index f850c4459f25295af9fb01d5338520071a0f1cda..902bdca37fba04933399c9966450b1d2e8a9f66e 100644 +index 427b0b42ea1c6418a733824f4af0de1b1e901cb9..67556752551e1d30519e2533543de9b04342420b 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -5101,6 +5101,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5099,6 +5099,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public void checkDespawn() { } @@ -56,10 +56,10 @@ index f850c4459f25295af9fb01d5338520071a0f1cda..902bdca37fba04933399c9966450b1d2 return Leashable.createQuadLeashOffsets(this, 0.0, 0.5, 0.5, 0.0); } diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 751c8c17c3c2968fad358ae8807eaca54de82a34..2eafd8453a70e536bea8c125296fc49a7e3677bf 100644 +index e96605d652ca7265352ace09fd5e1892b4bbcd65..29029c58637f5622cc542ed8826b807b15f20644 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -762,6 +762,53 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -763,6 +763,53 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } } diff --git a/leaf-server/minecraft-patches/features/0202-SparklyPaper-Parallel-world-ticking.patch b/leaf-server/minecraft-patches/features/0202-SparklyPaper-Parallel-world-ticking.patch index c6a6a874..8ca3a82e 100644 --- a/leaf-server/minecraft-patches/features/0202-SparklyPaper-Parallel-world-ticking.patch +++ b/leaf-server/minecraft-patches/features/0202-SparklyPaper-Parallel-world-ticking.patch @@ -95,13 +95,13 @@ index 582e012222123e5001c34153f2ee1ab1d08935fd..c0bce2293d07ca58cc5bc9e036ab8dca List states = new java.util.ArrayList<>(level.capturedBlockStates.values()); level.capturedBlockStates.clear(); diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 84d001b3bd778f20afc4a0e3c7661e6cf0afa25e..7d4e3946bf94bad80d2e3af4763c246bafa5cff3 100644 +index f8dd55a4a5a93788e0690b1a6a6b87d12cf26571..b81de5b278c43a404d0f6b96cf134b401f137ab3 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -290,6 +290,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function threadFunction) { @@ -394,17 +394,17 @@ index 4bf87ebb49880b8e09203a48fce6371398281561..27bbe0c43dd9b7f8bf932a6b4825ce2c } else if (this.visible.remove(advancementHolder)) { idOutput.add(advancementHolder.id()); diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 77f11179836636424927843f5f10c3fd23d2b2d4..9b8d119116b0c3a51d3fe2ff7efb33cc39627cc4 100644 +index 8350d6f00764c792f5f4f2c2e91df6777cb06e0d..dd6e59fea9e8a9e7660649c491eec30e1055f459 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java @@ -198,6 +198,12 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - } org.purpurmc.purpur.PurpurConfig.registerCommands(); // Purpur end - Purpur config files + org.dreeam.leaf.command.LeafCommands.registerCommands(this); // Leaf - Leaf commands + // Leaf start - SparklyPaper - parallel world ticking mod (make configurable) + if (org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.enabled) { + serverLevelTickingSemaphore = new java.util.concurrent.Semaphore(org.dreeam.leaf.config.modules.async.SparklyPaperParallelWorldTicking.threads); // SparklyPaper - parallel world ticking -+ DedicatedServer.LOGGER.info("Using " + serverLevelTickingSemaphore.availablePermits() + " permits for parallel world ticking"); // SparklyPaper - parallel world ticking ++ DedicatedServer.LOGGER.info("Using {} permits for parallel world ticking", serverLevelTickingSemaphore.availablePermits()); // SparklyPaper - parallel world ticking + } + // Leaf end - SparklyPaper - parallel world ticking mod (make configurable) com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now @@ -423,7 +423,7 @@ index eaaa66c4d86d4ebda0acf8f1dbe8ecb55aa28285..3a6c894178829cec8daa08ea9f0294f7 continue; } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 06294e4036991a803deefc20e35160c5ff76a81b..78062a93c63da07cf9d92b03fc72e97933342cc9 100644 +index 30bb5b9d021d01dea272313763b0748856ce28a6..bfb4ea9d597b5f480ca0b7c095edf5090b84211c 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -180,7 +180,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -728,7 +728,7 @@ index b8f5cc4540c4a992ae4cf5673886ce6107eb82a8..6c2b7818ff6535f73fcbb87ef25b2992 // Paper end - Inventory close reason this.connection.send(new ClientboundContainerClosePacket(this.containerMenu.containerId)); diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 9a2e11ff1ed5b8d07b1d6c66ba1a6109c290ff8b..f4cd57fe41caf6422bfe80ee42cb520515ff4bdc 100644 +index 837fed1c7786d6d3397f70d910cace4cdf2223ce..f61fac2767d2085c10a3d34ec475bb07d625737d 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -257,6 +257,8 @@ public abstract class PlayerList { @@ -858,10 +858,10 @@ index f9e7532f86122a379692561a639a209a126e8bba..fab317d6c9a1c914f19bae11846cb576 if (isLocatorBarEnabledFor(player)) { if (!connection.isBroken()) { diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 902bdca37fba04933399c9966450b1d2e8a9f66e..bdcf61262dc3c370eead4f555226c82f004f420d 100644 +index 67556752551e1d30519e2533543de9b04342420b..45bc4aa35fda48c816e08ec8bacfb11a5c792b27 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -3478,15 +3478,40 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3476,15 +3476,40 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.portalProcess != null) { if (this.portalProcess.processPortalTeleportation(serverLevel, this, this.canUsePortal(false))) { this.setPortalCooldown(); @@ -909,7 +909,7 @@ index 902bdca37fba04933399c9966450b1d2e8a9f66e..bdcf61262dc3c370eead4f555226c82f } else if (this.portalProcess.hasExpired()) { this.portalProcess = null; } -@@ -4063,6 +4088,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4061,6 +4086,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } private Entity teleportCrossDimension(ServerLevel oldLevel, ServerLevel newLevel, TeleportTransition teleportTransition) { @@ -1032,10 +1032,10 @@ index 3614551856c594f3c0cfee984fcf03fad672b007..f4577f908ca9f279b72d89e5b0822d34 }); entity.getBrain().eraseMemory(MemoryModuleType.POTENTIAL_JOB_SITE); diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index d3a86b2d9de3be3bdd38682712472b86b90f5661..a4fc8d4d17971643921e91438f527a2551d51808 100644 +index 2b20cd647ec00b3503cf5634dfbe9b9a8f8edbc4..6ea510d1e039d599746940325d2d184cb7e8fb6f 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -796,13 +796,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -794,13 +794,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.brain.getMemory(moduleType).ifPresent(pos -> { ServerLevel level = server.getLevel(pos.dimension()); if (level != null) { @@ -1136,10 +1136,10 @@ index 8c713d90e81df61d65fa6770516afc4704bbbb6f..f5ca3d6b29b11475ac56cd206464577b serverLevel.capturedBlockStates.clear(); org.bukkit.event.world.StructureGrowEvent structureEvent = null; diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 4ba44c325c7a29d398ed10335108bc5c9556e109..93be887352ac5995672a18b7289e5f4d0ca25870 100644 +index adf9d0bc98408477450bcee8628b91fda2b95c54..2087557416757b17ccdc24a59354eee67ce85627 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -165,6 +165,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -166,6 +166,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl // Gale end - Gale configuration public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur - Purpur config files @@ -1147,7 +1147,7 @@ index 4ba44c325c7a29d398ed10335108bc5c9556e109..93be887352ac5995672a18b7289e5f4d public static @Nullable BlockPos lastPhysicsProblem; // Spigot private int tileTickPosition; public final Map explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions -@@ -1137,6 +1138,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1138,6 +1139,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @Override public boolean setBlock(BlockPos pos, BlockState state, int flags, int recursionLeft) { @@ -1156,7 +1156,7 @@ index 4ba44c325c7a29d398ed10335108bc5c9556e109..93be887352ac5995672a18b7289e5f4d // CraftBukkit start - tree generation if (this.captureTreeGeneration) { // Paper start - Protect Bedrock and End Portal/Frames from being destroyed -@@ -1515,9 +1518,12 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1516,9 +1519,12 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl } else if (runsNormally && this.shouldTickBlocksAt(tickingBlockEntity.getPos())) { tickingBlockEntity.tick(); // Paper start - rewrite chunk system @@ -1171,7 +1171,7 @@ index 4ba44c325c7a29d398ed10335108bc5c9556e109..93be887352ac5995672a18b7289e5f4d // Paper end - rewrite chunk system } } -@@ -1538,7 +1544,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1539,7 +1545,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl entity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Gale - Airplane - remove lambda from ticking guard - diff on change ServerLevel#tick // Paper end - Prevent block entity and entity crashes } @@ -1181,7 +1181,7 @@ index 4ba44c325c7a29d398ed10335108bc5c9556e109..93be887352ac5995672a18b7289e5f4d } // Paper start - Option to prevent armor stands from doing entity lookups -@@ -1675,6 +1682,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1676,6 +1683,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @Nullable @Override public BlockEntity getBlockEntity(BlockPos pos) { @@ -1190,7 +1190,7 @@ index 4ba44c325c7a29d398ed10335108bc5c9556e109..93be887352ac5995672a18b7289e5f4d // Paper start - Perf: Optimize capturedTileEntities lookup net.minecraft.world.level.block.entity.BlockEntity blockEntity; if (!this.capturedTileEntities.isEmpty() && (blockEntity = this.capturedTileEntities.get(pos)) != null) { -@@ -1691,6 +1700,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1692,6 +1701,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl } public void setBlockEntity(BlockEntity blockEntity) { @@ -1199,7 +1199,7 @@ index 4ba44c325c7a29d398ed10335108bc5c9556e109..93be887352ac5995672a18b7289e5f4d BlockPos blockPos = blockEntity.getBlockPos(); if (!this.isOutsideBuildHeight(blockPos)) { // CraftBukkit start -@@ -1775,6 +1786,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1776,6 +1787,8 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl @Override public List getEntities(@Nullable Entity entity, AABB boundingBox, Predicate predicate) { @@ -1208,7 +1208,7 @@ index 4ba44c325c7a29d398ed10335108bc5c9556e109..93be887352ac5995672a18b7289e5f4d List list = Lists.newArrayList(); // Paper start - rewrite chunk system -@@ -2097,8 +2110,15 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -2098,8 +2111,15 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl public abstract RecipeAccess recipeAccess(); public BlockPos getBlockRandomPos(int x, int y, int z, int yMask) { diff --git a/leaf-server/minecraft-patches/features/0204-Paper-PR-Fix-cancelled-Projectile-Events-still-consu.patch b/leaf-server/minecraft-patches/features/0204-Paper-PR-Fix-cancelled-Projectile-Events-still-consu.patch index dadc3d43..7f423e51 100644 --- a/leaf-server/minecraft-patches/features/0204-Paper-PR-Fix-cancelled-Projectile-Events-still-consu.patch +++ b/leaf-server/minecraft-patches/features/0204-Paper-PR-Fix-cancelled-Projectile-Events-still-consu.patch @@ -65,7 +65,7 @@ index d49a5360d4a21e5b15bac94a823831e25d242a3d..04286fdba0c22d5b6d7b3ab71ee1a1fe CriteriaTriggers.SHOT_CROSSBOW.trigger(serverPlayer, weapon); serverPlayer.awardStat(Stats.ITEM_USED.get(weapon.getItem())); diff --git a/net/minecraft/world/item/ProjectileWeaponItem.java b/net/minecraft/world/item/ProjectileWeaponItem.java -index f12b9e4e8a78c713782af548d1cb15ef363305b4..799652853481b6d93619d6afaf82185060ebaa41 100644 +index f12b9e4e8a78c713782af548d1cb15ef363305b4..99a6d549d968b5df227c3b96febf0e3a86d47c90 100644 --- a/net/minecraft/world/item/ProjectileWeaponItem.java +++ b/net/minecraft/world/item/ProjectileWeaponItem.java @@ -40,7 +40,20 @@ public abstract class ProjectileWeaponItem extends Item { @@ -234,10 +234,10 @@ index f12b9e4e8a78c713782af548d1cb15ef363305b4..799652853481b6d93619d6afaf821850 player.getInventory().removeItem(ammo); } diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 93be887352ac5995672a18b7289e5f4d0ca25870..f881866e460b1361f3691c5a999277673845f64e 100644 +index 2087557416757b17ccdc24a59354eee67ce85627..7447b5e99c9aa4b3507839d0653fb0582c7a72ad 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -171,6 +171,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -172,6 +172,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl public final Map explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here public final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = org.dreeam.leaf.config.modules.opt.FastRNG.enabled ? new org.dreeam.leaf.util.math.random.FasterRandomSource(net.minecraft.world.level.levelgen.RandomSupport.generateUniqueSeed()) : new ca.spottedleaf.moonrise.common.util.SimpleThreadUnsafeRandom(net.minecraft.world.level.levelgen.RandomSupport.generateUniqueSeed()); // Gale - Pufferfish - move random tick random // Leaf - Faster random generator diff --git a/leaf-server/minecraft-patches/features/0210-Raytrace-AntiXray-SDK-integration.patch b/leaf-server/minecraft-patches/features/0210-Raytrace-AntiXray-SDK-integration.patch index accaa639..e85349a3 100644 --- a/leaf-server/minecraft-patches/features/0210-Raytrace-AntiXray-SDK-integration.patch +++ b/leaf-server/minecraft-patches/features/0210-Raytrace-AntiXray-SDK-integration.patch @@ -25,10 +25,10 @@ index d638821595138ef972163925136eb57207b31719..02c02314a4a6a7a6da427f0d064dbc61 } diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index f881866e460b1361f3691c5a999277673845f64e..38a6ca1c0789e50ca15f7a5e602da9be5f8371e9 100644 +index 7447b5e99c9aa4b3507839d0653fb0582c7a72ad..ceba364a50fc96865cadf30674655a109baae06d 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -1178,6 +1178,12 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1179,6 +1179,12 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl snapshot.setFlags(flags); // Paper - always set the flag of the most recent call to mitigate issues with multiple update at the same pos with different flags } BlockState blockState = chunkAt.setBlockState(pos, state, flags); diff --git a/leaf-server/minecraft-patches/features/0217-Prevent-double-chunk-retrieving-in-entity-fluid-push.patch b/leaf-server/minecraft-patches/features/0217-Prevent-double-chunk-retrieving-in-entity-fluid-push.patch index 25f47637..151bc78d 100644 --- a/leaf-server/minecraft-patches/features/0217-Prevent-double-chunk-retrieving-in-entity-fluid-push.patch +++ b/leaf-server/minecraft-patches/features/0217-Prevent-double-chunk-retrieving-in-entity-fluid-push.patch @@ -11,10 +11,10 @@ As part of: Airplane (https://github.com/TECHNOVE/Airplane) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index bdcf61262dc3c370eead4f555226c82f004f420d..e223394c968f1fe31eb66dfbc95bd6e07fb094ee 100644 +index 45bc4aa35fda48c816e08ec8bacfb11a5c792b27..7160a31e2d6b4315d3aa46b857a7a175fd7d08f5 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -4781,10 +4781,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4779,10 +4779,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Paper start - optimise collisions public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { @@ -26,7 +26,7 @@ index bdcf61262dc3c370eead4f555226c82f004f420d..e223394c968f1fe31eb66dfbc95bd6e0 final AABB boundingBox = this.getBoundingBox().deflate(1.0E-3); final Level world = this.level; -@@ -4820,7 +4817,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4818,7 +4815,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess for (int currChunkZ = minChunkZ; currChunkZ <= maxChunkZ; ++currChunkZ) { for (int currChunkX = minChunkX; currChunkX <= maxChunkX; ++currChunkX) { diff --git a/leaf-server/minecraft-patches/features/0233-Optimise-player-movement-checks.patch b/leaf-server/minecraft-patches/features/0233-Optimise-player-movement-checks.patch index da20c425..034f3428 100644 --- a/leaf-server/minecraft-patches/features/0233-Optimise-player-movement-checks.patch +++ b/leaf-server/minecraft-patches/features/0233-Optimise-player-movement-checks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Optimise player movement checks diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index e223394c968f1fe31eb66dfbc95bd6e07fb094ee..0c64c88dfc65d3b1333dcc8ed28b89811307b126 100644 +index 7160a31e2d6b4315d3aa46b857a7a175fd7d08f5..d62d82dfab6fff45ca53c38510443adb85caeb6a 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1185,7 +1185,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1183,7 +1183,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Paper end diff --git a/leaf-server/minecraft-patches/features/0236-Add-configurable-death-item-drop-knockback-settings.patch b/leaf-server/minecraft-patches/features/0236-Add-configurable-death-item-drop-knockback-settings.patch index 604262e6..3a4563c3 100644 --- a/leaf-server/minecraft-patches/features/0236-Add-configurable-death-item-drop-knockback-settings.patch +++ b/leaf-server/minecraft-patches/features/0236-Add-configurable-death-item-drop-knockback-settings.patch @@ -18,10 +18,10 @@ index 228838f51d9906f37e75838bc0b18037d2bd2bb2..896e50276e4e70f694562f0626dc53d3 } } diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 5aec9481b3b9e59911a948c876e4e2a5b0876357..68c03f5d12978f7da12a892bfc31600e755f1202 100644 +index f69512541e1f72c6234ab29cb42cccddc95538eb..4476a43011d1f8e7be6fc62410fef80c3e4f945a 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -4167,9 +4167,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -4169,9 +4169,9 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } if (randomizeMotion) { diff --git a/leaf-server/minecraft-patches/features/0237-Optimize-getScaledTrackingDistance.patch b/leaf-server/minecraft-patches/features/0237-Optimize-getScaledTrackingDistance.patch index 00bcaf86..541a2895 100644 --- a/leaf-server/minecraft-patches/features/0237-Optimize-getScaledTrackingDistance.patch +++ b/leaf-server/minecraft-patches/features/0237-Optimize-getScaledTrackingDistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Optimize getScaledTrackingDistance diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java -index 9b8d119116b0c3a51d3fe2ff7efb33cc39627cc4..bfa2e28b5dd88f62375e79a8ccf344ffc21f5c1b 100644 +index dd6e59fea9e8a9e7660649c491eec30e1055f459..29c111e9576063b510fd2f4e56da518881b29c80 100644 --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -778,7 +778,13 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -777,7 +777,13 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @Override public int getScaledTrackingDistance(int trackingDistance) { diff --git a/leaf-server/minecraft-patches/features/0239-Optimize-isEyeInFluid.patch b/leaf-server/minecraft-patches/features/0239-Optimize-isEyeInFluid.patch index 76eeb602..2b8f5763 100644 --- a/leaf-server/minecraft-patches/features/0239-Optimize-isEyeInFluid.patch +++ b/leaf-server/minecraft-patches/features/0239-Optimize-isEyeInFluid.patch @@ -18,7 +18,7 @@ index 896e50276e4e70f694562f0626dc53d3ecd21258..58b0eb299f8750e167145f4cba6aba99 if (rounded > 0) { this.awardStat(Stats.WALK_UNDER_WATER_ONE_CM, rounded); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 0c64c88dfc65d3b1333dcc8ed28b89811307b126..fb5ca5ecbc4b018e56d6d934f399f20808240811 100644 +index d62d82dfab6fff45ca53c38510443adb85caeb6a..1765d79fd2102c0df7fb6b686872a84de2fdc38f 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -288,7 +288,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -37,7 +37,7 @@ index 0c64c88dfc65d3b1333dcc8ed28b89811307b126..fb5ca5ecbc4b018e56d6d934f399f208 public int invulnerableTime; protected boolean firstTick = true; protected final SynchedEntityData entityData; -@@ -2039,8 +2046,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2037,8 +2044,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } private void updateFluidOnEyes() { @@ -48,7 +48,7 @@ index 0c64c88dfc65d3b1333dcc8ed28b89811307b126..fb5ca5ecbc4b018e56d6d934f399f208 double eyeY = this.getEyeY(); if (!( this.getVehicle() instanceof AbstractBoat abstractBoat -@@ -2052,7 +2059,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2050,7 +2057,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess FluidState fluidState = this.level().getFluidState(blockPos); double d = blockPos.getY() + fluidState.getHeight(this.level(), blockPos); if (d > eyeY) { @@ -59,7 +59,7 @@ index 0c64c88dfc65d3b1333dcc8ed28b89811307b126..fb5ca5ecbc4b018e56d6d934f399f208 } } } -@@ -2132,9 +2141,25 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2130,9 +2139,25 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -100,7 +100,7 @@ index 66ae0b340c7e9ebccfeaee786577e27916ace38c..b7cd9b286e7392c3fd619c7ba9e04907 } else if (!flag) { this.applyGravity(); diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 68c03f5d12978f7da12a892bfc31600e755f1202..d2e0fc60575a52b8daef07f00df8991ec5462379 100644 +index 4476a43011d1f8e7be6fc62410fef80c3e4f945a..de22fce4f98a600a26d1d78f3bbc1c5f5a8b5bfa 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -463,7 +463,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin diff --git a/leaf-server/minecraft-patches/features/0240-Cache-block-state-tags.patch b/leaf-server/minecraft-patches/features/0240-Cache-block-state-tags.patch index e30adf66..746ffb8a 100644 --- a/leaf-server/minecraft-patches/features/0240-Cache-block-state-tags.patch +++ b/leaf-server/minecraft-patches/features/0240-Cache-block-state-tags.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Cache block state tags diff --git a/net/minecraft/server/Main.java b/net/minecraft/server/Main.java -index 4134679c838307de7ae410cfc727fada0eeebf6b..caea98bbca9c0f161303701c9ad5cc5aa58f3a9f 100644 +index 1de83fa9507d1432442b15d008b9c30b27acf810..2b9da17832a0f10836b52192d794e0cce30d5ad8 100644 --- a/net/minecraft/server/Main.java +++ b/net/minecraft/server/Main.java -@@ -335,6 +335,7 @@ public class Main { +@@ -336,6 +336,7 @@ public class Main { levelStorageAccess.saveDataTag(frozen, worldData); */ Class.forName(net.minecraft.world.entity.npc.VillagerTrades.class.getName()); // Paper - load this sync so it won't fail later async diff --git a/leaf-server/minecraft-patches/features/0250-Use-UUID-for-cure-reputation.patch b/leaf-server/minecraft-patches/features/0250-Use-UUID-for-cure-reputation.patch index 588de15a..9823c98c 100644 --- a/leaf-server/minecraft-patches/features/0250-Use-UUID-for-cure-reputation.patch +++ b/leaf-server/minecraft-patches/features/0250-Use-UUID-for-cure-reputation.patch @@ -22,10 +22,10 @@ index 22c1545a0329d56e0ec41ae4da1e1922aa1f9737..e89e4c26c40cbb3ef002022f22886d5f } diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index a4fc8d4d17971643921e91438f527a2551d51808..b0c7bd4c38561194edfa003a1fc942a6fab5ce72 100644 +index 6ea510d1e039d599746940325d2d184cb7e8fb6f..a4da72da9be1d298e271291fd50c7b7c067811cc 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -1094,6 +1094,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1092,6 +1092,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } } diff --git a/leaf-server/minecraft-patches/features/0257-optimize-waypoint.patch b/leaf-server/minecraft-patches/features/0257-optimize-waypoint.patch index 3ba089d0..341b5e43 100644 --- a/leaf-server/minecraft-patches/features/0257-optimize-waypoint.patch +++ b/leaf-server/minecraft-patches/features/0257-optimize-waypoint.patch @@ -5,10 +5,10 @@ Subject: [PATCH] optimize waypoint diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index fb5ca5ecbc4b018e56d6d934f399f20808240811..6982d163eb02b5706e0887cff83f288c93e2524c 100644 +index 1765d79fd2102c0df7fb6b686872a84de2fdc38f..663dbcbec91f92a941cbd6d40053855ec2545981 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -5119,7 +5119,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5117,7 +5117,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess int floor = Mth.floor(x); int floor1 = Mth.floor(y); int floor2 = Mth.floor(z); @@ -18,7 +18,7 @@ index fb5ca5ecbc4b018e56d6d934f399f20808240811..6982d163eb02b5706e0887cff83f288c this.blockPosition = new BlockPos(floor, floor1, floor2); this.inBlockState = null; if (SectionPos.blockToSectionCoord(floor) != this.chunkPosition.x || SectionPos.blockToSectionCoord(floor2) != this.chunkPosition.z) { -@@ -5128,7 +5129,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5126,7 +5127,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } this.levelCallback.onMove(); diff --git a/leaf-server/minecraft-patches/features/0258-Paw-optimization.patch b/leaf-server/minecraft-patches/features/0258-Paw-optimization.patch index b12444e0..0820f681 100644 --- a/leaf-server/minecraft-patches/features/0258-Paw-optimization.patch +++ b/leaf-server/minecraft-patches/features/0258-Paw-optimization.patch @@ -117,7 +117,7 @@ index 2a1a6a0306b781e9ae5c0e3261cb740f37be4a8c..7e84b94a4602801e8cc713b28d0d9305 if (!org.dreeam.leaf.config.modules.async.AsyncMobSpawning.enabled || _pufferfish_spawnCountsReady.get()) { diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 88a3f390f615275c84237814e10c969bfe3c6a55..0ad594fe2548cf1c00f8d75fe076d62c3c99f393 100644 +index 65b35ab2348e139727296ed27ce59c1b7eb2d5c7..602ef3e2697fedba634a44b71895158e01e0a680 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -1496,13 +1496,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -149,10 +149,10 @@ index 88a3f390f615275c84237814e10c969bfe3c6a55..0ad594fe2548cf1c00f8d75fe076d62c private void tickPassenger(Entity ridingEntity, Entity passengerEntity, final boolean isActive) { // Paper - EAR 2 diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 6982d163eb02b5706e0887cff83f288c93e2524c..7bdb5ea03f0fa71edf0ca20145070475e4e028e8 100644 +index 663dbcbec91f92a941cbd6d40053855ec2545981..e8128fbf13e3a7083825253361227625dc46eef2 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1138,16 +1138,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1136,16 +1136,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.onGround; } @@ -169,7 +169,7 @@ index 6982d163eb02b5706e0887cff83f288c93e2524c..7bdb5ea03f0fa71edf0ca20145070475 public void move(MoverType type, Vec3 movement) { // Gale start - VMP - skip entity move if movement is zero if (!this.boundingBoxChanged && movement.equals(Vec3.ZERO)) { -@@ -1156,16 +1146,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1154,16 +1144,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess boundingBoxChanged = false; // Gale end - VMP - skip entity move if movement is zero final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity @@ -186,7 +186,7 @@ index 6982d163eb02b5706e0887cff83f288c93e2524c..7bdb5ea03f0fa71edf0ca20145070475 if (this.noPhysics) { this.setPos(this.getX() + movement.x, this.getY() + movement.y, this.getZ() + movement.z); } else { -@@ -1289,13 +1270,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1287,13 +1268,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Gale end - skip negligible planar movement multiplication } } @@ -200,7 +200,7 @@ index 6982d163eb02b5706e0887cff83f288c93e2524c..7bdb5ea03f0fa71edf0ca20145070475 } private void applyMovementEmissionAndPlaySound(Entity.MovementEmission movementEmission, Vec3 movement, BlockPos pos, BlockState state) { -@@ -5013,9 +4987,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5011,9 +4985,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public void setDeltaMovement(Vec3 deltaMovement) { @@ -210,7 +210,7 @@ index 6982d163eb02b5706e0887cff83f288c93e2524c..7bdb5ea03f0fa71edf0ca20145070475 } public void addDeltaMovement(Vec3 addend) { -@@ -5113,9 +5085,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5111,9 +5083,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Paper end - Block invalid positions and bounding box if (this.position.x != x || this.position.y != y || this.position.z != z) { diff --git a/leaf-server/minecraft-patches/features/0259-Fix-Paper-config-fixClimbingBypassingCrammingRule.patch b/leaf-server/minecraft-patches/features/0259-Fix-Paper-config-fixClimbingBypassingCrammingRule.patch index 29fd3eec..cdea1fbe 100644 --- a/leaf-server/minecraft-patches/features/0259-Fix-Paper-config-fixClimbingBypassingCrammingRule.patch +++ b/leaf-server/minecraft-patches/features/0259-Fix-Paper-config-fixClimbingBypassingCrammingRule.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix Paper config fixClimbingBypassingCrammingRule Waiting for Paper#12793 diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index d2e0fc60575a52b8daef07f00df8991ec5462379..09e0b1bb9f8e4605097af6466681f9aec4e0204f 100644 +index de22fce4f98a600a26d1d78f3bbc1c5f5a8b5bfa..f62898ec36cea977d67da087bf741fb508b1f88d 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -3844,7 +3844,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3846,7 +3846,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin // Leaf start - Only player pushable final AABB box = this.getBoundingBox(); List pushableEntities = org.dreeam.leaf.config.modules.gameplay.OnlyPlayerPushable.enabled @@ -19,10 +19,10 @@ index d2e0fc60575a52b8daef07f00df8991ec5462379..09e0b1bb9f8e4605097af6466681f9ae // Leaf end - Only player pushable if (!pushableEntities.isEmpty()) { diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 38a6ca1c0789e50ca15f7a5e602da9be5f8371e9..afebf43067f13493d06e6c0620058c135eb9b880 100644 +index ceba364a50fc96865cadf30674655a109baae06d..71f13ae7f3c4f65705dd278da8e4be55da9630c4 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -1907,7 +1907,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1908,7 +1908,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl // Paper end - rewrite chunk system public List getPushableEntities(Entity entity, AABB boundingBox) { diff --git a/leaf-server/minecraft-patches/features/0261-Optimise-getEntities.patch b/leaf-server/minecraft-patches/features/0261-Optimise-getEntities.patch index 3201e3d4..67cac33b 100644 --- a/leaf-server/minecraft-patches/features/0261-Optimise-getEntities.patch +++ b/leaf-server/minecraft-patches/features/0261-Optimise-getEntities.patch @@ -86,10 +86,10 @@ index 7f508c50e451a0689218cd36e6ac993f87092c04..a6c1f450f32fa688b102140963fd5bfb } diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 09e0b1bb9f8e4605097af6466681f9aec4e0204f..4ab8e8b4301c4ab474c7c4362b40303627363e82 100644 +index f62898ec36cea977d67da087bf741fb508b1f88d..a267b5bcf03b1186465adf56d49d5ea2423652f7 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -2276,7 +2276,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -2279,7 +2279,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin @Override public boolean isAlive() { diff --git a/leaf-server/minecraft-patches/features/0264-optimize-checkInsideBlocks-calls.patch b/leaf-server/minecraft-patches/features/0264-optimize-checkInsideBlocks-calls.patch index 5f9d6532..27bd054f 100644 --- a/leaf-server/minecraft-patches/features/0264-optimize-checkInsideBlocks-calls.patch +++ b/leaf-server/minecraft-patches/features/0264-optimize-checkInsideBlocks-calls.patch @@ -11,10 +11,10 @@ Subject: [PATCH] optimize checkInsideBlocks calls License: LGPL-3.0 (https://www.gnu.org/licenses/lgpl-3.0.html) diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 7bdb5ea03f0fa71edf0ca20145070475e4e028e8..95c11de1796c032a813c96dba3476171a0e4aadb 100644 +index e8128fbf13e3a7083825253361227625dc46eef2..b4a7281de8e016d059b417dee9aaedc02253a97f 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1702,8 +1702,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1700,8 +1700,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } } @@ -29,7 +29,7 @@ index 7bdb5ea03f0fa71edf0ca20145070475e4e028e8..95c11de1796c032a813c96dba3476171 BlockGetter.forEachBlockIntersectedBetween( vec3, vec31, -@@ -1712,35 +1717,51 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1710,35 +1715,51 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (!this.isAlive()) { return false; } else { @@ -88,7 +88,7 @@ index 7bdb5ea03f0fa71edf0ca20145070475e4e028e8..95c11de1796c032a813c96dba3476171 } this.debugBlockIntersection(pos, flag, flag1); -@@ -1750,6 +1771,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1748,6 +1769,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } ); } diff --git a/leaf-server/minecraft-patches/features/0268-Lithium-equipment-tracking.patch b/leaf-server/minecraft-patches/features/0268-Lithium-equipment-tracking.patch index 4de2d0b6..05513b16 100644 --- a/leaf-server/minecraft-patches/features/0268-Lithium-equipment-tracking.patch +++ b/leaf-server/minecraft-patches/features/0268-Lithium-equipment-tracking.patch @@ -241,7 +241,7 @@ index 90814ad07a2686c5a274860395f5aca29cc3bf13..94c7ae9535a235abb8fddf0ca6578dfa + } } diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 4ab8e8b4301c4ab474c7c4362b40303627363e82..0e7ff8093241c9ac5c4a62edb2c250eeb0e80d3e 100644 +index a267b5bcf03b1186465adf56d49d5ea2423652f7..967befdff322d68f4107cc835427ae0fa9c6f721 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -431,7 +431,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin @@ -253,7 +253,7 @@ index 4ab8e8b4301c4ab474c7c4362b40303627363e82..0e7ff8093241c9ac5c4a62edb2c250ee EnchantmentHelper.tickEffects(serverLevel, this); } -@@ -3458,6 +3458,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3460,6 +3460,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin public void detectEquipmentUpdates() { Map map = this.collectEquipmentChanges(); if (map != null) { @@ -261,7 +261,7 @@ index 4ab8e8b4301c4ab474c7c4362b40303627363e82..0e7ff8093241c9ac5c4a62edb2c250ee this.handleHandSwap(map); if (!map.isEmpty()) { this.handleEquipmentChanges(map); -@@ -3467,6 +3468,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3469,6 +3470,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin @Nullable private Map collectEquipmentChanges() { diff --git a/leaf-server/minecraft-patches/features/0269-fix-purpur-attribute-base-patch.patch b/leaf-server/minecraft-patches/features/0269-fix-purpur-attribute-base-patch.patch index 254bc7f3..bbf3053c 100644 --- a/leaf-server/minecraft-patches/features/0269-fix-purpur-attribute-base-patch.patch +++ b/leaf-server/minecraft-patches/features/0269-fix-purpur-attribute-base-patch.patch @@ -18,10 +18,10 @@ index 86a694b94045b47f6e98c480645f75738b8a052c..bb9554463a6983ab98323f4dd665c7c1 // Purpur end - Configurable entity base attributes diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 0e7ff8093241c9ac5c4a62edb2c250eeb0e80d3e..e2f532433df740926ddfb44b6f65299d42241bff 100644 +index 967befdff322d68f4107cc835427ae0fa9c6f721..897e193766591a6a8bf10e10495a7054fa461f08 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -2853,6 +2853,16 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -2856,6 +2856,16 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin return this.getAttributes().getBaseValue(attribute); } @@ -39,7 +39,7 @@ index 0e7ff8093241c9ac5c4a62edb2c250eeb0e80d3e..e2f532433df740926ddfb44b6f65299d return this.attributes; } diff --git a/net/minecraft/world/entity/ambient/Bat.java b/net/minecraft/world/entity/ambient/Bat.java -index 59a849f5471a94bfbf364fe169d1a27a402629bd..893ff74b2a5171870f757b3d3c005077226e4459 100644 +index c4985dd71a93670ee24e6f07f99b72ee1040eb99..e2ea4af189277fb08105290647e87a6dca9ed828 100644 --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java @@ -99,15 +99,15 @@ public class Bat extends AmbientCreature { @@ -405,7 +405,7 @@ index 9bdc1f10e3b40672449ad166f130ecabdacc75d3..0065a43871605c8d2a8b29d1aed174ae // Purpur end - Configurable entity base attributes diff --git a/net/minecraft/world/entity/animal/allay/Allay.java b/net/minecraft/world/entity/animal/allay/Allay.java -index cb88b1afe261f95998a19fcb555f91143834ba3a..868dd1362112dd507ce2392023bfa9bc24686842 100644 +index 0291f80470899f38de872271e602565b2161b520..294f54730fcf710488c0c9ba0d45dda0bf3fb43b 100644 --- a/net/minecraft/world/entity/animal/allay/Allay.java +++ b/net/minecraft/world/entity/animal/allay/Allay.java @@ -169,8 +169,8 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @@ -435,7 +435,7 @@ index c520c4e478e3191cea7c2345a2e4c42b67c0762a..1a0ade86ca8d59d53b3d61be1417d0b8 // Purpur end - Configurable entity base attributes diff --git a/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 2cdf2fb60d4d3642f0870944be9bd5abafa9e817..45125fad187b101fbe72337c128bffc44dbb800c 100644 +index d8a65c8096fc8ec1ccef43c1b264da11335d2499..6441f2c96fc0b583817aed63c99073bc80f1716a 100644 --- a/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -140,8 +140,8 @@ public class Axolotl extends Animal implements Bucketable { @@ -450,7 +450,7 @@ index 2cdf2fb60d4d3642f0870944be9bd5abafa9e817..45125fad187b101fbe72337c128bffc4 // Purpur end - Configurable entity base attributes diff --git a/net/minecraft/world/entity/animal/frog/Frog.java b/net/minecraft/world/entity/animal/frog/Frog.java -index 7143a7b8aae713fd7f2f167a949f98b964e72c78..06da2da712e747639574620d73801bca13fabfa5 100644 +index d337b7f34d8fe558eb2aff571082cdebfdf6209c..2a40fc87e2f36b63e550b24ffc509e3a638354fa 100644 --- a/net/minecraft/world/entity/animal/frog/Frog.java +++ b/net/minecraft/world/entity/animal/frog/Frog.java @@ -183,7 +183,7 @@ public class Frog extends Animal { @@ -463,7 +463,7 @@ index 7143a7b8aae713fd7f2f167a949f98b964e72c78..06da2da712e747639574620d73801bca // Leaf end - Plazma - Add missing purpur configuration options diff --git a/net/minecraft/world/entity/animal/frog/Tadpole.java b/net/minecraft/world/entity/animal/frog/Tadpole.java -index 0e322f480e0a6302124847e26c4bed06678e78e4..bc648534baccbb806f14a7353f71348e1de029de 100644 +index 8ede266ae541b4c25e942b842c5ad5e6693a261d..c4393cc3dfb0f187b2d30b954a5e1a2cbe0e97ed 100644 --- a/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/net/minecraft/world/entity/animal/frog/Tadpole.java @@ -121,7 +121,7 @@ public class Tadpole extends AbstractFish { @@ -508,7 +508,7 @@ index 500c87f5f7b2eda637103125d6e541f7c9fb385f..d0b40c1186328b501e1847f29283023b // Purpur end - Configurable entity base attributes diff --git a/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 1f545d4c9a3de0d6630a92481920ed6c3553ce97..eddf4ece4ba06d1f6e8c2ff80c81629c324e2199 100644 +index 4d872b3d21928a817795a21ee0c35ef1b9c0c34e..01ddbedab5a384b6ad2628d629b88cefea5aed1d 100644 --- a/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/net/minecraft/world/entity/animal/sniffer/Sniffer.java @@ -107,8 +107,8 @@ public class Sniffer extends Animal { @@ -538,7 +538,7 @@ index 7e7cb9db1c84bdb173b444bec90663a93fb3b549..5d3fd6a6ce2eb3c462bfb10abdc817a1 // Purpur end - Configurable entity base attributes diff --git a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index e9fc2bf959949a8589a9ab87e00c85ffbe598a83..4b9ed1682fc9880127ce691b56b1e74118ff411d 100644 +index e3cdff55261b2ff2c3d1cb1cf46b633a340458c9..e8b06d26f8bcdebf8c910620e99f9f856fbdc0f9 100644 --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -168,7 +168,7 @@ public class EnderDragon extends Mob implements Enemy { @@ -551,7 +551,7 @@ index e9fc2bf959949a8589a9ab87e00c85ffbe598a83..4b9ed1682fc9880127ce691b56b1e741 // Purpur end - Configurable entity base attributes diff --git a/net/minecraft/world/entity/boss/wither/WitherBoss.java b/net/minecraft/world/entity/boss/wither/WitherBoss.java -index d8336fc8852b9939f341aedd17403913c7dadcf9..f169764f0b3737509a520aa36afccc4f9e6471db 100644 +index 3171868523bc9b767cb9da5f58c43890fc8214da..164716c5e34703586eb9347ce229818c28f7c450 100644 --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -216,8 +216,8 @@ public class WitherBoss extends Monster implements RangedAttackMob { @@ -1045,7 +1045,7 @@ index ef0522feaa1cc9704f778309c1e6cf1d68379376..9b49a3eda5f6da9b6761c59e37a0285e // Purpur end - Configurable entity base attributes diff --git a/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 8c9f240badf5a678ee4e1815e010a204f8704f4e..17f8f2ec482c49d0094fa88c2795704ed65191cd 100644 +index e64ca3d5b4ad5601e66989f7f0c33a343b2bb8b7..0086c98f60d46d2647c1a64b2a5ce142842b2baf 100644 --- a/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -114,8 +114,8 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1060,7 +1060,7 @@ index 8c9f240badf5a678ee4e1815e010a204f8704f4e..17f8f2ec482c49d0094fa88c2795704e // Purpur end - Configurable entity base attributes diff --git a/net/minecraft/world/entity/monster/piglin/Piglin.java b/net/minecraft/world/entity/monster/piglin/Piglin.java -index e442784741f1d0b4892284b6811343f954b50182..6080f990819ced3ce11d748313908828f8fb7242 100644 +index 91c60e2b5f9e3b8b785b7fa48db12817037be790..efb5042189479c6e26b49f54539188c42e2d1dea 100644 --- a/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -155,8 +155,8 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1090,7 +1090,7 @@ index c4eb58d0b0c51e930f9cb72e1de0103902badba7..97f00d3a124403a98ece7acc2868825e // Purpur end - Configurable entity base attributes diff --git a/net/minecraft/world/entity/monster/warden/Warden.java b/net/minecraft/world/entity/monster/warden/Warden.java -index e0bd1268f77b7234331c9fea0b11b5b04a66a4ad..a04689ea17fb84eca4a29d7476acf5fd6268cd45 100644 +index 51c56751738c8991d8db770ff4f1b5877ee9f13d..c348728d7e3ce72d0aa7792e7f02bf3051bb7ac5 100644 --- a/net/minecraft/world/entity/monster/warden/Warden.java +++ b/net/minecraft/world/entity/monster/warden/Warden.java @@ -161,7 +161,7 @@ public class Warden extends Monster implements VibrationSystem { @@ -1103,7 +1103,7 @@ index e0bd1268f77b7234331c9fea0b11b5b04a66a4ad..a04689ea17fb84eca4a29d7476acf5fd // Leaf end - Plazma - Add missing purpur configuration options diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index b0c7bd4c38561194edfa003a1fc942a6fab5ce72..0812b9a150854f257a96a198652bca594eab3668 100644 +index a4da72da9be1d298e271291fd50c7b7c067811cc..78b2b1a0fcf161bee04e04588236b7870699a7dd 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java @@ -275,9 +275,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler diff --git a/leaf-server/minecraft-patches/features/0270-Bump-netty-to-4.2.x.patch b/leaf-server/minecraft-patches/features/0270-Bump-netty-to-4.2.x.patch index ca31ab7d..705d8a5c 100644 --- a/leaf-server/minecraft-patches/features/0270-Bump-netty-to-4.2.x.patch +++ b/leaf-server/minecraft-patches/features/0270-Bump-netty-to-4.2.x.patch @@ -28,7 +28,7 @@ index 340d5487fa778277b9560250271c5143d80d9987..99543330da85ddecd91c954c8aa386c8 public boolean isCommandBlockEnabled() { return true; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 709abd7c78c70dd076bd9d24732ff026dc26bdc9..8fee28f75540de0aef40a76520d47be761d05ce6 100644 +index f89abb17dd84a58791068bbbf8fc64f4def644bf..26a2d2956b1643214421f76b9a4e96b7b1907c01 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -2064,6 +2064,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, AutoCl +@@ -1064,6 +1064,18 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl // Paper end - Perf: make sure loaded chunks get the inlined variant of this function } diff --git a/leaf-server/minecraft-patches/features/0278-optimize-get-chunk.patch b/leaf-server/minecraft-patches/features/0278-optimize-get-chunk.patch index 0d63a29a..98eaaf3f 100644 --- a/leaf-server/minecraft-patches/features/0278-optimize-get-chunk.patch +++ b/leaf-server/minecraft-patches/features/0278-optimize-get-chunk.patch @@ -5,10 +5,10 @@ Subject: [PATCH] optimize get chunk diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 4e1748020c31b80b52f6f52fe90eb0f7099651d9..28fdc5b85c22fd03bc2e4b4c6ae3e3524fd039f6 100644 +index e2223887acf161f7eea80708b0e0862baf07d0ee..7333225a3d50bd14da38019541cc9daa22bbf9ed 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -1409,12 +1409,17 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1410,12 +1410,17 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl } } // CraftBukkit end diff --git a/leaf-server/minecraft-patches/features/0279-remove-shouldTickBlocksAt-check.patch b/leaf-server/minecraft-patches/features/0279-remove-shouldTickBlocksAt-check.patch index f6bed46a..c2975c0d 100644 --- a/leaf-server/minecraft-patches/features/0279-remove-shouldTickBlocksAt-check.patch +++ b/leaf-server/minecraft-patches/features/0279-remove-shouldTickBlocksAt-check.patch @@ -5,10 +5,10 @@ Subject: [PATCH] remove shouldTickBlocksAt check diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 28fdc5b85c22fd03bc2e4b4c6ae3e3524fd039f6..498a9c1590ec3bc4a2b3d5bead899aeb37b56cdf 100644 +index 7333225a3d50bd14da38019541cc9daa22bbf9ed..66e10c357ed7b80083a0159c5b8262e5d214459e 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -1539,7 +1539,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1540,7 +1540,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl // Spigot end if (tickingBlockEntity.isRemoved()) { ((org.dreeam.leaf.util.list.BlockEntityTickersList) this.blockEntityTickers).markAsRemoved(this.tileTickPosition); // toRemove.add(tickingBlockEntity); // SparklyPaper - optimize block entity removals // Paper - Fix MC-117075; use removeAll diff --git a/leaf-server/minecraft-patches/features/0283-counting-chunk-section-fluid.patch b/leaf-server/minecraft-patches/features/0283-counting-chunk-section-fluid.patch index 3e4aa27a..5e6a12b1 100644 --- a/leaf-server/minecraft-patches/features/0283-counting-chunk-section-fluid.patch +++ b/leaf-server/minecraft-patches/features/0283-counting-chunk-section-fluid.patch @@ -5,10 +5,10 @@ Subject: [PATCH] counting chunk section fluid diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 498a9c1590ec3bc4a2b3d5bead899aeb37b56cdf..2ec44cbd781426b4c8983f47665fe0aac1b4f214 100644 +index 66e10c357ed7b80083a0159c5b8262e5d214459e..7e380c80fbfeaf670b49e8e923a84ec87a94344e 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -1432,6 +1432,14 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -1433,6 +1433,14 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl } } diff --git a/leaf-server/minecraft-patches/features/0285-optimize-onClimbable.patch b/leaf-server/minecraft-patches/features/0285-optimize-onClimbable.patch index 9d42c528..d7883435 100644 --- a/leaf-server/minecraft-patches/features/0285-optimize-onClimbable.patch +++ b/leaf-server/minecraft-patches/features/0285-optimize-onClimbable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] optimize onClimbable diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 95c11de1796c032a813c96dba3476171a0e4aadb..17a4d1c55f878a2603586812c10d87f3949e35a8 100644 +index b4a7281de8e016d059b417dee9aaedc02253a97f..5fbf5e01872834ce4a22fb8bfe25cc1dc4f8cf60 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -4993,7 +4993,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4991,7 +4991,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Gale start - don't load chunks to activate climbing entities public @Nullable BlockState getInBlockStateIfLoaded() { if (this.inBlockState == null) { @@ -19,10 +19,10 @@ index 95c11de1796c032a813c96dba3476171a0e4aadb..17a4d1c55f878a2603586812c10d87f3 return this.inBlockState; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index e2f532433df740926ddfb44b6f65299d42241bff..b37f04f395cae15dd249c36235f0c29953febf26 100644 +index 897e193766591a6a8bf10e10495a7054fa461f08..a6adabfd1ca18b5f815bdb73ce6a650d543c3af4 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -2217,10 +2217,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -2220,10 +2220,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin public boolean onClimbableCached() { if (!this.blockPosition().equals(this.lastClimbingPosition)) { // Gale start - don't load chunks to activate climbing entities @@ -36,7 +36,7 @@ index e2f532433df740926ddfb44b6f65299d42241bff..b37f04f395cae15dd249c36235f0c299 this.lastClimbingPosition = this.blockPosition(); } else { this.cachedOnClimbable = false; -@@ -2235,35 +2235,39 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -2238,35 +2238,39 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin public boolean onClimbable() { // Gale start - don't load chunks to activate climbing entities diff --git a/leaf-server/minecraft-patches/features/0286-optimize-applyMovementEmissionAndPlaySound.patch b/leaf-server/minecraft-patches/features/0286-optimize-applyMovementEmissionAndPlaySound.patch index d5f13fad..b7c635ee 100644 --- a/leaf-server/minecraft-patches/features/0286-optimize-applyMovementEmissionAndPlaySound.patch +++ b/leaf-server/minecraft-patches/features/0286-optimize-applyMovementEmissionAndPlaySound.patch @@ -5,10 +5,10 @@ Subject: [PATCH] optimize applyMovementEmissionAndPlaySound diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 17a4d1c55f878a2603586812c10d87f3949e35a8..d04280e45c6cfb75237d5376e9c30becfd9ad8a0 100644 +index 5fbf5e01872834ce4a22fb8bfe25cc1dc4f8cf60..61d381e2b51d052f5ee9d09b5fb74fb330734302 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1277,7 +1277,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1275,7 +1275,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess float f1 = (float)(movement.length() * 0.6F); float f2 = (float)(movement.horizontalDistance() * 0.6F); BlockPos onPos = this.getOnPos(); diff --git a/leaf-server/minecraft-patches/features/0287-optimize-isStateClimbable.patch b/leaf-server/minecraft-patches/features/0287-optimize-isStateClimbable.patch index fd9572aa..c1b38c57 100644 --- a/leaf-server/minecraft-patches/features/0287-optimize-isStateClimbable.patch +++ b/leaf-server/minecraft-patches/features/0287-optimize-isStateClimbable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] optimize isStateClimbable diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index d04280e45c6cfb75237d5376e9c30becfd9ad8a0..b4361d2164c497b0388fac1701a9944d41f58125 100644 +index 61d381e2b51d052f5ee9d09b5fb74fb330734302..a0625e490f054916e2f6cf08371c85c9b514b988 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1377,7 +1377,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1375,7 +1375,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } private boolean isStateClimbable(BlockState state) { diff --git a/leaf-server/minecraft-patches/features/0288-optimize-getOnPos.patch b/leaf-server/minecraft-patches/features/0288-optimize-getOnPos.patch index 6aed9415..84391cd4 100644 --- a/leaf-server/minecraft-patches/features/0288-optimize-getOnPos.patch +++ b/leaf-server/minecraft-patches/features/0288-optimize-getOnPos.patch @@ -5,10 +5,10 @@ Subject: [PATCH] optimize getOnPos diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index b4361d2164c497b0388fac1701a9944d41f58125..1f812fed92f842123708e39a76fe73dd825b3f92 100644 +index a0625e490f054916e2f6cf08371c85c9b514b988..f1081fbae2ab7b7b69f98a4dd01c8df6ffb753c0 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -895,6 +895,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -893,6 +893,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public void baseTick() { @@ -17,7 +17,7 @@ index b4361d2164c497b0388fac1701a9944d41f58125..1f812fed92f842123708e39a76fe73dd if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Prevent entity loading causing async lookups this.inBlockState = null; if (this.isPassenger() && this.getVehicle().isRemoved()) { -@@ -954,6 +956,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -952,6 +954,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.level() instanceof ServerLevel serverLevelx && this instanceof Leashable) { Leashable.tickLeash(serverLevelx, (Entity & Leashable)this); } @@ -25,7 +25,7 @@ index b4361d2164c497b0388fac1701a9944d41f58125..1f812fed92f842123708e39a76fe73dd } public void setSharedFlagOnFire(boolean isOnFire) { -@@ -1118,11 +1121,19 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1116,11 +1119,19 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess AABB aabb = new AABB(boundingBox.minX, boundingBox.minY - 1.0E-6, boundingBox.minZ, boundingBox.maxX, boundingBox.minY, boundingBox.maxZ); Optional optional = this.level.findSupportingBlock(this, aabb); if (optional.isPresent() || this.onGroundNoBlocks) { @@ -47,7 +47,7 @@ index b4361d2164c497b0388fac1701a9944d41f58125..1f812fed92f842123708e39a76fe73dd } this.onGroundNoBlocks = optional.isEmpty(); -@@ -1208,8 +1219,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1206,8 +1217,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.minorHorizontalCollision = false; } @@ -58,7 +58,7 @@ index b4361d2164c497b0388fac1701a9944d41f58125..1f812fed92f842123708e39a76fe73dd if (this.isLocalInstanceAuthoritative()) { this.checkFallDamage(vec3.y, this.onGround(), blockState, onPosLegacy); } -@@ -1276,9 +1287,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1274,9 +1285,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess float f = 0.6F; float f1 = (float)(movement.length() * 0.6F); float f2 = (float)(movement.horizontalDistance() * 0.6F); @@ -70,7 +70,7 @@ index b4361d2164c497b0388fac1701a9944d41f58125..1f812fed92f842123708e39a76fe73dd boolean isStateClimbable = this.isStateClimbable(blockState); this.moveDist += isStateClimbable ? f1 : f2; this.flyDist += f1; -@@ -1347,8 +1357,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1345,8 +1355,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess private void applyEffectsFromBlocks(List movements) { if (this.isAffectedByBlocks()) { if (this.onGround()) { @@ -81,7 +81,7 @@ index b4361d2164c497b0388fac1701a9944d41f58125..1f812fed92f842123708e39a76fe73dd blockState.getBlock().stepOn(this.level(), onPosLegacy, blockState, this); } -@@ -1443,34 +1453,124 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1441,34 +1451,124 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.getOnPos(0.2F); } @@ -214,7 +214,7 @@ index b4361d2164c497b0388fac1701a9944d41f58125..1f812fed92f842123708e39a76fe73dd protected float getBlockJumpFactor() { float jumpFactor = this.level().getBlockState(this.blockPosition()).getBlock().getJumpFactor(); -@@ -1482,7 +1582,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1480,7 +1580,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess BlockState blockState = this.level().getBlockState(this.blockPosition()); float speedFactor = blockState.getBlock().getSpeedFactor(); if (!blockState.is(Blocks.WATER) && !blockState.is(Blocks.BUBBLE_COLUMN)) { @@ -223,7 +223,7 @@ index b4361d2164c497b0388fac1701a9944d41f58125..1f812fed92f842123708e39a76fe73dd } else { return speedFactor; } -@@ -2104,7 +2204,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2102,7 +2202,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @Deprecated protected BlockState getBlockStateOnLegacy() { @@ -232,7 +232,7 @@ index b4361d2164c497b0388fac1701a9944d41f58125..1f812fed92f842123708e39a76fe73dd } public BlockState getBlockStateOn() { -@@ -2116,8 +2216,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2114,8 +2214,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } protected void spawnSprintParticle() { @@ -262,10 +262,10 @@ index b7cd9b286e7392c3fd619c7ba9e049076e245fd6..d923c98460cbb5b99926914261417c7f if (this.level() instanceof ServerLevel) { for (ExperienceOrb experienceOrb : this.level() diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index b37f04f395cae15dd249c36235f0c29953febf26..453c3eb95bebd426d0457f27bda261033dd7b14d 100644 +index a6adabfd1ca18b5f815bdb73ce6a650d543c3af4..2bdfd3f60e217e8959ce45a259eb9434392fdc68 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -3087,7 +3087,11 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3090,7 +3090,11 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } public void travel(Vec3 travelVector) { @@ -278,7 +278,7 @@ index b37f04f395cae15dd249c36235f0c29953febf26..453c3eb95bebd426d0457f27bda26103 if ((this.isInWater() || this.isInLava()) && this.isAffectedByFluids() && !this.canStandOnFluid(fluidState)) { this.travelInFluid(travelVector); } else if (this.isFallFlying()) { -@@ -3115,7 +3119,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3118,7 +3122,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.getRider() != null && this.isControllable()) { float friction = 0.91F; if (this.onGround()) { @@ -287,7 +287,7 @@ index b37f04f395cae15dd249c36235f0c29953febf26..453c3eb95bebd426d0457f27bda26103 } float frictionCompensation = 0.16277137F / (friction * friction * friction); -@@ -3133,15 +3137,14 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3135,15 +3139,14 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin } private void travelInAir(Vec3 travelVector) { @@ -305,7 +305,7 @@ index b37f04f395cae15dd249c36235f0c29953febf26..453c3eb95bebd426d0457f27bda26103 d -= this.getEffectiveGravity(); } else if (this.getY() > this.level().getMinY()) { d = -0.1; -@@ -3682,6 +3685,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3684,6 +3687,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin this.resetFallDistance(); } @@ -313,7 +313,7 @@ index b37f04f395cae15dd249c36235f0c29953febf26..453c3eb95bebd426d0457f27bda26103 if (this.getControllingPassenger() instanceof Player player && this.isAlive()) { this.travelRidden(player, vec3); } else if (this.canSimulateMovement() && this.isEffectiveAi()) { -@@ -3691,6 +3695,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3693,6 +3697,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (!this.level().isClientSide() || this.isLocalInstanceAuthoritative()) { this.applyEffectsFromBlocks(); } diff --git a/leaf-server/minecraft-patches/features/0289-cache-eye-block-position.patch b/leaf-server/minecraft-patches/features/0289-cache-eye-block-position.patch index 80aedaab..188e952d 100644 --- a/leaf-server/minecraft-patches/features/0289-cache-eye-block-position.patch +++ b/leaf-server/minecraft-patches/features/0289-cache-eye-block-position.patch @@ -5,19 +5,18 @@ Subject: [PATCH] cache eye block position diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 1f812fed92f842123708e39a76fe73dd825b3f92..b47a15ca84a66283ceaf46d1d768bfa0530950c2 100644 +index f1081fbae2ab7b7b69f98a4dd01c8df6ffb753c0..ea5e38b2efe3b11eb80abb2326d06d9282b2fb5b 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -553,20 +553,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -553,18 +553,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - // Leaf start - Fix Pufferfish and Purpur patches + // Purpur start - copied from Mob - API for any mob to burn daylight // Gale start - JettPack - optimize sun burn tick - cache eye blockpos - private BlockPos cached_eye_blockpos; - private net.minecraft.world.phys.Vec3 cached_position; + private BlockPos leaf$cached_eye_blockpos = BlockPos.ZERO; + @Nullable private Vec3 leaf$cached_position = null; // Gale end - JettPack - optimize sun burn tick - cache eye blockpos - // Purpur start - copied from Mob - API for any mob to burn daylight public boolean isSunBurnTick() { if (this.level().isBrightOutside() && !this.level().isClientSide) { // Gale start - JettPack - optimize sun burn tick - optimizations and cache eye blockpos @@ -27,12 +26,11 @@ index 1f812fed92f842123708e39a76fe73dd825b3f92..b47a15ca84a66283ceaf46d1d768bfa0 - } - - float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(cached_eye_blockpos); // Pass BlockPos to getBrightness -- + float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(); + // Check brightness first if (lightLevelDependentMagicValue <= 0.5F) return false; - if (this.random.nextFloat() * 30.0F >= (lightLevelDependentMagicValue - 0.4F) * 2.0F) return false; -@@ -574,11 +568,29 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -573,11 +568,29 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess boolean flag = this.isInWaterOrRain() || this.isInPowderSnow || this.wasInPowderSnow; @@ -61,9 +59,9 @@ index 1f812fed92f842123708e39a76fe73dd825b3f92..b47a15ca84a66283ceaf46d1d768bfa0 + // Leaf end - cache eye block pos + // Purpur end - copied from Mob - API for any mob to burn daylight - // Leaf end - Fix Pufferfish and Purpur patches -@@ -2152,8 +2164,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + public Entity(EntityType entityType, Level level) { +@@ -2150,8 +2163,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess && abstractBoat.getBoundingBox().maxY >= eyeY && abstractBoat.getBoundingBox().minY <= eyeY )) { @@ -75,7 +73,7 @@ index 1f812fed92f842123708e39a76fe73dd825b3f92..b47a15ca84a66283ceaf46d1d768bfa0 double d = blockPos.getY() + fluidState.getHeight(this.level(), blockPos); if (d > eyeY) { // Leaf start - Optimize isEyeInFluid -@@ -2281,20 +2294,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2279,20 +2293,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @Deprecated public float getLightLevelDependentMagicValue() { @@ -98,7 +96,7 @@ index 1f812fed92f842123708e39a76fe73dd825b3f92..b47a15ca84a66283ceaf46d1d768bfa0 public void absSnapTo(double x, double y, double z, float yRot, float xRot) { this.absSnapTo(x, y, z); -@@ -4532,6 +4535,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4530,6 +4534,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess EntityDimensions dimensions = this.getDimensions(pose); this.dimensions = dimensions; this.eyeHeight = dimensions.eyeHeight(); @@ -106,7 +104,7 @@ index 1f812fed92f842123708e39a76fe73dd825b3f92..b47a15ca84a66283ceaf46d1d768bfa0 } public void refreshDimensions() { -@@ -4540,6 +4544,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4538,6 +4543,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess EntityDimensions dimensions = this.getDimensions(pose); this.dimensions = dimensions; this.eyeHeight = dimensions.eyeHeight(); @@ -115,7 +113,7 @@ index 1f812fed92f842123708e39a76fe73dd825b3f92..b47a15ca84a66283ceaf46d1d768bfa0 boolean flag = dimensions.width() <= 4.0F && dimensions.height() <= 4.0F; if (!this.level.isClientSide diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 453c3eb95bebd426d0457f27bda261033dd7b14d..8baa17d2eadfa83b1fcb36fcd1408e917b883989 100644 +index 2bdfd3f60e217e8959ce45a259eb9434392fdc68..179722eb09e3c48220ec7d7a25332a000faf710c 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -464,7 +464,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin diff --git a/leaf-server/minecraft-patches/features/0290-optimize-updateFluidHeightAndDoFluidPushing.patch b/leaf-server/minecraft-patches/features/0290-optimize-updateFluidHeightAndDoFluidPushing.patch index 55f4187f..768b315e 100644 --- a/leaf-server/minecraft-patches/features/0290-optimize-updateFluidHeightAndDoFluidPushing.patch +++ b/leaf-server/minecraft-patches/features/0290-optimize-updateFluidHeightAndDoFluidPushing.patch @@ -5,10 +5,10 @@ Subject: [PATCH] optimize updateFluidHeightAndDoFluidPushing diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index b47a15ca84a66283ceaf46d1d768bfa0530950c2..78d204451266ae3e9d6b5491bb0962ca1c9998cd 100644 +index ea5e38b2efe3b11eb80abb2326d06d9282b2fb5b..173ee6e5ccd152e8732ae24b3f4e7d79955da086 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -4940,12 +4940,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4939,12 +4939,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess final int minChunkZ = minBlockZ >> 4; final int maxChunkZ = maxBlockZ >> 4; @@ -23,7 +23,7 @@ index b47a15ca84a66283ceaf46d1d768bfa0530950c2..78d204451266ae3e9d6b5491bb0962ca if (chunk == null) continue; final net.minecraft.world.level.chunk.LevelChunkSection[] sections = chunk.getSections(); // Leaf end - Prevent double chunk retrieving in entity fluid pushing check and fluid height updating -@@ -4957,7 +4957,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4956,7 +4956,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess continue; } final net.minecraft.world.level.chunk.LevelChunkSection section = sections[sectionIdx]; @@ -32,7 +32,7 @@ index b47a15ca84a66283ceaf46d1d768bfa0530950c2..78d204451266ae3e9d6b5491bb0962ca // empty continue; } -@@ -5014,7 +5014,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5013,7 +5013,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.fluidHeight.put(fluid, maxHeightDiff); diff --git a/leaf-server/minecraft-patches/features/0291-optimize-checkInsideBlocks.patch b/leaf-server/minecraft-patches/features/0291-optimize-checkInsideBlocks.patch index c79eba78..475e48fc 100644 --- a/leaf-server/minecraft-patches/features/0291-optimize-checkInsideBlocks.patch +++ b/leaf-server/minecraft-patches/features/0291-optimize-checkInsideBlocks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] optimize checkInsideBlocks diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 78d204451266ae3e9d6b5491bb0962ca1c9998cd..20f558f49bcda32373a409eb5137d5b67f6a0404 100644 +index 173ee6e5ccd152e8732ae24b3f4e7d79955da086..3edeaab7b882351c564a791dd3f5e40b322763b5 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1819,72 +1819,57 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1818,72 +1818,57 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess private void checkInsideBlocks(Vec3 vec3, Vec3 vec31, InsideBlockEffectApplier.StepBasedCollector stepBasedCollector, LongSet set) { final Level level = this.level(); AABB aabb = this.getBoundingBox().move(vec31.subtract(this.position())).deflate(1.0E-5F); diff --git a/leaf-server/minecraft-patches/features/0294-cache-collision-list.patch b/leaf-server/minecraft-patches/features/0294-cache-collision-list.patch index 79b9fc42..d6698559 100644 --- a/leaf-server/minecraft-patches/features/0294-cache-collision-list.patch +++ b/leaf-server/minecraft-patches/features/0294-cache-collision-list.patch @@ -5,7 +5,7 @@ Subject: [PATCH] cache collision list diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index b94f2122da885fe94bd60c7914421968e6a2f3fa..5178290d060dd8a72f0e6cb77f77d19683a866d0 100644 +index 7ffddaa634ca3e256aa81e697d147ad48b5f747c..0ed24644e07c409a3624614d3bab1797b44f7ae2 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -1095,6 +1095,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -18,10 +18,10 @@ index b94f2122da885fe94bd60c7914421968e6a2f3fa..5178290d060dd8a72f0e6cb77f77d196 final net.minecraft.world.level.levelgen.BitRandomSource simpleRandom = this.simpleRandom; // Paper - optimise random ticking // Leaf - Faster random generator - upcasting ChunkPos pos = chunk.getPos(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 776dba175bd79bda1537bd7004ac214b2b50e0c1..f51d34d794470cb1ca4a5bc69cab81bccbb34434 100644 +index df913bb859bbec721571daf45d0fef75c4adcec2..948e1825a585fe947d4f2c2e2a1e4cf997a182cb 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1648,8 +1648,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1647,8 +1647,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess final AABB currentBox = this.getBoundingBox(); @@ -32,7 +32,7 @@ index 776dba175bd79bda1537bd7004ac214b2b50e0c1..f51d34d794470cb1ca4a5bc69cab81bc final AABB initialCollisionBox; if (xZero & zZero) { -@@ -1661,17 +1661,17 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1660,17 +1660,17 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess initialCollisionBox = currentBox.expandTowards(movement); } @@ -55,7 +55,7 @@ index 776dba175bd79bda1537bd7004ac214b2b50e0c1..f51d34d794470cb1ca4a5bc69cab81bc final boolean collidedX = collided.x != movement.x; final boolean collidedY = collided.y != movement.y; -@@ -1682,6 +1682,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1681,6 +1681,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess final double stepHeight; if ((!collidedDownwards && !this.onGround) || (!collidedX && !collidedZ) || (stepHeight = (double)this.maxUpStep()) <= 0.0) { @@ -63,7 +63,7 @@ index 776dba175bd79bda1537bd7004ac214b2b50e0c1..f51d34d794470cb1ca4a5bc69cab81bc return collided; } -@@ -1692,7 +1693,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1691,7 +1692,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } final List stepVoxels = new ArrayList<>(); @@ -72,7 +72,7 @@ index 776dba175bd79bda1537bd7004ac214b2b50e0c1..f51d34d794470cb1ca4a5bc69cab81bc ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.getCollisionsForBlocksOrWorldBorder( this.level, (Entity)(Object)this, stepRetrievalBox, stepVoxels, stepAABBs, -@@ -1702,10 +1703,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1701,10 +1702,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess for (final float step : calculateStepHeights(collidedYBox, stepVoxels, stepAABBs, (float)stepHeight, (float)collided.y)) { final Vec3 stepResult = ca.spottedleaf.moonrise.patches.collisions.CollisionUtil.performCollisions(new Vec3(movement.x, (double)step, movement.z), collidedYBox, stepVoxels, stepAABBs); if (stepResult.horizontalDistanceSqr() > collided.horizontalDistanceSqr()) { diff --git a/leaf-server/minecraft-patches/features/0297-Pluto-Expose-Direction-Plane-s-faces.patch b/leaf-server/minecraft-patches/features/0297-Pluto-Expose-Direction-Plane-s-faces.patch index 85bd0516..6ebfcd26 100644 --- a/leaf-server/minecraft-patches/features/0297-Pluto-Expose-Direction-Plane-s-faces.patch +++ b/leaf-server/minecraft-patches/features/0297-Pluto-Expose-Direction-Plane-s-faces.patch @@ -35,7 +35,7 @@ index 45093451fb25ae3bb1e57d2e53c49a1ae666e31e..c228135032b5f74fd1ec96a2cf52aa3e } } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index c5fea3948be691c42e9a94ddb0acd04fcc0b4415..7f6eda550ad99dad49aa3d47800213b7ba2d341a 100644 +index c3f49ed4a09517e6a03decece32a91def865a778..697553ad6625ac8ab74e79f727a95fd0d628a87a 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -1179,7 +1179,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -100,10 +100,10 @@ index d26867def6c549c8c909213d4f91895f1168cae6..44e7b63e91d298c6c014ca45f356f82f } } diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index 2ec44cbd781426b4c8983f47665fe0aac1b4f214..50a80610645f225ef24cb774feec87d462f80662 100644 +index 7e380c80fbfeaf670b49e8e923a84ec87a94344e..ef1e65e9652ba7ed4e48075cb7d440b3e880eb06 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -2065,7 +2065,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl +@@ -2066,7 +2066,7 @@ public abstract class Level implements LevelAccessor, UUIDLookup, AutoCl public abstract Scoreboard getScoreboard(); public void updateNeighbourForOutputSignal(BlockPos pos, Block block) { diff --git a/leaf-server/minecraft-patches/features/0299-Only-update-frozen-ticks-if-changed.patch b/leaf-server/minecraft-patches/features/0299-Only-update-frozen-ticks-if-changed.patch index c9d64c1d..7bb3e245 100644 --- a/leaf-server/minecraft-patches/features/0299-Only-update-frozen-ticks-if-changed.patch +++ b/leaf-server/minecraft-patches/features/0299-Only-update-frozen-ticks-if-changed.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Only update frozen ticks if changed diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 1799cdc0b6c1e585e7e1eeab3828ea0252ae2097..20727a5abc7fad5a70eb2b98aa3699b054782a3b 100644 +index f2717e7c173463659dffdd223b9b2e0c9cf5c636..9b2c74236e0841c6403fca96c4080cc16643f398 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -3707,7 +3707,13 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin +@@ -3709,7 +3709,13 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin if (this.level() instanceof ServerLevel serverLevel) { if ((!this.isInPowderSnow || !this.canFreeze()) && !this.freezeLocked) { // Paper - Freeze Tick Lock API diff --git a/leaf-server/paper-patches/features/0008-Purpur-Server-Paper-Changes.patch b/leaf-server/paper-patches/features/0001-Purpur-Server-Paper-Changes.patch similarity index 97% rename from leaf-server/paper-patches/features/0008-Purpur-Server-Paper-Changes.patch rename to leaf-server/paper-patches/features/0001-Purpur-Server-Paper-Changes.patch index ae2f7c22..bd896b07 100644 --- a/leaf-server/paper-patches/features/0008-Purpur-Server-Paper-Changes.patch +++ b/leaf-server/paper-patches/features/0001-Purpur-Server-Paper-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur Server Paper Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 0c9140aff1fac81adb2edae1dc75cc8b069b8c3b +Commit: 9030575af3aad201072770067d7fba5abc745312 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "Rebrand.patch" @@ -127,20 +127,21 @@ index 0000000000000000000000000000000000000000..15a226e3854d731f7724025ea3459c8a + } +} diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -index d243d661ea0efcd7bdb9716a2bbd0995cad8db16..74249a202a1dbfc227d5028e68991a1625a75554 100644 +index d243d661ea0efcd7bdb9716a2bbd0995cad8db16..ba138027d7e939c047856d003204ece46b51e8be 100644 --- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java +++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -@@ -142,6 +142,10 @@ public class MobGoalHelper { - // TODO these kinda should be checked on each release, in case nested classes changes +@@ -143,6 +143,11 @@ public class MobGoalHelper { private static final Map NESTED_CLASS_NAMES = Util.make(new HashMap<>(), map -> { map.put("AbstractSkeleton$1", "AbstractSkeletonMelee"); + + // Purpur start - Add option to disable zombie aggressiveness towards villagers + map.put("Zombie$1", "ZombieAttackVillager"); + map.put("Drowned$1", "DrownedAttackVillager"); + // Purpur end - Add option to disable zombie aggressiveness towards villagers - ++ // remove duplicate map.put("TraderLlama$TraderLlamaDefendWanderingTraderGoal", "TraderLlamaDefendWanderingTraderGoal"); + map.put("AbstractIllager$RaiderOpenDoorGoal", "RaiderOpenDoorGoal"); diff --git a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java index d0a4e1642d1be33cd9e832f961301ab267e216bc..4a693643a3c51670c3425b8e9c2ab1f0a8e77e48 100644 --- a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java @@ -486,7 +487,7 @@ index 54ab8a0b502a2665027f293e6ddebf6c0a2af215..f967560da343867fdc1c380a42874b07 + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 18a087e82383d0776504293bba513e247f4bc881..09054336441cbcce99d1fd82276c5f8c90bee28c 100644 +index 1d12a870a2f239bf95df639ef350b38911558199..1b55dc7f97e66abf6878df55f50722345a144e2c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -429,6 +429,20 @@ public final class CraftServer implements Server { @@ -510,15 +511,15 @@ index 18a087e82383d0776504293bba513e247f4bc881..09054336441cbcce99d1fd82276c5f8c CraftRegistry.setMinecraftRegistry(console.registryAccess()); -@@ -1049,6 +1063,7 @@ public final class CraftServer implements Server { +@@ -1048,6 +1062,7 @@ public final class CraftServer implements Server { + org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); - this.console.galeConfigurations.reloadConfigs(this.console); // Gale - Gale configuration + org.purpurmc.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur - Purpur config files for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -1064,6 +1079,7 @@ public final class CraftServer implements Server { +@@ -1063,6 +1078,7 @@ public final class CraftServer implements Server { } } world.spigotConfig.init(); // Spigot @@ -526,7 +527,7 @@ index 18a087e82383d0776504293bba513e247f4bc881..09054336441cbcce99d1fd82276c5f8c } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1081,6 +1097,7 @@ public final class CraftServer implements Server { +@@ -1080,6 +1096,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.registerCommands(); // Spigot io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper this.spark.registerCommandBeforePlugins(this); // Paper - spark @@ -534,7 +535,7 @@ index 18a087e82383d0776504293bba513e247f4bc881..09054336441cbcce99d1fd82276c5f8c this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -1580,6 +1597,60 @@ public final class CraftServer implements Server { +@@ -1579,6 +1596,60 @@ public final class CraftServer implements Server { return true; } @@ -595,9 +596,9 @@ index 18a087e82383d0776504293bba513e247f4bc881..09054336441cbcce99d1fd82276c5f8c @Override public List getRecipesFor(ItemStack result) { Preconditions.checkArgument(result != null, "ItemStack cannot be null"); -@@ -2956,6 +3027,18 @@ public final class CraftServer implements Server { +@@ -2947,6 +3018,18 @@ public final class CraftServer implements Server { + return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } - // Gale end - Gale configuration - API + // Purpur start - Purpur config files + @Override @@ -614,7 +615,7 @@ index 18a087e82383d0776504293bba513e247f4bc881..09054336441cbcce99d1fd82276c5f8c @Override public void restart() { CraftServer.this.restart(); -@@ -3195,4 +3278,18 @@ public final class CraftServer implements Server { +@@ -3186,4 +3269,18 @@ public final class CraftServer implements Server { public void allowPausing(final Plugin plugin, final boolean value) { this.console.addPluginAllowingSleep(plugin.getName(), value); } @@ -1087,7 +1088,7 @@ index cabdcbef0e6f7ca41ff5677bc2e6a81665ca812d..c47ca9ab164b6abd28e979c944569181 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 322a1e38799a7bf45b8d3ee151b0b62df45d55d7..a40380fbafe1868c9fbb6623987c4f226e3f2150 100644 +index 322a1e38799a7bf45b8d3ee151b0b62df45d55d7..4e24a177aed7eda0899b4a1a1e308f02a16c5718 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -565,10 +565,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa @@ -1107,56 +1108,10 @@ index 322a1e38799a7bf45b8d3ee151b0b62df45d55d7..a40380fbafe1868c9fbb6623987c4f22 if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined for (ServerPlayer player : (List) this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { -@@ -1383,6 +1388,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa - // Paper start - Teleport passenger API - // Don't allow teleporting between worlds while keeping passengers - if (ignorePassengers && entity.isVehicle() && location.getWorld() != this.getWorld()) { -+ if (!new org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent(entity.getBukkitEntity(), org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent.Reason.IS_VEHICLE, cause).callEvent()) // Purpur - Add EntityTeleportHinderedEvent - return false; +@@ -1009,6 +1014,78 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa } - -@@ -1404,6 +1410,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa - } - - if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API -+ if (!new org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent(entity.getBukkitEntity(), org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent.Reason.IS_VEHICLE, cause).callEvent()) // Purpur - Add EntityTeleportHinderedEvent - return false; - } - -@@ -2672,6 +2679,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa - return this.getHandle().getAbilities().walkingSpeed * 2f; } -+ // Purpur start - OfflinePlayer API -+ @Override -+ public boolean teleportOffline(Location destination) { -+ return this.teleport(destination); -+ } -+ -+ @Override -+ public boolean teleportOffline(Location destination, PlayerTeleportEvent.TeleportCause cause) { -+ return this.teleport(destination, cause); -+ } -+ -+ @Override -+ public java.util.concurrent.CompletableFuture teleportOfflineAsync(Location destination) { -+ return this.teleportAsync(destination); -+ } -+ -+ @Override -+ public java.util.concurrent.CompletableFuture teleportOfflineAsync(Location destination, PlayerTeleportEvent.TeleportCause cause) { -+ return this.teleportAsync(destination, cause); -+ } -+ // Purpur end - OfflinePlayer API -+ - private void validateSpeed(float value) { - Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value); - } -@@ -3522,4 +3551,76 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa - public PlayerGameConnection getConnection() { - return this.getHandle().connection.playerGameConnection; - } -+ + // Purpur start - Purpur client support + @Override + public boolean usesPurpurClient() { @@ -1228,7 +1183,55 @@ index 322a1e38799a7bf45b8d3ee151b0b62df45d55d7..a40380fbafe1868c9fbb6623987c4f22 + this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket(getEntityId(), io.papermc.paper.adventure.PaperAdventure.asVanilla(message))); + } + // Purpur end - Death screen API - } ++ + @Override + public void sendBlockDamage(Location loc, float progress) { + this.sendBlockDamage(loc, progress, this.getEntityId()); +@@ -1383,6 +1460,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa + // Paper start - Teleport passenger API + // Don't allow teleporting between worlds while keeping passengers + if (ignorePassengers && entity.isVehicle() && location.getWorld() != this.getWorld()) { ++ if (!new org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent(entity.getBukkitEntity(), org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent.Reason.IS_VEHICLE, cause).callEvent()) // Purpur - Add EntityTeleportHinderedEvent + return false; + } + +@@ -1404,6 +1482,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa + } + + if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API ++ if (!new org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent(entity.getBukkitEntity(), org.purpurmc.purpur.event.entity.EntityTeleportHinderedEvent.Reason.IS_VEHICLE, cause).callEvent()) // Purpur - Add EntityTeleportHinderedEvent + return false; + } + +@@ -2672,6 +2751,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa + return this.getHandle().getAbilities().walkingSpeed * 2f; + } + ++ // Purpur start - OfflinePlayer API ++ @Override ++ public boolean teleportOffline(Location destination) { ++ return this.teleport(destination); ++ } ++ ++ @Override ++ public boolean teleportOffline(Location destination, PlayerTeleportEvent.TeleportCause cause) { ++ return this.teleport(destination, cause); ++ } ++ ++ @Override ++ public java.util.concurrent.CompletableFuture teleportOfflineAsync(Location destination) { ++ return this.teleportAsync(destination); ++ } ++ ++ @Override ++ public java.util.concurrent.CompletableFuture teleportOfflineAsync(Location destination, PlayerTeleportEvent.TeleportCause cause) { ++ return this.teleportAsync(destination, cause); ++ } ++ // Purpur end - OfflinePlayer API ++ + private void validateSpeed(float value) { + Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value); + } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java index f03f9f94c51ef2f2eb24e4f65ec69b542b1c0a07..af60e3ef00ce1e98708d9963d466e72b6cde53cc 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java @@ -1291,13 +1294,13 @@ index 2e11df97e5c8ff5fbf22ba87946d6018ac8bbbed..83b779eb0adcaf2e6d5658cddc2607f6 + // Purpur end - Summoner API } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java -index 723a8e659485850632adf173e52669e6e4f3fcc0..98880f082af386f2a1dc64bc13667030d2824d25 100644 +index 723a8e659485850632adf173e52669e6e4f3fcc0..6317c2208fd842d4453f96a9c5dbc13ece0961f8 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java -@@ -135,4 +135,15 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf { - super(holder); - } +@@ -90,6 +90,18 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf { + this.getHandle().setSoundVariant(CraftSoundVariant.bukkitToMinecraftHolder(soundVariant)); } + + // Purpur start - Configurable chance for wolves to spawn rabid + @Override + public boolean isRabid() { @@ -1309,9 +1312,12 @@ index 723a8e659485850632adf173e52669e6e4f3fcc0..98880f082af386f2a1dc64bc13667030 + getHandle().setRabid(isRabid); + } + // Purpur end - Configurable chance for wolves to spawn rabid - } ++ + public static class CraftVariant extends HolderableBase implements Variant { + + public static Variant minecraftToBukkit(WolfVariant minecraft) { diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 183d83f023644c9c5dba0702ba2464566e74ad32..658385b2887d6debec7fc941c28621da5d263411 100644 +index 9878d6842ec77b9a01c08046459f7d320e4c47fb..b4ee0f809c1524c74eca74ee6bc471a3051d92a6 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -525,6 +525,15 @@ public class CraftEventFactory { diff --git a/leaf-server/paper-patches/features/0001-Rebrand.patch b/leaf-server/paper-patches/features/0002-Rebrand.patch similarity index 99% rename from leaf-server/paper-patches/features/0001-Rebrand.patch rename to leaf-server/paper-patches/features/0002-Rebrand.patch index 5d465258..ee6e7fc8 100644 --- a/leaf-server/paper-patches/features/0001-Rebrand.patch +++ b/leaf-server/paper-patches/features/0002-Rebrand.patch @@ -387,21 +387,23 @@ index 6ee39b534b8d992655bc0cef3c299d12cbae0034..f59879ae7d3c73cd4c4233d30667988b .completer(new ConsoleCommandCompleter(this.server)) .option(LineReader.Option.COMPLETE_IN_WORD, true); diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -index 74ffdc823e66fc5ec027c4b7c462382bcbfe2be2..f5302d038e4bb731075dccde4015627dc9e7b420 100644 +index 74ffdc823e66fc5ec027c4b7c462382bcbfe2be2..ca846f76d5ff53c547e1ce943e4e68cf4d5aa046 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -@@ -31,6 +31,10 @@ public record ServerBuildInfoImpl( +@@ -31,6 +31,12 @@ public record ServerBuildInfoImpl( private static final String ATTRIBUTE_GIT_COMMIT = "Git-Commit"; private static final String BRAND_PAPER_NAME = "Paper"; + private static final String BRAND_GALE_NAME = "Gale"; // Gale - branding changes + // Leaf start - Rebrand ++ private static final String BRAND_PUFFERFISH_NAME = "Pufferfish"; ++ private static final String BRAND_PURPUR_NAME = "Purpur"; + private static final String BRAND_LEAF_NAME = "Leaf"; + // Leaf end - Rebrand private static final String BUILD_DEV = "DEV"; -@@ -42,9 +46,9 @@ public record ServerBuildInfoImpl( +@@ -42,9 +48,9 @@ public record ServerBuildInfoImpl( this( getManifestAttribute(manifest, ATTRIBUTE_BRAND_ID) .map(Key::key) @@ -413,7 +415,7 @@ index 74ffdc823e66fc5ec027c4b7c462382bcbfe2be2..f5302d038e4bb731075dccde4015627d SharedConstants.getCurrentVersion().id(), SharedConstants.getCurrentVersion().name(), getManifestAttribute(manifest, ATTRIBUTE_BUILD_NUMBER) -@@ -61,7 +65,11 @@ public record ServerBuildInfoImpl( +@@ -61,7 +67,13 @@ public record ServerBuildInfoImpl( @Override public boolean isBrandCompatible(final @NotNull Key brandId) { @@ -421,7 +423,9 @@ index 74ffdc823e66fc5ec027c4b7c462382bcbfe2be2..f5302d038e4bb731075dccde4015627d + // Leaf start - Rebrand + return brandId.equals(this.brandId) + || brandId.equals(BRAND_PAPER_ID) -+ || brandId.equals(BRAND_GALE_ID); // Gale - branding changes ++ || brandId.equals(BRAND_GALE_ID) // Gale - branding changes ++ || brandId.equals(BRAND_PUFFERFISH_ID) ++ || brandId.equals(BRAND_PURPUR_ID); + // Leaf end - Rebrand } diff --git a/leaf-server/paper-patches/features/0002-Gale-metrics.patch b/leaf-server/paper-patches/features/0003-Gale-metrics.patch similarity index 100% rename from leaf-server/paper-patches/features/0002-Gale-metrics.patch rename to leaf-server/paper-patches/features/0003-Gale-metrics.patch diff --git a/leaf-server/paper-patches/features/0003-Gale-semantic-version.patch b/leaf-server/paper-patches/features/0004-Gale-semantic-version.patch similarity index 93% rename from leaf-server/paper-patches/features/0003-Gale-semantic-version.patch rename to leaf-server/paper-patches/features/0004-Gale-semantic-version.patch index ec32c58d..fe7546b8 100644 --- a/leaf-server/paper-patches/features/0003-Gale-semantic-version.patch +++ b/leaf-server/paper-patches/features/0004-Gale-semantic-version.patch @@ -7,7 +7,7 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index d561202169d6f19c1e9ad8009415af9eaa707b96..612eacf43f8b6b92354fa43479bd0ead728dd7b9 100644 +index aa9dd6b75e8d3cfa1c527ef28e195b06772e5ade..c9c7590a5635d966a0ca262ed5985714d9e66598 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -926,6 +926,16 @@ public class Metrics { diff --git a/leaf-server/paper-patches/features/0004-Gale-configuration.patch b/leaf-server/paper-patches/features/0005-Gale-configuration.patch similarity index 96% rename from leaf-server/paper-patches/features/0004-Gale-configuration.patch rename to leaf-server/paper-patches/features/0005-Gale-configuration.patch index 8637169a..569888fa 100644 --- a/leaf-server/paper-patches/features/0004-Gale-configuration.patch +++ b/leaf-server/paper-patches/features/0005-Gale-configuration.patch @@ -151,20 +151,20 @@ index a8a82aca70a97e30ca680c86421c6a04ed8172f8..db23f74b4c02c43ab42cf8db15c400ee } } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 32fe51b19323e3c4c56e7f9e621e6e808ee5fe38..18a087e82383d0776504293bba513e247f4bc881 100644 +index 1b55dc7f97e66abf6878df55f50722345a144e2c..2859a9c9f4b28124185664108584ca7619d7e29c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1048,6 +1048,7 @@ public final class CraftServer implements Server { - +@@ -1063,6 +1063,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); + org.purpurmc.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur - Purpur config files + this.console.galeConfigurations.reloadConfigs(this.console); // Gale - Gale configuration for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -2947,6 +2948,14 @@ public final class CraftServer implements Server { - return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); +@@ -3030,6 +3031,14 @@ public final class CraftServer implements Server { } + // Purpur end - Purpur config files + // Gale start - Gale configuration - API + @Override diff --git a/leaf-server/paper-patches/features/0005-Set-Gale-permissions-root.patch b/leaf-server/paper-patches/features/0006-Set-Gale-permissions-root.patch similarity index 100% rename from leaf-server/paper-patches/features/0005-Set-Gale-permissions-root.patch rename to leaf-server/paper-patches/features/0006-Set-Gale-permissions-root.patch diff --git a/leaf-server/paper-patches/features/0006-Leaf-Commands.patch b/leaf-server/paper-patches/features/0007-Leaf-Commands.patch similarity index 100% rename from leaf-server/paper-patches/features/0006-Leaf-Commands.patch rename to leaf-server/paper-patches/features/0007-Leaf-Commands.patch diff --git a/leaf-server/paper-patches/features/0007-Leaf-JUnit-test-suite.patch b/leaf-server/paper-patches/features/0008-Leaf-JUnit-test-suite.patch similarity index 100% rename from leaf-server/paper-patches/features/0007-Leaf-JUnit-test-suite.patch rename to leaf-server/paper-patches/features/0008-Leaf-JUnit-test-suite.patch diff --git a/leaf-server/paper-patches/features/0009-Fix-Pufferfish-and-Purpur-patches.patch b/leaf-server/paper-patches/features/0009-Fix-Pufferfish-and-Purpur-patches.patch deleted file mode 100644 index b16dd8ec..00000000 --- a/leaf-server/paper-patches/features/0009-Fix-Pufferfish-and-Purpur-patches.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> -Date: Mon, 29 Apr 2024 14:18:58 -0400 -Subject: [PATCH] Fix Pufferfish and Purpur patches - - -diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -index f5302d038e4bb731075dccde4015627dc9e7b420..afaff6dcfe2044c465693dd0971d07644470ba8a 100644 ---- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -+++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java -@@ -32,9 +32,11 @@ public record ServerBuildInfoImpl( - - private static final String BRAND_PAPER_NAME = "Paper"; - private static final String BRAND_GALE_NAME = "Gale"; // Gale - branding changes -- // Leaf start - Rebrand -+ // Leaf start - Rebrand & Fix Pufferfish and Purpur patches -+ private static final String BRAND_PUFFERFISH_NAME = "Pufferfish"; -+ private static final String BRAND_PURPUR_NAME = "Purpur"; - private static final String BRAND_LEAF_NAME = "Leaf"; -- // Leaf end - Rebrand -+ // Leaf end - Rebrand & Fix Pufferfish and Purpur patches - - private static final String BUILD_DEV = "DEV"; - -@@ -65,11 +67,13 @@ public record ServerBuildInfoImpl( - - @Override - public boolean isBrandCompatible(final @NotNull Key brandId) { -- // Leaf start - Rebrand -+ // Leaf start - Rebrand & Fix Pufferfish and Purpur patches - return brandId.equals(this.brandId) - || brandId.equals(BRAND_PAPER_ID) -- || brandId.equals(BRAND_GALE_ID); // Gale - branding changes -- // Leaf end - Rebrand -+ || brandId.equals(BRAND_GALE_ID) // Gale - branding changes -+ || brandId.equals(BRAND_PUFFERFISH_ID) -+ || brandId.equals(BRAND_PURPUR_ID); -+ // Leaf end - Rebrand & Fix Pufferfish and Purpur patches - } - - @Override diff --git a/leaf-server/paper-patches/features/0010-Simpler-ShapelessRecipe-comparison-for-vanilla.patch b/leaf-server/paper-patches/features/0009-Simpler-ShapelessRecipe-comparison-for-vanilla.patch similarity index 100% rename from leaf-server/paper-patches/features/0010-Simpler-ShapelessRecipe-comparison-for-vanilla.patch rename to leaf-server/paper-patches/features/0009-Simpler-ShapelessRecipe-comparison-for-vanilla.patch diff --git a/leaf-server/paper-patches/features/0011-Print-stack-trace-for-plugins-not-shutting-down-task.patch b/leaf-server/paper-patches/features/0010-Print-stack-trace-for-plugins-not-shutting-down-task.patch similarity index 96% rename from leaf-server/paper-patches/features/0011-Print-stack-trace-for-plugins-not-shutting-down-task.patch rename to leaf-server/paper-patches/features/0010-Print-stack-trace-for-plugins-not-shutting-down-task.patch index 38e363c9..6b9f1046 100644 --- a/leaf-server/paper-patches/features/0011-Print-stack-trace-for-plugins-not-shutting-down-task.patch +++ b/leaf-server/paper-patches/features/0010-Print-stack-trace-for-plugins-not-shutting-down-task.patch @@ -31,7 +31,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/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 09054336441cbcce99d1fd82276c5f8c90bee28c..80b79766972d539f89597a1df86d8f72779b4960 100644 +index 2859a9c9f4b28124185664108584ca7619d7e29c..a5ef148c8362febdf25a9a2b47e7ef904f2018e4 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1159,6 +1159,13 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0012-SIMD-support.patch b/leaf-server/paper-patches/features/0011-SIMD-support.patch similarity index 100% rename from leaf-server/paper-patches/features/0012-SIMD-support.patch rename to leaf-server/paper-patches/features/0011-SIMD-support.patch diff --git a/leaf-server/paper-patches/features/0013-Make-book-writing-configurable.patch b/leaf-server/paper-patches/features/0012-Make-book-writing-configurable.patch similarity index 100% rename from leaf-server/paper-patches/features/0013-Make-book-writing-configurable.patch rename to leaf-server/paper-patches/features/0012-Make-book-writing-configurable.patch diff --git a/leaf-server/paper-patches/features/0014-Do-not-log-legacy-Material-initialization.patch b/leaf-server/paper-patches/features/0013-Do-not-log-legacy-Material-initialization.patch similarity index 100% rename from leaf-server/paper-patches/features/0014-Do-not-log-legacy-Material-initialization.patch rename to leaf-server/paper-patches/features/0013-Do-not-log-legacy-Material-initialization.patch diff --git a/leaf-server/paper-patches/features/0015-Do-not-log-Not-Secure-marker.patch b/leaf-server/paper-patches/features/0014-Do-not-log-Not-Secure-marker.patch similarity index 100% rename from leaf-server/paper-patches/features/0015-Do-not-log-Not-Secure-marker.patch rename to leaf-server/paper-patches/features/0014-Do-not-log-Not-Secure-marker.patch diff --git a/leaf-server/paper-patches/features/0016-Reduce-array-allocations.patch b/leaf-server/paper-patches/features/0015-Reduce-array-allocations.patch similarity index 100% rename from leaf-server/paper-patches/features/0016-Reduce-array-allocations.patch rename to leaf-server/paper-patches/features/0015-Reduce-array-allocations.patch diff --git a/leaf-server/paper-patches/features/0017-CraftBukkit-UUID-to-world-map.patch b/leaf-server/paper-patches/features/0016-CraftBukkit-UUID-to-world-map.patch similarity index 96% rename from leaf-server/paper-patches/features/0017-CraftBukkit-UUID-to-world-map.patch rename to leaf-server/paper-patches/features/0016-CraftBukkit-UUID-to-world-map.patch index 3a0a9edd..3f501191 100644 --- a/leaf-server/paper-patches/features/0017-CraftBukkit-UUID-to-world-map.patch +++ b/leaf-server/paper-patches/features/0016-CraftBukkit-UUID-to-world-map.patch @@ -13,7 +13,7 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 80b79766972d539f89597a1df86d8f72779b4960..f287641acb77cb384ff1f6d672e7622c7267ffe2 100644 +index a5ef148c8362febdf25a9a2b47e7ef904f2018e4..544d76310fd57d904593e8c5b5f0a925bf96c7d1 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -288,6 +288,7 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0018-Specific-interval-TPS-API.patch b/leaf-server/paper-patches/features/0017-Specific-interval-TPS-API.patch similarity index 93% rename from leaf-server/paper-patches/features/0018-Specific-interval-TPS-API.patch rename to leaf-server/paper-patches/features/0017-Specific-interval-TPS-API.patch index 15f363b1..c02f892a 100644 --- a/leaf-server/paper-patches/features/0018-Specific-interval-TPS-API.patch +++ b/leaf-server/paper-patches/features/0017-Specific-interval-TPS-API.patch @@ -7,7 +7,7 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index f287641acb77cb384ff1f6d672e7622c7267ffe2..82e94ec6bc46e6968456debae643649e79f4614c 100644 +index 544d76310fd57d904593e8c5b5f0a925bf96c7d1..5479ebecc94a1106391383b20582858cf4e54d9d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -3082,6 +3082,23 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0019-5-second-TPS-average.patch b/leaf-server/paper-patches/features/0018-5-second-TPS-average.patch similarity index 98% rename from leaf-server/paper-patches/features/0019-5-second-TPS-average.patch rename to leaf-server/paper-patches/features/0018-5-second-TPS-average.patch index 005a83ec..ab1fe40e 100644 --- a/leaf-server/paper-patches/features/0019-5-second-TPS-average.patch +++ b/leaf-server/paper-patches/features/0018-5-second-TPS-average.patch @@ -58,7 +58,7 @@ index 12b327eea95e0de9e9c39b7d039badee8ec46508..6178f0212214a2a075cea60c758dca79 } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 82e94ec6bc46e6968456debae643649e79f4614c..560b8bf901f7c8c4f00b9a5fe96acacabb383a3b 100644 +index 5479ebecc94a1106391383b20582858cf4e54d9d..154b34c3eb37f9de269c73626e0ed80bf2ec0649 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -3082,7 +3082,26 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0020-Last-tick-time-API.patch b/leaf-server/paper-patches/features/0019-Last-tick-time-API.patch similarity index 96% rename from leaf-server/paper-patches/features/0020-Last-tick-time-API.patch rename to leaf-server/paper-patches/features/0019-Last-tick-time-API.patch index df4bd4e1..66c275f4 100644 --- a/leaf-server/paper-patches/features/0020-Last-tick-time-API.patch +++ b/leaf-server/paper-patches/features/0019-Last-tick-time-API.patch @@ -23,7 +23,7 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 560b8bf901f7c8c4f00b9a5fe96acacabb383a3b..f81c0fef5428ec6ec98c10e0b520496dc68f8961 100644 +index 154b34c3eb37f9de269c73626e0ed80bf2ec0649..ff170c2d0c0f517cacff14ae58bc55757ec63066 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -3333,4 +3333,21 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0021-Show-last-tick-time-in-tps-command.patch b/leaf-server/paper-patches/features/0020-Show-last-tick-time-in-tps-command.patch similarity index 100% rename from leaf-server/paper-patches/features/0021-Show-last-tick-time-in-tps-command.patch rename to leaf-server/paper-patches/features/0020-Show-last-tick-time-in-tps-command.patch diff --git a/leaf-server/paper-patches/features/0022-Pre-compute-VarLong-sizes.patch b/leaf-server/paper-patches/features/0021-Pre-compute-VarLong-sizes.patch similarity index 100% rename from leaf-server/paper-patches/features/0022-Pre-compute-VarLong-sizes.patch rename to leaf-server/paper-patches/features/0021-Pre-compute-VarLong-sizes.patch diff --git a/leaf-server/paper-patches/features/0023-Optimize-VarInt-write-and-VarLong-write.patch b/leaf-server/paper-patches/features/0022-Optimize-VarInt-write-and-VarLong-write.patch similarity index 100% rename from leaf-server/paper-patches/features/0023-Optimize-VarInt-write-and-VarLong-write.patch rename to leaf-server/paper-patches/features/0022-Optimize-VarInt-write-and-VarLong-write.patch diff --git a/leaf-server/paper-patches/features/0024-Virtual-thread-support.patch b/leaf-server/paper-patches/features/0023-Virtual-thread-support.patch similarity index 100% rename from leaf-server/paper-patches/features/0024-Virtual-thread-support.patch rename to leaf-server/paper-patches/features/0023-Virtual-thread-support.patch diff --git a/leaf-server/paper-patches/features/0025-Remove-Timings.patch b/leaf-server/paper-patches/features/0024-Remove-Timings.patch similarity index 100% rename from leaf-server/paper-patches/features/0025-Remove-Timings.patch rename to leaf-server/paper-patches/features/0024-Remove-Timings.patch diff --git a/leaf-server/paper-patches/features/0026-KeYi-Player-Skull-API.patch b/leaf-server/paper-patches/features/0025-KeYi-Player-Skull-API.patch similarity index 84% rename from leaf-server/paper-patches/features/0026-KeYi-Player-Skull-API.patch rename to leaf-server/paper-patches/features/0025-KeYi-Player-Skull-API.patch index 94230a37..8635357a 100644 --- a/leaf-server/paper-patches/features/0026-KeYi-Player-Skull-API.patch +++ b/leaf-server/paper-patches/features/0025-KeYi-Player-Skull-API.patch @@ -7,13 +7,13 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index a40380fbafe1868c9fbb6623987c4f226e3f2150..32537a9a892b12258ae17c63c32e98e1b3902cb9 100644 +index 4e24a177aed7eda0899b4a1a1e308f02a16c5718..2ab6ca0c7ec5e6358a0fd8e93852c99cb0456e18 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -3623,4 +3623,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa - this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket(getEntityId(), io.papermc.paper.adventure.PaperAdventure.asVanilla(message))); + public PlayerGameConnection getConnection() { + return this.getHandle().connection.playerGameConnection; } - // Purpur end - Death screen API + + // Leaf start - KeYi - Player Skull API + @Override diff --git a/leaf-server/paper-patches/features/0027-Slice-Smooth-Teleports.patch b/leaf-server/paper-patches/features/0026-Slice-Smooth-Teleports.patch similarity index 90% rename from leaf-server/paper-patches/features/0027-Slice-Smooth-Teleports.patch rename to leaf-server/paper-patches/features/0026-Slice-Smooth-Teleports.patch index 3ca3286a..f6c6fcc5 100644 --- a/leaf-server/paper-patches/features/0027-Slice-Smooth-Teleports.patch +++ b/leaf-server/paper-patches/features/0026-Slice-Smooth-Teleports.patch @@ -9,10 +9,10 @@ Original project: https://github.com/Cryptite/Slice Co-authored-by: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 32537a9a892b12258ae17c63c32e98e1b3902cb9..2d9725d2e61bb2baa0313542925e620e9bcb4942 100644 +index 2ab6ca0c7ec5e6358a0fd8e93852c99cb0456e18..a323110ffc7d279e300a593d499ffa8d792d2c93 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1333,6 +1333,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -1405,6 +1405,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa // Paper end - Teleportation API } diff --git a/leaf-server/paper-patches/features/0028-Leaves-Protocol-Core.patch b/leaf-server/paper-patches/features/0027-Leaves-Protocol-Core.patch similarity index 94% rename from leaf-server/paper-patches/features/0028-Leaves-Protocol-Core.patch rename to leaf-server/paper-patches/features/0027-Leaves-Protocol-Core.patch index aeb1e5d0..22dc1b1a 100644 --- a/leaf-server/paper-patches/features/0028-Leaves-Protocol-Core.patch +++ b/leaf-server/paper-patches/features/0027-Leaves-Protocol-Core.patch @@ -9,7 +9,7 @@ Original project: https://github.com/LeavesMC/Leaves Commit: c581f1311edc4787b08fe31c5a9996ab9b369a7c diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index f81c0fef5428ec6ec98c10e0b520496dc68f8961..01de5ccfe7e99936ae503f36d9abb02f4f134bc5 100644 +index ff170c2d0c0f517cacff14ae58bc55757ec63066..8d2003d458abcaae38c68317fb073ae4ffafd321 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -512,6 +512,7 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0029-Leaves-Replay-Mod-API.patch b/leaf-server/paper-patches/features/0028-Leaves-Replay-Mod-API.patch similarity index 96% rename from leaf-server/paper-patches/features/0029-Leaves-Replay-Mod-API.patch rename to leaf-server/paper-patches/features/0028-Leaves-Replay-Mod-API.patch index b1db3400..f966f8bb 100644 --- a/leaf-server/paper-patches/features/0029-Leaves-Replay-Mod-API.patch +++ b/leaf-server/paper-patches/features/0028-Leaves-Replay-Mod-API.patch @@ -27,7 +27,7 @@ index 4c003acccdd2dd17918b15316001e52e7670123e..99662395fef09017ff0843da6c482815 HandlerList handlers = event.getHandlers(); RegisteredListener[] listeners = handlers.getRegisteredListeners(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 01de5ccfe7e99936ae503f36d9abb02f4f134bc5..e1d81f91f166beec06aaa8739ea6b61703dc04dd 100644 +index 8d2003d458abcaae38c68317fb073ae4ffafd321..26850e8277eaa39fe004f9c349ad2e70d3768dc1 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -317,6 +317,7 @@ public final class CraftServer implements Server { @@ -73,10 +73,10 @@ index 476eefebace887064b728f08af40c746b6f70787..cf1a1eb731083ba56cdb9ad857255b1a if (entity instanceof EnderDragonPart complexPart) { if (complexPart.parentMob instanceof EnderDragon) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 2d9725d2e61bb2baa0313542925e620e9bcb4942..3d3d9c795a6e5be65fe0329e82dd018ce21807e0 100644 +index a323110ffc7d279e300a593d499ffa8d792d2c93..a32be0ce94e74a4617f009c5daabaa507df40c1f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2235,7 +2235,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -2307,7 +2307,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa @Override public boolean canSee(Player player) { diff --git a/leaf-server/paper-patches/features/0030-Skip-event-if-no-listeners.patch b/leaf-server/paper-patches/features/0029-Skip-event-if-no-listeners.patch similarity index 100% rename from leaf-server/paper-patches/features/0030-Skip-event-if-no-listeners.patch rename to leaf-server/paper-patches/features/0029-Skip-event-if-no-listeners.patch diff --git a/leaf-server/paper-patches/features/0031-SparklyPaper-Optimize-canSee-checks.patch b/leaf-server/paper-patches/features/0030-SparklyPaper-Optimize-canSee-checks.patch similarity index 95% rename from leaf-server/paper-patches/features/0031-SparklyPaper-Optimize-canSee-checks.patch rename to leaf-server/paper-patches/features/0030-SparklyPaper-Optimize-canSee-checks.patch index bfacc741..94151ea9 100644 --- a/leaf-server/paper-patches/features/0031-SparklyPaper-Optimize-canSee-checks.patch +++ b/leaf-server/paper-patches/features/0030-SparklyPaper-Optimize-canSee-checks.patch @@ -16,7 +16,7 @@ This seems stupid, but it does seem that it improves the performance a bit, and We also create a "canSee" method tailored for "ChunkMap#updatePlayer()", a method without the equals check (the "updatePlayer()" already checks if the entity is the same entity) because the CraftPlayer's `equals()` check is a *bit* expensive compared to only checking the object's identity, and because the identity has already been check, we don't need to check it twice. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 3d3d9c795a6e5be65fe0329e82dd018ce21807e0..0668b392c46cf0aeadaab2fba1e7f001664e5155 100644 +index a32be0ce94e74a4617f009c5daabaa507df40c1f..f6645a9cfe138e01750d58ad6577287f6885766b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -220,7 +220,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa @@ -28,7 +28,7 @@ index 3d3d9c795a6e5be65fe0329e82dd018ce21807e0..0668b392c46cf0aeadaab2fba1e7f001 private final Set unlistedEntities = new HashSet<>(); // Paper - Add Listing API for Player private static final WeakHashMap> pluginWeakReferences = new WeakHashMap<>(); private int hash = 0; -@@ -2240,9 +2240,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -2312,9 +2312,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa @Override public boolean canSee(org.bukkit.entity.Entity entity) { diff --git a/leaf-server/paper-patches/features/0032-Including-5s-in-getTPS.patch b/leaf-server/paper-patches/features/0031-Including-5s-in-getTPS.patch similarity index 90% rename from leaf-server/paper-patches/features/0032-Including-5s-in-getTPS.patch rename to leaf-server/paper-patches/features/0031-Including-5s-in-getTPS.patch index e9ff23dd..e10a6737 100644 --- a/leaf-server/paper-patches/features/0032-Including-5s-in-getTPS.patch +++ b/leaf-server/paper-patches/features/0031-Including-5s-in-getTPS.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Including 5s in getTPS() diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index e1d81f91f166beec06aaa8739ea6b61703dc04dd..5a0253f402d31fa3312d0248edb6c7cd6cec6698 100644 +index 26850e8277eaa39fe004f9c349ad2e70d3768dc1..57b55fa6a6f9d0327eaf83324142e837a2a1103a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -3078,6 +3078,8 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0033-Don-t-throw-exception-on-missing-ResourceKey-value.patch b/leaf-server/paper-patches/features/0032-Don-t-throw-exception-on-missing-ResourceKey-value.patch similarity index 100% rename from leaf-server/paper-patches/features/0033-Don-t-throw-exception-on-missing-ResourceKey-value.patch rename to leaf-server/paper-patches/features/0032-Don-t-throw-exception-on-missing-ResourceKey-value.patch diff --git a/leaf-server/paper-patches/features/0034-Virtual-Thread-for-async-scheduler.patch b/leaf-server/paper-patches/features/0033-Virtual-Thread-for-async-scheduler.patch similarity index 100% rename from leaf-server/paper-patches/features/0034-Virtual-Thread-for-async-scheduler.patch rename to leaf-server/paper-patches/features/0033-Virtual-Thread-for-async-scheduler.patch diff --git a/leaf-server/paper-patches/features/0035-Mirai-Configurable-chat-message-signatures.patch b/leaf-server/paper-patches/features/0034-Mirai-Configurable-chat-message-signatures.patch similarity index 100% rename from leaf-server/paper-patches/features/0035-Mirai-Configurable-chat-message-signatures.patch rename to leaf-server/paper-patches/features/0034-Mirai-Configurable-chat-message-signatures.patch diff --git a/leaf-server/paper-patches/features/0036-Matter-Secure-Seed.patch b/leaf-server/paper-patches/features/0035-Matter-Secure-Seed.patch similarity index 97% rename from leaf-server/paper-patches/features/0036-Matter-Secure-Seed.patch rename to leaf-server/paper-patches/features/0035-Matter-Secure-Seed.patch index a373250a..0d4f330d 100644 --- a/leaf-server/paper-patches/features/0036-Matter-Secure-Seed.patch +++ b/leaf-server/paper-patches/features/0035-Matter-Secure-Seed.patch @@ -34,7 +34,7 @@ index 400e632208d133a3f49fc7f14bceb48a1026769b..8c4e5b0c81d90a0eeee4ab9e5882b137 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 5a0253f402d31fa3312d0248edb6c7cd6cec6698..110e76827f5b3b44694cd5ac578f4dbf169e96e2 100644 +index 57b55fa6a6f9d0327eaf83324142e837a2a1103a..db6ab1783a47e0d3a826fb28945b0a2b388b8491 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1358,7 +1358,11 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0037-Faster-random-generator.patch b/leaf-server/paper-patches/features/0036-Faster-random-generator.patch similarity index 100% rename from leaf-server/paper-patches/features/0037-Faster-random-generator.patch rename to leaf-server/paper-patches/features/0036-Faster-random-generator.patch diff --git a/leaf-server/paper-patches/features/0038-Configurable-unknown-command-message.patch b/leaf-server/paper-patches/features/0037-Configurable-unknown-command-message.patch similarity index 100% rename from leaf-server/paper-patches/features/0038-Configurable-unknown-command-message.patch rename to leaf-server/paper-patches/features/0037-Configurable-unknown-command-message.patch diff --git a/leaf-server/paper-patches/features/0039-Replace-world-map-with-optimized-collection.patch b/leaf-server/paper-patches/features/0038-Replace-world-map-with-optimized-collection.patch similarity index 92% rename from leaf-server/paper-patches/features/0039-Replace-world-map-with-optimized-collection.patch rename to leaf-server/paper-patches/features/0038-Replace-world-map-with-optimized-collection.patch index 985409f0..d344d492 100644 --- a/leaf-server/paper-patches/features/0039-Replace-world-map-with-optimized-collection.patch +++ b/leaf-server/paper-patches/features/0038-Replace-world-map-with-optimized-collection.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Replace world map with optimized collection diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 110e76827f5b3b44694cd5ac578f4dbf169e96e2..4cb422feb0ef0344a5b56c5425da6c84878d424f 100644 +index db6ab1783a47e0d3a826fb28945b0a2b388b8491..918f1dc92ce5988463d25838d8bdab7622a55b5f 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -287,7 +287,7 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0040-Cache-CraftEntityType-minecraftToBukkit-convert.patch b/leaf-server/paper-patches/features/0039-Cache-CraftEntityType-minecraftToBukkit-convert.patch similarity index 100% rename from leaf-server/paper-patches/features/0040-Cache-CraftEntityType-minecraftToBukkit-convert.patch rename to leaf-server/paper-patches/features/0039-Cache-CraftEntityType-minecraftToBukkit-convert.patch diff --git a/leaf-server/paper-patches/features/0041-Multithreaded-Tracker.patch b/leaf-server/paper-patches/features/0040-Multithreaded-Tracker.patch similarity index 96% rename from leaf-server/paper-patches/features/0041-Multithreaded-Tracker.patch rename to leaf-server/paper-patches/features/0040-Multithreaded-Tracker.patch index 95bdd725..b239f300 100644 --- a/leaf-server/paper-patches/features/0041-Multithreaded-Tracker.patch +++ b/leaf-server/paper-patches/features/0040-Multithreaded-Tracker.patch @@ -59,7 +59,7 @@ index cf1a1eb731083ba56cdb9ad857255b1a55e31717..93b53a2ef33701eb25e78a11235eb759 } return set; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 0668b392c46cf0aeadaab2fba1e7f001664e5155..a5c0b4bed976c314cee3947caf1c6db78dcf53ae 100644 +index f6645a9cfe138e01750d58ad6577287f6885766b..2fcc4aff0976c63f6c7a2ec88ff048f72483bfc6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -220,7 +220,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa @@ -71,7 +71,7 @@ index 0668b392c46cf0aeadaab2fba1e7f001664e5155..a5c0b4bed976c314cee3947caf1c6db7 private final Set unlistedEntities = new HashSet<>(); // Paper - Add Listing API for Player private static final WeakHashMap> pluginWeakReferences = new WeakHashMap<>(); private int hash = 0; -@@ -2841,7 +2841,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -2913,7 +2913,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa Iterator iterator = collection.iterator(); while (iterator.hasNext()) { AttributeInstance genericInstance = iterator.next(); diff --git a/leaf-server/paper-patches/features/0042-EMC-Don-t-use-snapshots-for-acquiring-blockstate.patch b/leaf-server/paper-patches/features/0041-EMC-Don-t-use-snapshots-for-acquiring-blockstate.patch similarity index 100% rename from leaf-server/paper-patches/features/0042-EMC-Don-t-use-snapshots-for-acquiring-blockstate.patch rename to leaf-server/paper-patches/features/0041-EMC-Don-t-use-snapshots-for-acquiring-blockstate.patch diff --git a/leaf-server/paper-patches/features/0043-Faster-CraftServer-getworlds-list-creation.patch b/leaf-server/paper-patches/features/0042-Faster-CraftServer-getworlds-list-creation.patch similarity index 91% rename from leaf-server/paper-patches/features/0043-Faster-CraftServer-getworlds-list-creation.patch rename to leaf-server/paper-patches/features/0042-Faster-CraftServer-getworlds-list-creation.patch index fb5daf76..be1d941e 100644 --- a/leaf-server/paper-patches/features/0043-Faster-CraftServer-getworlds-list-creation.patch +++ b/leaf-server/paper-patches/features/0042-Faster-CraftServer-getworlds-list-creation.patch @@ -8,7 +8,7 @@ replacing ArrayList with Fastutil ObjectArrayList brings about 40% performance improvement in benchmark. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 4cb422feb0ef0344a5b56c5425da6c84878d424f..42645ea0f97df8e733001e7c3f4c4096ed6a5049 100644 +index 918f1dc92ce5988463d25838d8bdab7622a55b5f..6d721742598f625bcf589491b2b59dbbf5f8c903 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -978,7 +978,7 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0044-Cache-chunk-key.patch b/leaf-server/paper-patches/features/0043-Cache-chunk-key.patch similarity index 100% rename from leaf-server/paper-patches/features/0044-Cache-chunk-key.patch rename to leaf-server/paper-patches/features/0043-Cache-chunk-key.patch diff --git a/leaf-server/paper-patches/features/0045-PlayerInventoryOverflowEvent.patch b/leaf-server/paper-patches/features/0044-PlayerInventoryOverflowEvent.patch similarity index 100% rename from leaf-server/paper-patches/features/0045-PlayerInventoryOverflowEvent.patch rename to leaf-server/paper-patches/features/0044-PlayerInventoryOverflowEvent.patch diff --git a/leaf-server/paper-patches/features/0046-Paper-PR-Fix-MC-117075-Block-Entities-Unload-Lag-Spi.patch b/leaf-server/paper-patches/features/0045-Paper-PR-Fix-MC-117075-Block-Entities-Unload-Lag-Spi.patch similarity index 100% rename from leaf-server/paper-patches/features/0046-Paper-PR-Fix-MC-117075-Block-Entities-Unload-Lag-Spi.patch rename to leaf-server/paper-patches/features/0045-Paper-PR-Fix-MC-117075-Block-Entities-Unload-Lag-Spi.patch diff --git a/leaf-server/paper-patches/features/0047-SparklyPaper-Parallel-world-ticking.patch b/leaf-server/paper-patches/features/0046-SparklyPaper-Parallel-world-ticking.patch similarity index 100% rename from leaf-server/paper-patches/features/0047-SparklyPaper-Parallel-world-ticking.patch rename to leaf-server/paper-patches/features/0046-SparklyPaper-Parallel-world-ticking.patch diff --git a/leaf-server/paper-patches/features/0048-Fish-Parallel-World-Ticking-API.patch b/leaf-server/paper-patches/features/0047-Fish-Parallel-World-Ticking-API.patch similarity index 96% rename from leaf-server/paper-patches/features/0048-Fish-Parallel-World-Ticking-API.patch rename to leaf-server/paper-patches/features/0047-Fish-Parallel-World-Ticking-API.patch index 5073aa6d..b4597a6d 100644 --- a/leaf-server/paper-patches/features/0048-Fish-Parallel-World-Ticking-API.patch +++ b/leaf-server/paper-patches/features/0047-Fish-Parallel-World-Ticking-API.patch @@ -16,7 +16,7 @@ With this approach only new methods are added into already existing Bukkit API, get standarized. diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index dfafd3125438b6a74f15a749599acfd00918c50a..bcda5dd6fe3741518fea263b4790ea33bb9729cb 100644 +index 6d721742598f625bcf589491b2b59dbbf5f8c903..c3ee0170aa8d74a1f0089d73d9df7e6f049eb067 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -3366,4 +3366,11 @@ public final class CraftServer implements Server { diff --git a/leaf-server/paper-patches/features/0049-Paper-PR-Throttle-failed-spawn-attempts.patch b/leaf-server/paper-patches/features/0048-Paper-PR-Throttle-failed-spawn-attempts.patch similarity index 100% rename from leaf-server/paper-patches/features/0049-Paper-PR-Throttle-failed-spawn-attempts.patch rename to leaf-server/paper-patches/features/0048-Paper-PR-Throttle-failed-spawn-attempts.patch diff --git a/leaf-server/paper-patches/features/0050-Async-playerdata-saving.patch b/leaf-server/paper-patches/features/0049-Async-playerdata-saving.patch similarity index 100% rename from leaf-server/paper-patches/features/0050-Async-playerdata-saving.patch rename to leaf-server/paper-patches/features/0049-Async-playerdata-saving.patch diff --git a/leaf-server/paper-patches/features/0051-Async-chunk-sending.patch b/leaf-server/paper-patches/features/0050-Async-chunk-sending.patch similarity index 100% rename from leaf-server/paper-patches/features/0051-Async-chunk-sending.patch rename to leaf-server/paper-patches/features/0050-Async-chunk-sending.patch diff --git a/leaf-server/paper-patches/features/0052-Optimise-player-movement-checks.patch b/leaf-server/paper-patches/features/0051-Optimise-player-movement-checks.patch similarity index 100% rename from leaf-server/paper-patches/features/0052-Optimise-player-movement-checks.patch rename to leaf-server/paper-patches/features/0051-Optimise-player-movement-checks.patch diff --git a/leaf-server/paper-patches/features/0053-optimise-ReferenceList.patch b/leaf-server/paper-patches/features/0052-optimise-ReferenceList.patch similarity index 100% rename from leaf-server/paper-patches/features/0053-optimise-ReferenceList.patch rename to leaf-server/paper-patches/features/0052-optimise-ReferenceList.patch diff --git a/leaf-server/paper-patches/features/0054-cache-getBiome.patch b/leaf-server/paper-patches/features/0053-cache-getBiome.patch similarity index 100% rename from leaf-server/paper-patches/features/0054-cache-getBiome.patch rename to leaf-server/paper-patches/features/0053-cache-getBiome.patch diff --git a/leaf-server/paper-patches/features/0055-dump-pwt-thread.patch b/leaf-server/paper-patches/features/0054-dump-pwt-thread.patch similarity index 100% rename from leaf-server/paper-patches/features/0055-dump-pwt-thread.patch rename to leaf-server/paper-patches/features/0054-dump-pwt-thread.patch diff --git a/leaf-server/paper-patches/features/0056-Paw-optimization.patch b/leaf-server/paper-patches/features/0055-Paw-optimization.patch similarity index 100% rename from leaf-server/paper-patches/features/0056-Paw-optimization.patch rename to leaf-server/paper-patches/features/0055-Paw-optimization.patch diff --git a/leaf-server/paper-patches/features/0057-optimize-despawn.patch b/leaf-server/paper-patches/features/0056-optimize-despawn.patch similarity index 100% rename from leaf-server/paper-patches/features/0057-optimize-despawn.patch rename to leaf-server/paper-patches/features/0056-optimize-despawn.patch diff --git a/leaf-server/paper-patches/features/0058-optimize-mob-spawning.patch b/leaf-server/paper-patches/features/0057-optimize-mob-spawning.patch similarity index 97% rename from leaf-server/paper-patches/features/0058-optimize-mob-spawning.patch rename to leaf-server/paper-patches/features/0057-optimize-mob-spawning.patch index e18822f1..3139bce1 100644 --- a/leaf-server/paper-patches/features/0058-optimize-mob-spawning.patch +++ b/leaf-server/paper-patches/features/0057-optimize-mob-spawning.patch @@ -5,7 +5,7 @@ Subject: [PATCH] optimize mob spawning diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index dfafd3125438b6a74f15a749599acfd00918c50a..034d136bcaa894d8999fc51a53d66b40bb884ccd 100644 +index c3ee0170aa8d74a1f0089d73d9df7e6f049eb067..7a5bda878ff77d20a9ea11e8ac879cebcec2f63d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -296,7 +296,8 @@ public final class CraftServer implements Server { @@ -48,7 +48,7 @@ index dfafd3125438b6a74f15a749599acfd00918c50a..034d136bcaa894d8999fc51a53d66b40 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index ee5f342995a335593932a497c2bafd36d34cecb2..2523cd17ad4a3add3a9a420777dc49fe0658fe01 100644 +index a16390fc13e1baf3cffbcfec5cc410a72ed47367..ccda6365718b94a475ee68ff8ad4032101222a7c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -173,7 +173,8 @@ public class CraftWorld extends CraftRegionAccessor implements World { diff --git a/leaf-server/paper-patches/features/0059-Toggleable-async-catcher.patch b/leaf-server/paper-patches/features/0058-Toggleable-async-catcher.patch similarity index 91% rename from leaf-server/paper-patches/features/0059-Toggleable-async-catcher.patch rename to leaf-server/paper-patches/features/0058-Toggleable-async-catcher.patch index 9ea9e1a9..69e74b28 100644 --- a/leaf-server/paper-patches/features/0059-Toggleable-async-catcher.patch +++ b/leaf-server/paper-patches/features/0058-Toggleable-async-catcher.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Toggleable async catcher diff --git a/src/main/java/org/spigotmc/AsyncCatcher.java b/src/main/java/org/spigotmc/AsyncCatcher.java -index 7e7a0ed944961af5ab7a49bc659da2862d2e2c82..e584205c3e1412bf2f2c4e4eb114a29cebc73fad 100644 +index 7e7a0ed944961af5ab7a49bc659da2862d2e2c82..2522890b326c21434e10b90c774efbc8590117b3 100644 --- a/src/main/java/org/spigotmc/AsyncCatcher.java +++ b/src/main/java/org/spigotmc/AsyncCatcher.java @@ -5,6 +5,7 @@ import net.minecraft.server.MinecraftServer; diff --git a/leaf-server/paper-patches/features/0060-cache-profile-data.patch b/leaf-server/paper-patches/features/0059-cache-profile-data.patch similarity index 100% rename from leaf-server/paper-patches/features/0060-cache-profile-data.patch rename to leaf-server/paper-patches/features/0059-cache-profile-data.patch diff --git a/leaf-server/paper-patches/features/0061-Bump-netty-to-4.2.x.patch b/leaf-server/paper-patches/features/0060-Bump-netty-to-4.2.x.patch similarity index 100% rename from leaf-server/paper-patches/features/0061-Bump-netty-to-4.2.x.patch rename to leaf-server/paper-patches/features/0060-Bump-netty-to-4.2.x.patch