MovingListener: Do more for dead players.

This commit is contained in:
asofold 2012-11-08 19:09:12 +01:00
parent dd74accab8
commit 7f747e9c18

View File

@ -20,6 +20,7 @@ import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerBedEnterEvent; import org.bukkit.event.player.PlayerBedEnterEvent;
import org.bukkit.event.player.PlayerBedLeaveEvent; import org.bukkit.event.player.PlayerBedLeaveEvent;
import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerChangedWorldEvent;
@ -335,16 +336,20 @@ public class MovingListener implements Listener {
* __/ | * __/ |
* |___/ * |___/
*/ */
final Player player = event.getPlayer(); final Player player = event.getPlayer();
// Ignore players in vehicles.
if (player.isInsideVehicle()) return;
// Ignore dead players.
if (player.isDead()) return;
final Location from = event.getFrom();
final Location to = event.getTo();
// Ignore changing worlds.
if (!from.getWorld().equals(to.getWorld())) return;
// Don't care for movements to another world (such that it is very likely the event data was modified by another
// plugin before we got it) or if the player is inside a vehicle.
final Location from = event.getFrom();
final Location to = event.getTo();
if (!from.getWorld().equals(to.getWorld()) || player.isInsideVehicle()){
return;
}
// Use existent locations if possible. // Use existent locations if possible.
final MoveInfo moveInfo; final MoveInfo moveInfo;
final PlayerLocation pFrom, pTo; final PlayerLocation pFrom, pTo;
@ -512,7 +517,7 @@ public class MovingListener implements Listener {
* |___/ * |___/
*/ */
// No typo here. I really only handle cancelled events and ignore others. // No typo here. I really only handle cancelled events and ignore others.
if (!event.isCancelled()) if (!event.isCancelled() || event.getPlayer().isDead())
return; return;
// Fix a common mistake that other developers make (cancelling move events is crazy, rather set the target // Fix a common mistake that other developers make (cancelling move events is crazy, rather set the target
@ -529,6 +534,7 @@ public class MovingListener implements Listener {
public final void onPlayerMoveMonitor(final PlayerMoveEvent event){ public final void onPlayerMoveMonitor(final PlayerMoveEvent event){
final long now = System.currentTimeMillis(); final long now = System.currentTimeMillis();
final Player player = event.getPlayer(); final Player player = event.getPlayer();
if (player.isDead()) return;
final Location to = event.getTo(); // player.getLocation(); final Location to = event.getTo(); // player.getLocation();
final String worldName = to.getWorld().getName(); final String worldName = to.getWorld().getName();
@ -597,6 +603,18 @@ public class MovingListener implements Listener {
data.ground = event.getRespawnLocation(); data.ground = event.getRespawnLocation();
} }
} }
/**
* Clear fly data on death.
* @param event
*/
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerDeath(final PlayerDeathEvent event) {
final Player player = event.getEntity();
final MovingData data = MovingData.getData(player);
data.clearFlyData();
data.clearMorePacketsData();
}
/** /**
* If a player gets teleported, it may have two reasons. Either it was NoCheat or another plugin. If it was * If a player gets teleported, it may have two reasons. Either it was NoCheat or another plugin. If it was