From ac6101880686db484662d5671c3165ebd368c966 Mon Sep 17 00:00:00 2001 From: David Quintana Date: Fri, 20 Dec 2019 18:13:27 +0100 Subject: [PATCH] Fix obj models having all faces in the same mesh, breaking material assignments and visibility in the process. Reintroduce lost patch from the model loader, which would cause the custom values to be missing from generated models. --- .../model/ItemModelGenerator.java.patch | 10 ++++ .../client/model/obj/OBJModel.java | 52 +++++-------------- src/test/resources/META-INF/mods.toml | 4 +- 3 files changed, 24 insertions(+), 42 deletions(-) create mode 100644 patches/minecraft/net/minecraft/client/renderer/model/ItemModelGenerator.java.patch diff --git a/patches/minecraft/net/minecraft/client/renderer/model/ItemModelGenerator.java.patch b/patches/minecraft/net/minecraft/client/renderer/model/ItemModelGenerator.java.patch new file mode 100644 index 000000000..e8d735c60 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/renderer/model/ItemModelGenerator.java.patch @@ -0,0 +1,10 @@ +--- a/net/minecraft/client/renderer/model/ItemModelGenerator.java ++++ b/net/minecraft/client/renderer/model/ItemModelGenerator.java +@@ -36,6 +36,7 @@ + map.put("particle", p_209579_2_.func_178300_b("particle") ? Either.left(p_209579_2_.func_228816_c_("particle")) : map.get("layer0")); + BlockModel blockmodel = new BlockModel((ResourceLocation)null, list, map, false, false, p_209579_2_.func_181682_g(), p_209579_2_.func_187966_f()); + blockmodel.field_178317_b = p_209579_2_.field_178317_b; ++ blockmodel.customData.copyFrom(p_209579_2_.customData); + return blockmodel; + } + diff --git a/src/main/java/net/minecraftforge/client/model/obj/OBJModel.java b/src/main/java/net/minecraftforge/client/model/obj/OBJModel.java index 0d90d756a..01978c7a8 100644 --- a/src/main/java/net/minecraftforge/client/model/obj/OBJModel.java +++ b/src/main/java/net/minecraftforge/client/model/obj/OBJModel.java @@ -121,26 +121,14 @@ public class OBJModel implements IMultipartModelGeometry if (!Objects.equals(newMat, currentMat)) { currentMat = newMat; - if (currentMesh != null && currentMesh.mat == null) + if (currentMesh != null && currentMesh.mat == null && currentMesh.faces.size() == 0) { currentMesh.mat = currentMat; } else { - currentMesh = new ModelMesh(currentMat, currentSmoothingGroup); - if (currentObject != null) - { - currentObject.meshes.add(currentMesh); - } - else - { - if (currentGroup == null) - { - currentGroup = new ModelGroup(""); - parts.put("", currentGroup); - } - currentGroup.meshes.add(currentMesh); - } + // Start new mesh + currentMesh = null; } } break; @@ -216,26 +204,14 @@ public class OBJModel implements IMultipartModelGeometry if (!Objects.equals(currentSmoothingGroup, smoothingGroup)) { currentSmoothingGroup = smoothingGroup; - if (currentMesh != null && currentMesh.smoothingGroup == null) + if (currentMesh != null && currentMesh.smoothingGroup == null && currentMesh.faces.size() == 0) { currentMesh.smoothingGroup = currentSmoothingGroup; } else { - currentMesh = new ModelMesh(currentMat, currentSmoothingGroup); - if (currentObject != null) - { - currentObject.meshes.add(currentMesh); - } - else - { - if (currentGroup == null) - { - currentGroup = new ModelGroup(""); - parts.put("", currentGroup); - } - currentGroup.meshes.add(currentMesh); - } + // Start new mesh + currentMesh = null; } } break; @@ -246,19 +222,17 @@ public class OBJModel implements IMultipartModelGeometry String name = line[1]; if (objAboveGroup) { - currentObject = new ModelObject(name); - if (currentMat != null || currentSmoothingGroup != null ) - currentObject.meshes.add(new ModelMesh(currentMat, currentSmoothingGroup)); + currentObject = new ModelObject(currentGroup.name() + "/" + name); currentGroup.parts.put(name, currentObject); } else { currentGroup = new ModelGroup(name); - if (currentMat != null || currentSmoothingGroup != null ) - currentGroup.meshes.add(new ModelMesh(currentMat, currentSmoothingGroup)); parts.put(name, currentGroup); currentObject = null; } + // Start new mesh + currentMesh = null; break; } @@ -270,18 +244,16 @@ public class OBJModel implements IMultipartModelGeometry objAboveGroup = true; currentGroup = new ModelGroup(name); - if (currentMat != null || currentSmoothingGroup != null ) - currentGroup.meshes.add(new ModelMesh(currentMat, currentSmoothingGroup)); parts.put(name, currentGroup); currentObject = null; } else { - currentObject = new ModelObject(name); - if (currentMat != null || currentSmoothingGroup != null ) - currentObject.meshes.add(new ModelMesh(currentMat, currentSmoothingGroup)); + currentObject = new ModelObject(currentGroup.name() + "/" + name); currentGroup.parts.put(name, currentObject); } + // Start new mesh + currentMesh = null; break; } } diff --git a/src/test/resources/META-INF/mods.toml b/src/test/resources/META-INF/mods.toml index 2bd162409..69bd02b9e 100644 --- a/src/test/resources/META-INF/mods.toml +++ b/src/test/resources/META-INF/mods.toml @@ -47,7 +47,7 @@ loaderVersion="[28,)" modId="flower_pot_test" [[mods]] modId="player_xp_event_test" -[[mods]] - modId="custom_tnt_test" +##[[mods]] +## modId="custom_tnt_test" [[mods]] modId="new_model_loader_test"