Cancel teleport on damage or move

This commit is contained in:
boy0001 2015-02-11 17:08:14 +11:00
parent 4166f1276a
commit 5f9dce1a07
4 changed files with 29 additions and 1 deletions

View File

@ -598,9 +598,16 @@ public class PlotMain extends JavaPlugin implements Listener {
final World world = player.getWorld(); final World world = player.getWorld();
final int x = loc.getBlockX(); final int x = loc.getBlockX();
final int z = loc.getBlockZ(); final int z = loc.getBlockZ();
final String name = player.getName();
TaskManager.TELEPORT_QUEUE.add(name);
TaskManager.runTaskLater(new Runnable() { TaskManager.runTaskLater(new Runnable() {
@Override @Override
public void run() { public void run() {
if (!TaskManager.TELEPORT_QUEUE.contains(name)) {
PlayerFunctions.sendMessage(player, C.TELEPORT_FAILED);
return;
}
TaskManager.TELEPORT_QUEUE.remove(name);
if (!player.isOnline()) { if (!player.isOnline()) {
return; return;
} }

View File

@ -261,7 +261,7 @@ public enum C {
TELEPORTED_TO_PLOT("&6You have been teleported"), TELEPORTED_TO_PLOT("&6You have been teleported"),
TELEPORTED_TO_ROAD("&cYou got teleported to the road"), TELEPORTED_TO_ROAD("&cYou got teleported to the road"),
TELEPORT_IN_SECONDS("&6Teleporting in %s seconds. Do not move..."), TELEPORT_IN_SECONDS("&6Teleporting in %s seconds. Do not move..."),
TELEPORT_FAILED("&cTeleportation cancelled due to movement"), TELEPORT_FAILED("&cTeleportation cancelled due to movement or damage"),
/* /*
* Set Block * Set Block
*/ */

View File

@ -99,6 +99,7 @@ import com.intellectualcrafters.plot.object.PlotWorld;
import com.intellectualcrafters.plot.object.StringWrapper; import com.intellectualcrafters.plot.object.StringWrapper;
import com.intellectualcrafters.plot.util.PlayerFunctions; import com.intellectualcrafters.plot.util.PlayerFunctions;
import com.intellectualcrafters.plot.util.PlotHelper; import com.intellectualcrafters.plot.util.PlotHelper;
import com.intellectualcrafters.plot.util.TaskManager;
import com.intellectualcrafters.plot.util.UUIDHandler; import com.intellectualcrafters.plot.util.UUIDHandler;
/** /**
@ -161,6 +162,12 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi
final Location q = new Location(t.getWorld(), t.getBlockX(), 0, t.getZ()); final Location q = new Location(t.getWorld(), t.getBlockX(), 0, t.getZ());
if ((f.getBlockX() != q.getBlockX()) || (f.getBlockZ() != q.getBlockZ())) { if ((f.getBlockX() != q.getBlockX()) || (f.getBlockZ() != q.getBlockZ())) {
if (Settings.TELEPORT_DELAY != 0 && TaskManager.TELEPORT_QUEUE.size() > 0) {
String name = player.getName();
if (TaskManager.TELEPORT_QUEUE.contains(name)) {
TaskManager.TELEPORT_QUEUE.remove(name);
}
}
if (!isPlotWorld(player.getWorld())) { if (!isPlotWorld(player.getWorld())) {
return; return;
} }
@ -916,6 +923,15 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi
final Location l = e.getEntity().getLocation(); final Location l = e.getEntity().getLocation();
final Entity d = e.getDamager(); final Entity d = e.getDamager();
final Entity a = e.getEntity(); final Entity a = e.getEntity();
if (Settings.TELEPORT_DELAY != 0 && TaskManager.TELEPORT_QUEUE.size() > 0 && a instanceof Player) {
Player player = (Player) a;
String name = player.getName();
if (TaskManager.TELEPORT_QUEUE.contains(name)) {
TaskManager.TELEPORT_QUEUE.remove(name);
}
}
if (isPlotWorld(l)) { if (isPlotWorld(l)) {
if (d instanceof Player) { if (d instanceof Player) {
final Player p = (Player) d; final Player p = (Player) d;

View File

@ -1,8 +1,13 @@
package com.intellectualcrafters.plot.util; package com.intellectualcrafters.plot.util;
import java.util.HashSet;
import com.intellectualcrafters.plot.PlotMain; import com.intellectualcrafters.plot.PlotMain;
public class TaskManager { public class TaskManager {
public static HashSet<String> TELEPORT_QUEUE = new HashSet<>();
public static void runTask(final Runnable r) { public static void runTask(final Runnable r) {
PlotMain.getMain().getServer().getScheduler().runTaskAsynchronously(PlotMain.getMain(), r); PlotMain.getMain().getServer().getScheduler().runTaskAsynchronously(PlotMain.getMain(), r);
} }