2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								From: Jason Penilla <11360596+jpenilla@users.noreply.github.com>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								Date: Sun, 20 Jun 2021 18:19:09 -0700
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								Subject: [PATCH] Deobfuscate stacktraces in log messages, crash reports, and
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 etc.
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								diff --git a/build.gradle.kts b/build.gradle.kts
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 17:27:32 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index cce667165ade3e42792516a4721c74b35e7caa2c..65fb16941fa7e3a9b300696fb6bd2b562bca48cd 100644
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								--- a/build.gradle.kts
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/build.gradle.kts
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-28 00:43:17 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -45,6 +45,7 @@ dependencies {
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     testImplementation("org.mockito:mockito-core:5.11.0")
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     testImplementation("org.ow2.asm:asm-tree:9.7")
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     testImplementation("org.junit-pioneer:junit-pioneer:2.2.0") // Paper - CartesianTest
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    implementation("net.neoforged:srgutils:1.0.9") // Paper - mappings handling
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 }
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 14:02:33 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 paperweight {
							 
						 
					
						
							
								
									
										
										
										
											2023-07-01 22:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/log4jPlugins/java/io/papermc/paper/logging/StacktraceDeobfuscatingRewritePolicy.java b/src/log4jPlugins/java/io/papermc/paper/logging/StacktraceDeobfuscatingRewritePolicy.java
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								new file mode 100644
							 
						 
					
						
							
								
									
										
										
										
											2023-07-01 22:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index 0000000000000000000000000000000000000000..66b6011ee3684695b2ab9292961c80bf2a420ee9
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								--- /dev/null
 
							 
						 
					
						
							
								
									
										
										
										
											2023-07-01 22:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+++ b/src/log4jPlugins/java/io/papermc/paper/logging/StacktraceDeobfuscatingRewritePolicy.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +1,66 @@
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+package io.papermc.paper.logging;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2023-07-01 22:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import java.lang.invoke.MethodHandle;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import java.lang.invoke.MethodHandles;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import java.lang.invoke.VarHandle;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import org.apache.logging.log4j.core.Core;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.apache.logging.log4j.core.LogEvent;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.apache.logging.log4j.core.appender.rewrite.RewritePolicy;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.apache.logging.log4j.core.config.plugins.Plugin;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.apache.logging.log4j.core.config.plugins.PluginFactory;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-30 13:05:51 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.checkerframework.checker.nullness.qual.NonNull;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+@Plugin(
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    name = "StacktraceDeobfuscatingRewritePolicy",
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    category = Core.CATEGORY_NAME,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    elementType = "rewritePolicy",
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    printObject = true
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+public final class StacktraceDeobfuscatingRewritePolicy implements RewritePolicy {
 
							 
						 
					
						
							
								
									
										
										
										
											2023-07-01 22:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    private static final MethodHandle DEOBFUSCATE_THROWABLE;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    static {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        try {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final Class<?> cls = Class.forName("io.papermc.paper.util.StacktraceDeobfuscator");
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final MethodHandles.Lookup lookup = MethodHandles.lookup();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final VarHandle instanceHandle = lookup.findStaticVarHandle(cls, "INSTANCE", cls);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final Object deobfuscator = instanceHandle.get();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            DEOBFUSCATE_THROWABLE = lookup
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                .unreflect(cls.getDeclaredMethod("deobfuscateThrowable", Throwable.class))
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                .bindTo(deobfuscator);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        } catch (final ReflectiveOperationException ex) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            throw new IllegalStateException(ex);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-30 13:05:51 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    private StacktraceDeobfuscatingRewritePolicy() {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    @Override
 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-30 13:05:51 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    public @NonNull LogEvent rewrite(final @NonNull LogEvent rewrite) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        final Throwable thrown = rewrite.getThrown();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        if (thrown != null) {
 
							 
						 
					
						
							
								
									
										
										
										
											2023-07-01 22:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            deobfuscateThrowable(thrown);
 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-30 13:05:51 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            return new Log4jLogEvent.Builder(rewrite)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                .setThrownProxy(null)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                .build();
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return rewrite;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2023-07-01 22:00:46 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    private static void deobfuscateThrowable(final Throwable thrown) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        try {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            DEOBFUSCATE_THROWABLE.invoke(thrown);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        } catch (final Error e) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            throw e;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        } catch (final Throwable e) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            throw new RuntimeException(e);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    @PluginFactory
 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-30 13:05:51 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    public static @NonNull StacktraceDeobfuscatingRewritePolicy createPolicy() {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        return new StacktraceDeobfuscatingRewritePolicy();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+}
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/io/papermc/paper/util/ObfHelper.java b/src/main/java/io/papermc/paper/util/ObfHelper.java
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								new file mode 100644
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index 0000000000000000000000000000000000000000..9e6d48335b37fa5204bfebf396d748089884555b
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								--- /dev/null
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/io/papermc/paper/util/ObfHelper.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -0,0 +1,156 @@
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+package io.papermc.paper.util;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+import java.io.IOException;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import java.io.InputStream;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import java.util.HashMap;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import java.util.HashSet;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+import java.util.Map;
 
							 
						 
					
						
							
								
									
										
										
										
											2023-11-28 14:18:21 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import java.util.Objects;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-14 03:06:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import java.util.Set;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import java.util.stream.Collectors;
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import net.neoforged.srgutils.IMappingFile;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import org.checkerframework.checker.nullness.qual.NonNull;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.checkerframework.checker.nullness.qual.Nullable;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.checkerframework.framework.qual.DefaultQualifier;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+@DefaultQualifier(NonNull.class)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+public enum ObfHelper {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    INSTANCE;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-14 03:06:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    private final @Nullable Map<String, ClassMapping> mappingsByObfName;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    private final @Nullable Map<String, ClassMapping> mappingsByMojangName;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    ObfHelper() {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-14 03:06:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        final @Nullable Set<ClassMapping> maps = loadMappingsIfPresent();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        if (maps != null) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            this.mappingsByObfName = maps.stream().collect(Collectors.toUnmodifiableMap(ClassMapping::obfName, map -> map));
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            this.mappingsByMojangName = maps.stream().collect(Collectors.toUnmodifiableMap(ClassMapping::mojangName, map -> map));
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-14 03:06:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        } else {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            this.mappingsByObfName = null;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            this.mappingsByMojangName = null;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    public @Nullable Map<String, ClassMapping> mappingsByObfName() {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return this.mappingsByObfName;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    public @Nullable Map<String, ClassMapping> mappingsByMojangName() {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return this.mappingsByMojangName;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-14 03:06:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    /**
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     * Attempts to get the obf name for a given class by its Mojang name. Will
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     * return the input string if mappings are not present.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     *
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     * @param fullyQualifiedMojangName fully qualified class name (dotted)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     * @return mapped or original fully qualified (dotted) class name
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     */
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    public String reobfClassName(final String fullyQualifiedMojangName) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        if (this.mappingsByMojangName == null) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            return fullyQualifiedMojangName;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final ClassMapping map = this.mappingsByMojangName.get(fullyQualifiedMojangName);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        if (map == null) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            return fullyQualifiedMojangName;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return map.obfName();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    /**
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     * Attempts to get the Mojang name for a given class by its obf name. Will
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     * return the input string if mappings are not present.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     *
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     * @param fullyQualifiedObfName fully qualified class name (dotted)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     * @return mapped or original fully qualified (dotted) class name
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+     */
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    public String deobfClassName(final String fullyQualifiedObfName) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        if (this.mappingsByObfName == null) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            return fullyQualifiedObfName;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final ClassMapping map = this.mappingsByObfName.get(fullyQualifiedObfName);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        if (map == null) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            return fullyQualifiedObfName;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return map.mojangName();
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-14 03:06:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    private static @Nullable Set<ClassMapping> loadMappingsIfPresent() {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-09 11:57:16 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        try (final @Nullable InputStream mappingsInputStream = ObfHelper.class.getClassLoader().getResourceAsStream("META-INF/mappings/reobf.tiny")) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            if (mappingsInputStream == null) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                return null;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            final IMappingFile mappings = IMappingFile.load(mappingsInputStream); // Mappings are mojang->spigot
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            final Set<ClassMapping> classes = new HashSet<>();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final StringPool pool = new StringPool();
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            for (final IMappingFile.IClass cls : mappings.getClasses()) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                final Map<String, String> methods = new HashMap<>();
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                final Map<String, String> fields = new HashMap<>();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                final Map<String, String> strippedMethods = new HashMap<>();
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                for (final IMappingFile.IMethod methodMapping : cls.getMethods()) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                    methods.put(
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                            pool.string(methodKey(
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                                    Objects.requireNonNull(methodMapping.getMapped()),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                                    Objects.requireNonNull(methodMapping.getMappedDescriptor())
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                            )),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                            pool.string(Objects.requireNonNull(methodMapping.getOriginal()))
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                    );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                    strippedMethods.put(
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                            pool.string(pool.string(strippedMethodKey(
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                                    methodMapping.getMapped(),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                                    methodMapping.getDescriptor()
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                            ))),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                            pool.string(methodMapping.getOriginal())
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                    );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                for (final IMappingFile.IField field : cls.getFields()) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                    fields.put(
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                            pool.string(field.getMapped()),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                            pool.string(field.getOriginal())
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                    );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                final ClassMapping map = new ClassMapping(
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                        Objects.requireNonNull(cls.getMapped()).replace('/', '.'),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                        Objects.requireNonNull(cls.getOriginal()).replace('/', '.'),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                        Map.copyOf(methods),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                        Map.copyOf(fields),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                        Map.copyOf(strippedMethods)
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                );
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                classes.add(map);
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            return Set.copyOf(classes);
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+        } catch (final IOException ex) {
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            System.err.println("Failed to load mappings.");
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            ex.printStackTrace();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            return null;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    public static String strippedMethodKey(final String methodName, final String methodDescriptor) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final String methodKey = methodKey(methodName, methodDescriptor);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final int returnDescriptorEnd = methodKey.indexOf(')');
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return methodKey.substring(0, returnDescriptorEnd + 1);
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    public static String methodKey(final String methodName, final String methodDescriptor) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return methodName + methodDescriptor;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    public record ClassMapping(
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            String obfName,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            String mojangName,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            Map<String, String> methodsByObf,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            Map<String, String> fieldsByObf,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            // obf name with mapped desc to mapped name. return value is excluded from desc as reflection doesn't use it
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            Map<String, String> strippedMethods
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    ) {}
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+}
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/io/papermc/paper/util/StacktraceDeobfuscator.java b/src/main/java/io/papermc/paper/util/StacktraceDeobfuscator.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								new file mode 100644
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index 0000000000000000000000000000000000000000..242811578a786e3807a1a7019d472d5a68f87116
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								--- /dev/null
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/io/papermc/paper/util/StacktraceDeobfuscator.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -0,0 +1,144 @@
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+package io.papermc.paper.util;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-09 01:51:45 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import io.papermc.paper.configuration.GlobalConfiguration;
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import java.io.IOException;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 00:33:08 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import java.io.InputStream;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+import java.util.Collections;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import java.util.LinkedHashMap;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import java.util.Map;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.checkerframework.checker.nullness.qual.NonNull;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.checkerframework.checker.nullness.qual.Nullable;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.checkerframework.framework.qual.DefaultQualifier;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.objectweb.asm.ClassReader;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.objectweb.asm.ClassVisitor;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.objectweb.asm.Label;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.objectweb.asm.MethodVisitor;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.objectweb.asm.Opcodes;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+@DefaultQualifier(NonNull.class)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+public enum StacktraceDeobfuscator {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    INSTANCE;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    private final Map<Class<?>, Int2ObjectMap<String>> lineMapCache = Collections.synchronizedMap(new LinkedHashMap<>(128, 0.75f, true) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        @Override
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        protected boolean removeEldestEntry(final Map.Entry<Class<?>, Int2ObjectMap<String>> eldest) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            return this.size() > 127;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    });
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    public void deobfuscateThrowable(final Throwable throwable) {
 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-09 01:51:45 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        if (GlobalConfiguration.get() != null && !GlobalConfiguration.get().logging.deobfuscateStacktraces) { // handle null as true
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            return;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        throwable.setStackTrace(this.deobfuscateStacktrace(throwable.getStackTrace()));
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final Throwable cause = throwable.getCause();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        if (cause != null) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            this.deobfuscateThrowable(cause);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        for (final Throwable suppressed : throwable.getSuppressed()) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            this.deobfuscateThrowable(suppressed);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    public StackTraceElement[] deobfuscateStacktrace(final StackTraceElement[] traceElements) {
 
							 
						 
					
						
							
								
									
										
										
										
											2022-06-09 01:51:45 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        if (GlobalConfiguration.get() != null && !GlobalConfiguration.get().logging.deobfuscateStacktraces) { // handle null as true
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            return traceElements;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-14 03:06:17 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        final @Nullable Map<String, ObfHelper.ClassMapping> mappings = ObfHelper.INSTANCE.mappingsByObfName();
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        if (mappings == null || traceElements.length == 0) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            return traceElements;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final StackTraceElement[] result = new StackTraceElement[traceElements.length];
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        for (int i = 0; i < traceElements.length; i++) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final StackTraceElement element = traceElements[i];
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final String className = element.getClassName();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final String methodName = element.getMethodName();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            final ObfHelper.ClassMapping classMapping = mappings.get(className);
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            if (classMapping == null) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                result[i] = element;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                continue;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            final Class<?> clazz;
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            try {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                clazz = Class.forName(className);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            } catch (final ClassNotFoundException ex) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                throw new RuntimeException(ex);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            final @Nullable String methodKey = this.determineMethodForLine(clazz, element.getLineNumber());
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final @Nullable String mappedMethodName = methodKey == null ? null : classMapping.methodsByObf().get(methodKey);
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            result[i] = new StackTraceElement(
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                element.getClassLoaderName(),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                element.getModuleName(),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                element.getModuleVersion(),
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                classMapping.mojangName(),
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                mappedMethodName != null ? mappedMethodName : methodName,
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+                sourceFileName(classMapping.mojangName()),
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                element.getLineNumber()
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            );
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return result;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-04 17:23:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    private @Nullable String determineMethodForLine(final Class<?> clazz, final int lineNumber) {
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+        return this.lineMapCache.computeIfAbsent(clazz, StacktraceDeobfuscator::buildLineMap).get(lineNumber);
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-19 19:22:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    private static String sourceFileName(final String fullClassName) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final int dot = fullClassName.lastIndexOf('.');
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final String className = dot == -1
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            ? fullClassName
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            : fullClassName.substring(dot + 1);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final String rootClassName = className.split("\\$")[0];
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return rootClassName + ".java";
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+    private static Int2ObjectMap<String> buildLineMap(final Class<?> key) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final StringPool pool = new StringPool();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final Int2ObjectMap<String> lineMap = new Int2ObjectOpenHashMap<>();
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+        final class LineCollectingMethodVisitor extends MethodVisitor {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            private final String name;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            private final String descriptor;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            LineCollectingMethodVisitor(final String name, final String descriptor) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                super(Opcodes.ASM9);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                this.name = name;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                this.descriptor = descriptor;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            @Override
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            public void visitLineNumber(final int line, final Label start) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                lineMap.put(line, pool.string(ObfHelper.methodKey(this.name, this.descriptor)));
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        final ClassVisitor classVisitor = new ClassVisitor(Opcodes.ASM9) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            @Override
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            public MethodVisitor visitMethod(final int access, final String name, final String descriptor, final String signature, final String[] exceptions) {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+                return new LineCollectingMethodVisitor(name, descriptor);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        };
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        try {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-11-26 00:33:08 -06:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								+            final @Nullable InputStream inputStream = StacktraceDeobfuscator.class.getClassLoader()
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                .getResourceAsStream(key.getName().replace('.', '/') + ".class");
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            if (inputStream == null) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                throw new IllegalStateException("Could not find class file: " + key.getName());
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final byte[] classData;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            try (inputStream) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                classData = inputStream.readAllBytes();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            final ClassReader reader = new ClassReader(classData);
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+            reader.accept(classVisitor, 0);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        } catch (final IOException ex) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            throw new RuntimeException(ex);
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return lineMap;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+}
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-27 13:53:56 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/io/papermc/paper/util/StringPool.java b/src/main/java/io/papermc/paper/util/StringPool.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								new file mode 100644
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								index 0000000000000000000000000000000000000000..c0a486cb46ff30353c3ff09567891cd36238eeb4
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								--- /dev/null
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/io/papermc/paper/util/StringPool.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -0,0 +1,34 @@
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+package io.papermc.paper.util;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import java.util.HashMap;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import java.util.Map;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import java.util.function.Function;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.checkerframework.checker.nullness.qual.NonNull;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+import org.checkerframework.framework.qual.DefaultQualifier;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+/**
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ * De-duplicates {@link String} instances without using {@link String#intern()}.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ *
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ * <p>Interning may not be desired as we may want to use the heap for our pool,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ * so it can be garbage collected as normal, etc.</p>
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ *
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ * <p>Additionally, interning can be slow due to the potentially large size of the
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ * pool (as it is shared for the entire JVM), and because most JVMs implement
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ * it using JNI.</p>
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+ */
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+@DefaultQualifier(NonNull.class)
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+public final class StringPool {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    private final Map<String, String> pool;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    public StringPool() {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        this(new HashMap<>());
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    public StringPool(final Map<String, String> map) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        this.pool = map;
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    public String string(final String string) {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return this.pool.computeIfAbsent(string, Function.identity());
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+    }
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+}
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index a23407fa1b906743890cff74f5051ad55d59c85e..06c514b2d0674cd7df6692981f020437ea0f2f91 100644
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/CrashReport.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/CrashReport.java
 
							 
						 
					
						
							
								
									
										
										
										
											2023-12-05 15:55:31 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -34,6 +34,7 @@ public class CrashReport {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     private final SystemReport systemReport = new SystemReport();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     public CrashReport(String message, Throwable cause) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(cause); // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         this.title = message;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         this.exception = cause;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         this.systemReport.setDetail("CraftBukkit Information", new org.bukkit.craftbukkit.CraftCrashReport()); // CraftBukkit
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 03:20:11 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/CrashReportCategory.java b/src/main/java/net/minecraft/CrashReportCategory.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 10:02:08 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index f367ba058018074bfe6e4fe88bcc875ea9794d9e..2176171954609fd88f97f93408e14e018c1d6eaa 100644
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 03:20:11 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/CrashReportCategory.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/CrashReportCategory.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-12 12:14:06 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -110,6 +110,7 @@ public class CrashReportCategory {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-04 03:20:11 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         } else {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             this.stackTrace = new StackTraceElement[stackTraceElements.length - 3 - ignoredCallCount];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             System.arraycopy(stackTraceElements, 3 + ignoredCallCount, this.stackTrace, 0, this.stackTrace.length);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            this.stackTrace = io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateStacktrace(this.stackTrace); // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             return this.stackTrace.length;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     }
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index 256a983c7345902600d52d7b7e3056162275f4c7..0ccfdceea8e211c595be2dad2392876109b4eeef 100644
 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/network/Connection.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/network/Connection.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -82,13 +82,13 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         marker.add(Connection.PACKET_MARKER);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     });
							 
						 
					
						
							
								
									
										
										
										
											2023-09-21 21:05:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     public static final Supplier<NioEventLoopGroup> NETWORK_WORKER_GROUP = Suppliers.memoize(() -> {
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								-        return new NioEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Client IO #%d").setDaemon(true).build());
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return new NioEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Client IO #%d").setDaemon(true).setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(LOGGER)).build()); // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     });
							 
						 
					
						
							
								
									
										
										
										
											2023-09-21 21:05:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     public static final Supplier<EpollEventLoopGroup> NETWORK_EPOLL_WORKER_GROUP = Suppliers.memoize(() -> {
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								-        return new EpollEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Epoll Client IO #%d").setDaemon(true).build());
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return new EpollEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Epoll Client IO #%d").setDaemon(true).setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(LOGGER)).build()); // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     });
							 
						 
					
						
							
								
									
										
										
										
											2023-09-21 21:05:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     public static final Supplier<DefaultEventLoopGroup> LOCAL_WORKER_GROUP = Suppliers.memoize(() -> {
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								-        return new DefaultEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Local Client IO #%d").setDaemon(true).build());
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return new DefaultEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Local Client IO #%d").setDaemon(true).setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(LOGGER)).build()); // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     });
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     private static final ProtocolInfo<ServerHandshakePacketListener> INITIAL_PROTOCOL = HandshakeProtocols.SERVERBOUND;
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     private final PacketFlow receiving;
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -189,7 +189,7 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 19:21:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-        if (net.minecraft.server.MinecraftServer.getServer().isDebugging()) throwable.printStackTrace(); // Spigot
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        if (net.minecraft.server.MinecraftServer.getServer().isDebugging()) io.papermc.paper.util.TraceUtil.printStackTrace(throwable); // Spigot // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     protected void channelRead0(ChannelHandlerContext channelhandlercontext, Packet<?> packet) {
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index 9249122da7282929f87613f41984b8085d7b53ec..21b8f1913ff54d2b1553826269355da8bdb7f702 100644
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -206,6 +206,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface
 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-13 12:31:02 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         org.spigotmc.SpigotConfig.init((java.io.File) this.options.valueOf("spigot-settings"));
							 
						 
					
						
							
								
									
										
										
										
											2022-06-09 01:51:45 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         org.spigotmc.SpigotConfig.registerCommands();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         // Spigot end
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        io.papermc.paper.util.ObfHelper.INSTANCE.getClass(); // Paper - load mappings for stacktrace deobf and etc.
 
							 
						 
					
						
							
								
									
										
										
										
											2024-01-13 12:31:02 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         // Paper start - initialize global and world-defaults configuration
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         this.paperConfigurations.initializeGlobalConfiguration(this.registryAccess());
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         this.paperConfigurations.initializeWorldDefaultsConfiguration(this.registryAccess());
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index 987360a266a5a870f06929b00c9f451901188fd6..2cf3e79ec5e8706b71d27ebad4668773f0b91195 100644
 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/server/network/ServerConnectionListener.java
 
							 
						 
					
						
							
								
									
										
										
										
											2023-09-21 21:05:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -52,10 +52,10 @@ public class ServerConnectionListener {
 
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2022-02-28 22:43:03 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     private static final Logger LOGGER = LogUtils.getLogger();
							 
						 
					
						
							
								
									
										
										
										
											2023-09-21 21:05:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     public static final Supplier<NioEventLoopGroup> SERVER_EVENT_GROUP = Suppliers.memoize(() -> {
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								-        return new NioEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Server IO #%d").setDaemon(true).build());
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return new NioEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Server IO #%d").setDaemon(true).setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(LOGGER)).build()); // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     });
							 
						 
					
						
							
								
									
										
										
										
											2023-09-21 21:05:18 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								     public static final Supplier<EpollEventLoopGroup> SERVER_EPOLL_EVENT_GROUP = Suppliers.memoize(() -> {
							 
						 
					
						
							
								
									
										
										
										
											2021-12-23 02:32:26 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								-        return new EpollEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Epoll Server IO #%d").setDaemon(true).build());
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        return new EpollEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Epoll Server IO #%d").setDaemon(true).setUncaughtExceptionHandler(new net.minecraft.DefaultUncaughtExceptionHandlerWithName(LOGGER)).build()); // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     final MinecraftServer server;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     public volatile boolean running;
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 19:21:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/net/minecraft/server/players/OldUsersConverter.java b/src/main/java/net/minecraft/server/players/OldUsersConverter.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index 8d06e8d286da2573e40794adab695ff77e5afd86..68551947f5b7d3471f15bd74ccd86519ab34c1c1 100644
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 19:21:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								--- a/src/main/java/net/minecraft/server/players/OldUsersConverter.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/net/minecraft/server/players/OldUsersConverter.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -356,7 +356,7 @@ public class OldUsersConverter {
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 19:21:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                         try {
							 
						 
					
						
							
								
									
										
										
										
											2023-12-05 15:55:31 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                             root = NbtIo.readCompressed(new java.io.FileInputStream(file5), NbtAccounter.unlimitedHeap());
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 19:21:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                         } catch (Exception exception) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-                            exception.printStackTrace();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                            io.papermc.paper.util.TraceUtil.printStackTrace(exception); // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                         }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                         if (root != null) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								@@ -369,7 +369,7 @@ public class OldUsersConverter {
 
							 
						 
					
						
							
								
									
										
										
										
											2022-10-18 19:21:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                             try {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                                 NbtIo.writeCompressed(root, new java.io.FileOutputStream(file2));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                             } catch (Exception exception) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-                                exception.printStackTrace();
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+                                io.papermc.paper.util.TraceUtil.printStackTrace(exception); // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                             }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								                        }
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								                         // CraftBukkit end
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index c4bf7053d83d207caca0e13e19f5c1afa7062de3..f697d45e0ac4e9cdc8a46121510a04c0f294d91f 100644
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								--- a/src/main/java/org/spigotmc/WatchdogThread.java
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/java/org/spigotmc/WatchdogThread.java
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -130,7 +130,7 @@ public class WatchdogThread extends Thread
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         }
							 
						 
					
						
							
								
									
										
										
										
											2024-01-24 14:05:59 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         log.log( Level.SEVERE, "\tStack:" );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         //
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 21:12:07 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								-        for ( StackTraceElement stack : thread.getStackTrace() )
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        for ( StackTraceElement stack : io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateStacktrace(thread.getStackTrace()) ) // Paper
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             log.log( Level.SEVERE, "\t\t" + stack );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         }
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
 
							 
						 
					
						
							
								
									
										
										
										
											2024-04-23 21:23:27 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								index 18e961a37b2830da6e5dab7aa35116b2f5215898..128fa1376f22d3429a23d79a2772abf2e7fec2bc 100644
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								--- a/src/main/resources/log4j2.xml
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+++ b/src/main/resources/log4j2.xml
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-12 10:55:20 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								@@ -30,10 +30,14 @@
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								             <DefaultRolloverStrategy max="1000"/>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         </RollingRandomAccessFile>
							 
						 
					
						
							
								
									
										
										
										
											2021-08-12 10:55:20 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								         <Async name="Async">
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            <AppenderRef ref="rewrite"/>
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+        </Async>
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+        <Rewrite name="rewrite">
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								+            <StacktraceDeobfuscatingRewritePolicy />
 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-12 10:55:20 -07:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								             <AppenderRef ref="File"/>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             <AppenderRef ref="TerminalConsole" level="info"/>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								             <AppenderRef ref="ServerGuiConsole" level="info"/>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								-        </Async>
 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-21 01:09:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								+        </Rewrite>
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     </Appenders>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								     <Loggers>
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								         <Root level="info">