diff --git a/patches/api/0046-API-to-geta-plugin-from-class-name.patch b/patches/api/0046-API-to-geta-plugin-from-class-name.patch deleted file mode 100644 index 52a63ef2b..000000000 --- a/patches/api/0046-API-to-geta-plugin-from-class-name.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Mon, 5 Jul 2021 00:58:48 -0500 -Subject: [PATCH] API to geta plugin from class name - - -diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -index 0e25119564dfa9cb12f3c5dc5f653d7f2c147a9d..ce9680f93886499519bca3934239bc24a972c745 100644 ---- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java -+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java -@@ -923,4 +923,18 @@ public final class SimplePluginManager implements PluginManager { - } - // Paper end - -+ // Purpur start -+ @Nullable -+ public Class getClass(@NotNull String name) { -+ Class clazz; -+ for (Plugin plugin : this.plugins) { -+ clazz = ((org.bukkit.plugin.java.JavaPluginLoader) plugin.getPluginLoader()).getClass(name); -+ if (clazz != null) { -+ return clazz; -+ } -+ } -+ return null; -+ } -+ // Purpur end -+ - } -diff --git a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java -index 04fa3991f6ce4e9dad804f28fc6c947695857089..b0277f39e69945d12e18c393233223855b8a8a4f 100644 ---- a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java -+++ b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java -@@ -426,4 +426,12 @@ public abstract class JavaPlugin extends PluginBase { - } - return plugin; - } -+ -+ // Purpur start -+ @Nullable -+ public static JavaPlugin getProvidingPlugin(@NotNull String name) { -+ Class clazz = ((org.bukkit.plugin.SimplePluginManager) org.bukkit.Bukkit.getPluginManager()).getClass(name); -+ return clazz == null ? null : getProvidingPlugin(clazz); -+ } -+ // Purpur end - } -diff --git a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -index b622cedeeee017f042bcf92485d81832030a8030..b7e415004bd648fe6a9aaec6bb9e66eb5cda16e1 100644 ---- a/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -+++ b/src/main/java/org/bukkit/plugin/java/JavaPluginLoader.java -@@ -435,4 +435,18 @@ public final class JavaPluginLoader implements PluginLoader { - } - } - } -+ -+ // Purpur start -+ @Nullable -+ public Class getClass(@NotNull String name) { -+ Class clazz; -+ for (PluginClassLoader loader : this.loaders) { -+ clazz = loader.getClass(name); -+ if (clazz != null) { -+ return clazz; -+ } -+ } -+ return null; -+ } -+ // Purpur end - } -diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -index 81292899918c4dc880661ee628384cb840a6244f..cf75fa2eb8721d67aa15dbddf0f1da98bfe82733 100644 ---- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -@@ -242,4 +242,11 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot - '}'; - } - // Paper end -+ -+ // Purpur start -+ @Nullable -+ public Class getClass(@NotNull String name) { -+ return this.classes.get(name); -+ } -+ // Purpur end - } diff --git a/patches/api/0047-Clean-up-version-command-output-for-console.patch b/patches/api/0046-Clean-up-version-command-output-for-console.patch similarity index 100% rename from patches/api/0047-Clean-up-version-command-output-for-console.patch rename to patches/api/0046-Clean-up-version-command-output-for-console.patch diff --git a/patches/server/0221-Redirect-System.out-calls-to-plugin-loggers.patch b/patches/server/0221-Redirect-System.out-calls-to-plugin-loggers.patch index d83b7908a..0b21261ea 100644 --- a/patches/server/0221-Redirect-System.out-calls-to-plugin-loggers.patch +++ b/patches/server/0221-Redirect-System.out-calls-to-plugin-loggers.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Redirect System.out calls to plugin loggers diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 4a3226b58ee3c11830dabba988b0665dc069559a..cb41bf68e8b24352d8bab6bfe43df4a75ef02c9a 100644 +index 7b66b301b10158e9c715834b24bdfab1610f4a94..d6502173bebba1a1c62deea2e14b40d7942736f6 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -178,8 +178,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -21,10 +21,10 @@ index 4a3226b58ee3c11830dabba988b0665dc069559a..cb41bf68e8b24352d8bab6bfe43df4a7 thread.setDaemon(true); diff --git a/src/main/java/net/pl3x/purpur/PurpurPrintStream.java b/src/main/java/net/pl3x/purpur/PurpurPrintStream.java new file mode 100644 -index 0000000000000000000000000000000000000000..17030b88d80bfdfc5790b3f63ea006756ef26d90 +index 0000000000000000000000000000000000000000..42dfcb704dd3aeb1843db368054925ed1962971a --- /dev/null +++ b/src/main/java/net/pl3x/purpur/PurpurPrintStream.java -@@ -0,0 +1,70 @@ +@@ -0,0 +1,65 @@ +/* + * MIT License + * @@ -56,7 +56,6 @@ index 0000000000000000000000000000000000000000..17030b88d80bfdfc5790b3f63ea00675 + +import java.io.OutputStream; +import java.io.PrintStream; -+import java.util.Arrays; +import java.util.function.BiConsumer; +import java.util.logging.Logger; + @@ -67,6 +66,7 @@ index 0000000000000000000000000000000000000000..17030b88d80bfdfc5790b3f63ea00675 + */ + +public class PurpurPrintStream extends PrintStream { ++ private static final StackWalker STACKWALKER = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE); + private final BiConsumer consumer; + + public PurpurPrintStream(@NotNull OutputStream out, BiConsumer consumer) { @@ -76,22 +76,17 @@ index 0000000000000000000000000000000000000000..17030b88d80bfdfc5790b3f63ea00675 + + @Override + public void println(String line) { -+ // Get the current stack trace and the calling method (index 2) -+ StackTraceElement element = Thread.currentThread().getStackTrace()[2]; + try { -+ // Get the class name at that index and the JavaPlugin that "owns" it -+ JavaPlugin plugin = JavaPlugin.getProvidingPlugin(element.getClassName()); ++ // Get the the JavaPlugin that "owns" the calling class ++ JavaPlugin plugin = JavaPlugin.getProvidingPlugin(STACKWALKER.getCallerClass()); + -+ if (plugin != null) { -+ // Instead of just printing the message, send it to the plugin's logger -+ consumer.accept(plugin.getLogger(), line); -+ return; -+ } ++ // Instead of just printing the message, send it to the plugin's logger ++ consumer.accept(plugin.getLogger(), line); + } catch (Throwable ignore) { ++ // If anything happens, the calling class doesn't exist, there is no JavaPlugin that "owns" the calling class, etc ++ // Just print out normally, with some added information ++ StackTraceElement element = Thread.currentThread().getStackTrace()[2]; ++ consumer.accept(Bukkit.getLogger(), String.format("(%s:%d) %s", element.getClassName(), element.getLineNumber(), line)); + } -+ -+ // If anything happens, the calling class doesn't exist, there is no JavaPlugin that "owns" the calling class, etc -+ // Just print to Bukkit logger, with some added information -+ consumer.accept(Bukkit.getLogger(), String.format("(%s:%d) %s", element.getClassName(), element.getLineNumber(), line)); + } +}