Get chunks asynchronously

This commit is contained in:
MattBDev
2019-08-05 13:33:27 -04:00
parent 9e8a6c702d
commit fe83ef0975
3 changed files with 23 additions and 20 deletions

View File

@ -10,6 +10,7 @@ import com.github.intellectualsites.plotsquared.plot.util.block.BasicLocalBlockQ
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.world.block.BaseBlock;
import io.papermc.lib.PaperLib;
import lombok.NonNull;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
@ -20,6 +21,7 @@ import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import java.util.Locale;
import java.util.concurrent.ExecutionException;
public class BukkitLocalQueue extends BasicLocalBlockQueue {
@ -69,7 +71,8 @@ public class BukkitLocalQueue extends BasicLocalBlockQueue {
}
}
@Override public final void setComponents(LocalChunk lc) {
@Override public final void setComponents(LocalChunk lc)
throws ExecutionException, InterruptedException {
setBaseBlocks(lc);
}
@ -77,14 +80,17 @@ public class BukkitLocalQueue extends BasicLocalBlockQueue {
return Bukkit.getWorld(getWorld());
}
public Chunk getChunk(int x, int z) {
return getBukkitWorld().getChunkAt(x, z);
public Chunk getChunk(int x, int z) throws ExecutionException, InterruptedException {
return PaperLib.getChunkAtAsync(getBukkitWorld(), x, z).get();
}
public void setBaseBlocks(LocalChunk lc) {
public void setBaseBlocks(LocalChunk lc) throws ExecutionException, InterruptedException {
World worldObj = Bukkit.getWorld(getWorld());
if (worldObj == null) {
throw new NullPointerException("World cannot be null.");
}
PaperLib.getChunkAtAsync(worldObj, lc.getX(), lc.getZ(), true).get();
Chunk chunk = worldObj.getChunkAt(lc.getX(), lc.getZ());
chunk.load(true);
for (int layer = 0; layer < lc.baseblocks.length; layer++) {
BaseBlock[] blocksLayer = lc.baseblocks[layer];
if (blocksLayer != null) {