183 lines
7.8 KiB
Diff
183 lines
7.8 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: foss-mc <69294560+foss-mc@users.noreply.github.com>
|
|
Date: Thu, 1 Jul 2021 12:09:38 +0000
|
|
Subject: [PATCH] (Patina) Remove VersionFetcher
|
|
|
|
Original code by PatinaMC, licensed under GNU General Public License v3.0
|
|
You can find the original code on https://github.com/PatinaMC/Patina
|
|
|
|
diff --git a/src/main/java/org/bukkit/command/defaults/VersionCommand.java b/src/main/java/org/bukkit/command/defaults/VersionCommand.java
|
|
index 57a21495843f3a144cd73473cdc8781d6129b7ca..c1a6df34bb09e8b732136f550b293f86bb380c48 100644
|
|
--- a/src/main/java/org/bukkit/command/defaults/VersionCommand.java
|
|
+++ b/src/main/java/org/bukkit/command/defaults/VersionCommand.java
|
|
@@ -1,6 +1,6 @@
|
|
package org.bukkit.command.defaults;
|
|
|
|
-import com.destroystokyo.paper.util.VersionFetcher; // Paper - version supplier
|
|
+//import com.destroystokyo.paper.util.VersionFetcher; // Paper - version supplier // Patina - remove
|
|
import com.google.common.base.Charsets;
|
|
import com.google.common.collect.ImmutableList;
|
|
import com.google.common.io.Resources;
|
|
@@ -28,14 +28,6 @@ import org.bukkit.util.StringUtil;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
public class VersionCommand extends BukkitCommand {
|
|
- private VersionFetcher versionFetcher;
|
|
- private VersionFetcher getVersionFetcher() { // lazy load because unsafe isn't available at command registration
|
|
- if (versionFetcher == null) {
|
|
- versionFetcher = Bukkit.getUnsafe().getVersionFetcher();
|
|
- }
|
|
-
|
|
- return versionFetcher;
|
|
- }
|
|
|
|
public VersionCommand(@NotNull String name) {
|
|
super(name);
|
|
@@ -51,8 +43,8 @@ public class VersionCommand extends BukkitCommand {
|
|
if (!testPermission(sender)) return true;
|
|
|
|
if (args.length == 0) {
|
|
- //sender.sendMessage("This server is running " + Bukkit.getName() + " version " + Bukkit.getVersion() + " (Implementing API version " + Bukkit.getBukkitVersion() + ")"); // Paper - moved to setVersionMessage
|
|
- sendVersion(sender);
|
|
+ sender.sendMessage("This server is running " + Bukkit.getName() + " version " + Bukkit.getVersion() + " (Implementing API version " + Bukkit.getBukkitVersion() + ")"); // Patina
|
|
+ //sendVersion(sender); // Patina
|
|
} else {
|
|
StringBuilder name = new StringBuilder();
|
|
|
|
@@ -154,134 +146,5 @@ public class VersionCommand extends BukkitCommand {
|
|
}
|
|
return ImmutableList.of();
|
|
}
|
|
-
|
|
- private final ReentrantLock versionLock = new ReentrantLock();
|
|
- private boolean hasVersion = false;
|
|
- private Component versionMessage = null; // Paper
|
|
- private final Set<CommandSender> versionWaiters = new HashSet<CommandSender>();
|
|
- private boolean versionTaskStarted = false;
|
|
- private long lastCheck = 0;
|
|
-
|
|
- private void sendVersion(@NotNull CommandSender sender) {
|
|
- if (hasVersion) {
|
|
- if (System.currentTimeMillis() - lastCheck > getVersionFetcher().getCacheTime()) { // Paper - use version supplier
|
|
- lastCheck = System.currentTimeMillis();
|
|
- hasVersion = false;
|
|
- } else {
|
|
- sender.sendMessage(versionMessage);
|
|
- return;
|
|
- }
|
|
- }
|
|
- versionLock.lock();
|
|
- try {
|
|
- if (hasVersion) {
|
|
- sender.sendMessage(versionMessage);
|
|
- return;
|
|
- }
|
|
- versionWaiters.add(sender);
|
|
- sender.sendMessage(Component.text("Checking version, please wait...", net.kyori.adventure.text.format.NamedTextColor.WHITE, net.kyori.adventure.text.format.TextDecoration.ITALIC)); // Paper
|
|
- if (!versionTaskStarted) {
|
|
- versionTaskStarted = true;
|
|
- new Thread(new Runnable() {
|
|
-
|
|
- @Override
|
|
- public void run() {
|
|
- obtainVersion();
|
|
- }
|
|
- }).start();
|
|
- }
|
|
- } finally {
|
|
- versionLock.unlock();
|
|
- }
|
|
- }
|
|
-
|
|
- private void obtainVersion() {
|
|
- String version = Bukkit.getVersion();
|
|
- // Paper start
|
|
- if (version.startsWith("null")) { // running from ide?
|
|
- setVersionMessage(Component.text("Unknown version, custom build?", net.kyori.adventure.text.format.NamedTextColor.YELLOW));
|
|
- return;
|
|
- }
|
|
- setVersionMessage(getVersionFetcher().getVersionMessage(version));
|
|
- /*
|
|
- if (version == null) version = "Custom";
|
|
- String[] parts = version.substring(0, version.indexOf(' ')).split("-");
|
|
- if (parts.length == 4) {
|
|
- int cbVersions = getDistance("craftbukkit", parts[3]);
|
|
- int spigotVersions = getDistance("spigot", parts[2]);
|
|
- if (cbVersions == -1 || spigotVersions == -1) {
|
|
- setVersionMessage("Error obtaining version information");
|
|
- } else {
|
|
- if (cbVersions == 0 && spigotVersions == 0) {
|
|
- setVersionMessage("You are running the latest version");
|
|
- } else {
|
|
- setVersionMessage("You are " + (cbVersions + spigotVersions) + " version(s) behind");
|
|
- }
|
|
- }
|
|
-
|
|
- } else if (parts.length == 3) {
|
|
- int cbVersions = getDistance("craftbukkit", parts[2]);
|
|
- if (cbVersions == -1) {
|
|
- setVersionMessage("Error obtaining version information");
|
|
- } else {
|
|
- if (cbVersions == 0) {
|
|
- setVersionMessage("You are running the latest version");
|
|
- } else {
|
|
- setVersionMessage("You are " + cbVersions + " version(s) behind");
|
|
- }
|
|
- }
|
|
- } else {
|
|
- setVersionMessage("Unknown version, custom build?");
|
|
- }
|
|
- */
|
|
- // Paper end
|
|
- }
|
|
-
|
|
- // Paper start
|
|
- private void setVersionMessage(final @NotNull Component msg) {
|
|
- lastCheck = System.currentTimeMillis();
|
|
- final Component message = net.kyori.adventure.text.TextComponent.ofChildren(
|
|
- Component.text(Bukkit.getVersionMessage(), net.kyori.adventure.text.format.NamedTextColor.WHITE),
|
|
- Component.newline(),
|
|
- msg
|
|
- );
|
|
- this.versionMessage = Component.text()
|
|
- .append(message)
|
|
- .hoverEvent(Component.text("Click to copy to clipboard", net.kyori.adventure.text.format.NamedTextColor.WHITE))
|
|
- .clickEvent(net.kyori.adventure.text.event.ClickEvent.copyToClipboard(net.kyori.adventure.text.serializer.plain.PlainComponentSerializer.plain().serialize(message)))
|
|
- .build();
|
|
- // Paper end
|
|
- versionLock.lock();
|
|
- try {
|
|
- hasVersion = true;
|
|
- versionTaskStarted = false;
|
|
- for (CommandSender sender : versionWaiters) {
|
|
- sender.sendMessage(versionMessage);
|
|
- }
|
|
- versionWaiters.clear();
|
|
- } finally {
|
|
- versionLock.unlock();
|
|
- }
|
|
- }
|
|
-
|
|
- private static int getDistance(@NotNull String repo, @NotNull String hash) {
|
|
- try {
|
|
- BufferedReader reader = Resources.asCharSource(
|
|
- new URL("https://hub.spigotmc.org/stash/rest/api/1.0/projects/SPIGOT/repos/" + repo + "/commits?since=" + URLEncoder.encode(hash, "UTF-8") + "&withCounts=true"),
|
|
- Charsets.UTF_8
|
|
- ).openBufferedStream();
|
|
- try {
|
|
- JsonObject obj = new Gson().fromJson(reader, JsonObject.class);
|
|
- return obj.get("totalCount").getAsInt();
|
|
- } catch (JsonSyntaxException ex) {
|
|
- ex.printStackTrace();
|
|
- return -1;
|
|
- } finally {
|
|
- reader.close();
|
|
- }
|
|
- } catch (IOException e) {
|
|
- e.printStackTrace();
|
|
- return -1;
|
|
- }
|
|
- }
|
|
+ // Patina - remove
|
|
}
|