public synchronized T waitForResponse() throws InterruptedException, IllegalAccessException {
		if (p == null)
			throw new IllegalAccessException("No target found! The player was not set. Please call setPlayer(Player) before-hand");
		if (invalidCall(p.getServer(), Thread.currentThread().getId()))
			throw new IllegalAccessException("You cant use this method on the same thread as the packet reading thread!");
		setup();
		while (true) {
			if (isCompleted() || isCancelled())
				break;
			super.wait(0L);
		}
		return getResponse();
	}