From 83cad759160cfbce14577f3c83aff12d0af9ebb4 Mon Sep 17 00:00:00 2001 From: sk89q Date: Mon, 19 Jan 2015 19:04:49 -0800 Subject: [PATCH] Fix /wg flushstates not doing anything. --- src/main/java/com/sk89q/worldguard/session/Session.java | 9 ++++++++- .../com/sk89q/worldguard/session/SessionManager.java | 4 ++-- .../session/handler/FlagValueChangeHandler.java | 4 +--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/sk89q/worldguard/session/Session.java b/src/main/java/com/sk89q/worldguard/session/Session.java index c9e5de32..946cf968 100644 --- a/src/main/java/com/sk89q/worldguard/session/Session.java +++ b/src/main/java/com/sk89q/worldguard/session/Session.java @@ -34,6 +34,7 @@ import javax.annotation.Nullable; import java.util.HashMap; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import static com.google.common.base.Preconditions.checkNotNull; @@ -46,6 +47,7 @@ public class Session { private final HashMap, Handler> handlers = Maps.newLinkedHashMap(); private Location lastValid; private Set lastRegionSet; + private final AtomicBoolean needRefresh = new AtomicBoolean(false); /** * Create a new session. @@ -137,6 +139,7 @@ void tick(Player player) { */ void resetState(Player player) { initialize(player); + needRefresh.set(true); } /** @@ -194,6 +197,10 @@ public Location testMoveTo(Player player, Location to, MoveType moveType) { public Location testMoveTo(Player player, Location to, MoveType moveType, boolean forced) { RegionQuery query = getManager().getPlugin().getRegionContainer().createQuery(); + if (!forced && needRefresh.getAndSet(false)) { + forced = true; + } + if (forced || Locations.isDifferentBlock(lastValid, to)) { ApplicableRegionSet toSet = query.getApplicableRegions(to); @@ -206,7 +213,7 @@ public Location testMoveTo(Player player, Location to, MoveType moveType, boolea Set entered = Sets.difference(toSet.getRegions(), lastRegionSet); Set exited = Sets.difference(lastRegionSet, toSet.getRegions()); - if (!entered.isEmpty() || !exited.isEmpty()) { + if (!entered.isEmpty() || !exited.isEmpty() || forced) { for (Handler handler : handlers.values()) { if (!handler.onCrossBoundary(player, lastValid, to, toSet, entered, exited, moveType) && moveType.isCancellable()) { return lastValid; diff --git a/src/main/java/com/sk89q/worldguard/session/SessionManager.java b/src/main/java/com/sk89q/worldguard/session/SessionManager.java index ef6d4b18..5a204b27 100644 --- a/src/main/java/com/sk89q/worldguard/session/SessionManager.java +++ b/src/main/java/com/sk89q/worldguard/session/SessionManager.java @@ -108,7 +108,7 @@ public boolean hasBypass(Player player, World world) { public void resetAllStates() { Collection players = BukkitUtil.getOnlinePlayers(); for (Player player : players) { - Session session = sessions.getIfPresent(player); + Session session = sessions.getIfPresent(new CacheKey(player)); if (session != null) { session.resetState(player); } @@ -123,7 +123,7 @@ public void resetAllStates() { */ public void resetState(Player player) { checkNotNull(player, "player"); - @Nullable Session session = sessions.getIfPresent(player); + @Nullable Session session = sessions.getIfPresent(new CacheKey(player)); if (session != null) { session.resetState(player); } diff --git a/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java b/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java index 3df398a0..19fa8215 100644 --- a/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java +++ b/src/main/java/com/sk89q/worldguard/session/handler/FlagValueChangeHandler.java @@ -42,9 +42,7 @@ protected FlagValueChangeHandler(Session session, Flag flag) { @Override public final void initialize(Player player, Location current, ApplicableRegionSet set) { lastValue = set.queryValue(getPlugin().wrapPlayer(player), flag); - if (lastValue != null) { - onInitialValue(player, set, lastValue); - } + onInitialValue(player, set, lastValue); } @Override