Glitchfinder преди 12 години
родител
ревизия
88ed14fe5c

+ 6 - 3
src/main/java/com/gmail/nossr50/runnables/blockstoreconversion/BlockStoreConversionZDirectory.java

@@ -105,10 +105,13 @@ public class BlockStoreConversionZDirectory implements Runnable {
                             this.czPos = this.zPos + this.z;
 
                             for(this.y2 = (64 * this.y); this.y2 < (64 * this.y + 64); this.y2++) {
-                                if(!this.manager.isTrue(this.cxPos, this.y2, this.czPos, this.world))
-                                    continue;
+                                try {
+                                    if(!this.manager.isTrue(this.cxPos, this.y2, this.czPos, this.world))
+                                        continue;
 
-                                this.newManager.setTrue(this.cxPos, this.y2, this.czPos, this.world);
+                                    this.newManager.setTrue(this.cxPos, this.y2, this.czPos, this.world);
+                                }
+                                catch(Exception e) {}
                             }
                         }
                     }

+ 18 - 2
src/main/java/com/gmail/nossr50/util/blockmeta/chunkmeta/PrimitiveChunkStore.java

@@ -15,7 +15,7 @@ public class PrimitiveChunkStore implements ChunkStore {
     transient private boolean dirty = false;
     /** X, Z, Y */
     public boolean[][][] store;
-    private static final int CURRENT_VERSION = 4;
+    private static final int CURRENT_VERSION = 5;
     private static final int MAGIC_NUMBER = 0xEA5EDEBB;
     private int cx;
     private int cz;
@@ -34,7 +34,7 @@ public class PrimitiveChunkStore implements ChunkStore {
         this.xBitShifts = 11;
         this.zBitShifts = 7;
 
-        this.store = new boolean[16][16][this.worldHeight - 1];
+        this.store = new boolean[16][16][this.worldHeight];
 
         conversionNeeded = false;
     }
@@ -139,7 +139,23 @@ public class PrimitiveChunkStore implements ChunkStore {
         store = (boolean[][][]) in.readObject();
 
         if (fileVersionNumber < CURRENT_VERSION) {
+            fixArray();
             dirty = true;
         }
     }
+
+    private void fixArray() {
+        boolean[][][] temp = this.store;
+        this.store = new boolean[16][16][this.worldHeight];
+        for(int x = 0; x < 16; x++) {
+            for(int z = 0; z < 16; z++) {
+                for(int y = 0; y < this.worldHeight; y++) {
+                    try {
+                        store[x][z][y] = temp[x][y][z];
+                    }
+                    catch(Exception e) {}
+                }
+            }
+        }
+    }
 }