From 84f1ee19fc77461bddf44b8425f3703fd6e3dd1c Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Mon, 24 Oct 2016 23:43:11 +1100 Subject: [PATCH] Fixes #322 --- .../fawe/bukkit/v0/BukkitQueue_All.java | 5 +++ .../fawe/bukkit/v1_10/BukkitQueue_1_10.java | 13 ++++++++ .../fawe/bukkit/v1_7/BukkitQueue17.java | 13 ++++++++ .../fawe/bukkit/v1_8/BukkitQueue18R3.java | 13 ++++++++ .../fawe/bukkit/v1_9/BukkitQueue_1_9_R1.java | 13 ++++++++ .../fawe/example/NMSMappedFaweQueue.java | 15 ++------- .../com/boydti/fawe/example/NMSRelighter.java | 33 ++++++++++++------- .../com/boydti/fawe/jnbt/anvil/MCAChunk.java | 4 +++ .../com/boydti/fawe/jnbt/anvil/MCAQueue.java | 13 ++++++++ .../boydti/fawe/forge/v0/ForgeQueue_All.java | 13 ++++++++ .../boydti/fawe/forge/v0/ForgeQueue_All.java | 13 ++++++++ .../boydti/fawe/forge/v0/ForgeQueue_All.java | 13 ++++++++ .../boydti/fawe/forge/v0/ForgeQueue_All.java | 13 ++++++++ .../optimization/queue/NukkitQueue.java | 13 ++++++++ 14 files changed, 163 insertions(+), 24 deletions(-) diff --git a/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_All.java b/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_All.java index 0bc835cc..90e1e9b1 100644 --- a/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_All.java +++ b/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_All.java @@ -37,6 +37,11 @@ public class BukkitQueue_All extends BukkitQueue_0 { } } + @Override + public void setHeightMap(FaweChunk chunk, int[] heightMap) { + // Do nothing + } + @Override public void setSkyLight(Chunk chunk, int x, int y, int z, int value) { diff --git a/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java b/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java index bd2ae6d8..ea84f48b 100644 --- a/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java +++ b/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java @@ -80,6 +80,19 @@ public class BukkitQueue_1_10 extends BukkitQueue_0 otherMap[i]) { + otherMap[i] = heightMap[i]; + } + } + } + } + private void init() { checkVersion("v1_10_R1"); if (air == null) { diff --git a/bukkit1710/src/main/java/com/boydti/fawe/bukkit/v1_7/BukkitQueue17.java b/bukkit1710/src/main/java/com/boydti/fawe/bukkit/v1_7/BukkitQueue17.java index 062b5033..dede9fa3 100644 --- a/bukkit1710/src/main/java/com/boydti/fawe/bukkit/v1_7/BukkitQueue17.java +++ b/bukkit1710/src/main/java/com/boydti/fawe/bukkit/v1_7/BukkitQueue17.java @@ -86,6 +86,19 @@ public class BukkitQueue17 extends BukkitQueue_0 otherMap[i]) { + otherMap[i] = heightMap[i]; + } + } + } + } + @Override public boolean isChunkLoaded(int x, int z) { return getWorld().isChunkLoaded(x, z); diff --git a/bukkit18/src/main/java/com/boydti/fawe/bukkit/v1_8/BukkitQueue18R3.java b/bukkit18/src/main/java/com/boydti/fawe/bukkit/v1_8/BukkitQueue18R3.java index dfe8adb1..497b4ea0 100644 --- a/bukkit18/src/main/java/com/boydti/fawe/bukkit/v1_8/BukkitQueue18R3.java +++ b/bukkit18/src/main/java/com/boydti/fawe/bukkit/v1_8/BukkitQueue18R3.java @@ -84,6 +84,19 @@ public class BukkitQueue18R3 extends BukkitQueue_0 otherMap[i]) { + otherMap[i] = heightMap[i]; + } + } + } + } + @Override public boolean isChunkLoaded(int x, int z) { return getWorld().isChunkLoaded(x, z); diff --git a/bukkit19/src/main/java/com/boydti/fawe/bukkit/v1_9/BukkitQueue_1_9_R1.java b/bukkit19/src/main/java/com/boydti/fawe/bukkit/v1_9/BukkitQueue_1_9_R1.java index 96931970..ac8e0f62 100644 --- a/bukkit19/src/main/java/com/boydti/fawe/bukkit/v1_9/BukkitQueue_1_9_R1.java +++ b/bukkit19/src/main/java/com/boydti/fawe/bukkit/v1_9/BukkitQueue_1_9_R1.java @@ -96,6 +96,19 @@ public class BukkitQueue_1_9_R1 extends BukkitQueue_0 otherMap[i]) { + otherMap[i] = heightMap[i]; + } + } + } + } + @Override public ChunkSection[] getCachedSections(World world, int cx, int cz) { CraftChunk chunk = (CraftChunk) world.getChunkAt(cx, cz); diff --git a/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java b/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java index 72ba94de..216a2355 100644 --- a/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java +++ b/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java @@ -1,11 +1,9 @@ package com.boydti.fawe.example; -import com.boydti.fawe.Fawe; import com.boydti.fawe.FaweCache; import com.boydti.fawe.config.Settings; import com.boydti.fawe.object.FaweChunk; import com.boydti.fawe.object.exception.FaweException; -import com.boydti.fawe.util.SetQueue; import com.boydti.fawe.util.TaskManager; import com.sk89q.jnbt.CompoundTag; import com.sk89q.worldedit.world.World; @@ -90,18 +88,11 @@ public abstract class NMSMappedFaweQueue ex @Override public void sendChunk(final FaweChunk fc) { - if (Fawe.get().isMainThread()) { - refreshChunk(fc); - } else { - SetQueue.IMP.addTask(new Runnable() { - @Override - public void run() { - refreshChunk(fc); - } - }); - } + refreshChunk(fc); } + public abstract void setHeightMap(FaweChunk chunk, int[] heightMap); + public abstract void setFullbright(CHUNKSECTION sections); public abstract boolean removeLighting(CHUNKSECTION sections, RelightMode mode, boolean hasSky); diff --git a/core/src/main/java/com/boydti/fawe/example/NMSRelighter.java b/core/src/main/java/com/boydti/fawe/example/NMSRelighter.java index 59b429be..edb78bb5 100644 --- a/core/src/main/java/com/boydti/fawe/example/NMSRelighter.java +++ b/core/src/main/java/com/boydti/fawe/example/NMSRelighter.java @@ -3,13 +3,10 @@ package com.boydti.fawe.example; import com.boydti.fawe.FaweCache; import com.boydti.fawe.object.FaweChunk; import com.boydti.fawe.object.FaweQueue; +import com.boydti.fawe.object.RunnableVal; import com.boydti.fawe.util.MathMan; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import com.boydti.fawe.util.TaskManager; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class NMSRelighter { @@ -129,12 +126,22 @@ public class NMSRelighter { } public void sendChunks() { + final Map fcs = new HashMap<>(skyToRelight.size()); for (Map.Entry entry : skyToRelight.entrySet()) { RelightSkyEntry chunk = entry.getValue(); CharFaweChunk fc = (CharFaweChunk) queue.getFaweChunk(chunk.x, chunk.z); + fcs.put(fc, chunk.heightMap); fc.setBitMask(chunk.bitmask); queue.sendChunk(fc); } + TaskManager.IMP.sync(new RunnableVal() { + @Override + public void run(Object value) { + for (Map.Entry entry : fcs.entrySet()) { + queue.setHeightMap(entry.getKey(), entry.getValue()); + } + } + }); } private boolean isTransparent(int x, int y, int z) { @@ -196,12 +203,6 @@ public class NMSRelighter { if (brightness > 1 && (brightness != 15 || opacity != 15)) { lightBlock(bx + x, y, bz + z, brightness); } - if (opacity > 1 && opacity >= value) { - mask[j] = 0; - queue.setBlockLight(section, x, y, z, 0); - queue.setSkyLight(section, x, y, z, 0); - continue; - } switch (value) { case 0: if (opacity > 1) { @@ -230,6 +231,12 @@ public class NMSRelighter { case 9: case 11: case 13: + if (opacity >= value) { + mask[j] = 0; + queue.setBlockLight(section, x, y, z, 0); + queue.setSkyLight(section, x, y, z, 0); + continue; + } if (opacity <= 1) { mask[j] = --value; } else { @@ -238,6 +245,7 @@ public class NMSRelighter { break; case 15: if (opacity > 1) { + chunk.heightMap[z << 4 | x] = y; value -= opacity; mask[j] = value; } @@ -336,6 +344,7 @@ public class NMSRelighter { public final int x; public final int z; public final byte[] mask; + public int[] heightMap = new int[256]; public final boolean[] fix; public int bitmask; public boolean smooth; diff --git a/core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAChunk.java b/core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAChunk.java index 7abf6275..e59acc57 100644 --- a/core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAChunk.java +++ b/core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAChunk.java @@ -191,6 +191,10 @@ public class MCAChunk extends FaweChunk { streamer.readFully(); } + public int[] getHeightMapArray() { + return heightMap; + } + public void setDeleted(boolean deleted) { setModified(); this.deleted = deleted; diff --git a/core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAQueue.java b/core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAQueue.java index 7961c063..962ce9de 100644 --- a/core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAQueue.java +++ b/core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAQueue.java @@ -162,6 +162,19 @@ public class MCAQueue extends NMSMappedFaweQueue otherMap[i]) { + otherMap[i] = heightMap[i]; + } + } + } + } + @Override public void setFullbright(FaweChunk sections) { if (sections.getClass() == MCAChunk.class) { diff --git a/forge110/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java b/forge110/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java index 7385874a..303b7d95 100644 --- a/forge110/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java +++ b/forge110/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java @@ -78,6 +78,19 @@ public class ForgeQueue_All extends NMSMappedFaweQueue otherMap[i]) { + otherMap[i] = heightMap[i]; + } + } + } + } + protected BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(0, 0, 0); @Override diff --git a/forge1710/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java b/forge1710/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java index c2a783ec..c7d422f4 100644 --- a/forge1710/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java +++ b/forge1710/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java @@ -75,6 +75,19 @@ public class ForgeQueue_All extends NMSMappedFaweQueue otherMap[i]) { + otherMap[i] = heightMap[i]; + } + } + } + } + @Override public CompoundTag getTileEntity(Chunk chunk, int x, int y, int z) { Map tiles = chunk.chunkTileEntityMap; diff --git a/forge189/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java b/forge189/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java index 0b6a50f2..9b1b785f 100644 --- a/forge189/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java +++ b/forge189/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java @@ -72,6 +72,19 @@ public class ForgeQueue_All extends NMSMappedFaweQueue otherMap[i]) { + otherMap[i] = heightMap[i]; + } + } + } + } + protected BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(0, 0, 0); @Override diff --git a/forge194/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java b/forge194/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java index a9ffec35..767fe0b6 100644 --- a/forge194/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java +++ b/forge194/src/main/java/com/boydti/fawe/forge/v0/ForgeQueue_All.java @@ -80,6 +80,19 @@ public class ForgeQueue_All extends NMSMappedFaweQueue otherMap[i]) { + otherMap[i] = heightMap[i]; + } + } + } + } + @Override public CompoundTag getTileEntity(Chunk chunk, int x, int y, int z) { Map tiles = chunk.getTileEntityMap(); diff --git a/nukkit/src/main/java/com/boydti/fawe/nukkit/optimization/queue/NukkitQueue.java b/nukkit/src/main/java/com/boydti/fawe/nukkit/optimization/queue/NukkitQueue.java index 100be89d..83f2937e 100644 --- a/nukkit/src/main/java/com/boydti/fawe/nukkit/optimization/queue/NukkitQueue.java +++ b/nukkit/src/main/java/com/boydti/fawe/nukkit/optimization/queue/NukkitQueue.java @@ -49,6 +49,19 @@ public class NukkitQueue extends NMSMappedFaweQueue otherMap[i]) { + otherMap[i] = heightMap[i]; + } + } + } + } + public FaweNukkit getFaweNukkit() { return faweNukkit; }