34 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 | 
						|
From: Aikar <aikar@aikar.co>
 | 
						|
Date: Mon, 21 Dec 2020 11:01:42 -0500
 | 
						|
Subject: [PATCH] Optimize Dynamic#get Missing Keys
 | 
						|
 | 
						|
get was calling toString() on every NBT object that was ever asked for an optional
 | 
						|
key from the object to build a string for the error text.
 | 
						|
 | 
						|
When done on large NBT objects, this was using a ton of computation time building the
 | 
						|
JSON representation of the NBT object.
 | 
						|
 | 
						|
Now we will just skip the value when 99.9999% of the time the text is never even printed.
 | 
						|
 | 
						|
diff --git a/src/main/java/com/mojang/serialization/Dynamic.java b/src/main/java/com/mojang/serialization/Dynamic.java
 | 
						|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | 
						|
--- a/src/main/java/com/mojang/serialization/Dynamic.java
 | 
						|
+++ b/src/main/java/com/mojang/serialization/Dynamic.java
 | 
						|
@@ -0,0 +0,0 @@ import java.util.stream.Stream;
 | 
						|
 
 | 
						|
 @SuppressWarnings("unused")
 | 
						|
 public class Dynamic<T> extends DynamicLike<T> {
 | 
						|
+    private static final boolean DEBUG_MISSING_KEYS = Boolean.getBoolean("Paper.debugDynamicMissingKeys"); // Paper
 | 
						|
     private final T value;
 | 
						|
 
 | 
						|
     public Dynamic(final DynamicOps<T> ops) {
 | 
						|
@@ -0,0 +0,0 @@ public class Dynamic<T> extends DynamicLike<T> {
 | 
						|
         return new OptionalDynamic<>(ops, ops.getMap(value).flatMap(m -> {
 | 
						|
             final T value = m.get(key);
 | 
						|
             if (value == null) {
 | 
						|
-                return DataResult.error(() -> "key missing: " + key + " in " + this.value);
 | 
						|
+                return DataResult.error(() -> DEBUG_MISSING_KEYS ? "key missing: " + key + " in " + this.value : "key missing: " + key); // Paper
 | 
						|
             }
 | 
						|
             return DataResult.success(new Dynamic<>(ops, value));
 | 
						|
         }));
 |