From 9fdb79ae7aa0f9f7f99ed4271e34d014a9a329ef Mon Sep 17 00:00:00 2001 From: Bartek Bok Date: Sun, 17 Dec 2017 03:23:55 +0100 Subject: [PATCH] Fix invalid rendering of single-frame B3D models (Fix #3815) --- .../net/minecraftforge/client/model/ModelLoader.java | 2 +- .../minecraftforge/client/model/b3d/B3DLoader.java | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/net/minecraftforge/client/model/ModelLoader.java b/src/main/java/net/minecraftforge/client/model/ModelLoader.java index 690a488881..39d00d5d63 100644 --- a/src/main/java/net/minecraftforge/client/model/ModelLoader.java +++ b/src/main/java/net/minecraftforge/client/model/ModelLoader.java @@ -670,7 +670,7 @@ public final class ModelLoader extends ModelBakery textures.addAll(model.getTextures()); // Kick this, just in case. models.add(model); - builder.add(Pair.of(model, v.getState())); + builder.add(Pair.of(model, new ModelStateComposition(v.getState(), model.getDefaultState()))); } if (models.size() == 0) //If all variants are missing, add one with the missing model and default rotation. diff --git a/src/main/java/net/minecraftforge/client/model/b3d/B3DLoader.java b/src/main/java/net/minecraftforge/client/model/b3d/B3DLoader.java index 17986bdd3b..1acc3da988 100644 --- a/src/main/java/net/minecraftforge/client/model/b3d/B3DLoader.java +++ b/src/main/java/net/minecraftforge/client/model/b3d/B3DLoader.java @@ -496,6 +496,9 @@ public enum B3DLoader implements ICustomModelLoader @Override public ModelWrapper process(ImmutableMap data) { + ImmutableSet newMeshes = this.meshes; + int newDefaultKey = this.defaultKey; + boolean hasChanged = false; if(data.containsKey("mesh")) { JsonElement e = new JsonParser().parse(data.get("mesh")); @@ -518,7 +521,8 @@ public enum B3DLoader implements ICustomModelLoader return this; } } - return new ModelWrapper(modelLocation, model, builder.build(), smooth, gui3d, defaultKey, textures); + newMeshes = builder.build(); + hasChanged = true; } else { @@ -531,7 +535,8 @@ public enum B3DLoader implements ICustomModelLoader JsonElement e = new JsonParser().parse(data.get("key")); if(e.isJsonPrimitive() && e.getAsJsonPrimitive().isNumber()) { - return new ModelWrapper(modelLocation, model, meshes, smooth, gui3d, e.getAsNumber().intValue(), textures); + newDefaultKey = e.getAsNumber().intValue(); + hasChanged = true; } else { @@ -539,7 +544,7 @@ public enum B3DLoader implements ICustomModelLoader return this; } } - return this; + return hasChanged ? new ModelWrapper(modelLocation, model, newMeshes, smooth, gui3d, newDefaultKey, textures) : this; } @Override