diff --git a/patches/api/0315-Add-Git-information-to-version-command-on-startup.patch b/patches/api/0315-Add-Git-information-to-version-command-on-startup.patch index 82c37a610f..1ffb550288 100644 --- a/patches/api/0315-Add-Git-information-to-version-command-on-startup.patch +++ b/patches/api/0315-Add-Git-information-to-version-command-on-startup.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Add Git information to version command/on startup diff --git a/src/main/java/io/papermc/paper/util/JarManifests.java b/src/main/java/io/papermc/paper/util/JarManifests.java new file mode 100644 -index 0000000000000000000000000000000000000000..2a49f4198b07b3ecdc320c330c58eab2f15c5c74 +index 0000000000000000000000000000000000000000..909617079db61b675cc7b60b44ef96b306076343 --- /dev/null +++ b/src/main/java/io/papermc/paper/util/JarManifests.java -@@ -0,0 +1,36 @@ +@@ -0,0 +1,37 @@ +package io.papermc.paper.util; + +import java.io.IOException; @@ -21,6 +21,7 @@ index 0000000000000000000000000000000000000000..2a49f4198b07b3ecdc320c330c58eab2 +import java.util.jar.Manifest; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; + +@ApiStatus.Internal +public final class JarManifests { @@ -29,25 +30,25 @@ index 0000000000000000000000000000000000000000..2a49f4198b07b3ecdc320c330c58eab2 + + private static final Map<ClassLoader, Manifest> MANIFESTS = Collections.synchronizedMap(new WeakHashMap<>()); + -+ public static @NotNull Manifest manifest(final @NotNull Class<?> clazz) { ++ public static @Nullable Manifest manifest(final @NotNull Class<?> clazz) { + return MANIFESTS.computeIfAbsent(clazz.getClassLoader(), classLoader -> { + final String classLocation = "/" + clazz.getName().replace(".", "/") + ".class"; + final URL resource = clazz.getResource(classLocation); + if (resource == null) { -+ throw new IllegalStateException("Could not find class file for loaded class: " + clazz.getName()); ++ return null; + } + final String classFilePath = resource.toString().replace("\\", "/"); + final String archivePath = classFilePath.substring(0, classFilePath.length() - classLocation.length()); + try (final InputStream stream = new URL(archivePath + "/META-INF/MANIFEST.MF").openStream()) { + return new Manifest(stream); + } catch (final IOException ex) { -+ throw new RuntimeException("Failed to locate or read manifest", ex); ++ return null; + } + }); + } +} diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 0521781a48d326c0a4a01b920188e9ce00b51ef0..7bbeed0c0514d5da243e205a78f82116b464acd1 100644 +index 0521781a48d326c0a4a01b920188e9ce00b51ef0..eb0aa2a2a9def0270341ee15d8a7a0629a67a823 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -51,6 +51,7 @@ import org.bukkit.util.CachedServerIcon; @@ -58,7 +59,7 @@ index 0521781a48d326c0a4a01b920188e9ce00b51ef0..7bbeed0c0514d5da243e205a78f82116 /** * Represents the Bukkit core, for version and Server singleton handling -@@ -100,7 +101,30 @@ public final class Bukkit { +@@ -100,7 +101,25 @@ public final class Bukkit { } Bukkit.server = server; @@ -73,14 +74,9 @@ index 0521781a48d326c0a4a01b920188e9ce00b51ef0..7bbeed0c0514d5da243e205a78f82116 + */ + @NotNull + public static String getVersionMessage() { -+ final java.util.jar.Manifest manifest; -+ if (java.lang.reflect.Proxy.isProxyClass(Bukkit.getServer().getClass())) { // TestServer -+ manifest = new java.util.jar.Manifest(); -+ } else { -+ manifest = JarManifests.manifest(Bukkit.getServer().getClass()); -+ } -+ final String gitBranch = manifest.getMainAttributes().getValue("Git-Branch"); -+ final String gitCommit = manifest.getMainAttributes().getValue("Git-Commit"); ++ final var manifest = JarManifests.manifest(Bukkit.getServer().getClass()); ++ final String gitBranch = manifest == null ? null : manifest.getMainAttributes().getValue("Git-Branch"); ++ final String gitCommit = manifest == null ? null : manifest.getMainAttributes().getValue("Git-Commit"); + String branchMsg = " on " + gitBranch; + if ("master".equals(gitBranch) || "main".equals(gitBranch)) { + branchMsg = ""; // Don't show branch on main/master