private void updatePlayerPositions() { if(opponent != null) { if(opponent.getCurrentPos().equals(getCurrentPos())) { inCombat = true; opponent.inCombat = true; combatView = 9; opponent.combatView = 8; } } outStream.createPacket(255); outStream.initBitAccess(); outStream.writeBits(10, getCurrentPos().getX()); outStream.writeBits(12, getCurrentPos().getY()); outStream.writeBits(4, inCombat ? combatView : walkingQueue.getNextDirection()); outStream.writeBits(8, playersInArea.size() - 1); // Players in area minus this player for(Connection c : playersInArea) { if(c == this) continue; if(c.walkingQueue.hasNextStep()) { outStream.writeBits(1, 1); outStream.writeBits(1, 0); outStream.writeBits(3, c.inCombat ? c.combatView : c.walkingQueue.getNextDirection()); } else { outStream.writeBits(1, 0); } } for(Connection c : newPlayersInArea) { if(c.appearanceUpdateRequired || firstUpdateRequired) { outStream.writeBits(11, c.playerId); int xOffset = c.getCurrentPos().getX() - getCurrentPos().getX(); int yOffset = c.getCurrentPos().getY() - getCurrentPos().getY(); outStream.writeBits(5, xOffset < 0 ? xOffset + 32 : xOffset); outStream.writeBits(5, yOffset < 0 ? yOffset + 32 : yOffset); outStream.writeBits(4, c.inCombat ? c.combatView : c.walkingQueue.getNextDirection()); outStream.writeBits(1, 0); } } outStream.finishBitAccess(); outStream.sendPacket(); }