From f96760b36c9f1ed358bb87bb3005a7aa9cf6c7c0 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Thu, 2 May 2019 02:01:41 +1000 Subject: [PATCH] block set test --- .../fawe/bukkit/beta/BukkitChunkHolder.java | 23 ++++++++++++++++++- .../boydti/fawe/bukkit/beta/BukkitQueue.java | 4 ++-- .../worldedit/command/RegionCommands.java | 20 ++++++++++++++++ 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/beta/BukkitChunkHolder.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/beta/BukkitChunkHolder.java index 61d872767..27ba85f7b 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/beta/BukkitChunkHolder.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/beta/BukkitChunkHolder.java @@ -1,10 +1,15 @@ package com.boydti.fawe.bukkit.beta; import com.boydti.fawe.beta.Filter; +import com.boydti.fawe.beta.IChunk; import com.boydti.fawe.beta.IGetBlocks; import com.boydti.fawe.beta.IQueueExtent; import com.boydti.fawe.beta.implementation.blocks.CharSetBlocks; import com.boydti.fawe.beta.implementation.holder.ChunkHolder; +import com.google.common.util.concurrent.Futures; +import net.minecraft.server.v1_13_R2.Chunk; +import net.minecraft.server.v1_13_R2.ChunkSection; +import org.bukkit.World; import java.util.concurrent.Future; @@ -25,6 +30,20 @@ public class BukkitChunkHolder> extends ChunkHolder { BukkitQueue extent = (BukkitQueue) getExtent(); BukkitGetBlocks get = (BukkitGetBlocks) getOrCreateGet(); CharSetBlocks set = (CharSetBlocks) getOrCreateSet(); + int X = getX(); + int Z = getZ(); + + Chunk currentNmsChunk = extent.ensureLoaded(X, Z); + ChunkSection[] sections = currentNmsChunk.getSections(); + World world = extent.getBukkitWorld(); + boolean hasSky = world.getEnvironment() == World.Environment.NORMAL; + + for (int layer = 0; layer < 16; layer++) { + if (!set.hasSection(layer)) continue; + char[] arr = set.blocks[layer]; + ChunkSection newSection = extent.newChunkSection(layer, hasSky, arr); + sections[layer] = newSection; + } @@ -48,8 +67,10 @@ public class BukkitChunkHolder> extends ChunkHolder { */ - throw new UnsupportedOperationException("Not implemented"); +// throw new UnsupportedOperationException("Not implemented"); // return true; + return null; +// return (T) (Future) Futures.immediateFuture(null); } @Override diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/beta/BukkitQueue.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/beta/BukkitQueue.java index 5c869bc29..f63dfd327 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/beta/BukkitQueue.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/beta/BukkitQueue.java @@ -160,8 +160,8 @@ public class BukkitQueue extends SimpleCharQueueExtent { NMS conversion */ - public static ChunkSection newChunkSection(final int y2, final boolean flag, final char[] blocks) { - ChunkSection section = new ChunkSection(y2 << 4, flag); + public static ChunkSection newChunkSection(final int layer, final boolean flag, final char[] blocks) { + ChunkSection section = new ChunkSection(layer << 4, flag); if (blocks == null) { return section; } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java index 695c730fb..d02d2dd03 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java @@ -287,6 +287,26 @@ public class RegionCommands extends MethodCommands { System.out.println(diff); } + @Command( + aliases = {"db2"}, + usage = "", + desc = "db2", + help = "db2" + ) + public void db2(Player player, @Selection Region region) throws WorldEditException { + QueueHandler queueHandler = Fawe.get().getQueueHandler(); + World world = player.getWorld(); + IQueueExtent queue = queueHandler.getQueue(world); + BlockState block = BlockTypes.STONE.getDefaultState(); + long start = System.currentTimeMillis(); + for (BlockVector3 p : region) { + queue.setBlock(p.getX(), p.getY(), p.getZ(), block); + } + queue.flush(); + long diff = System.currentTimeMillis() - start; + System.out.println(diff); + } + @Command( aliases = {"/curve", "/spline"}, usage = " [thickness]",