9
0
mirror of https://github.com/LeavesMC/Leaves.git synced 2025-12-19 14:59:32 +00:00

Update Paper

This commit is contained in:
violetc
2025-03-18 15:08:19 +08:00
parent 4795c85163
commit cfcfb4e521
8 changed files with 223 additions and 17 deletions

View File

@@ -1,3 +1,7 @@
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
import java.util.Locale
plugins { plugins {
java java
id("org.leavesmc.leavesweight.patcher") version "2.0.0-SNAPSHOT" id("org.leavesmc.leavesweight.patcher") version "2.0.0-SNAPSHOT"
@@ -73,4 +77,189 @@ paperweight {
outputDir = file("paper-api") outputDir = file("paper-api")
} }
} }
}
val patchTasks = listOf(
"::applyPaperApiPatches" to "::rebuildPaperApiPatches",
"::applyPaperSingleFilePatches" to "::rebuildPaperSingleFilePatches",
":leaves-server:applyMinecraftPatches" to ":leaves-server:rebuildMinecraftPatches",
":leaves-server:applyPaperServerPatches" to ":leaves-server:rebuildPaperServerPatches"
)
val statusFile = layout.buildDirectory.file("patchTaskStatus.json").get().asFile
fun readTaskStatus(): Map<String, String> {
if (!statusFile.exists()) {
return emptyMap()
}
try {
@Suppress("UNCHECKED_CAST")
return JsonSlurper().parse(statusFile) as Map<String, String>
} catch (_: Exception) {
return emptyMap()
}
}
fun writeTaskStatus(status: Map<String, String>) {
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"
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 process = processBuilder.start()
val outputThread = Thread {
process.inputStream.bufferedReader().use { reader ->
var line: String?
while (reader.readLine().also { line = it } != null) {
println(line)
}
}
}
val errorThread = Thread {
process.errorStream.bufferedReader().use { reader ->
var line: String?
while (reader.readLine().also { line = it } != null) {
System.err.println(line)
}
}
}
outputThread.start()
errorThread.start()
val exitCode = process.waitFor()
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
}
}
tasks.register("applyAllPatchesSequentially") {
group = "leaves"
description = "Apply all patches sequentially, run rebuild after success, wait for manual fix if failed"
doFirst {
println("🚀 Starting sequential patch application...")
}
doLast {
val taskStatus = readTaskStatus().toMutableMap()
var currentIndex = 0
while (currentIndex < patchTasks.size) {
val (applyTaskPath, rebuildTaskPath) = patchTasks[currentIndex]
if (taskStatus[applyTaskPath] == "COMPLETED") {
println("⏩ Skipping completed task: $applyTaskPath")
currentIndex++
continue
}
if (taskStatus[applyTaskPath] == "FAILED") {
println("⚠️ Detected previous failure of $applyTaskPath, running $rebuildTaskPath first")
try {
executeTask(rebuildTaskPath)
println("✅ $rebuildTaskPath completed successfully")
} catch (e: Exception) {
taskStatus[applyTaskPath] = "FAILED"
writeTaskStatus(taskStatus)
throw GradleException("$rebuildTaskPath failed: ${e.message}", e)
}
}
println("🔄 Running $applyTaskPath...")
try {
executeTask(applyTaskPath)
println("✅ $applyTaskPath completed successfully")
println("🔄 Running $rebuildTaskPath after successful apply...")
try {
executeTask(rebuildTaskPath)
println("✅ $rebuildTaskPath completed successfully")
} catch (e: Exception) {
println("⚠️ $rebuildTaskPath failed, but continuing with next tasks: ${e.message}")
}
taskStatus[applyTaskPath] = "COMPLETED"
writeTaskStatus(taskStatus)
currentIndex++
} catch (e: Exception) {
taskStatus[applyTaskPath] = "FAILED"
writeTaskStatus(taskStatus)
throw GradleException("$applyTaskPath failed, please fix the issues and run this task again", e)
}
}
if (currentIndex >= patchTasks.size) {
tasks.named("resetPatchTaskStatus").get().actions.forEach { it.execute(tasks.named("resetPatchTaskStatus").get()) }
println("✨ All patch tasks completed successfully!")
}
}
}
tasks.register("resetPatchTaskStatus") {
group = "leaves"
description = "Reset the status of all patch tasks"
doLast {
if (statusFile.exists()) {
statusFile.delete()
println("🧹 All patch task statuses have been reset")
}
}
}
tasks.register("showPatchTaskStatus") {
group = "leaves"
description = "Show the current status of all patch tasks"
doLast {
val status = readTaskStatus()
println("📊 Patch Task Status:")
if (status.isEmpty()) {
println(" No tasks executed yet or status has been reset")
} else {
patchTasks.forEach { (applyTask, _) ->
val taskStatus = status[applyTask] ?: "PENDING"
val statusIcon = when (taskStatus) {
"COMPLETED" -> "✅"
"FAILED" -> "❌"
else -> "⏳"
}
println(" $statusIcon $applyTask: $taskStatus")
}
}
}
} }

View File

@@ -1,7 +1,7 @@
group=org.leavesmc.leaves group=org.leavesmc.leaves
version=1.21.4-R0.1-SNAPSHOT version=1.21.4-R0.1-SNAPSHOT
mcVersion=1.21.4 mcVersion=1.21.4
paperRef=6ea42025a49f232f47861c6ca943b0fc66b7effe paperRef=bb1beda67bfd94632815acc8ac5d68f5a8e3e410
preVersion=true preVersion=true
org.gradle.jvmargs=-Xmx2G org.gradle.jvmargs=-Xmx2G
org.gradle.caching=true org.gradle.caching=true

View File

@@ -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 diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index a371da9d1d9d1b6cb266db58b9f74a09dc858d2c..a5b316601b433544b604455dc1c8079bf478b43e 100644 index db47fe6560e1b0c737889698cf52c5c3fb06185f..699c71f6749352aaf8cb82a51a82f86c3a8d3abc 100644
--- a/src/main/java/org/bukkit/Bukkit.java --- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2995,4 +2995,15 @@ public final class Bukkit { @@ -2998,4 +2998,15 @@ public final class Bukkit {
public static void restart() { public static void restart() {
server.restart(); server.restart();
} }
@@ -25,7 +25,7 @@ index a371da9d1d9d1b6cb266db58b9f74a09dc858d2c..a5b316601b433544b604455dc1c8079b
+ // Leaves end - Bot API + // Leaves end - Bot API
} }
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index d7ebfcfc6a41b7e94a041f7faf3c2d8090fab3c4..cc7c894572652b86b0069325e28f8e73f7a66f01 100644 index 2eb72a31cc36a41694654da15be5a1f4983aa1bd..68c45204d1d6b8c33ab47a2414158fc273873414 100644
--- a/src/main/java/org/bukkit/Server.java --- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java
@@ -66,6 +66,7 @@ import org.jetbrains.annotations.ApiStatus; @@ -66,6 +66,7 @@ import org.jetbrains.annotations.ApiStatus;
@@ -36,7 +36,7 @@ index d7ebfcfc6a41b7e94a041f7faf3c2d8090fab3c4..cc7c894572652b86b0069325e28f8e73
/** /**
* Represents a server implementation. * Represents a server implementation.
@@ -2698,4 +2699,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -2696,4 +2697,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/ */
void allowPausing(@NotNull org.bukkit.plugin.Plugin plugin, boolean value); void allowPausing(@NotNull org.bukkit.plugin.Plugin plugin, boolean value);
// Paper end - API to check if the server is sleeping // Paper end - API to check if the server is sleeping

View File

@@ -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 diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index a5b316601b433544b604455dc1c8079bf478b43e..b73c009ece3af3daf8251adb7502ee9c8ad103c4 100644 index 699c71f6749352aaf8cb82a51a82f86c3a8d3abc..8018a4e88c9392fd68c3bd03f13e7443e6a3966d 100644
--- a/src/main/java/org/bukkit/Bukkit.java --- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java
@@ -3006,4 +3006,10 @@ public final class Bukkit { @@ -3009,4 +3009,10 @@ public final class Bukkit {
return server.getBotManager(); return server.getBotManager();
} }
// Leaves end - Bot API // Leaves end - Bot API
@@ -20,7 +20,7 @@ index a5b316601b433544b604455dc1c8079bf478b43e..b73c009ece3af3daf8251adb7502ee9c
+ // Leaves end - Photographer API + // Leaves end - Photographer API
} }
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index cc7c894572652b86b0069325e28f8e73f7a66f01..632d510f4ae42c5bbb00320b517659c857ccded7 100644 index 68c45204d1d6b8c33ab47a2414158fc273873414..f1519b243b676017185308145fe972702073c222 100644
--- a/src/main/java/org/bukkit/Server.java --- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java
@@ -67,6 +67,7 @@ import org.jetbrains.annotations.Contract; @@ -67,6 +67,7 @@ import org.jetbrains.annotations.Contract;
@@ -31,7 +31,7 @@ index cc7c894572652b86b0069325e28f8e73f7a66f01..632d510f4ae42c5bbb00320b517659c8
/** /**
* Represents a server implementation. * Represents a server implementation.
@@ -2708,4 +2709,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -2706,4 +2707,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/ */
@NotNull BotManager getBotManager(); @NotNull BotManager getBotManager();
// Leaves end - Bot API // Leaves end - Bot API

View File

@@ -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 diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index b73c009ece3af3daf8251adb7502ee9c8ad103c4..dfc3da5eef1b8c11c5deef3853e47a7f685f0d46 100644 index 8018a4e88c9392fd68c3bd03f13e7443e6a3966d..1d347aefb56dcd5c9bcc21f2d8bc4a884ba488fa 100644
--- a/src/main/java/org/bukkit/Bukkit.java --- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java
@@ -3012,4 +3012,10 @@ public final class Bukkit { @@ -3015,4 +3015,10 @@ public final class Bukkit {
return server.getPhotographerManager(); return server.getPhotographerManager();
} }
// Leaves end - Photographer API // Leaves end - Photographer API
@@ -20,10 +20,10 @@ index b73c009ece3af3daf8251adb7502ee9c8ad103c4..dfc3da5eef1b8c11c5deef3853e47a7f
+ // Leaves end - Bytebuf API + // Leaves end - Bytebuf API
} }
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index 632d510f4ae42c5bbb00320b517659c857ccded7..ef91d117defb23b27a8ca01551753716dc24d184 100644 index f1519b243b676017185308145fe972702073c222..a3f895426062c97cba925c845404dbfe732e6cc8 100644
--- a/src/main/java/org/bukkit/Server.java --- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java
@@ -2713,4 +2713,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -2711,4 +2711,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
// Leaves start - Photographer API // Leaves start - Photographer API
@NotNull PhotographerManager getPhotographerManager(); @NotNull PhotographerManager getPhotographerManager();
// Leaves end - Photographer API // Leaves end - Photographer API
@@ -33,7 +33,7 @@ index 632d510f4ae42c5bbb00320b517659c857ccded7..ef91d117defb23b27a8ca01551753716
+ // Leaves end - Bytebuf API + // Leaves end - Bytebuf API
} }
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index 69f982d1dbffa256b65c32292805320452a9842f..9041dbf1aaa0a8f548b3122817cf6ef3b9c56ba2 100644 index 494dca2ee48a03953d47050b178496df12bc48c5..b429eb9a0326460a8841a1cfdfd6cd13c02ec2b7 100644
--- a/src/main/java/org/bukkit/entity/Player.java --- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java
@@ -3853,6 +3853,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @@ -3853,6 +3853,12 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM

View File

@@ -78,7 +78,7 @@ public class ServerBot extends ServerPlayer {
public UUID createPlayer; public UUID createPlayer;
private final int tracingRange; private final int tracingRange;
private final ServerStatsCounter stats; private final BotStatsCounter stats;
private final BotInventoryContainer container; private final BotInventoryContainer container;
public int notSleepTicks; public int notSleepTicks;

View File

@@ -13,7 +13,7 @@ import java.util.List;
public class TickTypeConfig extends AbstractBotConfig<ServerBot.TickType> { public class TickTypeConfig extends AbstractBotConfig<ServerBot.TickType> {
private static final String NAME = "tick_type"; private static final String NAME = "tick_type";
private static final CommandArgumentType<ServerBot.TickType> TICK_TYPE_ARGUMENT = CommandArgumentType.of(ServerBot.TickType.class, (string -> ServerBot.TickType.valueOf(string.toUpperCase()))); private static final CommandArgumentType<ServerBot.TickType> TICK_TYPE_ARGUMENT = CommandArgumentType.ofEnum(ServerBot.TickType.class);
private ServerBot.TickType value; private ServerBot.TickType value;

View File

@@ -7,10 +7,10 @@ import java.util.function.Function;
public abstract class CommandArgumentType<E> { public abstract class CommandArgumentType<E> {
public static final CommandArgumentType<String> STRING = CommandArgumentType.string();
public static final CommandArgumentType<Integer> INTEGER = CommandArgumentType.of(Integer.class, Integer::parseInt); public static final CommandArgumentType<Integer> INTEGER = CommandArgumentType.of(Integer.class, Integer::parseInt);
public static final CommandArgumentType<Double> DOUBLE = CommandArgumentType.of(Double.class, Double::parseDouble); public static final CommandArgumentType<Double> DOUBLE = CommandArgumentType.of(Double.class, Double::parseDouble);
public static final CommandArgumentType<Float> FLOAT = CommandArgumentType.of(Float.class, Float::parseFloat); public static final CommandArgumentType<Float> FLOAT = CommandArgumentType.of(Float.class, Float::parseFloat);
public static final CommandArgumentType<String> STRING = CommandArgumentType.of(String.class, (arg) -> arg);
public static final CommandArgumentType<Boolean> BOOLEAN = CommandArgumentType.of(Boolean.class, Boolean::parseBoolean); public static final CommandArgumentType<Boolean> BOOLEAN = CommandArgumentType.of(Boolean.class, Boolean::parseBoolean);
private final Class<E> type; private final Class<E> type;
@@ -34,6 +34,23 @@ public abstract class CommandArgumentType<E> {
}; };
} }
@NotNull
@Contract(value = "_ -> new", pure = true)
public static <E extends Enum<E>> CommandArgumentType<E> ofEnum(Class<E> type) {
return of(type, (string -> Enum.valueOf(type, string.toUpperCase())));
}
@NotNull
@Contract(value = " -> new", pure = true)
private static CommandArgumentType<String> string() {
return new CommandArgumentType<>(String.class) {
@Override
public String parse(@NotNull String arg) {
return arg;
}
};
}
public Class<E> getType() { public Class<E> getType() {
return type; return type;
} }