24
24
import appeng .api .util .AECableType ;
25
25
import appeng .api .util .AEColor ;
26
26
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 ;
27
31
import net .minecraft .block .state .IBlockState ;
28
32
import net .minecraft .client .Minecraft ;
29
33
import net .minecraft .client .renderer .block .model .BakedQuad ;
38
42
import net .minecraftforge .client .MinecraftForgeClient ;
39
43
import net .minecraftforge .common .property .IExtendedBlockState ;
40
44
45
+ import javax .annotation .Nonnull ;
41
46
import javax .annotation .Nullable ;
42
47
import java .util .*;
43
48
import java .util .Map .Entry ;
44
49
45
50
46
51
public class CableBusBakedModel implements IBakedModel {
47
52
48
- static final Map <CableBusRenderState , List <BakedQuad >> CABLE_MODEL_CACHE = new HashMap <>();
49
-
50
53
private final CableBuilder cableBuilder ;
51
54
52
55
private final FacadeBuilder facadeBuilder ;
@@ -57,11 +60,24 @@ public class CableBusBakedModel implements IBakedModel {
57
60
58
61
private final TextureMap textureMap = Minecraft .getMinecraft ().getTextureMapBlocks ();
59
62
63
+ private final LoadingCache <CableBusRenderState , List <BakedQuad >> cableModelCache ;
64
+
60
65
CableBusBakedModel (CableBuilder cableBuilder , FacadeBuilder facadeBuilder , Map <ResourceLocation , IBakedModel > partModels , TextureAtlasSprite particleTexture ) {
61
66
this .cableBuilder = cableBuilder ;
62
67
this .facadeBuilder = facadeBuilder ;
63
68
this .partModels = partModels ;
64
69
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
+ });
65
81
}
66
82
67
83
@ Override
@@ -82,12 +98,7 @@ public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacin
82
98
if (layer == BlockRenderLayer .CUTOUT ) {
83
99
84
100
// 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 );
91
102
quads .addAll (cableModel );
92
103
93
104
// Then handle attachments
0 commit comments