diff --git a/.github/workflows/build-1201.yml b/.github/workflows/build-1201.yml index f7254299..fc265de6 100644 --- a/.github/workflows/build-1201.yml +++ b/.github/workflows/build-1201.yml @@ -1,5 +1,9 @@ name: Build Leaf 1.20.1 -on: [ push, pull_request ] + +on: + push: + branches: [ "ver/1.20.1" ] + jobs: build: runs-on: ubuntu-latest @@ -26,8 +30,23 @@ jobs: - name: Rename Paperclip Jar run: mv build/libs/Leaf-paperclip-1.20.1-R0.1-SNAPSHOT-reobf.jar ./leaf-1.20.1.jar + # - name: Publish API + # if: github.event_name != 'pull_request' + # run: | + # ./gradlew :leaf-api:publish + # ./gradlew publishDevBundlePublicationToLeafRepository -PpublishDevBundle=true + # env: + # ORG_GRADLE_PROJECT_leafUsername: ${{ secrets.REPO_USER }} + # ORG_GRADLE_PROJECT_leafPassword: ${{ secrets.REPO_PASSWORD }} + + - name: Upload Leaf + uses: actions/upload-artifact@main + with: + name: Leaf 1.20.1 + path: ./leaf-1.20.1.jar + - name: Release Leaf - if: github.ref_name == 'ver/1.20.1' + if: github.event_name != 'pull_request' uses: marvinpinto/action-automatic-releases@master with: title: "Leaf 1.20.1" diff --git a/build.gradle.kts b/build.gradle.kts index 9ea4ff6b..624860da 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,6 +4,7 @@ plugins { java `maven-publish` id("com.github.johnrengelman.shadow") version "8.1.1" apply false + id("io.github.goooler.shadow") version "8.1.7" apply false id("io.papermc.paperweight.patcher") version "1.5.9-SNAPSHOT" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135c..e6441136 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b745ffcc..b82aa23a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-rc-1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f..25da30db 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/patches/server/0006-Pufferfish-Dynamic-Activation-of-Brain.patch b/patches/server/0006-Pufferfish-Dynamic-Activation-of-Brain.patch index ab722a77..ee97fafa 100644 --- a/patches/server/0006-Pufferfish-Dynamic-Activation-of-Brain.patch +++ b/patches/server/0006-Pufferfish-Dynamic-Activation-of-Brain.patch @@ -70,7 +70,7 @@ index 9afc81ccb237c3655d64cdbe8a0db9a4d7791043..1679f0a3d095a7b758b468c77b6d3a4c private String descriptionId; @Nullable diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 035a0a8620fc46dbf026c65ccf2542d9f49e22b0..979b76d58d05c9d83dfae45d3052eea9431dfc65 100644 +index 2ea1916ef44d1cd5920351c0c6566d4714653488..8bd04d423a444c9b66a1ff787906eb7879721459 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -224,10 +224,10 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -260,7 +260,7 @@ index 9ca38f97f5d0d533187cdcd549b1accebc93bc95..55d5aad6ee98bc61dac415b106d0b6d1 super.customServerAiStep(); if ((this.tickCount + this.getId()) % 120 == 0) { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index ae3628efe7628427c53bb7d0f7fc6e457a511b94..67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce 100644 +index ae3628efe7628427c53bb7d0f7fc6e457a511b94..e0fd0b00057bd715d80d1c223027618eb9c385e4 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -143,6 +143,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -280,15 +280,14 @@ index ae3628efe7628427c53bb7d0f7fc6e457a511b94..67d3ce0dc480aa457e4a9ef5e08ae7c6 @Override @Deprecated // Paper protected void customServerAiStep() { -@@ -254,7 +257,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -254,7 +257,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } protected void customServerAiStep(final boolean inactive) { // Paper end - if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper + // Pufferfish start -+ if (!inactive) { -+ if (this.behaviorTick++ % this.activatedPriority == 0) -+ this.getBrain().tick((ServerLevel) this.level(), this); // Paper ++ if (!inactive && this.behaviorTick++ % this.activatedPriority == 0) { ++ this.getBrain().tick((ServerLevel) this.level(), this); // Paper + } + // Pufferfish end if (this.assignProfessionWhenSpawned) { @@ -357,7 +356,7 @@ index 5d161351e7517acf57e98203bab8c9f9ab9d4005..47c7b75b721bb2210eded56a7590612f private static void network() { diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 392c57d0365cc4371f58637ebac11e2b7492bf97..de4ea65a2bead3f20b205df28656d43636ba16df 100644 +index aa68ff1abced10ad03957c9c0ac24beaf112adcf..7d2b6657b0dbf5f899446d674dfc01b326fbc9c3 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -40,6 +40,9 @@ import net.minecraft.world.level.Level; diff --git a/patches/server/0009-Purpur-Server-Changes.patch b/patches/server/0009-Purpur-Server-Changes.patch index 58761e60..38bb76fa 100644 --- a/patches/server/0009-Purpur-Server-Changes.patch +++ b/patches/server/0009-Purpur-Server-Changes.patch @@ -12514,7 +12514,7 @@ index 5f407535298a31a34cfe114dd863fd6a9b977707..29c7e33fe961020e5a0007287fe9b663 } diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9b2433616 100644 +index e0fd0b00057bd715d80d1c223027618eb9c385e4..03b4f279b3ec2898445a745bb2af02afb0beaa9d 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -142,6 +142,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -12626,7 +12626,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9 } brain.addActivity(Activity.CORE, VillagerGoalPackages.getCorePackage(villagerprofession, 0.5F)); -@@ -318,7 +404,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -317,7 +403,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) { if (this.isBaby()) { this.setUnhappy(); @@ -12635,7 +12635,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9 } else { boolean flag = this.getOffers().isEmpty(); -@@ -331,9 +417,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -330,9 +416,10 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (flag) { @@ -12648,7 +12648,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9 this.startTrading(player); } -@@ -502,7 +589,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -501,7 +588,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler while (iterator.hasNext()) { MerchantOffer merchantrecipe = (MerchantOffer) iterator.next(); @@ -12657,7 +12657,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9 } } -@@ -752,7 +839,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -751,7 +838,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -12666,7 +12666,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9 } private boolean hungry() { -@@ -966,6 +1053,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -965,6 +1052,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler public boolean hasFarmSeeds() { return this.getInventory().hasAnyMatching((itemstack) -> { @@ -12678,7 +12678,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9 return itemstack.is(ItemTags.VILLAGER_PLANTABLE_SEEDS); }); } -@@ -1015,6 +1107,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1014,6 +1106,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) { @@ -12686,7 +12686,7 @@ index 67d3ce0dc480aa457e4a9ef5e08ae7c63ae146ce..e45e5dc22d2fb3292a1b3fd6e176a4a9 if (this.wantsToSpawnGolem(time)) { AABB axisalignedbb = this.getBoundingBox().inflate(10.0D, 10.0D, 10.0D); List list = world.getEntitiesOfClass(Villager.class, axisalignedbb); -@@ -1088,6 +1181,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1087,6 +1180,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -18653,45 +18653,6 @@ index 2959f713ce75a1df9c6c7cf5e021690cfcb6e1e7..3fa9539cfb2c35beeba6d44fa05cee97 DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "experience", "Allows the user to give themselves or others arbitrary values of experience", PermissionDefault.OP, commands); // Paper - wrong permission; redirects are de-redirected and the root literal name is used, so xp -> experience DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "defaultgamemode", "Allows the user to change the default gamemode of the server", PermissionDefault.OP, commands); DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "seed", "Allows the user to view the seed of the world", PermissionDefault.OP, commands); -diff --git a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java -index 7fee1c2779ab390586b2d3f75f56890846323500..5fdb227acfd1d8f55b770c8a66e97494c36db33c 100644 ---- a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java -+++ b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java -@@ -68,7 +68,7 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher { - // Gale end - branding changes - version fetcher - final Component history = getHistory(); - -- return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage; -+ return history != null ? Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), history, updateMessage) : updateMessage; // Purpur - } - - protected @Nullable String getMinecraftVersion() { // Gale - branding changes - version fetcher -@@ -120,13 +120,13 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher { - - switch (distance) { - case -1: -- return Component.text("Error obtaining version information", NamedTextColor.YELLOW); -+ return Component.text("* Error obtaining version information", NamedTextColor.RED); // Purpur - case 0: -- return Component.text("You are running the latest version", NamedTextColor.GREEN); -+ return Component.text("* You are running the latest version", NamedTextColor.GREEN); // Purpur - case -2: -- return Component.text("Unknown version", NamedTextColor.YELLOW); -+ return Component.text("* Unknown version", NamedTextColor.YELLOW); // Purpur - default: -- return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW) -+ return Component.text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur - .append(Component.newline()) - .append(Component.text("Download the new version at: ") - .append(Component.text(this.downloadPage, NamedTextColor.GOLD) // Gale - branding changes - version fetcher -@@ -174,6 +174,6 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher { - return null; - } - -- return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); -+ return org.bukkit.ChatColor.parseMM("Previous: %s", oldVersion); // Purpur - } - } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..8299aab5c29c8c6d996087537d9522b653b03ffa diff --git a/patches/server/0012-Configurable-server-GUI-name.patch b/patches/server/0012-Configurable-server-GUI-name.patch new file mode 100644 index 00000000..1d0ed0c7 --- /dev/null +++ b/patches/server/0012-Configurable-server-GUI-name.patch @@ -0,0 +1,53 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> +Date: Sun, 14 Jan 2024 05:14:09 -0500 +Subject: [PATCH] Configurable server GUI name + + +diff --git a/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java b/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java +index be7b3fe2dc84493dcde9e185717b0b7c7c2e9822..a1dc1924039b7d51dc2915cefda02d0ba5d0e439 100644 +--- a/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java ++++ b/src/main/java/net/minecraft/server/gui/MinecraftServerGui.java +@@ -56,7 +56,7 @@ public class MinecraftServerGui extends JComponent { + ; + } + +- final JFrame jframe = new JFrame("Purpur Minecraft server"); // Purpur ++ final JFrame jframe = new JFrame(org.dreeam.leaf.LeafConfig.serverGUIName); // Purpur // Leaf - Configurable server GUI name + final MinecraftServerGui servergui = new MinecraftServerGui(server); + + jframe.setDefaultCloseOperation(2); +@@ -64,7 +64,7 @@ public class MinecraftServerGui extends JComponent { + jframe.pack(); + jframe.setLocationRelativeTo((Component) null); + jframe.setVisible(true); +- jframe.setName("Purpur Minecraft server"); // Paper // Purpur ++ jframe.setName(org.dreeam.leaf.LeafConfig.serverGUIName); // Paper // Purpur // Leaf - Configurable server GUI name + + // Paper start - Add logo as frame image + try { +@@ -76,7 +76,7 @@ public class MinecraftServerGui extends JComponent { + jframe.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent windowevent) { + if (!servergui.isClosing.getAndSet(true)) { +- jframe.setTitle("Purpur Minecraft server - shutting down!"); // Purpur ++ jframe.setTitle(org.dreeam.leaf.config.modules.misc.ServerBrand.serverGUIName + " - shutting down!"); // Purpur // Leaf - Configurable server GUI name + server.halt(true); + servergui.runFinalizers(); + } +diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java +index 80a196442edbc6b4eb44bb6a405100871aea2f6a..ffed6b74b1bc2137e238f7d2955e2f39cb82b42d 100644 +--- a/src/main/java/org/dreeam/leaf/LeafConfig.java ++++ b/src/main/java/org/dreeam/leaf/LeafConfig.java +@@ -169,6 +169,11 @@ public class LeafConfig { + serverModName = getString("server-mod-name", serverModName); + } + ++ public static String serverGUIName = "Leaf Console"; ++ private static void serverGUIName() { ++ serverGUIName = getString("server-gui-name", serverGUIName); ++ } ++ + private static void removal() { + } + diff --git a/patches/server/0012-Bump-Dependencies.patch b/patches/server/0013-Bump-Dependencies.patch similarity index 100% rename from patches/server/0012-Bump-Dependencies.patch rename to patches/server/0013-Bump-Dependencies.patch diff --git a/patches/server/0013-Remove-Mojang-username-check.patch b/patches/server/0014-Remove-Mojang-username-check.patch similarity index 93% rename from patches/server/0013-Remove-Mojang-username-check.patch rename to patches/server/0014-Remove-Mojang-username-check.patch index 789ba4c9..ef27ec52 100644 --- a/patches/server/0013-Remove-Mojang-username-check.patch +++ b/patches/server/0014-Remove-Mojang-username-check.patch @@ -22,11 +22,11 @@ index badb262810effd22ca1ba021a1e746a777a19cbc..9baf55e9c3259aed431022a50c12d4f2 ServerLoginPacketListenerImpl.this.disconnect("Failed to verify username!"); return; diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 80a196442edbc6b4eb44bb6a405100871aea2f6a..1e9a440d790bdd521c58dfc9c1575e2759006d02 100644 +index ffed6b74b1bc2137e238f7d2955e2f39cb82b42d..ceda895277f3358f0cd37d50ca496c3e211b6a45 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -169,7 +169,11 @@ public class LeafConfig { - serverModName = getString("server-mod-name", serverModName); +@@ -174,7 +174,11 @@ public class LeafConfig { + serverGUIName = getString("server-gui-name", serverGUIName); } + public static boolean removeMojangUsernameCheck = true; diff --git a/patches/server/0014-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch b/patches/server/0015-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch similarity index 94% rename from patches/server/0014-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch rename to patches/server/0015-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch index b644cbbc..f195dce4 100644 --- a/patches/server/0014-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch +++ b/patches/server/0015-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch @@ -18,10 +18,10 @@ index 2821de09a36fc315897129f4691ba713386737db..5468b2fe5d0dd3e2b0ef774dff57e42e this.connection.send(new ClientboundLoginDisconnectPacket(chatmessage)); this.connection.disconnect(chatmessage); diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 1e9a440d790bdd521c58dfc9c1575e2759006d02..267f88d799fe98d1741a837c33d8c748362077ee 100644 +index ceda895277f3358f0cd37d50ca496c3e211b6a45..41e43d7b0b3627c3f2771008ef7d91cdd03f074e 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -170,10 +170,14 @@ public class LeafConfig { +@@ -175,10 +175,14 @@ public class LeafConfig { } public static boolean removeMojangUsernameCheck = true; diff --git a/patches/server/0015-Remove-UseItemOnPacket-Too-Far-Check.patch b/patches/server/0016-Remove-UseItemOnPacket-Too-Far-Check.patch similarity index 91% rename from patches/server/0015-Remove-UseItemOnPacket-Too-Far-Check.patch rename to patches/server/0016-Remove-UseItemOnPacket-Too-Far-Check.patch index a4a3ca69..9f405755 100644 --- a/patches/server/0015-Remove-UseItemOnPacket-Too-Far-Check.patch +++ b/patches/server/0016-Remove-UseItemOnPacket-Too-Far-Check.patch @@ -7,7 +7,7 @@ This Check is added in 1.17.x -> 1.18.x update by Mojang. By removing this check, it enable hackers to use some modules of hack clients. diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 40f32af1976323fd5ffe9aef0725025284daffb3..97958536a31f4a5f3b1935f5afeb9c81ecfa458b 100644 +index 89d40b2e1fbd0f0de03b90922c71e33db9efd3ae..c373f084d846e12faa42455c76f580b67b634717 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -2101,7 +2101,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -20,10 +20,10 @@ index 40f32af1976323fd5ffe9aef0725025284daffb3..97958536a31f4a5f3b1935f5afeb9c81 this.player.resetLastActionTime(); diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 267f88d799fe98d1741a837c33d8c748362077ee..83fee46886a21349d652b6bc871bd03ffbac2a7d 100644 +index 41e43d7b0b3627c3f2771008ef7d91cdd03f074e..39c81e23a260aba4cbe70fb68adb5ebbceafefd4 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -171,6 +171,8 @@ public class LeafConfig { +@@ -176,6 +176,8 @@ public class LeafConfig { public static boolean removeMojangUsernameCheck = true; public static boolean removeSpigotCheckBungeeConfig = true; @@ -32,7 +32,7 @@ index 267f88d799fe98d1741a837c33d8c748362077ee..83fee46886a21349d652b6bc871bd03f private static void removal() { removeMojangUsernameCheck = getBoolean("remove-Mojang-username-check", removeMojangUsernameCheck, "Remove username check of Mojang", -@@ -178,6 +180,9 @@ public class LeafConfig { +@@ -183,6 +185,9 @@ public class LeafConfig { removeSpigotCheckBungeeConfig = getBoolean("remove-Spigot-check-bungee-config", removeSpigotCheckBungeeConfig, "Enable player enter backend server through proxy", "without backend server enabling its bungee mode"); diff --git a/patches/server/0016-KTP-Optimize-spigot-event-bus.patch b/patches/server/0017-KTP-Allow-unknown-event-thread-execution.patch similarity index 85% rename from patches/server/0016-KTP-Optimize-spigot-event-bus.patch rename to patches/server/0017-KTP-Allow-unknown-event-thread-execution.patch index bbab50d7..e06566c2 100644 --- a/patches/server/0016-KTP-Optimize-spigot-event-bus.patch +++ b/patches/server/0017-KTP-Allow-unknown-event-thread-execution.patch @@ -1,15 +1,15 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Bjarne Koll Date: Sun, 19 Feb 2023 16:14:28 +0100 -Subject: [PATCH] KTP: Optimize spigot event bus +Subject: [PATCH] KTP: Allow unknown event thread execution Original license: GPL v3 Original project: https://github.com/lynxplay/ktp -This patch contains a lot of small optimizations to the spigot event bus -to improve its speed as much as possible, allowing for a large amount of -events to be published by the server without impacting the overall -performance too much. +This patch allows events to actively define that they may or may not be +called on the main thread of the server. +This is preferred over passing the "asyncness" of the event as async +bool parameter to the event instance every time. diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperEventManager.java index a1c9726d25479b5326fe2fa2b0f5a98d6b2da4c5..06dfd0b27ac0006a2be07f54a0702519a691c6ec 100644 diff --git a/patches/server/0017-KeYi-Player-Skull-API.patch b/patches/server/0018-KeYi-Player-Skull-API.patch similarity index 95% rename from patches/server/0017-KeYi-Player-Skull-API.patch rename to patches/server/0018-KeYi-Player-Skull-API.patch index ddf97dea..3fbaa38a 100644 --- a/patches/server/0017-KeYi-Player-Skull-API.patch +++ b/patches/server/0018-KeYi-Player-Skull-API.patch @@ -7,7 +7,7 @@ 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 668d825a2469706e4de11629a0b41877de700ca6..441e6e70a9bc40fe986c05d4c4b46e498aa849ea 100644 +index 720a81da72a8002ff02cc39e5fca42354519c742..27203a4f30f719652dab80103eb3bd4c2104a9e3 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -29,6 +29,11 @@ import java.util.Optional; diff --git a/patches/server/0018-KeYi-Disable-arrow-despawn-counter-by-default.patch b/patches/server/0019-KeYi-Disable-arrow-despawn-counter-by-default.patch similarity index 100% rename from patches/server/0018-KeYi-Disable-arrow-despawn-counter-by-default.patch rename to patches/server/0019-KeYi-Disable-arrow-despawn-counter-by-default.patch diff --git a/patches/server/0019-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch b/patches/server/0020-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch similarity index 92% rename from patches/server/0019-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch rename to patches/server/0020-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch index ef13595c..69532382 100644 --- a/patches/server/0019-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch +++ b/patches/server/0020-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch @@ -20,10 +20,10 @@ index 3ff5c2a4a2cca5c9a89ceafd9fddeb1012344433..90ab4610026b23ac84e6c941c6581d13 } else { ItemEntity.merge(other, itemstack1, this, itemstack); diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 83fee46886a21349d652b6bc871bd03ffbac2a7d..fc3938c16c43277e22b7a322177fa2a9150f1ff8 100644 +index 39c81e23a260aba4cbe70fb68adb5ebbceafefd4..dc492bc4aab5f5e305282f4ebb239341fe8f30f0 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -194,6 +194,7 @@ public class LeafConfig { +@@ -199,6 +199,7 @@ public class LeafConfig { public static int activationDistanceMod = 8; public static boolean throttleInactiveGoalSelectorTick = true; public static Map projectileTimeouts; @@ -31,7 +31,7 @@ index 83fee46886a21349d652b6bc871bd03ffbac2a7d..fc3938c16c43277e22b7a322177fa2a9 private static void performance() { boolean asyncMobSpawning = getBoolean("performance.enable-async-mob-spawning", enableAsyncMobSpawning, "Whether or not asynchronous mob spawning should be enabled.", -@@ -242,6 +243,7 @@ public class LeafConfig { +@@ -247,6 +248,7 @@ public class LeafConfig { String type = EntityType.getKey(entityType).getPath().toUpperCase(Locale.ROOT); entityType.ttl = config.getInt("entity_timeouts." + type, -1); } diff --git a/patches/server/0020-Carpet-Fixes-Optimized-getBiome-method.patch b/patches/server/0021-Carpet-Fixes-Optimized-getBiome-method.patch similarity index 100% rename from patches/server/0020-Carpet-Fixes-Optimized-getBiome-method.patch rename to patches/server/0021-Carpet-Fixes-Optimized-getBiome-method.patch diff --git a/patches/server/0021-Carpet-Fixes-Use-optimized-RecipeManager.patch b/patches/server/0022-Carpet-Fixes-Use-optimized-RecipeManager.patch similarity index 100% rename from patches/server/0021-Carpet-Fixes-Use-optimized-RecipeManager.patch rename to patches/server/0022-Carpet-Fixes-Use-optimized-RecipeManager.patch diff --git a/patches/server/0022-Akarin-Save-Json-list-asynchronously.patch b/patches/server/0023-Akarin-Save-Json-list-asynchronously.patch similarity index 100% rename from patches/server/0022-Akarin-Save-Json-list-asynchronously.patch rename to patches/server/0023-Akarin-Save-Json-list-asynchronously.patch diff --git a/patches/server/0023-Slice-Smooth-Teleports.patch b/patches/server/0024-Slice-Smooth-Teleports.patch similarity index 95% rename from patches/server/0023-Slice-Smooth-Teleports.patch rename to patches/server/0024-Slice-Smooth-Teleports.patch index 2b97acd4..9a7186e9 100644 --- a/patches/server/0023-Slice-Smooth-Teleports.patch +++ b/patches/server/0024-Slice-Smooth-Teleports.patch @@ -7,7 +7,7 @@ Original license: MIT Original project: https://github.com/Cryptite/Slice diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 54807be5d539fd768f9cb7a8ce912983ae328b46..26f904d5c63bd25d7aac3ab667ec45900d84ae5a 100644 +index 7206e59afd73e8b00993518a671dd2de1af34242..e3b66651df8a67b3cddfd027316a57986510788c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -284,6 +284,7 @@ public class ServerPlayer extends Player { @@ -38,7 +38,7 @@ index e3d1e030063a8746dbdaea14c6de7d900bc1ad0f..ec1dd7c0046ac9091d5b6b2cd7032378 // entityplayer1.connection.teleport(entityplayer1.getX(), entityplayer1.getY(), entityplayer1.getZ(), entityplayer1.getYRot(), entityplayer1.getXRot()); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 441e6e70a9bc40fe986c05d4c4b46e498aa849ea..70459d17c359d4cb90f9ca1d40492acf657d733f 100644 +index 27203a4f30f719652dab80103eb3bd4c2104a9e3..41d67b3c57f55c6b5f685d8b00ca98ae1cd82881 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1265,6 +1265,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0024-Parchment-Make-FixLight-use-action-bar.patch b/patches/server/0025-Parchment-Make-FixLight-use-action-bar.patch similarity index 100% rename from patches/server/0024-Parchment-Make-FixLight-use-action-bar.patch rename to patches/server/0025-Parchment-Make-FixLight-use-action-bar.patch diff --git a/patches/server/0025-Leaves-Server-Utils.patch b/patches/server/0026-Leaves-Server-Utils.patch similarity index 100% rename from patches/server/0025-Leaves-Server-Utils.patch rename to patches/server/0026-Leaves-Server-Utils.patch diff --git a/patches/server/0026-Leaves-Jade-Protocol.patch b/patches/server/0027-Leaves-Jade-Protocol.patch similarity index 99% rename from patches/server/0026-Leaves-Jade-Protocol.patch rename to patches/server/0027-Leaves-Jade-Protocol.patch index 3dca3459..5a2452c2 100644 --- a/patches/server/0026-Leaves-Jade-Protocol.patch +++ b/patches/server/0027-Leaves-Jade-Protocol.patch @@ -81,10 +81,10 @@ index 62e4e6e840dd1d5dcbab14d2f5708839a08a8d4d..5c7264f1f1147d27b22164c905ebfaa1 // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index fc3938c16c43277e22b7a322177fa2a9150f1ff8..9445177d2cb64ae1cd0bd88d0c0b2ad89ef924f6 100644 +index dc492bc4aab5f5e305282f4ebb239341fe8f30f0..46ab8b1b5edad18c1283db012efe25cada186630 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -246,7 +246,9 @@ public class LeafConfig { +@@ -251,7 +251,9 @@ public class LeafConfig { useSpigotItemMergingMechanism = getBoolean("performance.use-spigot-item-merging-mechanism", useSpigotItemMergingMechanism); } diff --git a/patches/server/0027-Leaves-Appleskin-Protocol.patch b/patches/server/0028-Leaves-Appleskin-Protocol.patch similarity index 98% rename from patches/server/0027-Leaves-Appleskin-Protocol.patch rename to patches/server/0028-Leaves-Appleskin-Protocol.patch index 164003b1..8f81de57 100644 --- a/patches/server/0027-Leaves-Appleskin-Protocol.patch +++ b/patches/server/0028-Leaves-Appleskin-Protocol.patch @@ -57,10 +57,10 @@ index 5c7264f1f1147d27b22164c905ebfaa1de438faf..164f07df76b10521b0f946258d4667ac // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 9445177d2cb64ae1cd0bd88d0c0b2ad89ef924f6..56dc6cb0b5659619ec5df42088fbecf758e652c6 100644 +index 46ab8b1b5edad18c1283db012efe25cada186630..1de68bd11291f7ccb38365212904ef5874b8e492 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -247,8 +247,10 @@ public class LeafConfig { +@@ -252,8 +252,10 @@ public class LeafConfig { } public static boolean jadeProtocol = false; diff --git a/patches/server/0028-Leaves-Xaero-Map-Protocol.patch b/patches/server/0029-Leaves-Xaero-Map-Protocol.patch similarity index 96% rename from patches/server/0028-Leaves-Xaero-Map-Protocol.patch rename to patches/server/0029-Leaves-Xaero-Map-Protocol.patch index be923114..64f6df48 100644 --- a/patches/server/0028-Leaves-Xaero-Map-Protocol.patch +++ b/patches/server/0029-Leaves-Xaero-Map-Protocol.patch @@ -19,7 +19,7 @@ index 7637dbf519568693fd1b707490d4cd8a2776c3a7..605da20aa58e5fbe9b306078c458d932 // CraftBukkit start - handle player weather // entityplayer.connection.send(new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.START_RAINING, 0.0F)); diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 56dc6cb0b5659619ec5df42088fbecf758e652c6..4cf74bc39f61e024b7d453759cdc9397f0e3d4f5 100644 +index 1de68bd11291f7ccb38365212904ef5874b8e492..7725cadfdae94c88b77bb1eb51d66609f20adc60 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java @@ -19,6 +19,7 @@ import java.util.Collections; @@ -30,7 +30,7 @@ index 56dc6cb0b5659619ec5df42088fbecf758e652c6..4cf74bc39f61e024b7d453759cdc9397 public class LeafConfig { -@@ -248,9 +249,13 @@ public class LeafConfig { +@@ -253,9 +254,13 @@ public class LeafConfig { public static boolean jadeProtocol = false; public static boolean appleskinProtocol = false; diff --git a/patches/server/0029-Fix-Make-log4j-compatible-with-future-release.patch b/patches/server/0030-Fix-Make-log4j-compatible-with-future-release.patch similarity index 100% rename from patches/server/0029-Fix-Make-log4j-compatible-with-future-release.patch rename to patches/server/0030-Fix-Make-log4j-compatible-with-future-release.patch diff --git a/patches/server/0030-Fix-compile-error.patch b/patches/server/0031-Fix-compile-error.patch similarity index 100% rename from patches/server/0030-Fix-compile-error.patch rename to patches/server/0031-Fix-compile-error.patch diff --git a/patches/server/0031-sync-with-Gale-s-Optimize-villager-data-storage.patc.patch b/patches/server/0032-sync-with-Gale-s-Optimize-villager-data-storage.patc.patch similarity index 100% rename from patches/server/0031-sync-with-Gale-s-Optimize-villager-data-storage.patc.patch rename to patches/server/0032-sync-with-Gale-s-Optimize-villager-data-storage.patc.patch diff --git a/patches/server/0032-Revert-Purpur-Fire-Immunity-API.patch b/patches/server/0033-Revert-Purpur-Fire-Immunity-API.patch similarity index 100% rename from patches/server/0032-Revert-Purpur-Fire-Immunity-API.patch rename to patches/server/0033-Revert-Purpur-Fire-Immunity-API.patch diff --git a/patches/server/0033-Petal-Async-Pathfinding.patch b/patches/server/0034-Petal-Async-Pathfinding.patch similarity index 99% rename from patches/server/0033-Petal-Async-Pathfinding.patch rename to patches/server/0034-Petal-Async-Pathfinding.patch index 1f0311d2..31251ec7 100644 --- a/patches/server/0033-Petal-Async-Pathfinding.patch +++ b/patches/server/0034-Petal-Async-Pathfinding.patch @@ -14,7 +14,7 @@ This patch was ported downstream from the Petal fork. Makes most pathfinding-related work happen asynchronously diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index b27b1df608bca3242bed8bc5b7603d0e88fa50bf..34789645c9c0dd69e1c6787853c3ea17bfcc2145 100644 +index 455a0a96ac6aa6106e9011cd41be228b5a880fe5..211099df1a84748eafccfba984926fc545ed3c14 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -292,6 +292,7 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -943,7 +943,7 @@ index 0e2b14e7dfedf209d63279c81723fd7955122d78..079b278e2e262af433bb5bd0c12b3d8d public SwimNodeEvaluator(boolean canJumpOutOfWater) { diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 4cf74bc39f61e024b7d453759cdc9397f0e3d4f5..4ec2954384a7c99b4f489b1b2a666f93ee69e98f 100644 +index 7725cadfdae94c88b77bb1eb51d66609f20adc60..13c2e89a84905dd988b4d296158b9985b960aad7 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java @@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableMap; @@ -962,7 +962,7 @@ index 4cf74bc39f61e024b7d453759cdc9397f0e3d4f5..4ec2954384a7c99b4f489b1b2a666f93 public class LeafConfig { -@@ -196,6 +198,9 @@ public class LeafConfig { +@@ -201,6 +203,9 @@ public class LeafConfig { public static boolean throttleInactiveGoalSelectorTick = true; public static Map projectileTimeouts; public static boolean useSpigotItemMergingMechanism = true; @@ -972,7 +972,7 @@ index 4cf74bc39f61e024b7d453759cdc9397f0e3d4f5..4ec2954384a7c99b4f489b1b2a666f93 private static void performance() { boolean asyncMobSpawning = getBoolean("performance.enable-async-mob-spawning", enableAsyncMobSpawning, "Whether or not asynchronous mob spawning should be enabled.", -@@ -245,6 +250,17 @@ public class LeafConfig { +@@ -250,6 +255,17 @@ public class LeafConfig { entityType.ttl = config.getInt("entity_timeouts." + type, -1); } useSpigotItemMergingMechanism = getBoolean("performance.use-spigot-item-merging-mechanism", useSpigotItemMergingMechanism); diff --git a/patches/server/0034-Fix-tracker-NPE.patch b/patches/server/0035-Fix-tracker-NPE.patch similarity index 100% rename from patches/server/0034-Fix-tracker-NPE.patch rename to patches/server/0035-Fix-tracker-NPE.patch diff --git a/patches/server/0035-Cache-minecart-vehicle-collision-results.patch b/patches/server/0036-Cache-minecart-vehicle-collision-results.patch similarity index 96% rename from patches/server/0035-Cache-minecart-vehicle-collision-results.patch rename to patches/server/0036-Cache-minecart-vehicle-collision-results.patch index 11dae841..cef0bebf 100644 --- a/patches/server/0035-Cache-minecart-vehicle-collision-results.patch +++ b/patches/server/0036-Cache-minecart-vehicle-collision-results.patch @@ -64,10 +64,10 @@ index c9b7b12470afac45b0132858407aacb8f91aac68..c27ffbc08a206a1e270b6419d38a7ad1 while (iterator.hasNext()) { Entity entity1 = (Entity) iterator.next(); diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 4ec2954384a7c99b4f489b1b2a666f93ee69e98f..d9477d6570ac6bfb9a0256a0dc734b1cfe5ea6c9 100644 +index 13c2e89a84905dd988b4d296158b9985b960aad7..3113970b5cb5d9b1a18c7f82b44c29afe89a0730 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -201,6 +201,7 @@ public class LeafConfig { +@@ -206,6 +206,7 @@ public class LeafConfig { public static boolean asyncPathfinding = false; public static int asyncPathfindingMaxThreads = 0; public static int asyncPathfindingKeepalive = 60; @@ -75,7 +75,7 @@ index 4ec2954384a7c99b4f489b1b2a666f93ee69e98f..d9477d6570ac6bfb9a0256a0dc734b1c private static void performance() { boolean asyncMobSpawning = getBoolean("performance.enable-async-mob-spawning", enableAsyncMobSpawning, "Whether or not asynchronous mob spawning should be enabled.", -@@ -261,6 +262,9 @@ public class LeafConfig { +@@ -266,6 +267,9 @@ public class LeafConfig { asyncPathfindingMaxThreads = 0; else Bukkit.getLogger().log(Level.INFO, "Using " + asyncPathfindingMaxThreads + " threads for Async Pathfinding"); diff --git a/patches/server/0036-Reduce-canSee-work.patch b/patches/server/0037-Reduce-canSee-work.patch similarity index 94% rename from patches/server/0036-Reduce-canSee-work.patch rename to patches/server/0037-Reduce-canSee-work.patch index 3f6b21c1..fd170590 100644 --- a/patches/server/0036-Reduce-canSee-work.patch +++ b/patches/server/0037-Reduce-canSee-work.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Reduce canSee work Credit by: Martijn Muijsers , MachineBreaker diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 7f7d5b9ac42bd510e29834d1df7f49d5659fbfa2..97c7e9c8dc2dc3860de4e697ecd2c1179ef6fd56 100644 +index 78f2bea7ae34be7a2152d7c31e90a524eac1ddfe..9ce1676e9a51ae7fd59bc4ef29efdcb160a86657 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -442,11 +442,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -35,7 +35,7 @@ index 7f7d5b9ac42bd510e29834d1df7f49d5659fbfa2..97c7e9c8dc2dc3860de4e697ecd2c117 return false; } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 70459d17c359d4cb90f9ca1d40492acf657d733f..8ee373cacbc1f9c7cb4f8300dcdbeeae4195fdae 100644 +index 41d67b3c57f55c6b5f685d8b00ca98ae1cd82881..b988261eebba51f4205df8ffe8661e7539c72c9c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -578,12 +578,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0037-Faster-Natural-Spawning.patch b/patches/server/0038-Faster-Natural-Spawning.patch similarity index 100% rename from patches/server/0037-Faster-Natural-Spawning.patch rename to patches/server/0038-Faster-Natural-Spawning.patch diff --git a/patches/server/0038-Faster-Random-for-xaeroMapServerID-generation.patch b/patches/server/0039-Faster-Random-for-xaeroMapServerID-generation.patch similarity index 90% rename from patches/server/0038-Faster-Random-for-xaeroMapServerID-generation.patch rename to patches/server/0039-Faster-Random-for-xaeroMapServerID-generation.patch index 26af3e39..92ff84bf 100644 --- a/patches/server/0038-Faster-Random-for-xaeroMapServerID-generation.patch +++ b/patches/server/0039-Faster-Random-for-xaeroMapServerID-generation.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Faster Random for xaeroMapServerID generation diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index d9477d6570ac6bfb9a0256a0dc734b1cfe5ea6c9..bf4c5ce82ecee2e7040d6cea173df7827606a8b8 100644 +index 3113970b5cb5d9b1a18c7f82b44c29afe89a0730..4974ba174afe8cfd30e4dbbd59d4e88f62f45380 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java @@ -2,6 +2,7 @@ package org.dreeam.leaf; @@ -16,7 +16,7 @@ index d9477d6570ac6bfb9a0256a0dc734b1cfe5ea6c9..bf4c5ce82ecee2e7040d6cea173df782 import net.minecraft.server.MinecraftServer; import net.minecraft.world.entity.EntityType; import org.bukkit.Bukkit; -@@ -270,7 +271,7 @@ public class LeafConfig { +@@ -275,7 +276,7 @@ public class LeafConfig { public static boolean jadeProtocol = false; public static boolean appleskinProtocol = false; public static boolean xaeroMapProtocol = false; diff --git a/patches/server/0039-Paper-Add-another-slot-sanity-check.patch b/patches/server/0040-Paper-Add-another-slot-sanity-check.patch similarity index 100% rename from patches/server/0039-Paper-Add-another-slot-sanity-check.patch rename to patches/server/0040-Paper-Add-another-slot-sanity-check.patch diff --git a/patches/server/0040-Configurable-fix-tripwire-dupe.patch b/patches/server/0041-Configurable-fix-tripwire-dupe.patch similarity index 97% rename from patches/server/0040-Configurable-fix-tripwire-dupe.patch rename to patches/server/0041-Configurable-fix-tripwire-dupe.patch index 70b21c19..d0657dba 100644 --- a/patches/server/0040-Configurable-fix-tripwire-dupe.patch +++ b/patches/server/0041-Configurable-fix-tripwire-dupe.patch @@ -40,10 +40,10 @@ index 004dce26ff073f1de52a84cd425c4f60fdab5e50..a02d4233c9dbb4e37532c3ab6c20bb1c if (flag1) { this.notifyNeighbors(world, pos, enumdirection); diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index bf4c5ce82ecee2e7040d6cea173df7827606a8b8..f24c52777e3f73a6b432d4b407e32217bcd6e038 100644 +index 4974ba174afe8cfd30e4dbbd59d4e88f62f45380..e25b4f2ad080d0fbd6782cee305a7c5f4f206a2a 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -288,4 +288,9 @@ public class LeafConfig { +@@ -293,4 +293,9 @@ public class LeafConfig { gg.pufferfish.pufferfish.sentry.SentryManager.init(); } } diff --git a/patches/server/0042-Fix-MC-249136-lag-when-attempting-to-locate-a-buried.patch b/patches/server/0042-Fix-MC-249136-lag-when-attempting-to-locate-a-buried.patch new file mode 100644 index 00000000..074323fc --- /dev/null +++ b/patches/server/0042-Fix-MC-249136-lag-when-attempting-to-locate-a-buried.patch @@ -0,0 +1,113 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> +Date: Thu, 22 Feb 2024 18:30:22 -0500 +Subject: [PATCH] Fix MC-249136: lag when attempting to locate a buried + treasure or opening/breaking a chest containing a map + +This patch ported from 1.20.5 snapshot - 24w04a +Mojang issues: https://bugs.mojang.com/browse/MC-249136 + +diff --git a/src/main/java/net/minecraft/world/level/StructureManager.java b/src/main/java/net/minecraft/world/level/StructureManager.java +index 09c85ed428b8eaf51f8b3c6e45cce925f05ab354..07a0be7393215ce891799b444c27b4b34e2d293d 100644 +--- a/src/main/java/net/minecraft/world/level/StructureManager.java ++++ b/src/main/java/net/minecraft/world/level/StructureManager.java +@@ -23,6 +23,7 @@ import net.minecraft.world.level.levelgen.structure.StructureCheck; + import net.minecraft.world.level.levelgen.structure.StructureCheckResult; + import net.minecraft.world.level.levelgen.structure.StructurePiece; + import net.minecraft.world.level.levelgen.structure.StructureStart; ++import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement; + + public class StructureManager { + public final LevelAccessor level; +@@ -163,9 +164,11 @@ public class StructureManager { + return this.level.getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES).getAllReferences(); + } + +- public StructureCheckResult checkStructurePresence(ChunkPos chunkPos, Structure structure, boolean skipExistingChunk) { +- return this.structureCheck.checkStart(chunkPos, structure, skipExistingChunk); ++ // Leaf start - Fix MC-249136 ++ public StructureCheckResult checkStructurePresence(ChunkPos chunkPos, Structure structure, StructurePlacement placement, boolean skipExistingChunk) { ++ return this.structureCheck.checkStart(chunkPos, structure, placement, skipExistingChunk); + } ++ // Leaf end + + public void addReference(StructureStart structureStart) { + structureStart.addReference(); +diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java +index d5c2a608e1b4c8099c96b33d9d758e968350a46d..91c1e312ca50abbe8cf04a45bb421551dba03c25 100644 +--- a/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java ++++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGenerator.java +@@ -302,7 +302,7 @@ public abstract class ChunkGenerator { + } + + holder = (Holder) iterator.next(); +- structurecheckresult = structureAccessor.checkStructurePresence(pos, (Structure) holder.value(), skipReferencedStructures); ++ structurecheckresult = structureAccessor.checkStructurePresence(pos, (Structure) holder.value(), placement, skipReferencedStructures); // Leaf - Fix MC-249136 + } while (structurecheckresult == StructureCheckResult.START_NOT_PRESENT); + + if (!skipReferencedStructures && structurecheckresult == StructureCheckResult.START_PRESENT) { +diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java b/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java +index 16356d7f388561300e794a52f3f263b8e7d9b880..1e973bcbc79de7fdbeb22e3b577ea51c8a165c79 100644 +--- a/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java ++++ b/src/main/java/net/minecraft/world/level/levelgen/structure/StructureCheck.java +@@ -32,6 +32,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator; + import net.minecraft.world.level.chunk.storage.ChunkScanAccess; + import net.minecraft.world.level.chunk.storage.ChunkStorage; + import net.minecraft.world.level.levelgen.RandomState; ++import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement; + import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager; + import org.slf4j.Logger; + +@@ -161,7 +162,7 @@ public class StructureCheck { + this.structureConfigs = registryManager.registryOrThrow(Registries.STRUCTURE); + } + +- public StructureCheckResult checkStart(ChunkPos pos, Structure type, boolean skipReferencedStructures) { ++ public StructureCheckResult checkStart(ChunkPos pos, Structure type, StructurePlacement placement, boolean skipReferencedStructures) { // Leaf - Fix MC-249136 + long l = pos.toLong(); + Object2IntMap object2IntMap = this.loadedChunksSafe.get(l); // Paper - rewrite chunk system - synchronise this class + if (object2IntMap != null) { +@@ -171,6 +172,11 @@ public class StructureCheck { + if (structureCheckResult != null) { + return structureCheckResult; + } else { ++ // Leaf start - Fix MC-249136 ++ if (!placement.applyAdditionalChunkRestrictions(pos.x, pos.z, this.seed, null)) { ++ return StructureCheckResult.START_NOT_PRESENT; ++ } ++ // Leaf end + boolean bl = this.featureChecksSafe.computeIfAbsent(type, (structure2) -> { // Paper - rewrite chunk system - synchronise this class + return new SynchronisedLong2BooleanMap(PER_FEATURE_CHECK_LIMIT); // Paper - rewrite chunk system - synchronise this class + }).getOrCompute(l, (chunkPos) -> { // Paper - rewrite chunk system - synchronise this class +diff --git a/src/main/java/net/minecraft/world/level/levelgen/structure/placement/StructurePlacement.java b/src/main/java/net/minecraft/world/level/levelgen/structure/placement/StructurePlacement.java +index 594a2dd3b1d4c29c969d1992b8e93795da00e682..463f8f20136cc2615f4fb3fdda26c0c91254d3d9 100644 +--- a/src/main/java/net/minecraft/world/level/levelgen/structure/placement/StructurePlacement.java ++++ b/src/main/java/net/minecraft/world/level/levelgen/structure/placement/StructurePlacement.java +@@ -74,14 +74,20 @@ public abstract class StructurePlacement { + } + } + // Paper end +- if (!this.isPlacementChunk(calculator, chunkX, chunkZ)) { +- return false; +- } else if (this.frequency < 1.0F && !this.frequencyReductionMethod.shouldGenerate(calculator.getLevelSeed(), this.salt, chunkX, chunkZ, this.frequency, saltOverride)) { // Paper +- return false; +- } else { +- return !this.exclusionZone.isPresent() || !this.exclusionZone.get().isPlacementForbidden(calculator, chunkX, chunkZ); +- } ++ // Leaf start - Fix MC-249136 ++ return this.isPlacementChunk(calculator, chunkX, chunkZ) ++ && this.applyAdditionalChunkRestrictions(chunkX, chunkZ, calculator.getLevelSeed(), saltOverride) ++ && this.applyInteractionsWithOtherStructures(calculator, chunkX, chunkZ); ++ } ++ ++ public boolean applyAdditionalChunkRestrictions(int chunkX, int chunkZ, long levelSeed, Integer saltOverride) { ++ return !(this.frequency < 1.0f) || this.frequencyReductionMethod.shouldGenerate(levelSeed, this.salt, chunkX, chunkZ, this.frequency, saltOverride); // Paper - Add missing structure set seed configs ++ } ++ ++ public boolean applyInteractionsWithOtherStructures(ChunkGeneratorStructureState calculator, int chunkX, int chunkZ) { ++ return this.exclusionZone.isEmpty() || !this.exclusionZone.get().isPlacementForbidden(calculator, chunkX, chunkZ); + } ++ // Leaf end + + protected abstract boolean isPlacementChunk(ChunkGeneratorStructureState calculator, int chunkX, int chunkZ); + diff --git a/patches/server/0043-Fix-MC-172047.patch b/patches/server/0043-Fix-MC-172047.patch new file mode 100644 index 00000000..1581ff7e --- /dev/null +++ b/patches/server/0043-Fix-MC-172047.patch @@ -0,0 +1,58 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: HaHaWTH +Date: Fri, 15 Mar 2024 02:12:38 +0800 +Subject: [PATCH] Fix MC-172047 + +Mojang issues: https://bugs.mojang.com/browse/MC-172047 + +diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java +index 64bceae4d06b35fcbecb0daca2496ba30e39d995..47d1ca92aa71a6101496f8fdbd70d02ef75a55df 100644 +--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java ++++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java +@@ -58,6 +58,7 @@ import net.minecraft.world.entity.ai.goal.target.OwnerHurtTargetGoal; + import net.minecraft.world.entity.ai.goal.target.ResetUniversalAngerTargetGoal; + import net.minecraft.world.entity.animal.horse.AbstractHorse; + import net.minecraft.world.entity.animal.horse.Llama; ++import net.minecraft.world.entity.decoration.ArmorStand; + import net.minecraft.world.entity.monster.AbstractSkeleton; + import net.minecraft.world.entity.monster.Creeper; + import net.minecraft.world.entity.monster.Ghast; +@@ -670,17 +671,29 @@ public class Wolf extends TamableAnimal implements NeutralMob { + + @Override + public boolean wantsToAttack(LivingEntity target, LivingEntity owner) { +- if (!(target instanceof Creeper) && !(target instanceof Ghast)) { +- if (target instanceof Wolf) { +- Wolf entitywolf = (Wolf) target; +- +- return !entitywolf.isTame() || entitywolf.getOwner() != owner; +- } else { +- return target instanceof Player && owner instanceof Player && !((Player) owner).canHarmPlayer((Player) target) ? false : (target instanceof AbstractHorse && ((AbstractHorse) target).isTamed() ? false : !(target instanceof TamableAnimal) || !((TamableAnimal) target).isTame()); +- } +- } else { ++ // Leaf start - Improve readability ++ if (target instanceof Creeper || target instanceof Ghast || target instanceof ArmorStand) { // Leaf - Fix MC-172047 + return false; + } ++ ++ if (target instanceof Wolf entityWolf) { ++ return !entityWolf.isTame() || entityWolf.getOwner() != owner; ++ } ++ ++ if (target instanceof Player targetPlayer && owner instanceof Player ownerPlayer) { ++ return ownerPlayer.canHarmPlayer(targetPlayer); ++ } ++ ++ if (target instanceof AbstractHorse targetHorse) { ++ return !targetHorse.isTamed(); ++ } ++ ++ if (target instanceof TamableAnimal tamableAnimalTarget) { ++ return !tamableAnimalTarget.isTame(); ++ } ++ ++ return true; ++ // Leaf end + } + + @Override diff --git a/patches/server/0044-Configurable-bamboo-collision.patch b/patches/server/0044-Configurable-bamboo-collision.patch new file mode 100644 index 00000000..1923e99b --- /dev/null +++ b/patches/server/0044-Configurable-bamboo-collision.patch @@ -0,0 +1,61 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: HaHaWTH +Date: Sun, 12 May 2024 16:04:13 +0800 +Subject: [PATCH] Configurable-bamboo-collision + + +diff --git a/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java b/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java +index a5d391af2c6b733d653188f4aeeec2afffd96adf..5413c59c50f8cf60eaddbb0dce62b5e72f90e4fd 100644 +--- a/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java ++++ b/src/main/java/net/minecraft/world/level/block/BambooStalkBlock.java +@@ -33,7 +33,7 @@ public class BambooStalkBlock extends Block implements BonemealableBlock { + protected static final float COLLISION_AABB_OFFSET = 1.5F; + protected static final VoxelShape SMALL_SHAPE = Block.box(5.0D, 0.0D, 5.0D, 11.0D, 16.0D, 11.0D); + protected static final VoxelShape LARGE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 16.0D, 13.0D); +- protected static final VoxelShape COLLISION_SHAPE = Block.box(6.5D, 0.0D, 6.5D, 9.5D, 16.0D, 9.5D); ++ protected static final VoxelShape COLLISION_SHAPE = org.dreeam.leaf.config.modules.gameplay.ConfigurableBambooCollision.enableCollision ? Block.box(6.5D, 0.0D, 6.5D, 9.5D, 16.0D, 9.5D) : Block.box(0.0D, 15.9D, 0.0D, 16.0D, 16.0D, 16.0D); // Leaf - Configurable bamboo collision + public static final IntegerProperty AGE = BlockStateProperties.AGE_1; + public static final EnumProperty LEAVES = BlockStateProperties.BAMBOO_LEAVES; + public static final IntegerProperty STAGE = BlockStateProperties.STAGE; +@@ -73,9 +73,17 @@ public class BambooStalkBlock extends Block implements BonemealableBlock { + + @Override + public VoxelShape getCollisionShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { +- Vec3 vec3d = state.getOffset(world, pos); ++ // Leaf start - Configurable bamboo collision ++ if (org.dreeam.leaf.config.modules.gameplay.ConfigurableBambooCollision.enableCollision) { ++ Vec3 vec3d = state.getOffset(world, pos); + +- return BambooStalkBlock.COLLISION_SHAPE.move(vec3d.x, vec3d.y, vec3d.z); ++ return BambooStalkBlock.COLLISION_SHAPE.move(vec3d.x, vec3d.y, vec3d.z); ++ } else { ++ return context.isAbove(net.minecraft.world.phys.shapes.Shapes.block(), pos, true) ++ ? COLLISION_SHAPE // Prevent desync ++ : net.minecraft.world.phys.shapes.Shapes.empty(); ++ } ++ // Leaf end + } + + @Override +diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java +index e25b4f2ad080d0fbd6782cee305a7c5f4f206a2a..4eadad401c642ec28845f60ed7485bd35bc6b488 100644 +--- a/src/main/java/org/dreeam/leaf/LeafConfig.java ++++ b/src/main/java/org/dreeam/leaf/LeafConfig.java +@@ -1,5 +1,6 @@ + package org.dreeam.leaf; + ++import com.electronwill.nightconfig.core.file.CommentedFileConfig; + import com.google.common.collect.ImmutableMap; + import net.minecraft.core.registries.BuiltInRegistries; + import java.util.concurrent.ThreadLocalRandom; +@@ -295,7 +296,9 @@ public class LeafConfig { + } + + public static boolean fixTripwireDupe = true; +- private static void tripwireDupe() { ++ public static boolean configurableBambooCollision = true; ++ private static void gameplay() { + fixTripwireDupe = getBoolean("gameplay.fix-tripwire-dupe", fixTripwireDupe); ++ configurableBambooCollision = getBoolean("gameplay.configurable_bamboo_collision", configurableBambooCollision); + } + } diff --git a/patches/server/0045-Use-a-shadow-fork-that-supports-Java-21.patch b/patches/server/0045-Use-a-shadow-fork-that-supports-Java-21.patch new file mode 100644 index 00000000..b50a5042 --- /dev/null +++ b/patches/server/0045-Use-a-shadow-fork-that-supports-Java-21.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: nostalfinals +Date: Tue, 12 Mar 2024 01:10:54 +0800 +Subject: [PATCH] Use a shadow fork that supports Java 21 + + +diff --git a/build.gradle.kts b/build.gradle.kts +index 99cf0bebf6bd1579c1f347e0c1750c7b13f74566..09dd1b8b9471b3e742b102e8ddf205f9be66e412 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -3,7 +3,7 @@ import io.papermc.paperweight.util.* + plugins { + java + `maven-publish` +- id("com.github.johnrengelman.shadow") ++ id("io.github.goooler.shadow") // Leaf - use a shadow fork that supports Java 21 + } + + val log4jPlugins = sourceSets.create("log4jPlugins") diff --git a/patches/work/0012-Fix-Pufferfish-and-Purpur-patches.patch b/patches/work/0012-Fix-Pufferfish-and-Purpur-patches.patch new file mode 100644 index 00000000..38ba7809 --- /dev/null +++ b/patches/work/0012-Fix-Pufferfish-and-Purpur-patches.patch @@ -0,0 +1,359 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> +Date: Mon, 29 Apr 2024 14:18:58 -0400 +Subject: [PATCH] Fix Pufferfish and Purpur patches + + +diff --git a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java +index e94224ed280247ee69dfdff8dc960f2b8729be33..5b9725a9a81c0850dc2809c150529e5f67a88b66 100644 +--- a/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java ++++ b/src/main/java/io/papermc/paper/command/PaperPluginsCommand.java +@@ -241,6 +241,8 @@ public class PaperPluginsCommand extends BukkitCommand { + + if (!paperPlugins.isEmpty()) { + sender.sendMessage(PAPER_HEADER.append(Component.text(" (%s):".formatted(paperPlugins.size())))); // Purpur ++ } else { ++ sender.sendMessage(PAPER_HEADER.append(Component.text(" (0):"))); // Leaf - Purpur - Makes plugins command better if no plugins + } + + for (Component component : formatProviders(paperPlugins, sender)) { // Purpur +@@ -249,6 +251,8 @@ public class PaperPluginsCommand extends BukkitCommand { + + if (!spigotPlugins.isEmpty()) { + sender.sendMessage(BUKKIT_HEADER.append(Component.text(" (%s):".formatted(spigotPlugins.size())))); // Purpur ++ } else { ++ sender.sendMessage(BUKKIT_HEADER.append(Component.text(" (0):"))); // Leaf - Purpur - Makes plugins command better if no plugins + } + + for (Component component : formatProviders(spigotPlugins, sender)) { // Purpur +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index c7c4a56cb09ca513abdbaf5674c325e551ea2909..ede6cd55688e573e003a6568100b18d5e620f878 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -293,7 +293,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { + AtomicReference atomicreference = new AtomicReference(); +@@ -974,6 +974,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= (f - 0.4F) * 2.0F) return false; ++ // Gale end - JettPack - optimize sun burn tick - optimizations and cache eye blockpos + boolean flag = this.isInWaterRainOrBubble() || this.isInPowderSnow || this.wasInPowderSnow; + +- if (f > 0.5F && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && !flag && this.level().canSeeSky(blockposition)) { ++ if (!flag && this.level().canSeeSky(this.cached_eye_blockpos)) { // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos + return true; + } + } +@@ -891,7 +907,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + public void tick() { + // Pufferfish start - entity TTL + if (type != EntityType.PLAYER && type.ttl >= 0 && this.tickCount >= type.ttl) { +- discard(); ++ discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur + return; + } + // Pufferfish end - entity TTL +diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java +index d06c5d16d312187b6a53c8995d524c0ec2d9f921..d55d869f0a389d58d001e59e26b1b5912b5c94a8 100644 +--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java ++++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +@@ -1068,17 +1068,19 @@ public abstract class LivingEntity extends Entity implements Attackable { + if (entity != null) { + EntityType entitytypes = entity.getType(); + ++ // Gale start - Petal - reduce skull ItemStack lookups for reduced visibility + // Purpur start +- if (entitytypes == EntityType.SKELETON && itemstack.is(Items.SKELETON_SKULL)) { ++ if (entitytypes == EntityType.SKELETON && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.SKELETON_SKULL)) { + d0 *= entity.level().purpurConfig.skeletonHeadVisibilityPercent; +- } else if (entitytypes == EntityType.ZOMBIE && itemstack.is(Items.ZOMBIE_HEAD)) { ++ } else if (entitytypes == EntityType.ZOMBIE && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.ZOMBIE_HEAD)) { + d0 *= entity.level().purpurConfig.zombieHeadVisibilityPercent; +- } else if (entitytypes == EntityType.CREEPER && itemstack.is(Items.CREEPER_HEAD)) { ++ } else if (entitytypes == EntityType.CREEPER && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.CREEPER_HEAD)) { + d0 *= entity.level().purpurConfig.creeperHeadVisibilityPercent; +- } else if ((entitytypes == EntityType.PIGLIN || entitytypes == EntityType.PIGLIN_BRUTE) && itemstack.is(Items.PIGLIN_HEAD)) { ++ } else if ((entitytypes == EntityType.PIGLIN || entitytypes == EntityType.PIGLIN_BRUTE) && this.getItemBySlot(EquipmentSlot.HEAD).is(Items.PIGLIN_HEAD)) { + d0 *= entity.level().purpurConfig.piglinHeadVisibilityPercent; + } + // Purpur end ++ // Gale end - Petal - reduce skull ItemStack lookups for reduced visibility + + // Purpur start + if (entity instanceof LivingEntity entityliving) { +diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java +index 1f787798b6d557a2379546f9a4910a7e7a12b178..6264d70f45be0aaee26c0ed0478228ceb36614d0 100644 +--- a/src/main/java/net/minecraft/world/entity/Mob.java ++++ b/src/main/java/net/minecraft/world/entity/Mob.java +@@ -747,7 +747,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti + @Override + public void aiStep() { + super.aiStep(); +- if (!this.level().isClientSide && this.canPickUpLoot() && this.isAlive() && !this.dead && (this.level().purpurConfig.entitiesPickUpLootBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { ++ if (!this.level().isClientSide && this.canPickUpLoot() && this.isAlive() && !this.dead && (this.level().purpurConfig.entitiesPickUpLootBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // Purpur + Vec3i baseblockposition = this.getPickupReach(); + List list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); + Iterator iterator = list.iterator(); +@@ -1860,11 +1860,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti + return flag; + } + +- // Gale start - JettPack - optimize sun burn tick - cache eye blockpos +- private BlockPos cached_eye_blockpos; +- private int cached_position_hashcode; +- // Gale end - JettPack - optimize sun burn tick - cache eye blockpos +- + public boolean isSunBurnTick() { + return super.isSunBurnTick(); + } +diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java +index 7db823e9edd70808c5629f0a7efd84fe40f42dd9..833858eacaf5ba788cb9f08a939379f0ff04b2cb 100644 +--- a/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java ++++ b/src/main/java/net/minecraft/world/entity/ai/behavior/TradeWithVillager.java +@@ -20,6 +20,7 @@ import org.jetbrains.annotations.Nullable; + public class TradeWithVillager extends Behavior { + // Gale start - optimize villager data storage + private static final Item[] WHEAT_SINGLETON_ARRAY = {Items.WHEAT}; ++ private static final Item[] NETHER_WART_SINGLETON_ARRAY = {Items.NETHER_WART}; // Leaf - sync with Gale's Optimize-villager-data-storage.patch + private @NotNull Item @Nullable [] trades = null; + // Gale end - optimize villager data storage + +@@ -65,7 +66,7 @@ public class TradeWithVillager extends Behavior { + + // Purpur start + if (world.purpurConfig.villagerClericsFarmWarts && world.purpurConfig.villagerClericFarmersThrowWarts && entity.getVillagerData().getProfession() == VillagerProfession.CLERIC && entity.getInventory().countItem(Items.NETHER_WART) > Items.NETHER_WART.getDefaultMaxStackSize() / 2) { +- throwHalfStack(entity, ImmutableSet.of(Items.NETHER_WART), villager); ++ throwHalfStack(entity, NETHER_WART_SINGLETON_ARRAY, villager); // Leaf - sync with Gale's Optimize-villager-data-storage.patch + } + // Purpur end + +diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +index 9419f230910d0338fc4ac6e2e7b749ee7d5ee362..2fe25397526c77c3b6b5e96d71d3681c6e26a54e 100644 +--- a/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java ++++ b/src/main/java/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +@@ -24,19 +24,15 @@ public class SecondaryPoiSensor extends Sensor { + + @Override + protected void doTick(ServerLevel world, Villager entity) { +- // Gale start - Lithium - skip secondary POI sensor if absent +- var secondaryPoi = entity.getVillagerData().getProfession().secondaryPoi(); +- if (secondaryPoi == null) { // Gale - optimize villager data storage +- entity.getBrain().eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); +- return; +- } +- // Gale end - Lithium - skip secondary POI sensor if absent + // Purpur start - make sure clerics don't wander to soul sand when the option is off + Brain brain = entity.getBrain(); +- if (!world.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC) { ++ // Gale start - Lithium - skip secondary POI sensor if absent ++ var secondaryPoi = entity.getVillagerData().getProfession().secondaryPoi(); ++ if (secondaryPoi == null || (!world.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { // Gale - optimize villager data storage + brain.eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); + return; + } ++ // Gale end - Lithium - skip secondary POI sensor if absent + // Purpur end + ResourceKey resourceKey = world.dimension(); + BlockPos blockPos = entity.blockPosition(); +diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +index 92521cbedcf89a855f10a3401933acaf84bc3f98..0bd72f76a65b6248f4e700877b2bda702f9590df 100644 +--- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java ++++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +@@ -680,7 +680,7 @@ public class ArmorStand extends LivingEntity { + + @Override + public void tick() { +- maxUpStep = level().purpurConfig.armorstandStepHeight; ++ maxUpStep = level().purpurConfig.armorstandStepHeight; // Purpur + // Paper start - Allow ArmorStands not to tick + if (!this.canTick) { + if (this.noTickPoseDirty) { +diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java +index 27db17e19dd95e99f7bd67747eba3c3072b48ed5..4c87fa47a97a75a270a0f1332ee6aea69f9cf9c5 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/Blaze.java ++++ b/src/main/java/net/minecraft/world/entity/monster/Blaze.java +@@ -72,7 +72,6 @@ public class Blaze extends Monster { + setDeltaMovement(mot.scale(0.9D)); + } + } +- // Purpur end + + @Override + public void initAttributes() { +@@ -83,6 +82,7 @@ public class Blaze extends Monster { + protected boolean isAlwaysExperienceDropper() { + return this.level().purpurConfig.blazeAlwaysDropExp; + } ++ // Purpur end + + @Override + protected void registerGoals() { +diff --git a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java +index 8f36f113e8eb3236ce53ad9cce320c3d6253d248..ebe79d9ad2934b53085c8a720fdfca0a6eda05ca 100644 +--- a/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java ++++ b/src/main/java/net/minecraft/world/entity/npc/VillagerProfession.java +@@ -31,7 +31,7 @@ public record VillagerProfession( + public static final VillagerProfession ARMORER = register("armorer", PoiTypes.ARMORER, SoundEvents.VILLAGER_WORK_ARMORER); + public static final VillagerProfession BUTCHER = register("butcher", PoiTypes.BUTCHER, SoundEvents.VILLAGER_WORK_BUTCHER); + public static final VillagerProfession CARTOGRAPHER = register("cartographer", PoiTypes.CARTOGRAPHER, SoundEvents.VILLAGER_WORK_CARTOGRAPHER); +- public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, ImmutableSet.of(Items.NETHER_WART), ImmutableSet.of(Blocks.SOUL_SAND), SoundEvents.VILLAGER_WORK_CLERIC); // Purpur ++ public static final VillagerProfession CLERIC = register("cleric", PoiTypes.CLERIC, new Item[] {Items.NETHER_WART}, Blocks.SOUL_SAND, SoundEvents.VILLAGER_WORK_CLERIC); // Purpur // Leaf - sync with Gale's Optimize-villager-data-storage.patch + public static final VillagerProfession FARMER = register( + "farmer", + PoiTypes.FARMER, +diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +index 330d6badfbd096e4aec873dcb419df7975cb60a3..abb950417bf5db30f37e50605e897150bba67352 100644 +--- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java ++++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +@@ -71,7 +71,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { + int maxChunkLoadsPerProjectile = maxProjectileChunkLoadsConfig.perProjectile.max; + if (maxChunkLoadsPerProjectile >= 0 && this.chunksLoadedByProjectile >= maxChunkLoadsPerProjectile) { + if (maxProjectileChunkLoadsConfig.perProjectile.removeFromWorldAfterReachLimit) { +- this.discard(); ++ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); // Purpur + } else if (maxProjectileChunkLoadsConfig.perProjectile.resetMovementAfterReachLimit) { + this.setDeltaMovement(0, this.getDeltaMovement().y, 0); + } +diff --git a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java +index 7fee1c2779ab390586b2d3f75f56890846323500..5fdb227acfd1d8f55b770c8a66e97494c36db33c 100644 +--- a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java ++++ b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java +@@ -68,7 +68,7 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher { + // Gale end - branding changes - version fetcher + final Component history = getHistory(); + +- return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage; ++ return history != null ? Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), history, updateMessage) : updateMessage; // Purpur + } + + protected @Nullable String getMinecraftVersion() { // Gale - branding changes - version fetcher +@@ -120,13 +120,13 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher { + + switch (distance) { + case -1: +- return Component.text("Error obtaining version information", NamedTextColor.YELLOW); ++ return Component.text("* Error obtaining version information", NamedTextColor.RED); // Purpur + case 0: +- return Component.text("You are running the latest version", NamedTextColor.GREEN); ++ return Component.text("* You are running the latest version", NamedTextColor.GREEN); // Purpur + case -2: +- return Component.text("Unknown version", NamedTextColor.YELLOW); ++ return Component.text("* Unknown version", NamedTextColor.YELLOW); // Purpur + default: +- return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW) ++ return Component.text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur + .append(Component.newline()) + .append(Component.text("Download the new version at: ") + .append(Component.text(this.downloadPage, NamedTextColor.GOLD) // Gale - branding changes - version fetcher +@@ -174,6 +174,6 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher { + return null; + } + +- return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); ++ return org.bukkit.ChatColor.parseMM("Previous: %s", oldVersion); // Purpur + } + }