Switch to using a Clipboard for regen in preparation for WE changes

This commit is contained in:
dordsor21 2020-07-19 14:17:38 +01:00
parent 656700b5be
commit d24c89405a
No known key found for this signature in database
GPG Key ID: 1E53E88969FFCF0B

View File

@ -36,13 +36,14 @@ import com.plotsquared.core.queue.LocalChunk;
import com.plotsquared.core.util.BlockUtil; import com.plotsquared.core.util.BlockUtil;
import com.plotsquared.core.util.MainUtil; import com.plotsquared.core.util.MainUtil;
import com.sk89q.jnbt.CompoundTag; import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.bukkit.BukkitAdapter; import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.util.SideEffect; import com.sk89q.worldedit.util.SideEffect;
import com.sk89q.worldedit.util.SideEffectSet; import com.sk89q.worldedit.util.SideEffectSet;
import com.sk89q.worldedit.world.World; import com.sk89q.worldedit.world.World;
@ -96,22 +97,22 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
} }
@Override public boolean enqueue() { @Override public boolean enqueue() {
final EditSession editSession; final Clipboard regenClipboard;
if (isRegen()) { if (isRegen()) {
editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(world, -1); Region region = new CuboidRegion(
world.regenerate(new CuboidRegion( BlockVector3.at(getRegenStart()[0] << 4, 0, getRegenStart()[1] << 4),
BlockVector3.at(getRegenStart()[0] << 4, 0, getRegenStart()[1] << 4), BlockVector3.at((getRegenEnd()[0] << 4) + 15, 255, (getRegenEnd()[1] << 4) + 15));
BlockVector3.at((getRegenEnd()[0] << 4) + 15, 255, (getRegenEnd()[1] << 4) + 15)), regenClipboard = new BlockArrayClipboard(region);
editSession); world.regenerate(region, regenClipboard);
} else { } else {
editSession = null; regenClipboard = null;
} }
Consumer<BlockVector2> consumer = getChunkConsumer(); Consumer<BlockVector2> consumer = getChunkConsumer();
if (consumer == null) { if (consumer == null) {
consumer = blockVector2 -> { consumer = blockVector2 -> {
LocalChunk localChunk = getBlockChunks().get(blockVector2); LocalChunk localChunk = getBlockChunks().get(blockVector2);
boolean isRegenChunk = boolean isRegenChunk =
editSession != null && blockVector2.getBlockX() > getRegenStart()[0] regenClipboard != null && blockVector2.getBlockX() > getRegenStart()[0]
&& blockVector2.getBlockZ() > getRegenStart()[1] && blockVector2.getBlockZ() > getRegenStart()[1]
&& blockVector2.getBlockX() < getRegenEnd()[0] && blockVector2.getBlockX() < getRegenEnd()[0]
&& blockVector2.getBlockZ() < getRegenEnd()[1]; && blockVector2.getBlockZ() < getRegenEnd()[1];
@ -121,7 +122,7 @@ public class BukkitQueueCoordinator extends BasicQueueCoordinator {
for (int x = 0; x < 16; x++) { for (int x = 0; x < 16; x++) {
for (int z = 0; z < 16; z++) { for (int z = 0; z < 16; z++) {
BaseBlock block = BaseBlock block =
editSession.getFullBlock(BlockVector3.at(x, y, z)); regenClipboard.getFullBlock(BlockVector3.at(x, y, z));
setWorldBlock(x, y, z, block, blockVector2); setWorldBlock(x, y, z, block, blockVector2);
} }
} }