public static final void MoveDragon(final LittleEndianAccessor slea, final MapleCharacter chr) { slea.skip(8); // POS final List<LifeMovementFragment> res = MovementParse.parseMovement(slea, 5); if (chr != null && chr.getDragon() != null && res.size() > 0) { final Point pos = chr.getDragon().getPosition(); MovementParse.updatePosition(res, chr.getDragon(), 0); if (!chr.isHidden()) { chr.getMap() .broadcastMessage( chr, CField.moveDragon(chr.getDragon(), pos, res), chr.getTruePosition()); } WeakReference<MapleCharacter>[] clones = chr.getClones(); for (int i = 0; i < clones.length; i++) { if (clones[i].get() != null) { final MapleMap map = chr.getMap(); final MapleCharacter clone = clones[i].get(); CloneTimer.getInstance() .schedule( new Runnable() { public void run() { try { if (clone.getMap() == map && clone.getDragon() != null) { final Point startPos = clone.getDragon().getPosition(); MovementParse.updatePosition(res, clone.getDragon(), 0); if (!clone.isHidden()) { map.broadcastMessage( clone, CField.moveDragon(clone.getDragon(), startPos, res), clone.getTruePosition()); } } } catch (Exception e) { // very rarely swallowed } } }, 500 * i + 500); } } } }