mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-16 06:30:46 +01:00
Cache resource keys and optimize reference Holder tags set
TagKeys are always interned, so we can use a reference hash set for them
This commit is contained in:
parent
636e993d37
commit
96c7383ba4
2 changed files with 13 additions and 2 deletions
|
@ -0,0 +1,11 @@
|
||||||
|
--- a/net/minecraft/core/Holder.java
|
||||||
|
+++ b/net/minecraft/core/Holder.java
|
||||||
|
@@ -230,7 +230,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
void bindTags(Collection<TagKey<T>> tags) {
|
||||||
|
- this.tags = Set.copyOf(tags);
|
||||||
|
+ this.tags = java.util.Collections.unmodifiableSet(new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>(tags)); // Paper
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
|
@ -25,11 +25,11 @@ public class CraftEntityType {
|
||||||
return bukkit;
|
return bukkit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final java.util.Map<EntityType, net.minecraft.resources.ResourceKey<net.minecraft.world.entity.EntityType<?>>> KEY_CACHE = java.util.Collections.synchronizedMap(new java.util.EnumMap<>(EntityType.class)); // Paper
|
||||||
public static net.minecraft.world.entity.EntityType<?> bukkitToMinecraft(EntityType bukkit) {
|
public static net.minecraft.world.entity.EntityType<?> bukkitToMinecraft(EntityType bukkit) {
|
||||||
Preconditions.checkArgument(bukkit != null);
|
Preconditions.checkArgument(bukkit != null);
|
||||||
|
|
||||||
return CraftRegistry.getMinecraftRegistry(Registries.ENTITY_TYPE)
|
return CraftRegistry.getMinecraftRegistry(Registries.ENTITY_TYPE)
|
||||||
.getOptional(CraftNamespacedKey.toMinecraft(bukkit.getKey())).orElseThrow();
|
.getOptional(KEY_CACHE.computeIfAbsent(bukkit, type -> net.minecraft.resources.ResourceKey.create(Registries.ENTITY_TYPE, CraftNamespacedKey.toMinecraft(type.getKey())))).orElseThrow();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Holder<net.minecraft.world.entity.EntityType<?>> bukkitToMinecraftHolder(EntityType bukkit) {
|
public static Holder<net.minecraft.world.entity.EntityType<?>> bukkitToMinecraftHolder(EntityType bukkit) {
|
||||||
|
|
Loading…
Reference in a new issue