From 3495d3dfd485da8d7d3b5bd8c8c36143fc65cbdd Mon Sep 17 00:00:00 2001 From: Serenibyss <10861407+serenibyss@users.noreply.github.com> Date: Mon, 29 Jan 2024 21:19:50 -0600 Subject: [PATCH] Use LoadingCache instead of HashMap for CableBusBakedModel (#385) --- .../render/cablebus/CableBusBakedModel.java | 27 +++++++++++++------ .../client/render/cablebus/CableBusModel.java | 15 +---------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java b/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java index 2f0795045..973dd0141 100644 --- a/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java +++ b/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java @@ -24,6 +24,10 @@ import appeng.api.parts.IPartModel; import appeng.api.util.AECableType; import appeng.api.util.AEColor; import appeng.block.networking.BlockCableBus; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.cache.Weigher; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.block.model.BakedQuad; @@ -38,6 +42,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.common.property.IExtendedBlockState; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.*; import java.util.Map.Entry; @@ -45,8 +50,6 @@ import java.util.Map.Entry; public class CableBusBakedModel implements IBakedModel { - static final Map> CABLE_MODEL_CACHE = new HashMap<>(); - private final CableBuilder cableBuilder; private final FacadeBuilder facadeBuilder; @@ -57,11 +60,24 @@ public class CableBusBakedModel implements IBakedModel { private final TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks(); + private final LoadingCache> cableModelCache; + CableBusBakedModel(CableBuilder cableBuilder, FacadeBuilder facadeBuilder, Map partModels, TextureAtlasSprite particleTexture) { this.cableBuilder = cableBuilder; this.facadeBuilder = facadeBuilder; this.partModels = partModels; this.particleTexture = particleTexture; + this.cableModelCache = CacheBuilder.newBuilder() + .maximumWeight(5000) + .weigher((Weigher>) (k, v) -> v.size()) + .build(new CacheLoader<>() { + @Override + public List load(@Nonnull CableBusRenderState rs) { + final List model = new ArrayList<>(); + addCableQuads(rs, model); + return model; + } + }); } @Override @@ -82,12 +98,7 @@ public class CableBusBakedModel implements IBakedModel { if (layer == BlockRenderLayer.CUTOUT) { // First, handle the cable at the center of the cable bus - final List cableModel = CABLE_MODEL_CACHE.computeIfAbsent(renderState, k -> - { - final List model = new ArrayList<>(); - this.addCableQuads(renderState, model); - return model; - }); + final List cableModel = cableModelCache.getUnchecked(renderState); quads.addAll(cableModel); // Then handle attachments diff --git a/src/main/java/appeng/client/render/cablebus/CableBusModel.java b/src/main/java/appeng/client/render/cablebus/CableBusModel.java index 692c6e632..8dcc9c836 100644 --- a/src/main/java/appeng/client/render/cablebus/CableBusModel.java +++ b/src/main/java/appeng/client/render/cablebus/CableBusModel.java @@ -27,26 +27,21 @@ import com.google.common.collect.ImmutableMap; import net.minecraft.client.renderer.block.model.IBakedModel; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.vertex.VertexFormat; -import net.minecraft.client.resources.IResourceManager; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.IModel; import net.minecraftforge.client.model.ModelLoaderRegistry; -import net.minecraftforge.client.resource.IResourceType; -import net.minecraftforge.client.resource.ISelectiveResourceReloadListener; -import net.minecraftforge.client.resource.VanillaResourceType; import net.minecraftforge.common.model.IModelState; import net.minecraftforge.common.model.TRSRTransformation; import java.util.Collection; import java.util.Map; import java.util.function.Function; -import java.util.function.Predicate; /** * The built-in model for the cable bus block. */ -public class CableBusModel implements IModel, ISelectiveResourceReloadListener { +public class CableBusModel implements IModel { private final PartModels partModels; @@ -106,12 +101,4 @@ public class CableBusModel implements IModel, ISelectiveResourceReloadListener { public IModelState getDefaultState() { return TRSRTransformation.identity(); } - - @Override - public void onResourceManagerReload(IResourceManager resourceManager, Predicate resourcePredicate) { - if (resourcePredicate.test(VanillaResourceType.MODELS)) { - CableBusBakedModel.CABLE_MODEL_CACHE.clear(); - } - } - }