diff --git a/src/main/java/net/minecraftforge/client/model/BakedItemModel.java b/src/main/java/net/minecraftforge/client/model/BakedItemModel.java index 473bc0ae5d..68b5417525 100644 --- a/src/main/java/net/minecraftforge/client/model/BakedItemModel.java +++ b/src/main/java/net/minecraftforge/client/model/BakedItemModel.java @@ -45,13 +45,20 @@ public class BakedItemModel implements IBakedModel protected final ItemOverrideList overrides; protected final IBakedModel guiModel; + /** @deprecated use {@link #BakedItemModel(ImmutableList, TextureAtlasSprite, ImmutableMap, ItemOverrideList, boolean)} */ + @Deprecated // TODO: remove public BakedItemModel(ImmutableList quads, TextureAtlasSprite particle, ImmutableMap transforms, ItemOverrideList overrides) + { + this(quads, particle, transforms, overrides, true); + } + + public BakedItemModel(ImmutableList quads, TextureAtlasSprite particle, ImmutableMap transforms, ItemOverrideList overrides, boolean untransformed) { this.quads = quads; this.particle = particle; this.transforms = transforms; this.overrides = overrides; - this.guiModel = hasGuiIdentity(transforms) ? new BakedGuiItemModel<>(this) : null; + this.guiModel = untransformed && hasGuiIdentity(transforms) ? new BakedGuiItemModel<>(this) : null; } private static boolean hasGuiIdentity(ImmutableMap transforms) diff --git a/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java b/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java index 5ed19cf669..3cf46078b5 100644 --- a/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java +++ b/src/main/java/net/minecraftforge/client/model/ItemLayerModel.java @@ -120,6 +120,7 @@ public final class ItemLayerModel implements IUnbakedModel public IBakedModel bake(Function modelGetter, Function bakedTextureGetter, IModelState state, boolean uvlock, VertexFormat format) { ImmutableList.Builder builder = ImmutableList.builder(); Optional transform = state.apply(Optional.empty()); + boolean identity = !transform.isPresent() || transform.get().isIdentity(); for(int i = 0; i < textures.size(); i++) { TextureAtlasSprite sprite = bakedTextureGetter.apply(textures.get(i)); @@ -127,7 +128,7 @@ public final class ItemLayerModel implements IUnbakedModel } TextureAtlasSprite particle = bakedTextureGetter.apply(textures.isEmpty() ? new ResourceLocation("missingno") : textures.get(0)); ImmutableMap map = PerspectiveMapWrapper.getTransforms(state); - return new BakedItemModel(builder.build(), particle, map, overrides); + return new BakedItemModel(builder.build(), particle, map, overrides, identity); } public static ImmutableList getQuadsForSprite(int tint, TextureAtlasSprite sprite, VertexFormat format, Optional transform) @@ -411,12 +412,14 @@ public final class ItemLayerModel implements IUnbakedModel private static void putVertex(UnpackedBakedQuad.Builder builder, VertexFormat format, Optional transform, EnumFacing side, float x, float y, float z, float u, float v) { Vector4f vec = new Vector4f(); + boolean hasTransform = transform.isPresent() && !transform.get().isIdentity(); + for(int e = 0; e < format.getElementCount(); e++) { switch(format.getElement(e).getUsage()) { case POSITION: - if(transform.isPresent()) + if(hasTransform) { vec.x = x; vec.y = y; diff --git a/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java b/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java index 8520c227ed..06e5d4cddf 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java +++ b/src/main/java/net/minecraftforge/client/model/ModelDynBucket.java @@ -177,7 +177,7 @@ public final class ModelDynBucket implements IUnbakedModel } } - return new BakedDynBucket(this, builder.build(), particleSprite, format, Maps.immutableEnumMap(transformMap), Maps.newHashMap()); + return new BakedDynBucket(this, builder.build(), particleSprite, format, Maps.immutableEnumMap(transformMap), Maps.newHashMap(), transform.isIdentity()); } /** @@ -465,14 +465,15 @@ public final class ModelDynBucket implements IUnbakedModel private final Map cache; // contains all the baked models since they'll never change private final VertexFormat format; - public BakedDynBucket(ModelDynBucket parent, - ImmutableList quads, - TextureAtlasSprite particle, - VertexFormat format, - ImmutableMap transforms, - Map cache) + BakedDynBucket(ModelDynBucket parent, + ImmutableList quads, + TextureAtlasSprite particle, + VertexFormat format, + ImmutableMap transforms, + Map cache, + boolean untransformed) { - super(quads, particle, transforms, BakedDynBucketOverrideHandler.INSTANCE); + super(quads, particle, transforms, BakedDynBucketOverrideHandler.INSTANCE, untransformed); this.format = format; this.parent = parent; this.cache = cache; diff --git a/src/main/java/net/minecraftforge/client/model/ModelLoader.java b/src/main/java/net/minecraftforge/client/model/ModelLoader.java index 515b7e383e..bbbb6e0dfc 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelLoader.java +++ b/src/main/java/net/minecraftforge/client/model/ModelLoader.java @@ -460,7 +460,7 @@ public final class ModelLoader extends ModelBakery Map tMap = Maps.newEnumMap(TransformType.class); tMap.putAll(PerspectiveMapWrapper.getTransforms(transforms)); tMap.putAll(PerspectiveMapWrapper.getTransforms(state)); - IModelState perState = new SimpleModelState(ImmutableMap.copyOf(tMap)); + IModelState perState = new SimpleModelState(ImmutableMap.copyOf(tMap), state.apply(Optional.empty())); if(model == ModelBakery.MODEL_GENERATED) {