From 6bb839e13c90a1c1ca53e6fcffcba65cdbaa50a5 Mon Sep 17 00:00:00 2001 From: pahimar Date: Fri, 12 Apr 2013 15:57:59 -0400 Subject: [PATCH] Fix a derp in that we provision the various arrays for a face, even if we are not going to parse data into it. Solves NPEs for when obj models that don't have texture coordinates attempt to render. --- .../minecraftforge/client/model/obj/Face.java | 4 ++-- .../client/model/obj/WavefrontObject.java | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/client/net/minecraftforge/client/model/obj/Face.java b/client/net/minecraftforge/client/model/obj/Face.java index f47951b1d..e73e6a01e 100644 --- a/client/net/minecraftforge/client/model/obj/Face.java +++ b/client/net/minecraftforge/client/model/obj/Face.java @@ -31,7 +31,7 @@ public class Face float averageU = 0F; float averageV = 0F; - if (textureCoordinates.length != 0) + if ((textureCoordinates != null) && (textureCoordinates.length != 0)) { for (int i = 0; i < textureCoordinates.length; ++i) { @@ -48,7 +48,7 @@ public class Face for (int i = 0; i < vertices.length; ++i) { - if (textureCoordinates.length != 0) + if ((textureCoordinates != null) && (textureCoordinates.length != 0)) { offsetU = textureOffset; offsetV = textureOffset; diff --git a/client/net/minecraftforge/client/model/obj/WavefrontObject.java b/client/net/minecraftforge/client/model/obj/WavefrontObject.java index 37291745e..55603fbbb 100644 --- a/client/net/minecraftforge/client/model/obj/WavefrontObject.java +++ b/client/net/minecraftforge/client/model/obj/WavefrontObject.java @@ -341,13 +341,13 @@ public class WavefrontObject implements IModelCustom } } - face.vertices = new Vertex[tokens.length]; - face.textureCoordinates = new TextureCoordinate[tokens.length]; - face.vertexNormals = new Vertex[tokens.length]; - // f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ... if (isValidFace_V_VT_VN_Line(line)) { + face.vertices = new Vertex[tokens.length]; + face.textureCoordinates = new TextureCoordinate[tokens.length]; + face.vertexNormals = new Vertex[tokens.length]; + for (int i = 0; i < tokens.length; ++i) { subTokens = tokens[i].split("/"); @@ -362,6 +362,9 @@ public class WavefrontObject implements IModelCustom // f v1/vt1 v2/vt2 v3/vt3 ... else if (isValidFace_V_VT_Line(line)) { + face.vertices = new Vertex[tokens.length]; + face.textureCoordinates = new TextureCoordinate[tokens.length]; + for (int i = 0; i < tokens.length; ++i) { subTokens = tokens[i].split("/"); @@ -375,6 +378,9 @@ public class WavefrontObject implements IModelCustom // f v1//vn1 v2//vn2 v3//vn3 ... else if (isValidFace_V_VN_Line(line)) { + face.vertices = new Vertex[tokens.length]; + face.vertexNormals = new Vertex[tokens.length]; + for (int i = 0; i < tokens.length; ++i) { subTokens = tokens[i].split("//"); @@ -388,6 +394,8 @@ public class WavefrontObject implements IModelCustom // f v1 v2 v3 ... else if (isValidFace_V_Line(line)) { + face.vertices = new Vertex[tokens.length]; + for (int i = 0; i < tokens.length; ++i) { face.vertices[i] = vertices.get(Integer.parseInt(tokens[i]) - 1);