From 3ea55de712eaef9dc2387c05bd71356d02b35b25 Mon Sep 17 00:00:00 2001 From: Bukkit/Spigot Date: Tue, 24 Sep 2024 21:07:47 +1000 Subject: [PATCH] #1060: Cache Material to BlockType and ItemType conversion By: DerFrZocker --- .../src/main/java/org/bukkit/Material.java | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/Material.java b/paper-api/src/main/java/org/bukkit/Material.java index 111c9a6be1..625fed5709 100644 --- a/paper-api/src/main/java/org/bukkit/Material.java +++ b/paper-api/src/main/java/org/bukkit/Material.java @@ -1,12 +1,14 @@ package org.bukkit; import com.google.common.base.Preconditions; +import com.google.common.base.Suppliers; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import java.lang.reflect.Constructor; import java.util.Locale; import java.util.Map; import java.util.function.Consumer; +import java.util.function.Supplier; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeModifier; import org.bukkit.block.Block; @@ -4620,6 +4622,8 @@ public enum Material implements Keyed, Translatable { public final Class data; private final boolean legacy; private final NamespacedKey key; + private final Supplier itemType; + private final Supplier blockType; private Material(final int id) { this(id, 64); @@ -4660,6 +4664,21 @@ public enum Material implements Keyed, Translatable { } catch (SecurityException ex) { throw new AssertionError(ex); } + + this.itemType = Suppliers.memoize(() -> { + Material material = this; + if (isLegacy()) { + material = Bukkit.getUnsafe().fromLegacy(new MaterialData(this), true); + } + return Registry.ITEM.get(material.key); + }); + this.blockType = Suppliers.memoize(() -> { + Material material = this; + if (isLegacy()) { + material = Bukkit.getUnsafe().fromLegacy(new MaterialData(this), false); + } + return Registry.BLOCK.get(material.key); + }); } /** @@ -5496,11 +5515,7 @@ public enum Material implements Keyed, Translatable { @ApiStatus.Internal @Nullable public ItemType asItemType() { - Material material = this; - if (isLegacy()) { - material = Bukkit.getUnsafe().fromLegacy(this); - } - return Registry.ITEM.get(material.key); + return itemType.get(); } /** @@ -5512,10 +5527,6 @@ public enum Material implements Keyed, Translatable { @ApiStatus.Internal @Nullable public BlockType asBlockType() { - Material material = this; - if (isLegacy()) { - material = Bukkit.getUnsafe().fromLegacy(this); - } - return Registry.BLOCK.get(material.key); + return blockType.get(); } }