From f1d41044804c044d17a44db95332796f6f768569 Mon Sep 17 00:00:00 2001 From: dordsor21 Date: Thu, 2 Jul 2020 22:09:12 +0100 Subject: [PATCH] Bunch of changes to help masks --- .../adapter/mc1_14/BukkitGetBlocks_1_14.java | 12 ++++++++++++ .../adapter/mc1_15_2/BukkitGetBlocks_1_15_2.java | 12 ++++++++++++ .../adapter/mc1_16_1/BukkitGetBlocks_1_16_1.java | 12 ++++++++++++ .../beta/implementation/blocks/CharGetBlocks.java | 2 +- .../sk89q/worldedit/function/mask/BlockMask.java | 2 +- .../mask/InverseSingleBlockStateMask.java | 15 ++++++++++++--- .../function/mask/SingleBlockTypeMask.java | 2 +- 7 files changed, 51 insertions(+), 6 deletions(-) diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitGetBlocks_1_14.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitGetBlocks_1_14.java index c2c4395d1..0f5d33fe0 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitGetBlocks_1_14.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitGetBlocks_1_14.java @@ -609,6 +609,10 @@ public class BukkitGetBlocks_1_14 extends CharGetBlocks { } else { ordinal = adapter.adaptToChar(ibd); } + // Don't read "empty". + if (ordinal == 0) { + ordinal = 1; + } paletteToBlockChars[paletteVal] = ordinal; } data[i] = ordinal; @@ -636,10 +640,18 @@ public class BukkitGetBlocks_1_14 extends CharGetBlocks { val = ordinal(palette.a(i), adapter); paletteToOrdinal[i] = val; } + // Don't read "empty". + if (val == 0) { + val = 1; + } data[i] = val; } } else { char ordinal = ordinal(palette.a(0), adapter); + // Don't read "empty". + if (ordinal == 0) { + ordinal = 1; + } Arrays.fill(data, ordinal); } } finally { diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15_2/BukkitGetBlocks_1_15_2.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15_2/BukkitGetBlocks_1_15_2.java index e77c06f85..4518420a2 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15_2/BukkitGetBlocks_1_15_2.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_15_2/BukkitGetBlocks_1_15_2.java @@ -629,6 +629,10 @@ public class BukkitGetBlocks_1_15_2 extends CharGetBlocks { } paletteToBlockChars[paletteVal] = ordinal; } + // Don't read "empty". + if (ordinal == 0) { + ordinal = 1; + } data[i] = ordinal; } } finally { @@ -654,10 +658,18 @@ public class BukkitGetBlocks_1_15_2 extends CharGetBlocks { val = ordinal(palette.a(i), adapter); paletteToOrdinal[i] = val; } + // Don't read "empty". + if (val == 0) { + val = 1; + } data[i] = val; } } else { char ordinal = ordinal(palette.a(0), adapter); + // Don't read "empty". + if (ordinal == 0) { + ordinal = 1; + } Arrays.fill(data, ordinal); } } finally { diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_16_1/BukkitGetBlocks_1_16_1.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_16_1/BukkitGetBlocks_1_16_1.java index d09240f6c..2d5ace231 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_16_1/BukkitGetBlocks_1_16_1.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_16_1/BukkitGetBlocks_1_16_1.java @@ -600,6 +600,10 @@ public class BukkitGetBlocks_1_16_1 extends CharGetBlocks { } paletteToBlockChars[paletteVal] = ordinal; } + // Don't read "empty". + if (ordinal == 0) { + ordinal = 1; + } data[i] = ordinal; } } finally { @@ -625,10 +629,18 @@ public class BukkitGetBlocks_1_16_1 extends CharGetBlocks { val = ordinal(palette.a(i), adapter); paletteToOrdinal[i] = val; } + // Don't read "empty". + if (val == 0) { + val = 1; + } data[i] = val; } } else { char ordinal = ordinal(palette.a(0), adapter); + // Don't read "empty". + if (ordinal == 0) { + ordinal = 1; + } Arrays.fill(data, ordinal); } } finally { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/blocks/CharGetBlocks.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/blocks/CharGetBlocks.java index fc2b72b96..9f3fd88a8 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/blocks/CharGetBlocks.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/blocks/CharGetBlocks.java @@ -27,7 +27,7 @@ public abstract class CharGetBlocks extends CharBlocks implements IChunkGet { public char[] update(int layer, char[] data) { if (data == null) { - return new char[4096]; + data = new char[4096]; } Arrays.fill(data, (char) 1); return data; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/BlockMask.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/BlockMask.java index e13026ba7..31259f5dd 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/BlockMask.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/BlockMask.java @@ -184,7 +184,7 @@ public class BlockMask extends ABlockMask { } @Override public boolean test(BlockState state) { - return ordinals[state.getOrdinal()]; + return ordinals[state.getOrdinal()] || replacesAir() && state.getOrdinal() <= 3; } @Override diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/InverseSingleBlockStateMask.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/InverseSingleBlockStateMask.java index 0f0ddb907..18812adac 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/InverseSingleBlockStateMask.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/InverseSingleBlockStateMask.java @@ -3,10 +3,10 @@ package com.sk89q.worldedit.function.mask; import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.world.block.BlockState; -import com.sk89q.worldedit.world.block.BlockStateHolder; public class InverseSingleBlockStateMask extends ABlockMask { private final char ordinal; + private final boolean isAir; public BlockState getBlockState() { return BlockState.getFromOrdinal(ordinal); @@ -14,17 +14,26 @@ public class InverseSingleBlockStateMask extends ABlockMask { public InverseSingleBlockStateMask(Extent extent, BlockState state) { super(extent); + isAir = state.isAir(); this.ordinal = state.getOrdinalChar(); } @Override public boolean test(Extent extent, BlockVector3 vector) { - return ordinal != vector.getOrdinal(extent); + int test = vector.getOrdinal(extent); + if (isAir && test == 0) { + return false; + } + return ordinal != test; } @Override public final boolean test(BlockState state) { - return state.getOrdinalChar() != ordinal; + int test = state.getOrdinalChar(); + if (isAir && test == 0) { + return false; + } + return test != ordinal; } @Override diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/SingleBlockTypeMask.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/SingleBlockTypeMask.java index 466f51c7e..d21eaf28d 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/SingleBlockTypeMask.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/SingleBlockTypeMask.java @@ -13,7 +13,7 @@ public class SingleBlockTypeMask extends ABlockMask { public SingleBlockTypeMask(Extent extent, BlockType type) { super(extent); isAir = type == BlockTypes.AIR || type == BlockTypes.CAVE_AIR || type == BlockTypes.VOID_AIR; - this.internalId = type.getInternalId(); + this.internalId = type.getInternalId(); } @Override