Upstream has released updates that appears to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 9d0221aa API to get client side view distance. 9be7f0ea SPIGOT-4395: Additions to PlayerBedEnterEvent. 01e534c6 Minor cosmetic cleanups to imports etc CraftBukkit Changes: 96c461b3 API to get client side view distance. e2785f4e Remove note about development build a8000588 SPIGOT-4395: Additions to PlayerBedEnterEvent. Spigot Changes: 117d4f7e Rebuild patches
119 lines
5 KiB
Diff
119 lines
5 KiB
Diff
From 62be624eee349e6f2381582d772249d57a485fc7 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 000000000..d052b2f55
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java
|
|
@@ -0,0 +1,39 @@
|
|
+package com.destroystokyo.paper.utils;
|
|
+
|
|
+import org.bukkit.plugin.PluginDescriptionFile;
|
|
+
|
|
+import java.util.logging.Level;
|
|
+import java.util.logging.LogManager;
|
|
+import java.util.logging.Logger;
|
|
+
|
|
+/**
|
|
+ * Prevents plugins (e.g. Essentials) from changing the parent of the plugin logger.
|
|
+ */
|
|
+public class PaperPluginLogger extends Logger {
|
|
+
|
|
+ public static Logger getLogger(PluginDescriptionFile description) {
|
|
+ Logger logger = new PaperPluginLogger(description);
|
|
+ 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(description.getPrefix() != null ? description.getPrefix() : description.getName());
|
|
+ }
|
|
+
|
|
+ return logger;
|
|
+ }
|
|
+
|
|
+ private PaperPluginLogger(PluginDescriptionFile description) {
|
|
+ super(description.getPrefix() != null ? description.getPrefix() : description.getName(), null);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setParent(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 a81dae439..15f22ade2 100644
|
|
--- a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
|
|
+++ b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
|
|
@@ -42,7 +42,7 @@ public abstract class JavaPlugin extends PluginBase {
|
|
private boolean naggable = true;
|
|
private FileConfiguration newConfig = null;
|
|
private File configFile = null;
|
|
- private Logger logger = null; // Paper - PluginLogger -> Logger
|
|
+ Logger logger = null; // Paper - PluginLogger -> Logger, package-private
|
|
|
|
public JavaPlugin() {
|
|
final ClassLoader classLoader = this.getClass().getClassLoader();
|
|
@@ -267,8 +267,11 @@ public abstract class JavaPlugin extends PluginBase {
|
|
this.dataFolder = dataFolder;
|
|
this.classLoader = classLoader;
|
|
this.configFile = new File(dataFolder, "config.yml");
|
|
- // Paper - Handle plugin prefix in implementation
|
|
- this.logger = Logger.getLogger(description.getPrefix() != null ? description.getPrefix() : description.getName());
|
|
+ // Paper start
|
|
+ if (this.logger == null) {
|
|
+ this.logger = com.destroystokyo.paper.utils.PaperPluginLogger.getLogger(this.description);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
|
|
/**
|
|
diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
index 44093af29..ab79b71bf 100644
|
|
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
@@ -36,6 +36,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
|
|
final JavaPlugin plugin;
|
|
private JavaPlugin pluginInit;
|
|
private IllegalStateException pluginState;
|
|
+ private java.util.logging.Logger logger; // Paper - add field
|
|
|
|
// Spigot Start
|
|
static
|
|
@@ -73,6 +74,8 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
|
|
this.manifest = jar.getManifest();
|
|
this.url = file.toURI().toURL();
|
|
|
|
+ this.logger = com.destroystokyo.paper.utils.PaperPluginLogger.getLogger(description); // Paper - Register logger early
|
|
+
|
|
try {
|
|
Class<?> jarClass;
|
|
try {
|
|
@@ -189,6 +192,7 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
|
|
pluginState = new IllegalStateException("Initial initialization");
|
|
this.pluginInit = javaPlugin;
|
|
|
|
+ javaPlugin.logger = this.logger; // Paper - set logger
|
|
javaPlugin.init(loader, loader.server, description, dataFolder, file, this);
|
|
}
|
|
}
|
|
--
|
|
2.19.1
|
|
|