Skip to content

Commit d33b1b3

Browse files
committed
Fix mask NPE when ExtendedBlock gets initially used at 0 0 0
1 parent 08e48b2 commit d33b1b3

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

core/src/main/java/de/bluecolored/bluemap/core/world/block/ExtendedBlock.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class ExtendedBlock implements BlockAccess {
4545

4646
private @Nullable BlockProperties properties;
4747

48-
private Mask renderMask;
48+
private @Nullable Mask renderMask;
4949
private final MaskArea maskArea = new MaskArea();
5050

5151
private boolean insideRenderBoundsCalculated, insideRenderBounds;
@@ -71,11 +71,7 @@ public void set(int x, int y, int z) {
7171
this.properties = null;
7272
this.insideRenderBoundsCalculated = false;
7373
this.isCaveCalculated = false;
74-
75-
if (renderMask == null || !maskArea.isInside(x, z)) {
76-
maskArea.setAround(x, z);
77-
renderMask = maskArea.apply(renderSettings.getRenderMask());
78-
}
74+
if (!maskArea.isInside(x, z)) this.renderMask = null;
7975
}
8076

8177
@Override
@@ -138,10 +134,18 @@ public BlockProperties getProperties() {
138134
return properties;
139135
}
140136

137+
private Mask getRenderMask() {
138+
if (renderMask == null) {
139+
maskArea.setAround(x, z);
140+
renderMask = maskArea.apply(renderSettings.getRenderMask());
141+
}
142+
return renderMask;
143+
}
144+
141145
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
142146
public boolean isInsideRenderBounds() {
143147
if (!insideRenderBoundsCalculated) {
144-
insideRenderBounds = renderMask.test(getX(), getY(), getZ());
148+
insideRenderBounds = getRenderMask().test(getX(), getY(), getZ());
145149
insideRenderBoundsCalculated = true;
146150
}
147151

@@ -165,6 +169,10 @@ public boolean isRemoveIfCave() {
165169
private static class MaskArea {
166170
private int minX, minZ, maxX, maxZ;
167171

172+
public MaskArea() {
173+
setAround(0, 0);
174+
}
175+
168176
public boolean isInside(int x, int z) {
169177
return
170178
x >= minX && x <= maxX &&

0 commit comments

Comments
 (0)