diff --git a/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java b/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java index cdde27b7f..06285aef2 100644 --- a/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java +++ b/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java @@ -21,7 +21,6 @@ package appeng.client.render.cablebus; import java.util.ArrayList; import java.util.Collections; import java.util.EnumMap; -import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -30,6 +29,11 @@ import java.util.Random; import javax.annotation.Nullable; +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.BlockState; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.model.BakedQuad; @@ -50,7 +54,10 @@ import appeng.api.util.AEColor; public class CableBusBakedModel implements IBakedModel { - private static final Map> CABLE_MODEL_CACHE = new HashMap<>(); + // The number of quads overall that will be cached + private static final int CACHE_QUAD_COUNT = 5000; + + private final LoadingCache> cableModelCache; private final CableBuilder cableBuilder; @@ -66,6 +73,17 @@ public class CableBusBakedModel implements IBakedModel { this.facadeBuilder = facadeBuilder; this.partModels = partModels; this.particleTexture = particleTexture; + this.cableModelCache = CacheBuilder.newBuilder()// + .maximumWeight(CACHE_QUAD_COUNT)// + .weigher((Weigher>) (key, value) -> value.size())// + .build(new CacheLoader>() { + @Override + public List load(CableBusRenderState renderState) { + final List model = new ArrayList<>(); + addCableQuads(renderState, model); + return model; + } + }); } @Override @@ -92,11 +110,7 @@ public class CableBusBakedModel implements IBakedModel { if (layer == RenderType.getCutout()) { // 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 @@ -341,8 +355,4 @@ public class CableBusBakedModel implements IBakedModel { return ItemOverrideList.EMPTY; } - public static void clearCache() { - CABLE_MODEL_CACHE.clear(); - } - } diff --git a/src/main/java/appeng/client/render/cablebus/CableBusModelLoader.java b/src/main/java/appeng/client/render/cablebus/CableBusModelLoader.java index cdf2cd9d2..36a683bde 100644 --- a/src/main/java/appeng/client/render/cablebus/CableBusModelLoader.java +++ b/src/main/java/appeng/client/render/cablebus/CableBusModelLoader.java @@ -18,7 +18,6 @@ public class CableBusModelLoader implements IModelLoader { @Override public void onResourceManagerReload(IResourceManager resourceManager) { - CableBusBakedModel.clearCache(); } @Override