蚊取り線香のように、渦巻状に、外側から1マス(Y軸0-255)を消滅していくプログラムを
Javaのプラグインで作りました。
0.5秒で1マス分消えていくので、タイムリミット付きのゲームなどに使えるかもしれません。
public class AreaDel extends BaseAction {
private List<Vector> list = new ArrayList<>();
private Player player;
@Override
public void exeAction(Event e) {
player = e.getPlayer();
delBlockRing(100);
}
public void delBlockRing(int w){
int rcnt = w / 2;
int sx = 0;
int sy = 0;
int sz = 0;
int ey = 255;
Vector v;
for(int r=rcnt;r>=1;r--){ //リング何番目?(外から順番)
sx = r * -1;
sz = r * -1;
for(int i=sx;i<=r;i++){ //右へ
sx = i;
v = new Vector();
v.setX(sx);
v.setZ(sz);
list.add(v);
}
sz = sz + 1;
for(int i=sz;i<=r;i++){ //下へ
sz = i;
v = new Vector();
v.setX(sx);
v.setZ(sz);
list.add(v);
}
sx = sx - 1;
for(int i=sx;i>=-r;i--){ //左へ
sx = i;
v = new Vector();
v.setX(sx);
v.setZ(sz);
list.add(v);
}
sz = sz - 1;
for(int i=sz;i>=-r+1;i--){ //上へ
sz = i;
v = new Vector();
v.setX(sx);
v.setZ(sz);
list.add(v);
}
}
v = new Vector();
v.setX(0);
v.setZ(0);
list.add(v);
int cnt = 0;
for(Iterator<Vector> it = list.iterator(); it.hasNext();) {
cnt++;
v = it.next();
sx = v.getBlockX();
sz = v.getBlockZ();
String cmdStr = setFill + sx + " " + sy + " " + sz
+ " " + sx + " " + ey + " " + sz
+ " air replace";
new AreaDelRunnale(player,cmdStr).runTaskLater(【プラグインClass】, 10 * cnt); //0.5秒に1回
}
}
}
class AreaDelRunnale extends BukkitRunnable {
public Player p;
public String c = "";
public AreaDelRunnale(Player player,String cmdStr){
p = player;
c = cmdStr;
}
public boolean cmdExe(){
return Bukkit.dispatchCommand(p, c);
}
@Override
public void run() {
Bukkit.getServer().getScheduler().callSyncMethod(Config.pl, new Callable<Object>() {
@Override
public Object call() throws Exception {
return cmdExe();
}
});
}
}