From b736aa9fcbfd3de40d8e5e24ad7a9192edfef109 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Sun, 26 May 2024 21:06:49 +0800 Subject: [PATCH] Updated Upstream (Leaf) --- .github/workflows/build-1204.yml | 18 +- build.gradle.kts | 9 +- gradle.properties | 1 + patches/api/0001-Rebrand.patch | 19 ++ ...les.patch => 0002-Leaf-config-files.patch} | 0 ...try.patch => 0003-Pufferfish-Sentry.patch} | 0 ...es.patch => 0004-Purpur-API-Changes.patch} | 45 ---- ...imings.patch => 0005-Remove-Timings.patch} | 0 ...ies.patch => 0006-Bump-Dependencies.patch} | 0 ...llow-unknown-event-thread-execution.patch} | 0 ...patch => 0008-KeYi-Player-Skull-API.patch} | 0 ...atch => 0009-Slice-Smooth-Teleports.patch} | 2 +- ...figurable-LibraryLoader-maven-repos.patch} | 0 ...11-Fix-Pufferfish-and-Purpur-patches.patch | 221 ++++++++++++++++++ ...Purpur-Configurable-server-mod-name.patch} | 2 +- ...> 0013-Configurable-server-GUI-name.patch} | 2 +- ...imings.patch => 0014-Remove-Timings.patch} | 6 +- ...ies.patch => 0015-Bump-Dependencies.patch} | 0 ... 0016-Remove-vanilla-username-check.patch} | 0 ...ck-for-Broken-BungeeCord-Configurat.patch} | 0 ...emove-UseItemOnPacket-Too-Far-Check.patch} | 2 +- ...llow-unknown-event-thread-execution.patch} | 0 ...patch => 0020-KeYi-Player-Skull-API.patch} | 0 ...le-arrow-despawn-counter-by-default.patch} | 0 ...n-for-spigot-item-merging-mechanism.patch} | 2 +- ...pet-Fixes-Optimized-getBiome-method.patch} | 0 ...t-Fixes-Use-optimized-RecipeManager.patch} | 0 ...on-optimized-PoweredRailBlock-logic.patch} | 0 ...karin-Save-Json-list-asynchronously.patch} | 0 ...atch => 0027-Slice-Smooth-Teleports.patch} | 0 ...chment-Make-FixLight-use-action-bar.patch} | 0 ...s.patch => 0029-Leaves-Server-Utils.patch} | 8 +- ....patch => 0030-Leaves-Protocol-Core.patch} | 2 +- ....patch => 0031-Leaves-Jade-Protocol.patch} | 0 ...h => 0032-Leaves-Appleskin-Protocol.patch} | 0 ...h => 0033-Leaves-Xaero-Map-Protocol.patch} | 0 ... => 0034-Leaves-Syncmatica-Protocol.patch} | 2 +- ...ves-Disable-moved-wrongly-threshold.patch} | 2 +- ...Fix-vehicle-teleport-by-end-gateway.patch} | 0 ...og4j-compatible-with-future-release.patch} | 0 ...-Optimize-villager-data-storage.patc.patch | 40 ---- ...tch => 0038-Petal-Async-Pathfinding.patch} | 2 +- ...-Gale-s-Optimize-sun-burn-tick.patch.patch | 59 ----- ...=> 0039-Petal-Multithreaded-Tracker.patch} | 6 +- ...duce-work-done-by-game-event-system.patch} | 0 ...> 0041-Optimize-Minecart-collisions.patch} | 20 +- ...rk.patch => 0042-Reduce-canSee-work.patch} | 0 ...tch => 0043-Faster-Natural-Spawning.patch} | 0 ...dom-for-xaeroMapServerID-generation.patch} | 0 ...-Fix-casting-in-Purpur-world-config.patch} | 2 +- ...tch.patch => 0046-Fix-sprint-glitch.patch} | 2 +- ...h => 0047-Fix-keepalive-kicked-name.patch} | 0 ...ble-movement-speed-of-more-entities.patch} | 0 ...-of-futures-for-chunk-structure-gen.patch} | 0 ...e-items-finding-hopper-nearby-check.patch} | 0 ...nearPurpur-Add-Linear-region-format.patch} | 4 +- ...st-remove-all-locks-on-region-files.patch} | 0 ...issing-purpur-configuration-options.patch} | 0 ...e-missing-Pufferfish-configurations.patch} | 0 ... => 0055-Skip-event-if-no-listeners.patch} | 0 ...-Rewrite-framed-map-tracker-ticking.patch} | 2 +- ...-MapItem-update-if-the-map-does-not.patch} | 0 ...p-distanceToSqr-call-in-ServerEntity.patch | 31 +++ ...p-EntityScheduler-s-executeTick-chec.patch | 138 +++++++++++ ...he-coordinate-key-used-for-nearby-pl.patch | 4 +- patches/server/0082-Matter-Secure-Seed.patch | 8 +- ...084-Ignore-terminal-provider-warning.patch | 20 ++ ...085-Fix-console-freeze-above-JAVA-22.patch | 20 ++ .../server/0086-Faster-Random-Generator.patch | 173 ++++++++++++++ .../0087-Don-t-save-primed-tnt-entity.patch | 53 +++++ ...0088-Don-t-save-falling-block-entity.patch | 34 +++ ...Optimize-Use-thread-safe-Collection.patch} | 63 +++-- ...-Optimize-Reduce-expensive-iteration.patch | 59 +++++ 73 files changed, 862 insertions(+), 221 deletions(-) create mode 100644 patches/api/0001-Rebrand.patch rename patches/api/{0001-Leaf-config-files.patch => 0002-Leaf-config-files.patch} (100%) rename patches/api/{0002-Pufferfish-Sentry.patch => 0003-Pufferfish-Sentry.patch} (100%) rename patches/api/{0003-Purpur-API-Changes.patch => 0004-Purpur-API-Changes.patch} (98%) rename patches/api/{0004-Remove-Timings.patch => 0005-Remove-Timings.patch} (100%) rename patches/api/{0005-Bump-Dependencies.patch => 0006-Bump-Dependencies.patch} (100%) rename patches/api/{0006-KTP-Allow-unknown-event-thread-execution.patch => 0007-KTP-Allow-unknown-event-thread-execution.patch} (100%) rename patches/api/{0007-KeYi-Player-Skull-API.patch => 0008-KeYi-Player-Skull-API.patch} (100%) rename patches/api/{0008-Slice-Smooth-Teleports.patch => 0009-Slice-Smooth-Teleports.patch} (93%) rename patches/api/{0009-Configurable-LibraryLoader-maven-repos.patch => 0010-Configurable-LibraryLoader-maven-repos.patch} (100%) create mode 100644 patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch rename patches/server/{0011-Purpur-Configurable-server-mod-name.patch => 0012-Purpur-Configurable-server-mod-name.patch} (95%) rename patches/server/{0012-Configurable-server-GUI-name.patch => 0013-Configurable-server-GUI-name.patch} (96%) rename patches/server/{0013-Remove-Timings.patch => 0014-Remove-Timings.patch} (99%) rename patches/server/{0014-Bump-Dependencies.patch => 0015-Bump-Dependencies.patch} (100%) rename patches/server/{0015-Remove-vanilla-username-check.patch => 0016-Remove-vanilla-username-check.patch} (100%) rename patches/server/{0016-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch => 0017-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch} (100%) rename patches/server/{0017-Remove-UseItemOnPacket-Too-Far-Check.patch => 0018-Remove-UseItemOnPacket-Too-Far-Check.patch} (96%) rename patches/server/{0018-KTP-Allow-unknown-event-thread-execution.patch => 0019-KTP-Allow-unknown-event-thread-execution.patch} (100%) rename patches/server/{0019-KeYi-Player-Skull-API.patch => 0020-KeYi-Player-Skull-API.patch} (100%) rename patches/server/{0020-KeYi-Disable-arrow-despawn-counter-by-default.patch => 0021-KeYi-Disable-arrow-despawn-counter-by-default.patch} (100%) rename patches/server/{0021-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch => 0022-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch} (95%) rename patches/server/{0022-Carpet-Fixes-Optimized-getBiome-method.patch => 0023-Carpet-Fixes-Optimized-getBiome-method.patch} (100%) rename patches/server/{0023-Carpet-Fixes-Use-optimized-RecipeManager.patch => 0024-Carpet-Fixes-Use-optimized-RecipeManager.patch} (100%) rename patches/server/{0024-Rail-Optimization-optimized-PoweredRailBlock-logic.patch => 0025-Rail-Optimization-optimized-PoweredRailBlock-logic.patch} (100%) rename patches/server/{0025-Akarin-Save-Json-list-asynchronously.patch => 0026-Akarin-Save-Json-list-asynchronously.patch} (100%) rename patches/server/{0026-Slice-Smooth-Teleports.patch => 0027-Slice-Smooth-Teleports.patch} (100%) rename patches/server/{0027-Parchment-Make-FixLight-use-action-bar.patch => 0028-Parchment-Make-FixLight-use-action-bar.patch} (100%) rename patches/server/{0028-Leaves-Server-Utils.patch => 0029-Leaves-Server-Utils.patch} (88%) rename patches/server/{0029-Leaves-Protocol-Core.patch => 0030-Leaves-Protocol-Core.patch} (99%) rename patches/server/{0030-Leaves-Jade-Protocol.patch => 0031-Leaves-Jade-Protocol.patch} (100%) rename patches/server/{0031-Leaves-Appleskin-Protocol.patch => 0032-Leaves-Appleskin-Protocol.patch} (100%) rename patches/server/{0032-Leaves-Xaero-Map-Protocol.patch => 0033-Leaves-Xaero-Map-Protocol.patch} (100%) rename patches/server/{0033-Leaves-Syncmatica-Protocol.patch => 0034-Leaves-Syncmatica-Protocol.patch} (99%) rename patches/server/{0034-Leaves-Disable-moved-wrongly-threshold.patch => 0035-Leaves-Disable-moved-wrongly-threshold.patch} (98%) rename patches/server/{0035-Leaves-Fix-vehicle-teleport-by-end-gateway.patch => 0036-Leaves-Fix-vehicle-teleport-by-end-gateway.patch} (100%) rename patches/server/{0036-Fix-Make-log4j-compatible-with-future-release.patch => 0037-Fix-Make-log4j-compatible-with-future-release.patch} (100%) delete mode 100644 patches/server/0037-Sync-with-Gale-s-Optimize-villager-data-storage.patc.patch rename patches/server/{0039-Petal-Async-Pathfinding.patch => 0038-Petal-Async-Pathfinding.patch} (99%) delete mode 100644 patches/server/0038-Sync-with-Gale-s-Optimize-sun-burn-tick.patch.patch rename patches/server/{0040-Petal-Multithreaded-Tracker.patch => 0039-Petal-Multithreaded-Tracker.patch} (98%) rename patches/server/{0041-Petal-reduce-work-done-by-game-event-system.patch => 0040-Petal-reduce-work-done-by-game-event-system.patch} (100%) rename patches/server/{0043-Optimize-Minecart-collisions.patch => 0041-Optimize-Minecart-collisions.patch} (85%) rename patches/server/{0044-Reduce-canSee-work.patch => 0042-Reduce-canSee-work.patch} (100%) rename patches/server/{0045-Faster-Natural-Spawning.patch => 0043-Faster-Natural-Spawning.patch} (100%) rename patches/server/{0046-Faster-Random-for-xaeroMapServerID-generation.patch => 0044-Faster-Random-for-xaeroMapServerID-generation.patch} (100%) rename patches/server/{0047-Fix-casting-in-Purpur-world-config.patch => 0045-Fix-casting-in-Purpur-world-config.patch} (97%) rename patches/server/{0048-Fix-sprint-glitch.patch => 0046-Fix-sprint-glitch.patch} (90%) rename patches/server/{0049-Fix-keepalive-kicked-name.patch => 0047-Fix-keepalive-kicked-name.patch} (100%) rename patches/server/{0050-Configurable-movement-speed-of-more-entities.patch => 0048-Configurable-movement-speed-of-more-entities.patch} (100%) rename patches/server/{0051-Faster-sequencing-of-futures-for-chunk-structure-gen.patch => 0049-Faster-sequencing-of-futures-for-chunk-structure-gen.patch} (100%) rename patches/server/{0052-Reduce-items-finding-hopper-nearby-check.patch => 0050-Reduce-items-finding-hopper-nearby-check.patch} (100%) rename patches/server/{0053-LinearPurpur-Add-Linear-region-format.patch => 0051-LinearPurpur-Add-Linear-region-format.patch} (99%) rename patches/server/{0054-LinearPurpur-Just-remove-all-locks-on-region-files.patch => 0052-LinearPurpur-Just-remove-all-locks-on-region-files.patch} (100%) rename patches/server/{0055-Plazma-Add-missing-purpur-configuration-options.patch => 0053-Plazma-Add-missing-purpur-configuration-options.patch} (100%) rename patches/server/{0056-Plazma-Add-some-missing-Pufferfish-configurations.patch => 0054-Plazma-Add-some-missing-Pufferfish-configurations.patch} (100%) rename patches/server/{0057-Skip-event-if-no-listeners.patch => 0055-Skip-event-if-no-listeners.patch} (100%) rename patches/server/{0058-PaperPR-Rewrite-framed-map-tracker-ticking.patch => 0056-PaperPR-Rewrite-framed-map-tracker-ticking.patch} (99%) rename patches/server/{0059-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch => 0057-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch} (100%) create mode 100644 patches/server/0058-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch create mode 100644 patches/server/0059-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch create mode 100644 patches/server/0084-Ignore-terminal-provider-warning.patch create mode 100644 patches/server/0085-Fix-console-freeze-above-JAVA-22.patch create mode 100644 patches/server/0086-Faster-Random-Generator.patch create mode 100644 patches/server/0087-Don-t-save-primed-tnt-entity.patch create mode 100644 patches/server/0088-Don-t-save-falling-block-entity.patch rename patches/server/{0042-Fix-tracker-NPE.patch => 0089-Tracking-Optimize-Use-thread-safe-Collection.patch} (56%) create mode 100644 patches/server/0090-Tracking-Optimize-Reduce-expensive-iteration.patch diff --git a/.github/workflows/build-1204.yml b/.github/workflows/build-1204.yml index 6cd529c19..e4246605a 100644 --- a/.github/workflows/build-1204.yml +++ b/.github/workflows/build-1204.yml @@ -32,15 +32,15 @@ jobs: - name: Rename Paperclip Jar run: mv build/libs/leaf-paperclip-1.20.4-R0.1-SNAPSHOT-reobf.jar ./leaf-1.20.4.jar - - name: Publish API - if: github.event_name != 'pull_request' - run: | - echo "GITHUB_USERNAME=Leaf" >> $GITHUB_ENV - export GITHUB_USERNAME=Leaf - echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV - export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} - ./gradlew :leaf-api:publish - ./gradlew publishDevBundlePublicationToLeafRepository -PpublishDevBundle=true +# - name: Publish API +# if: github.event_name != 'pull_request' +# run: | +# echo "GITHUB_USERNAME=Leaf" >> $GITHUB_ENV +# export GITHUB_USERNAME=Leaf +# echo "GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_ENV +# export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} +# ./gradlew :leaf-api:publish +# ./gradlew publishDevBundlePublicationToLeafRepository -PpublishDevBundle=true - name: Upload Leaf uses: actions/upload-artifact@main diff --git a/build.gradle.kts b/build.gradle.kts index 52b588976..65f56b851 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,15 +13,16 @@ repositories { maven(paperMavenPublicUrl) { content { onlyForConfigurations(configurations.paperclip.name) } } + maven("https://maven.nostal.ink/repository/maven-snapshots/") } dependencies { - remapper("net.fabricmc:tiny-remapper:0.10.1:fat") + remapper("net.fabricmc:tiny-remapper:0.10.3:fat") decompiler("org.vineflower:vineflower:1.10.1") - paperclip("io.papermc:paperclip:3.0.4-SNAPSHOT") + paperclip("cn.dreeam:quantumleaper:1.0.0-SNAPSHOT") } -subprojects { +allprojects { apply(plugin = "java") apply(plugin = "maven-publish") @@ -30,7 +31,9 @@ subprojects { languageVersion.set(JavaLanguageVersion.of(17)) } } +} +subprojects { tasks.withType { options.encoding = Charsets.UTF_8.name() options.release.set(17) diff --git a/gradle.properties b/gradle.properties index 2b4ef864c..2768ef9ce 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,5 @@ group = org.dreeam.leaf +mcVersion = 1.20.4 version = 1.20.4-R0.1-SNAPSHOT galeCommit = 05f24b652c77b253b1cffef14b21f4fe971a84fa diff --git a/patches/api/0001-Rebrand.patch b/patches/api/0001-Rebrand.patch new file mode 100644 index 000000000..70b9f9955 --- /dev/null +++ b/patches/api/0001-Rebrand.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> +Date: Tue, 21 May 2024 11:43:49 +0800 +Subject: [PATCH] Rebrand + + +diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java +index fd5d9881abfd930bb883120f018f76dc78b62b14..dac207f2f5ae1838ca1b5092f7fe032adc038849 100644 +--- a/src/main/java/org/bukkit/command/defaults/VersionCommand.java ++++ b/src/main/java/org/bukkit/command/defaults/VersionCommand.java +@@ -214,7 +214,7 @@ public class VersionCommand extends BukkitCommand { + String version = Bukkit.getVersion(); + // Paper start + if (version.startsWith("null")) { // running from ide? +- setVersionMessage(Component.text("Unknown version, custom build?", NamedTextColor.YELLOW)); ++ setVersionMessage(Component.text("* Unknown version, custom build?", NamedTextColor.RED)); // Leaf - Purpur - Clean up version command output + return; + } + setVersionMessage(getVersionFetcher().getVersionMessage(version)); diff --git a/patches/api/0001-Leaf-config-files.patch b/patches/api/0002-Leaf-config-files.patch similarity index 100% rename from patches/api/0001-Leaf-config-files.patch rename to patches/api/0002-Leaf-config-files.patch diff --git a/patches/api/0002-Pufferfish-Sentry.patch b/patches/api/0003-Pufferfish-Sentry.patch similarity index 100% rename from patches/api/0002-Pufferfish-Sentry.patch rename to patches/api/0003-Pufferfish-Sentry.patch diff --git a/patches/api/0003-Purpur-API-Changes.patch b/patches/api/0004-Purpur-API-Changes.patch similarity index 98% rename from patches/api/0003-Purpur-API-Changes.patch rename to patches/api/0004-Purpur-API-Changes.patch index 94aa2206e..00b1922ff 100644 --- a/patches/api/0003-Purpur-API-Changes.patch +++ b/patches/api/0004-Purpur-API-Changes.patch @@ -16,23 +16,6 @@ Remove-Timings.patch Add-log-suppression-for-LibraryLoader.patch Fire-Immunity-API.patch -diff --git a/src/main/java/com/destroystokyo/paper/util/VersionFetcher.java b/src/main/java/com/destroystokyo/paper/util/VersionFetcher.java -index a736d7bcdc5861a01b66ba36158db1c716339346..22fc165fd9c95f0f3ae1be7a0857e48cc50fad5b 100644 ---- a/src/main/java/com/destroystokyo/paper/util/VersionFetcher.java -+++ b/src/main/java/com/destroystokyo/paper/util/VersionFetcher.java -@@ -26,6 +26,12 @@ public interface VersionFetcher { - @NotNull - Component getVersionMessage(@NotNull String serverVersion); - -+ // Purpur start -+ default int distance() { -+ return 0; -+ } -+ // Purpur end -+ - class DummyVersionFetcher implements VersionFetcher { - - @Override diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java index d8201747ede92a0123eec012844a7a674e6947f5..e0ecc43fc6a952b4897c530af2e89f2c0558740e 100644 --- a/src/main/java/org/bukkit/Bukkit.java @@ -690,34 +673,6 @@ index ac9a28922f8a556944a4c3649d74c32c622f0cb0..e43d0e0a2c5edfcc82a677b6c4db9314 // Paper start - Plugins do weird things to workaround normal registration if (target.timings == null) { target.timings = co.aikar.timings.TimingsManager.getCommandTiming(null, target); -diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java -index fd5d9881abfd930bb883120f018f76dc78b62b14..d3dadad49df09e85c724c93e8cc88da2c985e9b4 100644 ---- a/src/main/java/org/bukkit/command/defaults/VersionCommand.java -+++ b/src/main/java/org/bukkit/command/defaults/VersionCommand.java -@@ -214,7 +214,7 @@ public class VersionCommand extends BukkitCommand { - String version = Bukkit.getVersion(); - // Paper start - if (version.startsWith("null")) { // running from ide? -- setVersionMessage(Component.text("Unknown version, custom build?", NamedTextColor.YELLOW)); -+ setVersionMessage(Component.text("* Unknown version, custom build?", NamedTextColor.RED)); // Purpur - return; - } - setVersionMessage(getVersionFetcher().getVersionMessage(version)); -@@ -255,9 +255,11 @@ public class VersionCommand extends BukkitCommand { - // Paper start - private void setVersionMessage(final @NotNull Component msg) { - lastCheck = System.currentTimeMillis(); -- final Component message = Component.textOfChildren( -- Component.text(Bukkit.getVersionMessage(), NamedTextColor.WHITE), -- Component.newline(), -+ // Purpur start -+ int distance = getVersionFetcher().distance(); -+ final Component message = Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), -+ ChatColor.parseMM("Current: %s%s*", distance == 0 ? "" : distance > 0 ? "" : "", Bukkit.getVersion()), -+ // Purpur end - msg - ); - this.versionMessage = Component.text() diff --git a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java index 455ff52d90565838fe7640c3f045b27082a6c2f1..45f5493eebfecf56b7c0ef4659c078dfc62c0612 100644 --- a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java diff --git a/patches/api/0004-Remove-Timings.patch b/patches/api/0005-Remove-Timings.patch similarity index 100% rename from patches/api/0004-Remove-Timings.patch rename to patches/api/0005-Remove-Timings.patch diff --git a/patches/api/0005-Bump-Dependencies.patch b/patches/api/0006-Bump-Dependencies.patch similarity index 100% rename from patches/api/0005-Bump-Dependencies.patch rename to patches/api/0006-Bump-Dependencies.patch diff --git a/patches/api/0006-KTP-Allow-unknown-event-thread-execution.patch b/patches/api/0007-KTP-Allow-unknown-event-thread-execution.patch similarity index 100% rename from patches/api/0006-KTP-Allow-unknown-event-thread-execution.patch rename to patches/api/0007-KTP-Allow-unknown-event-thread-execution.patch diff --git a/patches/api/0007-KeYi-Player-Skull-API.patch b/patches/api/0008-KeYi-Player-Skull-API.patch similarity index 100% rename from patches/api/0007-KeYi-Player-Skull-API.patch rename to patches/api/0008-KeYi-Player-Skull-API.patch diff --git a/patches/api/0008-Slice-Smooth-Teleports.patch b/patches/api/0009-Slice-Smooth-Teleports.patch similarity index 93% rename from patches/api/0008-Slice-Smooth-Teleports.patch rename to patches/api/0009-Slice-Smooth-Teleports.patch index 0f8d9512c..bdb42499c 100644 --- a/patches/api/0008-Slice-Smooth-Teleports.patch +++ b/patches/api/0009-Slice-Smooth-Teleports.patch @@ -7,7 +7,7 @@ Original license: MIT Original project: https://github.com/Cryptite/Slice diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 69ba1660dae4ac69ec4e92f94dd6f95e9f70427d..dbd5e9faaf92d718c20ceaf076f2afd867232116 100644 +index 89d124342522743206f8065a32f6e36b954b3b73..2727ca17317d083897c4c0c6575c57a40dd19cce 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -3588,6 +3588,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM diff --git a/patches/api/0009-Configurable-LibraryLoader-maven-repos.patch b/patches/api/0010-Configurable-LibraryLoader-maven-repos.patch similarity index 100% rename from patches/api/0009-Configurable-LibraryLoader-maven-repos.patch rename to patches/api/0010-Configurable-LibraryLoader-maven-repos.patch diff --git a/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch b/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch new file mode 100644 index 000000000..33630435a --- /dev/null +++ b/patches/server/0011-Fix-Pufferfish-and-Purpur-patches.patch @@ -0,0 +1,221 @@ +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/command/PaperPluginsCommand.java b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java +index e94224ed280247ee69dfdff8dc960f2b8729be33..5b9725a9a81c0850dc2809c150529e5f67a88b66 100644 +--- a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java ++++ b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java +@@ -241,6 +241,8 @@ public class PaperPluginsCommand extends BukkitCommand { + + if (!paperPlugins.isEmpty()) { + sender.sendMessage(PAPER_HEADER.append(Component.text(" (%s):".formatted(paperPlugins.size())))); // Purpur ++ } else { ++ sender.sendMessage(PAPER_HEADER.append(Component.text(" (0):"))); // Leaf - Purpur - Makes plugins command better if no plugins + } + + for (Component component : formatProviders(paperPlugins, sender)) { // Purpur +@@ -249,6 +251,8 @@ public class PaperPluginsCommand extends BukkitCommand { + + if (!spigotPlugins.isEmpty()) { + sender.sendMessage(BUKKIT_HEADER.append(Component.text(" (%s):".formatted(spigotPlugins.size())))); // Purpur ++ } else { ++ sender.sendMessage(BUKKIT_HEADER.append(Component.text(" (0):"))); // Leaf - Purpur - Makes plugins command better if no plugins + } + + for (Component component : formatProviders(spigotPlugins, sender)) { // Purpur +diff --git a/src/main/java/net/minecraft/server/gui/StatsComponent.java b/src/main/java/net/minecraft/server/gui/StatsComponent.java +index 096c89bd01cec2abd151bf6fffc4847d1bcd548f..cd0a8a6a1be75cab8bbb8ee3ac17bb732b9e7108 100644 +--- a/src/main/java/net/minecraft/server/gui/StatsComponent.java ++++ b/src/main/java/net/minecraft/server/gui/StatsComponent.java +@@ -45,7 +45,7 @@ public class StatsComponent extends JComponent { + this.msgs[1] = "Avg tick: " + + DECIMAL_FORMAT.format((double)this.server.getAverageTickTimeNanos() / (double)TimeUtil.NANOSECONDS_PER_MILLISECOND) + + " ms"; +- this.msgs[2] = "TPS from last 1m, 5m, 15m: " + String.join(", ", tpsAvg); ++ this.msgs[2] = "TPS from last 5s, 1m, 5m, 15m: " + String.join(", ", tpsAvg); // Purpur + // Paper end - Improve ServerGUI + this.values[this.vp++ & 0xFF] = (int)(l * 100L / Runtime.getRuntime().maxMemory()); + this.repaint(); +diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java +index 9eb2bc23a2e7dce3594d67ec97ba120824a80ab1..76715cda42ed80aa9bd76f08fbc8ed15c7a54af6 100644 +--- a/src/main/java/net/minecraft/server/level/ServerLevel.java ++++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +@@ -837,7 +837,7 @@ public class ServerLevel extends Level implements WorldGenLevel { + int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); + long j; + +- if (this.purpurConfig.playersSkipNight && this.sleepStatus.areEnoughSleeping(i) && this.sleepStatus.areEnoughDeepSleeping(i, this.players)) { ++ if (this.purpurConfig.playersSkipNight && this.sleepStatus.areEnoughSleeping(i) && this.sleepStatus.areEnoughDeepSleeping(i, this.players)) { // Purpur + // CraftBukkit start + j = this.levelData.getDayTime() + 24000L; + TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (j - j % 24000L) - this.getDayTime()); +diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java +index f5fa8e5534431d35be946aac56c4a90e03bcde31..fff761cedc774542e24fbd488cf75113921aeadd 100644 +--- a/src/main/java/net/minecraft/world/entity/Entity.java ++++ b/src/main/java/net/minecraft/world/entity/Entity.java +@@ -567,13 +567,29 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + } + + // Purpur start - copied from Mob ++ // Gale start - JettPack - optimize sun burn tick - cache eye blockpos ++ private BlockPos cached_eye_blockpos; ++ private int cached_position_hashcode; ++ // Gale end - JettPack - optimize sun burn tick - cache eye blockpos ++ + public boolean isSunBurnTick() { + if (this.level().isDay() && !this.level().isClientSide) { +- float f = this.getLightLevelDependentMagicValue(); +- BlockPos blockposition = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); ++ // Gale start - JettPack - optimize sun burn tick - optimizations and cache eye blockpos ++ int positionHashCode = this.position.hashCode(); ++ if (this.cached_position_hashcode != positionHashCode) { ++ this.cached_eye_blockpos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); ++ this.cached_position_hashcode = positionHashCode; ++ } ++ ++ float f = this.getLightLevelDependentMagicValue(cached_eye_blockpos); // Pass BlockPos to getBrightness ++ ++ // Check brightness first ++ if (f <= 0.5F) return false; ++ if (this.random.nextFloat() * 30.0F >= (f - 0.4F) * 2.0F) return false; ++ // Gale end - JettPack - optimize sun burn tick - optimizations and cache eye blockpos + boolean flag = this.isInWaterRainOrBubble() || this.isInPowderSnow || this.wasInPowderSnow; + +- if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && !flag && this.level().canSeeSky(blockposition)) { ++ if (!flag && this.level().canSeeSky(this.cached_eye_blockpos)) { // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos + return true; + } + } +diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java +index 61f7a9f761a04011b2fa4caa7fef424ccb88793d..2ae29f220f160c22fd08e37ad34dd6e1fed4e0ee 100644 +--- a/src/main/java/net/minecraft/world/entity/Mob.java ++++ b/src/main/java/net/minecraft/world/entity/Mob.java +@@ -704,7 +704,7 @@ public abstract class Mob extends LivingEntity implements Targeting { + @Override + public void aiStep() { + super.aiStep(); +- if (!this.level().isClientSide && this.canPickUpLoot() && this.isAlive() && !this.dead && (this.level().purpurConfig.entitiesPickUpLootBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { ++ if (!this.level().isClientSide && this.canPickUpLoot() && this.isAlive() && !this.dead && (this.level().purpurConfig.entitiesPickUpLootBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // Purpur + Vec3i baseblockposition = this.getPickupReach(); + List list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); + Iterator iterator = list.iterator(); +@@ -1742,11 +1742,6 @@ public abstract class Mob extends LivingEntity implements Targeting { + + } + +- // Gale start - JettPack - optimize sun burn tick - cache eye blockpos +- private BlockPos cached_eye_blockpos; +- private int cached_position_hashcode; +- // Gale end - JettPack - optimize sun burn tick - cache eye blockpos +- + public boolean isSunBurnTick() { + return super.isSunBurnTick(); + } +diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java +index 753587e4d9582605951461f2bea37aff3bf28fcd..c239c79cd4bd319f469e37546b1d2e6c9d595060 100644 +--- a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java ++++ b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java +@@ -22,6 +22,7 @@ public class TradeWithVillager extends Behavior { + private static final float SPEED_MODIFIER = 0.5F; + // Gale start - optimize villager data storage + private static final Item[] WHEAT_SINGLETON_ARRAY = {Items.WHEAT}; ++ private static final Item[] NETHER_WART_SINGLETON_ARRAY = {Items.NETHER_WART}; // Leaf - sync with Gale's Optimize-villager-data-storage.patch + private @NotNull Item @Nullable [] trades = null; + // Gale end - optimize villager data storage + +@@ -67,7 +68,8 @@ public class TradeWithVillager extends Behavior { + + // Purpur start + if (world.purpurConfig.villagerClericsFarmWarts && world.purpurConfig.villagerClericFarmersThrowWarts && entity.getVillagerData().getProfession() == VillagerProfession.CLERIC && entity.getInventory().countItem(Items.NETHER_WART) > Items.NETHER_WART.getMaxStackSize() / 2) { +- throwHalfStack(entity, ImmutableSet.of(Items.NETHER_WART), villager); ++ throwHalfStack(entity, NETHER_WART_SINGLETON_ARRAY, villager); // Leaf - sync with Gale's Optimize-villager-data-storage.patch ++ + } + // Purpur end + +diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +index 9419f230910d0338fc4ac6e2e7b749ee7d5ee362..2fe25397526c77c3b6b5e96d71d3681c6e26a54e 100644 +--- a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java ++++ b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +@@ -24,19 +24,15 @@ public class SecondaryPoiSensor extends Sensor { + + @Override + protected void doTick(ServerLevel world, Villager entity) { +- // Gale start - Lithium - skip secondary POI sensor if absent +- var secondaryPoi = entity.getVillagerData().getProfession().secondaryPoi(); +- if (secondaryPoi == null) { // Gale - optimize villager data storage +- entity.getBrain().eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); +- return; +- } +- // Gale end - Lithium - skip secondary POI sensor if absent + // Purpur start - make sure clerics don't wander to soul sand when the option is off + Brain brain = entity.getBrain(); +- if (!world.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC) { ++ // Gale start - Lithium - skip secondary POI sensor if absent ++ var secondaryPoi = entity.getVillagerData().getProfession().secondaryPoi(); ++ if (secondaryPoi == null || (!world.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { // Gale - optimize villager data storage + brain.eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); + return; + } ++ // Gale end - Lithium - skip secondary POI sensor if absent + // Purpur end + ResourceKey resourceKey = world.dimension(); + BlockPos blockPos = entity.blockPosition(); +diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java +index 5f876ed6523f808f37b9915e3ddbaed750c3b916..31b4108f2ba3e732168cf46d4331631ccf5fbe96 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java +@@ -72,7 +72,6 @@ public class Blaze extends Monster { + setDeltaMovement(mot.scale(0.9D)); + } + } +- // Purpur end + + @Override + public void initAttributes() { +@@ -83,6 +82,7 @@ public class Blaze extends Monster { + protected boolean isAlwaysExperienceDropper() { + return this.level().purpurConfig.blazeAlwaysDropExp; + } ++ // Purpur end + + @Override + protected void registerGoals() { +diff --git a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java +index 8f36f113e8eb3236ce53ad9cce320c3d6253d248..ebe79d9ad2934b53085c8a720fdfca0a6eda05ca 100644 +--- a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java ++++ b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java +@@ -31,7 +31,7 @@ public record VillagerProfession( + public static final VillagerProfession ARMORER = register("armorer", PoiTypes.ARMORER, SoundEvents.VILLAGER_WORK_ARMORER); + public static final VillagerProfession BUTCHER = register("butcher", PoiTypes.BUTCHER, SoundEvents.VILLAGER_WORK_BUTCHER); + public static final VillagerProfession CARTOGRAPHER = register("cartographer", PoiTypes.CARTOGRAPHER, SoundEvents.VILLAGER_WORK_CARTOGRAPHER); +- public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, ImmutableSet.of(Items.NETHER_WART), ImmutableSet.of(Blocks.SOUL_SAND), SoundEvents.VILLAGER_WORK_CLERIC); // Purpur ++ public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, new Item[] {Items.NETHER_WART}, Blocks.SOUL_SAND, SoundEvents.VILLAGER_WORK_CLERIC); // Purpur // Leaf - sync with Gale's Optimize-villager-data-storage.patch + public static final VillagerProfession FARMER = register( + "farmer", + PoiTypes.FARMER, +diff --git a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java +index 0d7f8ad6b93b58927eba40aff71af6e2b01107fc..12eca187883322210f12f612c355a25f3af6e272 100644 +--- a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java ++++ b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java +@@ -120,13 +120,13 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher { + + switch (distance) { + case -1: +- return Component.text("Error obtaining version information", NamedTextColor.YELLOW); ++ return Component.text("* Error obtaining version information", NamedTextColor.RED); // Purpur + case 0: +- return Component.text("You are running the latest version", NamedTextColor.GREEN); ++ return Component.text("* You are running the latest version", NamedTextColor.GREEN); // Purpur + case -2: +- return Component.text("Unknown version", NamedTextColor.YELLOW); ++ return Component.text("* Unknown version", NamedTextColor.YELLOW); // Purpur + default: +- return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW) ++ return Component.text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur + .append(Component.newline()) + .append(Component.text("Download the new version at: ") + .append(Component.text(this.downloadPage, NamedTextColor.GOLD) // Gale - branding changes - version fetcher diff --git a/patches/server/0011-Purpur-Configurable-server-mod-name.patch b/patches/server/0012-Purpur-Configurable-server-mod-name.patch similarity index 95% rename from patches/server/0011-Purpur-Configurable-server-mod-name.patch rename to patches/server/0012-Purpur-Configurable-server-mod-name.patch index 3ec55058b..3741cb9e0 100644 --- a/patches/server/0011-Purpur-Configurable-server-mod-name.patch +++ b/patches/server/0012-Purpur-Configurable-server-mod-name.patch @@ -7,7 +7,7 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b51f8d8173311a9322f3b63430c99c0e809bf34a..5db1dd834ec47c7a510e86f8eaffde03277a5442 100644 +index 60b76cad8bfdb47dd2cae7ae0e13e8548c09e08f..bd302daa6314ee231383011551baa4dc5d810859 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1855,7 +1855,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 1.18.x update by Mojang. By removing this check, it enable hackers to use some modules of hack clients. diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 1d0c724137c002801b3dbb239278f2a1c82c1d77..8895e7d35af8650503853b6fc7432f66e4f333db 100644 +index b0967027615a5f72e27cba4ed9d4c13af40c832a..59e9c3a8701a8151004a0e1d40eb7ae5ec3afb8f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2007,7 +2007,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl diff --git a/patches/server/0018-KTP-Allow-unknown-event-thread-execution.patch b/patches/server/0019-KTP-Allow-unknown-event-thread-execution.patch similarity index 100% rename from patches/server/0018-KTP-Allow-unknown-event-thread-execution.patch rename to patches/server/0019-KTP-Allow-unknown-event-thread-execution.patch diff --git a/patches/server/0019-KeYi-Player-Skull-API.patch b/patches/server/0020-KeYi-Player-Skull-API.patch similarity index 100% rename from patches/server/0019-KeYi-Player-Skull-API.patch rename to patches/server/0020-KeYi-Player-Skull-API.patch diff --git a/patches/server/0020-KeYi-Disable-arrow-despawn-counter-by-default.patch b/patches/server/0021-KeYi-Disable-arrow-despawn-counter-by-default.patch similarity index 100% rename from patches/server/0020-KeYi-Disable-arrow-despawn-counter-by-default.patch rename to patches/server/0021-KeYi-Disable-arrow-despawn-counter-by-default.patch diff --git a/patches/server/0021-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch b/patches/server/0022-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch similarity index 95% rename from patches/server/0021-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch rename to patches/server/0022-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch index 4de227e2a..4a83af113 100644 --- a/patches/server/0021-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch +++ b/patches/server/0022-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch @@ -7,7 +7,7 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index 84712ae2d9f6024426fe4700f5539a5a33c2fc46..56f9b0c9277aeff3b2d3d7e44f8af6d8d6d23941 100644 +index 6a94e28cda9319b3a965f07d758083b56cd4fcc5..00eb84726a6563ef1d7b29977566086df1bab090 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java @@ -350,7 +350,7 @@ public class ItemEntity extends Entity implements TraceableEntity { diff --git a/patches/server/0022-Carpet-Fixes-Optimized-getBiome-method.patch b/patches/server/0023-Carpet-Fixes-Optimized-getBiome-method.patch similarity index 100% rename from patches/server/0022-Carpet-Fixes-Optimized-getBiome-method.patch rename to patches/server/0023-Carpet-Fixes-Optimized-getBiome-method.patch diff --git a/patches/server/0023-Carpet-Fixes-Use-optimized-RecipeManager.patch b/patches/server/0024-Carpet-Fixes-Use-optimized-RecipeManager.patch similarity index 100% rename from patches/server/0023-Carpet-Fixes-Use-optimized-RecipeManager.patch rename to patches/server/0024-Carpet-Fixes-Use-optimized-RecipeManager.patch diff --git a/patches/server/0024-Rail-Optimization-optimized-PoweredRailBlock-logic.patch b/patches/server/0025-Rail-Optimization-optimized-PoweredRailBlock-logic.patch similarity index 100% rename from patches/server/0024-Rail-Optimization-optimized-PoweredRailBlock-logic.patch rename to patches/server/0025-Rail-Optimization-optimized-PoweredRailBlock-logic.patch diff --git a/patches/server/0025-Akarin-Save-Json-list-asynchronously.patch b/patches/server/0026-Akarin-Save-Json-list-asynchronously.patch similarity index 100% rename from patches/server/0025-Akarin-Save-Json-list-asynchronously.patch rename to patches/server/0026-Akarin-Save-Json-list-asynchronously.patch diff --git a/patches/server/0026-Slice-Smooth-Teleports.patch b/patches/server/0027-Slice-Smooth-Teleports.patch similarity index 100% rename from patches/server/0026-Slice-Smooth-Teleports.patch rename to patches/server/0027-Slice-Smooth-Teleports.patch diff --git a/patches/server/0027-Parchment-Make-FixLight-use-action-bar.patch b/patches/server/0028-Parchment-Make-FixLight-use-action-bar.patch similarity index 100% rename from patches/server/0027-Parchment-Make-FixLight-use-action-bar.patch rename to patches/server/0028-Parchment-Make-FixLight-use-action-bar.patch diff --git a/patches/server/0028-Leaves-Server-Utils.patch b/patches/server/0029-Leaves-Server-Utils.patch similarity index 88% rename from patches/server/0028-Leaves-Server-Utils.patch rename to patches/server/0029-Leaves-Server-Utils.patch index e616490da..e1776e666 100644 --- a/patches/server/0028-Leaves-Server-Utils.patch +++ b/patches/server/0029-Leaves-Server-Utils.patch @@ -7,7 +7,7 @@ Original license: GPLv3 Original project: https://github.com/LeavesMC/Leaves diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 6b7025b4cacdc2b14662d09f8da78bce04392d17..1952c66202f51bdbca52fab03710ca0d76e0312d 100644 +index fff761cedc774542e24fbd488cf75113921aeadd..bf3ef85baf05eb4bfb4521c59e789a7f1de113b9 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -425,6 +425,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @@ -18,7 +18,7 @@ index 6b7025b4cacdc2b14662d09f8da78bce04392d17..1952c66202f51bdbca52fab03710ca0d public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -2548,6 +2549,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2564,6 +2565,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -26,7 +26,7 @@ index 6b7025b4cacdc2b14662d09f8da78bce04392d17..1952c66202f51bdbca52fab03710ca0d return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2695,6 +2697,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2711,6 +2713,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -38,7 +38,7 @@ index 6b7025b4cacdc2b14662d09f8da78bce04392d17..1952c66202f51bdbca52fab03710ca0d } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); -@@ -5134,4 +5141,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -5150,4 +5157,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return false; } // Purpur end diff --git a/patches/server/0029-Leaves-Protocol-Core.patch b/patches/server/0030-Leaves-Protocol-Core.patch similarity index 99% rename from patches/server/0029-Leaves-Protocol-Core.patch rename to patches/server/0030-Leaves-Protocol-Core.patch index 77a480900..210df9a19 100644 --- a/patches/server/0029-Leaves-Protocol-Core.patch +++ b/patches/server/0030-Leaves-Protocol-Core.patch @@ -27,7 +27,7 @@ index af86f752c33a2990405fea058b7c41c437ba9d46..bada9fae1e7178162429e1f5a1608b9c } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 49105918ec09e9c9db49035fc03a6502bb4a951f..eb8e2c9401c79b106f206bd4ae76aca5ae9ae4bb 100644 +index df700d76b289ab3c35fa66e9f765089204a60360..c4ccba8e24c0511d81d0f138977c2621e34b888e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1721,6 +1721,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop -Date: Sun, 9 Jul 2023 14:50:57 +0800 -Subject: [PATCH] Sync with Gale's Optimize-villager-data-storage.patch - - -diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java -index 753587e4d9582605951461f2bea37aff3bf28fcd..77fb2b0c4b9defaa16a2f89b194e8f5084ade12c 100644 ---- a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java -+++ b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java -@@ -22,6 +22,7 @@ public class TradeWithVillager extends Behavior { - private static final float SPEED_MODIFIER = 0.5F; - // Gale start - optimize villager data storage - private static final Item[] WHEAT_SINGLETON_ARRAY = {Items.WHEAT}; -+ private static final Item[] NETHER_WART_SINGLETON_ARRAY = {Items.NETHER_WART}; // Leaf - sync with Gale's Optimize-villager-data-storage.patch - private @NotNull Item @Nullable [] trades = null; - // Gale end - optimize villager data storage - -@@ -67,7 +68,7 @@ public class TradeWithVillager extends Behavior { - - // Purpur start - if (world.purpurConfig.villagerClericsFarmWarts && world.purpurConfig.villagerClericFarmersThrowWarts && entity.getVillagerData().getProfession() == VillagerProfession.CLERIC && entity.getInventory().countItem(Items.NETHER_WART) > Items.NETHER_WART.getMaxStackSize() / 2) { -- throwHalfStack(entity, ImmutableSet.of(Items.NETHER_WART), villager); -+ throwHalfStack(entity, NETHER_WART_SINGLETON_ARRAY, villager); // Leaf - sync with Gale's Optimize-villager-data-storage.patch - } - // Purpur end - -diff --git a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java -index 8f36f113e8eb3236ce53ad9cce320c3d6253d248..ebe79d9ad2934b53085c8a720fdfca0a6eda05ca 100644 ---- a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java -+++ b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java -@@ -31,7 +31,7 @@ public record VillagerProfession( - public static final VillagerProfession ARMORER = register("armorer", PoiTypes.ARMORER, SoundEvents.VILLAGER_WORK_ARMORER); - public static final VillagerProfession BUTCHER = register("butcher", PoiTypes.BUTCHER, SoundEvents.VILLAGER_WORK_BUTCHER); - public static final VillagerProfession CARTOGRAPHER = register("cartographer", PoiTypes.CARTOGRAPHER, SoundEvents.VILLAGER_WORK_CARTOGRAPHER); -- public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, ImmutableSet.of(Items.NETHER_WART), ImmutableSet.of(Blocks.SOUL_SAND), SoundEvents.VILLAGER_WORK_CLERIC); // Purpur -+ public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, new Item[] {Items.NETHER_WART}, Blocks.SOUL_SAND, SoundEvents.VILLAGER_WORK_CLERIC); // Purpur // Leaf - sync with Gale's Optimize-villager-data-storage.patch - public static final VillagerProfession FARMER = register( - "farmer", - PoiTypes.FARMER, diff --git a/patches/server/0039-Petal-Async-Pathfinding.patch b/patches/server/0038-Petal-Async-Pathfinding.patch similarity index 99% rename from patches/server/0039-Petal-Async-Pathfinding.patch rename to patches/server/0038-Petal-Async-Pathfinding.patch index c7b9ec214..d2f469021 100644 --- a/patches/server/0039-Petal-Async-Pathfinding.patch +++ b/patches/server/0038-Petal-Async-Pathfinding.patch @@ -15,7 +15,7 @@ This patch was ported downstream from the Petal fork. Makes most pathfinding-related work happen asynchronously diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index ab442ad33124c75c261752d14d0ee209a673209e..4954cdcb642670d876dceb7b7bb3651c5d7a2c9e 100644 +index 2ae29f220f160c22fd08e37ad34dd6e1fed4e0ee..7b8e7119c00639fd2baa83b469a598797235dc0a 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -295,6 +295,7 @@ public abstract class Mob extends LivingEntity implements Targeting { diff --git a/patches/server/0038-Sync-with-Gale-s-Optimize-sun-burn-tick.patch.patch b/patches/server/0038-Sync-with-Gale-s-Optimize-sun-burn-tick.patch.patch deleted file mode 100644 index f6166548e..000000000 --- a/patches/server/0038-Sync-with-Gale-s-Optimize-sun-burn-tick.patch.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> -Date: Sat, 3 Feb 2024 04:25:45 -0500 -Subject: [PATCH] Sync with Gale's Optimize-sun-burn-tick.patch - - -diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 21bb8ecc55c49a3962ad44c71145feadb49fe9ea..bf3ef85baf05eb4bfb4521c59e789a7f1de113b9 100644 ---- a/src/main/java/net/minecraft/world/entity/Entity.java -+++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -568,13 +568,29 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S - } - - // Purpur start - copied from Mob -+ // Gale start - JettPack - optimize sun burn tick - cache eye blockpos -+ private BlockPos cached_eye_blockpos; -+ private int cached_position_hashcode; -+ // Gale end - JettPack - optimize sun burn tick - cache eye blockpos -+ - public boolean isSunBurnTick() { - if (this.level().isDay() && !this.level().isClientSide) { -- float f = this.getLightLevelDependentMagicValue(); -- BlockPos blockposition = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); -+ // Gale start - JettPack - optimize sun burn tick - optimizations and cache eye blockpos -+ int positionHashCode = this.position.hashCode(); -+ if (this.cached_position_hashcode != positionHashCode) { -+ this.cached_eye_blockpos = BlockPos.containing(this.getX(), this.getEyeY(), this.getZ()); -+ this.cached_position_hashcode = positionHashCode; -+ } -+ -+ float f = this.getLightLevelDependentMagicValue(cached_eye_blockpos); // Pass BlockPos to getBrightness -+ -+ // Check brightness first -+ if (f <= 0.5F) return false; -+ if (this.random.nextFloat() * 30.0F >= (f - 0.4F) * 2.0F) return false; -+ // Gale end - JettPack - optimize sun burn tick - optimizations and cache eye blockpos - boolean flag = this.isInWaterRainOrBubble() || this.isInPowderSnow || this.wasInPowderSnow; - -- if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && !flag && this.level().canSeeSky(blockposition)) { -+ if (!flag && this.level().canSeeSky(this.cached_eye_blockpos)) { // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos - return true; - } - } -diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 61f7a9f761a04011b2fa4caa7fef424ccb88793d..4145a992d34e655c98d8c5a30153f507360b798c 100644 ---- a/src/main/java/net/minecraft/world/entity/Mob.java -+++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1742,11 +1742,6 @@ public abstract class Mob extends LivingEntity implements Targeting { - - } - -- // Gale start - JettPack - optimize sun burn tick - cache eye blockpos -- private BlockPos cached_eye_blockpos; -- private int cached_position_hashcode; -- // Gale end - JettPack - optimize sun burn tick - cache eye blockpos -- - public boolean isSunBurnTick() { - return super.isSunBurnTick(); - } diff --git a/patches/server/0040-Petal-Multithreaded-Tracker.patch b/patches/server/0039-Petal-Multithreaded-Tracker.patch similarity index 98% rename from patches/server/0040-Petal-Multithreaded-Tracker.patch rename to patches/server/0039-Petal-Multithreaded-Tracker.patch index 7a6360218..842698fdf 100644 --- a/patches/server/0040-Petal-Multithreaded-Tracker.patch +++ b/patches/server/0039-Petal-Multithreaded-Tracker.patch @@ -204,7 +204,7 @@ index 4f91107f9ae42f96c060c310596db9aa869a8dbc..faad96f04af2e368f0276ade417dd1ba public boolean visible = true; diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 515e3f444e317de1d82421ad414c1ac10d4668ab..60e8bfc89cfb92e2f7d4860b11c16b3bc5e2f095 100644 +index 515e3f444e317de1d82421ad414c1ac10d4668ab..118cee9b3e8b62687fbddee0750635b4b38ee351 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -280,7 +280,11 @@ public class ServerEntity { @@ -246,7 +246,7 @@ index 515e3f444e317de1d82421ad414c1ac10d4668ab..60e8bfc89cfb92e2f7d4860b11c16b3b if (!set.isEmpty()) { + // Leaf start - petal - sync -+ final var copy = Lists.newArrayList(set); ++ final Set copy = new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(set); + ((ServerLevel) this.entity.level()).chunkSource.chunkMap.runOnTrackerMainThread(() -> { // CraftBukkit start - Send scaled max health if (this.entity instanceof ServerPlayer) { @@ -263,7 +263,7 @@ index 515e3f444e317de1d82421ad414c1ac10d4668ab..60e8bfc89cfb92e2f7d4860b11c16b3b set.clear(); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index a04ea23c295b493984eb841253fcb0eb4ad26342..667e2f0ce65c457fc656983e305be7e5d91718f1 100644 +index fc8bdb492c95cb355865cbece546ba0a1627e277..ef0d7011bf3dd77fb8c106575d5787fc260da436 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -2644,7 +2644,7 @@ public class ServerLevel extends Level implements WorldGenLevel { diff --git a/patches/server/0041-Petal-reduce-work-done-by-game-event-system.patch b/patches/server/0040-Petal-reduce-work-done-by-game-event-system.patch similarity index 100% rename from patches/server/0041-Petal-reduce-work-done-by-game-event-system.patch rename to patches/server/0040-Petal-reduce-work-done-by-game-event-system.patch diff --git a/patches/server/0043-Optimize-Minecart-collisions.patch b/patches/server/0041-Optimize-Minecart-collisions.patch similarity index 85% rename from patches/server/0043-Optimize-Minecart-collisions.patch rename to patches/server/0041-Optimize-Minecart-collisions.patch index a4e3376ec..9eb58537f 100644 --- a/patches/server/0043-Optimize-Minecart-collisions.patch +++ b/patches/server/0041-Optimize-Minecart-collisions.patch @@ -8,6 +8,24 @@ Co-authored-by: MrHua269 Skip tick collisions to to prevent lag causing by massive stacked Minecart Useful for anarchy server. +diff --git a/src/main/java/net/minecraft/world/entity/EntitySelector.java b/src/main/java/net/minecraft/world/entity/EntitySelector.java +index f1b9e83206cc67e6ef29ebe088351b0aaa5eb349..e0a51e269aa076def275710174d3654d07e1a7aa 100644 +--- a/src/main/java/net/minecraft/world/entity/EntitySelector.java ++++ b/src/main/java/net/minecraft/world/entity/EntitySelector.java +@@ -63,6 +63,13 @@ public final class EntitySelector { + } + public static Predicate pushable(Entity entity, boolean ignoreClimbing) { + // Paper end - Climbing should not bypass cramming gamerule ++ ++ // Leaf start - Optimize Minecart collisions ++ if (entity instanceof net.minecraft.world.entity.vehicle.AbstractMinecart) { ++ return x -> true; ++ } ++ // Leaf end - Optimize Minecart collisions ++ + PlayerTeam scoreboardteam = entity.getTeam(); + Team.CollisionRule scoreboardteambase_enumteampush = scoreboardteam == null ? Team.CollisionRule.ALWAYS : scoreboardteam.getCollisionRule(); + diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java index eb5bd5cfd131042e366872bf599a315d83dc732b..9bf74e76a2b2fef92bef37fbaee2171b7f7a357d 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java @@ -67,7 +85,7 @@ index eb5bd5cfd131042e366872bf599a315d83dc732b..9bf74e76a2b2fef92bef37fbaee2171b this.updateInWaterStateAndDoFluidPushing(); if (this.isInLava()) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index ff05efe0b78defe3d25905b6a2984bdb646fcff3..820f5dc02f89a54fab00942a3eaa72f006b3bd89 100644 +index 138c14ced11354e67b84956bdd02f90c1bed409e..53dd6310617823328210511580d0fb744c8dca2b 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -1572,12 +1572,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { diff --git a/patches/server/0044-Reduce-canSee-work.patch b/patches/server/0042-Reduce-canSee-work.patch similarity index 100% rename from patches/server/0044-Reduce-canSee-work.patch rename to patches/server/0042-Reduce-canSee-work.patch diff --git a/patches/server/0045-Faster-Natural-Spawning.patch b/patches/server/0043-Faster-Natural-Spawning.patch similarity index 100% rename from patches/server/0045-Faster-Natural-Spawning.patch rename to patches/server/0043-Faster-Natural-Spawning.patch diff --git a/patches/server/0046-Faster-Random-for-xaeroMapServerID-generation.patch b/patches/server/0044-Faster-Random-for-xaeroMapServerID-generation.patch similarity index 100% rename from patches/server/0046-Faster-Random-for-xaeroMapServerID-generation.patch rename to patches/server/0044-Faster-Random-for-xaeroMapServerID-generation.patch diff --git a/patches/server/0047-Fix-casting-in-Purpur-world-config.patch b/patches/server/0045-Fix-casting-in-Purpur-world-config.patch similarity index 97% rename from patches/server/0047-Fix-casting-in-Purpur-world-config.patch rename to patches/server/0045-Fix-casting-in-Purpur-world-config.patch index bf1eed7e2..c4ba38d31 100644 --- a/patches/server/0047-Fix-casting-in-Purpur-world-config.patch +++ b/patches/server/0045-Fix-casting-in-Purpur-world-config.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix casting in Purpur world config diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7459ca7b724634a191498bf05e345c7e97fbe901..cd73f0e40e5010e3069330ae66120dace63cde56 100644 +index d15d8984cd53bec826fa2507b91acff10d9711cf..bf92f6c9d1ecff3e56e5bb904c7af9e793823e93 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -678,7 +678,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0048-Fix-sprint-glitch.patch b/patches/server/0046-Fix-sprint-glitch.patch similarity index 90% rename from patches/server/0048-Fix-sprint-glitch.patch rename to patches/server/0046-Fix-sprint-glitch.patch index 1d3998950..0a5ebe28d 100644 --- a/patches/server/0048-Fix-sprint-glitch.patch +++ b/patches/server/0046-Fix-sprint-glitch.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix sprint glitch diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index dccb8934428b0c29e35f2bf9968fd32443dc11eb..becdbc814361a7823657759087b2ffcbd778b0e4 100644 +index a37244bdd21c27d15e0ce6731c28f8797fdddf76..3c16a7d29454b23efeb36eb7fecae742249d64ac 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1439,7 +1439,8 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0049-Fix-keepalive-kicked-name.patch b/patches/server/0047-Fix-keepalive-kicked-name.patch similarity index 100% rename from patches/server/0049-Fix-keepalive-kicked-name.patch rename to patches/server/0047-Fix-keepalive-kicked-name.patch diff --git a/patches/server/0050-Configurable-movement-speed-of-more-entities.patch b/patches/server/0048-Configurable-movement-speed-of-more-entities.patch similarity index 100% rename from patches/server/0050-Configurable-movement-speed-of-more-entities.patch rename to patches/server/0048-Configurable-movement-speed-of-more-entities.patch diff --git a/patches/server/0051-Faster-sequencing-of-futures-for-chunk-structure-gen.patch b/patches/server/0049-Faster-sequencing-of-futures-for-chunk-structure-gen.patch similarity index 100% rename from patches/server/0051-Faster-sequencing-of-futures-for-chunk-structure-gen.patch rename to patches/server/0049-Faster-sequencing-of-futures-for-chunk-structure-gen.patch diff --git a/patches/server/0052-Reduce-items-finding-hopper-nearby-check.patch b/patches/server/0050-Reduce-items-finding-hopper-nearby-check.patch similarity index 100% rename from patches/server/0052-Reduce-items-finding-hopper-nearby-check.patch rename to patches/server/0050-Reduce-items-finding-hopper-nearby-check.patch diff --git a/patches/server/0053-LinearPurpur-Add-Linear-region-format.patch b/patches/server/0051-LinearPurpur-Add-Linear-region-format.patch similarity index 99% rename from patches/server/0053-LinearPurpur-Add-Linear-region-format.patch rename to patches/server/0051-LinearPurpur-Add-Linear-region-format.patch index 6fca87036..a33b8f8ef 100644 --- a/patches/server/0053-LinearPurpur-Add-Linear-region-format.patch +++ b/patches/server/0051-LinearPurpur-Add-Linear-region-format.patch @@ -140,7 +140,7 @@ index c4ccba8e24c0511d81d0f138977c2621e34b888e..9ce81b482aacc71f2b610cc4926a5867 return flag3; diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 80168d2a040c02504af3a4f3f68802afb327046d..fdd72e567a1a59153da2adb35a9605b828698535 100644 +index 29ea09f27f4b0a7f1ab6075e68c7379898ff2339..a542b7fa3125811a231207df763340fa665640fe 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -246,7 +246,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -187,7 +187,7 @@ index 80168d2a040c02504af3a4f3f68802afb327046d..fdd72e567a1a59153da2adb35a9605b8 regionFile.setStatus(chunkPos.x, chunkPos.z, ChunkSerializer.getStatus(compound)); } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 667e2f0ce65c457fc656983e305be7e5d91718f1..a5e3b6bee4484f598d7c762dc54bb92c7d0cb2d7 100644 +index ef0d7011bf3dd77fb8c106575d5787fc260da436..8aae03160bff67157443f09b87cb34e1d791497f 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -419,8 +419,8 @@ public class ServerLevel extends Level implements WorldGenLevel { diff --git a/patches/server/0054-LinearPurpur-Just-remove-all-locks-on-region-files.patch b/patches/server/0052-LinearPurpur-Just-remove-all-locks-on-region-files.patch similarity index 100% rename from patches/server/0054-LinearPurpur-Just-remove-all-locks-on-region-files.patch rename to patches/server/0052-LinearPurpur-Just-remove-all-locks-on-region-files.patch diff --git a/patches/server/0055-Plazma-Add-missing-purpur-configuration-options.patch b/patches/server/0053-Plazma-Add-missing-purpur-configuration-options.patch similarity index 100% rename from patches/server/0055-Plazma-Add-missing-purpur-configuration-options.patch rename to patches/server/0053-Plazma-Add-missing-purpur-configuration-options.patch diff --git a/patches/server/0056-Plazma-Add-some-missing-Pufferfish-configurations.patch b/patches/server/0054-Plazma-Add-some-missing-Pufferfish-configurations.patch similarity index 100% rename from patches/server/0056-Plazma-Add-some-missing-Pufferfish-configurations.patch rename to patches/server/0054-Plazma-Add-some-missing-Pufferfish-configurations.patch diff --git a/patches/server/0057-Skip-event-if-no-listeners.patch b/patches/server/0055-Skip-event-if-no-listeners.patch similarity index 100% rename from patches/server/0057-Skip-event-if-no-listeners.patch rename to patches/server/0055-Skip-event-if-no-listeners.patch diff --git a/patches/server/0058-PaperPR-Rewrite-framed-map-tracker-ticking.patch b/patches/server/0056-PaperPR-Rewrite-framed-map-tracker-ticking.patch similarity index 99% rename from patches/server/0058-PaperPR-Rewrite-framed-map-tracker-ticking.patch rename to patches/server/0056-PaperPR-Rewrite-framed-map-tracker-ticking.patch index a24251815..cc6d15cec 100644 --- a/patches/server/0058-PaperPR-Rewrite-framed-map-tracker-ticking.patch +++ b/patches/server/0056-PaperPR-Rewrite-framed-map-tracker-ticking.patch @@ -16,7 +16,7 @@ now is just updating dirty map/decoration data. When no bukkit renderers are added to the map, we also re-use the same packet for all players who are tracking it which avoids a lot of work. diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 60e8bfc89cfb92e2f7d4860b11c16b3bc5e2f095..b7c7e2727382d06c1ed83bac6e721e48f3d855d5 100644 +index 118cee9b3e8b62687fbddee0750635b4b38ee351..3c3f1a64a18ede61a270ed84fb79a316d4f26b99 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -111,29 +111,42 @@ public class ServerEntity { diff --git a/patches/server/0059-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch b/patches/server/0057-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch similarity index 100% rename from patches/server/0059-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch rename to patches/server/0057-SparklyPaper-Skip-MapItem-update-if-the-map-does-not.patch diff --git a/patches/server/0058-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch b/patches/server/0058-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch new file mode 100644 index 000000000..907fabaab --- /dev/null +++ b/patches/server/0058-SparklyPaper-Skip-distanceToSqr-call-in-ServerEntity.patch @@ -0,0 +1,31 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MrPowerGamerBR +Date: Wed, 15 Nov 2023 23:39:36 -0300 +Subject: [PATCH] SparklyPaper: Skip "distanceToSqr" call in + "ServerEntity#sendChanges" if the delta movement hasn't changed + +Original project: https://github.com/SparklyPower/SparklyPaper + +The "distanceToSqr" call is a bit expensive, so avoiding it is pretty nice, around ~15% calls are skipped with this check + +We could also check if the x,y,z coordinates are equal, but for now, let's just keep the identity check, which also helps us since Minecraft's code does reuse the original delta movement Vec3 object + +diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java +index 3c3f1a64a18ede61a270ed84fb79a316d4f26b99..23226bc990044e33471de6bc9610c2c5ee707f3e 100644 +--- a/src/main/java/net/minecraft/server/level/ServerEntity.java ++++ b/src/main/java/net/minecraft/server/level/ServerEntity.java +@@ -223,12 +223,14 @@ public class ServerEntity { + + if ((this.trackDelta || this.entity.hasImpulse || this.entity instanceof LivingEntity && ((LivingEntity) this.entity).isFallFlying()) && this.tickCount > 0) { + Vec3 vec3d1 = this.entity.getDeltaMovement(); ++ if (vec3d1 != this.ap) { // SparklyPaper start - skip distanceToSqr call in ServerEntity#sendChanges if the delta movement hasn't changed + double d0 = vec3d1.distanceToSqr(this.ap); + + if (d0 > 1.0E-7D || d0 > 0.0D && vec3d1.lengthSqr() == 0.0D) { + this.ap = vec3d1; + this.broadcast.accept(new ClientboundSetEntityMotionPacket(this.entity.getId(), this.ap)); + } ++ } // SparklyPaper end + } + + if (packet1 != null) { diff --git a/patches/server/0059-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch b/patches/server/0059-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch new file mode 100644 index 000000000..4f450d44e --- /dev/null +++ b/patches/server/0059-SparklyPaper-Skip-EntityScheduler-s-executeTick-chec.patch @@ -0,0 +1,138 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MrPowerGamerBR +Date: Sun, 19 Nov 2023 12:35:16 -0300 +Subject: [PATCH] SparklyPaper: Skip EntityScheduler's executeTick checks if + there isn't any tasks to be run + +Original project: https://github.com/SparklyPower/SparklyPaper + +On each tick, Paper runs EntityScheduler's executeTick of each entity. This is a bit expensive, due to ArrayDeque's size() call because it ain't a simple "get the current queue size" function, due to the thread checks, and because it needs to iterate all entities in all worlds. + +To avoid the hefty ArrayDeque's size() call, we check if we *really* need to execute the executeTick, by adding all entities with scheduled tasks to a global set. + +Most entities won't have any scheduled tasks, so this is a nice performance bonus. These optimizations, however, wouldn't work in a Folia environment, but because in SparklyPaper executeTick is always executed on the main thread, it ain't an issue for us (yay). + +diff --git a/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java b/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java +index 62484ebf4550b05182f693a3180bbac5d5fd906d..67800e426445060a8343e27a7452b8d7ed27ac5f 100644 +--- a/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java ++++ b/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java +@@ -36,6 +36,7 @@ public final class EntityScheduler { + * The Entity. Note that it is the CraftEntity, since only that class properly tracks world transfers. + */ + public final CraftEntity entity; ++ public final net.minecraft.server.MinecraftServer server; // SparklyPaper - skip EntityScheduler's executeTick checks if there isn't any tasks to be run + + private static final record ScheduledTask(Consumer run, Consumer retired) {} + +@@ -46,7 +47,8 @@ public final class EntityScheduler { + + private final ArrayDeque currentlyExecuting = new ArrayDeque<>(); + +- public EntityScheduler(final CraftEntity entity) { ++ public EntityScheduler(final net.minecraft.server.MinecraftServer server, final CraftEntity entity) { // SparklyPaper - skip EntityScheduler's executeTick checks if there isn't any tasks to be run ++ this.server = Validate.notNull(server); + this.entity = Validate.notNull(entity); + } + +@@ -61,14 +63,16 @@ public final class EntityScheduler { + * @throws IllegalStateException If the scheduler is already retired. + */ + public void retire() { ++ final Entity thisEntity = this.entity.getHandleRaw(); // SparklyPaper - skip EntityScheduler's executeTick checks if there isn't any tasks to be run + synchronized (this.stateLock) { + if (this.tickCount == RETIRED_TICK_COUNT) { + throw new IllegalStateException("Already retired"); + } + this.tickCount = RETIRED_TICK_COUNT; ++ this.server.entitiesWithScheduledTasks.remove(thisEntity); // SparklyPaper - skip EntityScheduler's executeTick checks if there isn't any tasks to be run + } + +- final Entity thisEntity = this.entity.getHandleRaw(); ++ // final Entity thisEntity = this.entity.getHandleRaw(); // SparklyPaper - skip EntityScheduler's executeTick checks if there isn't any tasks to be run (moved up) + + // correctly handle and order retiring while running executeTick + for (int i = 0, len = this.currentlyExecuting.size(); i < len; ++i) { +@@ -124,6 +128,7 @@ public final class EntityScheduler { + if (this.tickCount == RETIRED_TICK_COUNT) { + return false; + } ++ this.server.entitiesWithScheduledTasks.add(this.entity.getHandleRaw()); // SparklyPaper - skip EntityScheduler's executeTick checks if there isn't any tasks to be run + this.oneTimeDelayed.computeIfAbsent(this.tickCount + Math.max(1L, delay), (final long keyInMap) -> { + return new ArrayList<>(); + }).add(task); +@@ -143,6 +148,13 @@ public final class EntityScheduler { + TickThread.ensureTickThread(thisEntity, "May not tick entity scheduler asynchronously"); + final List toRun; + synchronized (this.stateLock) { ++ // SparklyPaper start - skip EntityScheduler's executeTick checks if there isn't any tasks to be run ++ // Do we *really* have scheduled tasks tho? ++ if (this.currentlyExecuting.isEmpty() && this.oneTimeDelayed.isEmpty()) { // Check if we have any pending tasks and, if not, skip! ++ this.server.entitiesWithScheduledTasks.remove(thisEntity); // We don't! Bye bye!! ++ return; ++ } ++ // SparklyPaper end + if (this.tickCount == RETIRED_TICK_COUNT) { + throw new IllegalStateException("Ticking retired scheduler"); + } +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index 9ce81b482aacc71f2b610cc4926a5867ec48944e..9eda5366d9a208cedf2460cc87746f6ced538a58 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -300,6 +300,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop entitiesWithScheduledTasks = java.util.concurrent.ConcurrentHashMap.newKeySet(); // SparklyPaper - skip EntityScheduler's executeTick checks if there isn't any tasks to be run (concurrent because plugins may schedule tasks async) ++ + public static S spin(Function serverFactory) { + AtomicReference atomicreference = new AtomicReference(); + Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system +@@ -1638,6 +1640,18 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { + for (final Entity entity : level.getEntityLookup().getAllCopy()) { // Paper - rewrite chunk system + if (entity.isRemoved()) { +@@ -1649,6 +1663,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop playersNearby diff --git a/patches/server/0082-Matter-Secure-Seed.patch b/patches/server/0082-Matter-Secure-Seed.patch index 92cc5c898..9fb84a60d 100644 --- a/patches/server/0082-Matter-Secure-Seed.patch +++ b/patches/server/0082-Matter-Secure-Seed.patch @@ -47,10 +47,10 @@ index ee22ca05dccba4914d32125586299c1b7433a532..ad3bf1726a9c3b5fb8233bce799b5d48 return GsonHelper.parse(!s1.isEmpty() ? s1 : "{}"); }, new JsonObject()), (String) this.get("level-type", (s1) -> { diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index caef142261734aab264d1da420ff5e6d7117ea1c..e721f40495824dff2ba62c81156b2a8984d2904a 100644 +index 5d8f8e52668521fc151c7a5fe5c9c5367790003c..f1718d57dab1e81c906874f51986868d897f87f1 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -47,6 +47,10 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemp +@@ -46,6 +46,10 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemp import net.minecraft.world.level.storage.DimensionDataStorage; import net.minecraft.world.level.storage.LevelStorageSource; @@ -61,7 +61,7 @@ index caef142261734aab264d1da420ff5e6d7117ea1c..e721f40495824dff2ba62c81156b2a89 public class ServerChunkCache extends ChunkSource { public static final org.slf4j.Logger LOGGER = com.mojang.logging.LogUtils.getLogger(); // Paper -@@ -731,6 +735,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -730,6 +734,7 @@ public class ServerChunkCache extends ChunkSource { } public ChunkGenerator getGenerator() { @@ -70,7 +70,7 @@ index caef142261734aab264d1da420ff5e6d7117ea1c..e721f40495824dff2ba62c81156b2a89 } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index a5e3b6bee4484f598d7c762dc54bb92c7d0cb2d7..8f8ca4f69c442e30f30838c49917b7b7c81a9c0c 100644 +index 8aae03160bff67157443f09b87cb34e1d791497f..479920a5be9be14d82d4f1cde6ac70c24dfb0df1 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -177,6 +177,10 @@ import org.bukkit.event.world.GenericGameEvent; diff --git a/patches/server/0084-Ignore-terminal-provider-warning.patch b/patches/server/0084-Ignore-terminal-provider-warning.patch new file mode 100644 index 000000000..55535aceb --- /dev/null +++ b/patches/server/0084-Ignore-terminal-provider-warning.patch @@ -0,0 +1,20 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> +Date: Thu, 2 May 2024 20:21:29 -0400 +Subject: [PATCH] Ignore terminal provider warning + + +diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java +index a3ef402251b526384b897df82965e769a93ff00b..d3030361285359980fd632ae5c485535f96e97ac 100644 +--- a/src/main/java/org/bukkit/craftbukkit/Main.java ++++ b/src/main/java/org/bukkit/craftbukkit/Main.java +@@ -352,6 +352,9 @@ public class Main { + + System.setProperty("library.jansi.version", "Paper"); // Paper - set meaningless jansi version to prevent git builds from crashing on Windows + printlnStartupInfoToSystemOut("Loading libraries, please wait..."); // Gale - include time in startup logs ++ ++ System.setProperty("org.jline.terminal.disableDeprecatedProviderWarning", "true"); // Leaf - Ignore terminal provider warning ++ + net.minecraft.server.Main.main(options); + } catch (Throwable t) { + t.printStackTrace(); diff --git a/patches/server/0085-Fix-console-freeze-above-JAVA-22.patch b/patches/server/0085-Fix-console-freeze-above-JAVA-22.patch new file mode 100644 index 000000000..11cf4788f --- /dev/null +++ b/patches/server/0085-Fix-console-freeze-above-JAVA-22.patch @@ -0,0 +1,20 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> +Date: Sat, 4 May 2024 02:46:17 -0400 +Subject: [PATCH] Fix console freeze above JAVA 22 + +Revert to old console provider, Fix https://github.com/PaperMC/Paper/issues/10405 +Solution refers to https://inside.java/2023/07/31/quality-heads-up + +diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java +index d3030361285359980fd632ae5c485535f96e97ac..68048a77b54212dd47fdfe2ce6c4caef5b82d576 100644 +--- a/src/main/java/org/bukkit/craftbukkit/Main.java ++++ b/src/main/java/org/bukkit/craftbukkit/Main.java +@@ -354,6 +354,7 @@ public class Main { + printlnStartupInfoToSystemOut("Loading libraries, please wait..."); // Gale - include time in startup logs + + System.setProperty("org.jline.terminal.disableDeprecatedProviderWarning", "true"); // Leaf - Ignore terminal provider warning ++ if (org.galemc.gale.virtualthread.VirtualThreadService.getJavaMajorVersion() >= 22) System.setProperty("jdk.console", "java.base"); // Leaf - Fix console freeze above JAVA 22 + + net.minecraft.server.Main.main(options); + } catch (Throwable t) { diff --git a/patches/server/0086-Faster-Random-Generator.patch b/patches/server/0086-Faster-Random-Generator.patch new file mode 100644 index 000000000..3e7e7d976 --- /dev/null +++ b/patches/server/0086-Faster-Random-Generator.patch @@ -0,0 +1,173 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: HaHaWTH +Date: Fri, 3 May 2024 01:12:58 +0800 +Subject: [PATCH] Faster Random Generator + + +diff --git a/src/main/java/net/minecraft/util/RandomSource.java b/src/main/java/net/minecraft/util/RandomSource.java +index 7762c8186035fdf60e11d9f1844516b61f442206..c2f0b5933c61168cbde507f04674e95b78e2d7f3 100644 +--- a/src/main/java/net/minecraft/util/RandomSource.java ++++ b/src/main/java/net/minecraft/util/RandomSource.java +@@ -6,6 +6,7 @@ import net.minecraft.world.level.levelgen.PositionalRandomFactory; + import net.minecraft.world.level.levelgen.RandomSupport; + import net.minecraft.world.level.levelgen.SingleThreadedRandomSource; + import net.minecraft.world.level.levelgen.ThreadSafeLegacyRandomSource; ++import org.dreeam.leaf.util.math.random.TheFasterRandom; + + public interface RandomSource { + @Deprecated +@@ -23,16 +24,16 @@ public interface RandomSource { + + @Deprecated + static RandomSource createThreadSafe() { +- return new ThreadSafeLegacyRandomSource(RandomSupport.generateUniqueSeed()); +- } ++ return org.dreeam.leaf.config.modules.opt.FastRNG.enabled ? new TheFasterRandom(RandomSupport.generateFasterSeed()) : new ThreadSafeLegacyRandomSource(RandomSupport.generateUniqueSeed()); ++ } // Leaf - Faster RNG + + static RandomSource create(long seed) { +- return new LegacyRandomSource(seed); +- } ++ return org.dreeam.leaf.config.modules.opt.FastRNG.enabled ? new TheFasterRandom(seed) : new LegacyRandomSource(seed); ++ } // Leaf - Faster RNG + + static RandomSource createNewThreadLocalInstance() { +- return new SingleThreadedRandomSource(ThreadLocalRandom.current().nextLong()); +- } ++ return org.dreeam.leaf.config.modules.opt.FastRNG.enabled ? new TheFasterRandom(RandomSupport.generateFasterSeed()) : new SingleThreadedRandomSource(ThreadLocalRandom.current().nextLong()); ++ } // Leaf - Faster RNG + + RandomSource fork(); + +diff --git a/src/main/java/org/dreeam/leaf/config/modules/opt/FastRNG.java b/src/main/java/org/dreeam/leaf/config/modules/opt/FastRNG.java +new file mode 100644 +index 0000000000000000000000000000000000000000..13b3adcf44f1c41ffda8ee5ceee085be01991324 +--- /dev/null ++++ b/src/main/java/org/dreeam/leaf/config/modules/opt/FastRNG.java +@@ -0,0 +1,31 @@ ++package org.dreeam.leaf.config.modules.opt; ++ ++import com.electronwill.nightconfig.core.file.CommentedFileConfig; ++import org.dreeam.leaf.config.ConfigInfo; ++import org.dreeam.leaf.config.EnumConfigCategory; ++import org.dreeam.leaf.config.IConfigModule; ++ ++public class FastRNG implements IConfigModule { ++ ++ @Override ++ public EnumConfigCategory getCategory() { ++ return EnumConfigCategory.PERFORMANCE; ++ } ++ ++ @Override ++ public String getBaseName() { ++ return "use_faster_random_generator"; ++ } ++ ++ @ConfigInfo(baseName = "enabled") ++ public static boolean enabled = false; ++ ++ @Override ++ public void onLoaded(CommentedFileConfig config) { ++ config.setComment("performance.use_faster_random_generator", """ ++ Use faster random generator? (Up to 100X faster) ++ Requires a JVM that supports RandomGenerator and the LXM generators. ++ Some JREs don't support this and will cause a crash. ++ """); ++ } ++} +diff --git a/src/main/java/org/dreeam/leaf/util/math/random/TheFasterRandom.java b/src/main/java/org/dreeam/leaf/util/math/random/TheFasterRandom.java +new file mode 100644 +index 0000000000000000000000000000000000000000..c13c8e5a2fba4267eb254e75f993bc6a9b861f6e +--- /dev/null ++++ b/src/main/java/org/dreeam/leaf/util/math/random/TheFasterRandom.java +@@ -0,0 +1,89 @@ ++package org.dreeam.leaf.util.math.random; ++ ++import net.minecraft.util.RandomSource; ++import net.minecraft.world.level.levelgen.BitRandomSource; ++import net.minecraft.world.level.levelgen.LegacyRandomSource; ++import net.minecraft.world.level.levelgen.PositionalRandomFactory; ++ ++import java.util.random.RandomGenerator; ++import java.util.random.RandomGeneratorFactory; ++ ++ ++public class TheFasterRandom implements BitRandomSource { ++ private static final int INT_BITS = 48; ++ private static final long SEED_MASK = 0xFFFFFFFFFFFFL; ++ private static final long MULTIPLIER = 25214903917L; ++ private static final long INCREMENT = 11L; ++ private static final RandomGeneratorFactory RANDOM_GENERATOR_FACTORY = RandomGeneratorFactory.of( ++ "L64X128MixRandom"); ++ ++ private long seed; ++ private RandomGenerator.SplittableGenerator randomGenerator; ++ ++ public TheFasterRandom(long seed) { ++ this.seed = seed; ++ this.randomGenerator = RANDOM_GENERATOR_FACTORY.create(seed); ++ } ++ ++ public TheFasterRandom(long seed, RandomGenerator.SplittableGenerator randomGenerator) { ++ this.seed = seed; ++ this.randomGenerator = randomGenerator; ++ } ++ ++ @Override ++ public RandomSource fork() { ++ return new TheFasterRandom(seed, randomGenerator.split()); ++ } ++ ++ @Override ++ public PositionalRandomFactory forkPositional() { ++ return new LegacyRandomSource.LegacyPositionalRandomFactory(this.seed); ++ } ++ ++ @Override ++ public void setSeed(long seed) { ++ this.seed = seed; ++ this.randomGenerator = RANDOM_GENERATOR_FACTORY.create(seed); ++ } ++ ++ @Override ++ public int next(int bits) { ++ // >>> instead of Mojang's >> fixes MC-239059 ++ return (int) ((seed * MULTIPLIER + INCREMENT & SEED_MASK) >>> INT_BITS - bits); ++ } ++ ++ @Override ++ public int nextInt() { ++ return randomGenerator.nextInt(); ++ } ++ ++ @Override ++ public int nextInt(int bound) { ++ return randomGenerator.nextInt(bound); ++ } ++ ++ @Override ++ public long nextLong() { ++ return randomGenerator.nextLong(); ++ } ++ ++ @Override ++ public boolean nextBoolean() { ++ return randomGenerator.nextBoolean(); ++ } ++ ++ @Override ++ public float nextFloat() { ++ return randomGenerator.nextFloat(); ++ } ++ ++ @Override ++ public double nextDouble() { ++ return randomGenerator.nextDouble(); ++ } ++ ++ @Override ++ public double nextGaussian() { ++ return randomGenerator.nextGaussian(); ++ } ++} diff --git a/patches/server/0087-Don-t-save-primed-tnt-entity.patch b/patches/server/0087-Don-t-save-primed-tnt-entity.patch new file mode 100644 index 000000000..629457b7d --- /dev/null +++ b/patches/server/0087-Don-t-save-primed-tnt-entity.patch @@ -0,0 +1,53 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: nostalfinals +Date: Mon, 29 Apr 2024 23:30:21 +0800 +Subject: [PATCH] Don't save primed tnt entity + + +diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +index 6d934405cd18d63943171448743cafd5c52026e2..902dd0c5b00832c5502d5a0ffc41fa9cfe4f4c27 100644 +--- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java ++++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +@@ -225,4 +225,11 @@ public class PrimedTnt extends Entity implements TraceableEntity { + return super.interact(player, hand); + } + // Purpur end - Shears can defuse TNT ++ ++ // Leaf start - PMC - Don't save primed tnt entity ++ @Override ++ public boolean shouldBeSaved() { ++ return !org.dreeam.leaf.config.modules.opt.DontSaveEntity.dontSavePrimedTNT && super.shouldBeSaved(); ++ } ++ // Leaf - PMC - Don't save primed tnt entity + } +diff --git a/src/main/java/org/dreeam/leaf/config/modules/opt/DontSaveEntity.java b/src/main/java/org/dreeam/leaf/config/modules/opt/DontSaveEntity.java +new file mode 100644 +index 0000000000000000000000000000000000000000..01755f3f24fc2a89f71f2e3de48166e95253f418 +--- /dev/null ++++ b/src/main/java/org/dreeam/leaf/config/modules/opt/DontSaveEntity.java +@@ -0,0 +1,25 @@ ++package org.dreeam.leaf.config.modules.opt; ++ ++import org.dreeam.leaf.config.ConfigInfo; ++import org.dreeam.leaf.config.EnumConfigCategory; ++import org.dreeam.leaf.config.IConfigModule; ++ ++public class DontSaveEntity implements IConfigModule { ++ ++ @Override ++ public EnumConfigCategory getCategory() { ++ return EnumConfigCategory.PERFORMANCE; ++ } ++ ++ @Override ++ public String getBaseName() { ++ return "dont_save_entity"; ++ } ++ ++ @ConfigInfo(baseName = "dont-save-primed-tnt", comments = """ ++ Disable save primed tnt on chunk unloads. ++ Useful for redstone server, can prevent machine be exploded by TNT, ++ when player disconnected caused by Internet issue. ++ """) ++ public static boolean dontSavePrimedTNT = false; ++} diff --git a/patches/server/0088-Don-t-save-falling-block-entity.patch b/patches/server/0088-Don-t-save-falling-block-entity.patch new file mode 100644 index 000000000..4beb8a60b --- /dev/null +++ b/patches/server/0088-Don-t-save-falling-block-entity.patch @@ -0,0 +1,34 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: nostalfinals +Date: Mon, 29 Apr 2024 23:31:25 +0800 +Subject: [PATCH] Don't save falling block entity + + +diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +index a52c2fc38fd97ffa1684270443646d605ec35830..5c600d094959c9a2585525b60d8a2d7fe97a8a16 100644 +--- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java ++++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +@@ -403,4 +403,11 @@ public class FallingBlockEntity extends Entity { + this.setPos(d0, d1, d2); + this.setStartPos(this.blockPosition()); + } ++ ++ // Leaf start - PMC - Don't save falling block entity ++ @Override ++ public boolean shouldBeSaved() { ++ return !org.dreeam.leaf.config.modules.opt.DontSaveEntity.dontSaveFallingBlock && super.shouldBeSaved(); ++ } ++ // Leaf end - PMC - Don't save falling block entity + } +diff --git a/src/main/java/org/dreeam/leaf/config/modules/opt/DontSaveEntity.java b/src/main/java/org/dreeam/leaf/config/modules/opt/DontSaveEntity.java +index 01755f3f24fc2a89f71f2e3de48166e95253f418..3753930a2ae5832b6542327627522c8afec28659 100644 +--- a/src/main/java/org/dreeam/leaf/config/modules/opt/DontSaveEntity.java ++++ b/src/main/java/org/dreeam/leaf/config/modules/opt/DontSaveEntity.java +@@ -22,4 +22,7 @@ public class DontSaveEntity implements IConfigModule { + when player disconnected caused by Internet issue. + """) + public static boolean dontSavePrimedTNT = false; ++ ++ @ConfigInfo(baseName = "dont-save-falling-block") ++ public static boolean dontSaveFallingBlock = false; + } diff --git a/patches/server/0042-Fix-tracker-NPE.patch b/patches/server/0089-Tracking-Optimize-Use-thread-safe-Collection.patch similarity index 56% rename from patches/server/0042-Fix-tracker-NPE.patch rename to patches/server/0089-Tracking-Optimize-Use-thread-safe-Collection.patch index 02b3c0ded..7f360c783 100644 --- a/patches/server/0042-Fix-tracker-NPE.patch +++ b/patches/server/0089-Tracking-Optimize-Use-thread-safe-Collection.patch @@ -1,11 +1,11 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> -Date: Wed, 2 Aug 2023 16:14:12 +0800 -Subject: [PATCH] Fix tracker NPE +Date: Thu, 23 May 2024 21:28:02 +0800 +Subject: [PATCH] Tracking Optimize: Use thread-safe Collection diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 29ea09f27f4b0a7f1ab6075e68c7379898ff2339..80168d2a040c02504af3a4f3f68802afb327046d 100644 +index b0a6d5951b80a056c7f070188918cac50b0fe9ca..c564136c9304b0cf9aef22dba2fc3a53a1d7f30b 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -241,7 +241,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -13,57 +13,52 @@ index 29ea09f27f4b0a7f1ab6075e68c7379898ff2339..80168d2a040c02504af3a4f3f68802af // Paper end // Paper start - optimise chunk tick iteration - public final it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet needsChangeBroadcasting = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>(); -+ public final Set needsChangeBroadcasting = Sets.newConcurrentHashSet(); // Leaf - Fix tracker NPE ++ public final Set needsChangeBroadcasting = Sets.newConcurrentHashSet(); // Leaf - Use thread-safe collection public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap = new gg.pufferfish.pufferfish.util.AsyncPlayerAreaMap(this.pooledLinkedPlayerHashSets); // Pufferfish // Paper end - optimise chunk tick iteration diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 93ec0bdece165e5a5058f9a7ed2fd67dbcef2ab4..70b35ce82701454017b44e8a2fb3b45fefc6420e 100644 +index f1718d57dab1e81c906874f51986868d897f87f1..0e20bf94822dc0f56cfce3e3b4a54235f96d1ef9 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -9,6 +9,7 @@ import java.io.IOException; - import java.util.Arrays; - import java.util.Iterator; - import java.util.List; -+import java.util.ArrayList; // Leaf - import java.util.Objects; - import java.util.Optional; - import java.util.concurrent.CompletableFuture; -@@ -642,7 +643,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -646,7 +646,7 @@ public class ServerChunkCache extends ChunkSource { // Paper - optimise chunk tick iteration // Paper start - optimise chunk tick iteration if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) { - it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone(); -+ List copy = new ArrayList<>(this.chunkMap.needsChangeBroadcasting); // Leaf - Fix tracker NPE ++ List copy = new java.util.ArrayList<>(this.chunkMap.needsChangeBroadcasting); // Leaf - Use thread-safe collection this.chunkMap.needsChangeBroadcasting.clear(); for (ChunkHolder holder : copy) { holder.broadcastChanges(holder.getFullChunkNowUnchecked()); // LevelChunks are NEVER unloaded +diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java +index 23226bc990044e33471de6bc9610c2c5ee707f3e..f45cf9c7c2d67fafee6bb5409ffc975dc0d3b133 100644 +--- a/src/main/java/net/minecraft/server/level/ServerEntity.java ++++ b/src/main/java/net/minecraft/server/level/ServerEntity.java +@@ -426,7 +426,7 @@ public class ServerEntity { + + if (!set.isEmpty()) { + // Leaf start - petal - sync +- final Set copy = new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(set); ++ final Set copy = com.google.common.collect.Sets.newConcurrentHashSet(set); + ((ServerLevel) this.entity.level()).chunkSource.chunkMap.runOnTrackerMainThread(() -> { + // CraftBukkit start - Send scaled max health + if (this.entity instanceof ServerPlayer) { diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index 7394c2d99499faaa4489a7eee1dd8b73ec08668d..d1603df4f829a7f3690970965f5549c99620db01 100644 +index 94082358b0dd573e09e61b167af2a54f8aa4bb2a..97a9fa03011dd8f524319924d07cd98d93c88f64 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -@@ -1,6 +1,7 @@ - package net.minecraft.world.entity.ai.attributes; - - import com.google.common.collect.Multimap; -+import com.google.common.collect.Sets; // Leaf - import com.mojang.logging.LogUtils; - import java.util.Collection; - import java.util.Map; -@@ -10,7 +11,6 @@ import java.util.stream.Collectors; - import javax.annotation.Nullable; +@@ -21,10 +21,12 @@ import org.slf4j.Logger; - import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; --import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; - import net.minecraft.Util; - import net.minecraft.core.Holder; - import net.minecraft.core.registries.BuiltInRegistries; -@@ -23,7 +23,7 @@ public class AttributeMap { + public class AttributeMap { private static final Logger LOGGER = LogUtils.getLogger(); ++ // Leaf start - Use thread-safe collection // Gale start - Lithium - replace AI attributes with optimized collections - private final Map attributes = new Reference2ReferenceOpenHashMap<>(0); +- private final Map attributes = new Reference2ReferenceOpenHashMap<>(0); - private final Set dirtyAttributes = new ReferenceOpenHashSet<>(0); -+ private final Set dirtyAttributes = Sets.newConcurrentHashSet(); // Leaf - Fix tracker NPE ++ private final Map attributes = com.google.common.collect.Maps.newConcurrentMap(); ++ private final Set dirtyAttributes = com.google.common.collect.Sets.newConcurrentHashSet(); // Gale end - Lithium - replace AI attributes with optimized collections ++ // Leaf end - Use thread-safe collection private final AttributeSupplier supplier; private final java.util.function.Function createInstance; // Gale - Airplane - reduce entity allocations + private final net.minecraft.world.entity.LivingEntity entity; // Purpur diff --git a/patches/server/0090-Tracking-Optimize-Reduce-expensive-iteration.patch b/patches/server/0090-Tracking-Optimize-Reduce-expensive-iteration.patch new file mode 100644 index 000000000..eb12d45b5 --- /dev/null +++ b/patches/server/0090-Tracking-Optimize-Reduce-expensive-iteration.patch @@ -0,0 +1,59 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> +Date: Thu, 23 May 2024 21:28:02 +0800 +Subject: [PATCH] Tracking Optimize: Reduce expensive iteration + + +diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java +index c564136c9304b0cf9aef22dba2fc3a53a1d7f30b..65b9af55c1137caee60159808f759d3d5c6fd2de 100644 +--- a/src/main/java/net/minecraft/server/level/ChunkMap.java ++++ b/src/main/java/net/minecraft/server/level/ChunkMap.java +@@ -1157,6 +1157,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + return; + } + // Leaf end - petal ++ ++ if (net.minecraft.server.MinecraftServer.getServer().getPlayerList().players.isEmpty()) return; // Leaf - Don't update since the server is empty ++ + for (TrackedEntity tracker : this.entityMap.values()) { + // update tracker entry + tracker.updatePlayers(tracker.entity.getPlayersInTrackRange()); +diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java +index f45cf9c7c2d67fafee6bb5409ffc975dc0d3b133..07fb29f9bb5a3a4c1dd7d9e9cd9dbbdb62f07d5d 100644 +--- a/src/main/java/net/minecraft/server/level/ServerEntity.java ++++ b/src/main/java/net/minecraft/server/level/ServerEntity.java +@@ -439,7 +439,7 @@ public class ServerEntity { + // Leaf end - petal + } + +- set.clear(); ++ ((LivingEntity) this.entity).getAttributes().clearDirtyAttributes(); // Leaf + } + + } +diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +index 97a9fa03011dd8f524319924d07cd98d93c88f64..3aaeac724b4ddef3a00cbd61dba3fddcbd008664 100644 +--- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java ++++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +@@ -24,7 +24,7 @@ public class AttributeMap { + // Leaf start - Use thread-safe collection + // Gale start - Lithium - replace AI attributes with optimized collections + private final Map attributes = com.google.common.collect.Maps.newConcurrentMap(); +- private final Set dirtyAttributes = com.google.common.collect.Sets.newConcurrentHashSet(); ++ private Set dirtyAttributes = com.google.common.collect.Sets.newConcurrentHashSet(); // Leaf - no final + // Gale end - Lithium - replace AI attributes with optimized collections + // Leaf end - Use thread-safe collection + private final AttributeSupplier supplier; +@@ -53,6 +53,12 @@ public class AttributeMap { + return this.dirtyAttributes; + } + ++ // Leaf start - Reduce expensive clear() iteration ++ public void clearDirtyAttributes() { ++ this.dirtyAttributes = com.google.common.collect.Sets.newConcurrentHashSet(); ++ } ++ // Leaf end - Reduce expensive clear() iteration ++ + public Collection getSyncableAttributes() { + return this.attributes.values().stream().filter(attribute -> attribute.getAttribute().isClientSyncable() && (entity == null || entity.shouldSendAttribute(attribute.getAttribute()))).collect(Collectors.toList()); // Purpur + }