Fix patch, fix .gitattributes file name
This commit is contained in:
		
					parent
					
						
							
								3f41a42781
							
						
					
				
			
			
				commit
				
					
						21c7efe18c
					
				
			
		
					 4 changed files with 6 additions and 131 deletions
				
			
		
							
								
								
									
										0
									
								
								.giattributes → .gitattributes
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										0
									
								
								.giattributes → .gitattributes
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -1,117 +0,0 @@
 | 
				
			||||||
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..0000000000000000000000000000000000000000
 | 
					 | 
				
			||||||
--- /dev/null
 | 
					 | 
				
			||||||
+++ b/src/main/java/com/destroystokyo/paper/utils/PaperPluginLogger.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@
 | 
					 | 
				
			||||||
+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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
					 | 
				
			||||||
--- a/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
 | 
					 | 
				
			||||||
+++ b/src/main/java/org/bukkit/plugin/java/JavaPlugin.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ 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();
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
					 | 
				
			||||||
--- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
 | 
					 | 
				
			||||||
+++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
 | 
					 | 
				
			||||||
     private JavaPlugin pluginInit;
 | 
					 | 
				
			||||||
     private IllegalStateException pluginState;
 | 
					 | 
				
			||||||
     private final Set<String> seenIllegalAccess = Collections.newSetFromMap(new ConcurrentHashMap<>());
 | 
					 | 
				
			||||||
+    private java.util.logging.Logger logger; // Paper - add field
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
     static {
 | 
					 | 
				
			||||||
         ClassLoader.registerAsParallelCapable();
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public final class PluginClassLoader extends URLClassLoader { // Spigot
 | 
					 | 
				
			||||||
         this.url = file.toURI().toURL();
 | 
					 | 
				
			||||||
         this.libraryLoader = libraryLoader;
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
+        this.logger = com.destroystokyo.paper.utils.PaperPluginLogger.getLogger(description); // Paper - Register logger early
 | 
					 | 
				
			||||||
+
 | 
					 | 
				
			||||||
         try {
 | 
					 | 
				
			||||||
             Class<?> jarClass;
 | 
					 | 
				
			||||||
             try {
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ 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);
 | 
					 | 
				
			||||||
     }
 | 
					 | 
				
			||||||
 }
 | 
					 | 
				
			||||||
| 
						 | 
					@ -41,13 +41,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 | 
				
			||||||
--- a/src/main/java/net/minecraft/world/level/BaseSpawner.java
 | 
					--- a/src/main/java/net/minecraft/world/level/BaseSpawner.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java
 | 
					+++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public abstract class BaseSpawner {
 | 
					@@ -0,0 +0,0 @@ public abstract class BaseSpawner {
 | 
				
			||||||
                             if (this.nextSpawnData.getTag().size() == 1 && this.nextSpawnData.getTag().contains("id", 8)) {
 | 
					 | 
				
			||||||
                                 ((Mob) entity).finalizeSpawn(world, world.getCurrentDifficultyAt(entity.blockPosition()), MobSpawnType.SPAWNER, (SpawnGroupData) null, (CompoundTag) null);
 | 
					 | 
				
			||||||
                             }
 | 
					                             }
 | 
				
			||||||
+                            entity.spawnedViaMobSpawner = true; // Paper
 | 
					                             // Spigot End
 | 
				
			||||||
                             // Spigot Start
 | 
					                         }
 | 
				
			||||||
                             if (entityinsentient.level.spigotConfig.nerfSpawnerMobs) {
 | 
					+                        entity.spawnedViaMobSpawner = true; // Paper
 | 
				
			||||||
                                 entityinsentient.aware = false;
 | 
					                         // Spigot Start
 | 
				
			||||||
 | 
					                         if (org.bukkit.craftbukkit.event.CraftEventFactory.callSpawnerSpawnEvent(entity, pos).isCancelled()) {
 | 
				
			||||||
 | 
					                             Entity vehicle = entity.getVehicle();
 | 
				
			||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
 | 
					diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
 | 
				
			||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
					index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
				
			||||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
 | 
					--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,14 +8,6 @@ diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main
 | 
				
			||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
					index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
				
			||||||
--- a/src/main/java/net/minecraft/world/level/BaseSpawner.java
 | 
					--- a/src/main/java/net/minecraft/world/level/BaseSpawner.java
 | 
				
			||||||
+++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java
 | 
					+++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java
 | 
				
			||||||
@@ -0,0 +0,0 @@ public abstract class BaseSpawner {
 | 
					 | 
				
			||||||
                             }
 | 
					 | 
				
			||||||
                             // Spigot End
 | 
					 | 
				
			||||||
                         }
 | 
					 | 
				
			||||||
+                        flag = true; // Paper
 | 
					 | 
				
			||||||
                         // Spigot Start
 | 
					 | 
				
			||||||
                         if (org.bukkit.craftbukkit.event.CraftEventFactory.callSpawnerSpawnEvent(entity, pos).isCancelled()) {
 | 
					 | 
				
			||||||
                             Entity vehicle = entity.getVehicle();
 | 
					 | 
				
			||||||
@@ -0,0 +0,0 @@ public abstract class BaseSpawner {
 | 
					@@ -0,0 +0,0 @@ public abstract class BaseSpawner {
 | 
				
			||||||
                             ((Mob) entity).spawnAnim();
 | 
					                             ((Mob) entity).spawnAnim();
 | 
				
			||||||
                         }
 | 
					                         }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue