mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-29 11:42:55 +01:00
0976d52bbd
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 Please note that this build includes changes to meet upstreams requirements for nullability annotations. While we aim for a level of accuracy, these might not be 100% correct, if there are any issues, please speak to us on discord, or open an issue on the tracker to discuss. Bukkit Changes: 9a6a1de3 Remove nullability annotations from enum constructors 3f0591ea SPIGOT-2540: Add nullability annotations to entire Bukkit API CraftBukkit Changes:8d8475fc
SPIGOT-4666: Force parameter in HumanEntity#sleep8b1588e2
Fix ExplosionPrimeEvent#setFire not working with EnderCrystals39a287b7
Don't ignore newlines in PlayerListHeader/Footer Spigot Changes: cf694d87 Add nullability annotations
120 lines
5.1 KiB
Diff
120 lines
5.1 KiB
Diff
From ab3fa3cb5c5e5389c8fb4900b9e5fb6800e11be1 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..76f2cb9cd
|
|
--- /dev/null
|
|
+++ b/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java
|
|
@@ -0,0 +1,41 @@
|
|
+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;
|
|
+import org.jetbrains.annotations.NotNull;
|
|
+
|
|
+/**
|
|
+ * Prevents plugins (e.g. Essentials) from changing the parent of the plugin logger.
|
|
+ */
|
|
+public class PaperPluginLogger extends Logger {
|
|
+
|
|
+ @NotNull
|
|
+ public static Logger getLogger(@NotNull 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(@NotNull PluginDescriptionFile description) {
|
|
+ super(description.getPrefix() != null ? description.getPrefix() : description.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 9a3427882..96ebe72ca 100644
|
|
--- a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
|
|
+++ b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
|
|
@@ -44,7 +44,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();
|
|
@@ -278,8 +278,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 c39fcac5a..0df1926fa 100644
|
|
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
@@ -38,6 +38,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
|
|
|
|
static {
|
|
ClassLoader.registerAsParallelCapable();
|
|
@@ -55,6 +56,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 {
|
|
@@ -172,6 +175,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.21.0
|
|
|