diff --git a/src/main/java/net/minecraftforge/client/model/MultiModel.java b/src/main/java/net/minecraftforge/client/model/MultiModel.java index 4f0178c549..9e55b60015 100644 --- a/src/main/java/net/minecraftforge/client/model/MultiModel.java +++ b/src/main/java/net/minecraftforge/client/model/MultiModel.java @@ -37,8 +37,8 @@ public class MultiModel implements IModel protected final ImmutableMap parts; protected final IFlexibleBakedModel internalBase; - protected final ImmutableList general; - protected final ImmutableMap> faces; + protected ImmutableList general; + protected ImmutableMap> faces; protected final ImmutableMap> transforms; public Baked(IFlexibleBakedModel base, ImmutableMap parts) @@ -62,29 +62,6 @@ public class MultiModel implements IModel throw new IllegalArgumentException("No base model or submodel provided for MultiModel.Baked " + location + "."); } - // Create map of each face's quads. - EnumMap> faces = Maps.newEnumMap(EnumFacing.class); - - for (EnumFacing face : EnumFacing.values()) - { - ImmutableList.Builder faceQuads = ImmutableList.builder(); - if (base != null) - faceQuads.addAll(base.getFaceQuads(face)); - for (IFlexibleBakedModel bakedPart : parts.values()) - faceQuads.addAll(bakedPart.getFaceQuads(face)); - faces.put(face, faceQuads.build()); - } - - this.faces = Maps.immutableEnumMap(faces); - - // Create list of general quads. - ImmutableList.Builder genQuads = ImmutableList.builder(); - if (base != null) - genQuads.addAll(base.getGeneralQuads()); - for (IFlexibleBakedModel bakedPart : parts.values()) - genQuads.addAll(bakedPart.getGeneralQuads()); - general = genQuads.build(); - // Only changes the base model based on perspective, may recurse for parts in the future. if(perspective && base instanceof IPerspectiveAwareModel) { @@ -137,12 +114,38 @@ public class MultiModel implements IModel @Override public List getFaceQuads(EnumFacing side) { + if(faces == null) + { + // Create map of each face's quads. + EnumMap> faces = Maps.newEnumMap(EnumFacing.class); + + for (EnumFacing face : EnumFacing.values()) + { + ImmutableList.Builder faceQuads = ImmutableList.builder(); + if (base != null) + faceQuads.addAll(base.getFaceQuads(face)); + for (IFlexibleBakedModel bakedPart : parts.values()) + faceQuads.addAll(bakedPart.getFaceQuads(face)); + faces.put(face, faceQuads.build()); + } + this.faces = Maps.immutableEnumMap(faces); + } return faces.get(side); } @Override public List getGeneralQuads() { + if(general == null) + { + // Create list of general quads. + ImmutableList.Builder genQuads = ImmutableList.builder(); + if (base != null) + genQuads.addAll(base.getGeneralQuads()); + for (IFlexibleBakedModel bakedPart : parts.values()) + genQuads.addAll(bakedPart.getGeneralQuads()); + general = genQuads.build(); + } return general; }