【マイクラ】蚊取り線香の渦巻状に消滅していくjavaプログラム

蚊取り線香のように、渦巻状に、外側から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();
            }
        });
    }
}