mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 16:27:47 +00:00
Delayed quad list resolution in MultiModel, fixes NPE in MultiLayerModel.
This commit is contained in:
1 parent
f0ae51bb34
commit
d67c57827a
1 file changed
+28
-25
@@ -37,8 +37,8 @@ public class MultiModel implements IModel
|
||||
protected final ImmutableMap<String, IFlexibleBakedModel> parts;
|
||||
|
||||
protected final IFlexibleBakedModel internalBase;
|
||||
protected final ImmutableList<BakedQuad> general;
|
||||
protected final ImmutableMap<EnumFacing, ImmutableList<BakedQuad>> faces;
|
||||
protected ImmutableList<BakedQuad> general;
|
||||
protected ImmutableMap<EnumFacing, ImmutableList<BakedQuad>> faces;
|
||||
protected final ImmutableMap<TransformType, Pair<Baked, TRSRTransformation>> transforms;
|
||||
|
||||
public Baked(IFlexibleBakedModel base, ImmutableMap<String, IFlexibleBakedModel> 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<EnumFacing, ImmutableList<BakedQuad>> faces = Maps.newEnumMap(EnumFacing.class);
|
||||
|
||||
for (EnumFacing face : EnumFacing.values())
|
||||
{
|
||||
ImmutableList.Builder<BakedQuad> 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<BakedQuad> 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<BakedQuad> getFaceQuads(EnumFacing side)
|
||||
{
|
||||
if(faces == null)
|
||||
{
|
||||
// Create map of each face's quads.
|
||||
EnumMap<EnumFacing, ImmutableList<BakedQuad>> faces = Maps.newEnumMap(EnumFacing.class);
|
||||
|
||||
for (EnumFacing face : EnumFacing.values())
|
||||
{
|
||||
ImmutableList.Builder<BakedQuad> 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<BakedQuad> getGeneralQuads()
|
||||
{
|
||||
if(general == null)
|
||||
{
|
||||
// Create list of general quads.
|
||||
ImmutableList.Builder<BakedQuad> genQuads = ImmutableList.builder();
|
||||
if (base != null)
|
||||
genQuads.addAll(base.getGeneralQuads());
|
||||
for (IFlexibleBakedModel bakedPart : parts.values())
|
||||
genQuads.addAll(bakedPart.getGeneralQuads());
|
||||
general = genQuads.build();
|
||||
}
|
||||
return general;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user