mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-26 20:46:59 +01:00
5c7081fecc
* Updated Upstream (Bukkit/CraftBukkit) 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: 45690fe9 SPIGOT-5047: Correct slot types for 1.14 inventories CraftBukkit Changes:4090d01f
SPIGOT-5047: Correct slot types for 1.14 inventoriese8c08362
SPIGOT-5046: World#getLoadedChunks returning inaccessible cached chunks.d445af3b
SPIGOT-5067: Add item meta for 1.14 spawn eggs * Bring Chunk load checks in-line with spigot As of the last upstream merge spigot now checks ticket level status when returning loaded chunks for a world from api. Now our checks will respect that decision. * Fix spawn ticket levels Vanilla would keep the inner chunks of spawn available for ticking, however my changes made all chunks non-ticking. Resolve by changing ticket levels for spawn chunks inside the border to respect this behavior. * Make World#getChunkIfLoadedImmediately return only entity ticking chunks Mojang appears to be using chunks with level > 33 (non-ticking chunks) as cached chunks and not actually loaded chunks. * Bring all loaded checks in line with spigot Loaded chunks must be at least border chunks, or level <= 33
121 lines
5.1 KiB
Diff
121 lines
5.1 KiB
Diff
From f7565bc8c0d326ebd6500309d2d2cbc4b6ee51c9 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 bb2e55e97..04fa3991f 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();
|
|
@@ -276,8 +276,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 b859796b4..6f39f571d 100644
|
|
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
|
|
@@ -37,6 +37,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();
|
|
@@ -54,6 +55,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 {
|
|
@@ -171,6 +174,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
|
|
|