From 40a401004153032ac5aec18472c3ed0221c0e4ec Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Mon, 13 Sep 2021 12:47:00 +0100 Subject: [PATCH] Add loadIfPresent method for use where the section should definitely exist and be FULL --- .../src/main/resources/worldedit-adapters.jar | Bin 823828 -> 823915 bytes .../heightmap/HeightmapProcessor.java | 5 ++-- .../history/changeset/AbstractChangeSet.java | 4 ++- .../core/queue/IBatchProcessor.java | 24 ++++++++++++------ .../core/queue/IBlocks.java | 19 ++++++++++++++ .../implementation/blocks/BitSetBlocks.java | 9 ++++++- .../implementation/blocks/CharBlocks.java | 10 ++++++++ .../implementation/blocks/NullChunkGet.java | 6 +++++ .../implementation/chunk/ChunkHolder.java | 6 +++++ .../queue/implementation/chunk/NullChunk.java | 6 +++++ .../sk89q/worldedit/regions/CuboidRegion.java | 3 ++- 11 files changed, 79 insertions(+), 13 deletions(-) diff --git a/worldedit-bukkit/src/main/resources/worldedit-adapters.jar b/worldedit-bukkit/src/main/resources/worldedit-adapters.jar index fd9b780c77b2dcae823fd528dababecb6ee93528..603600ffd9fd2a2f793f3af56b2a0f3b02c48022 100644 GIT binary patch delta 31317 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 Txv`Q^UMjsrmU<44RNnsqoaktd delta 31540 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 diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/processor/heightmap/HeightmapProcessor.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/processor/heightmap/HeightmapProcessor.java index 1119ed431..c42d51677 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/processor/heightmap/HeightmapProcessor.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/extent/processor/heightmap/HeightmapProcessor.java @@ -61,8 +61,9 @@ public class HeightmapProcessor implements IBatchProcessor { if (!(hasSectionSet || hasSectionGet)) { continue; } - char[] setSection = hasSectionSet ? set.load(layer) : null; - if (Arrays.equals(setSection, FaweCache.IMP.EMPTY_CHAR_4096) || Arrays.equals(setSection, AIR_LAYER)) { + char[] setSection = hasSectionSet ? set.loadIfPresent(layer) : null; + if (setSection == null || Arrays.equals(setSection, FaweCache.IMP.EMPTY_CHAR_4096) || + Arrays.equals(setSection, AIR_LAYER)) { hasSectionSet = false; } if (!hasSectionSet && !hasSectionGet) { diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/changeset/AbstractChangeSet.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/changeset/AbstractChangeSet.java index 76a9052bc..98928dcc6 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/changeset/AbstractChangeSet.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/history/changeset/AbstractChangeSet.java @@ -33,6 +33,7 @@ import com.sk89q.worldedit.world.block.BlockState; import java.io.IOException; import java.util.Iterator; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.UUID; import java.util.concurrent.Future; @@ -170,7 +171,8 @@ public abstract class AbstractChangeSet implements ChangeSet, IBatchProcessor { System.arraycopy(tmp, 0, (blocksGet = new char[4096]), 0, 4096); } char[] blocksSet; - System.arraycopy(set.load(layer), 0, (blocksSet = new char[4096]), 0, 4096); + // loadIfPresent shouldn't be null if set.hasSection(layer) is true + System.arraycopy(Objects.requireNonNull(set.loadIfPresent(layer)), 0, (blocksSet = new char[4096]), 0, 4096); // Account for negative layers int by = layer << 4; diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/IBatchProcessor.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/IBatchProcessor.java index 218ecc203..6770c706c 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/IBatchProcessor.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/IBatchProcessor.java @@ -44,10 +44,14 @@ public interface IBatchProcessor { for (int layer = set.getMinSectionPosition(); layer <= minLayer; layer++) { if (set.hasSection(layer)) { if (layer == minLayer) { - char[] arr = set.load(layer); - int index = (minY & 15) << 8; - for (int i = 0; i < index; i++) { - arr[i] = 0; + char[] arr = set.loadIfPresent(layer); + if (arr != null) { + int index = (minY & 15) << 8; + for (int i = 0; i < index; i++) { + arr[i] = 0; + } + } else { + arr = new char[4096]; } set.setBlocks(layer, arr); } else { @@ -59,10 +63,14 @@ public interface IBatchProcessor { for (int layer = maxLayer; layer < set.getMaxSectionPosition(); layer++) { if (set.hasSection(layer)) { if (layer == minLayer) { - char[] arr = set.load(layer); - int index = ((maxY + 1) & 15) << 8; - for (int i = index; i < arr.length; i++) { - arr[i] = 0; + char[] arr = set.loadIfPresent(layer); + if (arr != null) { + int index = ((maxY + 1) & 15) << 8; + for (int i = index; i < arr.length; i++) { + arr[i] = 0; + } + } else { + arr = new char[4096]; } set.setBlocks(layer, arr); } else { diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/IBlocks.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/IBlocks.java index a482af14f..2b4eb84f1 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/IBlocks.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/IBlocks.java @@ -12,6 +12,7 @@ import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.registry.BlockRegistry; +import javax.annotation.Nullable; import java.io.IOException; import java.util.Map; import java.util.Set; @@ -31,8 +32,26 @@ public interface IBlocks extends Trimable { */ boolean hasSection(int layer); + /** + * Obtain the specified chunk section stored as an array of ordinals. Uses normal minecraft chunk-section position indices + * (length 4096). Operations synchronises on the section and will load the section into memory if not present. For chunk + * GET operations, this will load the data from the world. For chunk SET, this will create a new empty array. + * + * @param layer chunk section layer (may be negative) + * @return char array of ordinals of the chunk section + */ char[] load(int layer); + /** + * Obtain the specified chunk section stored as an array of ordinals if present or null. Uses normal minecraft chunk-section + * position indices (length 4096). Does not synchronise to the section layer as it will not attempt to load into memory. + * + * @param layer chunk section layer (may be negative) + * @return char array of ordinals of the chunk section if present + */ + @Nullable + char[] loadIfPresent(int layer); + BlockState getBlock(int x, int y, int z); Map getTiles(); diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/BitSetBlocks.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/BitSetBlocks.java index 872317de3..efa635626 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/BitSetBlocks.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/BitSetBlocks.java @@ -10,6 +10,7 @@ import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockStateHolder; +import javax.annotation.Nullable; import java.util.Arrays; import java.util.Collections; import java.util.Map; @@ -38,7 +39,6 @@ public class BitSetBlocks implements IChunkSet { return row.rows[layer] != MemBlockSet.NULL_ROW_Y; } - @Override public boolean setBiome(int x, int y, int z, BiomeType biome) { return false; @@ -153,6 +153,13 @@ public class BitSetBlocks implements IChunkSet { return arr; } + // No need to do anything different + @Nullable + @Override + public char[] loadIfPresent(final int layer) { + return load(layer); + } + @Override public BiomeType[] getBiomes() { return null; diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharBlocks.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharBlocks.java index 952a2fb3a..8bcd9d484 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharBlocks.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/CharBlocks.java @@ -147,6 +147,16 @@ public abstract class CharBlocks implements IBlocks { } } + @Nullable + @Override + public char[] loadIfPresent(int layer) { + if (layer < minSectionPosition || layer > maxSectionPosition) { + return null; + } + layer -= minSectionPosition; + return sections[layer].isFull() ? blocks[layer] : null; + } + @Override public BlockState getBlock(int x, int y, int z) { return BlockTypesCache.states[get(x, y, z)]; diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/NullChunkGet.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/NullChunkGet.java index 22f101a82..eea966ebc 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/NullChunkGet.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/blocks/NullChunkGet.java @@ -127,6 +127,12 @@ public final class NullChunkGet implements IChunkGet { return FaweCache.IMP.EMPTY_CHAR_4096; } + @Nullable + @Override + public char[] loadIfPresent(final int layer) { + return null; + } + public boolean hasSection(int layer) { return false; } diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/chunk/ChunkHolder.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/chunk/ChunkHolder.java index 04f5e657e..4496a9aa0 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/chunk/ChunkHolder.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/chunk/ChunkHolder.java @@ -121,6 +121,12 @@ public class ChunkHolder> implements IQueueChunk { return getOrCreateGet().load(layer); } + @Nullable + @Override + public char[] loadIfPresent(final int layer) { + return getOrCreateGet().loadIfPresent(layer); + } + @Override public boolean isFastMode() { return fastmode; diff --git a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/chunk/NullChunk.java b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/chunk/NullChunk.java index 4f1b826f3..9b6d72b95 100644 --- a/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/chunk/NullChunk.java +++ b/worldedit-core/src/main/java/com/fastasyncworldedit/core/queue/implementation/chunk/NullChunk.java @@ -172,6 +172,12 @@ public final class NullChunk implements IQueueChunk { return null; } + @Nullable + @Override + public char[] loadIfPresent(final int layer) { + return null; + } + @Nullable public CompoundTag getEntity(@Nonnull UUID uuid) { return null; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CuboidRegion.java b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CuboidRegion.java index 28228589f..fb4c816cf 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CuboidRegion.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/regions/CuboidRegion.java @@ -37,6 +37,7 @@ import javax.annotation.Nonnull; import java.util.AbstractSet; import java.util.Iterator; import java.util.NoSuchElementException; +import java.util.Objects; import java.util.Set; import static com.google.common.base.Preconditions.checkArgument; @@ -769,7 +770,7 @@ public class CuboidRegion extends AbstractRegion implements FlatRegion { for (int layer = get.getMinSectionPosition(); layer < get.getMaxSectionPosition(); layer++) { if (set.hasSection(layer)) { - char[] arr = set.load(layer); + char[] arr = Objects.requireNonNull(set.loadIfPresent(layer)); // This shouldn't be null if above is true if (trimX || trimZ) { int indexY = 0; for (int y = 0; y < 16; y++, indexY += 256) { // For each y layer within a chunk section