diff --git a/.github/workflows/build-1216.yml b/.github/workflows/build-1217.yml similarity index 85% rename from .github/workflows/build-1216.yml rename to .github/workflows/build-1217.yml index e903cae1..8ddcc0b1 100644 --- a/.github/workflows/build-1216.yml +++ b/.github/workflows/build-1217.yml @@ -1,8 +1,8 @@ -name: Build Leaf 1.21.6 +name: Build Leaf 1.21.7 on: push: - branches: [ "ver/1.21.6" ] + branches: [ "ver/1.21.7" ] workflow_dispatch: jobs: @@ -13,12 +13,12 @@ jobs: GRADLE_MEMORY: "-Xmx4g -XX:MaxMetaspaceSize=2g" steps: - name: Checkout repository - uses: actions/checkout@v4.2.2 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Gradle Cache - uses: useblacksmith/cache@v5.0.2 + uses: useblacksmith/cache@v5 with: path: | ~/.gradle/caches/modules-2 @@ -40,7 +40,7 @@ jobs: find ~/.gradle/caches -name "*.lock" -type f -delete || echo "No lock files found" - name: Setup java - uses: useblacksmith/setup-java@v5.0.1 + uses: useblacksmith/setup-java@v5 with: distribution: 'temurin' java-version: '21' @@ -91,17 +91,17 @@ jobs: BUILD_NUMBER: ${{ env.BUILD_NUMBER }} - name: Upload Leaf - uses: actions/upload-artifact@v4.6.2 + uses: actions/upload-artifact@v4 with: - name: Leaf 1.21.6 - path: ./leaf-1.21.6-${{ env.BUILD_NUMBER }}.jar + name: Leaf 1.21.7 + path: ./leaf-1.21.7-${{ env.BUILD_NUMBER }}.jar - name: Release Leaf - uses: softprops/action-gh-release@v2.3.2 + uses: softprops/action-gh-release@v2 with: - name: "Leaf 1.21.6" - tag_name: "ver-1.21.6" - files: "./leaf-1.21.6-${{ env.BUILD_NUMBER }}.jar" + name: "Leaf 1.21.7" + tag_name: "ver-1.21.7" + files: "./leaf-1.21.7-${{ env.BUILD_NUMBER }}.jar" body_path: "./release_notes.md" token: "${{ secrets.GITHUB_TOKEN }}" target_commitish: "${{ github.sha }}" @@ -111,21 +111,21 @@ jobs: - name: Calculate SHA-256 id: hash run: | - FILE_NAME="leaf-1.21.6-${{ env.BUILD_NUMBER }}.jar" + FILE_NAME="leaf-1.21.7-${{ env.BUILD_NUMBER }}.jar" HASH=$(sha256sum "$FILE_NAME" | awk '{ print $1 }') echo "sha256=$HASH" >> $GITHUB_OUTPUT - name: Upload JAR to download API - uses: appleboy/scp-action@v1.0.0 + uses: appleboy/scp-action@v1 with: host: ${{ secrets.API_HOST }} username: ${{ secrets.API_USER }} password: ${{ secrets.API_PASS }} - source: "./leaf-1.21.6-${{ env.BUILD_NUMBER }}.jar" + source: "./leaf-1.21.7-${{ env.BUILD_NUMBER }}.jar" target: "~/api/uploads/" - name: Insert build to download API - uses: appleboy/ssh-action@v1.2.2 + uses: appleboy/ssh-action@v1 with: host: ${{ secrets.API_HOST }} username: ${{ secrets.API_USER }} @@ -141,11 +141,11 @@ jobs: node insertBuild.js \ --projectName leaf \ --projectFriendlyName "Leaf" \ - --version 1.21.6 \ - --versionGroupName 1.21.6 \ - --versionName 1.21.6 \ + --version 1.21.7 \ + --versionGroupName 1.21.7 \ + --versionName 1.21.7 \ --build-number ${{ env.BUILD_NUMBER }} \ --repositoryPath "$REPO_DIR" \ --storagePath /root/api/storage \ - --download "primary:/root/api/uploads/leaf-1.21.6-${{ env.BUILD_NUMBER }}.jar:${{ steps.hash.outputs.sha256 }}" \ + --download "primary:/root/api/uploads/leaf-1.21.7-${{ env.BUILD_NUMBER }}.jar:${{ steps.hash.outputs.sha256 }}" \ --buildChannel default diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 33b9e6ca..aacd9364 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -2,7 +2,7 @@ name: Build Pull Request on: pull_request: - branches: [ "ver/1.21.6" ] + branches: [ "ver/1.21.7" ] jobs: build: @@ -12,7 +12,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@main + uses: actions/checkout@v4 - name: Setup java uses: useblacksmith/setup-java@v5 @@ -34,9 +34,9 @@ jobs: - name: Rename Paperclip JARs run: | - mv leaf-server/build/libs/leaf-paperclip-1.21.6-R0.1-SNAPSHOT-mojmap.jar ./leaf-1.21.6.jar + mv leaf-server/build/libs/leaf-paperclip-1.21.7-R0.1-SNAPSHOT-mojmap.jar ./leaf-1.21.7.jar - name: Upload Leaf as build artifact - uses: actions/upload-artifact@main + uses: actions/upload-artifact@v4 with: - name: Leaf 1.21.6 - path: ./leaf-1.21.6.jar + name: Leaf 1.21.7 + path: ./leaf-1.21.7.jar diff --git a/.github/workflows/publish-api.yml b/.github/workflows/publish-api.yml index 3efd3633..07d6cd88 100644 --- a/.github/workflows/publish-api.yml +++ b/.github/workflows/publish-api.yml @@ -1,7 +1,8 @@ name: Publish API + on: push: - branches: [ "ver/1.21.6" ] + branches: [ "ver/1.21.7" ] jobs: build: @@ -11,12 +12,12 @@ jobs: GRADLE_MEMORY: "-Xmx4g -XX:MaxMetaspaceSize=2g" steps: - name: Checkout repository - uses: actions/checkout@main + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up GraalVM JDK 21 - uses: graalvm/setup-graalvm@main + uses: graalvm/setup-graalvm@v1 with: java-version: 21 github-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/README.md b/README.md index 60715a88..a2a9ba37 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@
[![Download](https://img.shields.io/badge/releases-blue?label=download&style=for-the-badge&colorA=19201a&colorB=298046)](https://www.leafmc.one/download)⠀ -[![Github Actions Build](https://img.shields.io/github/actions/workflow/status/Winds-Studio/Leaf/build-1216.yml?&style=for-the-badge&colorA=19201a&colorB=298046)](https://github.com/Winds-Studio/Leaf/actions)⠀ +[![Github Actions Build](https://img.shields.io/github/actions/workflow/status/Winds-Studio/Leaf/build-1217.yml?&style=for-the-badge&colorA=19201a&colorB=298046)](https://github.com/Winds-Studio/Leaf/actions)⠀ [![Discord](https://img.shields.io/discord/1145991395388162119?label=discord&style=for-the-badge&colorA=19201a&colorB=298046)](https://discord.gg/gfgAwdSEuM) [![Docs](https://img.shields.io/badge/leafmc.one/docs/-blue?label=docs&style=for-the-badge&colorA=19201a&colorB=298046)](https://www.leafmc.one/docs) @@ -65,7 +65,7 @@ Building a Paperclip JAR for distribution: cn.dreeam.leaf leaf-api - 1.21.6-R0.1-SNAPSHOT + 1.21.7-R0.1-SNAPSHOT provided ``` @@ -78,7 +78,7 @@ repositories { } dependencies { - compileOnly("cn.dreeam.leaf:leaf-api:1.21.6-R0.1-SNAPSHOT") + compileOnly("cn.dreeam.leaf:leaf-api:1.21.7-R0.1-SNAPSHOT") } java { diff --git a/gradle.properties b/gradle.properties index 4d2ec30e..3a4a3017 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ group=cn.dreeam.leaf -mcVersion=1.21.6 -version=1.21.6-R0.1-SNAPSHOT +mcVersion=1.21.7 +version=1.21.7-R0.1-SNAPSHOT -paperCommit=4d854e66b80dad9898d71a0f0b1f83cd39b97119 +paperCommit=51d28af8fa2c60464e2f5c84810c1744be164f00 org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/leaf-api/paper-patches/features/0004-Vectorized-map-color-conversion.patch b/leaf-api/paper-patches/features/0004-Vectorized-map-color-conversion.patch index 43f990e0..95fdc34c 100644 --- a/leaf-api/paper-patches/features/0004-Vectorized-map-color-conversion.patch +++ b/leaf-api/paper-patches/features/0004-Vectorized-map-color-conversion.patch @@ -110,7 +110,7 @@ index 0000000000000000000000000000000000000000..00b16e4aacba50996b81fac81c3f78b6 + +} diff --git a/src/main/java/org/bukkit/map/MapPalette.java b/src/main/java/org/bukkit/map/MapPalette.java -index fd6f3bce50a66004687b08fd80568543f814747a..2d6d7bc800a7c2c0f29b2d7f2512f2d27aaa9439 100644 +index 2b9e4aa8cf35e7106e510e547954ee7e1bcf3d81..794ae24eee9a20c6db4690b527f5e005d5ca3f00 100644 --- a/src/main/java/org/bukkit/map/MapPalette.java +++ b/src/main/java/org/bukkit/map/MapPalette.java @@ -35,7 +35,7 @@ public final class MapPalette { @@ -120,7 +120,7 @@ index fd6f3bce50a66004687b08fd80568543f814747a..2d6d7bc800a7c2c0f29b2d7f2512f2d2 - static final Color[] colors = { + public static final Color[] colors = { // Gale - Pufferfish - vectorized map color conversion - package -> public // Start generate - MapPalette#colors - // @GeneratedFrom 1.21.6 + // @GeneratedFrom 1.21.7 new Color(0x00000000, true), @@ -395,9 +395,15 @@ public final class MapPalette { temp.getRGB(0, 0, temp.getWidth(), temp.getHeight(), pixels, 0, temp.getWidth()); diff --git a/leaf-api/paper-patches/features/0006-Player-canSee-by-entity-UUID.patch b/leaf-api/paper-patches/features/0006-Player-canSee-by-entity-UUID.patch index 0f992e0c..d97e64a1 100644 --- a/leaf-api/paper-patches/features/0006-Player-canSee-by-entity-UUID.patch +++ b/leaf-api/paper-patches/features/0006-Player-canSee-by-entity-UUID.patch @@ -37,10 +37,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index d34419693fc78b3f7e8f6bbf115f17f29e5e3377..c44453789834c544b0e78b52bb9b09ffbd5958fb 100644 +index 3584ca0a89f59e391ab6d5be8f2274a6801d025f..cc663ca87a6f64ea891984c72554796f25bb308f 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2129,6 +2129,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2128,6 +2128,16 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM boolean listPlayer(Player other); // Paper end diff --git a/leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch b/leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch index d1852bba..b23074dc 100644 --- a/leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch +++ b/leaf-api/paper-patches/features/0011-Purpur-API-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: a112b6aca718e4500a6d48ca9d7158faf0f4adf9 +Commit: 591baf2648d0f75ffecc52f1d169348af35246dd Patches listed below are removed in this patch, They exists in Gale or Leaf: * "co/aikar/timings/TimedEventExecutor.java.patch" @@ -21,7 +21,7 @@ Patches listed below are removed in this patch, They exists in Gale or Leaf: * "org/spigotmc/CustomTimingsHandler.java.patch" diff --git a/src/generated/java/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/src/generated/java/com/destroystokyo/paper/entity/ai/VanillaGoal.java -index e4729256f444168dc8cb7121f66cae0df054692b..0db0e11f4e18a280f699004dc660ce211b7f895f 100644 +index b7fae62ca1807031c62148505ae54c0fb7b87780..3b6580c3679e9c325dd8deb302dbfe6a062bd291 100644 --- a/src/generated/java/com/destroystokyo/paper/entity/ai/VanillaGoal.java +++ b/src/generated/java/com/destroystokyo/paper/entity/ai/VanillaGoal.java @@ -446,6 +446,26 @@ public interface VanillaGoal extends Goal { @@ -290,10 +290,10 @@ index 918a045165cdcde264bc24082b7afebb407271de..f283bcabff7fe6eede6cf4344537e430 + // Purpur end - ChatColor conveniences } diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java -index ac8d14010940d55e2d885e75ce6ff436c46e2d69..8f45823ea89c8208374115f8ed9c5a535a64c017 100644 +index 899c288e12b423b9f8fe84e113fd4d996a98de94..7f488cc432ded1ec0e99c65bea5fd9897c8efbb4 100644 --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -3636,4 +3636,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla +@@ -3633,4 +3633,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla return this.asItemType().getDefaultDataTypes(); } // Paper end - data component API @@ -700,10 +700,10 @@ index 739911cda33b373f99df627a3a378b37d7d461aa..58e16c12b06fa11d30b67f5038844ff9 * Add an entity to the block. * diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java -index 4acda947b7d69ab4133b4cc94e76d945e4d148d5..613a0bad5c07cf14098218652eba1f4deaf77c6d 100644 +index ad1330d87223dfcf3c9da40aa5ece8c21141f0d6..e3f0605d375dcbb43ae40dac48acdeb2bd458e54 100644 --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java -@@ -146,6 +146,19 @@ public class SimpleCommandMap implements CommandMap { +@@ -148,6 +148,19 @@ public class SimpleCommandMap implements CommandMap { return false; } @@ -723,7 +723,7 @@ index 4acda947b7d69ab4133b4cc94e76d945e4d148d5..613a0bad5c07cf14098218652eba1f4d // Paper start - Plugins do weird things to workaround normal registration if (target.timings == null) { target.timings = co.aikar.timings.TimingsManager.getCommandTiming(null, target); -@@ -155,7 +168,7 @@ public class SimpleCommandMap implements CommandMap { +@@ -157,7 +170,7 @@ public class SimpleCommandMap implements CommandMap { try { try (co.aikar.timings.Timing ignored = target.timings.startTiming()) { // Paper - use try with resources // Note: we don't return the result of target.execute as thats success / failure, we return handled (true) or not handled (false) @@ -1008,13 +1008,13 @@ index bc84b892cae5fe7019a3ad481e9da79956efa1fe..48eb5b00c460cccde29d327cef1d63fc + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index c44453789834c544b0e78b52bb9b09ffbd5958fb..d4082cd6dae07958ace3b9e9769ccb7da4c2a828 100644 +index cc663ca87a6f64ea891984c72554796f25bb308f..747e943d98a385346b79897a5261d41cfc9572df 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3935,4 +3935,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM - * @param score New death screen score of player +@@ -3942,4 +3942,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM */ - void setDeathScreenScore(int score); + @ApiStatus.Experimental + PlayerGameConnection getConnection(); + + // Purpur start + /** @@ -1161,7 +1161,7 @@ index 7fbfdb07585c7b28acea1f0c1f58ada0cc744441..21fcca092e2e31baa5ece0de9e44e3fa + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java -index 1be07639143cd80bd4fb304d6f3bbced58887617..120159852cae3b1a71c6c7ce949cadb386023095 100644 +index 4048add2433ebe39d3df995296daaff4bfadce47..8da18f023f6b18f6be58e08f37c2d873bc0c97d2 100644 --- a/src/main/java/org/bukkit/entity/Villager.java +++ b/src/main/java/org/bukkit/entity/Villager.java @@ -408,4 +408,13 @@ public interface Villager extends AbstractVillager { @@ -1204,7 +1204,7 @@ index 11ae1b3ad8c215f9245945d223c52f4a62ac47d9..7f23eb5a60ff08fb31e8ba3731a43bd7 + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/Wolf.java b/src/main/java/org/bukkit/entity/Wolf.java -index d0a64457e4bf40f2a78ffe90c2d402adc154e327..ea51840e4f40733a48ca34f7a8fcf17dc963d659 100644 +index 98ed584f801a35253a9a5a2af3c73dbbc49bcb06..8708ab27e38e3906b13d103ad45224c89e239117 100644 --- a/src/main/java/org/bukkit/entity/Wolf.java +++ b/src/main/java/org/bukkit/entity/Wolf.java @@ -163,4 +163,20 @@ public interface Wolf extends Tameable, Sittable, io.papermc.paper.entity.Collar @@ -1260,10 +1260,10 @@ index 22e14ba522510d659c191d72536cde895458d9ed..d45d781975a6026022712a217c154e31 * When a player gets bad omen after killing a patrol captain. * diff --git a/src/main/java/org/bukkit/event/inventory/InventoryType.java b/src/main/java/org/bukkit/event/inventory/InventoryType.java -index 81118a91c2e22e02a1f774d1cc4d3e97064087ce..6640df827e354cc32cea5fc71b9e464443202708 100644 +index 54ff294e64abd692c0f64ba2db7341c9c71436d0..49e458e453486dcf48d1ab920da176723d7ef3f4 100644 --- a/src/main/java/org/bukkit/event/inventory/InventoryType.java +++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java -@@ -164,7 +164,7 @@ public enum InventoryType { +@@ -166,7 +166,7 @@ public enum InventoryType { SMITHING_NEW(4, "Upgrade Gear", MenuType.SMITHING), ; diff --git a/leaf-api/paper-patches/features/0012-Remove-Timings.patch b/leaf-api/paper-patches/features/0012-Remove-Timings.patch index 02d4eaa1..66d312ff 100644 --- a/leaf-api/paper-patches/features/0012-Remove-Timings.patch +++ b/leaf-api/paper-patches/features/0012-Remove-Timings.patch @@ -2892,18 +2892,18 @@ index 59fada9b1eb78238d280c6bbb711f52facba52c6..eb4d78c6111a530d015a0b91d14c40ad return i >= j && i <= k; } diff --git a/src/main/java/org/bukkit/command/SimpleCommandMap.java b/src/main/java/org/bukkit/command/SimpleCommandMap.java -index 613a0bad5c07cf14098218652eba1f4deaf77c6d..25a0414cc9482925ad0426dde57e65012d62e637 100644 +index e3f0605d375dcbb43ae40dac48acdeb2bd458e54..83e7175927e8adb90208bebbd7ddc37cb186d1dc 100644 --- a/src/main/java/org/bukkit/command/SimpleCommandMap.java +++ b/src/main/java/org/bukkit/command/SimpleCommandMap.java -@@ -32,7 +32,6 @@ public class SimpleCommandMap implements CommandMap { - - private void setDefaultCommands() { - register("bukkit", new ReloadCommand("reload")); +@@ -34,7 +34,6 @@ public class SimpleCommandMap implements CommandMap { + final ReloadCommand reload = new ReloadCommand("reload"); + this.knownCommands.put("bukkit:reload", reload); + this.knownCommands.put("bukkit:rl", reload); - register("bukkit", new co.aikar.timings.TimingsCommand("timings")); } public void setFallbackCommands() { -@@ -64,7 +63,6 @@ public class SimpleCommandMap implements CommandMap { +@@ -66,7 +65,6 @@ public class SimpleCommandMap implements CommandMap { */ @Override public boolean register(@NotNull String label, @NotNull String fallbackPrefix, @NotNull Command command) { @@ -2911,7 +2911,7 @@ index 613a0bad5c07cf14098218652eba1f4deaf77c6d..25a0414cc9482925ad0426dde57e6501 label = label.toLowerCase(Locale.ROOT).trim(); fallbackPrefix = fallbackPrefix.toLowerCase(Locale.ROOT).trim(); boolean registered = register(label, command, false, fallbackPrefix); -@@ -159,23 +157,13 @@ public class SimpleCommandMap implements CommandMap { +@@ -161,23 +159,13 @@ public class SimpleCommandMap implements CommandMap { parsedArgs = event.getArgs(); // Purpur end - ExecuteCommandEvent diff --git a/leaf-api/paper-patches/features/0013-KeYi-Player-Skull-API.patch b/leaf-api/paper-patches/features/0013-KeYi-Player-Skull-API.patch index 24bb7dec..d22ea959 100644 --- a/leaf-api/paper-patches/features/0013-KeYi-Player-Skull-API.patch +++ b/leaf-api/paper-patches/features/0013-KeYi-Player-Skull-API.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index d4082cd6dae07958ace3b9e9769ccb7da4c2a828..d17f7881e55d61c2137f29d0b903016958b05b5d 100644 +index 747e943d98a385346b79897a5261d41cfc9572df..66fc9a061d0d5f030ecf8df94acf7357a4cf9eaa 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -4054,4 +4054,23 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -4061,4 +4061,23 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM sendDeathScreen(message); } // Purpur end diff --git a/leaf-api/paper-patches/features/0014-Slice-Smooth-Teleports.patch b/leaf-api/paper-patches/features/0014-Slice-Smooth-Teleports.patch index 97fe3d3d..9793c77b 100644 --- a/leaf-api/paper-patches/features/0014-Slice-Smooth-Teleports.patch +++ b/leaf-api/paper-patches/features/0014-Slice-Smooth-Teleports.patch @@ -9,10 +9,10 @@ Original project: https://github.com/Cryptite/Slice Co-authored-by: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index d17f7881e55d61c2137f29d0b903016958b05b5d..09f70aa4d206a1b7fc5f3274f34c6885a9e2d60d 100644 +index 66fc9a061d0d5f030ecf8df94acf7357a4cf9eaa..9ee5ef2ea93fdf91abf8c312ec2a39b36d096152 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3716,6 +3716,33 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3715,6 +3715,33 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM String getClientBrandName(); // Paper end diff --git a/leaf-server/build.gradle.kts.patch b/leaf-server/build.gradle.kts.patch index 2e94181d..1ba6ed84 100644 --- a/leaf-server/build.gradle.kts.patch +++ b/leaf-server/build.gradle.kts.patch @@ -7,7 +7,7 @@ +val leafMavenPublicUrl = "https://maven.nostal.ink/repository/maven-snapshots/" // Leaf - project setup - Add publish repo dependencies { - mache("io.papermc:mache:1.21.6+build.1") + mache("io.papermc:mache:1.21.7+build.1") - paperclip("io.papermc:paperclip:3.0.3") + paperclip("cn.dreeam:quantumleaper:1.0.0-SNAPSHOT") // Leaf - project setup - Use own paperclip fork testRuntimeOnly("org.junit.platform:junit-platform-launcher") @@ -32,7 +32,7 @@ + spigot { enabled = true - buildDataRef = "281ac0de7a76d808753ede97d11b034bc801b63d" + buildDataRef = "436eac9815c211be1a2a6ca0702615f995e81c44" @@ -49,6 +_,7 @@ libraryRepositories.addAll( "https://repo.maven.apache.org/maven2/", diff --git a/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch b/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch index 767f061a..7eeac1c8 100644 --- a/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch +++ b/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch @@ -1079,7 +1079,7 @@ index b4c983216cd839d793a09e327bb2f15ab90cbff8..1413511500ce8ae25cc4af1d54fc33c8 for (Entity entity : passengerEntity.getPassengers()) { this.tickPassenger(passengerEntity, entity, isActive); // Paper - EAR 2 diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index b1fba7be059247bc4ba4e652f730e026e837b608..5a4b6005de28f62c98ac8172890689d3150fd4da 100644 +index 21ae237a94232090029539652310f7d1e4aba381..4132ebc316af92aedd3b5f21d291e7d57560e985 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -106,8 +106,6 @@ import net.minecraft.util.HashOps; @@ -1091,7 +1091,7 @@ index b1fba7be059247bc4ba4e652f730e026e837b608..5a4b6005de28f62c98ac8172890689d3 import net.minecraft.world.Container; import net.minecraft.world.Difficulty; import net.minecraft.world.InteractionHand; -@@ -1471,14 +1469,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1405,14 +1403,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.unsetRemoved(); */ // CraftBukkit end @@ -1106,7 +1106,7 @@ index b1fba7be059247bc4ba4e652f730e026e837b608..5a4b6005de28f62c98ac8172890689d3 // CraftBukkit start this.isChangingDimension = true; // CraftBukkit - Set teleport invulnerability only if player changing worlds LevelData worlddata = level.getLevelData(); -@@ -1495,7 +1489,6 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1429,7 +1423,6 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); level.addDuringTeleport(this); @@ -1115,7 +1115,7 @@ index b1fba7be059247bc4ba4e652f730e026e837b608..5a4b6005de28f62c98ac8172890689d3 this.stopUsingItem(); this.connection.send(new ClientboundPlayerAbilitiesPacket(this.getAbilities())); diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 43f70a5561d6cc62aaeba6d1e39598ecb382e369..ccbf60f546974692c2c840f4bce87e2c95d1866c 100644 +index 16962ccab91d0941e428a2e53aa37e9ca975f62f..911ce7fcdb7b60880e5502b1a6c9f5bd07c04fd1 100644 --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -26,7 +26,6 @@ import net.minecraft.network.protocol.cookie.ServerboundCookieResponsePacket; @@ -1125,8 +1125,8 @@ index 43f70a5561d6cc62aaeba6d1e39598ecb382e369..ccbf60f546974692c2c840f4bce87e2c -import net.minecraft.util.profiling.Profiler; import org.slf4j.Logger; - public abstract class ServerCommonPacketListenerImpl implements ServerCommonPacketListener, org.bukkit.craftbukkit.entity.CraftPlayer.TransferCookieConnection { // CraftBukkit -@@ -273,7 +272,6 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + public abstract class ServerCommonPacketListenerImpl implements ServerCommonPacketListener { +@@ -176,7 +175,6 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } protected void keepConnectionAlive() { @@ -1134,7 +1134,7 @@ index 43f70a5561d6cc62aaeba6d1e39598ecb382e369..ccbf60f546974692c2c840f4bce87e2c long millis = Util.getMillis(); // Paper start - improve keepalives if (this.checkIfClosed(millis) && !this.processedDisconnect) { -@@ -294,8 +292,6 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -197,8 +195,6 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack // Paper end - improve keepalives } } @@ -1664,10 +1664,10 @@ index c569074403b1d8b443aaa98ba9cf9bbd0e98bd2d..b1aa7294f9479f45fcde77c5ea46db9f this.seen.add(id); } else { diff --git a/net/minecraft/world/entity/animal/HappyGhast.java b/net/minecraft/world/entity/animal/HappyGhast.java -index 24fdfda487bf5348c32707022719ec9907debc80..4e74d5b3076f50f9294553b453f5903ef32f1e8a 100644 +index 272f57aca640e045efca64dd018b221335c667ee..f07dcf7d45b1b717faeae0c4129fb00a22fb7d57 100644 --- a/net/minecraft/world/entity/animal/HappyGhast.java +++ b/net/minecraft/world/entity/animal/HappyGhast.java -@@ -13,8 +13,6 @@ import net.minecraft.sounds.SoundEvents; +@@ -14,8 +14,6 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.tags.ItemTags; import net.minecraft.util.Mth; @@ -1676,7 +1676,7 @@ index 24fdfda487bf5348c32707022719ec9907debc80..4e74d5b3076f50f9294553b453f5903e import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; -@@ -379,13 +377,8 @@ public class HappyGhast extends Animal { +@@ -385,13 +383,8 @@ public class HappyGhast extends Animal { @Override protected void customServerAiStep(ServerLevel level) { if (this.isBaby()) { @@ -2077,7 +2077,7 @@ index 4a4cc7f9c95d4f4b6ad4948e3ed3504efbbcef15..dd6666bd8b8df4148a1557627ce2a6dd if ((this.tickCount + this.getId()) % 120 == 0) { applyDarknessAround(level, this.position(), this, 20); diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 43f16df230f87a43e249a58fc10ef2da517f22ee..532618ae4acd548129006a6c42c62a5b046dbd7e 100644 +index e1e2bdb35866a8f32a41f6efd24ad77cf916b2e9..6cf2af33d22d3df8374746f5926f3f2d5093431d 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java @@ -35,8 +35,6 @@ import net.minecraft.stats.Stats; @@ -2089,7 +2089,7 @@ index 43f16df230f87a43e249a58fc10ef2da517f22ee..532618ae4acd548129006a6c42c62a5b import net.minecraft.world.Difficulty; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; -@@ -295,10 +293,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -294,10 +292,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } protected void customServerAiStep(ServerLevel level, final boolean inactive) { // Paper end - EAR 2 diff --git a/leaf-server/minecraft-patches/features/0022-Make-book-writing-configurable.patch b/leaf-server/minecraft-patches/features/0022-Make-book-writing-configurable.patch index 6167db18..5903e0dd 100644 --- a/leaf-server/minecraft-patches/features/0022-Make-book-writing-configurable.patch +++ b/leaf-server/minecraft-patches/features/0022-Make-book-writing-configurable.patch @@ -22,10 +22,10 @@ you to easily disable books, should you want to preemptively remove this functionality before additional exploits are found. diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index aeb43902a09ef9c1b137964065780be3e87648f4..383652f0bd32fca3551db85fb6ac42a0e326836e 100644 +index 04c991964364a9bcf87d9f6a8d3ef0a0dd8f1deb..128fd9c5a44f05d3556f280f43151695da0665b8 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1255,6 +1255,11 @@ public class ServerGamePacketListenerImpl +@@ -1257,6 +1257,11 @@ public class ServerGamePacketListenerImpl @Override public void handleEditBook(ServerboundEditBookPacket packet) { diff --git a/leaf-server/minecraft-patches/features/0030-Do-not-process-chat-commands-before-player-has-joine.patch b/leaf-server/minecraft-patches/features/0030-Do-not-process-chat-commands-before-player-has-joine.patch index ec2db5e7..6428b836 100644 --- a/leaf-server/minecraft-patches/features/0030-Do-not-process-chat-commands-before-player-has-joine.patch +++ b/leaf-server/minecraft-patches/features/0030-Do-not-process-chat-commands-before-player-has-joine.patch @@ -13,22 +13,22 @@ As part of: EmpireCraft (https://github.com/starlis/empirecraft) Licensed under: MIT (https://opensource.org/licenses/MIT) diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index ffae3e45ba88e8b733e77b87a45cc27b9ecf8c19..684a15babe984c84703e2c6af7a461f75959312d 100644 +index 4132ebc316af92aedd3b5f21d291e7d57560e985..8df0dbadca1dc72ac8d267654414044eb988ee43 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -425,6 +425,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -424,6 +424,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc public boolean sentListPacket = false; public boolean supressTrackerForLogin = false; // Paper - Fire PlayerJoinEvent when Player is actually ready // CraftBukkit end + public boolean didPlayerJoinEvent = false; // Gale - EMC - do not process chat/commands before player has joined public boolean isRealPlayer; // Paper public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent - public @Nullable String clientBrandName = null; // Paper - Brand support + public @Nullable org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 383652f0bd32fca3551db85fb6ac42a0e326836e..29466047936ed44f57cb4bcb8f1bff0bdad81827 100644 +index 128fd9c5a44f05d3556f280f43151695da0665b8..ab0598fffccaf1ea628ab38c68d75399d73d897e 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2433,7 +2433,7 @@ public class ServerGamePacketListenerImpl +@@ -2431,7 +2431,7 @@ public class ServerGamePacketListenerImpl this.disconnectAsync(Component.translatable("multiplayer.disconnect.illegal_characters"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_CHARACTERS); // Paper - add proper async disconnect } else if (this.player.isRemoved() || this.player.getChatVisibility() == ChatVisiblity.HIDDEN) { // CraftBukkit - dead men tell no tales this.send(new ClientboundSystemChatPacket(Component.translatable("chat.disabled.options").withStyle(ChatFormatting.RED), false)); @@ -38,7 +38,7 @@ index 383652f0bd32fca3551db85fb6ac42a0e326836e..29466047936ed44f57cb4bcb8f1bff0b // CraftBukkit start if (sync) { diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 898d9ab963a6cf1db8edf4657a65335d15f271c4..77dbd115d99d8f8e2c01ea69ca297ced06b19c12 100644 +index b09c1735acb57b6230225f88e0fc710ad61af119..39b977927a22956634b7c31818df0544814004fc 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -335,6 +335,8 @@ public abstract class PlayerList { diff --git a/leaf-server/minecraft-patches/features/0032-Do-not-log-empty-message-warnings.patch b/leaf-server/minecraft-patches/features/0032-Do-not-log-empty-message-warnings.patch index b337d1d7..501dcddb 100644 --- a/leaf-server/minecraft-patches/features/0032-Do-not-log-empty-message-warnings.patch +++ b/leaf-server/minecraft-patches/features/0032-Do-not-log-empty-message-warnings.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 29466047936ed44f57cb4bcb8f1bff0bdad81827..767dfc71ad9aafffa01ed27fdeac2c19bbba6f37 100644 +index ab0598fffccaf1ea628ab38c68d75399d73d897e..5dba2bdd91e5dc775e0727b99aff02c892eff733 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2515,7 +2515,7 @@ public class ServerGamePacketListenerImpl +@@ -2513,7 +2513,7 @@ public class ServerGamePacketListenerImpl // CraftBukkit start String rawMessage = message.signedContent(); if (rawMessage.isEmpty()) { diff --git a/leaf-server/minecraft-patches/features/0037-Do-not-log-Not-Secure-marker.patch b/leaf-server/minecraft-patches/features/0037-Do-not-log-Not-Secure-marker.patch index fdc2b986..54e8a909 100644 --- a/leaf-server/minecraft-patches/features/0037-Do-not-log-Not-Secure-marker.patch +++ b/leaf-server/minecraft-patches/features/0037-Do-not-log-Not-Secure-marker.patch @@ -7,10 +7,10 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 8017266123a91e5bd46ae0d39a35cf2e6cbb390f..c5ab58c890c7c55f2ad75560269663d3fd5a6aa3 100644 +index 39b977927a22956634b7c31818df0544814004fc..d0b12d91686592149a8a3e33677eb2e26e19624e 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1274,7 +1274,7 @@ public abstract class PlayerList { +@@ -1258,7 +1258,7 @@ public abstract class PlayerList { public void broadcastChatMessage(PlayerChatMessage message, Predicate shouldFilterMessageTo, @Nullable ServerPlayer sender, ChatType.Bound boundChatType, @Nullable Function unsignedFunction) { // Paper end boolean flag = this.verifyChatTrusted(message); diff --git a/leaf-server/minecraft-patches/features/0038-Do-not-log-disconnections-with-null-id.patch b/leaf-server/minecraft-patches/features/0038-Do-not-log-disconnections-with-null-id.patch index cd604663..b5c0489c 100644 --- a/leaf-server/minecraft-patches/features/0038-Do-not-log-disconnections-with-null-id.patch +++ b/leaf-server/minecraft-patches/features/0038-Do-not-log-disconnections-with-null-id.patch @@ -17,10 +17,10 @@ Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) This can help to hide annoying scanning bots from showing up in console. diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 7950f4f88d8a83ed5610b7af4e134557d32da3f0..27fa7bbfc64dd103b7cd1c1216482af3719e3dbb 100644 +index ebf4d4516233c002b33084f1679044b23869d848..5bac1c0ba691e516f2d603583971df7fe7ac212c 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -145,6 +145,15 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -124,6 +124,15 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, public void disconnect(Component reason) { try { diff --git a/leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch b/leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch index a45f86c4..d021899b 100644 --- a/leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch +++ b/leaf-server/minecraft-patches/features/0046-Reduce-array-allocations.patch @@ -152,10 +152,10 @@ index a9c2f419200483673f6743ed94af110a8e875e71..617eb1b9d30d499124576c5d7cb51525 return ret; } diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 45e4a7356e51e9c50d440782b55d1cbfc4b76f96..f752dceea48ed8264ae4cb60fdf2390f0e5019e1 100644 +index 8df0dbadca1dc72ac8d267654414044eb988ee43..784a08d0aed30fd0362e408aaa5772003021c0ad 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1166,7 +1166,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1100,7 +1100,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.getInventory().getNonEquipmentItems().set(i, net.minecraft.world.item.ItemStack.EMPTY); } } @@ -165,10 +165,10 @@ index 45e4a7356e51e9c50d440782b55d1cbfc4b76f96..f752dceea48ed8264ae4cb60fdf2390f this.getInventory().equipment.set(value, net.minecraft.world.item.ItemStack.EMPTY); } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index f953fa6adb112bc9da34cfb72045975f87c5f021..a07310aebd8406af27864358e15715fcc7694329 100644 +index 5dba2bdd91e5dc775e0727b99aff02c892eff733..38376506f8b886ed66ec48b1a78dede2a7cabe99 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2784,7 +2784,7 @@ public class ServerGamePacketListenerImpl +@@ -2782,7 +2782,7 @@ public class ServerGamePacketListenerImpl // SPIGOT-7136 - Allays if (target instanceof net.minecraft.world.entity.animal.allay.Allay || target instanceof net.minecraft.world.entity.animal.horse.AbstractHorse) { // Paper - Fix horse armor desync ServerGamePacketListenerImpl.this.send(new net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket( diff --git a/leaf-server/minecraft-patches/features/0071-Spread-out-sending-all-player-info.patch b/leaf-server/minecraft-patches/features/0071-Spread-out-sending-all-player-info.patch index da79e576..669f2bf3 100644 --- a/leaf-server/minecraft-patches/features/0071-Spread-out-sending-all-player-info.patch +++ b/leaf-server/minecraft-patches/features/0071-Spread-out-sending-all-player-info.patch @@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 186e0a6e565d29572f5d4771a68e4a9cb2bd45de..91d4a5f7685296e397c1c341813542fd13eaf168 100644 +index edefdd4be2b3af69c416ad32e2574865fa27da34..537d433dd7c301444b15327104b0c605d5833448 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -113,6 +113,7 @@ public abstract class PlayerList { @@ -64,7 +64,7 @@ index 186e0a6e565d29572f5d4771a68e4a9cb2bd45de..91d4a5f7685296e397c1c341813542fd this.server.getCustomBossEvents().onPlayerDisconnect(player); UUID uuid = player.getUUID(); ServerPlayer serverPlayer = this.playersByUUID.get(uuid); -@@ -720,6 +723,7 @@ public abstract class PlayerList { +@@ -687,6 +690,7 @@ public abstract class PlayerList { player.stopRiding(); // CraftBukkit this.players.remove(player); this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot @@ -72,7 +72,7 @@ index 186e0a6e565d29572f5d4771a68e4a9cb2bd45de..91d4a5f7685296e397c1c341813542fd player.level().removePlayerImmediately(player, reason); // TeleportTransition teleportTransition = player.findRespawnPositionAndUseSpawnBlock(!keepInventory, TeleportTransition.DO_NOTHING); // ServerLevel level = teleportTransition.newLevel(); -@@ -798,6 +802,7 @@ public abstract class PlayerList { +@@ -765,6 +769,7 @@ public abstract class PlayerList { this.players.add(serverPlayer); this.playersByName.put(serverPlayer.getScoreboardName().toLowerCase(java.util.Locale.ROOT), serverPlayer); // Spigot this.playersByUUID.put(serverPlayer.getUUID(), serverPlayer); @@ -80,7 +80,7 @@ index 186e0a6e565d29572f5d4771a68e4a9cb2bd45de..91d4a5f7685296e397c1c341813542fd } // serverPlayer.initInventoryMenu(); serverPlayer.setHealth(serverPlayer.getHealth()); -@@ -900,18 +905,58 @@ public abstract class PlayerList { +@@ -867,18 +872,58 @@ public abstract class PlayerList { } public void tick() { diff --git a/leaf-server/minecraft-patches/features/0072-Optimize-player-list-for-sending-player-info.patch b/leaf-server/minecraft-patches/features/0072-Optimize-player-list-for-sending-player-info.patch index 9f290372..8e5a5365 100644 --- a/leaf-server/minecraft-patches/features/0072-Optimize-player-list-for-sending-player-info.patch +++ b/leaf-server/minecraft-patches/features/0072-Optimize-player-list-for-sending-player-info.patch @@ -37,10 +37,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 91d4a5f7685296e397c1c341813542fd13eaf168..8e7c77174750807bc0e925b100ff73a7bedd76e9 100644 +index 537d433dd7c301444b15327104b0c605d5833448..920ab7be58f9fcbc181690ef7b386b9bacfa5d5f 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -909,10 +909,19 @@ public abstract class PlayerList { +@@ -876,10 +876,19 @@ public abstract class PlayerList { ServerPlayer[] sendAllPlayerInfoBucket = this.sendAllPlayerInfoBuckets[this.sendAllPlayerInfoIn]; if (sendAllPlayerInfoBucket != null) { diff --git a/leaf-server/minecraft-patches/features/0074-Send-multiple-keep-alive-packets.patch b/leaf-server/minecraft-patches/features/0074-Send-multiple-keep-alive-packets.patch index 085254bb..2ba0d431 100644 --- a/leaf-server/minecraft-patches/features/0074-Send-multiple-keep-alive-packets.patch +++ b/leaf-server/minecraft-patches/features/0074-Send-multiple-keep-alive-packets.patch @@ -37,7 +37,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index ccbf60f546974692c2c840f4bce87e2c95d1866c..ddc89e8960f7dc2f75f0e03ccbe6eda96a0499e2 100644 +index 911ce7fcdb7b60880e5502b1a6c9f5bd07c04fd1..31091dd52172d447f98497097d8dabdfef720362 100644 --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -38,10 +38,11 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -51,8 +51,8 @@ index ccbf60f546974692c2c840f4bce87e2c95d1866c..ddc89e8960f7dc2f75f0e03ccbe6eda9 private boolean closed = false; + private it.unimi.dsi.fastutil.longs.LongList keepAlives = new it.unimi.dsi.fastutil.longs.LongArrayList(); // Gale - Purpur - send multiple keep-alive packets private volatile int latency; // Paper - improve keepalives - make volatile + private final io.papermc.paper.util.KeepAlive keepAlive; // Paper - improve keepalives private volatile boolean suspendFlushingOnServerThread = false; - // CraftBukkit start @@ -50,7 +51,10 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack public boolean processedDisconnect; // CraftBukkit end @@ -63,12 +63,12 @@ index ccbf60f546974692c2c840f4bce87e2c95d1866c..ddc89e8960f7dc2f75f0e03ccbe6eda9 + private static final long KEEPALIVE_LIMIT = KEEPALIVE_LIMIT_IN_SECONDS * 1000; + // Gale end - Purpur - send multiple keep-alive packets protected static final net.minecraft.resources.ResourceLocation MINECRAFT_BRAND = net.minecraft.resources.ResourceLocation.withDefaultNamespace("brand"); // Paper - Brand support + public @Nullable String playerBrand; // Paper - public ServerCommonPacketListenerImpl(MinecraftServer server, Connection connection, CommonListenerCookie cookie, net.minecraft.server.level.ServerPlayer player) { // CraftBukkit -@@ -122,6 +126,18 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -93,6 +97,18 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack // Paper start - improve keepalives long now = System.nanoTime(); - net.minecraft.server.level.ServerPlayer.PendingKeepAlive pending = this.player.pendingKeepAlives.peek(); + io.papermc.paper.util.KeepAlive.PendingKeepAlive pending = this.keepAlive.pendingKeepAlives.peek(); + // Gale start - Purpur - send multiple keep-alive packets + if (org.galemc.gale.configuration.GaleGlobalConfiguration.get().misc.keepalive.sendMultiple) { + if (this.keepAlivePending && !keepAlives.isEmpty() && keepAlives.contains(packet.getId())) { @@ -82,17 +82,17 @@ index ccbf60f546974692c2c840f4bce87e2c95d1866c..ddc89e8960f7dc2f75f0e03ccbe6eda9 + } else { + // Gale end - Purpur - send multiple keep-alive packets if (pending != null && pending.challengeId() == packet.getId()) { - this.player.pendingKeepAlives.remove(pending); + this.keepAlive.pendingKeepAlives.remove(pending); -@@ -133,6 +149,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack - this.latency = this.player.pingCalculator5s.getAvgLatencyMS(); +@@ -104,6 +120,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + this.latency = this.keepAlive.pingCalculator5s.getAvgLatencyMS(); return; } + } // Gale - Purpur - send multiple keep-alive packets - for (java.util.Iterator itr = this.player.pendingKeepAlives.iterator(); itr.hasNext();) { - net.minecraft.server.level.ServerPlayer.PendingKeepAlive ka = itr.next(); -@@ -274,6 +291,23 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + for (java.util.Iterator itr = this.keepAlive.pendingKeepAlives.iterator(); itr.hasNext();) { + io.papermc.paper.util.KeepAlive.PendingKeepAlive ka = itr.next(); +@@ -177,6 +194,23 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack protected void keepConnectionAlive() { long millis = Util.getMillis(); // Paper start - improve keepalives @@ -100,10 +100,10 @@ index ccbf60f546974692c2c840f4bce87e2c95d1866c..ddc89e8960f7dc2f75f0e03ccbe6eda9 + if (org.galemc.gale.configuration.GaleGlobalConfiguration.get().misc.keepalive.sendMultiple) { + if (this.checkIfClosed(millis) && !this.processedDisconnect) { + long currTime = System.nanoTime(); -+ if ((currTime - this.player.lastKeepAliveTx) >= java.util.concurrent.TimeUnit.SECONDS.toNanos(1L)) { // 1 second -+ this.player.lastKeepAliveTx = currTime; ++ if ((currTime - this.keepAlive.lastKeepAliveTx) >= java.util.concurrent.TimeUnit.SECONDS.toNanos(1L)) { // 1 second ++ this.keepAlive.lastKeepAliveTx = currTime; + if (this.keepAlivePending && !this.processedDisconnect && keepAlives.size() * 1000L >= KEEPALIVE_LIMIT) { -+ this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); ++ this.disconnect(TIMEOUT_DISCONNECTION_MESSAGE, io.papermc.paper.connection.DisconnectionReason.TIMEOUT); + } else if (this.checkIfClosed(millis)) { + this.keepAlivePending = true; + this.keepAlives.add(millis); // currentTime is ID @@ -116,7 +116,7 @@ index ccbf60f546974692c2c840f4bce87e2c95d1866c..ddc89e8960f7dc2f75f0e03ccbe6eda9 if (this.checkIfClosed(millis) && !this.processedDisconnect) { long currTime = System.nanoTime(); -@@ -292,6 +326,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -195,6 +229,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack // Paper end - improve keepalives } } @@ -124,3 +124,10 @@ index ccbf60f546974692c2c840f4bce87e2c95d1866c..ddc89e8960f7dc2f75f0e03ccbe6eda9 } private boolean checkIfClosed(long time) { +@@ -372,4 +407,4 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + protected CommonListenerCookie createCookie(ClientInformation clientInformation) { + return new CommonListenerCookie(this.playerProfile(), this.latency, clientInformation, this.transferred, this.playerBrand, this.keepAlive); // Paper + } +-} +\ No newline at end of file ++} diff --git a/leaf-server/minecraft-patches/features/0075-Make-slow-login-timeout-configurable.patch b/leaf-server/minecraft-patches/features/0075-Make-slow-login-timeout-configurable.patch index e011ea6a..ae37bf19 100644 --- a/leaf-server/minecraft-patches/features/0075-Make-slow-login-timeout-configurable.patch +++ b/leaf-server/minecraft-patches/features/0075-Make-slow-login-timeout-configurable.patch @@ -7,17 +7,16 @@ License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 27fa7bbfc64dd103b7cd1c1216482af3719e3dbb..dc225eaa0daf238e091a0cf63a42158a30ecb7f0 100644 +index 5bac1c0ba691e516f2d603583971df7fe7ac212c..f9fad100d3e5e4b44a5b0f88e288e6fac7a250f7 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -126,7 +126,11 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, - this.finishLoginAndWaitForClient(this.authenticatedProfile); - } - +@@ -105,7 +105,10 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, + } + public void tickTimeout() { + // Paper end - login cookie API - if (this.tick++ == 600) { + // Gale start - make slow login timeout configurable + int slowLoginTimeout = org.galemc.gale.configuration.GaleGlobalConfiguration.get().misc.premiumAccountSlowLoginTimeout; -+ + if (this.tick++ >= (slowLoginTimeout < 1 ? MAX_TICKS_BEFORE_LOGIN : slowLoginTimeout)) { + // Gale end - make slow login timeout configurable this.disconnect(Component.translatable("multiplayer.disconnect.slow_login")); diff --git a/leaf-server/minecraft-patches/features/0078-Broadcast-crit-animations-as-the-entity-being-critte.patch b/leaf-server/minecraft-patches/features/0078-Broadcast-crit-animations-as-the-entity-being-critte.patch index f1edc252..b27da753 100644 --- a/leaf-server/minecraft-patches/features/0078-Broadcast-crit-animations-as-the-entity-being-critte.patch +++ b/leaf-server/minecraft-patches/features/0078-Broadcast-crit-animations-as-the-entity-being-critte.patch @@ -13,10 +13,10 @@ As part of: MultiPaper (https://github.com/MultiPaper/MultiPaper) Licensed under: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index f752dceea48ed8264ae4cb60fdf2390f0e5019e1..9b715b5848b33dd023feccfa93c08924c92fbe13 100644 +index 784a08d0aed30fd0362e408aaa5772003021c0ad..bbe123fd18fe97ae93bf562f32af73cdde722f70 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -2181,12 +2181,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2115,12 +2115,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @Override public void crit(Entity entityHit) { diff --git a/leaf-server/minecraft-patches/features/0091-Reduce-RandomSource-instances.patch b/leaf-server/minecraft-patches/features/0091-Reduce-RandomSource-instances.patch index dac5e4e2..1b56313e 100644 --- a/leaf-server/minecraft-patches/features/0091-Reduce-RandomSource-instances.patch +++ b/leaf-server/minecraft-patches/features/0091-Reduce-RandomSource-instances.patch @@ -26,10 +26,10 @@ index 92a820d48057ffe2ef35919341b6cdf605ca939e..b9b1bf351070cd2a744cdb683974fb2a double d1 = center.y - maxRange; double d2 = center.x + maxRange; diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 9b715b5848b33dd023feccfa93c08924c92fbe13..99eaa04bfcd2d37d3e49513e20bb5037119ef84d 100644 +index bbe123fd18fe97ae93bf562f32af73cdde722f70..feb4f7c70220e9c48a17a815631298bcb8366ded 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -562,7 +562,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -496,7 +496,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc long l1 = l * l; int i = l1 > 2147483647L ? Integer.MAX_VALUE : (int)l1; int coprime = this.getCoprime(i); diff --git a/leaf-server/minecraft-patches/features/0096-Pufferfish-Dynamic-Activation-of-Brain.patch b/leaf-server/minecraft-patches/features/0096-Pufferfish-Dynamic-Activation-of-Brain.patch index 71c0dcd7..91e17e8f 100644 --- a/leaf-server/minecraft-patches/features/0096-Pufferfish-Dynamic-Activation-of-Brain.patch +++ b/leaf-server/minecraft-patches/features/0096-Pufferfish-Dynamic-Activation-of-Brain.patch @@ -85,7 +85,7 @@ index ad114ca013e0d09d40755acbe916586868a519ed..3f70fca36f67fa421314ff92d372a971 if (!tickRateManager.isEntityFrozen(entity)) { entity.checkDespawn(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index e457dc20f76d813c32225733af0b29646d501202..57e669eeb2a05805b8ed81311344bc27292608f3 100644 +index 96341ee17591135d77d78c94814313b66eed4c3d..28e2ad1238651b8adb47b77763b0c8ae8172fe8a 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -364,6 +364,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -98,7 +98,7 @@ index e457dc20f76d813c32225733af0b29646d501202..57e669eeb2a05805b8ed81311344bc27 // Paper start - EAR 2 public final boolean defaultActivationState; diff --git a/net/minecraft/world/entity/EntityType.java b/net/minecraft/world/entity/EntityType.java -index b87c6da5272becfa1159e8352f5be5491824f66f..9dc5a7e9fdb83d98c3554fea064b06f022da4496 100644 +index 96e1f8f40a0af4350155f192ac2126b523c9f0f5..388689c44cf63ade939e271d490051c9b3fe8034 100644 --- a/net/minecraft/world/entity/EntityType.java +++ b/net/minecraft/world/entity/EntityType.java @@ -1085,6 +1085,7 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -299,10 +299,10 @@ index dd6666bd8b8df4148a1557627ce2a6ddab245ed6..6a9d3b749e251d3dac6fda13318bf5a0 super.customServerAiStep(level); if ((this.tickCount + this.getId()) % 120 == 0) { diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 73214ccad93ccd186c149e8ce8913eb0e3fa324a..9b9514362f32ab79816678ce4be25a4a87fe49aa 100644 +index 6cf2af33d22d3df8374746f5926f3f2d5093431d..f37759161b2a682612c6676cdd0d15908259776c 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -178,6 +178,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -177,6 +177,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler (villager, poiType) -> poiType.is(PoiTypes.MEETING) ); @@ -311,7 +311,7 @@ index 73214ccad93ccd186c149e8ce8913eb0e3fa324a..9b9514362f32ab79816678ce4be25a4a public Villager(EntityType entityType, Level level) { this(entityType, level, VillagerType.PLAINS); } -@@ -286,6 +288,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -285,6 +287,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Paper end - EAR 2 @@ -319,7 +319,7 @@ index 73214ccad93ccd186c149e8ce8913eb0e3fa324a..9b9514362f32ab79816678ce4be25a4a @Override protected void customServerAiStep(ServerLevel level) { // Paper start - EAR 2 -@@ -293,7 +296,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -292,7 +295,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } protected void customServerAiStep(ServerLevel level, final boolean inactive) { // Paper end - EAR 2 diff --git a/leaf-server/minecraft-patches/features/0098-Purpur-Server-Minecraft-Changes.patch b/leaf-server/minecraft-patches/features/0098-Purpur-Server-Minecraft-Changes.patch index 41a80b3b..7580ae7c 100644 --- a/leaf-server/minecraft-patches/features/0098-Purpur-Server-Minecraft-Changes.patch +++ b/leaf-server/minecraft-patches/features/0098-Purpur-Server-Minecraft-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur Server Minecraft Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: a112b6aca718e4500a6d48ca9d7158faf0f4adf9 +Commit: 591baf2648d0f75ffecc52f1d169348af35246dd Patches listed below are removed in this patch, They exists in Gale or Leaf: * "net/minecraft/CrashReport.java.patch" @@ -278,10 +278,10 @@ index 17f33a309ead525975a3090514a6367260f0af09..f4360d9472ba344f2e7afd6d798d313d Commands.literal("export") .then( diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java -index 34524dc5a503bebcec99ada0d9560d6f4df48cdf..1014ab2aeb5e496124c99c938538e88d75561cd5 100644 +index 8bab2c26e10e8495fd39be470bcb02917fe56f40..e72eda830644851656fae3118c513d7bd701be45 100644 --- a/net/minecraft/network/Connection.java +++ b/net/minecraft/network/Connection.java -@@ -578,11 +578,20 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -579,11 +579,20 @@ public class Connection extends SimpleChannelInboundHandler> { private static final int MAX_PER_TICK = io.papermc.paper.configuration.GlobalConfiguration.get().misc.maxJoinsPerTick; // Paper - Buffer joins to world private static int joinAttemptsThisTick; // Paper - Buffer joins to world private static int currTick; // Paper - Buffer joins to world @@ -478,7 +478,7 @@ index 9da9ab3b835a8dcc7e1da286be1de88a3f0240fa..4b8c9aaf1d143bc38f52f646e4e73b56 for (ServerPlayer serverPlayer : players) { diff --git a/net/minecraft/server/commands/GiveCommand.java b/net/minecraft/server/commands/GiveCommand.java -index ea9db57a1fe2f11739ceb062ea7cce15776f959a..a919d91eeaaeef0f79190cc5e78e4f8b2fb468dd 100644 +index adba92a9ebef64561147427d1339f70e2701d93c..cbe614bb66679f9bda3ecb13a034432fbac7317d 100644 --- a/net/minecraft/server/commands/GiveCommand.java +++ b/net/minecraft/server/commands/GiveCommand.java @@ -69,6 +69,7 @@ public class GiveCommand { @@ -487,7 +487,7 @@ index ea9db57a1fe2f11739ceb062ea7cce15776f959a..a919d91eeaaeef0f79190cc5e78e4f8b boolean flag = serverPlayer.getInventory().add(itemStack1); + if (org.purpurmc.purpur.PurpurConfig.disableGiveCommandDrops) continue; // Purpur - add config option for toggling give command dropping if (flag && itemStack1.isEmpty()) { - ItemEntity itemEntity = serverPlayer.drop(itemStack, false); + ItemEntity itemEntity = serverPlayer.drop(itemStack, false, false, false, null); // Paper - do not fire PlayerDropItemEvent for /give command if (itemEntity != null) { diff --git a/net/minecraft/server/dedicated/DedicatedServer.java b/net/minecraft/server/dedicated/DedicatedServer.java index ca1406178cfb1a5a10947872585e2dcf3059b460..87fc8861948b50361ec04c5a23406d3abdec6eac 100644 @@ -925,12 +925,12 @@ index 3f70fca36f67fa421314ff92d372a97112a19025..95c128f028c3cce7d0b37821a6e75208 } // Paper end - Fix merchant inventory not closing on entity removal diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de502110cc 100644 +index feb4f7c70220e9c48a17a815631298bcb8366ded..e217410145f7889ab4141947fc32d9d576a20326 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -430,6 +430,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -428,6 +428,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc + public boolean isRealPlayer; // Paper public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent - public @Nullable String clientBrandName = null; // Paper - Brand support public @Nullable org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event + public boolean purpurClient = false; // Purpur - Purpur client support + private boolean tpsBar = false; // Purpur - Implement TPSBar @@ -939,7 +939,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de // Paper start - rewrite chunk system private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -@@ -627,6 +631,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -561,6 +565,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.respawnConfig = input.read("respawn", ServerPlayer.RespawnConfig.CODEC).orElse(null); this.spawnExtraParticlesOnFall = input.getBooleanOr("spawn_extra_particles_on_fall", false); this.raidOmenPosition = input.read("raid_omen_position", BlockPos.CODEC).orElse(null); @@ -950,7 +950,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de } @Override -@@ -644,6 +652,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -578,6 +586,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc output.storeNullable("raid_omen_position", BlockPos.CODEC, this.raidOmenPosition); this.saveEnderPearls(output); this.getBukkitEntity().setExtraData(output); // CraftBukkit @@ -960,7 +960,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de } private void saveParentVehicle(ValueOutput output) { -@@ -849,6 +860,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -783,6 +794,15 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this, true); @@ -976,7 +976,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de } private void updatePlayerAttributes() { -@@ -1140,6 +1160,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1074,6 +1094,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc // Paper - moved up to sendClientboundPlayerCombatKillPacket() sendClientboundPlayerCombatKillPacket(event.getShowDeathMessages(), deathScreenMessage); // Paper - Expand PlayerDeathEvent Team team = this.getTeam(); @@ -984,7 +984,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de if (team == null || team.getDeathMessageVisibility() == Team.Visibility.ALWAYS) { this.server.getPlayerList().broadcastSystemMessage(deathMessage, false); } else if (team.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) { -@@ -1246,6 +1267,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1180,6 +1201,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc if (this.isInvulnerableTo(level, damageSource)) { return false; } else { @@ -1003,7 +1003,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de Entity entity = damageSource.getEntity(); if (!( // Paper - split the if statement. If below statement is false, hurtServer would not have been evaluated. Return false. !(entity instanceof Player player && !this.canHarmPlayer(player)) -@@ -1486,6 +1519,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1420,6 +1453,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc serverLevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); this.unsetRemoved(); // CraftBukkit end @@ -1011,7 +1011,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de this.setServerLevel(level); this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); -@@ -1601,7 +1635,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1535,7 +1569,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc new AABB(vec3.x() - 8.0, vec3.y() - 5.0, vec3.z() - 8.0, vec3.x() + 8.0, vec3.y() + 5.0, vec3.z() + 8.0), monster -> monster.isPreventingPlayerRest(this.level(), this) ); @@ -1020,7 +1020,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de return Either.left(Player.BedSleepingProblem.NOT_SAFE); } } -@@ -1638,7 +1672,19 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1572,7 +1606,19 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc CriteriaTriggers.SLEPT_IN_BED.trigger(this); }); if (!this.level().canSleepThroughNights()) { @@ -1041,7 +1041,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de } this.level().updateSleepingPlayerList(); -@@ -1730,6 +1776,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1664,6 +1710,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @Override public void openTextEdit(SignBlockEntity signEntity, boolean isFrontText) { @@ -1049,7 +1049,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de this.connection.send(new ClientboundBlockUpdatePacket(this.level(), signEntity.getBlockPos())); this.connection.send(new ClientboundOpenSignEditorPacket(signEntity.getBlockPos(), isFrontText)); } -@@ -2039,6 +2086,26 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1973,6 +2020,26 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -1076,7 +1076,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de @Override public void displayClientMessage(Component chatComponent, boolean actionBar) { this.sendSystemMessage(chatComponent, actionBar); -@@ -2263,6 +2330,20 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2197,6 +2264,20 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc ); } @@ -1097,7 +1097,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de public void sendSystemMessage(Component mesage) { this.sendSystemMessage(mesage, false); } -@@ -2401,8 +2482,68 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2335,8 +2416,68 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -1166,7 +1166,7 @@ index 99eaa04bfcd2d37d3e49513e20bb5037119ef84d..c6fafc3cb31d0a3dbbeaf8a9493d70de public ServerStatsCounter getStats() { return this.stats; } -@@ -3029,4 +3170,56 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2963,4 +3104,56 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc return (org.bukkit.craftbukkit.entity.CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -1272,36 +1272,23 @@ index 6734756d7a51e635a50a47577f9e6b6f8111db51..c4a4f08272b34f72dea4feaaeb66d153 + // Purpur end - Shift right click to use exp for mending } diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index ddc89e8960f7dc2f75f0e03ccbe6eda96a0499e2..8a4c8e2fb86274b5bf95bda510029f4c5077d836 100644 +index 31091dd52172d447f98497097d8dabdfef720362..eb725c1b6da0c5ef48fa07d79070950f2b45e30e 100644 --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -56,6 +56,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack - private static final long KEEPALIVE_LIMIT = KEEPALIVE_LIMIT_IN_SECONDS * 1000; +@@ -57,6 +57,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack // Gale end - Purpur - send multiple keep-alive packets protected static final net.minecraft.resources.ResourceLocation MINECRAFT_BRAND = net.minecraft.resources.ResourceLocation.withDefaultNamespace("brand"); // Paper - Brand support + public @Nullable String playerBrand; // Paper + protected static final net.minecraft.resources.ResourceLocation PURPUR_CLIENT = net.minecraft.resources.ResourceLocation.fromNamespaceAndPath("purpur", "client"); // Purpur - Purpur client support - public ServerCommonPacketListenerImpl(MinecraftServer server, Connection connection, CommonListenerCookie cookie, net.minecraft.server.level.ServerPlayer player) { // CraftBukkit + public ServerCommonPacketListenerImpl(MinecraftServer server, Connection connection, CommonListenerCookie cookie) { this.server = server; -@@ -215,6 +216,12 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack - return; - } - -+ // Purpur start - Purpur client support -+ if (identifier.equals(PURPUR_CLIENT)) { -+ this.player.purpurClient = true; -+ } -+ // Purpur end - Purpur client support -+ - if (identifier.equals(MINECRAFT_BRAND)) { - this.player.clientBrandName = new net.minecraft.network.FriendlyByteBuf(io.netty.buffer.Unpooled.wrappedBuffer(data)).readUtf(256); - } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77ebf11d142 100644 +index 38376506f8b886ed66ec48b1a78dede2a7cabe99..e4114d44d089f8434461f2653a787ff0d3595a04 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -324,6 +324,20 @@ public class ServerGamePacketListenerImpl - this.tickEndEvent = new io.papermc.paper.event.packet.ClientTickEndEvent(player.getBukkitEntity()); // Paper - add client tick end event +@@ -326,6 +326,20 @@ public class ServerGamePacketListenerImpl + this.playerGameConnection = new io.papermc.paper.connection.PaperPlayerGameConnection(this); // Paper } + // Purpur start - AFK API @@ -1321,7 +1308,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e @Override public void tick() { if (this.ackBlockChangesUpTo > -1) { -@@ -382,6 +396,12 @@ public class ServerGamePacketListenerImpl +@@ -384,6 +398,12 @@ public class ServerGamePacketListenerImpl if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > this.server.getPlayerIdleTimeout() * 1000L * 60L && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits @@ -1334,7 +1321,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854 this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } -@@ -651,6 +671,8 @@ public class ServerGamePacketListenerImpl +@@ -653,6 +673,8 @@ public class ServerGamePacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -1343,7 +1330,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -730,6 +752,7 @@ public class ServerGamePacketListenerImpl +@@ -732,6 +754,7 @@ public class ServerGamePacketListenerImpl PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { @@ -1351,7 +1338,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1268,6 +1291,10 @@ public class ServerGamePacketListenerImpl +@@ -1270,6 +1293,10 @@ public class ServerGamePacketListenerImpl final int maxBookPageSize = pageMax.intValue(); final double multiplier = Math.clamp(io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier, 0.3D, 1D); long byteAllowed = maxBookPageSize; @@ -1362,7 +1349,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e for (final String page : pageList) { final int byteLength = page.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; byteTotal += byteLength; -@@ -1292,7 +1319,8 @@ public class ServerGamePacketListenerImpl +@@ -1294,7 +1321,8 @@ public class ServerGamePacketListenerImpl } if (byteTotal > byteAllowed) { @@ -1372,7 +1359,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect return; } -@@ -1311,31 +1339,45 @@ public class ServerGamePacketListenerImpl +@@ -1313,31 +1341,45 @@ public class ServerGamePacketListenerImpl Optional optional = packet.title(); optional.ifPresent(list::add); list.addAll(packet.pages()); @@ -1422,7 +1409,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e itemStack.set( DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getName().getString(), 0, list, true) -@@ -1349,6 +1391,16 @@ public class ServerGamePacketListenerImpl +@@ -1351,6 +1393,16 @@ public class ServerGamePacketListenerImpl return this.player.isTextFilteringEnabled() ? Filterable.passThrough(filteredText.filteredOrEmpty()) : Filterable.from(filteredText); } @@ -1439,7 +1426,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e @Override public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); -@@ -1388,7 +1440,15 @@ public class ServerGamePacketListenerImpl +@@ -1390,7 +1442,15 @@ public class ServerGamePacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); @@ -1456,7 +1443,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause } else { ServerLevel serverLevel = this.player.level(); -@@ -1570,7 +1630,7 @@ public class ServerGamePacketListenerImpl +@@ -1572,7 +1632,7 @@ public class ServerGamePacketListenerImpl movedWrongly = true; if (event.getLogWarning()) // Paper end @@ -1465,7 +1452,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e } // Paper } -@@ -1635,6 +1695,8 @@ public class ServerGamePacketListenerImpl +@@ -1637,6 +1697,8 @@ public class ServerGamePacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -1474,7 +1461,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1690,6 +1752,13 @@ public class ServerGamePacketListenerImpl +@@ -1692,6 +1754,13 @@ public class ServerGamePacketListenerImpl this.player.tryResetCurrentImpulseContext(); } @@ -1488,7 +1475,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e this.player.checkMovementStatistics(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1707,6 +1776,17 @@ public class ServerGamePacketListenerImpl +@@ -1709,6 +1778,17 @@ public class ServerGamePacketListenerImpl } } @@ -1506,7 +1493,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e private boolean shouldCheckPlayerMovement(boolean isElytraMovement) { if (this.isSingleplayerOwner()) { return false; -@@ -2104,6 +2184,7 @@ public class ServerGamePacketListenerImpl +@@ -2106,6 +2186,7 @@ public class ServerGamePacketListenerImpl boolean cancelled; if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) { @@ -1514,7 +1501,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemInHand, hand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2755,6 +2836,7 @@ public class ServerGamePacketListenerImpl +@@ -2753,6 +2834,7 @@ public class ServerGamePacketListenerImpl AABB boundingBox = target.getBoundingBox(); if (this.player.canInteractWithEntity(boundingBox, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0))) { // Paper - configurable lenience value for interact range @@ -1522,7 +1509,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e packet.dispatch( new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand hand, ServerGamePacketListenerImpl.EntityInteraction entityInteraction, PlayerInteractEntityEvent event) { // CraftBukkit -@@ -2767,6 +2849,8 @@ public class ServerGamePacketListenerImpl +@@ -2765,6 +2847,8 @@ public class ServerGamePacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -1531,7 +1518,7 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a if ((target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && origItem != null && origItem == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().isEmpty() || !ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().is(origItem))) { target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it -@@ -3543,7 +3627,7 @@ public class ServerGamePacketListenerImpl +@@ -3541,7 +3625,7 @@ public class ServerGamePacketListenerImpl @Override public void handleChangeGameMode(ServerboundChangeGameModePacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); @@ -1540,11 +1527,24 @@ index a07310aebd8406af27864358e15715fcc7694329..acb1eda4a4b10006e1dd641ee41ee77e LOGGER.warn( "Player {} tried to change game mode to {} without required permissions", this.player.getGameProfile().getName(), +@@ -3753,6 +3837,12 @@ public class ServerGamePacketListenerImpl + return; + } + ++ // Purpur start - Purpur client support ++ if (identifier.equals(PURPUR_CLIENT)) { ++ this.player.purpurClient = true; ++ } ++ // Purpur end - Purpur client support ++ + if (identifier.equals(MINECRAFT_BRAND)) { + this.player.connection.playerBrand = new net.minecraft.network.FriendlyByteBuf(io.netty.buffer.Unpooled.wrappedBuffer(data)).readUtf(256); + } diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index dc225eaa0daf238e091a0cf63a42158a30ecb7f0..c61a94a08486cdeba84ccfbc58ef3cabd4a461d8 100644 +index f9fad100d3e5e4b44a5b0f88e288e6fac7a250f7..6d320ed179393e47398c44f2ba2b2285016f349e 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -319,7 +319,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -285,7 +285,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, ServerLoginPacketListenerImpl.LOGGER.warn("Failed to verify username but will let them in anyway!"); ServerLoginPacketListenerImpl.this.startClientVerification(ServerLoginPacketListenerImpl.this.createOfflineProfile(string1)); // Spigot } else { @@ -1554,7 +1554,7 @@ index dc225eaa0daf238e091a0cf63a42158a30ecb7f0..c61a94a08486cdeba84ccfbc58ef3cab } } catch (AuthenticationUnavailableException var4) { diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 0acfb86df4a350e41ea1646a38dad14d43f2cb1d..0f02eef9bcae59bf3df6471b10dbfa8252337140 100644 +index 1dad0f73adf361348466b3f0a0eb31143006b0e9..195e972dd9b3b5d29866c28cc88c80bae31916b4 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -412,6 +412,7 @@ public abstract class PlayerList { @@ -1573,16 +1573,7 @@ index 0acfb86df4a350e41ea1646a38dad14d43f2cb1d..0f02eef9bcae59bf3df6471b10dbfa82 ServerLevel serverLevel = player.level(); player.awardStat(Stats.LEAVE_GAME); // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it -@@ -684,7 +686,7 @@ public abstract class PlayerList { - // return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameProfile) - // ? Component.translatable("multiplayer.disconnect.server_full") - // : null; -- if (this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameProfile)) { -+ if (this.players.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameProfile))) { // Purpur - Allow player join full server by permission - event.disallow(org.bukkit.event.player.PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure - } - } -@@ -997,6 +999,20 @@ public abstract class PlayerList { +@@ -964,6 +966,20 @@ public abstract class PlayerList { } } @@ -1603,7 +1594,7 @@ index 0acfb86df4a350e41ea1646a38dad14d43f2cb1d..0f02eef9bcae59bf3df6471b10dbfa82 public void broadcastAll(Packet packet, ResourceKey dimension) { for (ServerPlayer serverPlayer : this.players) { if (serverPlayer.level().dimension() == dimension) { -@@ -1081,6 +1097,7 @@ public abstract class PlayerList { +@@ -1048,6 +1064,7 @@ public abstract class PlayerList { } else { b = (byte)(24 + permLevel); } @@ -1611,7 +1602,7 @@ index 0acfb86df4a350e41ea1646a38dad14d43f2cb1d..0f02eef9bcae59bf3df6471b10dbfa82 player.connection.send(new ClientboundEntityEventPacket(player, b)); } -@@ -1089,6 +1106,27 @@ public abstract class PlayerList { +@@ -1056,11 +1073,32 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -1638,7 +1629,13 @@ index 0acfb86df4a350e41ea1646a38dad14d43f2cb1d..0f02eef9bcae59bf3df6471b10dbfa82 + // Purpur end - Barrels and enderchests 6 rows } - public boolean isWhiteListed(GameProfile profile) { + // Paper start - whitelist verify event / login event + public LoginResult canBypassFullServerLogin(final GameProfile profile, final LoginResult currentResult) { +- final boolean shouldKick = this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(profile); ++ final boolean shouldKick = this.players.size() >= this.maxPlayers && !(/*player.hasPermission("purpur.joinfullserver") || */this.canBypassPlayerLimit(profile)); // Purpur - Allow player join full server by permission TODO: this hasn't worked for a while, so comment it out until we can reliably check perms of the player joining + final io.papermc.paper.event.player.PlayerServerFullCheckEvent fullCheckEvent = new io.papermc.paper.event.player.PlayerServerFullCheckEvent( + com.destroystokyo.paper.profile.CraftPlayerProfile.asBukkitMirror(profile), + io.papermc.paper.adventure.PaperAdventure.asAdventure(currentResult.message), diff --git a/net/minecraft/server/players/SleepStatus.java b/net/minecraft/server/players/SleepStatus.java index 2a7ae521654ad5c9f392baa5562e64bb71b13097..3a3e6992563236141db687084aeec9684437a7db 100644 --- a/net/minecraft/server/players/SleepStatus.java @@ -4598,10 +4595,10 @@ index 517c546cfc8eca2191df57289e6a22ac64fc867c..8964bb5098c0dc36741af3656af6bc0b } } diff --git a/net/minecraft/world/entity/animal/HappyGhast.java b/net/minecraft/world/entity/animal/HappyGhast.java -index 4e74d5b3076f50f9294553b453f5903ef32f1e8a..e04da94daced96a7eb9fdb01c551bea667b72d76 100644 +index f07dcf7d45b1b717faeae0c4129fb00a22fb7d57..9763a5e24e0fed9b49b6ac59911f6c9f8e893db5 100644 --- a/net/minecraft/world/entity/animal/HappyGhast.java +++ b/net/minecraft/world/entity/animal/HappyGhast.java -@@ -118,6 +118,47 @@ public class HappyGhast extends Animal { +@@ -124,6 +124,47 @@ public class HappyGhast extends Animal { this.removeAllGoals(goal -> true); } @@ -4649,7 +4646,7 @@ index 4e74d5b3076f50f9294553b453f5903ef32f1e8a..e04da94daced96a7eb9fdb01c551bea6 @Override protected void ageBoundaryReached() { if (this.isBaby()) { -@@ -141,7 +182,7 @@ public class HappyGhast extends Animal { +@@ -147,7 +188,7 @@ public class HappyGhast extends Animal { @Override protected float sanitizeScale(float scale) { @@ -11304,10 +11301,10 @@ index a621e08fe4f88fcfa8da83bc44b23fc2ffaa5918..ab320cf5a8c68fd239e81172a2f3909a Vec3 deltaMovement = Vex.this.getDeltaMovement(); Vex.this.setYRot(-((float)Mth.atan2(deltaMovement.x, deltaMovement.z)) * (180.0F / (float)Math.PI)); diff --git a/net/minecraft/world/entity/monster/Vindicator.java b/net/minecraft/world/entity/monster/Vindicator.java -index e12643c0a1aa9608c34cab96d5c04abc60428322..df95c6be4469eeefa248e5ef18cfaba3d4cdeea6 100644 +index 835b522a77fc4e1ec84bd5134e12233a02b66a66..7f70b2387842f65da4632f1a27669a02d4e0402d 100644 --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java -@@ -57,15 +57,56 @@ public class Vindicator extends AbstractIllager { +@@ -56,15 +56,56 @@ public class Vindicator extends AbstractIllager { super(entityType, level); } @@ -11364,7 +11361,7 @@ index e12643c0a1aa9608c34cab96d5c04abc60428322..df95c6be4469eeefa248e5ef18cfaba3 this.targetSelector.addGoal(1, new HurtByTargetGoal(this, Raider.class).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); -@@ -132,6 +173,11 @@ public class Vindicator extends AbstractIllager { +@@ -131,6 +172,11 @@ public class Vindicator extends AbstractIllager { RandomSource random = level.getRandom(); this.populateDefaultEquipmentSlots(random, difficulty); this.populateDefaultEquipmentEnchantments(level, random, difficulty); @@ -12348,10 +12345,10 @@ index e282b6ab6d0d1c11ee40f5f436bd50fa90ddc88b..d6ae13c19481ce33bfa0b6c9db632830 this.spawnCat(pos, level, true); } diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2fabcaf19 100644 +index f37759161b2a682612c6676cdd0d15908259776c..014bb5b6e82bb11b756430999522f4b8f9356d9f 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -179,6 +179,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -178,6 +178,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler ); public long nextGolemPanic = -1; // Pufferfish @@ -12360,7 +12357,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 public Villager(EntityType entityType, Level level) { this(entityType, level, VillagerType.PLAINS); -@@ -197,6 +199,103 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -196,6 +198,103 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.setVillagerData(this.getVillagerData().withType(villagerType).withProfession(level.registryAccess(), VillagerProfession.NONE)); } @@ -12464,7 +12461,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 @Override public Brain getBrain() { return (Brain)super.getBrain(); -@@ -230,7 +329,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -229,7 +328,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler villagerBrain.setSchedule(Schedule.VILLAGER_DEFAULT); villagerBrain.addActivityWithConditions( Activity.WORK, @@ -12473,7 +12470,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 ImmutableSet.of(Pair.of(MemoryModuleType.JOB_SITE, MemoryStatus.VALUE_PRESENT)) ); } -@@ -262,7 +361,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -261,7 +360,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public static AttributeSupplier.Builder createAttributes() { @@ -12482,7 +12479,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 } public boolean assignProfessionWhenSpawned() { -@@ -294,12 +393,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -293,12 +392,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler // Paper start - EAR 2 this.customServerAiStep(level, false); } @@ -12506,7 +12503,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 // Pufferfish end if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; -@@ -355,7 +463,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -354,7 +462,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return super.mobInteract(player, hand); } else if (this.isBaby()) { this.setUnhappy(); @@ -12515,7 +12512,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 } else { if (!this.level().isClientSide) { boolean isEmpty = this.getOffers().isEmpty(); -@@ -368,9 +476,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -367,9 +475,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (isEmpty) { @@ -12529,7 +12526,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 this.startTrading(player); } -@@ -507,7 +618,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -506,7 +617,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public void updateDemand() { for (MerchantOffer merchantOffer : this.getOffers()) { @@ -12538,7 +12535,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 } } -@@ -700,7 +811,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -699,7 +810,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -12547,7 +12544,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 } private boolean hungry() { -@@ -867,7 +978,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -866,7 +977,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public boolean hasFarmSeeds() { @@ -12556,7 +12553,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 } @Override -@@ -922,6 +1033,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -921,6 +1032,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public void spawnGolemIfNeeded(ServerLevel serverLevel, long gameTime, int minVillagerAmount) { @@ -12564,7 +12561,7 @@ index 6ecd99adc1c22681553714ff23e557b8f7854737..165d0f50e7818b6daf834507033feaa2 if (this.wantsToSpawnGolem(gameTime)) { AABB aabb = this.getBoundingBox().inflate(10.0, 10.0, 10.0); List entitiesOfClass = serverLevel.getEntitiesOfClass(Villager.class, aabb); -@@ -995,6 +1107,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -994,6 +1106,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -14238,7 +14235,7 @@ index 3acc2ae8533f19a6f9b2b6a1d96271f1047384a4..793c0a380b84d246db748be7e8807f1c return this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY); } diff --git a/net/minecraft/world/item/Items.java b/net/minecraft/world/item/Items.java -index cb27584b484c5103feb85e139a3dbf95a23a1236..b309312491bf822582d8cc182d609f7b74399ae8 100644 +index b89a7fae0321cbce09faf1503ddc57ca5acaa148..4d5a0b1bc794a3029b0724c6dddeffa6f549a7d5 100644 --- a/net/minecraft/world/item/Items.java +++ b/net/minecraft/world/item/Items.java @@ -383,7 +383,7 @@ public class Items { @@ -14250,7 +14247,7 @@ index cb27584b484c5103feb85e139a3dbf95a23a1236..b309312491bf822582d8cc182d609f7b public static final Item CREAKING_HEART = registerBlock(Blocks.CREAKING_HEART); public static final Item CHEST = registerBlock(Blocks.CHEST, properties -> properties.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY)); public static final Item CRAFTING_TABLE = registerBlock(Blocks.CRAFTING_TABLE); -@@ -2089,7 +2089,7 @@ public class Items { +@@ -2092,7 +2092,7 @@ public class Items { "sweet_berries", createBlockItemWithCustomItemName(Blocks.SWEET_BERRY_BUSH), new Item.Properties().food(Foods.SWEET_BERRIES) ); public static final Item GLOW_BERRIES = registerItem( diff --git a/leaf-server/minecraft-patches/features/0099-Fix-Pufferfish-and-Purpur-patches.patch b/leaf-server/minecraft-patches/features/0099-Fix-Pufferfish-and-Purpur-patches.patch index 7d30f106..dba3119d 100644 --- a/leaf-server/minecraft-patches/features/0099-Fix-Pufferfish-and-Purpur-patches.patch +++ b/leaf-server/minecraft-patches/features/0099-Fix-Pufferfish-and-Purpur-patches.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix Pufferfish and Purpur patches diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index db1f0031a6ae6ba1b9ea265043b87817e2c746f8..1aab4d41054f8e780e6c0ccdb96affee19068311 100644 +index f05fa801f35f4afcc93fcace6a98cee0fa3ec531..b567eed9e07e281c56ff707ad938661f37f4ee3f 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -277,7 +277,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop byteAllowed) { @@ -78,7 +78,7 @@ index 5031e4e9b59a1e013152f788b20c58646b30770f..1aaa94a2800687faa4d86698a4e1ad72 this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect return; diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index d8209037e988bc7a68f634a6650930bd1082c4d1..a2a4ad515a4ef0fa24948d0f47c5bd78ec7e6555 100644 +index fb387919e51504beafd2e7947faa41795df18100..0cdd3eb97e74aa3955f014a1f8f6a7d1580d323f 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -543,23 +543,36 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -128,7 +128,7 @@ index d8209037e988bc7a68f634a6650930bd1082c4d1..a2a4ad515a4ef0fa24948d0f47c5bd78 public Entity(EntityType entityType, Level level) { this.type = entityType; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index d7d6e0543dc26694891e4a9049b8162caadbf5e6..d59caf13e9066f2171c360e07a26122a540380a0 100644 +index dd5343287503e2818e083696a17362091d94e652..b536461c672c608aeeb690f41ea457fc57768e4f 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -1049,13 +1049,13 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin diff --git a/leaf-server/minecraft-patches/features/0102-Remove-vanilla-username-check.patch b/leaf-server/minecraft-patches/features/0102-Remove-vanilla-username-check.patch index a7e15204..a2c641da 100644 --- a/leaf-server/minecraft-patches/features/0102-Remove-vanilla-username-check.patch +++ b/leaf-server/minecraft-patches/features/0102-Remove-vanilla-username-check.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove vanilla username check diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index c61a94a08486cdeba84ccfbc58ef3cabd4a461d8..37bc11ba3746808307bc6a8c87cea392146c55b1 100644 +index 6d320ed179393e47398c44f2ba2b2285016f349e..79534beb5f4a3427078541fda287d9c950999c96 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -184,7 +184,8 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -163,7 +163,8 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, public void handleHello(ServerboundHelloPacket packet) { Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet"); // Paper start - Validate usernames diff --git a/leaf-server/minecraft-patches/features/0104-Remove-UseItemOnPacket-Too-Far-check.patch b/leaf-server/minecraft-patches/features/0104-Remove-UseItemOnPacket-Too-Far-check.patch index f45c3b83..957f5d01 100644 --- a/leaf-server/minecraft-patches/features/0104-Remove-UseItemOnPacket-Too-Far-check.patch +++ b/leaf-server/minecraft-patches/features/0104-Remove-UseItemOnPacket-Too-Far-check.patch @@ -7,10 +7,10 @@ This Check is added in 1.17.x -> 1.18.x that updated by Mojang. By removing this check, it gives ability for hackers to use some modules of hack clients. diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 1aaa94a2800687faa4d86698a4e1ad72bdaf15f3..d1245f54d55e4a3c406feef3cc2d5e25bb6346ce 100644 +index 4674760a18926e2e83c481defccf1a06df358b7d..6f7094004e2d38d3471c3582b3a10dfc7fce3b32 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2108,8 +2108,13 @@ public class ServerGamePacketListenerImpl +@@ -2110,8 +2110,13 @@ public class ServerGamePacketListenerImpl BlockPos blockPos = hitResult.getBlockPos(); if (this.player.canInteractWithBlock(blockPos, 1.0)) { Vec3 vec3 = location.subtract(Vec3.atCenterOf(blockPos)); diff --git a/leaf-server/minecraft-patches/features/0110-Slice-Smooth-Teleports.patch b/leaf-server/minecraft-patches/features/0110-Slice-Smooth-Teleports.patch index e9a42a6f..0231077b 100644 --- a/leaf-server/minecraft-patches/features/0110-Slice-Smooth-Teleports.patch +++ b/leaf-server/minecraft-patches/features/0110-Slice-Smooth-Teleports.patch @@ -9,10 +9,10 @@ Original project: https://github.com/Cryptite/Slice Co-authored-by: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 6d453bdf4f265c23e7e349d07d766553ef0a4fad..737cba1729e980f58afa5e5aa83908c64c3a1a45 100644 +index e217410145f7889ab4141947fc32d9d576a20326..1096bd9f5561f3bedd7939345844b03bbc895938 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -434,6 +434,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -432,6 +432,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc private boolean tpsBar = false; // Purpur - Implement TPSBar private boolean compassBar = false; // Purpur - Add compass command private boolean ramBar = false; // Purpur - Implement rambar commands @@ -21,10 +21,10 @@ index 6d453bdf4f265c23e7e349d07d766553ef0a4fad..737cba1729e980f58afa5e5aa83908c6 // Paper start - rewrite chunk system private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 7fdcdc311e5a3236df0c7d479d0e206e2fa15dd0..2f00e7899c36a2a34f810fc6083846eb3883131f 100644 +index 195e972dd9b3b5d29866c28cc88c80bae31916b4..bdc912f5330896e967cbef4e3e545ff5182e591e 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -794,11 +794,11 @@ public abstract class PlayerList { +@@ -761,11 +761,11 @@ public abstract class PlayerList { byte b = (byte)(keepInventory ? 1 : 0); ServerLevel serverLevel = serverPlayer.level(); LevelData levelData = serverLevel.getLevelData(); @@ -38,7 +38,7 @@ index 7fdcdc311e5a3236df0c7d479d0e206e2fa15dd0..2f00e7899c36a2a34f810fc6083846eb serverPlayer.connection.send(new ClientboundSetDefaultSpawnPositionPacket(level.getSharedSpawnPos(), level.getSharedSpawnAngle())); serverPlayer.connection.send(new ClientboundChangeDifficultyPacket(levelData.getDifficulty(), levelData.isDifficultyLocked())); serverPlayer.connection -@@ -886,6 +886,8 @@ public abstract class PlayerList { +@@ -853,6 +853,8 @@ public abstract class PlayerList { return serverPlayer; } diff --git a/leaf-server/minecraft-patches/features/0112-Leaves-Protocol-Core.patch b/leaf-server/minecraft-patches/features/0112-Leaves-Protocol-Core.patch index 63fd221a..4466ec0d 100644 --- a/leaf-server/minecraft-patches/features/0112-Leaves-Protocol-Core.patch +++ b/leaf-server/minecraft-patches/features/0112-Leaves-Protocol-Core.patch @@ -69,10 +69,10 @@ index 54bb75a2a128e7747ab01cb0d40c81fb4340ffd1..0fed0f181c4d1f31d01bdaa5dc9417cc this.tickables.get(i).run(); } diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 799aa6e869a9e471a2aa415904efb7e29be213c6..e2edd7b6c6f4c9bb0e42ea9332b96d7537bc801a 100644 +index 1096bd9f5561f3bedd7939345844b03bbc895938..900075e85f2085378389a974e500fc8acd25747e 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -440,6 +440,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -438,6 +438,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; private final ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.ViewDistanceHolder viewDistanceHolder = new ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.ViewDistanceHolder(); @@ -81,11 +81,11 @@ index 799aa6e869a9e471a2aa415904efb7e29be213c6..e2edd7b6c6f4c9bb0e42ea9332b96d75 @Override public final boolean moonrise$isRealPlayer() { return this.isRealPlayer; -diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 8a4c8e2fb86274b5bf95bda510029f4c5077d836..169d039a00339fc8eeb697ba03808f321ed4ad4c 100644 ---- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -183,6 +183,18 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index 6f7094004e2d38d3471c3582b3a10dfc7fce3b32..76ad04e021b840b1595bfe01d07f1d7943937281 100644 +--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -3809,6 +3809,18 @@ public class ServerGamePacketListenerImpl @Override public void handleCustomPayload(ServerboundCustomPayloadPacket packet) { @@ -103,8 +103,8 @@ index 8a4c8e2fb86274b5bf95bda510029f4c5077d836..169d039a00339fc8eeb697ba03808f32 + // Paper start if (packet.payload() instanceof net.minecraft.network.protocol.common.custom.BrandPayload(String brand)) { - this.player.clientBrandName = brand; -@@ -242,6 +254,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + this.playerBrand = brand; +@@ -3868,6 +3880,7 @@ public class ServerGamePacketListenerImpl final String channel = new String(data, from, length, java.nio.charset.StandardCharsets.US_ASCII); if (register) { this.getCraftPlayer().addChannel(channel); @@ -113,7 +113,7 @@ index 8a4c8e2fb86274b5bf95bda510029f4c5077d836..169d039a00339fc8eeb697ba03808f32 this.getCraftPlayer().removeChannel(channel); } diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index fe44069de549acc81a6037426a405d6fddb87897..0ed45220ce029e5ef538b86f89509f2d2156cbb9 100644 +index bdc912f5330896e967cbef4e3e545ff5182e591e..e3898b41c2d19940e08b60cdac28ab07161d3c50 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -346,6 +346,9 @@ public abstract class PlayerList { @@ -134,15 +134,7 @@ index fe44069de549acc81a6037426a405d6fddb87897..0ed45220ce029e5ef538b86f89509f2d // Paper end - Fix kick event leave message not being sent org.purpurmc.purpur.task.BossBarTask.removeFromAll(player.getBukkitEntity()); // Purpur - Implement TPSBar ServerLevel serverLevel = player.level(); -@@ -651,6 +655,7 @@ public abstract class PlayerList { - SocketAddress socketAddress = loginlistener.connection.getRemoteAddress(); - - ServerPlayer entity = new ServerPlayer(this.server, this.server.getLevel(Level.OVERWORLD), gameProfile, net.minecraft.server.level.ClientInformation.createDefault()); -+ entity.internalConnection = loginlistener.connection; // Leaves - protocol core - entity.transferCookieConnection = loginlistener; - org.bukkit.entity.Player player = entity.getBukkitEntity(); - org.bukkit.event.player.PlayerLoginEvent event = new org.bukkit.event.player.PlayerLoginEvent(player, loginlistener.connection.hostname, ((java.net.InetSocketAddress) socketAddress).getAddress(), ((java.net.InetSocketAddress) loginlistener.connection.channel.remoteAddress()).getAddress()); -@@ -1523,6 +1528,7 @@ public abstract class PlayerList { +@@ -1507,6 +1511,7 @@ public abstract class PlayerList { serverPlayer.connection.send(clientboundUpdateRecipesPacket); serverPlayer.getRecipeBook().sendInitialRecipeBook(serverPlayer); } diff --git a/leaf-server/minecraft-patches/features/0114-Leaves-Xaero-Map-Protocol.patch b/leaf-server/minecraft-patches/features/0114-Leaves-Xaero-Map-Protocol.patch index 9fa20f7d..da71c325 100644 --- a/leaf-server/minecraft-patches/features/0114-Leaves-Xaero-Map-Protocol.patch +++ b/leaf-server/minecraft-patches/features/0114-Leaves-Xaero-Map-Protocol.patch @@ -9,10 +9,10 @@ Original project: https://github.com/LeavesMC/Leaves This patch is Powered by Xaero Map diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index e547d6c9ee9ad3438cc839389db26a3417cc4ba4..4de0da41eaa71edd0ec7c6829dce424795a63dd8 100644 +index e3898b41c2d19940e08b60cdac28ab07161d3c50..22c551e8cfc6ab5822d4e6610033cc2d1aafd6c3 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1235,6 +1235,7 @@ public abstract class PlayerList { +@@ -1218,6 +1218,7 @@ public abstract class PlayerList { player.connection.send(new ClientboundInitializeBorderPacket(worldBorder)); player.connection.send(new ClientboundSetTimePacket(level.getGameTime(), level.getDayTime(), level.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(level.getSharedSpawnPos(), level.getSharedSpawnAngle())); diff --git a/leaf-server/minecraft-patches/features/0115-Leaves-Syncmatica-Protocol.patch b/leaf-server/minecraft-patches/features/0115-Leaves-Syncmatica-Protocol.patch index 111a1626..71a418cb 100644 --- a/leaf-server/minecraft-patches/features/0115-Leaves-Syncmatica-Protocol.patch +++ b/leaf-server/minecraft-patches/features/0115-Leaves-Syncmatica-Protocol.patch @@ -9,13 +9,13 @@ Original project: https://github.com/LeavesMC/Leaves This patch is Powered by Syncmatica (https://github.com/End-Tech/syncmatica) diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index d1245f54d55e4a3c406feef3cc2d5e25bb6346ce..8e0e119b41ca1e49d7e3f7874c5fb3c2b434e737 100644 +index 76ad04e021b840b1595bfe01d07f1d7943937281..f8572720e4bf7b2b0b64fbe39a5a068d715b6e01 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -322,8 +322,11 @@ public class ServerGamePacketListenerImpl - this.signedMessageDecoder = SignedMessageChain.Decoder.unsigned(player.getUUID(), server::enforceSecureProfile); +@@ -324,8 +324,11 @@ public class ServerGamePacketListenerImpl this.chatMessageChain = new FutureChain(server.chatExecutor); // CraftBukkit - async chat this.tickEndEvent = new io.papermc.paper.event.packet.ClientTickEndEvent(player.getBukkitEntity()); // Paper - add client tick end event + this.playerGameConnection = new io.papermc.paper.connection.PaperPlayerGameConnection(this); // Paper + this.exchangeTarget = new org.leavesmc.leaves.protocol.syncmatica.exchange.ExchangeTarget(this); // Leaves - Syncmatica Protocol } diff --git a/leaf-server/minecraft-patches/features/0116-Leaves-Replay-Mod-API.patch b/leaf-server/minecraft-patches/features/0116-Leaves-Replay-Mod-API.patch index d3a6da08..bf2779c3 100644 --- a/leaf-server/minecraft-patches/features/0116-Leaves-Replay-Mod-API.patch +++ b/leaf-server/minecraft-patches/features/0116-Leaves-Replay-Mod-API.patch @@ -92,7 +92,7 @@ index b305ba9bab617bf4e52d0e6ddf160bacc5751a94..bbaf1a29f86a9bfc13795249d545b6f7 if (players.size() >= resultLimit) { return players; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 3a1822e0f37c86dfad56ae06c14fffb960ff99ec..32c934a489df7a06892265c6d762e88c3716a5c6 100644 +index 0fed0f181c4d1f31d01bdaa5dc9417ccd68b3f03..534082a0441dcde9115652cb67dbc8310529ecee 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -1642,7 +1642,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= this.maxPlayers && !this.canBypassPlayerLimit(gameProfile) - // ? Component.translatable("multiplayer.disconnect.server_full") - // : null; -- if (this.players.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameProfile))) { // Purpur - Allow player join full server by permission -+ if (this.realPlayers.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameProfile))) { // Purpur - Allow player join full server by permission // Leaves - only real player - event.disallow(org.bukkit.event.player.PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure - } - } +@@ -1104,7 +1250,7 @@ public abstract class PlayerList { + + // Paper start - whitelist verify event / login event + public LoginResult canBypassFullServerLogin(final GameProfile profile, final LoginResult currentResult) { +- final boolean shouldKick = this.players.size() >= this.maxPlayers && !(/*player.hasPermission("purpur.joinfullserver") || */this.canBypassPlayerLimit(profile)); // Purpur - Allow player join full server by permission TODO: this hasn't worked for a while, so comment it out until we can reliably check perms of the player joining ++ final boolean shouldKick = this.realPlayers.size() >= this.maxPlayers && !(/*player.hasPermission("purpur.joinfullserver") || */this.canBypassPlayerLimit(profile)); // Purpur - Allow player join full server by permission TODO: this hasn't worked for a while, so comment it out until we can reliably check perms of the player joining // Leaves - only real player + final io.papermc.paper.event.player.PlayerServerFullCheckEvent fullCheckEvent = new io.papermc.paper.event.player.PlayerServerFullCheckEvent( + com.destroystokyo.paper.profile.CraftPlayerProfile.asBukkitMirror(profile), + io.papermc.paper.adventure.PaperAdventure.asAdventure(currentResult.message), diff --git a/leaf-server/minecraft-patches/features/0122-Faster-sequencing-of-futures-for-chunk-structure-gen.patch b/leaf-server/minecraft-patches/features/0122-Faster-sequencing-of-futures-for-chunk-structure-gen.patch index 9fe50807..59aa73b8 100644 --- a/leaf-server/minecraft-patches/features/0122-Faster-sequencing-of-futures-for-chunk-structure-gen.patch +++ b/leaf-server/minecraft-patches/features/0122-Faster-sequencing-of-futures-for-chunk-structure-gen.patch @@ -7,10 +7,10 @@ Replace `thenApply` with `thenCompose`. Once one task is completed then the next to prevent blocking threads while waiting to complete all tasks. But may cause the sequence of future compose disorder. diff --git a/net/minecraft/Util.java b/net/minecraft/Util.java -index 0a69469c79aaa2466cda04f6acefed18e421d555..82ee6c27ebc2718ad88b640775d949ec6d7cfed2 100644 +index 138a58c5e5698b926b01e0170733dc3dbc5589ec..64372e0fd4eb7018fc36d0feb667c296ea48f927 100644 --- a/net/minecraft/Util.java +++ b/net/minecraft/Util.java -@@ -620,17 +620,39 @@ public class Util { +@@ -625,17 +625,39 @@ public class Util { return Maps.transformValues(map, mapper); } diff --git a/leaf-server/minecraft-patches/features/0124-Plazma-Add-some-missing-Pufferfish-configurations.patch b/leaf-server/minecraft-patches/features/0124-Plazma-Add-some-missing-Pufferfish-configurations.patch index 0792ac16..6a63b0ce 100644 --- a/leaf-server/minecraft-patches/features/0124-Plazma-Add-some-missing-Pufferfish-configurations.patch +++ b/leaf-server/minecraft-patches/features/0124-Plazma-Add-some-missing-Pufferfish-configurations.patch @@ -10,10 +10,10 @@ Add Pufferfish DAB support for Camel, Sniffer https://github.com/pufferfish-gg/Pufferfish/issues/83 diff --git a/net/minecraft/world/entity/animal/HappyGhast.java b/net/minecraft/world/entity/animal/HappyGhast.java -index e04da94daced96a7eb9fdb01c551bea667b72d76..e53773e086a589ee5fd83fde0bee1881ff43e926 100644 +index 9763a5e24e0fed9b49b6ac59911f6c9f8e893db5..b7306bcc60c2986b7f9b054d217a2b8cd76b118e 100644 --- a/net/minecraft/world/entity/animal/HappyGhast.java +++ b/net/minecraft/world/entity/animal/HappyGhast.java -@@ -415,9 +415,11 @@ public class HappyGhast extends Animal { +@@ -421,9 +421,11 @@ public class HappyGhast extends Animal { return HappyGhastAi.makeBrain(this.brainProvider().makeBrain(dynamic)); } diff --git a/leaf-server/minecraft-patches/features/0132-Remove-useless-creating-stats-json-bases-on-player-n.patch b/leaf-server/minecraft-patches/features/0132-Remove-useless-creating-stats-json-bases-on-player-n.patch index 43e479e1..c12f7c80 100644 --- a/leaf-server/minecraft-patches/features/0132-Remove-useless-creating-stats-json-bases-on-player-n.patch +++ b/leaf-server/minecraft-patches/features/0132-Remove-useless-creating-stats-json-bases-on-player-n.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove useless creating stats json bases on player name logic diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 70d394d8a257390af20bdea5895f7d8a74b16dec..f0c66fce913af9433d53572a3dd3fc31d512346b 100644 +index 1920e0ce0c70f4bf10635754819bbdf6a4d275ff..430c5f02cb0f52a7a655a1b8bd23db8bf93fb43d 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1574,6 +1574,8 @@ public abstract class PlayerList { +@@ -1557,6 +1557,8 @@ public abstract class PlayerList { if (serverStatsCounter == null) { File file = this.server.getWorldPath(LevelResource.PLAYER_STATS_DIR).toFile(); File file1 = new File(file, uuid + ".json"); @@ -17,7 +17,7 @@ index 70d394d8a257390af20bdea5895f7d8a74b16dec..f0c66fce913af9433d53572a3dd3fc31 if (!file1.exists()) { File file2 = new File(file, displayName + ".json"); // CraftBukkit Path path = file2.toPath(); -@@ -1581,6 +1583,8 @@ public abstract class PlayerList { +@@ -1564,6 +1566,8 @@ public abstract class PlayerList { file2.renameTo(file1); } } diff --git a/leaf-server/minecraft-patches/features/0133-Improve-Purpur-AFK-system.patch b/leaf-server/minecraft-patches/features/0133-Improve-Purpur-AFK-system.patch index 8d495cb6..35b73b66 100644 --- a/leaf-server/minecraft-patches/features/0133-Improve-Purpur-AFK-system.patch +++ b/leaf-server/minecraft-patches/features/0133-Improve-Purpur-AFK-system.patch @@ -19,10 +19,10 @@ index 1dc009e85403fe0b6a68daefecfe5cb25ad263cd..de450f9ef03944b101b483126af6a778 org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur - Add demo command org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur - Add ping command diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 8dabe3ca6f5c5b0cd5f5a3801e1cbd853520738e..b71b4db16ac8b42c0061f15db05d4315dd7fecb4 100644 +index b53b989bd6efd747d1ee93dedfc59cbc758fcda3..0df36e136fb0ce928a207f8f58dfe10839be8507 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -2490,6 +2490,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2424,6 +2424,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc // Purpur start - AFK API private boolean isAfk = false; @@ -33,7 +33,7 @@ index 8dabe3ca6f5c5b0cd5f5a3801e1cbd853520738e..b71b4db16ac8b42c0061f15db05d4315 @Override public void setAfk(boolean afk) { -@@ -2527,6 +2531,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2461,6 +2465,18 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc String prefix = (split.length > 0 ? split[0] : "").replace(org.purpurmc.purpur.PurpurConfig.afkTabListPrefix, ""); String suffix = (split.length > 1 ? split[1] : "").replace(org.purpurmc.purpur.PurpurConfig.afkTabListSuffix, ""); if (afk) { @@ -53,10 +53,10 @@ index 8dabe3ca6f5c5b0cd5f5a3801e1cbd853520738e..b71b4db16ac8b42c0061f15db05d4315 } else { getBukkitEntity().setPlayerListName(prefix + scoreboardName + suffix, true); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 2eecf924618192e1b8cf3971ac6cc3c95ec7f235..1306f920b5908731d04004e1b180c3ac4ad0745d 100644 +index f8572720e4bf7b2b0b64fbe39a5a068d715b6e01..c038ceb441897157a0c240a9970e676a297e40c3 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2361,6 +2361,7 @@ public class ServerGamePacketListenerImpl +@@ -2359,6 +2359,7 @@ public class ServerGamePacketListenerImpl @Override public void handleChatCommand(ServerboundChatCommandPacket packet) { @@ -64,7 +64,7 @@ index 2eecf924618192e1b8cf3971ac6cc3c95ec7f235..1306f920b5908731d04004e1b180c3ac this.tryHandleChat(packet.command(), () -> { // CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands if (this.player.hasDisconnected()) { -@@ -2369,7 +2370,7 @@ public class ServerGamePacketListenerImpl +@@ -2367,7 +2368,7 @@ public class ServerGamePacketListenerImpl // CraftBukkit end this.performUnsignedChatCommand(packet.command()); this.detectRateSpam("/" + packet.command()); // Spigot @@ -73,7 +73,7 @@ index 2eecf924618192e1b8cf3971ac6cc3c95ec7f235..1306f920b5908731d04004e1b180c3ac } private void performUnsignedChatCommand(String command) { -@@ -2402,6 +2403,7 @@ public class ServerGamePacketListenerImpl +@@ -2400,6 +2401,7 @@ public class ServerGamePacketListenerImpl public void handleSignedChatCommand(ServerboundChatCommandSignedPacket packet) { Optional optional = this.unpackAndApplyLastSeen(packet.lastSeenMessages()); if (!optional.isEmpty()) { @@ -81,7 +81,7 @@ index 2eecf924618192e1b8cf3971ac6cc3c95ec7f235..1306f920b5908731d04004e1b180c3ac this.tryHandleChat(packet.command(), () -> { // CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands if (this.player.hasDisconnected()) { -@@ -2410,7 +2412,7 @@ public class ServerGamePacketListenerImpl +@@ -2408,7 +2410,7 @@ public class ServerGamePacketListenerImpl // CraftBukkit end this.performSignedChatCommand(packet, optional.get()); this.detectRateSpam("/" + packet.command()); // Spigot @@ -90,7 +90,7 @@ index 2eecf924618192e1b8cf3971ac6cc3c95ec7f235..1306f920b5908731d04004e1b180c3ac } } -@@ -2517,12 +2519,17 @@ public class ServerGamePacketListenerImpl +@@ -2515,12 +2517,17 @@ public class ServerGamePacketListenerImpl return dispatcher.parse(command, this.player.createCommandSourceStack()); } @@ -110,7 +110,7 @@ index 2eecf924618192e1b8cf3971ac6cc3c95ec7f235..1306f920b5908731d04004e1b180c3ac this.player.resetLastActionTime(); // CraftBukkit start if (sync) { -@@ -2534,6 +2541,40 @@ public class ServerGamePacketListenerImpl +@@ -2532,6 +2539,40 @@ public class ServerGamePacketListenerImpl } } @@ -152,7 +152,7 @@ index 2eecf924618192e1b8cf3971ac6cc3c95ec7f235..1306f920b5908731d04004e1b180c3ac synchronized (this.lastSeenMessages) { Optional var10000; diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index f0c66fce913af9433d53572a3dd3fc31d512346b..84914c3245de053ba07b105e44f9d838fa3efc4c 100644 +index 430c5f02cb0f52a7a655a1b8bd23db8bf93fb43d..56876236505d17663900857e4b6777f1778538a6 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -676,6 +676,7 @@ public abstract class PlayerList { diff --git a/leaf-server/minecraft-patches/features/0135-Virtual-thread-for-user-authenticator.patch b/leaf-server/minecraft-patches/features/0135-Virtual-thread-for-user-authenticator.patch index 0c13c97f..7193b2ad 100644 --- a/leaf-server/minecraft-patches/features/0135-Virtual-thread-for-user-authenticator.patch +++ b/leaf-server/minecraft-patches/features/0135-Virtual-thread-for-user-authenticator.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Virtual thread for user authenticator diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 37bc11ba3746808307bc6a8c87cea392146c55b1..9dce1d22c7de3a3dd0e0e8f117cfbb54d1b15042 100644 +index 79534beb5f4a3427078541fda287d9c950999c96..f68923c5f6fbecd8f1c10a30dbd06ed0dfee8b84 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -54,7 +54,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, - // CraftBukkit end +@@ -53,7 +53,7 @@ import org.bukkit.event.player.PlayerPreLoginEvent; + public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, TickablePacketListener { private static final AtomicInteger UNIQUE_THREAD_ID = new AtomicInteger(0); static final Logger LOGGER = LogUtils.getLogger(); - private static final java.util.concurrent.ExecutorService authenticatorPool = java.util.concurrent.Executors.newCachedThreadPool(new com.google.common.util.concurrent.ThreadFactoryBuilder().setNameFormat("User Authenticator #%d").setUncaughtExceptionHandler(new DefaultUncaughtExceptionHandler(LOGGER)).build()); // Paper - Cache authenticator threads diff --git a/leaf-server/minecraft-patches/features/0136-Mirai-Configurable-chat-message-signatures.patch b/leaf-server/minecraft-patches/features/0136-Mirai-Configurable-chat-message-signatures.patch index 3ade01e5..50affb1b 100644 --- a/leaf-server/minecraft-patches/features/0136-Mirai-Configurable-chat-message-signatures.patch +++ b/leaf-server/minecraft-patches/features/0136-Mirai-Configurable-chat-message-signatures.patch @@ -103,10 +103,10 @@ index 87fc8861948b50361ec04c5a23406d3abdec6eac..77f11179836636424927843f5f10c3fd // Paper start - Add setting for proxy online mode status return properties.enforceSecureProfile diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 169d039a00339fc8eeb697ba03808f321ed4ad4c..23fefdc7122ff8e195c27651dc3a83000f62a95e 100644 +index eb725c1b6da0c5ef48fa07d79070950f2b45e30e..5f7bd65caf9ea8707674e243e9fedf84adde5913 100644 --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -371,10 +371,30 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -255,10 +255,30 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } public void send(Packet packet) { @@ -138,10 +138,10 @@ index 169d039a00339fc8eeb697ba03808f321ed4ad4c..23fefdc7122ff8e195c27651dc3a8300 if (packet == null || this.processedDisconnect) { // Spigot return; diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 84914c3245de053ba07b105e44f9d838fa3efc4c..e4543611016a648314459144e43565300153f0fe 100644 +index 56876236505d17663900857e4b6777f1778538a6..f439712ec2cc021360583b2ae70f837e2a9417ac 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -1534,7 +1534,7 @@ public abstract class PlayerList { +@@ -1517,7 +1517,7 @@ public abstract class PlayerList { public void broadcastChatMessage(PlayerChatMessage message, Predicate shouldFilterMessageTo, @Nullable ServerPlayer sender, ChatType.Bound boundChatType, @Nullable Function unsignedFunction) { // Paper end boolean flag = this.verifyChatTrusted(message); @@ -150,7 +150,7 @@ index 84914c3245de053ba07b105e44f9d838fa3efc4c..e4543611016a648314459144e4356530 OutgoingChatMessage outgoingChatMessage = OutgoingChatMessage.create(message); boolean flag1 = false; -@@ -1559,6 +1559,7 @@ public abstract class PlayerList { +@@ -1542,6 +1542,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { diff --git a/leaf-server/minecraft-patches/features/0137-Cache-player-profileResult.patch b/leaf-server/minecraft-patches/features/0137-Cache-player-profileResult.patch index b73d51c8..8d2fd25c 100644 --- a/leaf-server/minecraft-patches/features/0137-Cache-player-profileResult.patch +++ b/leaf-server/minecraft-patches/features/0137-Cache-player-profileResult.patch @@ -22,13 +22,13 @@ See the License for the specific language governing permissions and limitations under the License. diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 9dce1d22c7de3a3dd0e0e8f117cfbb54d1b15042..6b0b0ccc18a5da05685867656705e1fcf94b5891 100644 +index f68923c5f6fbecd8f1c10a30dbd06ed0dfee8b84..2e014cd543a6a790a0023835199b0e956e49fd1f 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -70,6 +70,14 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, - private net.minecraft.server.level.ServerPlayer player; // CraftBukkit - public boolean iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation = false; // Paper - username validation overriding - private int velocityLoginMessageId = -1; // Paper - Add Velocity IP Forwarding Support +@@ -71,6 +71,14 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, + public @Nullable java.util.UUID requestedUuid; // Paper + private final io.papermc.paper.connection.PaperPlayerLoginConnection paperLoginConnection; // Paper - Config API + private volatile boolean disconnecting = false; // Paper - Fix disconnect still ticking login + // Leaf start - Cache player profileResult + private static final com.github.benmanes.caffeine.cache.Cache playerProfileResultCache = com.github.benmanes.caffeine.cache.Caffeine.newBuilder() + .expireAfterWrite(org.dreeam.leaf.config.modules.misc.Cache.cachePlayerProfileResultTimeout, java.util.concurrent.TimeUnit.MINUTES) @@ -40,7 +40,7 @@ index 9dce1d22c7de3a3dd0e0e8f117cfbb54d1b15042..6b0b0ccc18a5da05685867656705e1fc public ServerLoginPacketListenerImpl(MinecraftServer server, Connection connection, boolean transferred) { this.server = server; -@@ -303,9 +311,30 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -269,9 +277,30 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, String string1 = Objects.requireNonNull(ServerLoginPacketListenerImpl.this.requestedUsername, "Player name not initialized"); try { @@ -74,7 +74,7 @@ index 9dce1d22c7de3a3dd0e0e8f117cfbb54d1b15042..6b0b0ccc18a5da05685867656705e1fc if (profileResult != null) { GameProfile gameProfile = profileResult.profile(); // CraftBukkit start - fire PlayerPreLoginEvent -@@ -350,6 +379,20 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -316,6 +345,20 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, // Paper end - Cache authenticator threads } diff --git a/leaf-server/minecraft-patches/features/0143-Configurable-connection-message.patch b/leaf-server/minecraft-patches/features/0143-Configurable-connection-message.patch index 4fd491fe..13fc5264 100644 --- a/leaf-server/minecraft-patches/features/0143-Configurable-connection-message.patch +++ b/leaf-server/minecraft-patches/features/0143-Configurable-connection-message.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable connection message diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index e4543611016a648314459144e43565300153f0fe..70bec2fc50c1e6a928e450e617e76dd4434172f9 100644 +index f439712ec2cc021360583b2ae70f837e2a9417ac..511bddf252e1ae34a07171f1baf069d97efaa758 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -439,7 +439,7 @@ public abstract class PlayerList { @@ -35,7 +35,7 @@ index e4543611016a648314459144e43565300153f0fe..70bec2fc50c1e6a928e450e617e76dd4 this.cserver.getPluginManager().callEvent(playerQuitEvent); player.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); -@@ -1687,4 +1687,40 @@ public abstract class PlayerList { +@@ -1670,4 +1670,40 @@ public abstract class PlayerList { public boolean isAllowCommandsForAllPlayers() { return this.allowCommandsForAllPlayers; } diff --git a/leaf-server/minecraft-patches/features/0161-Use-caffeine-cache-for-kickPermission-instead-of-usi.patch b/leaf-server/minecraft-patches/features/0161-Use-caffeine-cache-for-kickPermission-instead-of-usi.patch index a2bb1019..794eac97 100644 --- a/leaf-server/minecraft-patches/features/0161-Use-caffeine-cache-for-kickPermission-instead-of-usi.patch +++ b/leaf-server/minecraft-patches/features/0161-Use-caffeine-cache-for-kickPermission-instead-of-usi.patch @@ -23,10 +23,10 @@ See the License for the specific language governing permissions and limitations under the License. diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 1306f920b5908731d04004e1b180c3ac4ad0745d..faa135c3eb1bfc8f52c90e6f88411fdf48ed9ee1 100644 +index c038ceb441897157a0c240a9970e676a297e40c3..3173922dbb478e46f892304fb17b0f662fe62b40 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -328,17 +328,12 @@ public class ServerGamePacketListenerImpl +@@ -330,17 +330,12 @@ public class ServerGamePacketListenerImpl public final org.leavesmc.leaves.protocol.syncmatica.exchange.ExchangeTarget exchangeTarget; // Leaves - Syncmatica Protocol // Purpur start - AFK API @@ -48,7 +48,7 @@ index 1306f920b5908731d04004e1b180c3ac4ad0745d..faa135c3eb1bfc8f52c90e6f88411fdf // Purpur end - AFK API @Override -@@ -401,7 +396,7 @@ public class ServerGamePacketListenerImpl +@@ -403,7 +398,7 @@ public class ServerGamePacketListenerImpl && Util.getMillis() - this.player.getLastActionTime() > this.server.getPlayerIdleTimeout() * 1000L * 60L && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits // Purpur start - AFK API this.player.setAfk(true); diff --git a/leaf-server/minecraft-patches/features/0162-Do-not-place-player-if-the-server-is-full.patch b/leaf-server/minecraft-patches/features/0162-Do-not-place-player-if-the-server-is-full.patch index f83eb8b9..f12ece1e 100644 --- a/leaf-server/minecraft-patches/features/0162-Do-not-place-player-if-the-server-is-full.patch +++ b/leaf-server/minecraft-patches/features/0162-Do-not-place-player-if-the-server-is-full.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Do not place player if the server is full Fix https://github.com/PaperMC/Paper/issues/10668 diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 70bec2fc50c1e6a928e450e617e76dd4434172f9..3cd9b0df617715d0b3e70a6096e52bb5d22ab426 100644 +index 511bddf252e1ae34a07171f1baf069d97efaa758..ef283ec7934d143eeab482d99bf6fa8f327d2fe9 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -343,6 +343,13 @@ public abstract class PlayerList { @@ -14,7 +14,7 @@ index 70bec2fc50c1e6a928e450e617e76dd4434172f9..3cd9b0df617715d0b3e70a6096e52bb5 } // Gale end - MultiPaper - do not place player in world if kicked before being spawned in + // Leaf start - Do not place player if the server is full - copied from canPlayerLogin -+ if (org.dreeam.leaf.config.modules.fixes.DontPlacePlayerIfFull.enabled && this.realPlayers.size() >= this.maxPlayers && !(player.getBukkitEntity().hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameProfile))) { // Purpur - Allow player join full server by permission // Leaves - only real player ++ if (org.dreeam.leaf.config.modules.fixes.DontPlacePlayerIfFull.enabled && this.realPlayers.size() >= this.maxPlayers && !(/*player.hasPermission("purpur.joinfullserver") || */this.canBypassPlayerLimit(gameProfile))) { // Purpur - Allow player join full server by permission TODO: this hasn't worked for a while, so comment it out until we can reliably check perms of the player joining // Leaves - only real player // Leaf - Do not place player if the server is full + connection.disconnect(io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage))); + //playerconnection.disconnect(io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)), org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); + return; @@ -23,12 +23,12 @@ index 70bec2fc50c1e6a928e450e617e76dd4434172f9..3cd9b0df617715d0b3e70a6096e52bb5 org.bukkit.Location loc = ev.getSpawnLocation(); serverLevel = ((org.bukkit.craftbukkit.CraftWorld) loc.getWorld()).getHandle(); -@@ -838,7 +845,7 @@ public abstract class PlayerList { - // return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameProfile) - // ? Component.translatable("multiplayer.disconnect.server_full") - // : null; -- if (this.realPlayers.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameProfile))) { // Purpur - Allow player join full server by permission // Leaves - only real player -+ if (this.realPlayers.size() >= this.maxPlayers && !(player.hasPermission("purpur.joinfullserver") || this.canBypassPlayerLimit(gameProfile))) { // Purpur - Allow player join full server by permission // Leaves - only real player // Leaf - Do not place player if the server is full - diff on change - event.disallow(org.bukkit.event.player.PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure - } - } +@@ -1251,7 +1258,7 @@ public abstract class PlayerList { + + // Paper start - whitelist verify event / login event + public LoginResult canBypassFullServerLogin(final GameProfile profile, final LoginResult currentResult) { +- final boolean shouldKick = this.realPlayers.size() >= this.maxPlayers && !(/*player.hasPermission("purpur.joinfullserver") || */this.canBypassPlayerLimit(profile)); // Purpur - Allow player join full server by permission TODO: this hasn't worked for a while, so comment it out until we can reliably check perms of the player joining // Leaves - only real player ++ final boolean shouldKick = this.realPlayers.size() >= this.maxPlayers && !(/*player.hasPermission("purpur.joinfullserver") || */this.canBypassPlayerLimit(profile)); // Purpur - Allow player join full server by permission TODO: this hasn't worked for a while, so comment it out until we can reliably check perms of the player joining // Leaves - only real player // Leaf - Do not place player if the server is full - diff on change + final io.papermc.paper.event.player.PlayerServerFullCheckEvent fullCheckEvent = new io.papermc.paper.event.player.PlayerServerFullCheckEvent( + com.destroystokyo.paper.profile.CraftPlayerProfile.asBukkitMirror(profile), + io.papermc.paper.adventure.PaperAdventure.asAdventure(currentResult.message), diff --git a/leaf-server/minecraft-patches/features/0165-Fix-MC-119417.patch b/leaf-server/minecraft-patches/features/0165-Fix-MC-119417.patch index 891198f4..47be26a1 100644 --- a/leaf-server/minecraft-patches/features/0165-Fix-MC-119417.patch +++ b/leaf-server/minecraft-patches/features/0165-Fix-MC-119417.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix MC-119417 Related MC issue: https://bugs.mojang.com/browse/MC/issues/MC-119417 diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index b71b4db16ac8b42c0061f15db05d4315dd7fecb4..fdce25cdfdd91938a97dc381e4ada1744e64c931 100644 +index 0df36e136fb0ce928a207f8f58dfe10839be8507..54acc0d45edbbbb2423b5fa477e3d895aeb3149d 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -2294,6 +2294,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -2228,6 +2228,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.CHANGE_GAME_MODE, gameMode.getId())); if (gameMode == GameType.SPECTATOR) { this.removeEntitiesOnShoulder(); diff --git a/leaf-server/minecraft-patches/features/0168-Paper-PR-Skip-AI-during-inactive-ticks-for-non-aware.patch b/leaf-server/minecraft-patches/features/0168-Paper-PR-Skip-AI-during-inactive-ticks-for-non-aware.patch index b4134699..6172b35d 100644 --- a/leaf-server/minecraft-patches/features/0168-Paper-PR-Skip-AI-during-inactive-ticks-for-non-aware.patch +++ b/leaf-server/minecraft-patches/features/0168-Paper-PR-Skip-AI-during-inactive-ticks-for-non-aware.patch @@ -24,10 +24,10 @@ index a6be753d1284167e090c40e6dcfbaa56b4e3d774..867353500482247bbec79f407246902c if (this.goalSelector.inactiveTick(this.activatedPriority, true) && !isThrottled) { // Pufferfish - pass activated priroity // Pufferfish - throttle inactive goal selector ticking this.goalSelector.tick(); diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 165d0f50e7818b6daf834507033feaa2fabcaf19..5106013430c17d4a55f666163d0cb1e4c0497302 100644 +index 014bb5b6e82bb11b756430999522f4b8f9356d9f..174c37fca6b2b03a6eb36d8c7c17b6e8ec49f1cd 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -375,7 +375,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -374,7 +374,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler if (this.getUnhappyCounter() > 0) { this.setUnhappyCounter(this.getUnhappyCounter() - 1); } diff --git a/leaf-server/minecraft-patches/features/0172-Multithreaded-Tracker.patch b/leaf-server/minecraft-patches/features/0172-Multithreaded-Tracker.patch index da1c1a18..85ee7739 100644 --- a/leaf-server/minecraft-patches/features/0172-Multithreaded-Tracker.patch +++ b/leaf-server/minecraft-patches/features/0172-Multithreaded-Tracker.patch @@ -400,10 +400,10 @@ index 08d12a1acc3a672a77daa15f82392cd603c30283..c5949a0e852ca6de84e8dd12e3d4ed85 } } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index faa135c3eb1bfc8f52c90e6f88411fdf48ed9ee1..0dec7852a4f225b9e9e94debf9259faea625028f 100644 +index 3173922dbb478e46f892304fb17b0f662fe62b40..baa703a89583f72fab0ebbc40c85399022185c29 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1914,7 +1914,7 @@ public class ServerGamePacketListenerImpl +@@ -1916,7 +1916,7 @@ public class ServerGamePacketListenerImpl } public void internalTeleport(PositionMoveRotation posMoveRotation, Set relatives) { @@ -413,7 +413,7 @@ index faa135c3eb1bfc8f52c90e6f88411fdf48ed9ee1..0dec7852a4f225b9e9e94debf9259fae if (this.player.isRemoved()) { LOGGER.info("Attempt to teleport removed player {} restricted", player.getScoreboardName()); diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 6c9ce4a979c084c9024a954d8315424cb7be27c7..19881624b91f44c9332ad4ba147a66837864da06 100644 +index d81d1303fc3d23b35dbc177dd6a4c7f489eb5381..78c212fb8a8a8ffefe6fc860f1e06d16ba09bb40 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -1342,13 +1342,13 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin diff --git a/leaf-server/minecraft-patches/features/0200-Remove-stream-in-villagers.patch b/leaf-server/minecraft-patches/features/0200-Remove-stream-in-villagers.patch index 5813f2a4..0a79ce25 100644 --- a/leaf-server/minecraft-patches/features/0200-Remove-stream-in-villagers.patch +++ b/leaf-server/minecraft-patches/features/0200-Remove-stream-in-villagers.patch @@ -41,10 +41,10 @@ index 72cca4897f9697573fd6987a5f0d2df52761b8c3..04eea77cf84aaeb781608e48f2aa32f3 private static void throwHalfStack(Villager villager, Set stack, LivingEntity entity) { diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 5106013430c17d4a55f666163d0cb1e4c0497302..377e98469328f08db751c0f6a6f434b03f63c225 100644 +index 174c37fca6b2b03a6eb36d8c7c17b6e8ec49f1cd..a3040736384e54f26794db2bc938d63734f9614d 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -974,7 +974,17 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -973,7 +973,17 @@ public class Villager extends AbstractVillager implements ReputationEventHandler private int countFoodPointsInInventory() { SimpleContainer inventory = this.getInventory(); diff --git a/leaf-server/minecraft-patches/features/0204-Cache-eligible-players-for-despawn-checks.patch b/leaf-server/minecraft-patches/features/0204-Cache-eligible-players-for-despawn-checks.patch index 227ba4e5..d0565fd8 100644 --- a/leaf-server/minecraft-patches/features/0204-Cache-eligible-players-for-despawn-checks.patch +++ b/leaf-server/minecraft-patches/features/0204-Cache-eligible-players-for-despawn-checks.patch @@ -38,10 +38,10 @@ index 0f311e603c8df175576a33d5d20369cbcda2be55..3a31f9132a7271ea476cc85c5a10ea7f .forEach( entity -> { diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index fdce25cdfdd91938a97dc381e4ada1744e64c931..4c1786201a4044db61e99c148fca4714e2b172ad 100644 +index 54acc0d45edbbbb2423b5fa477e3d895aeb3149d..df8732fc451d8aafa46a7980c5e51b6347f0f1ad 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1613,6 +1613,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1547,6 +1547,13 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.containerMenu.broadcastChanges(); } diff --git a/leaf-server/minecraft-patches/features/0214-SparklyPaper-Parallel-world-ticking.patch b/leaf-server/minecraft-patches/features/0214-SparklyPaper-Parallel-world-ticking.patch index 4aca18e5..0232efb3 100644 --- a/leaf-server/minecraft-patches/features/0214-SparklyPaper-Parallel-world-ticking.patch +++ b/leaf-server/minecraft-patches/features/0214-SparklyPaper-Parallel-world-ticking.patch @@ -651,27 +651,19 @@ index 3a31f9132a7271ea476cc85c5a10ea7f327256bf..58ec5cfb21d4834c3aaa74f76ca8a536 // Paper start - extra debug info if (entity.valid) { diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 4c1786201a4044db61e99c148fca4714e2b172ad..163ac7b4b6fefb0c4594548dfffc0ea6f24f0765 100644 +index df8732fc451d8aafa46a7980c5e51b6347f0f1ad..f9664926de5706eda918b457301174734b0b0300 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -467,6 +467,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc - return this.viewDistanceHolder; +@@ -466,6 +466,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } // Paper end - rewrite chunk system -+ - // Paper start - improve keepalives - public long lastKeepAliveTx = System.nanoTime(); - public static final record KeepAliveResponse(long txTimeNS, long rxTimeNS) { -@@ -532,6 +533,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc - } - // Paper end - improve keepalives + public boolean hasTickedAtLeastOnceInNewWorld = false; // SparklyPaper - parallel world ticking (fixes bug in DreamResourceReset where the inventory is opened AFTER the player has changed worlds, if you click with the quick tp torch in a chest, because the inventory is opened AFTER the player has teleported) + public ServerPlayer(MinecraftServer server, ServerLevel level, GameProfile gameProfile, ClientInformation clientInformation) { super(level, gameProfile); this.textFilter = server.createTextFilterForPlayer(this); -@@ -818,6 +821,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -752,6 +754,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @Override public void tick() { @@ -679,7 +671,7 @@ index 4c1786201a4044db61e99c148fca4714e2b172ad..163ac7b4b6fefb0c4594548dfffc0ea6 // CraftBukkit start if (this.joining) { this.joining = false; -@@ -1494,6 +1498,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1428,6 +1431,8 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc teleportTransition.postTeleportTransition().onTransition(this); return this; } else { @@ -688,7 +680,7 @@ index 4c1786201a4044db61e99c148fca4714e2b172ad..163ac7b4b6fefb0c4594548dfffc0ea6 // CraftBukkit start /* this.isChangingDimension = true; -@@ -1847,6 +1853,12 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1781,6 +1786,12 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc return OptionalInt.empty(); } else { // CraftBukkit start @@ -701,7 +693,7 @@ index 4c1786201a4044db61e99c148fca4714e2b172ad..163ac7b4b6fefb0c4594548dfffc0ea6 this.containerMenu = abstractContainerMenu; // Moved up if (!this.isImmobile()) this.connection -@@ -1911,6 +1923,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1845,6 +1856,11 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } @Override public void closeContainer(org.bukkit.event.inventory.InventoryCloseEvent.Reason reason) { @@ -714,7 +706,7 @@ index 4c1786201a4044db61e99c148fca4714e2b172ad..163ac7b4b6fefb0c4594548dfffc0ea6 // Paper end - Inventory close reason this.connection.send(new ClientboundContainerClosePacket(this.containerMenu.containerId)); diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 3cd9b0df617715d0b3e70a6096e52bb5d22ab426..f1002643589f67adce26667b1750a1296c1fb67d 100644 +index ef283ec7934d143eeab482d99bf6fa8f327d2fe9..1b3a21ef16426234e782b1a297cd2e5c2505c666 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -251,6 +251,8 @@ public abstract class PlayerList { @@ -726,7 +718,7 @@ index 3cd9b0df617715d0b3e70a6096e52bb5d22ab426..f1002643589f67adce26667b1750a129 player.isRealPlayer = true; // Paper player.loginTime = System.currentTimeMillis(); // Paper - Replace OfflinePlayer#getLastPlayed GameProfile gameProfile = player.getGameProfile(); -@@ -888,6 +890,15 @@ public abstract class PlayerList { +@@ -854,6 +856,15 @@ public abstract class PlayerList { } public ServerPlayer respawn(ServerPlayer player, boolean keepInventory, Entity.RemovalReason reason, @Nullable org.bukkit.event.player.PlayerRespawnEvent.RespawnReason eventReason, @Nullable org.bukkit.Location location) { @@ -742,7 +734,7 @@ index 3cd9b0df617715d0b3e70a6096e52bb5d22ab426..f1002643589f67adce26667b1750a129 player.stopRiding(); // CraftBukkit this.players.remove(player); this.playersByName.remove(player.getScoreboardName().toLowerCase(java.util.Locale.ROOT)); // Spigot -@@ -899,6 +910,7 @@ public abstract class PlayerList { +@@ -865,6 +876,7 @@ public abstract class PlayerList { ServerPlayer serverPlayer = player; Level fromWorld = player.level(); player.wonGame = false; @@ -1018,10 +1010,10 @@ index 3614551856c594f3c0cfee984fcf03fad672b007..f4577f908ca9f279b72d89e5b0822d34 }); entity.getBrain().eraseMemory(MemoryModuleType.POTENTIAL_JOB_SITE); diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 377e98469328f08db751c0f6a6f434b03f63c225..743c0c956ddd9e35d3c9c7b45fa8d36490d648dd 100644 +index a3040736384e54f26794db2bc938d63734f9614d..f456a44deac3645c44366ca1704ae25419baf52c 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -797,13 +797,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -796,13 +796,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.brain.getMemory(moduleType).ifPresent(pos -> { ServerLevel level = server.getLevel(pos.dimension()); if (level != null) { diff --git a/leaf-server/minecraft-patches/features/0229-Optimise-non-flush-packet-sending.patch b/leaf-server/minecraft-patches/features/0229-Optimise-non-flush-packet-sending.patch index aebd9f16..47abf69a 100644 --- a/leaf-server/minecraft-patches/features/0229-Optimise-non-flush-packet-sending.patch +++ b/leaf-server/minecraft-patches/features/0229-Optimise-non-flush-packet-sending.patch @@ -26,18 +26,18 @@ Locally this patch drops the entity tracker tick by a full 1.5x. Co-authored-by: Quang Tran <3d7777456@gmail.com> diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java -index 1014ab2aeb5e496124c99c938538e88d75561cd5..2fda4bf1aeecba183ba6301f83f582ae34f5a3da 100644 +index e72eda830644851656fae3118c513d7bd701be45..01fb1bf0eba70b740b12731c79feadefc8fe96f0 100644 --- a/net/minecraft/network/Connection.java +++ b/net/minecraft/network/Connection.java -@@ -147,6 +147,7 @@ public class Connection extends SimpleChannelInboundHandler> { - @Nullable public SocketAddress haProxyAddress; // Paper - Add API to get player's proxy address +@@ -148,6 +148,7 @@ public class Connection extends SimpleChannelInboundHandler> { + public @Nullable net.minecraft.server.level.ServerPlayer savedPlayerForLoginEventLegacy; // Paper - playerloginevent // Paper start - Optimize network public boolean isPending = true; + private io.netty.channel.SingleThreadEventLoop eventLoop; // Paper - optimise packets that are not flushed public boolean queueImmunity; // Paper end - Optimize network -@@ -158,6 +159,7 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -159,6 +160,7 @@ public class Connection extends SimpleChannelInboundHandler> { public void channelActive(ChannelHandlerContext context) throws Exception { super.channelActive(context); this.channel = context.channel(); @@ -45,7 +45,7 @@ index 1014ab2aeb5e496124c99c938538e88d75561cd5..2fda4bf1aeecba183ba6301f83f582ae this.address = this.channel.remoteAddress(); this.preparing = false; // Spigot if (this.delayedDisconnect != null) { -@@ -472,6 +474,11 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -473,6 +475,11 @@ public class Connection extends SimpleChannelInboundHandler> { if (this.channel.eventLoop().inEventLoop()) { this.doSendPacket(packet, channelFutureListener, flag); } else { diff --git a/leaf-server/minecraft-patches/features/0240-Protocol-Core.patch b/leaf-server/minecraft-patches/features/0240-Protocol-Core.patch index 541e4333..09c445d6 100644 --- a/leaf-server/minecraft-patches/features/0240-Protocol-Core.patch +++ b/leaf-server/minecraft-patches/features/0240-Protocol-Core.patch @@ -34,10 +34,10 @@ index 42dbd6d9e82130cfc5ae4669c460373631061451..b3356ad173027afafba931f31952c5b5 for (int i = 0; i < this.tickables.size(); i++) { this.tickables.get(i).run(); diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 163ac7b4b6fefb0c4594548dfffc0ea6f24f0765..479884c829a7550d39508bf37a2551f2ef52fcd1 100644 +index f9664926de5706eda918b457301174734b0b0300..8423a1cacf23e86eeb9b277b11e21c84bc298ab6 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -876,6 +876,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -809,6 +809,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc } } // Purpur end - Ridables @@ -45,11 +45,11 @@ index 163ac7b4b6fefb0c4594548dfffc0ea6f24f0765..479884c829a7550d39508bf37a2551f2 } private void updatePlayerAttributes() { -diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 23fefdc7122ff8e195c27651dc3a83000f62a95e..f90fc120d448ed2e3978682b189d4c955bc37051 100644 ---- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -206,6 +206,8 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +index baa703a89583f72fab0ebbc40c85399022185c29..983f2b1c12d2e64c099ba7c717b9d2bc7f1770ce 100644 +--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java ++++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java +@@ -3871,6 +3871,8 @@ public class ServerGamePacketListenerImpl PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); @@ -59,7 +59,7 @@ index 23fefdc7122ff8e195c27651dc3a83000f62a95e..f90fc120d448ed2e3978682b189d4c95 final byte[] data = discardedPayload.data(); try { diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 1a03bf5184b1b85d4cea97dc73795e8725bf2613..58e1b90132898e30aa15ed08c76b53165473999a 100644 +index 6c61c11f655002359fe8791b9a1704d354b8f993..daf2410db29adad3751da1b08fa1774d84190aff 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -690,6 +690,7 @@ public abstract class PlayerList { diff --git a/leaf-server/minecraft-patches/features/0241-Reduce-PlayerChunk-Updates.patch b/leaf-server/minecraft-patches/features/0241-Reduce-PlayerChunk-Updates.patch index bc1077de..076fdaa1 100644 --- a/leaf-server/minecraft-patches/features/0241-Reduce-PlayerChunk-Updates.patch +++ b/leaf-server/minecraft-patches/features/0241-Reduce-PlayerChunk-Updates.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Reduce PlayerChunk Updates diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 0dec7852a4f225b9e9e94debf9259faea625028f..c5b2033c323695f71009d765b64e7ed8f94b9258 100644 +index 983f2b1c12d2e64c099ba7c717b9d2bc7f1770ce..6dc940aa6ee513e5c87b6058ccaa90bba91bade9 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1455,6 +1455,8 @@ public class ServerGamePacketListenerImpl +@@ -1457,6 +1457,8 @@ public class ServerGamePacketListenerImpl this.resetPosition(); } @@ -17,7 +17,7 @@ index 0dec7852a4f225b9e9e94debf9259faea625028f..c5b2033c323695f71009d765b64e7ed8 if (this.player.hasClientLoaded()) { float f = Mth.wrapDegrees(packet.getYRot(this.player.getYRot())); final float toYaw = f; // Paper - OBFHELPER float f1 = Mth.wrapDegrees(packet.getXRot(this.player.getXRot())); final float toPitch = f1; // Paper - OBFHELPER -@@ -1732,7 +1734,7 @@ public class ServerGamePacketListenerImpl +@@ -1734,7 +1736,7 @@ public class ServerGamePacketListenerImpl && !isFallFlying && !isAutoSpinAttack && this.noBlocksAround(this.player); diff --git a/leaf-server/minecraft-patches/features/0242-Async-switch-connection-state.patch b/leaf-server/minecraft-patches/features/0242-Async-switch-connection-state.patch index 9e04f829..3b066ff2 100644 --- a/leaf-server/minecraft-patches/features/0242-Async-switch-connection-state.patch +++ b/leaf-server/minecraft-patches/features/0242-Async-switch-connection-state.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Async switch connection state diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java -index 2fda4bf1aeecba183ba6301f83f582ae34f5a3da..df012a4c67d474125fafa01b1677d9220fc817ae 100644 +index 01fb1bf0eba70b740b12731c79feadefc8fe96f0..a6077984e139be5cbcc00f8f0828f1992d3604a6 100644 --- a/net/minecraft/network/Connection.java +++ b/net/minecraft/network/Connection.java -@@ -342,6 +342,11 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -343,6 +343,11 @@ public class Connection extends SimpleChannelInboundHandler> { if (protocolInfo.flow() != this.getReceiving()) { throw new IllegalStateException("Invalid inbound protocol: " + protocolInfo.id()); } else { @@ -20,7 +20,7 @@ index 2fda4bf1aeecba183ba6301f83f582ae34f5a3da..df012a4c67d474125fafa01b1677d922 this.packetListener = packetInfo; this.disconnectListener = null; UnconfiguredPipelineHandler.InboundConfigurationTask inboundConfigurationTask = UnconfiguredPipelineHandler.setupInboundProtocol(protocolInfo); -@@ -351,7 +356,14 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -352,7 +357,14 @@ public class Connection extends SimpleChannelInboundHandler> { inboundConfigurationTask = inboundConfigurationTask.andThen(context -> context.pipeline().addAfter("decoder", "bundler", packetBundlePacker)); } @@ -36,7 +36,7 @@ index 2fda4bf1aeecba183ba6301f83f582ae34f5a3da..df012a4c67d474125fafa01b1677d922 } } -@@ -373,6 +385,31 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -374,6 +386,31 @@ public class Connection extends SimpleChannelInboundHandler> { } } @@ -69,7 +69,7 @@ index 2fda4bf1aeecba183ba6301f83f582ae34f5a3da..df012a4c67d474125fafa01b1677d922 if (this.packetListener != null) { throw new IllegalStateException("Listener already set"); diff --git a/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java b/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java -index b57f4e2528d73c3ba949cb7e5dce73871049968c..6b6a51af0198db0e157ee4cf5bd6b7751b69d3e5 100644 +index 91ca446e6e1d895d818fc7f844375101be6af5e8..8e24d76e24ad9788868934909a3c5e53823a5b13 100644 --- a/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java @@ -140,11 +140,34 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis @@ -110,10 +110,10 @@ index b57f4e2528d73c3ba949cb7e5dce73871049968c..6b6a51af0198db0e157ee4cf5bd6b775 try { PlayerList playerList = this.server.getPlayerList(); diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 6b0b0ccc18a5da05685867656705e1fcf94b5891..889bab9613fb32d239bb0613db4a900a442116a3 100644 +index 2e014cd543a6a790a0023835199b0e956e49fd1f..72115a4d2c54834f9edef02c83ed79f0fe380e78 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -493,11 +493,31 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -459,11 +459,31 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, this.disconnect(ServerCommonPacketListenerImpl.DISCONNECT_UNEXPECTED_QUERY); } @@ -145,4 +145,4 @@ index 6b0b0ccc18a5da05685867656705e1fcf94b5891..889bab9613fb32d239bb0613db4a900a + if (!org.dreeam.leaf.config.modules.network.AlternativeJoin.enabled) this.connection.setupOutboundProtocol(ConfigurationProtocols.CLIENTBOUND); // Leaf - Async switch connection state CommonListenerCookie commonListenerCookie = CommonListenerCookie.createInitial(Objects.requireNonNull(this.authenticatedProfile), this.transferred); ServerConfigurationPacketListenerImpl serverConfigurationPacketListenerImpl = new ServerConfigurationPacketListenerImpl( - this.server, this.connection, commonListenerCookie, this.player // CraftBukkit + this.server, this.connection, commonListenerCookie diff --git a/leaf-server/minecraft-patches/features/0246-Only-tick-items-at-hand.patch b/leaf-server/minecraft-patches/features/0246-Only-tick-items-at-hand.patch index 8444eb7e..b42981b1 100644 --- a/leaf-server/minecraft-patches/features/0246-Only-tick-items-at-hand.patch +++ b/leaf-server/minecraft-patches/features/0246-Only-tick-items-at-hand.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Only tick items at hand diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 479884c829a7550d39508bf37a2551f2ef52fcd1..6d8c500839062ca0cad2ffc58dad0de1626c0eb9 100644 +index 8423a1cacf23e86eeb9b277b11e21c84bc298ab6..fcd6d892b96d3e82ebb1aecf9a7a595f7dbd757c 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -914,12 +914,19 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -847,12 +847,19 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc super.tick(); } diff --git a/leaf-server/minecraft-patches/features/0252-Add-configurable-death-item-drop-knockback-settings.patch b/leaf-server/minecraft-patches/features/0252-Add-configurable-death-item-drop-knockback-settings.patch index 79338f3d..6972f264 100644 --- a/leaf-server/minecraft-patches/features/0252-Add-configurable-death-item-drop-knockback-settings.patch +++ b/leaf-server/minecraft-patches/features/0252-Add-configurable-death-item-drop-knockback-settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add configurable death item drop knockback settings diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 6d8c500839062ca0cad2ffc58dad0de1626c0eb9..cc015575efcb0c3d56d33510a1f43f40996eab1a 100644 +index fcd6d892b96d3e82ebb1aecf9a7a595f7dbd757c..9c84df53473a58a182a544fd9dd27491c0dc3638 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1133,7 +1133,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1066,7 +1066,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc if (!keepInventory) { for (ItemStack item : this.getInventory().getContents()) { if (!item.isEmpty() && !EnchantmentHelper.has(item, net.minecraft.world.item.enchantment.EnchantmentEffectComponents.PREVENT_EQUIPMENT_DROP)) { diff --git a/leaf-server/minecraft-patches/features/0255-Optimize-isEyeInFluid.patch b/leaf-server/minecraft-patches/features/0255-Optimize-isEyeInFluid.patch index b2cd7da4..1c6c48f7 100644 --- a/leaf-server/minecraft-patches/features/0255-Optimize-isEyeInFluid.patch +++ b/leaf-server/minecraft-patches/features/0255-Optimize-isEyeInFluid.patch @@ -79,10 +79,10 @@ index 6c7edbbf3935c40ccb78bee680ea75431718b9bd..fd2f79d976c9587b00380f8b8f784b32 public String toString() { return "Reference{" + this.key + "=" + this.value + "}"; diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index cc015575efcb0c3d56d33510a1f43f40996eab1a..672301fcfe89dda6fb20bc0cd18d18fc26cd2efa 100644 +index 9c84df53473a58a182a544fd9dd27491c0dc3638..02e02aaa81921802ff61c35505acf7bb39f733c3 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -1979,7 +1979,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc +@@ -1912,7 +1912,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc this.awardStat(Stats.SWIM_ONE_CM, rounded); this.causeFoodExhaustion(this.level().spigotConfig.swimMultiplier * (float) rounded * 0.01F, org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason.SWIM); // CraftBukkit - EntityExhaustionEvent // Spigot } @@ -175,7 +175,7 @@ index c8354d46ed909090f7c15f396863bf7d73afcefa..3ee788b172240ccf38cb31385dff1336 } else if (!flag) { this.applyGravity(); diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index f95792b8642dc86a4d88e1d756de65d6cae2fa98..be8cc4aceafc183808a6d0f7278ef8378c4265e0 100644 +index f1975e5ab19da6dd1d8b94503924471e3efab921..6f57a8de40a398312e14282ff6764a633a949049 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -463,7 +463,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin diff --git a/leaf-server/minecraft-patches/features/0266-Use-UUID-for-cure-reputation.patch b/leaf-server/minecraft-patches/features/0266-Use-UUID-for-cure-reputation.patch index 96ebf276..feaeb4a9 100644 --- a/leaf-server/minecraft-patches/features/0266-Use-UUID-for-cure-reputation.patch +++ b/leaf-server/minecraft-patches/features/0266-Use-UUID-for-cure-reputation.patch @@ -22,10 +22,10 @@ index 22c1545a0329d56e0ec41ae4da1e1922aa1f9737..e89e4c26c40cbb3ef002022f22886d5f } diff --git a/net/minecraft/world/entity/npc/Villager.java b/net/minecraft/world/entity/npc/Villager.java -index 743c0c956ddd9e35d3c9c7b45fa8d36490d648dd..c029256175b27bb5f0d30e3fa7371f04c2069fd6 100644 +index f456a44deac3645c44366ca1704ae25419baf52c..db23240fed3fb8b9bc2a7f670d7bfd8ab80ffcd6 100644 --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -1095,6 +1095,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1094,6 +1094,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } } diff --git a/leaf-server/minecraft-patches/features/0271-Paw-optimization.patch b/leaf-server/minecraft-patches/features/0271-Paw-optimization.patch index a5949d54..2337ae64 100644 --- a/leaf-server/minecraft-patches/features/0271-Paw-optimization.patch +++ b/leaf-server/minecraft-patches/features/0271-Paw-optimization.patch @@ -11,7 +11,7 @@ Some random optimizations - Secret patches (WIP) diff --git a/net/minecraft/Util.java b/net/minecraft/Util.java -index 1f4208388a923f9a1667dc13d937955ac233d88e..6e3bd3944b56010c3eabcdcd11424518bbb980fa 100644 +index 9f7288223bc1f13e3664d82d2e883336f527e5e2..ed51fd7c4c9f26dbcc348e6aefcafd367b1dd7bc 100644 --- a/net/minecraft/Util.java +++ b/net/minecraft/Util.java @@ -96,7 +96,7 @@ public class Util { @@ -33,10 +33,10 @@ index 1f4208388a923f9a1667dc13d937955ac233d88e..6e3bd3944b56010c3eabcdcd11424518 public static void shutdownExecutors() { diff --git a/net/minecraft/network/Connection.java b/net/minecraft/network/Connection.java -index df012a4c67d474125fafa01b1677d9220fc817ae..7992df93f4eebb9ca41b9bca2784aec718d4efb8 100644 +index a6077984e139be5cbcc00f8f0828f1992d3604a6..4142ef85071b13427f99808482a1f1344ee976d3 100644 --- a/net/minecraft/network/Connection.java +++ b/net/minecraft/network/Connection.java -@@ -644,13 +644,7 @@ public class Connection extends SimpleChannelInboundHandler> { +@@ -645,13 +645,7 @@ public class Connection extends SimpleChannelInboundHandler> { if (!(this.packetListener instanceof net.minecraft.server.network.ServerLoginPacketListenerImpl loginPacketListener) || loginPacketListener.state != net.minecraft.server.network.ServerLoginPacketListenerImpl.State.VERIFYING || Connection.joinAttemptsThisTick++ < MAX_PER_TICK) { @@ -100,7 +100,7 @@ index 4535858701b2bb232b9d2feb2af6551526232ddc..e65c62dbe4c1560ae153e4c4344e9194 - // Paper end - detailed watchdog information } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index c49d2f7314a35763831285d7d46d34dade2f0085..79f2b26bc466238ec83cd049f38d257b0000028d 100644 +index 08c6f93bcc028c876e17870681382aa9fa2ba3ee..58a77b5aa49cb56eea33757e982ba1852bbfb679 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -1518,13 +1518,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe diff --git a/leaf-server/paper-patches/features/0009-Purpur-Server-Paper-Changes.patch b/leaf-server/paper-patches/features/0009-Purpur-Server-Paper-Changes.patch index da17c325..14d0749b 100644 --- a/leaf-server/paper-patches/features/0009-Purpur-Server-Paper-Changes.patch +++ b/leaf-server/paper-patches/features/0009-Purpur-Server-Paper-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur Server Paper Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: a112b6aca718e4500a6d48ca9d7158faf0f4adf9 +Commit: 591baf2648d0f75ffecc52f1d169348af35246dd Patches listed below are removed in this patch, They exists in Gale or Leaf: * "Rebrand.patch" @@ -127,7 +127,7 @@ index 0000000000000000000000000000000000000000..15a226e3854d731f7724025ea3459c8a + } +} diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -index 94bf04bb1c646ec5ba1d42f4b7b3e6c200707beb..3e41a308cf92b841b5375250d1380d16af3d0309 100644 +index e6ad63a56dc0fc969dbf3ed5bdc36b4187331e30..f99ee5383bb9f33c1ebdbc74a640c2f7dc20a046 100644 --- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java +++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java @@ -142,6 +142,10 @@ public class MobGoalHelper { @@ -1068,10 +1068,10 @@ index 02deb9c37250144be9afa0fe55df2a49017a7070..dfb597fcb8d01ed6cf20eae57e260949 + // Purpur end - Llama API } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 3e18819ae23ab5ecd866d61cd0fd62ce1324109e..7f17c5025f25e44a917f5d6a65b8d958a982b301 100644 +index 3ea6d207b2189fa6bebe101bfc98093c2c6b19c7..7f5eca8f32ae1afe3e6d2544b76cf0bbe131109f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -625,10 +625,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -575,10 +575,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void setPlayerListName(String name) { @@ -1088,7 +1088,7 @@ index 3e18819ae23ab5ecd866d61cd0fd62ce1324109e..7f17c5025f25e44a917f5d6a65b8d958 if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined for (ServerPlayer player : (List) this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { -@@ -1442,6 +1447,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1392,6 +1397,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { // Paper start - Teleport passenger API // Don't allow teleporting between worlds while keeping passengers if (ignorePassengers && entity.isVehicle() && location.getWorld() != this.getWorld()) { @@ -1096,7 +1096,7 @@ index 3e18819ae23ab5ecd866d61cd0fd62ce1324109e..7f17c5025f25e44a917f5d6a65b8d958 return false; } -@@ -1463,6 +1469,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1413,6 +1419,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API @@ -1104,7 +1104,7 @@ index 3e18819ae23ab5ecd866d61cd0fd62ce1324109e..7f17c5025f25e44a917f5d6a65b8d958 return false; } -@@ -2726,6 +2733,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2676,6 +2683,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.getHandle().getAbilities().walkingSpeed * 2f; } @@ -1133,9 +1133,9 @@ index 3e18819ae23ab5ecd866d61cd0fd62ce1324109e..7f17c5025f25e44a917f5d6a65b8d958 private void validateSpeed(float value) { Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value); } -@@ -3569,4 +3598,76 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - public void setDeathScreenScore(final int score) { - getHandle().setScore(score); +@@ -3524,4 +3553,76 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + public PlayerGameConnection getConnection() { + return this.getHandle().connection.playerGameConnection; } + + // Purpur start - Purpur client support @@ -1292,10 +1292,10 @@ index 33866c5a5591150de4c1d8f4c175122db3bd5bd4..5fd656f43985e3972c9f572d5b05bf5c + // Purpur end - Configurable chance for wolves to spawn rabid } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index c5daefa56597bd13fe227fa014ca5225c00a2a2d..98b766d115856dbf3ea11a983c1304591032f1b0 100644 +index 1d112510093d5eb5117adf16b92dd3411a610a4a..a162440a583801671787163d998d6b9546ef7e61 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -515,6 +515,15 @@ public class CraftEventFactory { +@@ -525,6 +525,15 @@ public class CraftEventFactory { } craftServer.getPluginManager().callEvent(event); @@ -1311,7 +1311,7 @@ index c5daefa56597bd13fe227fa014ca5225c00a2a2d..98b766d115856dbf3ea11a983c130459 return event; } -@@ -1047,6 +1056,7 @@ public class CraftEventFactory { +@@ -1057,6 +1066,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical); @@ -1320,10 +1320,10 @@ index c5daefa56597bd13fe227fa014ca5225c00a2a2d..98b766d115856dbf3ea11a983c130459 event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions); } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -index c00ddfe41439954fa0fd87c0933f274c8a752eb6..5fde4c71915f55f100cd30406803d6fca5b573dc 100644 +index 2f41a92465b9da28e026297cc3528898bb1c8412..83ae4b40e33e0dc58e0fd6aacf22e22ae0cd3684 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -@@ -150,8 +150,19 @@ public class CraftContainer extends AbstractContainerMenu { +@@ -148,8 +148,19 @@ public class CraftContainer extends AbstractContainerMenu { case PLAYER: case CHEST: case ENDER_CHEST: diff --git a/leaf-server/paper-patches/features/0027-KeYi-Player-Skull-API.patch b/leaf-server/paper-patches/features/0027-KeYi-Player-Skull-API.patch index 421702ca..c7613aef 100644 --- a/leaf-server/paper-patches/features/0027-KeYi-Player-Skull-API.patch +++ b/leaf-server/paper-patches/features/0027-KeYi-Player-Skull-API.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 7f17c5025f25e44a917f5d6a65b8d958a982b301..94efaf127c22b6bb722982bf1ccc63bfd6458153 100644 +index 7f5eca8f32ae1afe3e6d2544b76cf0bbe131109f..571b1337b5a4dcbe0fe09b86198c8ed068a4e81b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3670,4 +3670,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3625,4 +3625,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player { this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket(getEntityId(), io.papermc.paper.adventure.PaperAdventure.asVanilla(message))); } // Purpur end - Death screen API diff --git a/leaf-server/paper-patches/features/0028-Slice-Smooth-Teleports.patch b/leaf-server/paper-patches/features/0028-Slice-Smooth-Teleports.patch index cc81f824..749a5d2d 100644 --- a/leaf-server/paper-patches/features/0028-Slice-Smooth-Teleports.patch +++ b/leaf-server/paper-patches/features/0028-Slice-Smooth-Teleports.patch @@ -9,10 +9,10 @@ Original project: https://github.com/Cryptite/Slice Co-authored-by: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 94efaf127c22b6bb722982bf1ccc63bfd6458153..c5da43af18b507d348dae8fa46852c1d1af65742 100644 +index 571b1337b5a4dcbe0fe09b86198c8ed068a4e81b..d612623cf25f454cc535c5d395758ed510d345f6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1392,6 +1392,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1342,6 +1342,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player { // Paper end - Teleportation API } diff --git a/leaf-server/paper-patches/features/0030-Leaves-Replay-Mod-API.patch b/leaf-server/paper-patches/features/0030-Leaves-Replay-Mod-API.patch index 69ed4958..30e4f235 100644 --- a/leaf-server/paper-patches/features/0030-Leaves-Replay-Mod-API.patch +++ b/leaf-server/paper-patches/features/0030-Leaves-Replay-Mod-API.patch @@ -73,10 +73,10 @@ index 476eefebace887064b728f08af40c746b6f70787..beae8a57a0ce9b8e7d81619efe4c39d9 if (entity instanceof EnderDragonPart complexPart) { if (complexPart.parentMob instanceof EnderDragon) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index c5da43af18b507d348dae8fa46852c1d1af65742..4fcc231b0acbb536f3f6466454555845fe54a815 100644 +index d612623cf25f454cc535c5d395758ed510d345f6..d8dcb28810668b26b538a6d26038e295d10019e4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2294,7 +2294,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2244,7 +2244,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean canSee(Player player) { diff --git a/leaf-server/paper-patches/features/0032-SparklyPaper-Optimize-canSee-checks.patch b/leaf-server/paper-patches/features/0032-SparklyPaper-Optimize-canSee-checks.patch index 90880432..caa2953a 100644 --- a/leaf-server/paper-patches/features/0032-SparklyPaper-Optimize-canSee-checks.patch +++ b/leaf-server/paper-patches/features/0032-SparklyPaper-Optimize-canSee-checks.patch @@ -16,10 +16,10 @@ This seems stupid, but it does seem that it improves the performance a bit, and We also create a "canSee" method tailored for "ChunkMap#updatePlayer()", a method without the equals check (the "updatePlayer()" already checks if the entity is the same entity) because the CraftPlayer's `equals()` check is a *bit* expensive compared to only checking the object's identity, and because the identity has already been check, we don't need to check it twice. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 4fcc231b0acbb536f3f6466454555845fe54a815..a6d89e3e6dcdfac785111706dfceabffa0a52cbf 100644 +index d8dcb28810668b26b538a6d26038e295d10019e4..384b11fdf3606f0ee59ea1e58a3a312e3898fce6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -227,7 +227,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -228,7 +228,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { private boolean hasPlayedBefore = false; private final ConversationTracker conversationTracker = new ConversationTracker(); private final Set channels = new HashSet(); @@ -28,7 +28,7 @@ index 4fcc231b0acbb536f3f6466454555845fe54a815..a6d89e3e6dcdfac785111706dfceabff private final Set unlistedEntities = new HashSet<>(); // Paper - Add Listing API for Player private static final WeakHashMap> pluginWeakReferences = new WeakHashMap<>(); private int hash = 0; -@@ -2299,9 +2299,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2249,9 +2249,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean canSee(org.bukkit.entity.Entity entity) { diff --git a/leaf-server/paper-patches/features/0042-Multithreaded-Tracker.patch b/leaf-server/paper-patches/features/0042-Multithreaded-Tracker.patch index 41b4bc4f..e9fff02f 100644 --- a/leaf-server/paper-patches/features/0042-Multithreaded-Tracker.patch +++ b/leaf-server/paper-patches/features/0042-Multithreaded-Tracker.patch @@ -72,10 +72,10 @@ index beae8a57a0ce9b8e7d81619efe4c39d908869319..6b1926080eddf61ff9c0156a6846f7f0 } return set; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index a6d89e3e6dcdfac785111706dfceabffa0a52cbf..66d555e97177e340ee1c07ae389a6c52855dd3d9 100644 +index 384b11fdf3606f0ee59ea1e58a3a312e3898fce6..15d549931183e0c9a7dc54737fc2947af58934b0 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2895,7 +2895,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2845,7 +2845,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { Iterator iterator = collection.iterator(); while (iterator.hasNext()) { AttributeInstance genericInstance = iterator.next(); @@ -85,10 +85,10 @@ index a6d89e3e6dcdfac785111706dfceabffa0a52cbf..66d555e97177e340ee1c07ae389a6c52 break; } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 98b766d115856dbf3ea11a983c1304591032f1b0..62cefed7674a6938698a57f5f89750d120461e9c 100644 +index a162440a583801671787163d998d6b9546ef7e61..5e73db484a5526f4c39c7cc2de5ddc3ff037d2e4 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1798,6 +1798,26 @@ public class CraftEventFactory { +@@ -1808,6 +1808,26 @@ public class CraftEventFactory { } public static boolean handleBlockFormEvent(Level world, BlockPos pos, net.minecraft.world.level.block.state.BlockState state, int flags, @Nullable Entity entity, boolean checkSetResult) { diff --git a/leaf-server/paper-patches/features/0049-SparklyPaper-Parallel-world-ticking.patch b/leaf-server/paper-patches/features/0049-SparklyPaper-Parallel-world-ticking.patch index 710d0d3a..994660a6 100644 --- a/leaf-server/paper-patches/features/0049-SparklyPaper-Parallel-world-ticking.patch +++ b/leaf-server/paper-patches/features/0049-SparklyPaper-Parallel-world-ticking.patch @@ -1508,7 +1508,7 @@ index 196835bdf95ba0e149b2977e9ef41698971f501f..eb7e63d4549e672ff1206055d2d75439 net.minecraft.world.item.ItemStack nms = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(item); diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java -index eb51cfce4069035664d2d1e3d30ab681e917dee6..aea45592a3e870b9474e64317c329c55ffbebfdb 100644 +index db71a9fc02bfac7799b58f07da044e53b2273e98..842713df01a0bde562b2bef366af7d5429497bae 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java @@ -195,14 +195,14 @@ public final class CraftBlockStates { @@ -1530,10 +1530,10 @@ index eb51cfce4069035664d2d1e3d30ab681e917dee6..aea45592a3e870b9474e64317c329c55 } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 62cefed7674a6938698a57f5f89750d120461e9c..3c21b9701e0266bc56e6d3fc855bf49ed381441c 100644 +index 5e73db484a5526f4c39c7cc2de5ddc3ff037d2e4..acb5182a59859f65653cd309ca85b8301ace5383 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -819,6 +819,28 @@ public class CraftEventFactory { +@@ -829,6 +829,28 @@ public class CraftEventFactory { } public static BlockPos sourceBlockOverride = null; // SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPos up to five methods deep. @@ -1562,7 +1562,7 @@ index 62cefed7674a6938698a57f5f89750d120461e9c..3c21b9701e0266bc56e6d3fc855bf49e public static boolean handleBlockSpreadEvent(LevelAccessor world, BlockPos source, BlockPos target, net.minecraft.world.level.block.state.BlockState state, int flags) { return handleBlockSpreadEvent(world, source, target, state, flags, false); -@@ -834,7 +856,10 @@ public class CraftEventFactory { +@@ -844,7 +866,10 @@ public class CraftEventFactory { CraftBlockState snapshot = CraftBlockStates.getBlockState(world, target); snapshot.setData(state); diff --git a/public/readme/README_CN.md b/public/readme/README_CN.md index 0fd85368..f7ea6159 100644 --- a/public/readme/README_CN.md +++ b/public/readme/README_CN.md @@ -2,7 +2,7 @@
[![下载](https://img.shields.io/badge/releases-blue?label=%e4%b8%8b%e8%bd%bd&style=for-the-badge&colorA=19201a&colorB=298046)](https://www.leafmc.one/zh/download)⠀ -[![Github Actions 构建](https://img.shields.io/github/actions/workflow/status/Winds-Studio/Leaf/build-1216.yml?label=%e6%9e%84%e5%bb%ba&style=for-the-badge&colorA=19201a&colorB=298046)](https://github.com/Winds-Studio/Leaf/actions)⠀ +[![Github Actions 构建](https://img.shields.io/github/actions/workflow/status/Winds-Studio/Leaf/build-1217.yml?label=%e6%9e%84%e5%bb%ba&style=for-the-badge&colorA=19201a&colorB=298046)](https://github.com/Winds-Studio/Leaf/actions)⠀ ![QQ](https://img.shields.io/badge/619278377-blue?label=QQ%e7%be%a4&style=for-the-badge&colorA=19201a&colorB=298046) [![文档](https://img.shields.io/badge/leafmc.one/zh/docs-blue?label=%e6%96%87%e6%a1%a3&style=for-the-badge&colorA=19201a&colorB=298046)](https://www.leafmc.one/zh/docs) @@ -65,7 +65,7 @@ cn.dreeam.leaf leaf-api - 1.21.6-R0.1-SNAPSHOT + 1.21.7-R0.1-SNAPSHOT provided ``` @@ -78,7 +78,7 @@ repositories { } dependencies { - compileOnly("cn.dreeam.leaf:leaf-api:1.21.6-R0.1-SNAPSHOT") + compileOnly("cn.dreeam.leaf:leaf-api:1.21.7-R0.1-SNAPSHOT") } java { diff --git a/scripts/prepareRelease.sh b/scripts/prepareRelease.sh index a495fee4..f9c8a3af 100755 --- a/scripts/prepareRelease.sh +++ b/scripts/prepareRelease.sh @@ -2,15 +2,15 @@ set -e IS_EOL=false -IS_UNSUPPORTED=true +IS_UNSUPPORTED=false IS_DEV=false -JAR_NAME="leaf-1.21.6" -CURRENT_TAG="ver-1.21.6" +JAR_NAME="leaf-1.21.7" +CURRENT_TAG="ver-1.21.7" RELEASE_NOTES="release_notes.md" # Rename Leaf jar -mv ./leaf-server/build/libs/leaf-paperclip-1.21.6-R0.1-SNAPSHOT-mojmap.jar ./$JAR_NAME-${BUILD_NUMBER}.jar +mv ./leaf-server/build/libs/leaf-paperclip-1.21.7-R0.1-SNAPSHOT-mojmap.jar ./$JAR_NAME-${BUILD_NUMBER}.jar # Branch name CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) diff --git a/scripts/upstreamCommit.sh b/scripts/upstreamCommit.sh index 0f6ea255..01720684 100755 --- a/scripts/upstreamCommit.sh +++ b/scripts/upstreamCommit.sh @@ -64,7 +64,7 @@ fi # Purpur updates if [ -n "$purpurHash" ]; then - purpur=$(getCommits "PurpurMC/Purpur" "$purpurHash" "ver/1.21.6") # Update this on every version update + purpur=$(getCommits "PurpurMC/Purpur" "$purpurHash" "ver/1.21.7") # Update this on every version update # Updates found if [ -n "$purpur" ]; then