diff --git a/build.gradle.kts b/build.gradle.kts index 01def997..55635965 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -42,6 +42,7 @@ subprojects { repositories { mavenCentral() maven("https://libraries.minecraft.net/") + maven("https://repo.codemc.io/repository/maven-public/") maven("https://oss.sonatype.org/content/groups/public/") maven("https://papermc.io/repo/repository/maven-public/") maven("https://ci.emc.gs/nexus/content/groups/aikar/") diff --git a/patches/api-remap-in-progress/remap in progress/0005-Add-NBT-API-as-a-first-class-lib.patch b/patches/api/0004-Add-NBT-API-as-a-first-class-lib.patch similarity index 59% rename from patches/api-remap-in-progress/remap in progress/0005-Add-NBT-API-as-a-first-class-lib.patch rename to patches/api/0004-Add-NBT-API-as-a-first-class-lib.patch index 3fff9bed..3e6a1a0b 100644 --- a/patches/api-remap-in-progress/remap in progress/0005-Add-NBT-API-as-a-first-class-lib.patch +++ b/patches/api/0004-Add-NBT-API-as-a-first-class-lib.patch @@ -1,52 +1,41 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: tr7zw -Date: Sat, 1 Aug 2020 15:55:15 -0500 +Date: Thu, 2 Apr 2020 18:49:38 +0200 Subject: [PATCH] Add NBT API as a first-class lib -diff --git a/pom.xml b/pom.xml -index f0ef93cb0c1d369265b2a6fc56c80f79d61d4ebc..a6a2fd50e685f64afecac5da6aaaad6227a3731e 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -47,6 +47,11 @@ - mojang - https://libraries.minecraft.net/ - -+ -+ -+ codemc-repo -+ https://repo.codemc.io/repository/maven-public/ -+ - +diff --git a/build.gradle.kts b/build.gradle.kts +index dffd42fa0862a04fbb63dbc2c378d41eac2aafb5..1fc1f67153bf975297233b6f27158635f762a602 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -3,6 +3,7 @@ import java.util.Locale + plugins { + `java-library` + `maven-publish` ++ id("com.github.johnrengelman.shadow") + } - -@@ -205,6 +210,11 @@ - asm-commons - 9.1 - -+ -+ de.tr7zw -+ item-nbt-api -+ 2.7.1 -+ - + java { +@@ -28,6 +29,7 @@ dependencies { + api("org.ow2.asm:asm-commons:9.0") + api("org.apache.logging.log4j:log4j-api:2.14.1") // Paper + api("com.mojang:authlib:2.3.31") // Yatopia ++ api("de.tr7zw:item-nbt-api:2.8.0") // Yatopia - -@@ -279,6 +289,12 @@ - ${project.build.directory}/dependency-reduced-pom.xml - - true -+ -+ -+ de.tr7zw.changeme.nbtapi -+ de.tr7zw.nbtapi -+ -+ - - - + compileOnly("org.apache.maven:maven-resolver-provider:3.8.1") + compileOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.0") +@@ -68,6 +70,9 @@ tasks.jar { + } + } + ++tasks.shadowJar { ++ relocate("de.tr7zw.changeme.nbtapi", "de.tr7zw.nbtapi") ++} + tasks.withType().configureEach { + (options as StandardJavadocDocletOptions).links( + "https://guava.dev/releases/21.0/api/docs/", diff --git a/src/main/java/org/bukkit/Chunk.java b/src/main/java/org/bukkit/Chunk.java -index 98263d896f316983609432c45b85401a2692432d..afaa459d2c351f99b598ec9054a6838ffb0098e8 100644 +index 98263d896f316983609432c45b85401a2692432d..44a649d8dc97c7b271b1000bff893edd7be46360 100644 --- a/src/main/java/org/bukkit/Chunk.java +++ b/src/main/java/org/bukkit/Chunk.java @@ -275,4 +275,16 @@ public interface Chunk extends PersistentDataHolder { @@ -56,10 +45,10 @@ index 98263d896f316983609432c45b85401a2692432d..afaa459d2c351f99b598ec9054a6838f + + // Yatopia start + /** -+ * Returns a custom tag container of this chunk. -+ * -+ * @return custom NBT tags container -+ */ ++ * Returns a custom tag container of this chunk. ++ * ++ * @return custom NBT tags container ++ */ + @NotNull + default de.tr7zw.changeme.nbtapi.NBTCompound getNBTC() { + return new de.tr7zw.changeme.nbtapi.NBTChunk(this).getPersistentDataContainer(); @@ -98,14 +87,13 @@ index 3b10fcc13893403b29f0260b8605144679e89b82..1e9a96d8b08cc396acf73dc420830093 + // Yatopia end } diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 62d8d7dbd4d602ca8cb00ff0cf1331583b398323..7cb395466babc84dd4ce1c91cbab7d130a5437b3 100644 +index a9e455c5b3bbe4edbdb71f86f5c6eebc2f605547..61565b7de6f29bdf3f58e9c0a70aaaf827a34073 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java -@@ -778,4 +778,26 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent - */ - boolean isInDaylight(); - // Purpur end -+ +@@ -190,6 +190,27 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent + } + // Paper end + + // Yatopia start + /** + * Returns NBT representation of this entity. @@ -127,16 +115,17 @@ index 62d8d7dbd4d602ca8cb00ff0cf1331583b398323..7cb395466babc84dd4ce1c91cbab7d13 + return getNBT().getPersistentDataContainer(); + } + // Yatopia end - } + /** + * Returns a list of entities within a bounding box centered around this + * entity diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index fceba6780a15c274c4689eccbeb6dfb2eee25ed9..1ba63c21245c4d4b9326b89ac83add9481fec243 100644 +index a7909406e9d54c1ab4789b984ed6b1da50837fce..4de9ab88d35eb1a67e6ad9b795e5bcbb9898bd26 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java -@@ -1548,4 +1548,42 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, net.kyor - return random.nextInt(unbreaking + 1) > 0; +@@ -567,6 +567,43 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, net.kyor } - // Purpur end -+ + // Paper end + + // Yatopia start + /** + * Returns NBT representation of this item. The ItemStack will be cloned! @@ -149,13 +138,13 @@ index fceba6780a15c274c4689eccbeb6dfb2eee25ed9..1ba63c21245c4d4b9326b89ac83add94 + } + + /** -+ * Returns NBT representation of this item. If directApply is true, -+ * all changes will be mapped to the original item. Changes to the NBTItem will -+ * overwrite changes done to the original item in that case. -+ * -+ * @param directApply if true, changes to NBTItem will affect this ItemStack -+ * @return item's NBT tags container -+ */ ++ * Returns NBT representation of this item. If directApply is true, ++ * all changes will be mapped to the original item. Changes to the NBTItem will ++ * overwrite changes done to the original item in that case. ++ * ++ * @param directApply if true, changes to NBTItem will affect this ItemStack ++ * @return item's NBT tags container ++ */ + @NotNull + public de.tr7zw.changeme.nbtapi.NBTItem getNBT(boolean directApply) { + return new de.tr7zw.changeme.nbtapi.NBTItem(this, directApply); @@ -174,4 +163,6 @@ index fceba6780a15c274c4689eccbeb6dfb2eee25ed9..1ba63c21245c4d4b9326b89ac83add94 + setItemMeta(nbtItem.getItemMeta()); + } + // Yatopia end - } + /** + * Get a copy of this ItemStack's {@link ItemMeta}. + * diff --git a/patches/backup/api/0001-Yatopia-Config-Redirect-Config.patch b/patches/backup/api/0001-Yatopia-Config-Redirect-Config.patch new file mode 100644 index 00000000..003b9def --- /dev/null +++ b/patches/backup/api/0001-Yatopia-Config-Redirect-Config.patch @@ -0,0 +1,33 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: YatopiaMC +Date: Sun, 17 Jan 2021 15:37:52 -0600 +Subject: [PATCH] Yatopia Config & Redirect Config + + +diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java +index e88b47a838dc472ad64271a518ee1789f7be19fa..a69bf7aae1e9d6b658b079431d23ca0f28c871d1 100644 +--- a/src/main/java/org/bukkit/Server.java ++++ b/src/main/java/org/bukkit/Server.java +@@ -1606,6 +1606,22 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi + } + // Paper end + ++ // Origami start - add config to timings report ++ @NotNull ++ public org.bukkit.configuration.file.YamlConfiguration getOrigamiConfig() ++ { ++ throw new UnsupportedOperationException("Not supported yet."); ++ } ++ // Origami end ++ ++ // Yatopia start - add config to timings report ++ @NotNull ++ public org.bukkit.configuration.file.YamlConfiguration getYatopiaConfig() ++ { ++ throw new UnsupportedOperationException("Not supported yet."); ++ } ++ // Yatopia end ++ + /** + * Sends the component to the player + * diff --git a/patches/backup/api/0002-Add-GameProfileLookupEvent.patch b/patches/backup/api/0002-Add-GameProfileLookupEvent.patch new file mode 100644 index 00000000..5695f682 --- /dev/null +++ b/patches/backup/api/0002-Add-GameProfileLookupEvent.patch @@ -0,0 +1,75 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: tr7zw +Date: Sat, 1 Aug 2020 15:52:50 -0500 +Subject: [PATCH] Add GameProfileLookupEvent + + +diff --git a/build.gradle.kts b/build.gradle.kts +index 6d04816e22f44a33c001d2b7e080402fba6af86c..dffd42fa0862a04fbb63dbc2c378d41eac2aafb5 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -27,6 +27,7 @@ dependencies { + api("org.ow2.asm:asm:9.0") + api("org.ow2.asm:asm-commons:9.0") + api("org.apache.logging.log4j:log4j-api:2.14.1") // Paper ++ api("com.mojang:authlib:2.3.31") // Yatopia + + compileOnly("org.apache.maven:maven-resolver-provider:3.8.1") + compileOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.0") +diff --git a/src/main/java/org/yatopiamc/yatopia/server/events/GameProfileLookupEvent.java b/src/main/java/org/yatopiamc/yatopia/server/events/GameProfileLookupEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..f96afc8f1b04f4bf46a2acbca95ebcfebfa01182 +--- /dev/null ++++ b/src/main/java/org/yatopiamc/yatopia/server/events/GameProfileLookupEvent.java +@@ -0,0 +1,51 @@ ++package org.yatopiamc.yatopia.server.events; ++ ++import com.mojang.authlib.GameProfile; ++import java.util.UUID; ++import org.bukkit.event.Event; ++import org.bukkit.event.HandlerList; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++ ++public class GameProfileLookupEvent extends Event { ++ private static final HandlerList handlers = new HandlerList(); ++ private GameProfile gameProfile = null; ++ private final UUID uuid; ++ private final String name; ++ ++ public GameProfileLookupEvent(boolean async, @NotNull UUID uuid, @NotNull String name) { ++ super(async); ++ this.uuid = uuid; ++ this.name = name; ++ } ++ ++ @Nullable ++ public GameProfile getGameProfile() { ++ return gameProfile; ++ } ++ ++ public void setGameProfile(@Nullable GameProfile gameProfile) { ++ this.gameProfile = gameProfile; ++ } ++ ++ @NotNull ++ public UUID getUuid() { ++ return uuid; ++ } ++ ++ @NotNull ++ public String getName() { ++ return name; ++ } ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++} diff --git a/patches/backup/server/0001-Rebrand.patch b/patches/backup/server/0001-Rebrand.patch new file mode 100644 index 00000000..6ec7942d --- /dev/null +++ b/patches/backup/server/0001-Rebrand.patch @@ -0,0 +1,242 @@ +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); ++ } ++} diff --git a/patches/backup/server/0002-Utilities.patch b/patches/backup/server/0002-Utilities.patch new file mode 100644 index 00000000..86fba8e4 --- /dev/null +++ b/patches/backup/server/0002-Utilities.patch @@ -0,0 +1,138 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: YatopiaMC +Date: Fri, 23 Oct 2020 09:20:01 -0700 +Subject: [PATCH] Utilities + +This patch includes all utilities required by the Yatopia project and its patches. + +Co-authored-by: Mykyta Komarnytskyy +Co-authored-by: Ivan Pekov + +diff --git a/build.gradle.kts b/build.gradle.kts +index 494297e5bed54f7cf41711032391fce991d5efa8..80a2ba2fe63ad6fd6e83f46cd29b4cabe64023b0 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -37,6 +37,7 @@ dependencies { + implementation("org.apache.logging.log4j:log4j-api:2.14.1") // Paper + implementation("org.apache.logging.log4j:log4j-slf4j-impl:2.14.1") // Paper + implementation("org.ow2.asm:asm:9.1") ++ implementation("org.apache.commons:commons-rng-core:1.3") + implementation("com.googlecode.json-simple:json-simple:1.1.1") { + // This includes junit transitively for whatever reason + isTransitive = false +diff --git a/src/main/java/org/yatopiamc/yatopia/server/util/Constants.java b/src/main/java/org/yatopiamc/yatopia/server/util/Constants.java +new file mode 100644 +index 0000000000000000000000000000000000000000..ac5235155eb1b5515165fc9648b7c9d7a0713b44 +--- /dev/null ++++ b/src/main/java/org/yatopiamc/yatopia/server/util/Constants.java +@@ -0,0 +1,7 @@ ++package org.yatopiamc.yatopia.server.util; ++ ++public class Constants { ++ ++ public static final int[] EMPTY_ARRAY = new int[0]; ++ public static final int[] ZERO_ARRAY = new int[]{0}; ++} +diff --git a/src/main/java/org/yatopiamc/yatopia/server/util/FastRandom.java b/src/main/java/org/yatopiamc/yatopia/server/util/FastRandom.java +new file mode 100644 +index 0000000000000000000000000000000000000000..e41c1e3fa656d8f595733897ab05089c3b0976a7 +--- /dev/null ++++ b/src/main/java/org/yatopiamc/yatopia/server/util/FastRandom.java +@@ -0,0 +1,64 @@ ++package org.yatopiamc.yatopia.server.util; ++ ++import org.apache.commons.rng.core.source64.XoRoShiRo128PlusPlus; ++ ++import java.util.Random; ++import java.util.SplittableRandom; ++ ++public class FastRandom extends Random { ++ ++ private XoRoShiRo128PlusPlus random; ++ ++ public FastRandom() { ++ super(); ++ SplittableRandom randomseed = new SplittableRandom(); ++ this.random = new XoRoShiRo128PlusPlus(randomseed.nextLong(), randomseed.nextLong()); ++ } ++ ++ public FastRandom(long seed) { ++ super(seed); ++ SplittableRandom randomseed = new SplittableRandom(seed); ++ this.random = new XoRoShiRo128PlusPlus(randomseed.nextLong(), randomseed.nextLong()); ++ } ++ ++ @Override ++ public boolean nextBoolean() { ++ return random.nextBoolean(); ++ } ++ ++ @Override ++ public int nextInt() { ++ return random.nextInt(); ++ } ++ ++ @Override ++ public float nextFloat() { ++ return (float) random.nextDouble(); ++ } ++ ++ @Override ++ public double nextDouble() { ++ return random.nextDouble(); ++ } ++ ++ @Override ++ public synchronized void setSeed(long seed) { ++ SplittableRandom randomseed = new SplittableRandom(seed); ++ this.random = new XoRoShiRo128PlusPlus(randomseed.nextLong(), randomseed.nextLong()); ++ } ++ ++ @Override ++ public void nextBytes(byte[] bytes) { ++ random.nextBytes(bytes); ++ } ++ ++ @Override ++ public int nextInt(int bound) { ++ return random.nextInt(bound); ++ } ++ ++ @Override ++ public long nextLong() { ++ return random.nextLong(); ++ } ++} +diff --git a/src/main/java/org/yatopiamc/yatopia/server/util/TimeUtils.java b/src/main/java/org/yatopiamc/yatopia/server/util/TimeUtils.java +new file mode 100644 +index 0000000000000000000000000000000000000000..acdf3d60738791b767a3bafa2c9511342a8c18df +--- /dev/null ++++ b/src/main/java/org/yatopiamc/yatopia/server/util/TimeUtils.java +@@ -0,0 +1,27 @@ ++package org.yatopiamc.yatopia.server.util; ++ ++import java.util.concurrent.TimeUnit; ++ ++public class TimeUtils { ++ ++ public static String getFriendlyName(TimeUnit unit) { ++ switch (unit) { ++ case NANOSECONDS: ++ return "ns"; ++ case MILLISECONDS: ++ return "ms"; ++ case MICROSECONDS: ++ return "micros"; ++ case SECONDS: ++ return "s"; ++ case MINUTES: ++ return "m"; ++ case DAYS: ++ return "d"; ++ case HOURS: ++ return "h"; ++ default: ++ throw new AssertionError(); ++ } ++ } ++} diff --git a/patches/server-remap-in-progress/remap in progress/0008-Add-NBT-API-as-a-first-class-lib.patch b/patches/server-remap-in-progress/remap in progress/0008-Add-NBT-API-as-a-first-class-lib.patch deleted file mode 100644 index 391fb510..00000000 --- a/patches/server-remap-in-progress/remap in progress/0008-Add-NBT-API-as-a-first-class-lib.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: tr7zw -Date: Thu, 2 Apr 2020 18:49:38 +0200 -Subject: [PATCH] Add NBT API as a first-class lib - - -diff --git a/pom.xml b/pom.xml -index 9e078cfce61a4462cafdb69c1915b2555a4b4f27..3cfc312c3f4f5d30421e15977ef2dfeac0c3c841 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -427,6 +427,10 @@ - net/minecraft/server/v${minecraft_version}/$2 - true - -+ -+ de.tr7zw.changeme.nbtapi -+ de.tr7zw.nbtapi -+ - - - diff --git a/patches/server/0006-Add-NBT-API-as-a-first-class-lib.patch b/patches/server/0006-Add-NBT-API-as-a-first-class-lib.patch new file mode 100644 index 00000000..65cd09c2 --- /dev/null +++ b/patches/server/0006-Add-NBT-API-as-a-first-class-lib.patch @@ -0,0 +1,18 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: tr7zw +Date: Thu, 2 Apr 2020 18:49:38 +0200 +Subject: [PATCH] Add NBT API as a first-class lib + + +diff --git a/build.gradle.kts b/build.gradle.kts +index 80a2ba2fe63ad6fd6e83f46cd29b4cabe64023b0..b68e010579968ac11a336d1c18704eaf18316056 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -109,6 +109,7 @@ tasks.shadowJar { + relocate("org.bukkit.craftbukkit", "org.bukkit.craftbukkit.v$packageVersion") { + exclude("org.bukkit.craftbukkit.Main*") + } ++ relocate("de.tr7zw.changeme.nbtapi", "de.tr7zw.nbtapi") + mergeServiceFiles() + transform(ModifiedLog4j2PluginsCacheFileTransformer::class.java) + }