From 65e99f9b584b2e427bdcb3ea94ba8a11c03ba39b Mon Sep 17 00:00:00 2001 From: mrp-v2 Date: Tue, 8 Jun 2021 15:07:33 -0400 Subject: [PATCH] Use empty model instead of missing model for non-existant layers in multilayer models (#7750) Fixes issues when using multi-layer models as part of composite models --- .../client/model/MultiLayerModel.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java b/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java index 4dc7df1757..a3b2058ae2 100644 --- a/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java +++ b/src/main/java/net/minecraftforge/client/model/MultiLayerModel.java @@ -97,12 +97,9 @@ public final class MultiLayerModel implements IModelGeometry @Override public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery, Function spriteGetter, IModelTransform modelTransform, ItemOverrideList overrides, ResourceLocation modelLocation) { - IUnbakedModel missing = ModelLoader.instance().getMissingModel(); - return new MultiLayerBakedModel( owner.useSmoothLighting(), owner.isShadedInGui(), owner.isSideLit(), spriteGetter.apply(owner.resolveTexture("particle")), overrides, convertRenderTypes, - missing.bake(bakery, spriteGetter, modelTransform, modelLocation), buildModels(models, modelTransform, bakery, spriteGetter, modelLocation), PerspectiveMapWrapper.getTransforms(new ModelTransformComposition(owner.getCombinedTransform(), modelTransform)) ); @@ -117,18 +114,17 @@ public final class MultiLayerModel implements IModelGeometry protected final boolean isSideLit; protected final TextureAtlasSprite particle; protected final ItemOverrideList overrides; - private final IBakedModel missing; + private final List missing = ImmutableList.of(); private final boolean convertRenderTypes; private final List> itemLayers; public MultiLayerBakedModel( boolean ambientOcclusion, boolean isGui3d, boolean isSideLit, TextureAtlasSprite particle, ItemOverrideList overrides, - boolean convertRenderTypes, IBakedModel missing, List> models, + boolean convertRenderTypes, List> models, ImmutableMap cameraTransforms) { this.isSideLit = isSideLit; this.cameraTransforms = cameraTransforms; - this.missing = missing; this.ambientOcclusion = ambientOcclusion; this.gui3d = isGui3d; this.particle = particle; @@ -159,8 +155,10 @@ public final class MultiLayerModel implements IModelGeometry // support for item layer rendering if (state == null && convertRenderTypes) layer = ITEM_RENDER_TYPE_MAPPING.inverse().getOrDefault(layer, layer); - // assumes that child model will handle this state properly. FIXME? - return models.getOrDefault(layer, missing).getQuads(state, side, rand, extraData); + if (models.containsKey(layer)) + return models.get(layer).getQuads(state, side, rand, extraData); + else + return missing; } @Override