diff --git a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java index 1a5f9afc5..9e5eb2a4c 100644 --- a/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java +++ b/src/main/java/com/seibel/lod/builders/LodBufferBuilder.java @@ -105,8 +105,8 @@ public class LodBufferBuilder */ private ReentrantLock bufferLock = new ReentrantLock(); - private Object[][] setsToRender; - private RegionPos center; + private volatile Object[][] setsToRender; + private volatile RegionPos center; public LodBufferBuilder() { @@ -346,7 +346,7 @@ public class LodBufferBuilder *
* Synchronized to prevent multiple moves happening on top of each other. */ - public synchronized void move(RegionPos regionOffset, int width) + public void move(RegionPos regionOffset, int width) { int xOffset = regionOffset.x; int zOffset = regionOffset.z; diff --git a/src/main/java/com/seibel/lod/objects/LodDimension.java b/src/main/java/com/seibel/lod/objects/LodDimension.java index 992c111cb..bf00ec13c 100644 --- a/src/main/java/com/seibel/lod/objects/LodDimension.java +++ b/src/main/java/com/seibel/lod/objects/LodDimension.java @@ -522,6 +522,10 @@ public class LodDimension { LodRegion region = getRegion(regionPos); region.getDataToRender(dataToRender, playerPosX, playerPosZ); + } catch (NullPointerException e) + { + System.out.println(regionPos); + e.printStackTrace(); } catch (Exception e) { //e.printStackTrace(); diff --git a/src/main/java/com/seibel/lod/objects/LodRegion.java b/src/main/java/com/seibel/lod/objects/LodRegion.java index 584e5aa16..ffba56c32 100644 --- a/src/main/java/com/seibel/lod/objects/LodRegion.java +++ b/src/main/java/com/seibel/lod/objects/LodRegion.java @@ -313,7 +313,14 @@ public class LodRegion implements Serializable if (dataToRender.containsKey(levelPos)) { levelPos.changeParameters(detailLevel, posX + regionPosX * size, posZ + regionPosZ * size); - dataToRender.get(levelPos).setTrue(); + try + { + dataToRender.get(levelPos).setTrue(); + }catch (Exception e){ + /*TODO Fix this exception*/ + System.out.println("error happened " + levelPos.getRegionPos()); + dataToRender.put(new LevelPos(detailLevel, posX + regionPosX * size, posZ + regionPosZ * size), new MutableBoolean(true)); + } } else { dataToRender.put(new LevelPos(detailLevel, posX + regionPosX * size, posZ + regionPosZ * size), new MutableBoolean(true)); @@ -348,9 +355,14 @@ public class LodRegion implements Serializable levelPos.changeParameters(detailLevel, posX + regionPosX * size, posZ + regionPosZ * size); if (dataToRender.containsKey(levelPos)) + { + if (dataToRender.get(levelPos) == null) + dataToRender.replace(levelPos, new MutableBoolean()); dataToRender.get(levelPos).setTrue(); - else + } else + { dataToRender.put(new LevelPos(detailLevel, posX + regionPosX * size, posZ + regionPosZ * size), new MutableBoolean(true)); + } } } }