fix async tile state

This commit is contained in:
Julian Krings 2024-08-13 21:35:17 +02:00
parent d275466e1e
commit b6457e47e6

View File

@ -35,6 +35,7 @@ import com.volmit.iris.util.plugin.IrisService;
import com.volmit.iris.util.plugin.VolmitSender; import com.volmit.iris.util.plugin.VolmitSender;
import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.J;
import com.volmit.iris.util.scheduling.S; import com.volmit.iris.util.scheduling.S;
import com.volmit.iris.util.scheduling.SR;
import org.bukkit.*; import org.bukkit.*;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
@ -53,10 +54,12 @@ import org.bukkit.util.Vector;
import java.awt.Color; import java.awt.Color;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.CountDownLatch;
public class WandSVC implements IrisService { public class WandSVC implements IrisService {
private static final Particle CRIT_MAGIC = E.getOrDefault(Particle.class, "CRIT_MAGIC", "CRIT"); private static final Particle CRIT_MAGIC = E.getOrDefault(Particle.class, "CRIT_MAGIC", "CRIT");
private static final Particle REDSTONE = E.getOrDefault(Particle.class, "REDSTONE", "DUST"); private static final Particle REDSTONE = E.getOrDefault(Particle.class, "REDSTONE", "DUST");
private static final int BLOCKS_PER_TICK = Integer.parseInt(System.getProperty("iris.blocks_per_tick", "100"));
private static ItemStack dust; private static ItemStack dust;
private static ItemStack wand; private static ItemStack wand;
@ -80,15 +83,43 @@ public class WandSVC implements IrisService {
Location[] f = getCuboid(p); Location[] f = getCuboid(p);
Cuboid c = new Cuboid(f[0], f[1]); Cuboid c = new Cuboid(f[0], f[1]);
IrisObject s = new IrisObject(c.getSizeX(), c.getSizeY(), c.getSizeZ()); IrisObject s = new IrisObject(c.getSizeX(), c.getSizeY(), c.getSizeZ());
for (Block b : c) {
if (b.getType().equals(Material.AIR)) { if (Bukkit.isPrimaryThread()) {
continue; for (Block b : c) {
if (b.getType().equals(Material.AIR)) {
continue;
}
BlockVector bv = b.getLocation().subtract(c.getLowerNE().toVector()).toVector().toBlockVector();
s.setUnsigned(bv.getBlockX(), bv.getBlockY(), bv.getBlockZ(), b);
} }
BlockVector bv = b.getLocation().subtract(c.getLowerNE().toVector()).toVector().toBlockVector(); return s;
s.setUnsigned(bv.getBlockX(), bv.getBlockY(), bv.getBlockZ(), b);
} }
var it = c.iterator();
var latch = new CountDownLatch(1);
new SR() {
@Override
public void run() {
for (int i = 0; i < BLOCKS_PER_TICK; i++) {
if (!it.hasNext()) {
cancel();
latch.countDown();
return;
}
var b = it.next();
if (b.getType().equals(Material.AIR))
continue;
BlockVector bv = b.getLocation().subtract(c.getLowerNE().toVector()).toVector().toBlockVector();
s.setUnsigned(bv.getBlockX(), bv.getBlockY(), bv.getBlockZ(), b);
}
}
};
latch.await();
return s; return s;
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();