diff --git a/build.gradle.kts b/build.gradle.kts index 834f05f8..a09130d7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -62,13 +62,13 @@ paperweight { remapRepo.set("https://maven.fabricmc.net/") decompileRepo.set("https://maven.quiltmc.org/") - useStandardUpstream("Pufferfish") { - url.set(github("pufferfish-gg", "Pufferfish")) - ref.set(providers.gradleProperty("PufferfishCommit")) + useStandardUpstream("Gale") { + url.set(github("GaleMC", "Gale")) + ref.set(providers.gradleProperty("GaleCommit")) withStandardPatcher { - apiSourceDirPath.set("pufferfish-api") - serverSourceDirPath.set("pufferfish-server") + apiSourceDirPath.set("gale-api") + serverSourceDirPath.set("gale-server") apiPatchDir.set(layout.projectDirectory.dir("patches/api")) apiOutputDir.set(layout.projectDirectory.dir("Leaf-API")) diff --git a/gradle.properties b/gradle.properties index eb10c941..45ae437a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ group = org.dreeam.leaf version = 1.19.3-R0.1-SNAPSHOT -PufferfishCommit = 9771bd7e692b5f4133e5846123c2f3a9c315e75f +GaleCommit = a455701b06f429147d8e178b5d2b6bca6c65508f org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0001-Leaf-config-files.patch b/patches/api/0001-Leaf-config-files.patch index e1c0b1d2..4ad28a38 100644 --- a/patches/api/0001-Leaf-config-files.patch +++ b/patches/api/0001-Leaf-config-files.patch @@ -5,11 +5,11 @@ Subject: [PATCH] Leaf config files diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 2204336d8800311b65e894739ab1b27273e7c6f2..39808c0cc23a97f707366378f28ba64b80e6acbb 100644 +index 4c519dbd706cac728f31a7ccd99cc1e165812599..425ee736dbaacc0e633740b27723b9f62007be44 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -1971,6 +1971,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi - } +@@ -2014,6 +2014,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi + // Paper end + // Leaf start diff --git a/patches/api/0002-Bump-Dependencies.patch b/patches/api/0002-Bump-Dependencies.patch index 3f3e623d..81e1cf8e 100644 --- a/patches/api/0002-Bump-Dependencies.patch +++ b/patches/api/0002-Bump-Dependencies.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bump Dependencies diff --git a/build.gradle.kts b/build.gradle.kts -index a995ecc3b1d6181c58d5b4a0a6a893178bdc40aa..63f4b9697415f073937ae08bafb6b8b0b85f174d 100644 +index 33e7179c81310283e5e6efb5fd776a60ae669624..9a7e11e737e12f737d404c6c19e90f055d12d29e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -25,13 +25,13 @@ dependencies { @@ -24,16 +24,14 @@ index a995ecc3b1d6181c58d5b4a0a6a893178bdc40aa..63f4b9697415f073937ae08bafb6b8b0 apiAndDocs(platform("net.kyori:adventure-bom:$adventureVersion")) apiAndDocs("net.kyori:adventure-api") apiAndDocs("net.kyori:adventure-text-minimessage") -@@ -39,18 +39,18 @@ dependencies { +@@ -39,17 +39,17 @@ dependencies { apiAndDocs("net.kyori:adventure-text-serializer-legacy") apiAndDocs("net.kyori:adventure-text-serializer-plain") apiAndDocs("net.kyori:adventure-text-logger-slf4j") - api("org.apache.logging.log4j:log4j-api:2.17.1") - api("org.slf4j:slf4j-api:1.8.0-beta4") -- api("io.sentry:sentry:5.4.0") // Pufferfish + api("org.apache.logging.log4j:log4j-api:2.19.0") + api("org.slf4j:slf4j-api:1.8.0-beta4") // Leaf TODO - Bump later, need to fix breaking compatibility -+ api("io.sentry:sentry:6.10.0") // Pufferfish - implementation("org.ow2.asm:asm:9.2") - implementation("org.ow2.asm:asm-commons:9.2") @@ -51,7 +49,7 @@ index a995ecc3b1d6181c58d5b4a0a6a893178bdc40aa..63f4b9697415f073937ae08bafb6b8b0 val annotations = "org.jetbrains:annotations:23.0.0" // Paper - we don't want Java 5 annotations... compileOnly(annotations) -@@ -64,8 +64,8 @@ dependencies { +@@ -63,8 +63,8 @@ dependencies { testImplementation("org.apache.commons:commons-lang3:3.12.0") testImplementation("junit:junit:4.13.2") @@ -62,7 +60,7 @@ index a995ecc3b1d6181c58d5b4a0a6a893178bdc40aa..63f4b9697415f073937ae08bafb6b8b0 } configure { -@@ -147,6 +147,9 @@ val scanJar = tasks.register("scanJarForBadCalls", io.papermc.paperweight.tasks. +@@ -149,6 +149,9 @@ val scanJar = tasks.register("scanJarForBadCalls", io.papermc.paperweight.tasks. jarToScan.set(tasks.jar.flatMap { it.archiveFile }) classpath.from(configurations.compileClasspath) } diff --git a/patches/api/0003-Purpur-Lagging-threshold.patch b/patches/api/0003-Purpur-Lagging-threshold.patch index a6b7dd8b..8cc25bd7 100644 --- a/patches/api/0003-Purpur-Lagging-threshold.patch +++ b/patches/api/0003-Purpur-Lagging-threshold.patch @@ -27,14 +27,13 @@ index ac9b690fcccb60b587e5345f12f1383afd0a73a1..0a4320b32485db84a0be16535b406f04 + // Purpur end } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 39808c0cc23a97f707366378f28ba64b80e6acbb..8eb8a788dc3dbc0d5ac24089a57c730089fd8dbe 100644 +index 425ee736dbaacc0e633740b27723b9f62007be44..1ac20245be32a3ab9a869fea7ec321b3de72a86d 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2147,4 +2147,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi - */ - @NotNull org.bukkit.potion.PotionBrewer getPotionBrewer(); - // Paper end -+ +@@ -2216,4 +2216,12 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi + long getLastTickOversleepTime(); + // Gale end - YAPFA - last tick time - API + + // Purpur start + /** + * Check if server is lagging according to laggy threshold setting @@ -42,5 +41,5 @@ index 39808c0cc23a97f707366378f28ba64b80e6acbb..8eb8a788dc3dbc0d5ac24089a57c7300 + * @return True if lagging + */ + boolean isLagging(); -+ // Purpur end ++ // Purpur endd } diff --git a/patches/api/0007-KeYi-Optimize-Spigot-event-bus.patch b/patches/api/0007-KeYi-Optimize-Spigot-event-bus.patch index 8f0d8da0..274f6ace 100644 --- a/patches/api/0007-KeYi-Optimize-Spigot-event-bus.patch +++ b/patches/api/0007-KeYi-Optimize-Spigot-event-bus.patch @@ -27,12 +27,12 @@ index 3b3d9642a8d63798dc28f2f8df77f0466451cbff..8d3605f25e97a375971705c737bc7bac } } diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -index c077e7c883613fcb6e559b4e4776e794caa3b363..ba869354adc59db2fc547c481c1ed4d5d0af23b7 100644 +index 7903554958f567c7b566a47fa4b49852a837898e..730394fd53fdaa90133ee399f86e76da8ccc08e6 100644 --- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -@@ -656,11 +656,15 @@ public final class SimplePluginManager implements PluginManager { - @Override - public void callEvent(@NotNull Event event) { +@@ -662,11 +662,15 @@ public final class SimplePluginManager implements PluginManager { + // Gale end - JettPack - skip events without listeners + // Paper - replace callEvent by merging to below method - if (event.isAsynchronous() && server.isPrimaryThread()) { + // KTP start - optimize spigot event bus @@ -46,5 +46,5 @@ index c077e7c883613fcb6e559b4e4776e794caa3b363..ba869354adc59db2fc547c481c1ed4d5 } + // KTP end - optimize spigot event bus - HandlerList handlers = event.getHandlers(); - RegisteredListener[] listeners = handlers.getRegisteredListeners(); + for (RegisteredListener registration : listeners) { + if (!registration.getPlugin().isEnabled()) { diff --git a/patches/api/0008-KeYi-Add-Java19-Support-for-SIMD.patch b/patches/api/0008-KeYi-Add-Java19-Support-for-SIMD.patch index 4f178a67..dfac6d26 100644 --- a/patches/api/0008-KeYi-Add-Java19-Support-for-SIMD.patch +++ b/patches/api/0008-KeYi-Add-Java19-Support-for-SIMD.patch @@ -7,21 +7,21 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java -index ab5fea0b03224bf249352ce340e94704ff713345..42288a065acee7e3181364bfadb26d3c1dc6fdc2 100644 +index d51f9de6ac01f518ca9577827dc719daad78df4c..cfab520664df368cabcfbd925414d227cd352b57 100644 --- a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java +++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java -@@ -15,7 +15,7 @@ public class SIMDChecker { - @Deprecated - public static boolean canEnable(Logger logger) { - try { -- if (SIMDDetection.getJavaVersion() != 17 && SIMDDetection.getJavaVersion() != 18 && SIMDDetection.getJavaVersion() != 19) { -+ if (SIMDDetection.getJavaVersion() < 17) { // KeYi - Add Java19 Support for SIMD - return false; - } else { - SIMDDetection.testRun = true; -@@ -36,5 +36,4 @@ public class SIMDChecker { - } catch (NoClassDefFoundError | Exception ignored) {} // Basically, we don't do anything. This lets us detect if it's not functional and disable it. - return false; - } -- +@@ -17,7 +17,7 @@ public class SIMDChecker { + @Deprecated + public static boolean canEnable(Logger logger, boolean logVectorSizesToConsole) { + try { +- if (SIMDDetection.getJavaVersion() != 17 && SIMDDetection.getJavaVersion() != 18) { ++ if (SIMDDetection.getJavaVersion() < 17) { // KeYi - Add Java19 Support for SIMD + return false; + } else { + SIMDDetection.testRun = true; +@@ -40,5 +40,4 @@ public class SIMDChecker { + } catch (NoClassDefFoundError | Exception ignored) {} // Basically, we don't do anything. This lets us detect if it's not functional and disable it. + return false; + } +- } diff --git a/patches/api/0009-KeYi-Player-Skull-API.patch b/patches/api/0009-KeYi-Player-Skull-API.patch index d33aaa03..6e19e539 100644 --- a/patches/api/0009-KeYi-Player-Skull-API.patch +++ b/patches/api/0009-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/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 9f762cf670bf5db9138e468e72e57781d8d22f54..f8bcea8fa62a63d61fb16a51cf7c05cbe09fc825 100644 +index f0302931b082d9a70799d1984dfeb5b0e0973473..2064e3a7bd0fd2a44130999e54b2dcce7be15658 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -3,6 +3,9 @@ package org.bukkit.entity; @@ -20,7 +20,7 @@ index 9f762cf670bf5db9138e468e72e57781d8d22f54..f8bcea8fa62a63d61fb16a51cf7c05cb import com.destroystokyo.paper.ClientOption; // Paper import com.destroystokyo.paper.Title; // Paper import net.kyori.adventure.text.Component; -@@ -2903,4 +2906,23 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2913,4 +2916,23 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end diff --git a/patches/server/0001-Rebrand.patch b/patches/server/0001-Rebrand.patch index 8316e8d4..512e47cd 100644 --- a/patches/server/0001-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -5,147 +5,149 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index 04a1e3c9619b41f429bd598d55c9e0b5abaff920..c8f031712006d95c59027791be1bdcdc2bd836c4 100644 +index f3287cea49ee7352a1065dc65927ab9922d0a9c4..4bd7e9d4344a3abade0d3d3dd1bc7d4005e620f6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -7,7 +7,7 @@ plugins { - } - +@@ -9,7 +9,7 @@ plugins { dependencies { -- implementation(project(":pufferfish-api")) // Pufferfish // Paper -+ implementation(project(":leaf-api")) // Paper // Pufferfish // Leaf - // Pufferfish start - implementation("io.papermc.paper:paper-mojangapi:1.19.2-R0.1-SNAPSHOT") { + // Gale start - project setup + // Depend on own API +- implementation(project(":gale-api")) ++ implementation(project(":leaf-api")) + // Depend on Paper MojangAPI + implementation("io.papermc.paper:paper-mojangapi:1.19.3-R0.1-SNAPSHOT") { exclude("io.papermc.paper", "paper-api") -@@ -81,7 +81,7 @@ tasks.jar { +@@ -78,7 +78,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", -- "Implementation-Version" to "git-Pufferfish-$implementationVersion", // Pufferfish -+ "Implementation-Version" to "git-Leaf-$implementationVersion", // Pufferfish // Leaf +- "Implementation-Version" to "git-Gale-$implementationVersion", // Gale - branding changes ++ "Implementation-Version" to "git-Leaf-$implementationVersion", // Gale - branding changes // Leaf "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..bf670b956b20d670f84f1ef76badaae7f0c20e5b 100644 +index e45e6b44b2a8f2cdae6e0048a812b92126aa17ca..b5f3f213da8a40d5184098af017c8e2669c3e58c 100644 --- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java @@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { @Override protected LineReader buildReader(LineReaderBuilder builder) { builder -- .appName("Paper") -+ .appName("Leaf") // Leaf +- .appName("Gale") // Gale - branding changes ++ .appName("Leaf") // Gale - branding changes // Leaf .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) .completer(new ConsoleCommandCompleter(this.server)) .option(LineReader.Option.COMPLETE_IN_WORD, true); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 68d16efaf9c2d997afabadcf1ee24c5de685b5b3..c69cb21f2ccf0f93a7ec17d4ee1ddb0ba5cfa5b2 100644 +index 60ed76588347f4d4c09d8df4952bf55501ed7c00..78c83a7976966dc5650d8f1e130636cb8c5e3e9f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -924,7 +924,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Leaf"; // Leaf - Leaf > // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Gale"; // Gale - branding changes - Gale > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! ++ return "Leaf"; // Leaf - Leaf > // Gale - branding changes - Gale > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! } public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 277e8a03ab270eabb6b8c31d0076f3310c91eef2..07b40f503358987339937bb8db5a3ee54c1b08c8 100644 +index 79f3a6174873834de61d7dc9fdbf6eb5a0fd6cd9..e69eca98f341688eca37ad18878c6080fda38563 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -261,7 +261,7 @@ import javax.annotation.Nullable; // Paper +@@ -266,7 +266,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper public final class CraftServer implements Server { -- private final String serverName = "Pufferfish"; // Paper // Pufferfish -+ private final String serverName = "Leaf"; // Paper // Pufferfish // Leaf +- private final String serverName = "Gale"; // Paper // Gale - branding changes ++ private final String serverName = "Leaf"; // Paper // Gale - branding changes // Leaf private final String serverVersion; private final String bukkitVersion = Versioning.getBukkitVersion(); private final Logger logger = Logger.getLogger("Minecraft"); diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index cdefb2025eedea7e204d70d568adaf1c1ec4c03c..38920d680d9b0d81013dcf16ce3dd7271eeafe4c 100644 +index 3997a7fec43e05b455644b4d58c68995fad541f4..1933207eb01305ff41822560c5987376b366133f 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java @@ -504,7 +504,7 @@ public class CraftScheduler implements BukkitScheduler { this.parsePending(); } else { //this.debugTail = this.debugTail.setNext(new CraftAsyncDebugger(currentTick + CraftScheduler.RECENT_TICKS, task.getOwner(), task.getTaskClass())); // Paper -- task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Paper"); // Paper -+ task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Leaf"); // Paper // Leaf +- task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Gale"); // Paper // Gale - branding changes ++ task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Leaf"); // Paper // Gale - branding changes // Leaf // We don't need to parse pending // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) } diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 80553face9c70c2a3d897681e7761df85b22d464..3e14c02c2ed3d687c866087bf7477918f45e3719 100644 +index 0b5979723bb30f9011ac64c36d894aa41713ec9b..17e3ee3a73a2347e9f0baa0ed1640a3b0e75ed16 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java @@ -11,7 +11,7 @@ public final class Versioning { public static String getBukkitVersion() { String result = "Unknown-Version"; -- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/gg.pufferfish.pufferfish/pufferfish-api/pom.properties"); // Pufferfish -+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.dreeam.leaf/leaf-api/pom.properties"); // Pufferfish // Leaf +- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.galemc.gale/gale-api/pom.properties"); // Gale - branding changes ++ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.dreeam.leaf/leaf-api/pom.properties"); // Gale - branding changes // Leaf Properties properties = new Properties(); if (stream != null) { diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index e9fa7faaa4451e36b3908cbcbbe0baf213abde96..6466e8bd54b38e4f432101c6d1a397db1066d341 100644 +index 8cd1b04dafc16dc96a6ad58fef7930b351c8f147..c25c1801bc0e29fdea5c6155925dda6567ed1ac3 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java -@@ -155,14 +155,14 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - if (isLongTimeout) { - // Paper end - log.log( Level.SEVERE, "------------------------------" ); -- log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug." ); // Paper -+ log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Leaf bug." ); // Paper // Leaf +@@ -161,15 +161,15 @@ public final class WatchdogThread extends ServerThread // Paper - rewrite chunk + We do not want people to report thread issues to Paper, + but we do want people to report thread issues to Gale. + */ +- log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug. This could be a Gale bug." ); // Paper ++ log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug. This could be a Leaf bug." ); // Paper // Leaf + // Gale end - branding changes log.log( Level.SEVERE, "If you see a plugin in the Server thread dump below, then please report it to that author" ); log.log( Level.SEVERE, "\t *Especially* if it looks like HTTP or MySQL operations are occurring" ); log.log( Level.SEVERE, "If you see a world save or edit, then it means you did far more than your server can handle at once" ); log.log( Level.SEVERE, "\t If this is the case, consider increasing timeout-time in spigot.yml but note that this will replace the crash with LARGE lag spikes" ); -- log.log( Level.SEVERE, "If you are unsure or still think this is a Paper bug, please report this to https://github.com/PaperMC/Paper/issues" ); -+ log.log( Level.SEVERE, "If you are unsure or still think this is a Leaf bug, please report this to https://github.com/Winds-Studio/Leaf/issues" ); // Leaf +- log.log( Level.SEVERE, "If you are unsure or think this is a Gale bug, please report this to https://github.com/GaleMC/Gale/issues - and if you think this is a Paper bug, please report this to https://github.com/PaperMC/Paper/issues" ); // Gale - branding changes ++ log.log( Level.SEVERE, "If you are unsure or think this is a Leaf bug, please report this to https://github.com/Winds-Studio/Leaf/issues - and if you think this is a Paper bug, please report this to https://github.com/PaperMC/Paper/issues" ); // Gale - branding changes // Leaf log.log( Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports" ); -- log.log( Level.SEVERE, "Paper version: " + Bukkit.getServer().getVersion() ); -+ log.log( Level.SEVERE, "Leaf version: " + Bukkit.getServer().getVersion() ); // Leaf +- log.log( Level.SEVERE, "Gale version: " + Bukkit.getServer().getVersion() ); // Gale - branding changes ++ log.log( Level.SEVERE, "Leaf version: " + Bukkit.getServer().getVersion() ); // Gale - branding changes // Leaf // if ( net.minecraft.world.level.Level.lastPhysicsProblem != null ) { -@@ -185,12 +185,12 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - // Paper end - } else - { -- log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH - " + Bukkit.getServer().getVersion() + " ---"); -+ log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO LEAF - THIS IS NOT A BUG OR A CRASH - " + Bukkit.getServer().getVersion() + " ---"); // Leaf +@@ -197,13 +197,13 @@ public final class WatchdogThread extends ServerThread // Paper - rewrite chunk + We do not want people to report thread issues to Paper, + but we do want people to report thread issues to Gale. + */ +- log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues - THIS IS NOT A PAPER BUG OR CRASH - " + Bukkit.getServer().getVersion() + " ---"); ++ log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues - THIS IS NOT A PAPER BUG OR CRASH - " + Bukkit.getServer().getVersion() + " ---"); // Leaf + // Gale end - branding changes log.log(Level.SEVERE, "The server has not responded for " + (currentTime - lastTick) / 1000 + " seconds! Creating thread dump"); } // Paper end - Different message for short timeout log.log( Level.SEVERE, "------------------------------" ); -- log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" ); // Paper -+ log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Leaf!):" ); // Paper // Leaf +- log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Gale!):" ); // Paper // Gale - branding changes ++ log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Leaf!):" ); // Paper // Gale - branding changes // Leaf io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(isLongTimeout); // Paper // Paper - rewrite chunk system this.dumpTickingInfo(); // Paper - log detailed tick information - WatchdogThread.dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log ); -@@ -206,7 +206,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa - WatchdogThread.dumpThread( thread, log ); - } - } else { -- log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - THIS IS NOT A BUG OR A CRASH ---"); -+ log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO LEAF - THIS IS NOT A BUG OR A CRASH ---"); // Leaf + WatchdogThread.dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.serverThread.getId(), Integer.MAX_VALUE ), log ); // Gale - base thread pools +@@ -224,7 +224,7 @@ public final class WatchdogThread extends ServerThread // Paper - rewrite chunk + We do not want people to report thread issues to Paper, + but we do want people to report thread issues to Gale. + */ +- log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues - THIS IS NOT A PAPER BUG OR CRASH ---"); ++ log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues - THIS IS NOT A PAPER BUG OR CRASH ---"); // Leaf + // Gale end - branding changes } - log.log( Level.SEVERE, "------------------------------" ); diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png index a7d785f60c884ee4ee487cc364402d66c3dc2ecc..9597d58066bdbca302d790e6c195204b7d878011 100644 GIT binary patch diff --git a/patches/server/0002-Leaf-Config.patch b/patches/server/0002-Leaf-Config.patch index 9b7686a7..9d6228a5 100644 --- a/patches/server/0002-Leaf-Config.patch +++ b/patches/server/0002-Leaf-Config.patch @@ -4,51 +4,54 @@ Date: Wed, 12 Oct 2022 10:42:15 -0400 Subject: [PATCH] Leaf Config +diff --git a/build.gradle.kts b/build.gradle.kts +index 4bd7e9d4344a3abade0d3d3dd1bc7d4005e620f6..7a16fb14f43ff4cc8b1b733f924393e60b6978cd 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -52,6 +52,10 @@ dependencies { + testImplementation("org.hamcrest:hamcrest-library:1.3") + + implementation("io.netty:netty-all:4.1.77.Final"); // Paper - Bump netty ++ implementation("org.yaml:snakeyaml:1.33") // Leaf - Config ++ implementation("me.carleslc.Simple-YAML:Simple-Yaml:1.8.3") { ++ exclude(group = "org.yaml", module = "snakeyaml") ++ } + } + + val craftbukkitPackageVersion = "1_19_R2" // Paper diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java -index 2cc44fbf8e5bd436b6d4e19f6c06b351e750cb31..00f30e047beefe914543718009947ecc60c21790 100644 +index 781fc0a92f73be73b9313e7bc4eeb2f2ed6ff8ea..b40c03e42e02bca29fe8b107d9382db6e49c1d1e 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java -@@ -242,7 +242,8 @@ public class TimingsExport extends Thread { - pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)), +@@ -307,8 +307,9 @@ public class TimingsExport extends Thread { pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)), - pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), // Pufferfish -- pair("pufferfish", mapAsJSON(gg.pufferfish.pufferfish.PufferfishConfig.getConfigCopy(), null)) // Pufferfish -+ pair("pufferfish", mapAsJSON(gg.pufferfish.pufferfish.PufferfishConfig.getConfigCopy(), null)), // Pufferfish + // Gale start - Gale configuration - include in timings + pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), +- pair("gale", mapAsJSON(Bukkit.spigot().getGaleConfig(), null)) ++ pair("gale", mapAsJSON(Bukkit.spigot().getGaleConfig(), null)), + // Gale end - Gale configuration - include in timings + pair("leaf", mapAsJSON(org.dreeam.leaf.LeafConfig.getConfigCopy(), null)) // Leaf )); new TimingsExport(listeners, parent, history).start(); -diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c69cb21f2ccf0f93a7ec17d4ee1ddb0ba5cfa5b2..3bed5eb755e97149a9651ca007564275e0eaf2d1 100644 ---- a/src/main/java/net/minecraft/server/MinecraftServer.java -+++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1656,7 +1656,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return org.dreeam.leaf.LeafConfig.serverModName; // Leaf - Leaf > // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! - } - - public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 673fb3955291407be37dc78be4eec9bf2018128b..a7023765e3c82e70574069af00227e3cf6f98e65 100644 +index 396258cb21a8e5488f0f456b65dc629ff895601e..290f0e317b75358a14c7c58e9d6e8e7340fd0721 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -@@ -223,6 +223,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - // Paper end - gg.pufferfish.pufferfish.PufferfishConfig.load(); // Pufferfish - gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish +@@ -248,6 +248,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + LOGGER.warn("If you would like to disable this message, set simd.warn-if-disabled to false in gale-global.yml"); + } + // Gale start - Pufferfish - SIMD support + org.dreeam.leaf.LeafConfig.load(); // Leaf this.setPvpAllowed(dedicatedserverproperties.pvp); this.setFlightAllowed(dedicatedserverproperties.allowFlight); diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..770553ef8976d76067396276792ea23a7ab7d51d +index 0000000000000000000000000000000000000000..2e6cc6ed30fc2ba0913913bd19bf1b83c40fcce5 --- /dev/null +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -0,0 +1,139 @@ +@@ -0,0 +1,134 @@ +package org.dreeam.leaf; + +import net.minecraft.server.MinecraftServer; @@ -182,9 +185,4 @@ index 0000000000000000000000000000000000000000..770553ef8976d76067396276792ea23a + ensureDefault(key, defaultValue, comment); + return config.getStringList(key); + } -+ -+ public static String serverModName = "Leaf"; -+ private static void serverModName() { -+ serverModName = getString("settings.server-mod-name", serverModName); -+ } +} diff --git a/patches/server/0003-Bump-Dependencies.patch b/patches/server/0003-Bump-Dependencies.patch index 02ba6156..cf3ea600 100644 --- a/patches/server/0003-Bump-Dependencies.patch +++ b/patches/server/0003-Bump-Dependencies.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Bump Dependencies diff --git a/build.gradle.kts b/build.gradle.kts -index c8f031712006d95c59027791be1bdcdc2bd836c4..99c0750dcc87f5f3b19c5e9e4e9067d49443732e 100644 +index 7a16fb14f43ff4cc8b1b733f924393e60b6978cd..f00b459d52af011c8fcb86521e6a5e8486d92955 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -22,13 +22,13 @@ dependencies { +@@ -24,13 +24,13 @@ dependencies { all its classes to check if they are plugins. Scanning takes about 1-2 seconds so adding this speeds up the server start. */ @@ -27,7 +27,7 @@ index c8f031712006d95c59027791be1bdcdc2bd836c4..99c0750dcc87f5f3b19c5e9e4e9067d4 implementation("org.spongepowered:configurate-yaml:4.1.2") // Paper - config files implementation("commons-lang:commons-lang:2.6") implementation("net.fabricmc:mapping-io:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation -@@ -37,27 +37,27 @@ dependencies { +@@ -39,19 +39,19 @@ dependencies { isTransitive = false } // Paper end @@ -43,16 +43,6 @@ index c8f031712006d95c59027791be1bdcdc2bd836c4..99c0750dcc87f5f3b19c5e9e4e9067d4 + runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.2") + runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.2") - // Pufferfish start -- implementation("org.yaml:snakeyaml:1.32") -- implementation ("me.carleslc.Simple-YAML:Simple-Yaml:1.8.2") { -+ implementation("org.yaml:snakeyaml:1.33") -+ implementation ("me.carleslc.Simple-YAML:Simple-Yaml:1.8.3") { - exclude(group="org.yaml", module="snakeyaml") - } - // Pufferfish end - implementation("com.github.technove:Flare:34637f3f87") // Pufferfish - flare - - testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test + testImplementation("io.github.classgraph:classgraph:4.8.152") // Paper - mob goal test testImplementation("junit:junit:4.13.2") @@ -61,10 +51,10 @@ index c8f031712006d95c59027791be1bdcdc2bd836c4..99c0750dcc87f5f3b19c5e9e4e9067d4 - implementation("io.netty:netty-all:4.1.77.Final"); // Paper - Bump netty + implementation("io.netty:netty-all:4.1.85.Final"); // Paper - Bump netty - } - - val craftbukkitPackageVersion = "1_19_R2" // Paper -@@ -206,3 +206,6 @@ tasks.registerRunTask("runDev") { + implementation("org.yaml:snakeyaml:1.33") // Leaf - Config + implementation("me.carleslc.Simple-YAML:Simple-Yaml:1.8.3") { + exclude(group = "org.yaml", module = "snakeyaml") +@@ -207,3 +207,6 @@ tasks.registerRunTask("runDev") { description = "Spin up a non-relocated Mojang-mapped test server" classpath(sourceSets.main.map { it.runtimeClasspath }) } diff --git a/patches/server/0004-Remove-Mojang-username-check.patch b/patches/server/0004-Remove-Mojang-username-check.patch index 5cddb3de..ee54d087 100644 --- a/patches/server/0004-Remove-Mojang-username-check.patch +++ b/patches/server/0004-Remove-Mojang-username-check.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove Mojang username check diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index f3b340fc6be9878d677a76673450aac3e0b73d4b..3011018c8fa221f515cf670dea9791f8c4ea1f69 100644 +index 2ed3f42b1e487374287d033ac634a922a5ef37bd..85003e1a7e7b1e6519441a543c6e5357a467dc99 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -36,6 +36,7 @@ import net.minecraft.util.Crypt; +@@ -37,6 +37,7 @@ import net.minecraft.util.Crypt; import net.minecraft.util.CryptException; import net.minecraft.util.RandomSource; import org.apache.commons.lang3.Validate; @@ -16,34 +16,28 @@ index f3b340fc6be9878d677a76673450aac3e0b73d4b..3011018c8fa221f515cf670dea9791f8 import org.slf4j.Logger; // CraftBukkit start -@@ -237,7 +238,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, - @Override +@@ -239,7 +240,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, public void handleHello(ServerboundHelloPacket packet) { - Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet", new Object[0]); -- Validate.validState(ServerLoginPacketListenerImpl.isValidUsername(packet.name()), "Invalid characters in username", new Object[0]); -+ if (!LeafConfig.removeMojangUsernameCheck) Validate.validState(ServerLoginPacketListenerImpl.isValidUsername(packet.name()), "Invalid characters in username", new Object[0]); // Leaf - Remove Mojang's username check + // Gale start - JettPack - reduce array allocations + Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet", ArrayConstants.emptyObjectArray); +- Validate.validState(ServerLoginPacketListenerImpl.isValidUsername(packet.name()), "Invalid characters in username", ArrayConstants.emptyObjectArray); ++ if (!LeafConfig.removeMojangUsernameCheck) Validate.validState(ServerLoginPacketListenerImpl.isValidUsername(packet.name()), "Invalid characters in username", ArrayConstants.emptyObjectArray); // Leaf - Remove Mojang's username check + // Gale end - JettPack - reduce array allocations // Paper start - validate usernames if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.performUsernameValidation) { - if (!this.iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation && !validateUsername(packet.name())) { diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 770553ef8976d76067396276792ea23a7ab7d51d..7870c85030144831936d692dde4fff7bedd692da 100644 +index 2e6cc6ed30fc2ba0913913bd19bf1b83c40fcce5..ecd5edfde838df1d8f9a58b153c9751bacd2b761 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -132,8 +132,17 @@ public class LeafConfig { +@@ -131,4 +131,11 @@ public class LeafConfig { + ensureDefault(key, defaultValue, comment); return config.getStringList(key); } - -+ - public static String serverModName = "Leaf"; - private static void serverModName() { - serverModName = getString("settings.server-mod-name", serverModName); - } + + public static boolean removeMojangUsernameCheck; + private static void removeconfig() { + removeMojangUsernameCheck = getBoolean("remove-Mojang-username-check", true, + "Remove username check of Mojang", + "enabling all characters as username"); -+ + } } diff --git a/patches/server/0005-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch b/patches/server/0005-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch index 11584715..09ae15c5 100644 --- a/patches/server/0005-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch +++ b/patches/server/0005-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove Spigot Check for Broken BungeeCord Configurations diff --git a/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java -index e7ff7ad3bf4dd17fdd34202ec3aef8e9512bc36d..a00c7ba6d2161ce91ade78e3d53c8d57f86e9c99 100644 +index 8e68d1373a519cc12bf83de6aadcb24cbbd34af6..a5776ef739b1bf8c8efed0a97d0939e271c8ba72 100644 --- a/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java -@@ -9,6 +9,7 @@ import net.minecraft.network.protocol.handshake.ClientIntentionPacket; +@@ -10,6 +10,7 @@ import net.minecraft.network.protocol.handshake.ClientIntentionPacket; import net.minecraft.network.protocol.handshake.ServerHandshakePacketListener; import net.minecraft.network.protocol.login.ClientboundLoginDisconnectPacket; import net.minecraft.server.MinecraftServer; @@ -16,7 +16,7 @@ index e7ff7ad3bf4dd17fdd34202ec3aef8e9512bc36d..a00c7ba6d2161ce91ade78e3d53c8d57 // CraftBukkit start import java.net.InetAddress; -@@ -139,7 +140,9 @@ public class ServerHandshakePacketListenerImpl implements ServerHandshakePacketL +@@ -135,7 +136,9 @@ public class ServerHandshakePacketListenerImpl implements ServerHandshakePacketL { connection.spoofedProfile = ServerHandshakePacketListenerImpl.gson.fromJson(split[3], com.mojang.authlib.properties.Property[].class); } @@ -28,17 +28,10 @@ index e7ff7ad3bf4dd17fdd34202ec3aef8e9512bc36d..a00c7ba6d2161ce91ade78e3d53c8d57 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 7870c85030144831936d692dde4fff7bedd692da..c107a0cab333b2b57931862073a4eb6832f755ab 100644 +index ecd5edfde838df1d8f9a58b153c9751bacd2b761..14bde244f306e0477cc002cf21868bd3f6783672 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -132,17 +132,19 @@ public class LeafConfig { - return config.getStringList(key); - } - -- - public static String serverModName = "Leaf"; - private static void serverModName() { - serverModName = getString("settings.server-mod-name", serverModName); +@@ -133,9 +133,13 @@ public class LeafConfig { } public static boolean removeMojangUsernameCheck; @@ -47,7 +40,6 @@ index 7870c85030144831936d692dde4fff7bedd692da..c107a0cab333b2b57931862073a4eb68 removeMojangUsernameCheck = getBoolean("remove-Mojang-username-check", true, "Remove username check of Mojang", "enabling all characters as username"); -- + removeSpigotCheckBungeeConfig = getBoolean("remove-Spigot-check-bungee-config", true, + "Enable player enter backend server through proxy", + "without backend server enabling its bungee mode"); diff --git a/patches/server/0007-Remove-UseItemOnPacket-Too-Far-Check.patch b/patches/server/0007-Remove-UseItemOnPacket-Too-Far-Check.patch index 428799fd..134c1551 100644 --- a/patches/server/0007-Remove-UseItemOnPacket-Too-Far-Check.patch +++ b/patches/server/0007-Remove-UseItemOnPacket-Too-Far-Check.patch @@ -7,18 +7,22 @@ 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 aa23559719357f2678e3aa759d58ba4bde18bdd4..215eda414547bfdf662b4ea511fa3f774e125d94 100644 +index 99e684ae2f5ac07660e4f724b15cf1bba185d438..76adc3aeaf4de9307668803b01f39da7cb828da1 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -182,6 +182,7 @@ import net.minecraft.world.phys.Vec3; +@@ -184,10 +184,10 @@ import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +-import org.apache.commons.lang3.StringUtils; + import org.galemc.gale.configuration.GaleGlobalConfiguration; + import org.galemc.gale.executor.queue.BaseTaskQueues; + import org.galemc.gale.executor.queue.ScheduledServerThreadTaskQueues; +import org.dreeam.leaf.LeafConfig; import org.slf4j.Logger; // CraftBukkit start -@@ -1952,7 +1953,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1967,7 +1967,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic Vec3 vec3d2 = vec3d.subtract(vec3d1); double d0 = 1.0000001D; @@ -28,10 +32,10 @@ index aa23559719357f2678e3aa759d58ba4bde18bdd4..215eda414547bfdf662b4ea511fa3f77 this.player.resetLastActionTime(); diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index c107a0cab333b2b57931862073a4eb6832f755ab..a221affdf87d28991248a4b83224194e222423e6 100644 +index 14bde244f306e0477cc002cf21868bd3f6783672..5922be781760baedfb3a770c9e1ca40a73dfbc55 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -139,6 +139,8 @@ public class LeafConfig { +@@ -134,6 +134,8 @@ public class LeafConfig { public static boolean removeMojangUsernameCheck; public static boolean removeSpigotCheckBungeeConfig; @@ -40,7 +44,7 @@ index c107a0cab333b2b57931862073a4eb6832f755ab..a221affdf87d28991248a4b83224194e private static void removeconfig() { removeMojangUsernameCheck = getBoolean("remove-Mojang-username-check", true, "Remove username check of Mojang", -@@ -146,5 +148,7 @@ public class LeafConfig { +@@ -141,5 +143,7 @@ public class LeafConfig { removeSpigotCheckBungeeConfig = getBoolean("remove-Spigot-check-bungee-config", true, "Enable player enter backend server through proxy", "without backend server enabling its bungee mode"); diff --git a/patches/server/0008-Purpur-Implement-TPSBar.patch b/patches/server/0008-Purpur-Implement-TPSBar.patch index 6f12e650..13299eb8 100644 --- a/patches/server/0008-Purpur-Implement-TPSBar.patch +++ b/patches/server/0008-Purpur-Implement-TPSBar.patch @@ -54,10 +54,10 @@ index ae5dd08de75a7ed231295f306fd0974da3988249..b8d49f7607c646216d42f4e047997d47 if (this.source.acceptsSuccess() && !this.silent) { this.source.sendSystemMessage(message); diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 330f6c79417378da855326b4da665f9d240e748d..564830a1d511716ab977923ba43fa38c475f484f 100644 +index c7083450b3466d80611b5efdac78b31ac2e70cf5..0e8700ccc884957f08fa382723a3784d94da0f0e 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -215,6 +215,7 @@ public class Commands { +@@ -214,6 +214,7 @@ public class Commands { SetPlayerIdleTimeoutCommand.register(this.dispatcher); StopCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); @@ -66,10 +66,10 @@ index 330f6c79417378da855326b4da665f9d240e748d..564830a1d511716ab977923ba43fa38c if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 3bed5eb755e97149a9651ca007564275e0eaf2d1..ab0a4a36241bee59b142df65736003c69dcb3dd4 100644 +index 78c83a7976966dc5650d8f1e130636cb8c5e3e9f..d5e8de2fd68dbc43385ad71849294f20344385f5 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1022,6 +1022,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop cachedSingleHashSet; // Paper public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event @@ -109,7 +109,7 @@ index c0b0a7fdb75266a7064d54bda6441953184ecc64..3db273840ecc03e7bf3e1a01f56d5128 public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) { super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); -@@ -508,6 +509,7 @@ public class ServerPlayer extends Player { +@@ -507,6 +508,7 @@ public class ServerPlayer extends Player { } } @@ -117,7 +117,7 @@ index c0b0a7fdb75266a7064d54bda6441953184ecc64..3db273840ecc03e7bf3e1a01f56d5128 } @Override -@@ -574,6 +576,7 @@ public class ServerPlayer extends Player { +@@ -573,6 +575,7 @@ public class ServerPlayer extends Player { } this.getBukkitEntity().setExtraData(nbt); // CraftBukkit @@ -125,7 +125,7 @@ index c0b0a7fdb75266a7064d54bda6441953184ecc64..3db273840ecc03e7bf3e1a01f56d5128 } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -2550,4 +2553,14 @@ public class ServerPlayer extends Player { +@@ -2545,4 +2548,14 @@ public class ServerPlayer extends Player { return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -141,18 +141,18 @@ index c0b0a7fdb75266a7064d54bda6441953184ecc64..3db273840ecc03e7bf3e1a01f56d5128 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index b348d33726b2b14ea2d12ce3430df2c0b94295f4..1895a3919d43e8e4f8399c75db8482df9e78bb3d 100644 +index 636a5afca868b05f7dbb4da8a7e04b968ada5048..50525c63ee801585ca7b8e1f3a49a3cdf7c81ff3 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -100,6 +100,7 @@ import net.minecraft.world.scores.Objective; - import net.minecraft.world.scores.PlayerTeam; - import net.minecraft.world.scores.Scoreboard; // Paper +@@ -105,6 +105,7 @@ import net.minecraft.world.scores.Scoreboard; // Paper import net.minecraft.world.scores.Team; + import org.galemc.gale.configuration.GaleGlobalConfiguration; + import org.galemc.gale.executor.queue.ScheduledServerThreadTaskQueues; +import org.dreeam.leaf.tasks.BossBarTask; import org.slf4j.Logger; // CraftBukkit start -@@ -511,6 +512,7 @@ public abstract class PlayerList { +@@ -508,6 +509,7 @@ public abstract class PlayerList { scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); } // Paper end @@ -160,7 +160,7 @@ index b348d33726b2b14ea2d12ce3430df2c0b94295f4..1895a3919d43e8e4f8399c75db8482df // CraftBukkit - Moved from above, added world PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ()); } -@@ -621,6 +623,8 @@ public abstract class PlayerList { +@@ -617,6 +619,8 @@ public abstract class PlayerList { } public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) { // Paper end @@ -182,7 +182,7 @@ index 6035af2cf08353b3d3801220d8116d8611a0cd37..7774ab6a2e553a40def4bb4dceea9e5f final String commandName; if (vanillaCommand.getRedirect() == null) { diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index a221affdf87d28991248a4b83224194e222423e6..a0bd1ec3f09959c7f72b484658c1c94a16818281 100644 +index 5922be781760baedfb3a770c9e1ca40a73dfbc55..9cf4bbde93ad01da842f6b3b5f46f25f442f7d54 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java @@ -1,8 +1,10 @@ @@ -196,7 +196,7 @@ index a221affdf87d28991248a4b83224194e222423e6..a0bd1ec3f09959c7f72b484658c1c94a import org.jetbrains.annotations.Nullable; import org.simpleyaml.configuration.comments.CommentType; import org.simpleyaml.configuration.file.YamlFile; -@@ -149,6 +151,36 @@ public class LeafConfig { +@@ -144,6 +146,36 @@ public class LeafConfig { "Enable player enter backend server through proxy", "without backend server enabling its bungee mode"); removeUseItemOnPacketTooFar = getBoolean("remove-UseItemOnPacket-too-far-check", false, diff --git a/patches/server/0009-Purpur-Add-compass-command.patch b/patches/server/0009-Purpur-Add-compass-command.patch index f69f60dc..9d64f1b5 100644 --- a/patches/server/0009-Purpur-Add-compass-command.patch +++ b/patches/server/0009-Purpur-Add-compass-command.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 564830a1d511716ab977923ba43fa38c475f484f..2c5afab3cc0c66a2e63c1f647a033ca1a58f9e39 100644 +index 0e8700ccc884957f08fa382723a3784d94da0f0e..66242833210ae89cbca7448cd4e7cf1fa774bcf0 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -216,6 +216,7 @@ public class Commands { +@@ -215,6 +215,7 @@ public class Commands { StopCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); org.dreeam.leaf.commands.TPSBarCommand.register(this.dispatcher); // Purpur @@ -19,10 +19,10 @@ index 564830a1d511716ab977923ba43fa38c475f484f..2c5afab3cc0c66a2e63c1f647a033ca1 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 3db273840ecc03e7bf3e1a01f56d5128e4aeea06..5c67d38df288e789597613df99f779c1ddf40712 100644 +index 9d3d1714717bf2a301662473416fd5eaa9027266..f04ca69de983d5d6dc5df62c16d1f5caffae43ab 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -271,6 +271,7 @@ public class ServerPlayer extends Player { +@@ -270,6 +270,7 @@ public class ServerPlayer extends Player { public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event private boolean tpsBar = false; // Purpur @@ -30,7 +30,7 @@ index 3db273840ecc03e7bf3e1a01f56d5128e4aeea06..5c67d38df288e789597613df99f779c1 public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) { super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); -@@ -510,6 +511,7 @@ public class ServerPlayer extends Player { +@@ -509,6 +510,7 @@ public class ServerPlayer extends Player { } if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur @@ -38,7 +38,7 @@ index 3db273840ecc03e7bf3e1a01f56d5128e4aeea06..5c67d38df288e789597613df99f779c1 } @Override -@@ -577,6 +579,7 @@ public class ServerPlayer extends Player { +@@ -576,6 +578,7 @@ public class ServerPlayer extends Player { this.getBukkitEntity().setExtraData(nbt); // CraftBukkit nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur @@ -46,7 +46,7 @@ index 3db273840ecc03e7bf3e1a01f56d5128e4aeea06..5c67d38df288e789597613df99f779c1 } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -2562,5 +2565,13 @@ public class ServerPlayer extends Player { +@@ -2557,5 +2560,13 @@ public class ServerPlayer extends Player { public void tpsBar(boolean tpsBar) { this.tpsBar = tpsBar; } @@ -61,10 +61,10 @@ index 3db273840ecc03e7bf3e1a01f56d5128e4aeea06..5c67d38df288e789597613df99f779c1 // Purpur end } diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index a0bd1ec3f09959c7f72b484658c1c94a16818281..e56151fe0dbc0c867dff728a55daa35c7714d3a6 100644 +index 9cf4bbde93ad01da842f6b3b5f46f25f442f7d54..22ed437840fd189cc0c26b544b78a66c62ffbf3b 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -170,6 +170,11 @@ public class LeafConfig { +@@ -165,6 +165,11 @@ public class LeafConfig { public static String commandTPSBarTextColorMedium = ""; public static String commandTPSBarTextColorLow = ""; public static int commandTPSBarTickInterval = 20; @@ -76,7 +76,7 @@ index a0bd1ec3f09959c7f72b484658c1c94a16818281..e56151fe0dbc0c867dff728a55daa35c private static void commandSettings() { commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle); -@@ -182,5 +187,17 @@ public class LeafConfig { +@@ -177,5 +182,17 @@ public class LeafConfig { commandTPSBarTextColorMedium = getString("settings.command.tpsbar.text-color.medium", commandTPSBarTextColorMedium); commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow); commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval); diff --git a/patches/server/0010-Purpur-Implement-ram-and-rambar-commands.patch b/patches/server/0010-Purpur-Implement-ram-and-rambar-commands.patch index a4bbd748..3109236c 100644 --- a/patches/server/0010-Purpur-Implement-ram-and-rambar-commands.patch +++ b/patches/server/0010-Purpur-Implement-ram-and-rambar-commands.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 2c5afab3cc0c66a2e63c1f647a033ca1a58f9e39..8ee8ff15f4511684261ff7a9417baa2ccd313b69 100644 +index 66242833210ae89cbca7448cd4e7cf1fa774bcf0..ff19fcd83295c6936dd83c7780d5757071ca44a5 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -217,6 +217,8 @@ public class Commands { +@@ -216,6 +216,8 @@ public class Commands { WhitelistCommand.register(this.dispatcher); org.dreeam.leaf.commands.TPSBarCommand.register(this.dispatcher); // Purpur org.dreeam.leaf.commands.CompassCommand.register(this.dispatcher); // Purpur @@ -20,10 +20,10 @@ index 2c5afab3cc0c66a2e63c1f647a033ca1a58f9e39..8ee8ff15f4511684261ff7a9417baa2c if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 5c67d38df288e789597613df99f779c1ddf40712..95db6657cd65b71f994f0221b0c46be4a1f8e10b 100644 +index f04ca69de983d5d6dc5df62c16d1f5caffae43ab..f262a9c0d48eaeaf463fde03992c65ca03a8a0c6 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -272,6 +272,7 @@ public class ServerPlayer extends Player { +@@ -271,6 +271,7 @@ public class ServerPlayer extends Player { public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event private boolean tpsBar = false; // Purpur private boolean compassBar = false; // Purpur @@ -31,7 +31,7 @@ index 5c67d38df288e789597613df99f779c1ddf40712..95db6657cd65b71f994f0221b0c46be4 public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile) { super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); -@@ -510,6 +511,7 @@ public class ServerPlayer extends Player { +@@ -509,6 +510,7 @@ public class ServerPlayer extends Player { } } @@ -39,7 +39,7 @@ index 5c67d38df288e789597613df99f779c1ddf40712..95db6657cd65b71f994f0221b0c46be4 if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur if (nbt.contains("Purpur.CompassBar")) { this.compassBar = nbt.getBoolean("Purpur.CompassBar"); } // Purpur } -@@ -578,6 +580,7 @@ public class ServerPlayer extends Player { +@@ -577,6 +579,7 @@ public class ServerPlayer extends Player { } this.getBukkitEntity().setExtraData(nbt); // CraftBukkit @@ -47,7 +47,7 @@ index 5c67d38df288e789597613df99f779c1ddf40712..95db6657cd65b71f994f0221b0c46be4 nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur } -@@ -2573,5 +2576,14 @@ public class ServerPlayer extends Player { +@@ -2568,5 +2571,14 @@ public class ServerPlayer extends Player { public void compassBar(boolean compassBar) { this.compassBar = compassBar; } @@ -63,10 +63,10 @@ index 5c67d38df288e789597613df99f779c1ddf40712..95db6657cd65b71f994f0221b0c46be4 // Purpur end } diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index e56151fe0dbc0c867dff728a55daa35c7714d3a6..afdee99c7d5ecedf8d2f6856f0aa9271c6bbb23d 100644 +index 22ed437840fd189cc0c26b544b78a66c62ffbf3b..84dfe93de52d81e8eef8fc6b9778e081c9abe899 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -175,6 +175,17 @@ public class LeafConfig { +@@ -170,6 +170,17 @@ public class LeafConfig { public static BossBar.Color commandCompassBarProgressColor = BossBar.Color.BLUE; public static float commandCompassBarProgressPercent = 1.0F; public static int commandCompassBarTickInterval = 5; @@ -84,7 +84,7 @@ index e56151fe0dbc0c867dff728a55daa35c7714d3a6..afdee99c7d5ecedf8d2f6856f0aa9271 private static void commandSettings() { commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle); -@@ -194,6 +205,17 @@ public class LeafConfig { +@@ -189,6 +200,17 @@ public class LeafConfig { commandCompassBarProgressPercent = (float) getDouble("settings.command.compass.percent", commandCompassBarProgressPercent); commandCompassBarTickInterval = getInt("settings.command.compass.tick-interval", commandCompassBarTickInterval); diff --git a/patches/server/0011-Purpur-Lagging-threshold.patch b/patches/server/0011-Purpur-Lagging-threshold.patch index 515e666f..f697200e 100644 --- a/patches/server/0011-Purpur-Lagging-threshold.patch +++ b/patches/server/0011-Purpur-Lagging-threshold.patch @@ -7,18 +7,18 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ab0a4a36241bee59b142df65736003c69dcb3dd4..411fae7132b1d1763712594a18cff10d612cef7e 100644 +index d5e8de2fd68dbc43385ad71849294f20344385f5..6a16837facde1e903cdf203329798f8386a328d3 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -305,6 +305,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null; diff --git a/patches/server/0018-Purpur-Halloween-options-and-optimizations.patch b/patches/server/0018-Purpur-Halloween-options-and-optimizations.patch index dbec437a..ca6c66de 100644 --- a/patches/server/0018-Purpur-Halloween-options-and-optimizations.patch +++ b/patches/server/0018-Purpur-Halloween-options-and-optimizations.patch @@ -7,7 +7,7 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 1572a81ce1718964d795f2a2a411402f88901c73..ae2c84af8baaf1bba9b0debe3774321417d77413 100644 +index bf62750c31ffba6c2aa4f6d17c1c71c62385e584..d3195be103d45ddf33cda3d817107321b535e495 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -246,7 +246,7 @@ public class Bat extends AmbientCreature { @@ -19,14 +19,14 @@ index 1572a81ce1718964d795f2a2a411402f88901c73..ae2c84af8baaf1bba9b0debe37743214 b0 = 7; } else if (random.nextBoolean()) { return false; -@@ -260,6 +260,7 @@ public class Bat extends AmbientCreature { - private static boolean isSpookySeason = false; - private static final int ONE_HOUR = 20 * 60 * 60; - private static int lastSpookyCheck = -ONE_HOUR; +@@ -292,6 +292,7 @@ public class Bat extends AmbientCreature { + + // Gale end - predict Halloween + + public static boolean isHalloweenSeason(Level level) { return org.dreeam.leaf.LeafConfig.forceHalloweenSeason || isHalloween(); } // Purpur private static boolean isHalloween() { - if (net.minecraft.server.MinecraftServer.currentTick - lastSpookyCheck > ONE_HOUR) { - LocalDate localdate = LocalDate.now(); + // Gale start - predict Halloween + long currentEpochMillis = System.currentTimeMillis(); diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java index b8abee145fc92faddef98da913eca7715b6bfc03..41de63fdcfe48c2a77f2d04e5bffbca41c98afe3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -62,10 +62,10 @@ index 9976205537cfe228735687f1e9c52c74ac025690..dfe4c6d2bf9bee2e019635d02f01dc08 this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 040c1f584c525990ec844cba9f01df5b33fa2a37..2855f8c4684cb9afee1bd8a4c2ae82d45ef1ea2b 100644 +index fee7c2e2b2189e9b0751d2fa994a2acc9a27faff..22df3540dd06ba049640e9bac90c23c095a07384 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -256,4 +256,11 @@ public class LeafConfig { +@@ -251,4 +251,11 @@ public class LeafConfig { advancementOnlyBroadcastToAffectedPlayer = getBoolean("settings.broadcasts.advancement.only-broadcast-to-affected-player", advancementOnlyBroadcastToAffectedPlayer); deathMessageOnlyBroadcastToAffectedPlayer = getBoolean("settings.broadcasts.death.only-broadcast-to-affected-player", deathMessageOnlyBroadcastToAffectedPlayer); } diff --git a/patches/server/0019-Purpur-Persistent-BlockEntity-Lore-and-DisplayName.patch b/patches/server/0019-Purpur-Persistent-BlockEntity-Lore-and-DisplayName.patch index f62cbd51..6bd08be2 100644 --- a/patches/server/0019-Purpur-Persistent-BlockEntity-Lore-and-DisplayName.patch +++ b/patches/server/0019-Purpur-Persistent-BlockEntity-Lore-and-DisplayName.patch @@ -40,10 +40,10 @@ index b0204af850ee182773ad458208cccd946ad148d5..f74e420b1791df528a30a1213bb0076b @Nullable diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 7b71073027f4cf79736546500ededdfbb83d968e..98c9c1899a311e76179f72fa1c43830fb5b9c521 100644 +index 39981cd0003eb7ee416d887ffec70fb049599320..a5a1773109123c3499d6b2b02b76805d66764ec5 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -63,6 +63,13 @@ import net.minecraft.world.phys.shapes.Shapes; +@@ -65,6 +65,13 @@ import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import org.slf4j.Logger; @@ -57,7 +57,7 @@ index 7b71073027f4cf79736546500ededdfbb83d968e..98c9c1899a311e76179f72fa1c43830f public class Block extends BlockBehaviour implements ItemLike { private static final Logger LOGGER = LogUtils.getLogger(); -@@ -325,7 +332,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -328,7 +335,7 @@ public class Block extends BlockBehaviour implements ItemLike { public static void dropResources(BlockState state, LevelAccessor world, BlockPos pos, @Nullable BlockEntity blockEntity) { if (world instanceof ServerLevel) { Block.getDrops(state, (ServerLevel) world, pos, blockEntity).forEach((itemstack) -> { @@ -66,7 +66,7 @@ index 7b71073027f4cf79736546500ededdfbb83d968e..98c9c1899a311e76179f72fa1c43830f }); state.spawnAfterBreak((ServerLevel) world, pos, ItemStack.EMPTY, true); } -@@ -341,7 +348,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -344,7 +351,7 @@ public class Block extends BlockBehaviour implements ItemLike { io.papermc.paper.event.block.BlockBreakBlockEvent event = new io.papermc.paper.event.block.BlockBreakBlockEvent(org.bukkit.craftbukkit.block.CraftBlock.at(world, pos), org.bukkit.craftbukkit.block.CraftBlock.at(world, source), items); event.callEvent(); for (var drop : event.getDrops()) { @@ -75,7 +75,7 @@ index 7b71073027f4cf79736546500ededdfbb83d968e..98c9c1899a311e76179f72fa1c43830f } state.spawnAfterBreak(world.getMinecraftWorld(), pos, ItemStack.EMPTY, true); } -@@ -352,13 +359,53 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -355,13 +362,53 @@ public class Block extends BlockBehaviour implements ItemLike { public static void dropResources(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity blockEntity, Entity entity, ItemStack stack) { if (world instanceof ServerLevel) { Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, stack).forEach((itemstack1) -> { @@ -198,10 +198,10 @@ index 58986bc0677c5ea1ad54d7d6d4efa5c2ea233aea..59d616137088af46d4494171fe96ba01 + // Purpur end } diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 2855f8c4684cb9afee1bd8a4c2ae82d45ef1ea2b..f87f4f19738dfe8b58d3dbf0c27933fd3ec93883 100644 +index 22df3540dd06ba049640e9bac90c23c095a07384..1fd40640460850c7c89187c0eb10f966c61f4279 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -263,4 +263,9 @@ public class LeafConfig { +@@ -258,4 +258,9 @@ public class LeafConfig { forceHalloweenSeason = getBoolean("gameplay-mechanics.halloween.force", forceHalloweenSeason); chanceHeadHalloweenOnEntity = (float) getDouble("gameplay-mechanics.halloween.head-chance", chanceHeadHalloweenOnEntity); } diff --git a/patches/server/0020-Purpur-Add-more-logger-output-for-invalid-movement-k.patch b/patches/server/0020-Purpur-Add-more-logger-output-for-invalid-movement-k.patch index df20695d..2cdda456 100644 --- a/patches/server/0020-Purpur-Add-more-logger-output-for-invalid-movement-k.patch +++ b/patches/server/0020-Purpur-Add-more-logger-output-for-invalid-movement-k.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 215eda414547bfdf662b4ea511fa3f774e125d94..7e10dca6450ca112db18a0ff03dbd2330a1d884a 100644 +index 76adc3aeaf4de9307668803b01f39da7cb828da1..c6668f9c2fc77265b06117fde93bbe6e7687d953 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -813,6 +813,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -829,6 +829,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause @@ -18,7 +18,7 @@ index 215eda414547bfdf662b4ea511fa3f774e125d94..7e10dca6450ca112db18a0ff03dbd233 return; } -@@ -1374,8 +1375,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1388,8 +1389,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); diff --git a/patches/server/0021-Purpur-Log-skipped-entity-s-position.patch b/patches/server/0021-Purpur-Log-skipped-entity-s-position.patch index 949caedd..4aaafb79 100644 --- a/patches/server/0021-Purpur-Log-skipped-entity-s-position.patch +++ b/patches/server/0021-Purpur-Log-skipped-entity-s-position.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 4f3708f5f5dcb6af8225bda1cc9204a6d974665f..6bdef01513cf86d6bf578ca37b364eab70f07843 100644 +index e5cd4b7609243669c9d84ff8a4988c209e6101aa..5a8b693b6b808410bd5020fc337687bf4124baa4 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -576,6 +576,12 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -574,6 +574,12 @@ public class EntityType implements FeatureElement, EntityTypeT entity.load(nbt); }, () -> { EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id")); diff --git a/patches/server/0022-Purpur-Alternative-Keepalive-Handling.patch b/patches/server/0022-Purpur-Alternative-Keepalive-Handling.patch deleted file mode 100644 index dba3f37b..00000000 --- a/patches/server/0022-Purpur-Alternative-Keepalive-Handling.patch +++ /dev/null @@ -1,73 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Fri, 11 Oct 2019 00:17:39 -0500 -Subject: [PATCH] Purpur: Alternative Keepalive Handling - -Original license: MIT -Original project: https://github.com/PurpurMC/Purpur - -diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 7e10dca6450ca112db18a0ff03dbd2330a1d884a..a3642fd721dbaad280df032007ec4412bc8f484d 100644 ---- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -260,6 +260,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - private long keepAliveTime = Util.getMillis(); - private boolean keepAlivePending; - private long keepAliveChallenge; -+ private it.unimi.dsi.fastutil.longs.LongList keepAlives = new it.unimi.dsi.fastutil.longs.LongArrayList(); // Purpur - // CraftBukkit start - multithreaded fields - private final AtomicInteger chatSpamTickCount = new AtomicInteger(); - private final java.util.concurrent.atomic.AtomicInteger tabSpamLimiter = new java.util.concurrent.atomic.AtomicInteger(); // Paper - configurable tab spam limits -@@ -401,6 +402,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - long currentTime = Util.getMillis(); - long elapsedTime = currentTime - this.keepAliveTime; - -+ // Purpur start -+ if (org.dreeam.leaf.LeafConfig.useAlternateKeepAlive) { -+ if (elapsedTime >= 1000L) { // 1 second -+ if (!processedDisconnect && keepAlives.size() * 1000L >= KEEPALIVE_LIMIT) { -+ LOGGER.warn("{} was kicked due to keepalive timeout!", player.getName()); -+ disconnect(Component.translatable("disconnect.timeout"), org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); -+ } else { -+ keepAliveTime = currentTime; // hijack this field for 1 second intervals -+ keepAlives.add(currentTime); // currentTime is ID -+ send(new ClientboundKeepAlivePacket(currentTime)); -+ } -+ } -+ } else -+ // Purpur end -+ - if (this.keepAlivePending) { - if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected - ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info -@@ -3467,6 +3483,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - - @Override - public void handleKeepAlive(ServerboundKeepAlivePacket packet) { -+ // Purpur start -+ if (org.dreeam.leaf.LeafConfig.useAlternateKeepAlive) { -+ long id = packet.getId(); -+ if (keepAlives.size() > 0 && keepAlives.contains(id)) { -+ int ping = (int) (Util.getMillis() - id); -+ player.latency = (player.latency * 3 + ping) / 4; -+ keepAlives.clear(); // we got a valid response, lets roll with it and forget the rest -+ } -+ } else -+ // Purpur end - //PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); // CraftBukkit // Paper - This shouldn't be on the main thread - if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { - int i = (int) (Util.getMillis() - this.keepAliveTime); -diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index f87f4f19738dfe8b58d3dbf0c27933fd3ec93883..9403774691cb83a3b916b4e0dc603385aceb4f4d 100644 ---- a/src/main/java/org/dreeam/leaf/LeafConfig.java -+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -268,4 +268,9 @@ public class LeafConfig { - private static void tileentitySetting() { - persistentTileEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-tileentity-display-names-and-lore", persistentTileEntityDisplayNames); - } -+ -+ public static boolean useAlternateKeepAlive = false; -+ private static void useAlternateKeepAlive() { -+ useAlternateKeepAlive = getBoolean("settings.use-alternate-keepalive", useAlternateKeepAlive); -+ } - } diff --git a/patches/server/0025-Purpur-Lobotomize-stuck-villagers.patch b/patches/server/0022-Purpur-Lobotomize-stuck-villagers.patch similarity index 83% rename from patches/server/0025-Purpur-Lobotomize-stuck-villagers.patch rename to patches/server/0022-Purpur-Lobotomize-stuck-villagers.patch index 72be9b18..076b54c8 100644 --- a/patches/server/0025-Purpur-Lobotomize-stuck-villagers.patch +++ b/patches/server/0022-Purpur-Lobotomize-stuck-villagers.patch @@ -7,7 +7,7 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur 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 76a9da8209d557b913c49ccd281bf147b9ac4fa4..a39d038b5198c9244e2225e0fe383f3c96b49a08 100644 +index a4029cd16d964cd3a58f9f6e8471fbdf07de578b..f3e07732776b37c031069bf223ac62e89c97d2e0 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -139,6 +139,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -17,9 +17,9 @@ index 76a9da8209d557b913c49ccd281bf147b9ac4fa4..a39d038b5198c9244e2225e0fe383f3c + private boolean isLobotomized = false; public boolean isLobotomized() { return this.isLobotomized; } // Purpur + private int notLobotomizedCount = 0; // Purpur - public long nextGolemPanic = -1; // Pufferfish - -@@ -155,6 +157,47 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + public Villager(EntityType entityType, Level world) { + this(entityType, world, VillagerType.PLAINS); +@@ -153,6 +155,47 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE)); } @@ -67,10 +67,10 @@ index 76a9da8209d557b913c49ccd281bf147b9ac4fa4..a39d038b5198c9244e2225e0fe383f3c @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -250,12 +293,27 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -247,6 +290,21 @@ public class Villager extends AbstractVillager implements ReputationEventHandler protected void customServerAiStep() { mobTick(false); } protected void mobTick(boolean inactive) { - this.level.getProfiler().push("villagerBrain"); + if (!inactive) this.getBrain().tick((ServerLevel) this.level, this); // Paper + // Purpur start + if (org.dreeam.leaf.LeafConfig.villagerLobotomizeEnabled) { + // treat as inactive if lobotomized @@ -80,21 +80,15 @@ index 76a9da8209d557b913c49ccd281bf147b9ac4fa4..a39d038b5198c9244e2225e0fe383f3c + this.isLobotomized = false; + } + // Purpur end - // Pufferfish start - if (!inactive) { - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish - this.getBrain().tick((ServerLevel) this.level, this); // Paper - } - // Pufferfish end + // Purpur start -+ else if (this.isLobotomized && shouldRestock()) { ++ if (this.isLobotomized && shouldRestock()) { + // make sure we restock if needed when lobotomized + restock(); + } + // Purpur end - this.level.getProfiler().pop(); if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; + } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java index a1a8ac55e572156671e47317ba061855be79e5ac..ec3fb8865211bd7625103c37af7b96df37163a07 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java @@ -112,12 +106,12 @@ index a1a8ac55e572156671e47317ba061855be79e5ac..ec3fb8865211bd7625103c37af7b96df + // Purpur end } diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 1a2c32e6589de7705af26623a0c6badb9504324f..e3a2432c09871878c4c3981019d602a91fec3af7 100644 +index 1fd40640460850c7c89187c0eb10f966c61f4279..94c890a609a8ce2a76d44eb365eeff1d7e7b13bf 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -278,4 +278,11 @@ public class LeafConfig { - private static void sandSettings() { - fixSandDuping = getBoolean("blocks.sand.fix-duping", fixSandDuping); +@@ -263,4 +263,11 @@ public class LeafConfig { + private static void tileentitySetting() { + persistentTileEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-tileentity-display-names-and-lore", persistentTileEntityDisplayNames); } + + public static boolean villagerLobotomizeEnabled = false; diff --git a/patches/server/0026-Purpur-Option-to-disable-kick-for-out-of-order-chat.patch b/patches/server/0023-Purpur-Option-to-disable-kick-for-out-of-order-chat.patch similarity index 84% rename from patches/server/0026-Purpur-Option-to-disable-kick-for-out-of-order-chat.patch rename to patches/server/0023-Purpur-Option-to-disable-kick-for-out-of-order-chat.patch index ec0f967e..d986a4e3 100644 --- a/patches/server/0026-Purpur-Option-to-disable-kick-for-out-of-order-chat.patch +++ b/patches/server/0023-Purpur-Option-to-disable-kick-for-out-of-order-chat.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index a3642fd721dbaad280df032007ec4412bc8f484d..35afbe22475309f165fe8b540b51648ab41ed394 100644 +index c6668f9c2fc77265b06117fde93bbe6e7687d953..68248b1156a592edc662b60e5f5cdfcfd1aff2e0 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2387,7 +2387,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2385,7 +2385,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic do { instant1 = (Instant) this.lastChatTimeStamp.get(); if (timestamp.isBefore(instant1)) { @@ -20,10 +20,10 @@ index a3642fd721dbaad280df032007ec4412bc8f484d..35afbe22475309f165fe8b540b51648a } while (!this.lastChatTimeStamp.compareAndSet(instant1, timestamp)); diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index e3a2432c09871878c4c3981019d602a91fec3af7..519770e60a1986e00b9754bb375b621cf084ec88 100644 +index 94c890a609a8ce2a76d44eb365eeff1d7e7b13bf..abca2d4c4f25c9483019984001bb48d5f36e1ca8 100644 --- a/src/main/java/org/dreeam/leaf/LeafConfig.java +++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -285,4 +285,9 @@ public class LeafConfig { +@@ -270,4 +270,9 @@ public class LeafConfig { villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled); villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); } diff --git a/patches/server/0023-Purpur-Skip-events-if-there-s-no-listeners.patch b/patches/server/0023-Purpur-Skip-events-if-there-s-no-listeners.patch deleted file mode 100644 index b0ad8848..00000000 --- a/patches/server/0023-Purpur-Skip-events-if-there-s-no-listeners.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Sat, 4 Apr 2020 03:07:59 -0500 -Subject: [PATCH] Purpur: Skip events if there's no listeners - -Original license: MIT -Original project: https://github.com/PurpurMC/Purpur - -diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 8ee8ff15f4511684261ff7a9417baa2ccd313b69..31e44f59bd34ae79dd1147263e446e6d6e9f8c66 100644 ---- a/src/main/java/net/minecraft/commands/Commands.java -+++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -429,6 +429,7 @@ public class Commands { - private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) { - // Paper end - Async command map building - new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper -+ if (PlayerCommandSendEvent.getHandlerList().getRegisteredListeners().length > 0) { // Purpur - skip all this crap if there's nothing listening - PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); - event.getPlayer().getServer().getPluginManager().callEvent(event); - -@@ -439,6 +440,7 @@ public class Commands { - } - } - // CraftBukkit end -+ } // Purpur - skip event - player.connection.send(new ClientboundCommandsPacket(rootcommandnode)); - } - diff --git a/patches/server/0029-KeYi-Do-not-save-firework-entities-or-the-server-may.patch b/patches/server/0024-KeYi-Do-not-save-firework-entities-or-the-server-may.patch similarity index 100% rename from patches/server/0029-KeYi-Do-not-save-firework-entities-or-the-server-may.patch rename to patches/server/0024-KeYi-Do-not-save-firework-entities-or-the-server-may.patch diff --git a/patches/server/0024-Purpur-Add-toggle-for-sand-duping-fix.patch b/patches/server/0024-Purpur-Add-toggle-for-sand-duping-fix.patch deleted file mode 100644 index 7c236cae..00000000 --- a/patches/server/0024-Purpur-Add-toggle-for-sand-duping-fix.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Fri, 4 Jun 2021 09:13:54 -0500 -Subject: [PATCH] Purpur: Add toggle for sand duping fix - -Original license: MIT -Original project: https://github.com/PurpurMC/Purpur - -diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 72f1866226269396ba0f0c1be269e237925d9322..fe813aea811d3b5c54978d33e7b766f7a9fd17ee 100644 ---- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -+++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -@@ -130,7 +130,7 @@ public class FallingBlockEntity extends Entity { - @Override - public void tick() { - // Paper start - fix sand duping -- if (this.isRemoved()) { -+ if (org.dreeam.leaf.LeafConfig.fixSandDuping && this.isRemoved()) { // Purpur - return; - } - // Paper end - fix sand duping -@@ -147,7 +147,7 @@ public class FallingBlockEntity extends Entity { - this.move(MoverType.SELF, this.getDeltaMovement()); - - // Paper start - fix sand duping -- if (this.isRemoved()) { -+ if (org.dreeam.leaf.LeafConfig.fixSandDuping && this.isRemoved()) { // Purpur - return; - } - // Paper end - fix sand duping -diff --git a/src/main/java/org/dreeam/leaf/LeafConfig.java b/src/main/java/org/dreeam/leaf/LeafConfig.java -index 9403774691cb83a3b916b4e0dc603385aceb4f4d..1a2c32e6589de7705af26623a0c6badb9504324f 100644 ---- a/src/main/java/org/dreeam/leaf/LeafConfig.java -+++ b/src/main/java/org/dreeam/leaf/LeafConfig.java -@@ -273,4 +273,9 @@ public class LeafConfig { - private static void useAlternateKeepAlive() { - useAlternateKeepAlive = getBoolean("settings.use-alternate-keepalive", useAlternateKeepAlive); - } -+ -+ public static boolean fixSandDuping = true; -+ private static void sandSettings() { -+ fixSandDuping = getBoolean("blocks.sand.fix-duping", fixSandDuping); -+ } - } diff --git a/patches/server/0032-KeYi-Optimized-getBiome-method.patch b/patches/server/0025-KeYi-Optimized-getBiome-method.patch similarity index 100% rename from patches/server/0032-KeYi-Optimized-getBiome-method.patch rename to patches/server/0025-KeYi-Optimized-getBiome-method.patch diff --git a/patches/server/0033-KeYi-Use-optimized-RecipeManager.patch b/patches/server/0026-KeYi-Use-optimized-RecipeManager.patch similarity index 100% rename from patches/server/0033-KeYi-Use-optimized-RecipeManager.patch rename to patches/server/0026-KeYi-Use-optimized-RecipeManager.patch diff --git a/patches/server/0027-KeYi-Smarter-statistics-ticking.patch b/patches/server/0027-KeYi-Smarter-statistics-ticking.patch deleted file mode 100644 index 74b775a6..00000000 --- a/patches/server/0027-KeYi-Smarter-statistics-ticking.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Mykyta Komarnytskyy -Date: Sat, 24 Oct 2020 21:03:53 -0500 -Subject: [PATCH] KeYi: Smarter statistics ticking - -Original license: MIT -Original project: https://github.com/KeYiMC/KeYi - -In vanilla, statistics that count time spent for an action (i.e. time played or sneak time) are incremented every tick. This is retarded. With this patch and a configured interval of 20, the statistics are only ticked every 20th tick and are incremented by 20 ticks at a time. This means a lot less ticking with the same accurate counting. -With an interval of 20, this patch saves roughly 3ms per tick on a server w/ 80 players online. - -Original code by YatopiaMC, licensed under MIT -You can find the original code on https://github.com/YatopiaMC/Yatopia - -diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 2e6557a19523d18aecff709de30cb4466b46a9fa..2ca483dea4eabd5f58076e5676e2ce4d0b1d9045 100644 ---- a/src/main/java/net/minecraft/world/entity/player/Player.java -+++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -277,19 +277,21 @@ public abstract class Player extends LivingEntity { - this.moveCloak(); - if (!this.level.isClientSide) { - this.foodData.tick(this); -- this.awardStat(Stats.PLAY_TIME); -- this.awardStat(Stats.TOTAL_WORLD_TIME); -- if (this.isAlive()) { -- this.awardStat(Stats.TIME_SINCE_DEATH); -- } -- -- if (this.isDiscrete()) { -- this.awardStat(Stats.CROUCH_TIME); -- } -- -- if (!this.isSleeping()) { -- this.awardStat(Stats.TIME_SINCE_REST); -+ // Mirai start -+ if (tickCount % 20 == 0) { -+ this.awardStat(Stats.PLAY_TIME, 20); -+ this.awardStat(Stats.TOTAL_WORLD_TIME, 20); -+ if (this.isAlive()) { -+ this.awardStat(Stats.TIME_SINCE_DEATH, 20); -+ } -+ if (this.isDiscrete()) { -+ this.awardStat(Stats.CROUCH_TIME, 20); -+ } -+ if (!this.isSleeping()) { -+ this.awardStat(Stats.TIME_SINCE_REST, 20); -+ } - } -+ // Mirai end - } - - int i = 29999999; diff --git a/patches/server/0034-KeYi-Use-a-faster-random-implementation.patch b/patches/server/0027-KeYi-Use-a-faster-random-implementation.patch similarity index 97% rename from patches/server/0034-KeYi-Use-a-faster-random-implementation.patch rename to patches/server/0027-KeYi-Use-a-faster-random-implementation.patch index d03a7833..aedae0dd 100644 --- a/patches/server/0034-KeYi-Use-a-faster-random-implementation.patch +++ b/patches/server/0027-KeYi-Use-a-faster-random-implementation.patch @@ -426,10 +426,10 @@ index e5ea9f27a1936ed9e329e74317c91c5df89b9fbd..89a41d396162a1c2eb2df5192b0d888b private long lastFill = -1; private long nextRefill = -1; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index de7a5f3812a017131fd1b32fbeff10e325b1cd2e..ebe2c0b17fc6e21a5ced4f35b594d466f9f573f5 100644 +index bca581f2a192015f5461e5bf776234687e5ae9fc..87161a2a3f611abdefdb2ef475a3cb64261339b8 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -@@ -53,6 +53,10 @@ import net.minecraft.world.level.material.Fluids; +@@ -52,6 +52,10 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.ticks.LevelChunkTicks; import net.minecraft.world.ticks.TickContainerAccess; import org.slf4j.Logger; @@ -440,7 +440,7 @@ index de7a5f3812a017131fd1b32fbeff10e325b1cd2e..ebe2c0b17fc6e21a5ced4f35b594d466 public class LevelChunk extends ChunkAccess { -@@ -932,7 +936,7 @@ public class LevelChunk extends ChunkAccess { +@@ -931,7 +935,7 @@ public class LevelChunk extends ChunkAccess { if (this.needsDecoration) { try (co.aikar.timings.Timing ignored = this.level.timings.chunkLoadPopulate.startTiming()) { // Paper this.needsDecoration = false; @@ -471,18 +471,18 @@ index dcfe090c269d4cbcc2eb1b6f85392848bb34656c..ef8909c9c13c8f46ec6d452f0d14c9a1 } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index f8d321e925bf2708e51590542325c1bdc67d5964..ace7e9f66c3583fc51f06bd9963ed55968d40c0f 100644 +index a190bb9ce7b3701963f315452359f6f9c3aae329..97722fc6e49b47657cf901b05dfb76a4b2a23034 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -134,6 +134,7 @@ import org.bukkit.util.Consumer; - import org.bukkit.util.RayTraceResult; +@@ -132,6 +132,7 @@ import org.bukkit.util.RayTraceResult; import org.bukkit.util.StructureSearchResult; import org.bukkit.util.Vector; + import org.galemc.gale.executor.queue.ScheduledServerThreadTaskQueues; +import cc.keyimc.keyi.utils.FastRandom; // KeYi public class CraftWorld extends CraftRegionAccessor implements World { public static final int CUSTOM_DIMENSION_OFFSET = 10; -@@ -226,7 +227,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -224,7 +225,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { } // Paper end diff --git a/patches/server/0028-KeYi-Fast-speed-check.patch b/patches/server/0028-KeYi-Fast-speed-check.patch deleted file mode 100644 index e67ed5ae..00000000 --- a/patches/server/0028-KeYi-Fast-speed-check.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: nostalgic853 -Date: Sat, 22 Oct 2022 09:58:38 +0800 -Subject: [PATCH] KeYi: Fast speed check - -Original license: MIT -Original project: https://github.com/KeYiMC/KeYi - -Original code by NFT-Worlds, licensed under GNU General Public License v3.0 -You can find the original code on https://github.com/NFT-Worlds/Server - -This patch was took from Mirai. (https://github.com/etil2jz/Mirai) - -etil2jz's note: -NFT-Worlds is related to Stellar devs, known for countless paid forks mostly taking open source patches, -doing questionable/buggy ones, and claiming breathtaking performance improvements. Never ever pay for -any of those Spigot forks! - -diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 37f1e4aa89da81fcae2d38bb741f3386950bdf51..0dec640d663defdd84b5a22a2668a20fde62d95c 100644 ---- a/src/main/java/net/minecraft/world/entity/Entity.java -+++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1193,7 +1193,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - } - - this.tryCheckInsideBlocks(); -- float f2 = this.getBlockSpeedFactor(); -+ // KeYi start - Fast speed check -+ float f2; -+ if (this.getDeltaMovement().x == 0 && this.getDeltaMovement().z == 0) { -+ f2 = 1; -+ } else { -+ f2 = this.getBlockSpeedFactor(); -+ } -+ // KeYi end - - this.setDeltaMovement(this.getDeltaMovement().multiply((double) f2, 1.0D, (double) f2)); - // Paper start - remove expensive streams from here diff --git a/patches/server/0035-KeYi-Player-Skull-API.patch b/patches/server/0028-KeYi-Player-Skull-API.patch similarity index 92% rename from patches/server/0035-KeYi-Player-Skull-API.patch rename to patches/server/0028-KeYi-Player-Skull-API.patch index 6604be98..d2a6a1e0 100644 --- a/patches/server/0035-KeYi-Player-Skull-API.patch +++ b/patches/server/0028-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 99bf1485ddecb5fc88850242e9c32850781c4b36..0813237d69ad1a9d4ed32772803fb5111a015dd4 100644 +index 53a5464aa0261d50ce9a0b7528af56f9436e3c1c..554fe3cdc287dd06a2eefffba42eac86efda0d24 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -26,6 +26,9 @@ import java.util.Optional; @@ -28,7 +28,7 @@ index 99bf1485ddecb5fc88850242e9c32850781c4b36..0813237d69ad1a9d4ed32772803fb511 import org.bukkit.map.MapCursor; import org.bukkit.map.MapView; import org.bukkit.metadata.MetadataValue; -@@ -3003,4 +3007,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3010,4 +3014,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.spigot; } // Spigot end diff --git a/patches/server/0036-KeYi-Reduce-sensor-work.patch b/patches/server/0029-KeYi-Reduce-sensor-work.patch similarity index 78% rename from patches/server/0036-KeYi-Reduce-sensor-work.patch rename to patches/server/0029-KeYi-Reduce-sensor-work.patch index f41ffb80..d76092d6 100644 --- a/patches/server/0036-KeYi-Reduce-sensor-work.patch +++ b/patches/server/0029-KeYi-Reduce-sensor-work.patch @@ -13,19 +13,17 @@ this patch is focused around the sensors used for ai delete the line of sight cache less often and use a faster nearby comparison diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 94b45579dc371ee980565aed2f5dee78ebd44427..48746d84f18cc8ee2f57785c65a5659ced454d39 100644 +index 27fc50571305132c86497fcb1d5b1bb514610a4e..f1a33fd186fa9c10ac99b7b0e6379902a10dfb14 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -873,10 +873,10 @@ public abstract class Mob extends LivingEntity { +@@ -867,8 +867,8 @@ public abstract class Mob extends LivingEntity { return; } // Paper end -+ int i = this.level.getServer().getTickCount() + this.getId(); // petal - move up - this.level.getProfiler().push("sensing"); - this.sensing.tick(); -+ if (i % 10 == 0) this.sensing.tick(); // petal - only refresh line of sight cache every half second - this.level.getProfiler().pop(); - int i = this.level.getServer().getTickCount() + this.getId(); ++ int i = this.level.getServer().getTickCount() + this.getId(); // petal - move up ++ if (i % 10 == 0) this.sensing.tick(); // petal - only refresh line of sight cache every half second if (i % 2 != 0 && this.tickCount > 1) { - this.level.getProfiler().push("targetSelector"); + this.targetSelector.tickRunningGoals(false); diff --git a/patches/server/0030-KeYi-Don-t-create-new-random-instance.patch b/patches/server/0030-KeYi-Don-t-create-new-random-instance.patch deleted file mode 100644 index afa24b94..00000000 --- a/patches/server/0030-KeYi-Don-t-create-new-random-instance.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: foss-mc <69294560+foss-mc@users.noreply.github.com> -Date: Thu, 1 Jul 2021 12:17:44 +0000 -Subject: [PATCH] KeYi: Don't create new random instance - -Original license: MIT -Original project: https://github.com/KeYiMC/KeYi - -Original code by PatinaMC, licensed under GNU General Public License v3.0 -You can find the original code on https://github.com/PatinaMC/Patina - -diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0ff21883cff37d1df7fda9b2cb93abcfd43f6482..cabed5594c2fb611d92d6319fe83259b8ca5bc21 100644 ---- a/src/main/java/net/minecraft/server/level/ServerPlayer.java -+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -395,7 +395,7 @@ public class ServerPlayer extends Player { - long l = k * k; - int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l; - int j1 = this.getCoprime(i1); -- int k1 = RandomSource.create().nextInt(i1); -+ int k1 = worldserver.random.nextInt(i1); // Patina - don't create new random instance - - for (int l1 = 0; l1 < i1; ++l1) { - int i2 = (k1 + j1 * l1) % i1; -@@ -432,7 +432,7 @@ public class ServerPlayer extends Player { - long l = k * k; - int i1 = l > 2147483647L ? Integer.MAX_VALUE : (int) l; - int j1 = this.getCoprime(i1); -- int k1 = RandomSource.create().nextInt(i1); -+ int k1 = world.random.nextInt(i1); // Patina - don't create new random instance - - for (int l1 = 0; l1 < i1; ++l1) { - int i2 = (k1 + j1 * l1) % i1; -diff --git a/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java b/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java -index 1ef089dbf83de35d875c00efdf468c397be56978..c345f10cbf7f3451edc604f97cdf959d70639e17 100644 ---- a/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java -+++ b/src/main/java/net/minecraft/server/rcon/thread/QueryThreadGs4.java -@@ -349,7 +349,7 @@ public class QueryThreadGs4 extends GenericThread { - this.identBytes[2] = bs[5]; - this.identBytes[3] = bs[6]; - this.ident = new String(this.identBytes, StandardCharsets.UTF_8); -- this.challenge = RandomSource.create().nextInt(16777216); -+ this.challenge = java.util.concurrent.ThreadLocalRandom.current().nextInt(16777216); // Patina - don't create new random instance - this.challengeBytes = String.format(Locale.ROOT, "\t%s%d\u0000", this.ident, this.challenge).getBytes(StandardCharsets.UTF_8); - } - diff --git a/patches/server/0031-KeYi-Skip-entity-move-if-no-movement.patch b/patches/server/0031-KeYi-Skip-entity-move-if-no-movement.patch deleted file mode 100644 index 186555c0..00000000 --- a/patches/server/0031-KeYi-Skip-entity-move-if-no-movement.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: nostalgic853 -Date: Mon, 24 Oct 2022 11:01:36 +0800 -Subject: [PATCH] KeYi: Skip entity move if no movement - -Original license: MIT -Original project: https://github.com/KeYiMC/KeYi - -Copyright (c) 2021-2022 ishland - -Original code by RelativityMC, licensed under MIT -You can find the original code on https://github.com/RelativityMC/VMP-fabric (Yarn mappings) - -diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 0dec640d663defdd84b5a22a2668a20fde62d95c..a88b54d2dbae6951d475ca11eddd444e25c178ad 100644 ---- a/src/main/java/net/minecraft/world/entity/Entity.java -+++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -397,6 +397,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - @javax.annotation.Nullable - private UUID originWorld; - public boolean freezeLocked = false; // Paper - Freeze Tick Lock API -+ private boolean boundingBoxChanged = false; // KeYi - - public void setOrigin(@javax.annotation.Nonnull Location location) { - this.origin = location.toVector(); -@@ -1033,6 +1034,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - // Paper end - detailed watchdog information - - public void move(MoverType movementType, Vec3 movement) { -+ // KeYi start -+ if (!boundingBoxChanged && movement.equals(Vec3.ZERO)) { -+ boundingBoxChanged = false; -+ return; -+ } -+ // KeYi end -+ - // Paper start - detailed watchdog information - io.papermc.paper.util.TickThread.ensureTickThread("Cannot move an entity off-main"); - synchronized (this.posLock) { -@@ -3814,6 +3822,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - } - - public final void setBoundingBox(AABB boundingBox) { -+ if (!this.bb.equals(boundingBox)) boundingBoxChanged = true; // KeYi - // CraftBukkit start - block invalid bounding boxes - double minX = boundingBox.minX, - minY = boundingBox.minY,