58 lines
		
	
	
	
		
			4 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
	
		
			4 KiB
			
		
	
	
	
		
			Diff
		
	
	
	
	
	
|   | From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | ||
|  | From: Jake Potrebic <jake.m.potrebic@gmail.com> | ||
|  | Date: Sun, 20 Mar 2022 22:06:47 -0700 | ||
|  | Subject: [PATCH] cache resource keys | ||
|  | 
 | ||
|  | 
 | ||
|  | diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
 | ||
|  | index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | ||
|  | --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
 | ||
|  | +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
 | ||
|  | @@ -0,0 +0,0 @@ public class CraftBlock implements Block {
 | ||
|  |          return (biome == null) ? Biome.CUSTOM : biome; | ||
|  |      } | ||
|  |   | ||
|  | +    private static final java.util.Map<org.bukkit.block.Biome, net.minecraft.resources.ResourceKey<net.minecraft.world.level.biome.Biome>> BIOME_KEY_CACHE = Collections.synchronizedMap(new java.util.EnumMap<>(Biome.class)); // Paper
 | ||
|  |      public static Holder<net.minecraft.world.level.biome.Biome> biomeToBiomeBase(net.minecraft.core.Registry<net.minecraft.world.level.biome.Biome> registry, Biome bio) { | ||
|  |          if (bio == null || bio == Biome.CUSTOM) { | ||
|  |              return null; | ||
|  |          } | ||
|  |   | ||
|  | -        return registry.getHolderOrThrow(ResourceKey.create(net.minecraft.core.Registry.BIOME_REGISTRY, CraftNamespacedKey.toMinecraft(bio.getKey())));
 | ||
|  | +        return registry.getHolderOrThrow(BIOME_KEY_CACHE.computeIfAbsent(bio, b -> ResourceKey.create(net.minecraft.core.Registry.BIOME_REGISTRY, CraftNamespacedKey.toMinecraft(b.getKey())))); // Paper - cache key
 | ||
|  |      } | ||
|  |   | ||
|  |      @Override | ||
|  | diff --git a/src/main/java/org/bukkit/craftbukkit/tag/CraftEntityTag.java b/src/main/java/org/bukkit/craftbukkit/tag/CraftEntityTag.java
 | ||
|  | index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | ||
|  | --- a/src/main/java/org/bukkit/craftbukkit/tag/CraftEntityTag.java
 | ||
|  | +++ b/src/main/java/org/bukkit/craftbukkit/tag/CraftEntityTag.java
 | ||
|  | @@ -0,0 +0,0 @@ public class CraftEntityTag extends CraftTag<net.minecraft.world.entity.EntityTy
 | ||
|  |          super(registry, tag); | ||
|  |      } | ||
|  |   | ||
|  | +    private static final java.util.Map<org.bukkit.entity.EntityType, net.minecraft.resources.ResourceKey<net.minecraft.world.entity.EntityType<?>>> KEY_CACHE = Collections.synchronizedMap(new java.util.EnumMap<>(EntityType.class)); // Paper
 | ||
|  |      @Override | ||
|  |      public boolean isTagged(EntityType entity) { | ||
|  | -        return registry.getHolderOrThrow(ResourceKey.create(net.minecraft.core.Registry.ENTITY_TYPE_REGISTRY, CraftNamespacedKey.toMinecraft(entity.getKey()))).is(tag);
 | ||
|  | +        return registry.getHolderOrThrow(KEY_CACHE.computeIfAbsent(entity, type -> ResourceKey.create(net.minecraft.core.Registry.ENTITY_TYPE_REGISTRY, CraftNamespacedKey.toMinecraft(type.getKey())))).is(tag); // Paper - cache key
 | ||
|  |      } | ||
|  |   | ||
|  |      @Override | ||
|  | diff --git a/src/main/java/org/bukkit/craftbukkit/tag/CraftFluidTag.java b/src/main/java/org/bukkit/craftbukkit/tag/CraftFluidTag.java
 | ||
|  | index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
 | ||
|  | --- a/src/main/java/org/bukkit/craftbukkit/tag/CraftFluidTag.java
 | ||
|  | +++ b/src/main/java/org/bukkit/craftbukkit/tag/CraftFluidTag.java
 | ||
|  | @@ -0,0 +0,0 @@ public class CraftFluidTag extends CraftTag<net.minecraft.world.level.material.F
 | ||
|  |          super(registry, tag); | ||
|  |      } | ||
|  |   | ||
|  | +    private static final java.util.Map<Fluid, net.minecraft.resources.ResourceKey<net.minecraft.world.level.material.Fluid>> KEY_CACHE = Collections.synchronizedMap(new java.util.EnumMap<>(Fluid.class)); // Paper
 | ||
|  |      @Override | ||
|  |      public boolean isTagged(Fluid fluid) { | ||
|  | -        return registry.getHolderOrThrow(net.minecraft.resources.ResourceKey.create(net.minecraft.core.Registry.FLUID_REGISTRY, org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(fluid.getKey()))).is(tag); // Paper
 | ||
|  | +        return registry.getHolderOrThrow(KEY_CACHE.computeIfAbsent(fluid, f -> net.minecraft.resources.ResourceKey.create(net.minecraft.core.Registry.FLUID_REGISTRY, org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(f.getKey())))).is(tag); // Paper - cache key
 | ||
|  |      } | ||
|  |   | ||
|  |      @Override |