From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Toffikk Date: Wed, 16 Jun 2021 15:04:11 +0100 Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts index f111042223f0d7974785c37245bb60b75388163e..494297e5bed54f7cf41711032391fce991d5efa8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -19,8 +19,8 @@ repositories { } dependencies { - implementation(project(":Paper-API")) - implementation(project(":Paper-MojangAPI")) + implementation(project(":Yatopia-API")) // Yatopia + implementation("com.destroystokyo.paper:paper-mojangapi:1.16.5-R0.1-SNAPSHOT") // Yatopia // Paper start implementation("org.jline:jline-terminal-jansi:3.12.1") implementation("net.minecrell:terminalconsoleappender:1.2.0") @@ -65,7 +65,7 @@ tasks.jar { attributes(mapOf( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", - "Implementation-Version" to "git-Paper-\"$gitHash\"", + "Implementation-Version" to "git-Yatopia-\"$gitHash\"", // Yatopia "Implementation-Vendor" to SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(Date()), // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, @@ -119,7 +119,7 @@ tasks.test { fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { - group = "paper" + group = "paperweight" // Yatopia standardInput = System.`in` workingDir = rootProject.layout.projectDirectory.dir( providers.gradleProperty("runWorkDir").forUseAtConfigurationTime().orElse("run") diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java index e0b1f0671d16ddddcb6725acd25a1d1d69e42701..d943a45200b89f541347d0bc7a3e8494022066db 100644 --- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java @@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { @Override protected LineReader buildReader(LineReaderBuilder builder) { builder - .appName("Paper") + .appName("Yatopia") // Yatopia .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) .completer(new ConsoleCommandCompleter(this.server)) .option(LineReader.Option.COMPLETE_IN_WORD, true); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 1f29c92776aea8dbba52d4cb197addce5b3e4d5e..893a992156efb7b01b13efe9637704ac99c19baa 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1634,7 +1634,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! + return "Yatopia"; // Yatopia // Paper // Spigot // CraftBukkit - cb > vanilla! } public SystemReport fillSystemReport(SystemReport systemreport) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 8a98bd1018afd934696fedbed24e271ab6b75f51..5c85cdb4ef4ffeebdadf01a4ad4a23801bd3fdca 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -230,7 +230,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 = "Yatopia"; // Paper // Yatopia private final String serverVersion; private final String bukkitVersion = Versioning.getBukkitVersion(); private final Logger logger = Logger.getLogger("Minecraft"); diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java index a2a62bfb747994c43b8b0b607af90d3be2836873..faa5cbb07a735312954e0b78c7902a31d0a2d48d 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -395,7 +395,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { - return new com.destroystokyo.paper.PaperVersionFetcher(); + return new org.yatopiamc.yatopia.server.util.VersionFetcher.YatopiaVersionFetcher(); // Yatopia } @Override diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java index 774556a62eb240da42e84db4502e2ed43495be17..359e64243b0b7adcc44138d192ea8fad7b10a542 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java @@ -11,7 +11,7 @@ public final class Versioning { public static String getBukkitVersion() { String result = "Unknown-Version"; - InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties"); + InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.yatopiamc.yatopia/yatopia-api/pom.properties"); // Yatopia Properties properties = new Properties(); if (stream != null) { diff --git a/src/main/java/org/yatopiamc/yatopia/server/util/VersionFetcher/YatopiaVersionFetcher.java b/src/main/java/org/yatopiamc/yatopia/server/util/VersionFetcher/YatopiaVersionFetcher.java new file mode 100644 index 0000000000000000000000000000000000000000..a0dc55e0fd646e31edda78ff9e68c0beb2b276e3 --- /dev/null +++ b/src/main/java/org/yatopiamc/yatopia/server/util/VersionFetcher/YatopiaVersionFetcher.java @@ -0,0 +1,132 @@ +package org.yatopiamc.yatopia.server.util.VersionFetcher; + +import com.destroystokyo.paper.VersionHistoryManager; +import com.google.common.base.Charsets; +import com.google.common.io.Resources; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonSyntaxException; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.Arrays; +import java.util.Objects; +import java.util.jar.Manifest; +import javax.annotation.Nonnull; + +import com.destroystokyo.paper.util.VersionFetcher; +import javax.annotation.Nullable; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.TextComponent; +import net.kyori.adventure.text.format.TextDecoration; + +public class YatopiaVersionFetcher implements VersionFetcher { + + @Override + public long getCacheTime() { + return 3600000; + } + + @Nonnull + @Override + public Component getVersionMessage(@Nonnull String serverVersion) { + if (serverVersion.equals("null")) return Component.text("Custom build"); + String[] parts = serverVersion.substring("git-Yatopia-".length()).split("[-\\s]"); + String branch = String.join("-", Arrays.copyOfRange(parts, 0, parts.length - 3)); + String version = parts[parts.length - 3]; + final Component updateMessage = getUpdateStatusMessage("YatopiaMC/Yatopia", branch, version); + final Component history = getHistory(); + + return history != null ? TextComponent.ofChildren(history, Component.newline(), updateMessage) : updateMessage; + } + + private Component getUpdateStatusMessage(String repo, String branch, String versionInfo) { + int distance; + try { + int jenkinsBuild = Integer.parseInt(versionInfo); + distance = fetchDistanceFromJenkins(branch, jenkinsBuild); + } catch (NumberFormatException ignored) { + distance = fetchDistanceFromGitHub(repo, branch, versionInfo.replace("\"", "")); + } + + switch (distance) { + case -1: + return Component.text("Error obtaining version information", NamedTextColor.YELLOW); + case 0: + return Component.text("You are running the latest version", NamedTextColor.GREEN); + case -2: + return Component.text("Unknown version", NamedTextColor.YELLOW); + default: + return Component.text("You are " + distance + " version(s) behind", NamedTextColor.YELLOW); + } + } + + // modified from PurpurVersionFetcher + private static int fetchDistanceFromJenkins(String branch, int jenkinsBuild) { + try { + try (BufferedReader reader = Resources.asCharSource(new URL("https://ci.codemc.io/job/YatopiaMC/job/Yatopia/job/" + URLEncoder.encode(branch, Charsets.UTF_8.name()) + "/lastStableBuild/buildNumber"), Charsets.UTF_8).openBufferedStream()) { + return Integer.decode(reader.readLine()) - jenkinsBuild; + } catch (NumberFormatException ex) { + ex.printStackTrace(); + return -2; + } + } catch (IOException e) { + e.printStackTrace(); + return -1; + } + } + + // Contributed by Techcable in GH-65 + // from PaperVersionFetcher + 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; + } + } + + // from PaperVersionFetcher + @Nullable + private Component getHistory() { + final VersionHistoryManager.VersionData data = VersionHistoryManager.INSTANCE.getVersionData(); + if (data == null) { + return null; + } + + final String oldVersion = data.getOldVersion(); + if (oldVersion == null) { + return null; + } + + return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); + } +}