mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 16:27:47 +00:00
Change composite models to fetch quads from submodels using full context (#4809)
This commit is contained in:
1 parent
fd201fb690
commit
e742a3f598
2 files changed
+17
-57
No files matched your search
@@ -131,48 +131,30 @@ public final class MultiLayerModel implements IModel
|
||||
private final ImmutableMap<TransformType, TRSRTransformation> cameraTransforms;
|
||||
private final IBakedModel base;
|
||||
private final IBakedModel missing;
|
||||
private final ImmutableMap<Optional<EnumFacing>, ImmutableList<BakedQuad>> quads;
|
||||
|
||||
public MultiLayerBakedModel(ImmutableMap<Optional<BlockRenderLayer>, IBakedModel> models, IBakedModel missing, ImmutableMap<TransformType, TRSRTransformation> cameraTransforms)
|
||||
{
|
||||
this.models = models;
|
||||
this.cameraTransforms = cameraTransforms;
|
||||
this.missing = missing;
|
||||
base = models.getOrDefault(Optional.empty(), missing);
|
||||
ImmutableMap.Builder<Optional<EnumFacing>, ImmutableList<BakedQuad>> quadBuilder = ImmutableMap.builder();
|
||||
quadBuilder.put(Optional.empty(), buildQuads(models, Optional.empty()));
|
||||
for(EnumFacing side: EnumFacing.values())
|
||||
{
|
||||
quadBuilder.put(Optional.of(side), buildQuads(models, Optional.of(side)));
|
||||
}
|
||||
quads = quadBuilder.build();
|
||||
}
|
||||
|
||||
private static ImmutableList<BakedQuad> buildQuads(ImmutableMap<Optional<BlockRenderLayer>, IBakedModel> models, Optional<EnumFacing> side)
|
||||
{
|
||||
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
|
||||
for(IBakedModel model : models.values())
|
||||
{
|
||||
builder.addAll(model.getQuads(null, side.orElse(null), 0));
|
||||
}
|
||||
return builder.build();
|
||||
this.base = models.getOrDefault(Optional.empty(), missing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand)
|
||||
{
|
||||
IBakedModel model;
|
||||
BlockRenderLayer layer = MinecraftForgeClient.getRenderLayer();
|
||||
if(layer == null)
|
||||
if (layer == null)
|
||||
{
|
||||
return quads.get(Optional.ofNullable(side));
|
||||
}
|
||||
else
|
||||
{
|
||||
model = models.getOrDefault(Optional.of(layer), missing);
|
||||
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
|
||||
for (IBakedModel model : models.values())
|
||||
{
|
||||
builder.addAll(model.getQuads(state, side, rand));
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
// assumes that child model will handle this state properly. FIXME?
|
||||
return model.getQuads(state, side, rand);
|
||||
return models.getOrDefault(Optional.of(layer), missing).getQuads(state, side, rand);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -50,7 +50,6 @@ import net.minecraftforge.fml.common.FMLLog;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import java.util.function.Function;
|
||||
import java.util.Optional;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Lists;
|
||||
@@ -68,7 +67,6 @@ public final class MultiModel implements IModel
|
||||
private final ImmutableMap<String, IBakedModel> parts;
|
||||
|
||||
private final IBakedModel internalBase;
|
||||
private ImmutableMap<Optional<EnumFacing>, ImmutableList<BakedQuad>> quads;
|
||||
private final ImmutableMap<TransformType, Pair<Baked, TRSRTransformation>> transforms;
|
||||
private final ItemOverrideList overrides = new ItemOverrideList(Lists.newArrayList())
|
||||
{
|
||||
@@ -187,36 +185,16 @@ public final class MultiModel implements IModel
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand)
|
||||
{
|
||||
if(quads == null)
|
||||
ImmutableList.Builder<BakedQuad> quads = ImmutableList.builder();
|
||||
if (base != null)
|
||||
{
|
||||
ImmutableMap.Builder<Optional<EnumFacing>, ImmutableList<BakedQuad>> builder = ImmutableMap.builder();
|
||||
|
||||
for (EnumFacing face : EnumFacing.values())
|
||||
{
|
||||
ImmutableList.Builder<BakedQuad> quads = ImmutableList.builder();
|
||||
if (base != null)
|
||||
{
|
||||
quads.addAll(base.getQuads(state, face, 0));
|
||||
}
|
||||
for (IBakedModel bakedPart : parts.values())
|
||||
{
|
||||
quads.addAll(bakedPart.getQuads(state, face, 0));
|
||||
}
|
||||
builder.put(Optional.of(face), quads.build());
|
||||
}
|
||||
ImmutableList.Builder<BakedQuad> quads = ImmutableList.builder();
|
||||
if (base != null)
|
||||
{
|
||||
quads.addAll(base.getQuads(state, null, 0));
|
||||
}
|
||||
for (IBakedModel bakedPart : parts.values())
|
||||
{
|
||||
quads.addAll(bakedPart.getQuads(state, null, 0));
|
||||
}
|
||||
builder.put(Optional.empty(), quads.build());
|
||||
this.quads = builder.build();
|
||||
quads.addAll(base.getQuads(state, side, rand));
|
||||
}
|
||||
return quads.get(Optional.ofNullable(side));
|
||||
for (IBakedModel bakedPart : parts.values())
|
||||
{
|
||||
quads.addAll(bakedPart.getQuads(state, side, rand));
|
||||
}
|
||||
return quads.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in new issue
Block a user