public void run() {
		if (!parent.getConfig().getBool(Option.DisableEditDupeProtection)) {
			for (Entry<Player, CBlock> e : map.entrySet()) {
				Iterator<BlockDesc> i = e.getValue().getBlocks();
				while (i.hasNext()) {
					Block b = Util.getBlockAtLocation(i.next().blockLoc);
					if (!Util.typeEquals(b.getType(), e.getValue().getType())) {
						parent.log.debug("Block at " + Util.formatLocation(b.getLocation()) + " was " + b.getType() + " but expected " + e.getValue().getType() + ", dupe!");
						i.remove();
						e.getKey().sendMessage("Removing block due to changed while editing " + Util.formatBlockCount(e.getValue()));
						return;
					}
				}
			}
		}
		for (Entry<Player, CBlock> e : map.entrySet()) {
			Iterator<BlockDesc> i = e.getValue().getBlocks();
			while (i.hasNext()) {
				BlockDesc d = i.next();
				Block b = Util.getBlockAtLocation(d.blockLoc);
				d.blockData = b.getState().getData().getData();
			}
		}
	}