96d5e6ca48
Currently includes generated key holder classes for types used in the Registry Modification API
116 Zeilen
6.0 KiB
Diff
116 Zeilen
6.0 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Minecrell <minecrell@minecrell.net>
|
|
Date: Thu, 21 Sep 2017 19:41:20 +0200
|
|
Subject: [PATCH] Add workaround for plugins modifying the parent of the plugin
|
|
logger
|
|
|
|
Essentials uses a custom logger name ("Essentials") instead of the
|
|
plugin logger. Log messages are redirected to the plugin logger by
|
|
setting the parent of the "Essentials" logger to the plugin logger.
|
|
|
|
With our changes, the plugin logger is now also called "Essentials",
|
|
resulting in an infinite loop. Make sure plugins can't change the
|
|
parent of the plugin logger to avoid this.
|
|
|
|
diff --git a/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java b/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java
|
|
new file mode 100644
|
|
index 0000000000000000000000000000000000000000..087ee57fe5485bc760fadd45a176d4d90a18f9f8
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java
|
|
@@ -0,0 +1,48 @@
|
|
+package com.destroystokyo.paper.utils;
|
|
+
|
|
+import io.papermc.paper.plugin.configuration.PluginMeta;
|
|
+import org.bukkit.plugin.PluginDescriptionFile;
|
|
+
|
|
+import java.util.logging.Level;
|
|
+import java.util.logging.LogManager;
|
|
+import java.util.logging.Logger;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+/**
|
|
+ * Prevents plugins (e.g. Essentials) from changing the parent of the plugin logger.
|
|
+ */
|
|
+public class PaperPluginLogger extends Logger {
|
|
+
|
|
+ @Deprecated(forRemoval = true)
|
|
+ @NotNull
|
|
+ public static Logger getLogger(@NotNull PluginDescriptionFile description) {
|
|
+ return getLogger((PluginMeta) description);
|
|
+ }
|
|
+
|
|
+ @NotNull
|
|
+ public static Logger getLogger(@NotNull PluginMeta meta) {
|
|
+ Logger logger = new PaperPluginLogger(meta);
|
|
+ if (!LogManager.getLogManager().addLogger(logger)) {
|
|
+ // Disable this if it's going to happen across reloads anyways...
|
|
+ //logger.log(Level.WARNING, "Could not insert plugin logger - one was already found: {}", LogManager.getLogManager().getLogger(this.getName()));
|
|
+ logger = LogManager.getLogManager().getLogger(meta.getLoggerPrefix() != null ? meta.getLoggerPrefix() : meta.getName());
|
|
+ }
|
|
+
|
|
+ return logger;
|
|
+ }
|
|
+
|
|
+ private PaperPluginLogger(@NotNull PluginMeta meta) {
|
|
+ super(meta.getLoggerPrefix() != null ? meta.getLoggerPrefix() : meta.getName(), null);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setParent(@NotNull Logger parent) {
|
|
+ if (getParent() != null) {
|
|
+ warning("Ignoring attempt to change parent of plugin logger");
|
|
+ } else {
|
|
+ this.log(Level.FINE, "Setting plugin logger parent to {0}", parent);
|
|
+ super.setParent(parent);
|
|
+ }
|
|
+ }
|
|
+
|
|
+}
|
|
diff --git a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
|
|
index 7cd9f98c042dc2bb80876af35c755f81bef34651..5cd236965de12392d8c7aa81307c0ff1cc8673b1 100644
|
|
--- a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
|
|
+++ b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
|
|
@@ -291,10 +291,10 @@ public abstract class JavaPlugin extends PluginBase {
|
|
.orElseThrow();
|
|
}
|
|
public final void init(@NotNull PluginLoader loader, @NotNull Server server, @NotNull PluginDescriptionFile description, @NotNull File dataFolder, @NotNull File file, @NotNull ClassLoader classLoader) {
|
|
- init(server, description, dataFolder, file, classLoader, description);
|
|
+ init(server, description, dataFolder, file, classLoader, description, com.destroystokyo.paper.utils.PaperPluginLogger.getLogger(description));
|
|
this.pluginMeta = description;
|
|
}
|
|
- public final void init(@NotNull Server server, @NotNull PluginDescriptionFile description, @NotNull File dataFolder, @NotNull File file, @NotNull ClassLoader classLoader, @Nullable io.papermc.paper.plugin.configuration.PluginMeta configuration) {
|
|
+ public final void init(@NotNull Server server, @NotNull PluginDescriptionFile description, @NotNull File dataFolder, @NotNull File file, @NotNull ClassLoader classLoader, @Nullable io.papermc.paper.plugin.configuration.PluginMeta configuration, @NotNull Logger logger) {
|
|
// Paper end
|
|
this.loader = DummyPluginLoaderImplHolder.INSTANCE; // Paper
|
|
this.server = server;
|
|
@@ -304,7 +304,7 @@ public abstract class JavaPlugin extends PluginBase {
|
|
this.classLoader = classLoader;
|
|
this.configFile = new File(dataFolder, "config.yml");
|
|
this.pluginMeta = configuration; // Paper
|
|
- this.logger = Logger.getLogger(description.getPrefix() != null ? description.getPrefix() : description.getName()); // Paper - Handle plugin prefix in implementation
|
|
+ this.logger = logger; // Paper
|
|
}
|
|
|
|
/**
|
|
diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
index 74b6581a97a092c44a0876e7981ff8a8e6153100..d6d3e1332e51adc5611543b2a6689efa5921a9f2 100644
|
|
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
@@ -67,6 +67,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
|
|
this.url = file.toURI().toURL();
|
|
this.libraryLoader = libraryLoader;
|
|
|
|
+ this.logger = com.destroystokyo.paper.utils.PaperPluginLogger.getLogger(description); // Paper - Register logger early
|
|
// Paper start
|
|
this.dependencyContext = dependencyContext;
|
|
this.classLoaderGroup = io.papermc.paper.plugin.provider.classloader.PaperClassLoaderStorage.instance().registerSpigotGroup(this);
|
|
@@ -262,7 +263,7 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
|
|
pluginState = new IllegalStateException("Initial initialization");
|
|
this.pluginInit = javaPlugin;
|
|
|
|
- javaPlugin.init(null, org.bukkit.Bukkit.getServer(), description, dataFolder, file, this); // Paper
|
|
+ javaPlugin.init(org.bukkit.Bukkit.getServer(), description, dataFolder, file, this, description, this.logger); // Paper
|
|
}
|
|
|
|
// Paper start
|