Check for timeout in /tpa and /tpaccept. Fixes #818.

This commit adds a method called hasOutstandingTeleportRequest() in IUser - implemented fully in User.
This commit is contained in:
Ali Moghnieh 2016-11-22 20:39:31 +00:00
parent 6ade8132af
commit ad94cca95b
No known key found for this signature in database
GPG Key ID: F09D3A1BAF2E6D70
5 changed files with 28 additions and 4 deletions

View File

@ -43,6 +43,13 @@ public interface IUser {
void requestTeleport(final User player, final boolean here);
/**
* Returns whether this user has an outstanding teleport request to deal with.
*
* @return whether there is a teleport request
*/
boolean hasOutstandingTeleportRequest();
ITeleport getTeleport();
BigDecimal getMoney();

View File

@ -241,6 +241,24 @@ public class User extends UserData implements Comparable<User>, IMessageRecipien
}
}
@Override
public boolean hasOutstandingTeleportRequest() {
if (getTeleportRequest() != null) { // Player has outstanding teleport request.
long timeout = ess.getSettings().getTpaAcceptCancellation();
if (timeout != 0) {
if ((System.currentTimeMillis() - getTeleportRequestTime()) / 1000 <= timeout) { // Player has outstanding request
return true;
} else { // outstanding request expired.
requestTeleport(null, false);
return false;
}
} else { // outstanding request does not expire
return true;
}
}
return false;
}
public UUID getTeleportRequest() {
return teleportRequester;
}

View File

@ -28,7 +28,7 @@ public class Commandtpa extends EssentialsCommand {
throw new Exception(tl("noPerm", "essentials.worlds." + player.getWorld().getName()));
}
// Don't let sender request teleport twice to the same player.
if (user.getConfigUUID().equals(player.getTeleportRequest())
if (user.getConfigUUID().equals(player.getTeleportRequest()) && player.hasOutstandingTeleportRequest() // Check timeout
&& player.isTpRequestHere() == false) { // Make sure the last teleport request was actually tpa and not tpahere
throw new Exception(tl("requestSentAlready", player.getDisplayName()));
}

View File

@ -40,8 +40,7 @@ public class Commandtpaccept extends EssentialsCommand {
throw new Exception(tl("noPendingRequest"));
}
long timeout = ess.getSettings().getTpaAcceptCancellation();
if (timeout != 0 && (System.currentTimeMillis() - user.getTeleportRequestTime()) / 1000 > timeout) {
if (user.hasOutstandingTeleportRequest()) {
user.requestTeleport(null, false);
throw new Exception(tl("requestTimedOut"));
}

View File

@ -28,7 +28,7 @@ public class Commandtpahere extends EssentialsCommand {
throw new Exception(tl("noPerm", "essentials.worlds." + user.getWorld().getName()));
}
// Don't let sender request teleport twice to the same player.
if (user.getConfigUUID().equals(player.getTeleportRequest())
if (user.getConfigUUID().equals(player.getTeleportRequest()) && player.hasOutstandingTeleportRequest() // Check timeout
&& player.isTpRequestHere() == true) { // Make sure the last teleport request was actually tpahere and not tpa
throw new Exception(tl("requestSentAlready", player.getDisplayName()));
}