From 30040cae995b218ac80cff271b11ce17a4fc8237 Mon Sep 17 00:00:00 2001 From: tterrag1098 Date: Thu, 8 Jan 2015 20:31:07 -0500 Subject: [PATCH] Fix NPE when a CTM block is placed against an IFacade returning null --- .../chisel/client/render/CTM.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/cricketcraft/chisel/client/render/CTM.java b/src/main/java/com/cricketcraft/chisel/client/render/CTM.java index b066cc83..fdf23d78 100644 --- a/src/main/java/com/cricketcraft/chisel/client/render/CTM.java +++ b/src/main/java/com/cricketcraft/chisel/client/render/CTM.java @@ -195,9 +195,26 @@ public class CTM { int x2 = x + dir.offsetX; int y2 = y + dir.offsetY; int z2 = z + dir.offsetZ; - - return getBlockOrFacade(world, x, y, z, side).equals(block) && getBlockOrFacadeMetadata(world, x, y, z, side) == meta - && !(getBlockOrFacade(world, x2, y2, z2, side).equals(block) && getBlockOrFacadeMetadata(world, x2, y2, z2, side) == meta); + + Block con = getBlockOrFacade(world, x, y, z, side); + Block obscuring = getBlockOrFacade(world, x2, y2, z2, side); + + // no block or a bad API user + if (con == null) { + return false; + } + + boolean ret = con.equals(block) && getBlockOrFacadeMetadata(world, x, y, z, side) == meta; + + // no block obscuring this face + if (obscuring == null) { + return true; + } + + // check that we aren't already connected outwards from this side + ret &= !(obscuring.equals(block) && getBlockOrFacadeMetadata(world, x2, y2, z2, side) == meta); + + return ret; } public static int getBlockOrFacadeMetadata(IBlockAccess world, int x, int y, int z, int side) {