From 38248061139fe578d998fc1da2269cd307a9c9df Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Sat, 26 Apr 2025 03:28:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DGunData.from=E5=A4=9A?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/item/gun/data/GunData.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java index b437b276b..5947211cc 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java @@ -8,6 +8,9 @@ import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.tools.Ammo; import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.InventoryTool; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; @@ -34,7 +37,13 @@ public class GunData { public final CompoundTag attachmentTag; public final String id; - private static final WeakHashMap dataCache = new WeakHashMap<>(); + private static final LoadingCache dataCache = CacheBuilder.newBuilder() + .weakKeys() + .build(new CacheLoader<>() { + public @NotNull GunData load(@NotNull ItemStack stack) { + return new GunData(stack); + } + }); private GunData(ItemStack stack) { if (!(stack.getItem() instanceof GunItem gunItem)) { @@ -101,12 +110,7 @@ public class GunData { } public static GunData from(ItemStack stack) { - var value = dataCache.get(stack); - if (value == null) { - value = new GunData(stack); - dataCache.put(stack, value); - } - return value; + return dataCache.getUnchecked(stack); } public GunItem item() {