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 ca81a1436..c35797b0c 100644 --- a/src/main/java/com/volmit/iris/util/matter/MatterSlice.java +++ b/src/main/java/com/volmit/iris/util/matter/MatterSlice.java @@ -152,6 +152,27 @@ public interface MatterSlice extends Hunk, PaletteType { default void write(DataOutputStream dos) throws IOException { dos.writeUTF(getType().getCanonicalName()); + if(IrisSettings.get().getPerformance().isUseExperimentalMantleMemoryCompression() && (this instanceof PaletteOrHunk f && f.isPalette())) + { + PalettedContainer c = f.palette(); + List palette = new ArrayList<>(); + long[] data = c.write(palette); + + Varint.writeUnsignedVarInt(palette.size(), dos); + for(T i : palette) + { + writeNode(i, dos); + } + + Varint.writeUnsignedVarInt(data.length, dos); + for(long i : data) + { + dos.writeLong(i); + } + + return; + } + int w = getWidth(); int h = getHeight(); MatterPalette palette = new MatterPalette(this); @@ -171,6 +192,29 @@ public interface MatterSlice extends Hunk, PaletteType { } default void read(DataInputStream din) throws IOException { + if(IrisSettings.get().getPerformance().isUseExperimentalMantleMemoryCompression() && (this instanceof PaletteOrHunk f && f.isPalette())) + { + PalettedContainer c = new PalettedContainer<>(); + List palette = new ArrayList<>(); + int ps = Varint.readUnsignedVarInt(din); + + for(int i = 0; i < ps; i++) + { + palette.add(readNode(din)); + } + + int ds = Varint.readUnsignedVarInt(din); + long[] data = new long[ds]; + for(int i = 0; i < ds; i++) + { + data[i] = din.readLong(); + } + + c.read(palette, data); + + return; + } + int w = getWidth(); int h = getHeight(); MatterPalette palette = new MatterPalette(this, din);