diff --git a/build.gradle.kts b/build.gradle.kts index 74f434e8..d212bb0e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -85,6 +85,12 @@ val patchTasks = listOf( ":leaves-server:applyMinecraftPatches" to ":leaves-server:rebuildMinecraftPatches", ":leaves-server:applyPaperServerPatches" to ":leaves-server:rebuildPaperServerPatches" ) +val patchDir = listOf( + "paper-api", + "leaves-server", + "leaves-server/src/minecraft/java", + "paper-server", +) val statusFile = layout.buildDirectory.file("patchTaskStatus.json").get().asFile fun readTaskStatus(): Map { @@ -103,28 +109,10 @@ fun writeTaskStatus(status: Map) { statusFile.writeText(JsonBuilder(status).toPrettyString()) } -fun executeTask(taskPath: String): Boolean { - val parts = taskPath.split(":") - val projectPath = if (parts.size > 2) parts.subList(0, parts.size - 1).joinToString(":") else ":" - val taskName = parts.last() - val fullTaskPath = if (projectPath == ":" || projectPath.isEmpty()) taskName else "$projectPath:$taskName" - +fun executeCommand(command: List, directory: File): Boolean { try { - val gradlew = if (System.getProperty("os.name").lowercase(Locale.getDefault()).contains("windows")) - "${project.rootDir}\\gradlew.bat" - else - "${project.rootDir}/gradlew" - - val processBuilder = ProcessBuilder( - gradlew, - fullTaskPath, - // "--console=verbose", - // "--info" - ) - processBuilder.directory(project.rootDir) - - val env = processBuilder.environment() - env["TERM"] = "xterm-256color" + val processBuilder = ProcessBuilder(command) + processBuilder.directory(directory) val process = processBuilder.start() @@ -154,17 +142,38 @@ fun executeTask(taskPath: String): Boolean { outputThread.join() errorThread.join() - if (exitCode != 0) { - throw GradleException("Task $fullTaskPath FAILED,$exitCode") - } - - return true - } catch (e: Exception) { - println("⚠️ Task FAILED: $taskPath - ${e.message}") - throw e + return exitCode == 0 + } catch (_: Exception) { + return false } } +fun hasGitChanges(directory: File): Boolean { + val process = ProcessBuilder("git", "status", "--porcelain").directory(directory).start() + val output = process.inputStream.bufferedReader().readText() + process.waitFor() + + return output.isNotEmpty() +} + +fun executeTask(taskPath: String): Boolean { + val parts = taskPath.split(":") + val projectPath = if (parts.size > 2) parts.subList(0, parts.size - 1).joinToString(":") else ":" + val taskName = parts.last() + val fullTaskPath = if (projectPath == ":" || projectPath.isEmpty()) taskName else "$projectPath:$taskName" + + val gradlew = if (System.getProperty("os.name").lowercase(Locale.getDefault()).contains("windows")) + "${project.rootDir}\\gradlew.bat" + else + "${project.rootDir}/gradlew" + + if (!executeCommand(listOf(gradlew, fullTaskPath), project.projectDir)) { + throw GradleException("Task $fullTaskPath FAILED") + } + + return true +} + tasks.register("applyAllPatchesSequentially") { group = "leaves" description = "Apply all patches sequentially, run rebuild after success, wait for manual fix if failed" @@ -228,6 +237,31 @@ tasks.register("applyAllPatchesSequentially") { } } +tasks.register("applyNextPatch") { + group = "leaves" + description = "Apply the next patch" + + doLast { + val taskStatus = readTaskStatus().toMutableMap() + + val failedIndex = patchTasks.indexOfFirst { (applyTaskPath, _) -> + taskStatus[applyTaskPath] == "FAILED" + } + + if (failedIndex >= 0) { + val directory = project.projectDir.resolve(patchDir[failedIndex]) + + val gitCommand = if (hasGitChanges(directory)) { + listOf("git", "am", "--continue") + } else { + listOf("git", "am", "--skip") + } + + executeCommand(gitCommand, directory) + } + } +} + tasks.register("resetPatchTaskStatus") { group = "leaves" description = "Reset the status of all patch tasks" diff --git a/gradle.properties b/gradle.properties index 9c9b7d54..f30190ee 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ group=org.leavesmc.leaves version=1.21.4-R0.1-SNAPSHOT mcVersion=1.21.4 -paperRef=bb1beda67bfd94632815acc8ac5d68f5a8e3e410 +paperRef=894631f0d091a3de52aed4b6ec0c4f6c7584d697 preVersion=false org.gradle.jvmargs=-Xmx2G org.gradle.caching=true diff --git a/leaves-api/paper-patches/features/0002-Add-isShrink-to-EntityResurrectEvent.patch b/leaves-api/paper-patches/features/0002-Add-isShrink-to-EntityResurrectEvent.patch index 6b9618fa..9b942579 100644 --- a/leaves-api/paper-patches/features/0002-Add-isShrink-to-EntityResurrectEvent.patch +++ b/leaves-api/paper-patches/features/0002-Add-isShrink-to-EntityResurrectEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add isShrink to EntityResurrectEvent diff --git a/src/main/java/org/bukkit/event/entity/EntityResurrectEvent.java b/src/main/java/org/bukkit/event/entity/EntityResurrectEvent.java -index 372825dc8ae52983f0e8ff2fd80e02887f0044ad..2a598f7dc7de0be7a83a4f7a52ec22c42f417c71 100644 +index 2a7426c157f6a06f2491d95d67df95a0fb809926..8fe7d559ad6cbb8f15584c202067250dd55a8ede 100644 --- a/src/main/java/org/bukkit/event/entity/EntityResurrectEvent.java +++ b/src/main/java/org/bukkit/event/entity/EntityResurrectEvent.java -@@ -15,19 +15,43 @@ import org.jetbrains.annotations.Nullable; +@@ -16,20 +16,44 @@ import org.jetbrains.annotations.Nullable; public class EntityResurrectEvent extends EntityEvent implements Cancellable { private static final HandlerList handlers = new HandlerList(); @@ -19,6 +19,7 @@ index 372825dc8ae52983f0e8ff2fd80e02887f0044ad..2a598f7dc7de0be7a83a4f7a52ec22c4 private final EquipmentSlot hand; + @ApiStatus.Internal - public EntityResurrectEvent(@NotNull LivingEntity what, @Nullable EquipmentSlot hand) { + public EntityResurrectEvent(@NotNull LivingEntity what, @Nullable EquipmentSlot hand, boolean shrink) { super(what); @@ -30,7 +31,7 @@ index 372825dc8ae52983f0e8ff2fd80e02887f0044ad..2a598f7dc7de0be7a83a4f7a52ec22c4 + this(what, hand, true); + } + - @Deprecated(since = "1.19.2") + @Deprecated(since = "1.19.2", forRemoval = true) public EntityResurrectEvent(@NotNull LivingEntity what) { - this(what, null); + this(what, null, true); diff --git a/leaves-api/paper-patches/features/0003-Add-fakeplayer-api.patch b/leaves-api/paper-patches/features/0003-Add-fakeplayer-api.patch index 1e8509b0..0e840f2c 100644 --- a/leaves-api/paper-patches/features/0003-Add-fakeplayer-api.patch +++ b/leaves-api/paper-patches/features/0003-Add-fakeplayer-api.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add fakeplayer api diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index db47fe6560e1b0c737889698cf52c5c3fb06185f..699c71f6749352aaf8cb82a51a82f86c3a8d3abc 100644 +index 4eb723afaca049a816d16370b383fa37441eafd4..e1c6974cfd96b406314901862c2d92ad0a4ba8f2 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2998,4 +2998,15 @@ public final class Bukkit { +@@ -2996,4 +2996,15 @@ public final class Bukkit { public static void restart() { server.restart(); } @@ -25,7 +25,7 @@ index db47fe6560e1b0c737889698cf52c5c3fb06185f..699c71f6749352aaf8cb82a51a82f86c + // Leaves end - Bot API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 2eb72a31cc36a41694654da15be5a1f4983aa1bd..68c45204d1d6b8c33ab47a2414158fc273873414 100644 +index 0c1f3053ecb415a6dfbbe283bae8c1f6d8477e9c..e42fa3dc7f70a5e4426564f26d471c5bfc3d57f2 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -66,6 +66,7 @@ import org.jetbrains.annotations.ApiStatus; @@ -36,7 +36,7 @@ index 2eb72a31cc36a41694654da15be5a1f4983aa1bd..68c45204d1d6b8c33ab47a2414158fc2 /** * Represents a server implementation. -@@ -2696,4 +2697,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2698,4 +2699,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ void allowPausing(@NotNull org.bukkit.plugin.Plugin plugin, boolean value); // Paper end - API to check if the server is sleeping diff --git a/leaves-api/paper-patches/features/0004-Force-peaceful-mode-switch.patch b/leaves-api/paper-patches/features/0004-Force-peaceful-mode-switch.patch index 43817f44..e1eda138 100644 --- a/leaves-api/paper-patches/features/0004-Force-peaceful-mode-switch.patch +++ b/leaves-api/paper-patches/features/0004-Force-peaceful-mode-switch.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Force peaceful mode switch diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 015d852d5a0c01042a2153a6916d408660356c59..41c3c561d3d23136fbfa19c23d5e82ab1f2f06f3 100644 +index 96120ce0e00f902ba6139af8e21d7174d647c8ce..1e840cf229b20096ba982869b5d20982f804215a 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4346,6 +4346,12 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -4345,6 +4345,12 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient void setSendViewDistance(int viewDistance); // Paper end - view distance api diff --git a/leaves-api/paper-patches/features/0005-Replay-Mod-API.patch b/leaves-api/paper-patches/features/0005-Replay-Mod-API.patch index 57d0f1b6..65ca9cf8 100644 --- a/leaves-api/paper-patches/features/0005-Replay-Mod-API.patch +++ b/leaves-api/paper-patches/features/0005-Replay-Mod-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Replay Mod API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 699c71f6749352aaf8cb82a51a82f86c3a8d3abc..8018a4e88c9392fd68c3bd03f13e7443e6a3966d 100644 +index e1c6974cfd96b406314901862c2d92ad0a4ba8f2..27bd3867836744a6e10507d165215ebf8dd7da53 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -3009,4 +3009,10 @@ public final class Bukkit { +@@ -3007,4 +3007,10 @@ public final class Bukkit { return server.getBotManager(); } // Leaves end - Bot API @@ -20,7 +20,7 @@ index 699c71f6749352aaf8cb82a51a82f86c3a8d3abc..8018a4e88c9392fd68c3bd03f13e7443 + // Leaves end - Photographer API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 68c45204d1d6b8c33ab47a2414158fc273873414..f1519b243b676017185308145fe972702073c222 100644 +index e42fa3dc7f70a5e4426564f26d471c5bfc3d57f2..f4f83b1534a90127a77420a1768cd4b255a04868 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -67,6 +67,7 @@ import org.jetbrains.annotations.Contract; @@ -31,7 +31,7 @@ index 68c45204d1d6b8c33ab47a2414158fc273873414..f1519b243b676017185308145fe97270 /** * Represents a server implementation. -@@ -2706,4 +2707,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2708,4 +2709,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ @NotNull BotManager getBotManager(); // Leaves end - Bot API diff --git a/leaves-api/paper-patches/features/0006-Bytebuf-API.patch b/leaves-api/paper-patches/features/0006-Bytebuf-API.patch index c62401ad..4c84b72f 100644 --- a/leaves-api/paper-patches/features/0006-Bytebuf-API.patch +++ b/leaves-api/paper-patches/features/0006-Bytebuf-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Bytebuf API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 8018a4e88c9392fd68c3bd03f13e7443e6a3966d..1d347aefb56dcd5c9bcc21f2d8bc4a884ba488fa 100644 +index 27bd3867836744a6e10507d165215ebf8dd7da53..190e532fd3ddaf78eae3ea0ba2b4b986ab5f9540 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -3015,4 +3015,10 @@ public final class Bukkit { +@@ -3013,4 +3013,10 @@ public final class Bukkit { return server.getPhotographerManager(); } // Leaves end - Photographer API @@ -20,10 +20,10 @@ index 8018a4e88c9392fd68c3bd03f13e7443e6a3966d..1d347aefb56dcd5c9bcc21f2d8bc4a88 + // Leaves end - Bytebuf API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index f1519b243b676017185308145fe972702073c222..a3f895426062c97cba925c845404dbfe732e6cc8 100644 +index f4f83b1534a90127a77420a1768cd4b255a04868..8d4c10d7d8b3982a960ca2cee52ce069b1916c24 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2711,4 +2711,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2713,4 +2713,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi // Leaves start - Photographer API @NotNull PhotographerManager getPhotographerManager(); // Leaves end - Photographer API diff --git a/leaves-api/paper-patches/features/0007-Revert-raid-changes.patch b/leaves-api/paper-patches/features/0007-Revert-raid-changes.patch index df20ef16..3526e298 100644 --- a/leaves-api/paper-patches/features/0007-Revert-raid-changes.patch +++ b/leaves-api/paper-patches/features/0007-Revert-raid-changes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Revert raid changes diff --git a/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java b/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java -index 8fdfcbc7d20fe0af6b220ab94516247093637621..3eb836575307116ce0668eadd6a6ee0a9aafc7cd 100644 +index f6218d317af4f4d83292a10abdf583fb01824232..3eb836575307116ce0668eadd6a6ee0a9aafc7cd 100644 --- a/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java +++ b/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java @@ -219,9 +219,7 @@ public class EntityPotionEffectEvent extends EntityEvent implements Cancellable @@ -14,7 +14,7 @@ index 8fdfcbc7d20fe0af6b220ab94516247093637621..3eb836575307116ce0668eadd6a6ee0a * - * @deprecated no longer used, player now gets an ominous bottle instead */ -- @Deprecated(since = "1.21") // Paper +- @Deprecated(since = "1.21", forRemoval = true) PATROL_CAPTAIN, /** * When a potion effect is modified through the plugin methods. diff --git a/leaves-server/paper-patches/features/0005-Leaves-Fakeplayer.patch b/leaves-server/paper-patches/features/0005-Leaves-Fakeplayer.patch index 18ab8124..bb7d9b27 100644 --- a/leaves-server/paper-patches/features/0005-Leaves-Fakeplayer.patch +++ b/leaves-server/paper-patches/features/0005-Leaves-Fakeplayer.patch @@ -34,7 +34,7 @@ index adc6741e0e017660fbd39a62b69be1e67e0e143f..9bc40b07b8eebded4f748fd053b45571 if (nmsEntity.level() != this.getHandle().getLevel()) { nmsEntity = nmsEntity.teleport(new TeleportTransition(this.getHandle().getLevel(), nmsEntity, TeleportTransition.DO_NOTHING)); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index f7814ab48e02c443a574106f4eafbfcf8cb528c9..174b45019c5e6089556df4ebf8aef0decf23b91d 100644 +index c06b12e9d5535c8018c5b7f305946758dd9afd99..7e93baa65715383092fd43132b6f4da9eddcf39c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -315,6 +315,7 @@ public final class CraftServer implements Server { @@ -62,7 +62,7 @@ index f7814ab48e02c443a574106f4eafbfcf8cb528c9..174b45019c5e6089556df4ebf8aef0de return false; } -@@ -3299,4 +3301,11 @@ public final class CraftServer implements Server { +@@ -3294,4 +3296,11 @@ public final class CraftServer implements Server { this.console.addPluginAllowingSleep(plugin.getName(), value); } // Paper end - API to check if the server is sleeping diff --git a/leaves-server/paper-patches/features/0012-Replay-Mod-API.patch b/leaves-server/paper-patches/features/0012-Replay-Mod-API.patch index 1a1ac9e1..510bf9df 100644 --- a/leaves-server/paper-patches/features/0012-Replay-Mod-API.patch +++ b/leaves-server/paper-patches/features/0012-Replay-Mod-API.patch @@ -19,7 +19,7 @@ index a0a6cde96322df8e455b26b32b1c593f332d4db6..b5031ba5c48c7d007a7c05766a2beff4 } // Leaves end - skip bot diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 174b45019c5e6089556df4ebf8aef0decf23b91d..9668eeb821075abee8da35d849090d4f5ba75cae 100644 +index 7e93baa65715383092fd43132b6f4da9eddcf39c..af648b9301a7a964af88a55e181b68780a9f4ca5 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -316,6 +316,7 @@ public final class CraftServer implements Server { @@ -39,7 +39,7 @@ index 174b45019c5e6089556df4ebf8aef0decf23b91d..9668eeb821075abee8da35d849090d4f @Override public CraftPlayer apply(ServerPlayer player) { return player.getBukkitEntity(); -@@ -3308,4 +3309,11 @@ public final class CraftServer implements Server { +@@ -3303,4 +3304,11 @@ public final class CraftServer implements Server { return botManager; } // Leaves end - Bot API diff --git a/leaves-server/paper-patches/features/0014-Bytebuf-API.patch b/leaves-server/paper-patches/features/0014-Bytebuf-API.patch index 0ed865bd..5d69243a 100644 --- a/leaves-server/paper-patches/features/0014-Bytebuf-API.patch +++ b/leaves-server/paper-patches/features/0014-Bytebuf-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bytebuf API diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 9668eeb821075abee8da35d849090d4f5ba75cae..d0639618ff9c179aaa8d591f7c1b9251f8a5a93d 100644 +index af648b9301a7a964af88a55e181b68780a9f4ca5..09a9c062a0ad15df3896fba161bdfb17d34181ba 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -317,6 +317,7 @@ public final class CraftServer implements Server { @@ -16,7 +16,7 @@ index 9668eeb821075abee8da35d849090d4f5ba75cae..d0639618ff9c179aaa8d591f7c1b9251 // Paper start - Folia region threading API private final io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler regionizedScheduler = new io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler(); -@@ -3316,4 +3317,15 @@ public final class CraftServer implements Server { +@@ -3311,4 +3312,15 @@ public final class CraftServer implements Server { return photographerManager; } // Leaves end - replay mod api diff --git a/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java b/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java index 9563291d..7f8eb1ca 100644 --- a/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java +++ b/leaves-server/src/main/java/org/leavesmc/leaves/LeavesConfig.java @@ -619,9 +619,6 @@ public final class LeavesConfig { @GlobalConfig("cache-climb-check") public boolean cacheClimbCheck = true; - @GlobalConfig(value = "biome-temperatures-use-aging-cache", lock = true) - public boolean biomeTemperaturesUseAgingCache = true; - @GlobalConfig("reduce-chuck-load-and-lookup") public boolean reduceChuckLoadAndLookup = true; @@ -661,6 +658,7 @@ public final class LeavesConfig { @GlobalConfig("fix-villagers-dont-release-memory") public boolean villagersDontReleaseMemoryFix = false; + @RemovedConfig(name = "biome-temperatures-use-aging-cache", category = "performance") @RemovedConfig(name = "cache-world-generator-sea-level", category = "performance") @RemovedConfig(name = "cache-ominous-banner-item", category = "performance") @RemovedConfig(name = "use-optimized-collection", category = "performance") diff --git a/patches/unapplied/server/0030-Use-aging-cache-for-biome-temperatures.patch b/patches/removed/server/0030-Use-aging-cache-for-biome-temperatures.patch similarity index 100% rename from patches/unapplied/server/0030-Use-aging-cache-for-biome-temperatures.patch rename to patches/removed/server/0030-Use-aging-cache-for-biome-temperatures.patch