diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java index 8aec54478..3476cac73 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataBits.java @@ -19,6 +19,7 @@ package com.volmit.iris.util.hunk.bits; import com.volmit.iris.Iris; +import com.volmit.iris.util.data.Varint; import org.apache.commons.lang3.Validate; import java.io.DataInputStream; @@ -65,7 +66,7 @@ public class DataBits { } public DataBits(int bits, int length, DataInputStream din) throws IOException { - this(bits, length, longs(din)); + this(bits, length, longs(din, dataLength(bits, length))); } public DataBits(int bits, int length, AtomicLongArray data) { @@ -98,11 +99,11 @@ public class DataBits { return (length + ((char) (64 / bits)) - 1) / ((char) (64 / bits)); } - private static AtomicLongArray longs(DataInputStream din) throws IOException { - AtomicLongArray a = new AtomicLongArray(din.readInt()); + private static AtomicLongArray longs(DataInputStream din, int longSize) throws IOException { + AtomicLongArray a = new AtomicLongArray(longSize); for (int i = 0; i < a.length(); i++) { - a.set(i, din.readLong()); + a.set(i, Varint.readUnsignedVarLong(din)); } return a; @@ -187,10 +188,8 @@ public class DataBits { } public void write(DataOutputStream dos) throws IOException { - dos.writeInt(data.length()); - for (int i = 0; i < data.length(); i++) { - dos.writeLong(data.get(i)); + Varint.writeUnsignedVarLong(data.get(i), dos); } } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java index f415b63ae..65c7fcbf7 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/DataContainer.java @@ -19,6 +19,7 @@ package com.volmit.iris.util.hunk.bits; import com.volmit.iris.Iris; +import com.volmit.iris.util.data.Varint; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; @@ -27,7 +28,6 @@ import java.io.IOException; import java.io.OutputStream; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; -import java.util.concurrent.locks.ReentrantLock; public class DataContainer { protected static final int INITIAL_BITS = 2; @@ -50,7 +50,7 @@ public class DataContainer { public DataContainer(DataInputStream din, Writable writer) throws IOException { this.writer = writer; - this.length = din.readInt(); + this.length = Varint.readUnsignedVarInt(din); this.palette = new AtomicReference<>(newPalette(din)); this.data = new AtomicReference<>(new DataBits(palette.get().bits(), length, din)); this.bits = new AtomicInteger(palette.get().bits()); @@ -82,15 +82,15 @@ public class DataContainer { } public void writeDos(DataOutputStream dos) throws IOException { - dos.writeInt(length); - dos.writeInt(palette.get().size()); + Varint.writeUnsignedVarInt(length, dos); + Varint.writeUnsignedVarInt(palette.get().size(), dos); palette.get().iterateIO((data, __) -> writer.writeNodeData(dos, data)); data.get().write(dos); dos.flush(); } private Palette newPalette(DataInputStream din) throws IOException { - int paletteSize = din.readInt(); + int paletteSize = Varint.readUnsignedVarInt(din); Palette d = newPalette(bits(paletteSize+1)); d.from(paletteSize, writer, din); return d; @@ -104,15 +104,9 @@ public class DataContainer { return new HashPalette<>(); } - private void checkBits() { - if (palette.get().size() >= BIT[bits.get()]) { - setBits(bits.get() + 1); - } - } - public void ensurePaletted(T t) { if (palette.get().id(t) == -1) { - checkBits(); + expandOne(); } } @@ -131,7 +125,7 @@ public class DataContainer { } private void expandOne() { - if (palette.get().size()+1 >= BIT[bits.get()]) { + if (palette.get().size() + 1 >= BIT[bits.get()] - 1) { setBits(bits.get() + 1); } } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java b/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java index 720f7fbb5..891f38e64 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/LinearPalette.java @@ -18,7 +18,9 @@ package com.volmit.iris.util.hunk.bits; +import com.volmit.iris.Iris; import com.volmit.iris.util.function.Consumer2; +import org.bukkit.block.data.BlockData; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; @@ -70,7 +72,7 @@ public class LinearPalette implements Palette { return 0; } - for (int i = 0; i < size(); i++) { + for (int i = 1; i < size() + 1; i++) { if (t.equals(palette.get().get(i))) { return i; } diff --git a/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java b/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java index 4b9db1bfd..b8dded4a8 100644 --- a/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java +++ b/src/main/java/com/volmit/iris/util/hunk/bits/TecTest.java @@ -18,36 +18,10 @@ package com.volmit.iris.util.hunk.bits; -import com.volmit.iris.Iris; -import com.volmit.iris.engine.data.cache.Cache; -import com.volmit.iris.util.io.IO; -import com.volmit.iris.util.mantle.Mantle; -import com.volmit.iris.util.math.RNG; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.IOException; - public class TecTest { public static void go() { - Mantle m = new Mantle(new File("dummy"), 256); - int size = 255; - int mx = (int) Math.pow(size, 3); - for(int i = 0; i < mx; i++) - { - int[] p = Cache.to3D(i, size, size); - m.set(p[0], p[1], p[2], RNG.r.s(1)); - } - - m.close(); - - m = new Mantle(new File("dummy"), 256); - m.get(0,0,0, String.class); } } diff --git a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java index 548210a7f..9843e1b8b 100644 --- a/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java +++ b/src/main/java/com/volmit/iris/util/hunk/storage/PaletteOrHunk.java @@ -32,7 +32,7 @@ public abstract class PaletteOrHunk extends StorageHunk implements Hunk public PaletteOrHunk(int width, int height, int depth, boolean allow, Supplier> factory) { super(width, height, depth); - hunk = (allow) ? new PaletteHunk<>(width, height, depth, this) : factory.get(); + hunk = (allow && (width * height * depth <= 4096)) ? new PaletteHunk<>(width, height, depth, this) : factory.get(); } public DataContainer palette() { diff --git a/src/main/java/com/volmit/iris/util/io/IO.java b/src/main/java/com/volmit/iris/util/io/IO.java index b934bf5d7..ae909a00c 100644 --- a/src/main/java/com/volmit/iris/util/io/IO.java +++ b/src/main/java/com/volmit/iris/util/io/IO.java @@ -19,6 +19,7 @@ package com.volmit.iris.util.io; import com.volmit.iris.Iris; +import com.volmit.iris.util.format.Form; import java.io.BufferedInputStream; import java.io.BufferedReader; @@ -162,6 +163,10 @@ public class IO { return new String(hexChars).toUpperCase(); } + public static String print(byte[] bytes) { + return Form.memSize(bytes.length, 2) + "[" + bytesToHex(bytes) + "]"; + } + public static String longsToHex(long[] bytes) { byte[] v = new byte[bytes.length * 8]; diff --git a/src/main/java/com/volmit/iris/util/mantle/Mantle.java b/src/main/java/com/volmit/iris/util/mantle/Mantle.java index 875d6c0ad..6c843699a 100644 --- a/src/main/java/com/volmit/iris/util/mantle/Mantle.java +++ b/src/main/java/com/volmit/iris/util/mantle/Mantle.java @@ -487,6 +487,7 @@ public class Mantle { } catch (Throwable e) { Iris.error("Failed to read Tectonic Plate " + file.getAbsolutePath() + " creating a new chunk instead."); Iris.reportError(e); + e.printStackTrace(); region = new TectonicPlate(worldHeight, x, z); loadedRegions.put(k, region); Iris.debug("Created new Tectonic Plate (Due to Load Failure) " + C.DARK_GREEN + x + " " + z); diff --git a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java index c5994b844..08333fd4e 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java @@ -18,6 +18,7 @@ package com.volmit.iris.util.matter; +import com.volmit.iris.Iris; import com.volmit.iris.engine.data.cache.Cache; import com.volmit.iris.util.data.Varint; import com.volmit.iris.util.data.palette.Palette; @@ -184,7 +185,15 @@ public interface MatterSlice extends Hunk, PaletteType, Writable { default void read(DataInputStream din) throws IOException { if ((this instanceof PaletteOrHunk f && f.isPalette())) { - f.setPalette(new DataContainer<>(din, this)); + try { + f.setPalette(new DataContainer<>(din, this)); + } + + catch(Throwable e) + { + Iris.error("Failed to read " + getType() + " Matter! ?? "); + throw new IOException(e); + } return; }