From 9ee3e9a3a4e41c56a887ebea9ac5dffb95298881 Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Fri, 11 Nov 2022 11:29:56 +0000 Subject: [PATCH] feature: improve handling of null issues in plot analysis - Addresses #3865 (does not fix the underlying issue though) --- .../core/generator/HybridUtils.java | 78 ++++++++++--------- 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java b/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java index cc00345bd..0def7d9cb 100644 --- a/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java +++ b/Core/src/main/java/com/plotsquared/core/generator/HybridUtils.java @@ -234,44 +234,52 @@ public class HybridUtils { Set types = new HashSet<>(); for (int yIndex = 0; yIndex < height; yIndex++) { BlockState old = oldBlocks[yIndex][x][z]; // Nullable - try { - BlockState now = newBlocks[yIndex][x][z]; // Not null - if (!now.equals(old) && !(old == null && now.getBlockType().equals(BlockTypes.AIR))) { - changes[i]++; - } - if (now.getBlockType().getMaterial().isAir()) { - air[i]++; - } else { - // check vertices - // modifications_adjacent - if (x > 0 && z > 0 && yIndex > 0 && x < width - 1 && z < length - 1 && yIndex < (height - 1)) { - if (newBlocks[yIndex - 1][x][z].getBlockType().getMaterial().isAir()) { - faces[i]++; - } - if (newBlocks[yIndex][x - 1][z].getBlockType().getMaterial().isAir()) { - faces[i]++; - } - if (newBlocks[yIndex][x][z - 1].getBlockType().getMaterial().isAir()) { - faces[i]++; - } - if (newBlocks[yIndex + 1][x][z].getBlockType().getMaterial().isAir()) { - faces[i]++; - } - if (newBlocks[yIndex][x + 1][z].getBlockType().getMaterial().isAir()) { - faces[i]++; - } - if (newBlocks[yIndex][x][z + 1].getBlockType().getMaterial().isAir()) { - faces[i]++; - } + BlockState now = newBlocks[yIndex][x][z]; // Not null + if (now == null) { + throw new NullPointerException(String.format( + "\"now\" block null attempting to perform plot analysis. Indexes: x=%d of %d, yIndex=%d" + + " of %d, z=%d of %d", + x, + width, + yIndex, + height, + z, + length + )); + } + if (!now.equals(old) && !(old == null && now.getBlockType().equals(BlockTypes.AIR))) { + changes[i]++; + } + if (now.getBlockType().getMaterial().isAir()) { + air[i]++; + } else { + // check vertices + // modifications_adjacent + if (x > 0 && z > 0 && yIndex > 0 && x < width - 1 && z < length - 1 && yIndex < (height - 1)) { + if (newBlocks[yIndex - 1][x][z].getBlockType().getMaterial().isAir()) { + faces[i]++; } + if (newBlocks[yIndex][x - 1][z].getBlockType().getMaterial().isAir()) { + faces[i]++; + } + if (newBlocks[yIndex][x][z - 1].getBlockType().getMaterial().isAir()) { + faces[i]++; + } + if (newBlocks[yIndex + 1][x][z].getBlockType().getMaterial().isAir()) { + faces[i]++; + } + if (newBlocks[yIndex][x + 1][z].getBlockType().getMaterial().isAir()) { + faces[i]++; + } + if (newBlocks[yIndex][x][z + 1].getBlockType().getMaterial().isAir()) { + faces[i]++; + } + } - if (!now.equals(now.getBlockType().getDefaultState())) { - data[i]++; - } - types.add(now.getBlockType()); + if (!now.equals(now.getBlockType().getDefaultState())) { + data[i]++; } - } catch (NullPointerException e) { - e.printStackTrace(); + types.add(now.getBlockType()); } } variety[i] = types.size();