Skip to content

Commit

Permalink
a
Browse files Browse the repository at this point in the history
  • Loading branch information
kashike committed May 15, 2024
1 parent 432d27e commit 1f3499d
Show file tree
Hide file tree
Showing 2 changed files with 331 additions and 0 deletions.
70 changes: 70 additions & 0 deletions patches/api/0480-Versioning.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Riley Park <rileysebastianpark@gmail.com>
Date: Tue, 14 May 2024 21:38:49 -0700
Subject: [PATCH] Versioning


diff --git a/src/main/java/io/papermc/paper/VersionInfo.java b/src/main/java/io/papermc/paper/VersionInfo.java
new file mode 100644
index 0000000000000000000000000000000000000000..653aa637bc863c8389c4198960795b18e5f1fb69
--- /dev/null
+++ b/src/main/java/io/papermc/paper/VersionInfo.java
@@ -0,0 +1,36 @@
+package io.papermc.paper;
+
+import java.time.Instant;
+import java.util.OptionalInt;
+import net.kyori.adventure.util.Services;
+import org.jetbrains.annotations.ApiStatus.NonExtendable;
+import org.jetbrains.annotations.Nullable;
+
+@NonExtendable
+public interface VersionInfo {
+ static VersionInfo get() {
+ final class Holder {
+ static final VersionInfo INSTANCE = Services.service(VersionInfo.class).orElseThrow();
+ }
+ return Holder.INSTANCE;
+ }
+
+ String brand();
+
+ String minecraftVersion();
+
+ OptionalInt buildNumber();
+
+ Instant buildTime();
+
+ @Nullable String gitBranch();
+
+ @Nullable String gitCommit();
+
+ String toString(final StringRepresentation representation);
+
+ enum StringRepresentation {
+ SIMPLE,
+ FULL,
+ }
+}
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index 5d1b55fdbcbe63f6b42b694d05211a3cc691a09d..d45e075891a0dc06581982ff5d408407fd7f7c5f 100644
--- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java
@@ -120,14 +120,9 @@ public final class Bukkit {
*/
@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 + ")";
+ final io.papermc.paper.VersionInfo version = io.papermc.paper.VersionInfo.get();
+ return "This server is running " + getName() + " version " + version.toString(io.papermc.paper.VersionInfo.StringRepresentation.FULL) + " (Implementing API version " + getBukkitVersion() + ")";
+ //return "This server is running " + getName() + " version " + getVersion() + " (Implementing API version " + getBukkitVersion() + ") (Git: " + gitCommit + branchMsg + ")";
// Paper end
}

261 changes: 261 additions & 0 deletions patches/server/1051-a.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,261 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Riley Park <rileysebastianpark@gmail.com>
Date: Tue, 14 May 2024 21:39:23 -0700
Subject: [PATCH] a


diff --git a/build.gradle.kts b/build.gradle.kts
index 390d333ab83e33f5ea690bbd489706c9495966d0..47cbf3c21ecaa16a1114f3ad2babe86e695c6bc0 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,4 +1,5 @@
import io.papermc.paperweight.util.*
+import java.time.Instant

plugins {
java
@@ -85,6 +86,8 @@ tasks.jar {
"Specification-Title" to "Paper",
"Specification-Version" to project.version,
"Specification-Vendor" to "Paper Team",
+ "Build-Number" to build,
+ "Build-Time" to Instant.now().toString(),
"Git-Branch" to gitBranch, // Paper
"Git-Commit" to gitHash, // Paper
"CraftBukkit-Package-Version" to paperweight.craftBukkitPackageVersion.get(), // Paper
diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
index 2830dd59ea26ba060416cfeb3f07af45af5041a8..e9e7d90aecf4a9f7c15b44d37cd844e883ebc717 100644
--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
+++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
@@ -9,6 +9,7 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSyntaxException;
import com.mojang.logging.LogUtils;
+import io.papermc.paper.VersionInfo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
@@ -42,25 +43,25 @@ public class PaperVersionFetcher implements VersionFetcher {
@Override
public Component getVersionMessage(final String serverVersion) {
final Component updateMessage;
- if (serverVersion.startsWith("DEV-")) {
+ final VersionInfo info = VersionInfo.get();
+ if (info.buildNumber().isEmpty() && info.gitCommit() == null) {
updateMessage = text("You are running a development version without access to version information", color(0xFF5300));
} else {
- final String[] parts = serverVersion.split("-"); // parts[1] should be build# or git index
- updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[1]);
+ updateMessage = getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, info);
}
final @Nullable Component history = this.getHistory();

return history != null ? Component.textOfChildren(updateMessage, Component.newline(), history) : updateMessage;
}

- private static Component getUpdateStatusMessage(final String repo, final String branch, String versionInfo) {
+ private static Component getUpdateStatusMessage(final String repo, final String branch, VersionInfo versionInfo) {
int distance;
- try {
- final int tcBuild = Integer.parseInt(versionInfo);
- distance = fetchDistanceFromSiteApi(tcBuild);
- } catch (final NumberFormatException ignored) {
- versionInfo = versionInfo.replace("\"", "");
- distance = fetchDistanceFromGitHub(repo, branch, versionInfo);
+ if (versionInfo.buildNumber().isPresent()) {
+ distance = fetchDistanceFromSiteApi(versionInfo.buildNumber().getAsInt());
+ } else if (versionInfo.gitCommit() != null) {
+ distance = fetchDistanceFromGitHub(repo, branch, versionInfo.gitCommit());
+ } else {
+ distance = -1;
}

return switch (distance) {
diff --git a/src/main/java/io/papermc/paper/VersionInfoImpl.java b/src/main/java/io/papermc/paper/VersionInfoImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a1c964b6d76c8f7269145f44f1d407aadc1aa9a
--- /dev/null
+++ b/src/main/java/io/papermc/paper/VersionInfoImpl.java
@@ -0,0 +1,80 @@
+package io.papermc.paper;
+
+import com.google.common.base.Strings;
+import io.papermc.paper.util.JarManifests;
+import java.time.Instant;
+import java.util.Optional;
+import java.util.OptionalInt;
+import java.util.jar.Manifest;
+import net.minecraft.SharedConstants;
+import org.bukkit.craftbukkit.CraftServer;
+import org.jetbrains.annotations.Nullable;
+
+public record VersionInfoImpl(
+ String brand,
+ String minecraftVersion,
+ OptionalInt buildNumber,
+ Instant buildTime,
+ @Nullable String gitBranch,
+ @Nullable String gitCommit
+) implements VersionInfo {
+ private static final String ATTRIBUTE_BRAND = "Implementation-Title";
+ private static final String ATTRIBUTE_BUILD_TIME = "Build-Time";
+ private static final String ATTRIBUTE_BUILD_NUMBER = "Build-Number";
+ private static final String ATTRIBUTE_GIT_BRANCH = "Git-Branch";
+ private static final String ATTRIBUTE_GIT_COMMIT = "Git-Commit";
+
+ public static final String DEFAULT_BRAND = "Paper";
+
+ private static final String BUILD_DEV = "DEV";
+
+ public VersionInfoImpl() {
+ this(
+ getManifestAttribute(ATTRIBUTE_BRAND).orElse(DEFAULT_BRAND),
+ SharedConstants.getCurrentVersion().getName(),
+ getManifestAttribute(ATTRIBUTE_BUILD_NUMBER).map(Integer::parseInt).map(OptionalInt::of).orElse(OptionalInt.empty()),
+ getManifestAttribute(ATTRIBUTE_BUILD_TIME).map(Instant::parse).orElseGet(Instant::now),
+ getManifestAttribute(ATTRIBUTE_GIT_BRANCH).orElse(null),
+ getManifestAttribute(ATTRIBUTE_GIT_COMMIT).orElse(null)
+ );
+ }
+
+ @Override
+ public String toString(final StringRepresentation representation) {
+ final StringBuilder sb = new StringBuilder();
+ sb.append(this.minecraftVersion);
+ sb.append('-');
+ if (this.buildNumber.isPresent()) {
+ sb.append(this.buildNumber.getAsInt());
+ } else {
+ sb.append(BUILD_DEV);
+ }
+ if (this.gitBranch != null && representation == StringRepresentation.FULL) {
+ sb.append('-');
+ sb.append(this.gitBranch);
+ if (this.gitCommit != null) {
+ sb.append('@');
+ }
+ } else {
+ if (this.gitCommit != null) {
+ sb.append('-');
+ }
+ }
+ if (this.gitCommit != null) {
+ sb.append(this.gitCommit);
+ }
+ if (representation == StringRepresentation.FULL) {
+ sb.append(' ');
+ sb.append('(');
+ sb.append(this.buildTime);
+ sb.append(')');
+ }
+ return sb.toString();
+ }
+
+ private static Optional<String> getManifestAttribute(final String name) {
+ final Manifest manifest = JarManifests.manifest(CraftServer.class);
+ final String value = manifest != null ? manifest.getMainAttributes().getValue(name) : null;
+ return Optional.ofNullable(Strings.emptyToNull(value));
+ }
+}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 39303bb4e336732db0ab19dee0c1f8b609bbb134..1004aa270f254c015f4f01bd979c6299002f60e7 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -3,9 +3,6 @@ package net.minecraft.server;
import com.google.common.base.Preconditions;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
-import co.aikar.timings.Timings;
-import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
-import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -46,7 +43,6 @@ import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
-import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BooleanSupplier;
import java.util.function.Consumer;
@@ -188,8 +184,6 @@ import net.minecraft.world.phys.Vec2;
import net.minecraft.world.phys.Vec3;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.CraftRegistry;
-import org.bukkit.craftbukkit.CraftServer;
-import org.bukkit.craftbukkit.Main;
import org.bukkit.event.server.ServerLoadEvent;
// CraftBukkit end

@@ -1926,7 +1920,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa

@DontObfuscate
public String getServerModName() {
- return "Paper"; // Paper
+ return io.papermc.paper.VersionInfo.get().brand(); // Paper
}

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 3e204bcfd2cdd7af89cc3daef986539754848d3c..ac63f3de6b6a2a4f0b6a5c20fd91702102b03dee 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -10,8 +10,6 @@ import com.google.common.collect.MapMaker;
import com.mojang.authlib.GameProfile;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
-import com.mojang.brigadier.tree.CommandNode;
-import com.mojang.brigadier.tree.LiteralCommandNode;
import com.mojang.serialization.Dynamic;
import com.mojang.serialization.Lifecycle;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
@@ -26,7 +24,6 @@ import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
@@ -153,7 +150,6 @@ import org.bukkit.craftbukkit.ban.CraftProfileBanList;
import org.bukkit.craftbukkit.block.data.CraftBlockData;
import org.bukkit.craftbukkit.boss.CraftBossBar;
import org.bukkit.craftbukkit.boss.CraftKeyedBossbar;
-import org.bukkit.craftbukkit.command.BukkitCommandWrapper;
import org.bukkit.craftbukkit.command.CraftCommandMap;
import org.bukkit.craftbukkit.command.VanillaCommandWrapper;
import org.bukkit.craftbukkit.entity.CraftEntityFactory;
@@ -249,7 +245,6 @@ import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.ServicesManager;
import org.bukkit.plugin.SimplePluginManager;
import org.bukkit.plugin.SimpleServicesManager;
-import org.bukkit.plugin.java.JavaPluginLoader;
import org.bukkit.plugin.messaging.Messenger;
import org.bukkit.plugin.messaging.StandardMessenger;
import org.bukkit.profile.PlayerProfile;
@@ -269,7 +264,7 @@ import javax.annotation.Nullable; // Paper
import javax.annotation.Nonnull; // Paper

public final class CraftServer implements Server {
- private final String serverName = "Paper"; // Paper
+ private final String serverName = io.papermc.paper.VersionInfoImpl.DEFAULT_BRAND; // Paper
private final String serverVersion;
private final String bukkitVersion = Versioning.getBukkitVersion();
private final Logger logger = Logger.getLogger("Minecraft");
@@ -398,7 +393,7 @@ public final class CraftServer implements Server {
return player.getBukkitEntity();
}
}));
- this.serverVersion = java.util.Objects.requireNonNullElseGet(CraftServer.class.getPackage().getImplementationVersion(), () -> "DEV-" + java.time.OffsetDateTime.now()); // Paper - improve version
+ this.serverVersion = io.papermc.paper.VersionInfo.get().toString(io.papermc.paper.VersionInfo.StringRepresentation.SIMPLE); // Paper - improve version
this.structureManager = new CraftStructureManager(console.getStructureManager(), console.registryAccess());
this.dataPackManager = new CraftDataPackManager(this.getServer().getPackRepository());
this.serverTickManager = new CraftServerTickManager(console.tickRateManager());
diff --git a/src/main/resources/META-INF/services/io.papermc.paper.VersionInfo b/src/main/resources/META-INF/services/io.papermc.paper.VersionInfo
new file mode 100644
index 0000000000000000000000000000000000000000..4dcec912b25eb03e9be514b0ea657c54e2edb5ab
--- /dev/null
+++ b/src/main/resources/META-INF/services/io.papermc.paper.VersionInfo
@@ -0,0 +1 @@
+io.papermc.paper.VersionInfoImpl

0 comments on commit 1f3499d

Please sign in to comment.