public void dropClient(int clientId, String reason) {
		logger.finer("Dropping client " + clientId + ": " + reason);
		boolean clientDropped = false;
		synchronized(CONNECTION_LOCK) {
			if(clients.containsKey(clientId)) {
				ClientInfo client = clients.get(clientId);
				try {
					sendPacket(Packet.createForceDisconnectPacket(clientId, reason), client);
				} catch (CouldNotSendPacketException e) {
					//no need to report that we couldn't ask the client to disconnect--we're dropping the client regardless
				}
				clients.remove(clientId);
				clientDropped = true;
			}
			else {
				logger.finer("Client " + clientId + " could not be dropped: Client not connected.");
			}
		}
		if(clientDropped)
			onClientDisconnected(clientId, Server.DROPPED_BY_SERVER);
	}