d8e07590e3
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 5dbedae1 PR-864: Fix Registry#match() failing namespaced inputs 49256865 PR-863: Fix boolean PersistentDataType 9f15450b SPIGOT-7195, SPIGOT-7197: Add DataPack API ebef5b6a Disable InterfaceIsType Checkstyle check 01d577f5 Slight tweak to boolean PersistentDataType javadoc d2b99e56 PR-857: Add boolean PersistentDataType CraftBukkit Changes: 2270366cd PR-1196: Test Registry instances more thoroughly 863dacb7a PR-1191: Do not start on pre-release Java 17 1f2dd8e12 SPIGOT-7362: Properly handle null in CraftBlock#blockFaceToNotch() dbc70bed5 SPIGOT-7195, SPIGOT-7197: Add DataPack API
102 Zeilen
5.0 KiB
Diff
102 Zeilen
5.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Professor Bloodstone <git@bloodstone.dev>
|
|
Date: Sun, 20 Jun 2021 01:48:31 +0200
|
|
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..909617079db61b675cc7b60b44ef96b306076343
|
|
--- /dev/null
|
|
+++ b/src/main/java/io/papermc/paper/util/JarManifests.java
|
|
@@ -0,0 +1,37 @@
|
|
+package io.papermc.paper.util;
|
|
+
|
|
+import java.io.IOException;
|
|
+import java.io.InputStream;
|
|
+import java.net.URL;
|
|
+import java.util.Collections;
|
|
+import java.util.Map;
|
|
+import java.util.WeakHashMap;
|
|
+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 {
|
|
+ private JarManifests() {
|
|
+ }
|
|
+
|
|
+ private static final Map<ClassLoader, Manifest> MANIFESTS = Collections.synchronizedMap(new WeakHashMap<>());
|
|
+
|
|
+ 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) {
|
|
+ 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) {
|
|
+ return null;
|
|
+ }
|
|
+ });
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
|
|
index 7113f38eac400bc86a427972e501b0ca5653dae6..733b537d4236e5cb06efc188183ad876db31c0ff 100644
|
|
--- a/src/main/java/org/bukkit/Bukkit.java
|
|
+++ b/src/main/java/org/bukkit/Bukkit.java
|
|
@@ -55,6 +55,7 @@ import org.bukkit.util.CachedServerIcon;
|
|
import org.jetbrains.annotations.Contract;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
+import io.papermc.paper.util.JarManifests; // Paper
|
|
|
|
/**
|
|
* Represents the Bukkit core, for version and Server singleton handling
|
|
@@ -104,7 +105,25 @@ public final class Bukkit {
|
|
}
|
|
|
|
Bukkit.server = server;
|
|
- server.getLogger().info("This server is running " + getName() + " version " + getVersion() + " (Implementing API version " + getBukkitVersion() + ")");
|
|
+ // Paper start - add git information
|
|
+ server.getLogger().info(getVersionMessage());
|
|
+ }
|
|
+ /**
|
|
+ * Gets message describing the version server is running.
|
|
+ *
|
|
+ * @return message describing the version server is running
|
|
+ */
|
|
+ @NotNull
|
|
+ public static String getVersionMessage() {
|
|
+ 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
|
|
+ }
|
|
+ return "This server is running " + getName() + " version " + getVersion() + " (Implementing API version " + getBukkitVersion() + ") (Git: " + gitCommit + branchMsg + ")";
|
|
+ // Paper end
|
|
}
|
|
|
|
/**
|
|
diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java
|
|
index b50f614806f4634960d383e8a33f094c2f46935f..e40f017f87d6b6b4770501b106c76dc69ec69abb 100644
|
|
--- a/src/main/java/org/bukkit/command/defaults/VersionCommand.java
|
|
+++ b/src/main/java/org/bukkit/command/defaults/VersionCommand.java
|
|
@@ -240,7 +240,7 @@ public class VersionCommand extends BukkitCommand {
|
|
private void setVersionMessage(final @NotNull net.kyori.adventure.text.Component msg) {
|
|
lastCheck = System.currentTimeMillis();
|
|
final net.kyori.adventure.text.Component message = net.kyori.adventure.text.TextComponent.ofChildren(
|
|
- net.kyori.adventure.text.Component.text("This server is running " + Bukkit.getName() + " version " + Bukkit.getVersion() + " (Implementing API version " + Bukkit.getBukkitVersion() + ")", net.kyori.adventure.text.format.NamedTextColor.WHITE),
|
|
+ net.kyori.adventure.text.Component.text(Bukkit.getVersionMessage(), net.kyori.adventure.text.format.NamedTextColor.WHITE),
|
|
net.kyori.adventure.text.Component.newline(),
|
|
msg
|
|
);
|