55b3a09dde
Upstream has released updates that appears 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: d0800d0c Update checkstyle e4e4bf70 Remove package-info from tests, breaks some IDEs d6651bb0 No longer necessary to synchronize sync events CraftBukkit Changes: e82b5477 SPIGOT-5556: Some biome methods use incorrect positions 544ccdc5 Update checkstyle 512ff7a5 Print legacy load reason in debug mode df371c1b SPIGOT-5554: Clear error message when BossBar is used for not fully joined players 18168500 Update scriptus 6bbb4e73 Clean up CraftBlockData.toString b1e96bd5 SPIGOT-5551: BlockState.setData fails when used by legacy plugin Spigot Changes: b9baf717 Add space before ocean seed output 13394884 Rebuild patches
146 lines
6 KiB
Diff
146 lines
6 KiB
Diff
From 60efe5ffc66ebc870d9090bdf9c0cf51e0545a37 Mon Sep 17 00:00:00 2001
|
|
From: Zach Brown <zach@zachbr.io>
|
|
Date: Mon, 27 May 2019 03:40:05 -0500
|
|
Subject: [PATCH] Implement Paper VersionChecker
|
|
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
|
|
new file mode 100644
|
|
index 000000000..5deed3e25
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
|
|
@@ -0,0 +1,115 @@
|
|
+package com.destroystokyo.paper;
|
|
+
|
|
+import com.destroystokyo.paper.util.VersionFetcher;
|
|
+import com.google.common.base.Charsets;
|
|
+import com.google.common.io.Resources;
|
|
+import com.google.gson.*;
|
|
+
|
|
+import javax.annotation.Nonnull;
|
|
+import javax.annotation.Nullable;
|
|
+import java.io.*;
|
|
+import java.net.HttpURLConnection;
|
|
+import java.net.URL;
|
|
+
|
|
+public class PaperVersionFetcher implements VersionFetcher {
|
|
+ private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end
|
|
+ private static final String GITHUB_BRANCH_NAME = "master";
|
|
+ private static @Nullable String mcVer;
|
|
+
|
|
+ @Override
|
|
+ public long getCacheTime() {
|
|
+ return 720000;
|
|
+ }
|
|
+
|
|
+ @Nonnull
|
|
+ @Override
|
|
+ public String getVersionMessage(@Nonnull String serverVersion) {
|
|
+ String[] parts = serverVersion.substring("git-Paper-".length()).split("[-\\s]");
|
|
+ return getUpdateStatusMessage("PaperMC/Paper", GITHUB_BRANCH_NAME, parts[0]);
|
|
+ }
|
|
+
|
|
+ private static @Nullable String getMinecraftVersion() {
|
|
+ if (mcVer == null) {
|
|
+ java.util.regex.Matcher matcher = VER_PATTERN.matcher(org.bukkit.Bukkit.getBukkitVersion());
|
|
+ if (matcher.find()) {
|
|
+ String result = matcher.group();
|
|
+ mcVer = result.substring(0, result.length() - 2); // strip 'R' anchor and trailing '-'
|
|
+ } else {
|
|
+ org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to PaperMC!");
|
|
+ org.bukkit.Bukkit.getLogger().warning("Pattern: " + VER_PATTERN.toString());
|
|
+ org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion());
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return mcVer;
|
|
+ }
|
|
+
|
|
+ private static String getUpdateStatusMessage(@Nonnull String repo, @Nonnull String branch, @Nonnull String versionInfo) {
|
|
+ int distance;
|
|
+ try {
|
|
+ int jenkinsBuild = Integer.parseInt(versionInfo);
|
|
+ distance = fetchDistanceFromSiteApi(jenkinsBuild, getMinecraftVersion());
|
|
+ } catch (NumberFormatException ignored) {
|
|
+ versionInfo = versionInfo.replace("\"", "");
|
|
+ distance = fetchDistanceFromGitHub(repo, branch, versionInfo);
|
|
+ }
|
|
+
|
|
+ switch (distance) {
|
|
+ case -1:
|
|
+ return "Error obtaining version information";
|
|
+ case 0:
|
|
+ return "You are running the latest version";
|
|
+ case -2:
|
|
+ return "Unknown version";
|
|
+ default:
|
|
+ return "You are " + distance + " version(s) behind";
|
|
+ }
|
|
+ }
|
|
+
|
|
+ private static int fetchDistanceFromSiteApi(int jenkinsBuild, @Nullable String siteApiVersion) {
|
|
+ if (siteApiVersion == null) { return -1; }
|
|
+ try {
|
|
+ try (BufferedReader reader = Resources.asCharSource(
|
|
+ new URL("https://papermc.io/api/v1/paper/" + siteApiVersion + "/latest"),
|
|
+ Charsets.UTF_8
|
|
+ ).openBufferedStream()) {
|
|
+ JsonObject json = new Gson().fromJson(reader, JsonObject.class);
|
|
+ int latest = json.get("build").getAsInt();
|
|
+ return latest - jenkinsBuild;
|
|
+ } catch (JsonSyntaxException ex) {
|
|
+ ex.printStackTrace();
|
|
+ return -1;
|
|
+ }
|
|
+ } catch (IOException e) {
|
|
+ e.printStackTrace();
|
|
+ return -1;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // Contributed by Techcable <Techcable@outlook.com> in GH-65
|
|
+ private static int fetchDistanceFromGitHub(@Nonnull String repo, @Nonnull String branch, @Nonnull String hash) {
|
|
+ try {
|
|
+ HttpURLConnection connection = (HttpURLConnection) new URL("https://api.github.com/repos/" + repo + "/compare/" + branch + "..." + hash).openConnection();
|
|
+ connection.connect();
|
|
+ if (connection.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) return -2; // Unknown commit
|
|
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), Charsets.UTF_8))) {
|
|
+ JsonObject obj = new Gson().fromJson(reader, JsonObject.class);
|
|
+ String status = obj.get("status").getAsString();
|
|
+ switch (status) {
|
|
+ case "identical":
|
|
+ return 0;
|
|
+ case "behind":
|
|
+ return obj.get("behind_by").getAsInt();
|
|
+ default:
|
|
+ return -1;
|
|
+ }
|
|
+ } catch (JsonSyntaxException | NumberFormatException e) {
|
|
+ e.printStackTrace();
|
|
+ return -1;
|
|
+ }
|
|
+ } catch (IOException e) {
|
|
+ e.printStackTrace();
|
|
+ return -1;
|
|
+ }
|
|
+ }
|
|
+}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
index 02f330053..b1e1b59d4 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
@@ -303,6 +303,11 @@ public final class CraftMagicNumbers implements UnsafeValues {
|
|
public String getTimingsServerName() {
|
|
return com.destroystokyo.paper.PaperConfig.timingsServerName;
|
|
}
|
|
+
|
|
+ @Override
|
|
+ public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() {
|
|
+ return new com.destroystokyo.paper.PaperVersionFetcher();
|
|
+ }
|
|
// Paper end
|
|
|
|
/**
|
|
--
|
|
2.25.0
|
|
|