* The TPA Queue is Last-In-First-Out queue which stores all the active pending teleport * requests of this {@link IUser}. Timeout calculations are also done during the * iteration process of this method, ensuring that teleport requests made past the timeout * period are removed from queue and therefore not returned here. The maximum size of this * queue is determined by {@link ISettings#getTpaMaxRequests()}. * * @param inform true if the underlying {@link IUser} should be informed if a request expires during iteration. * @param ignoreExpirations true if this method should not process expirations for the entire queue and stop execution on the first unexpired request. * @param excludeHere true if /tphere requests should be ignored in fetching the next tpa request. * @return A {@link TpaRequest} corresponding to the next available request or null if no valid request is present. */ @Nullable TpaRequest getNextTpaRequest(boolean inform, boolean ignoreExpirations, boolean excludeHere); /** * Whether or not this {@link IUser} has any valid TPA requests in queue. * * @param inform true if the user should be informed if a request expires during iteration. * @param excludeHere true if /tpahere requests should be ignored in checking if a tpa request is available. * @return true if the user has an available pending request in queue. */ boolean hasPendingTpaRequests(boolean inform, boolean excludeHere); class TpaRequest { private final String name; private final UUID requesterUuid; private boolean here; private Location location; private long time; public TpaRequest(String name, UUID requesterUuid) { this.name = name; this.requesterUuid = requesterUuid; } public String getName() { return name; } public UUID getRequesterUuid() { return requesterUuid; } public boolean isHere() { return here; } public void setHere(boolean here) { this.here = here; } public Location getLocation() { return location; } public void setLocation(Location location) { this.location = location; } public long getTime() { return time; } public void setTime(long time) { this.time = time; } } }