diff --git a/src/com/massivecraft/massivecore/teleport/EngineScheduledTeleport.java b/src/com/massivecraft/massivecore/teleport/EngineScheduledTeleport.java index 2ce738dc..9e6122d8 100644 --- a/src/com/massivecraft/massivecore/teleport/EngineScheduledTeleport.java +++ b/src/com/massivecraft/massivecore/teleport/EngineScheduledTeleport.java @@ -3,8 +3,12 @@ package com.massivecraft.massivecore.teleport; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.plugin.Plugin; @@ -85,17 +89,13 @@ public class EngineScheduledTeleport extends EngineAbstract } // -------------------------------------------- // - // LISTENER + // LISTENER: CANCEL TELEPORT // -------------------------------------------- // - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onPlayerMoved(PlayerMoveEvent event) + public void cancelTeleport(Player player) { - // If the player moved from one block to another ... - if (MUtil.isSameBlock(event.getFrom(), event.getTo())) return; - - // ... and there is a ScheduledTeleport ... - ScheduledTeleport scheduledTeleport = teleporteeIdToScheduledTeleport.get(IdUtil.getId(event.getPlayer())); + // If there there is a ScheduledTeleport ... + ScheduledTeleport scheduledTeleport = teleporteeIdToScheduledTeleport.get(IdUtil.getId(player)); if (scheduledTeleport == null) return; // ... unschedule it ... @@ -105,4 +105,38 @@ public class EngineScheduledTeleport extends EngineAbstract Mixin.msgOne(scheduledTeleport.getTeleporteeId(), "Cancelled teleport to "+scheduledTeleport.getDestinationDesc()+"."); } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void cancelTeleport(PlayerMoveEvent event) + { + // If the player moved from one block to another ... + if (MUtil.isSameBlock(event.getFrom(), event.getTo())) return; + + // ... cancel teleport! + this.cancelTeleport(event.getPlayer()); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void cancelTeleport(EntityDamageEvent event) + { + // If an entity takes damage ... + Entity entity = event.getEntity(); + + // ... and that entity is a player ... + if(!(entity instanceof Player)) return; + Player player = (Player)entity; + + // ... cancel teleport! + this.cancelTeleport(player); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void cancelTeleport(PlayerDeathEvent event) + { + // If a player dies ... + Player player = event.getEntity(); + + // ... cancel teleport! + this.cancelTeleport(player); + } + }