diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/QueueHandler.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/QueueHandler.java index 82ad93be9..4c8beb6f9 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/QueueHandler.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/QueueHandler.java @@ -267,6 +267,14 @@ public abstract class QueueHandler implements Trimable, Runnable { queuePool.set(null); } + private IQueueExtent pool() { + IQueueExtent queue = queuePool.get(); + if (queue == null) { + queuePool.set(queue = queuePool.init()); + } + return queue; + } + public abstract void startSet(boolean parallel); public abstract void endSet(boolean parallel); @@ -276,7 +284,7 @@ public abstract class QueueHandler implements Trimable, Runnable { } public IQueueExtent getQueue(World world, IBatchProcessor processor) { - final IQueueExtent queue = queuePool.get(); + final IQueueExtent queue = pool(); IChunkCache cacheGet = getOrCreateWorldCache(world); IChunkCache set = null; // TODO cache? queue.init(world, cacheGet, set); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/Clipboard.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/Clipboard.java index 1d07d58d6..4cb73a082 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/Clipboard.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/Clipboard.java @@ -327,17 +327,6 @@ public interface Clipboard extends Extent, Iterable, Closeable { final int rely = to.getBlockY() - origin.getBlockY(); final int relz = to.getBlockZ() - origin.getBlockZ(); -// this.apply(this, new Filter() { -// @Override -// public void applyBlock(FilterBlock block) { -// -// } -// }); - - System.out.println("Rel " + relx + "," + rely + "," + relz + " | " + to + " | " + origin); - - System.out.println("TODO optimize paste using above apply"); - Operation visitor = new RegionVisitor(region, new RegionFunction() { // MutableBlockVector2 mpos2d_2 = new MutableBlockVector2(); MutableBlockVector2 mpos2d = new MutableBlockVector2(); @@ -349,7 +338,6 @@ public interface Clipboard extends Extent, Iterable, Closeable { @Override public boolean apply(BlockVector3 mutable) throws WorldEditException { BlockState block = getBlock(mutable); - System.out.println("Pos " + mutable); int xx = mutable.getBlockX() + relx; int zz = mutable.getBlockZ() + relz; if (copyBiomes && xx != mpos2d.getBlockX() && zz != mpos2d.getBlockZ()) { 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 e97f29be1..167d5e540 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; /** @@ -220,7 +220,8 @@ public class SpongeSchematicReader extends NBTSchematicReader { BlockVector3 dimensions = BlockVector3.at(width, height, length); BlockVector3 origin = min; if (offsetX != Integer.MIN_VALUE && offsetY != Integer.MIN_VALUE && offsetZ != Integer.MIN_VALUE) { - origin = origin.subtract(BlockVector3.at(offsetX, offsetY, offsetZ)); +// origin = origin.subtract(BlockVector3.at(offsetX, offsetY, offsetZ)); + origin = BlockVector3.at(offsetX, offsetY, offsetZ); } Clipboard clipboard = createOutput.apply(dimensions); @@ -339,7 +340,6 @@ public class SpongeSchematicReader extends NBTSchematicReader { } } } - clipboard.setOrigin(origin); return clipboard; } 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++) {