From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Encode42 Date: Thu, 16 Sep 2021 20:39:45 -0400 Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts index c25f76e726d614d183062c213ab83bd3404b6b15..a79693afc8c21448a4134f730eff910e1b88e2a8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,7 +13,7 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { val alsoShade: Configuration by configurations.creating dependencies { - implementation(project(":gale-api")) // Gale start - project setup - Depend on own API + implementation(project(":leaf-api")) // Gale start - project setup - Depend on own API // Leaf // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") @@ -94,14 +94,14 @@ tasks.jar { val gitBranch = git("rev-parse", "--abbrev-ref", "HEAD").getText().trim() // Paper attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", - "Implementation-Title" to "Gale", // Gale - branding changes + "Implementation-Title" to "Leaf", // Gale - branding changes // Leaf "Implementation-Version" to implementationVersion, "Implementation-Vendor" to date, // Paper - "Specification-Title" to "Gale", // Gale - branding changes + "Specification-Title" to "Leaf", // Gale - branding changes // Leaf "Specification-Version" to project.version, - "Specification-Vendor" to "GaleMC Team", // Gale - branding changes - "Brand-Id" to "galemc:gale", // Gale - branding changes - "Brand-Name" to "Gale", // Gale - branding changes + "Specification-Vendor" to "Winds Studio", // Gale - branding changes // Leaf + "Brand-Id" to "winds-studio:leaf", // Gale - branding changes // Leaf + "Brand-Name" to "Leaf", // Gale - branding changes // Leaf "Build-Number" to (build ?: ""), "Build-Time" to Instant.now().toString(), "Git-Branch" to gitBranch, // Paper diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java index ac23c85f17e0a5cd9702888a873cc470428b3e34..6c5c0cc59ff9901b22288f3cd62228c1e52794c5 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -593,7 +593,7 @@ public class Metrics { boolean logFailedRequests = config.getBoolean("logFailedRequests", false); // Only start Metrics, if it's enabled in the config if (config.getBoolean("enabled", true)) { - Metrics metrics = new Metrics("Gale", serverUUID, logFailedRequests, Bukkit.getLogger()); // Gale - branding changes - metrics + Metrics metrics = new Metrics("Leaf", serverUUID, logFailedRequests, Bukkit.getLogger()); // Gale - branding changes - metrics // Leaf metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { String minecraftVersion = Bukkit.getVersion(); @@ -603,15 +603,15 @@ public class Metrics { metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : "offline")); - final String galeVersion; // Gale - branding changes - metrics + final String leafVersion; // Gale - branding changes - metrics // Leaf final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); if (implVersion != null) { final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); - galeVersion = "git-Gale-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Gale - branding changes - metrics + leafVersion = "git-Leaf-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Gale - branding changes - metrics // Leaf } else { - galeVersion = "unknown"; // Gale - branding changes - metrics + leafVersion = "unknown"; // Gale - branding changes - metrics // Leaf } - metrics.addCustomChart(new Metrics.SimplePie("gale_version", () -> galeVersion)); // Gale - branding changes - metrics + metrics.addCustomChart(new Metrics.SimplePie("leaf_version", () -> leafVersion)); // Gale - branding changes - metrics // Leaf metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(2); // Gale - metrics - reduce HashMap capacity diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java index e45e6b44b2a8f2cdae6e0048a812b92126aa17ca..b5f3f213da8a40d5184098af017c8e2669c3e58c 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("Gale") // Gale - branding changes + .appName("Leaf") // Gale - branding changes // Leaf .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/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java index 2596e0ee4df5b96f181e28a742ef345981fc97e3..00470a690b4b0fc8996a03ecd21af8163094184d 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java @@ -32,6 +32,7 @@ public record ServerBuildInfoImpl( private static final String BRAND_PAPER_NAME = "Paper"; private static final String BRAND_GALE_NAME = "Gale"; // Gale - branding changes + private static final String BRAND_LEAF_NAME = "Leaf"; // Leaf private static final String BUILD_DEV = "DEV"; @@ -43,9 +44,9 @@ public record ServerBuildInfoImpl( this( getManifestAttribute(manifest, ATTRIBUTE_BRAND_ID) .map(Key::key) - .orElse(BRAND_GALE_ID), // Gale - branding changes + .orElse(BRAND_LEAF_ID), // Gale - branding changes // Leaf getManifestAttribute(manifest, ATTRIBUTE_BRAND_NAME) - .orElse(BRAND_GALE_NAME), // Gale - branding changes + .orElse(BRAND_LEAF_NAME), // Gale - branding changes // Leaf SharedConstants.getCurrentVersion().getId(), SharedConstants.getCurrentVersion().getName(), getManifestAttribute(manifest, ATTRIBUTE_BUILD_NUMBER) @@ -62,7 +63,9 @@ public record ServerBuildInfoImpl( @Override public boolean isBrandCompatible(final @NotNull Key brandId) { - return brandId.equals(this.brandId) || brandId.equals(BRAND_PAPER_ID); // Gale - branding changes + return brandId.equals(this.brandId) + || brandId.equals(BRAND_PAPER_ID) + || brandId.equals(BRAND_GALE_ID); // Gale - branding changes // Leaf } @Override diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java index b24265573fdef5d9a964bcd76146f34542c420cf..aa25fd3ee043003f359b2c67a6d0f6700a0ef893 100644 --- a/src/main/java/net/minecraft/CrashReport.java +++ b/src/main/java/net/minecraft/CrashReport.java @@ -32,6 +32,7 @@ public class CrashReport { private boolean trackingStackTrace = true; private StackTraceElement[] uncategorizedStackTrace = new StackTraceElement[0]; private final SystemReport systemReport = new SystemReport(); + private List extraInfo = List.of("", "DO NOT REPORT THIS TO PAPER OR GALE! REPORT TO LEAF INSTEAD!", ""); // Leaf - Purpur public CrashReport(String message, Throwable cause) { io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(cause); // Paper @@ -144,7 +145,7 @@ public class CrashReport { } public String getFriendlyReport(ReportType type) { - return this.getFriendlyReport(type, List.of()); + return this.getFriendlyReport(type, extraInfo); // Leaf - Purpur } @Nullable @@ -191,7 +192,7 @@ public class CrashReport { } public boolean saveToFile(Path path, ReportType type) { - return this.saveToFile(path, type, List.of()); + return this.saveToFile(path, type, extraInfo); // Leaf - Purpur } public SystemReport getSystemReport() { diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java index 4d037e899e0b5548be406ad55acd2062603b7da1..379b36944ddb149e2f48221aa39ad090bbd2faeb 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java @@ -67,7 +67,7 @@ public class DamageSource { public DamageSource customEventDamager(Entity entity) { if (this.directEntity != null) { - throw new IllegalStateException("Cannot set custom event damager when direct entity is already set (report a bug to Paper, if you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues)"); // Gale - branding changes + throw new IllegalStateException("Cannot set custom event damager when direct entity is already set (report a bug to Paper, if you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Gale - branding changes // Leaf } DamageSource damageSource = this.cloneInstance(); damageSource.customEventDamager = entity; diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java index 11cf6a20550e252501a92be5bdffafcff007cbf9..54f7aa95cfbcf39bb86ad1b4eb0f9ff2f8526030 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java @@ -182,7 +182,7 @@ public class RegionFileStorage implements AutoCloseable, ca.spottedleaf.moonrise We do not want people to report thread issues to Paper, but we do want people to report thread issues to Gale. */ - org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO PAPER OR GALE - You may ask for help on Discord, but do not file an issue. These error messages can not be removed. - If you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues)"); + org.apache.logging.log4j.LogManager.getLogger().fatal(msg + " (" + file.toString().replaceAll(".+[\\\\/]", "") + " - " + x + "," + z + ") Go clean it up to remove this message. /minecraft:tp " + (x<<4)+" 128 "+(z<<4) + " - DO NOT REPORT THIS TO PAPER OR LEAF - You may ask for help on Discord, but do not file an issue. These error messages can not be removed. - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues)"); // Leaf // Gale end - branding changes } diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java index bdfb969f88e68d89a5cad4b145bbc1441a110bac..fba0558f46516f65c678635359f305f865336d3a 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java @@ -492,7 +492,7 @@ public class CraftScheduler implements BukkitScheduler { this.parsePending(); } else { // this.debugTail = this.debugTail.setNext(new CraftAsyncDebugger(currentTick + CraftScheduler.RECENT_TICKS, task.getOwner(), task.getTaskClass())); // Paper - task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Gale"); // Paper // Gale - branding changes + task.getOwner().getLogger().log(Level.SEVERE, "Unexpected Async Task in the Sync Scheduler. Report this to Leaf"); // Paper // Gale - branding changes // Leaf // We don't need to parse pending // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java index 394588a2ec825807bcf2d1383586a25f941dd774..62b7870072338ebc5adc62a1793136491d0288f5 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -487,7 +487,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { - return new org.galemc.gale.version.GaleVersionFetcher(); // Gale - branding changes - version fetcher + return new org.dreeam.leaf.version.LeafVersionFetcher(); // Gale - branding changes - version fetcher // Leaf } @Override diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java index 0b5979723bb30f9011ac64c36d894aa41713ec9b..e220f5601f6b92b7b280ce8ebe64117d30192b0e 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/org.galemc.gale/gale-api/pom.properties"); // Gale - branding changes + InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/cn.dreeam.leaf/leaf-api/pom.properties"); // Gale - branding changes // Leaf Properties properties = new Properties(); if (stream != null) { diff --git a/src/main/java/org/dreeam/leaf/version/LeafVersionFetcher.java b/src/main/java/org/dreeam/leaf/version/LeafVersionFetcher.java new file mode 100644 index 0000000000000000000000000000000000000000..8ebc1b7f2fb43ff78ed9e0a32d86e58882be1c74 --- /dev/null +++ b/src/main/java/org/dreeam/leaf/version/LeafVersionFetcher.java @@ -0,0 +1,17 @@ +package org.dreeam.leaf.version; + +import org.galemc.gale.version.AbstractPaperVersionFetcher; + +public class LeafVersionFetcher extends AbstractPaperVersionFetcher { + + public LeafVersionFetcher() { + super( + "ver/1.21.1", + "https://github.com/Winds-Studio/Leaf", + "Winds-Studio", + "Leaf", + "Winds-Studio", + "Leaf" + ); + } +} diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java index 08fa6018bcab38d8c9ca05c84e229d69184ce01b..f9351c15c8c6e2f4cbd2af0a15bdd5e1a90cb262 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -96,7 +96,7 @@ public class WatchdogThread extends ca.spottedleaf.moonrise.common.util.TickThre private WatchdogThread(long timeoutTime, boolean restart) { - super( "Paper Watchdog Thread" ); + super( "Watchdog Thread" ); // Leaf - Purpur - use a generic name this.timeoutTime = timeoutTime; this.restart = restart; earlyWarningEvery = Math.min(io.papermc.paper.configuration.GlobalConfiguration.get().watchdog.earlyWarningEvery, timeoutTime); // Paper @@ -160,15 +160,15 @@ public class WatchdogThread extends ca.spottedleaf.moonrise.common.util.TickThre We do not want people to report thread issues to Paper, but we do want people to report thread issues to Gale. */ - log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug. This could be a Gale bug." ); // Paper + log.log( Level.SEVERE, "The server has stopped responding! This is (probably) not a Paper bug. This could be a Leaf bug." ); // Paper // Leaf // Gale end - branding changes log.log( Level.SEVERE, "If you see a plugin in the Server thread dump below, then please report it to that author" ); log.log( Level.SEVERE, "\t *Especially* if it looks like HTTP or MySQL operations are occurring" ); log.log( Level.SEVERE, "If you see a world save or edit, then it means you did far more than your server can handle at once" ); log.log( Level.SEVERE, "\t If this is the case, consider increasing timeout-time in spigot.yml but note that this will replace the crash with LARGE lag spikes" ); - log.log( Level.SEVERE, "If you are unsure or think this is a Gale bug, please report this to https://github.com/GaleMC/Gale/issues - and if you think this is a Paper bug, please report this to https://github.com/PaperMC/Paper/issues" ); // Gale - branding changes + log.log( Level.SEVERE, "If you are unsure or think this is a Leaf bug, please report this to https://github.com/Winds-Studio/Leaf/issues - and if you think this is a Paper bug, please report this to https://github.com/PaperMC/Paper/issues" ); // Gale - branding changes // Leaf log.log( Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports" ); - log.log( Level.SEVERE, "Gale version: " + Bukkit.getServer().getVersion() ); // Gale - branding changes + log.log( Level.SEVERE, "Leaf version: " + Bukkit.getServer().getVersion() ); // Gale - branding changes // Leaf // if ( net.minecraft.world.level.Level.lastPhysicsProblem != null ) { @@ -195,13 +195,13 @@ public class WatchdogThread extends ca.spottedleaf.moonrise.common.util.TickThre We do not want people to report thread issues to Paper, but we do want people to report thread issues to Gale. */ - log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues - THIS IS NOT A PAPER BUG OR CRASH - " + Bukkit.getServer().getVersion() + " ---"); + log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues - THIS IS NOT A PAPER BUG OR CRASH - " + Bukkit.getServer().getVersion() + " ---"); // Leaf // Gale end - branding changes log.log(Level.SEVERE, "The server has not responded for " + (currentTime - lastTick) / 1000 + " seconds! Creating thread dump"); } // Paper end - Different message for short timeout log.log( Level.SEVERE, "------------------------------" ); - log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Gale!):" ); // Paper // Gale - branding changes + log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Leaf!):" ); // Paper // Gale - branding changes // Leaf ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkTaskScheduler.dumpAllChunkLoadInfo(MinecraftServer.getServer(), isLongTimeout); // Paper - rewrite chunk system this.dumpTickingInfo(); // Paper - log detailed tick information WatchdogThread.dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().serverThread.getId(), Integer.MAX_VALUE ), log ); @@ -222,7 +222,7 @@ public class WatchdogThread extends ca.spottedleaf.moonrise.common.util.TickThre We do not want people to report thread issues to Paper, but we do want people to report thread issues to Gale. */ - log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Gale bug, please report it at https://github.com/GaleMC/Gale/issues - THIS IS NOT A PAPER BUG OR CRASH ---"); + log.log(Level.SEVERE, "--- DO NOT REPORT THIS TO PAPER - If you think this is a Leaf bug, please report it at https://github.com/Winds-Studio/Leaf/issues - THIS IS NOT A PAPER BUG OR CRASH ---"); // Leaf // Gale end - branding changes } diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png index e7e9fd9a6077535b89c6c9d7b0164e8b87c54bed..9e698edad90ebcd641fc59ade84643556b427070 100644 GIT binary patch literal 19657 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 Qng9R*07*qoM6N<$g0t|Fy8r+H literal 8324 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