Fixed floating point inaccuracy in onPlayerMove().

This commit is contained in:
sk89q 2011-06-26 14:38:56 -07:00
parent 7fce4bf53e
commit fb39261dc7
2 changed files with 8 additions and 2 deletions

View File

@ -152,7 +152,7 @@ public static class PlayerFlagState {
public long lastHeal;
public String lastGreeting;
public String lastFarewell;
public boolean lastExitAllowed = true;
public Boolean lastExitAllowed = null;
public Boolean notifiedForEnter = false;
public Boolean notifiedForLeave = false;
}

View File

@ -242,7 +242,7 @@ public void onPlayerMove(PlayerMoveEvent event) {
boolean hasBypass = plugin.getGlobalRegionManager().hasBypass(player, world);
RegionManager mgr = plugin.getGlobalRegionManager().get(world);
Vector pt = toVector(event.getTo());
Vector pt = new Vector(event.getTo().getBlockX(), event.getTo().getBlockY(), event.getTo().getBlockZ());
ApplicableRegionSet set = mgr.getApplicableRegions(pt);
boolean entryAllowed = set.allows(DefaultFlag.ENTRY, localPlayer);
@ -257,6 +257,12 @@ public void onPlayerMove(PlayerMoveEvent event) {
return;
}
// Have to set this state
if (state.lastExitAllowed == null) {
state.lastExitAllowed = mgr.getApplicableRegions(toVector(event.getFrom()))
.allows(DefaultFlag.EXIT, localPlayer);
}
boolean exitAllowed = set.allows(DefaultFlag.EXIT, localPlayer);
if (!hasBypass && exitAllowed && !state.lastExitAllowed) {
player.sendMessage(ChatColor.DARK_RED + "You are not permitted to leave this area.");