From 19a7c54341a09e0f46f5ddeabaf6ea26d8266b55 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Mon, 11 Nov 2019 18:48:15 +0000 Subject: [PATCH] Fix schem save --- .../clipboard/io/SpongeSchematicReader.java | 2 +- .../clipboard/io/SpongeSchematicWriter.java | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicReader.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicReader.java index a5a7a263b..60c89eea8 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicReader.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicReader.java @@ -95,7 +95,7 @@ public class SpongeSchematicReader extends NBTSchematicReader { private int width, height, length; private int offsetX, offsetY, offsetZ; private char[] palette, biomePalette; - private BlockVector3 min; + private BlockVector3 min = BlockVector3.ZERO; /** diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicWriter.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicWriter.java index 34f0bd1ec..145247d8e 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicWriter.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicWriter.java @@ -20,6 +20,7 @@ package com.sk89q.worldedit.extent.clipboard.io; import com.boydti.fawe.jnbt.streamer.IntValueReader; +import com.boydti.fawe.object.FaweOutputStream; import com.boydti.fawe.util.IOUtil; import com.google.common.collect.Maps; import com.sk89q.jnbt.CompoundTag; @@ -133,7 +134,7 @@ public class SpongeSchematicWriter implements ClipboardWriter { }); ByteArrayOutputStream blocksCompressed = new ByteArrayOutputStream(); - DataOutputStream blocksOut = new DataOutputStream(new LZ4BlockOutputStream(blocksCompressed)); + FaweOutputStream blocksOut = new FaweOutputStream(new DataOutputStream(new LZ4BlockOutputStream(blocksCompressed))); ByteArrayOutputStream tilesCompressed = new ByteArrayOutputStream(); NBTOutputStream tilesOut = new NBTOutputStream(new LZ4BlockOutputStream(tilesCompressed)); @@ -141,7 +142,7 @@ public class SpongeSchematicWriter implements ClipboardWriter { List paletteList = new ArrayList<>(); char[] palette = new char[BlockTypesCache.states.length]; Arrays.fill(palette, Character.MAX_VALUE); - int[] paletteMax = {0}; + int paletteMax = 0; int numTiles = 0; for (BlockVector3 pos : clipboard) { BaseBlock block = pos.getFullBlock(clipboard); @@ -166,12 +167,21 @@ public class SpongeSchematicWriter implements ClipboardWriter { numTiles++; tilesOut.writeTagPayload(block.getNbtData()); } + + int ordinal = block.getOrdinal(); + char value = palette[ordinal]; + if (value == Character.MAX_VALUE) { + int size = paletteMax++; + palette[ordinal] = value = (char) size; + paletteList.add(ordinal); + } + blocksOut.writeVarInt(value); } // close tilesOut.close(); blocksOut.close(); - out.writeNamedTag("PaletteMax", paletteMax[0]); + out.writeNamedTag("PaletteMax", paletteMax); out.writeLazyCompoundTag("Palette", out12 -> { for (int i = 0; i < paletteList.size(); i++) {