Implementing ptp request timeouts.

Also fix and improve a few things as suggested by bm01
This commit is contained in:
TfT_02
2013-01-28 21:24:55 +01:00
parent 6db78d3cda
commit 0a17bf69c0
25 changed files with 259 additions and 48 deletions

View File

@ -100,6 +100,8 @@ public class Config extends ConfigLoader {
public boolean getCommandPartyChatPEnabled() { return config.getBoolean("Commands.p.Enabled", true); }
public int getPTPCommandCooldown() { return config.getInt("Commands.ptp.Cooldown", 30); }
public int getPTPCommandTimeout() { return config.getInt("Commands.ptp.Request_Timeout", 300); }
public boolean getPTPCommandConfirmRequired() { return config.getBoolean("Commands.ptp.Confirm_Required", true); }
public boolean getDonateMessageEnabled() { return config.getBoolean("Commands.mcmmo.Donate_Message", true); }
/* Items */

View File

@ -7,6 +7,8 @@ import java.io.FileWriter;
import java.util.ArrayList;
import java.util.HashMap;
import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.database.Database;
@ -31,8 +33,9 @@ public class PlayerProfile {
/* Party Stuff */
private Party party;
private Party invite;
private String ptpRequest;
private Player ptpRequest;
private boolean ptpEnabled = true;
private boolean ptpConfirmRequired = Config.getInstance().getPTPCommandConfirmRequired();
/* Toggles */
private boolean loaded;
@ -52,6 +55,7 @@ public class PlayerProfile {
private long recentlyHurt;
private int respawnATS;
private long lastSave = 0L;
private long ptpTimeout;
/* mySQL STUFF */
private int userId;
@ -1245,6 +1249,10 @@ public class PlayerProfile {
invite = null;
}
/*
* Party Teleportation
*/
public boolean getPtpEnabled() {
return ptpEnabled;
}
@ -1253,11 +1261,11 @@ public class PlayerProfile {
ptpEnabled = !ptpEnabled;
}
public void setPtpRequest(String ptpRequest) {
public void setPtpRequest(Player ptpRequest) {
this.ptpRequest = ptpRequest;
}
public String getPtpRequest() {
public Player getPtpRequest() {
return ptpRequest;
}
@ -1272,4 +1280,20 @@ public class PlayerProfile {
public void removePtpRequest() {
ptpRequest = null;
}
public boolean getPtpConfirmRequired() {
return ptpConfirmRequired;
}
public void togglePtpConfirmRequired() {
ptpConfirmRequired = !ptpConfirmRequired;
}
public long getPtpTimeout() {
return ptpTimeout;
}
public void actualizePtpTimeout() {
ptpTimeout = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
}
}

View File

@ -44,8 +44,8 @@ public class PtpCommand implements CommandExecutor {
if (args[0].equalsIgnoreCase("toggle")) {
return togglePartyTeleportation();
}
else if (args[0].equalsIgnoreCase("deny")) {
return denyTeleportRequest();
else if (args[0].equalsIgnoreCase("acceptany") || args[0].equalsIgnoreCase("acceptall")) {
return acceptAnyTeleportRequest();
}
int ptpCooldown = Config.getInstance().getPTPCommandCooldown();
@ -67,8 +67,8 @@ public class PtpCommand implements CommandExecutor {
}
}
private boolean sendTeleportRequest(String targetName) {
Player target = plugin.getServer().getPlayer(targetName);
private boolean sendTeleportRequest(String args) {
Player target = plugin.getServer().getPlayer(args);
if (player.equals(target)) {
player.sendMessage(LocaleLoader.getString("Party.Teleport.Self"));
@ -88,15 +88,31 @@ public class PtpCommand implements CommandExecutor {
if (PartyManager.inSameParty(player, target)) {
PlayerProfile targetProfile = Users.getProfile(target);
if (targetProfile.getPtpEnabled()) {
String senderName = player.getName();
targetProfile.setPtpRequest(senderName);
player.sendMessage(LocaleLoader.getString("Commands.Invite.Success"));
target.sendMessage(LocaleLoader.getString("Commands.ptp.Request", new Object[] {senderName}));
}
else {
if (!targetProfile.getPtpEnabled()) {
player.sendMessage(LocaleLoader.getString("Party.Teleport.Disabled", new Object[] { target.getName() }));
return true;
}
if (!Users.getProfile(target).getPtpConfirmRequired()) {
McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(player, target, playerProfile.getParty().getName());
plugin.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return true;
}
player.teleport(target);
player.sendMessage(LocaleLoader.getString("Party.Teleport.Player", new Object[] { player.getName() }));
target.sendMessage(LocaleLoader.getString("Party.Teleport.Target", new Object[] { target.getName() }));
playerProfile.setRecentlyHurt(System.currentTimeMillis());
} else {
targetProfile.setPtpRequest(player);
targetProfile.actualizePtpTimeout();
player.sendMessage(LocaleLoader.getString("Commands.Invite.Success"));
int ptpRequestExpire = Config.getInstance().getPTPCommandTimeout();
target.sendMessage(LocaleLoader.getString("Commands.ptp.Request1", new Object[] { player.getName() }));
target.sendMessage(LocaleLoader.getString("Commands.ptp.Request2", new Object[] { ptpRequestExpire }));
}
}
else {
@ -106,42 +122,54 @@ public class PtpCommand implements CommandExecutor {
}
private boolean acceptTeleportRequest() {
if (playerProfile.hasPtpRequest()) {
Player target = plugin.getServer().getPlayer(playerProfile.getPtpRequest());
if (Users.getProfile(target).getPtpEnabled()) {
McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(player, target, playerProfile.getParty().getName());
plugin.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return true;
}
target.teleport(player);
target.sendMessage(LocaleLoader.getString("Party.Teleport.Player", new Object[] { player.getName() }));
player.sendMessage(LocaleLoader.getString("Party.Teleport.Target", new Object[] { target.getName() }));
playerProfile.setRecentlyHurt(System.currentTimeMillis());
}
else {
player.sendMessage(LocaleLoader.getString("Party.Teleport.Disabled", new Object[] { target.getName() }));
}
}
else {
if (!playerProfile.hasPtpRequest()) {
player.sendMessage(LocaleLoader.getString("Commands.ptp.NoRequests"));
return true;
}
int ptpRequestExpire = Config.getInstance().getPTPCommandTimeout();
if ((playerProfile.getPtpTimeout() + ptpRequestExpire) * Misc.TIME_CONVERSION_FACTOR < System.currentTimeMillis()) {
playerProfile.removePtpRequest();
player.sendMessage(LocaleLoader.getString("Commands.ptp.RequestExpired"));
return true;
}
Player target = playerProfile.getPtpRequest();
if (target == null) {
player.sendMessage(LocaleLoader.getString("Party.Player.Invalid"));
return true;
}
if (target.isDead()) {
player.sendMessage(LocaleLoader.getString("Party.Teleport.Dead"));
return true;
}
McMMOPartyTeleportEvent event = new McMMOPartyTeleportEvent(player, target, playerProfile.getParty().getName());
plugin.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
return true;
}
target.teleport(player);
target.sendMessage(LocaleLoader.getString("Party.Teleport.Player", new Object[] { player.getName() }));
player.sendMessage(LocaleLoader.getString("Party.Teleport.Target", new Object[] { target.getName() }));
playerProfile.setRecentlyHurt(System.currentTimeMillis());
return true;
}
private boolean denyTeleportRequest() {
if (playerProfile.hasPtpRequest()) {
Player target = plugin.getServer().getPlayer(playerProfile.getPtpRequest());
player.sendMessage(LocaleLoader.getString("Commands.ptp.Deny"));
target.sendMessage(LocaleLoader.getString("Commands.ptp.Denied", new Object[] { player.getName() }));
playerProfile.removePtpRequest();
private boolean acceptAnyTeleportRequest() {
if (playerProfile.getPtpConfirmRequired()) {
player.sendMessage(LocaleLoader.getString("Commands.ptp.AcceptAny.Disabled"));
}
else {
player.sendMessage(LocaleLoader.getString("Commands.ptp.NoRequests"));
player.sendMessage(LocaleLoader.getString("Commands.ptp.AcceptAny.Enabled"));
}
playerProfile.togglePtpConfirmRequired();
return true;
}