Skip to content

Commit 1afd049

Browse files
serenibyssAE2-Enthusiast
authored andcommitted
Use LoadingCache instead of HashMap for CableBusBakedModel (AE2-UEL#385)
1 parent 909a80d commit 1afd049

File tree

2 files changed

+20
-22
lines changed

2 files changed

+20
-22
lines changed

src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java

+19-8
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
import appeng.api.util.AECableType;
2525
import appeng.api.util.AEColor;
2626
import appeng.block.networking.BlockCableBus;
27+
import com.google.common.cache.CacheBuilder;
28+
import com.google.common.cache.CacheLoader;
29+
import com.google.common.cache.LoadingCache;
30+
import com.google.common.cache.Weigher;
2731
import net.minecraft.block.state.IBlockState;
2832
import net.minecraft.client.Minecraft;
2933
import net.minecraft.client.renderer.block.model.BakedQuad;
@@ -38,15 +42,14 @@
3842
import net.minecraftforge.client.MinecraftForgeClient;
3943
import net.minecraftforge.common.property.IExtendedBlockState;
4044

45+
import javax.annotation.Nonnull;
4146
import javax.annotation.Nullable;
4247
import java.util.*;
4348
import java.util.Map.Entry;
4449

4550

4651
public class CableBusBakedModel implements IBakedModel {
4752

48-
static final Map<CableBusRenderState, List<BakedQuad>> CABLE_MODEL_CACHE = new HashMap<>();
49-
5053
private final CableBuilder cableBuilder;
5154

5255
private final FacadeBuilder facadeBuilder;
@@ -57,11 +60,24 @@ public class CableBusBakedModel implements IBakedModel {
5760

5861
private final TextureMap textureMap = Minecraft.getMinecraft().getTextureMapBlocks();
5962

63+
private final LoadingCache<CableBusRenderState, List<BakedQuad>> cableModelCache;
64+
6065
CableBusBakedModel(CableBuilder cableBuilder, FacadeBuilder facadeBuilder, Map<ResourceLocation, IBakedModel> partModels, TextureAtlasSprite particleTexture) {
6166
this.cableBuilder = cableBuilder;
6267
this.facadeBuilder = facadeBuilder;
6368
this.partModels = partModels;
6469
this.particleTexture = particleTexture;
70+
this.cableModelCache = CacheBuilder.newBuilder()
71+
.maximumWeight(5000)
72+
.weigher((Weigher<CableBusRenderState, List<BakedQuad>>) (k, v) -> v.size())
73+
.build(new CacheLoader<>() {
74+
@Override
75+
public List<BakedQuad> load(@Nonnull CableBusRenderState rs) {
76+
final List<BakedQuad> model = new ArrayList<>();
77+
addCableQuads(rs, model);
78+
return model;
79+
}
80+
});
6581
}
6682

6783
@Override
@@ -82,12 +98,7 @@ public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacin
8298
if (layer == BlockRenderLayer.CUTOUT) {
8399

84100
// First, handle the cable at the center of the cable bus
85-
final List<BakedQuad> cableModel = CABLE_MODEL_CACHE.computeIfAbsent(renderState, k ->
86-
{
87-
final List<BakedQuad> model = new ArrayList<>();
88-
this.addCableQuads(renderState, model);
89-
return model;
90-
});
101+
final List<BakedQuad> cableModel = cableModelCache.getUnchecked(renderState);
91102
quads.addAll(cableModel);
92103

93104
// Then handle attachments

src/main/java/appeng/client/render/cablebus/CableBusModel.java

+1-14
Original file line numberDiff line numberDiff line change
@@ -27,26 +27,21 @@
2727
import net.minecraft.client.renderer.block.model.IBakedModel;
2828
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
2929
import net.minecraft.client.renderer.vertex.VertexFormat;
30-
import net.minecraft.client.resources.IResourceManager;
3130
import net.minecraft.util.ResourceLocation;
3231
import net.minecraftforge.client.model.IModel;
3332
import net.minecraftforge.client.model.ModelLoaderRegistry;
34-
import net.minecraftforge.client.resource.IResourceType;
35-
import net.minecraftforge.client.resource.ISelectiveResourceReloadListener;
36-
import net.minecraftforge.client.resource.VanillaResourceType;
3733
import net.minecraftforge.common.model.IModelState;
3834
import net.minecraftforge.common.model.TRSRTransformation;
3935

4036
import java.util.Collection;
4137
import java.util.Map;
4238
import java.util.function.Function;
43-
import java.util.function.Predicate;
4439

4540

4641
/**
4742
* The built-in model for the cable bus block.
4843
*/
49-
public class CableBusModel implements IModel, ISelectiveResourceReloadListener {
44+
public class CableBusModel implements IModel {
5045

5146
private final PartModels partModels;
5247

@@ -106,12 +101,4 @@ private IModel tryLoadPartModel(ResourceLocation location) {
106101
public IModelState getDefaultState() {
107102
return TRSRTransformation.identity();
108103
}
109-
110-
@Override
111-
public void onResourceManagerReload(IResourceManager resourceManager, Predicate<IResourceType> resourcePredicate) {
112-
if (resourcePredicate.test(VanillaResourceType.MODELS)) {
113-
CableBusBakedModel.CABLE_MODEL_CACHE.clear();
114-
}
115-
}
116-
117104
}

0 commit comments

Comments
 (0)