private void runTasks() {
        final Iterator<BlockData> it = blockUpdates.iterator();
        final BukkitRunnable t = this;
        while(it.hasNext()) {
            new BukkitRunnable() {
                public void run() {
                    synchronized(t) {
                        for(int i = 0; i < 4096; ++i) {
                            if(it.hasNext()) {
                                BlockData b = it.next();
                                Location l = b.loc;
                                w.getBlockAt(l.getBlockX(), l.getBlockY(), l.getBlockZ()).
                                        setTypeIdAndData(b.id, b.meta, false);
                            }
                        }

                        t.notify();
                    }

                }
            }.runTaskLater(Plugin.plug, 1);
            synchronized(t) {
                try {
                    t.wait();
                } catch(InterruptedException ex) {
                }
            }
        }
    }