diff --git a/src/main/java/com/massivecraft/factions/FLocation.java b/src/main/java/com/massivecraft/factions/FLocation.java index 1073b3e2..8eacaf44 100644 --- a/src/main/java/com/massivecraft/factions/FLocation.java +++ b/src/main/java/com/massivecraft/factions/FLocation.java @@ -202,7 +202,8 @@ public class FLocation implements Serializable { int lim = FLocation.chunkToRegion((int) border.getSize()) - buffer; int diffX = chunk.getX() - x; int diffZ = chunk.getZ() - z; - return diffX > lim || diffZ > lim || -diffX > lim - 1 || -diffZ > lim - 1; + + return (diffX > lim || diffZ > lim) || (-diffX >= lim || -diffZ >= lim); } //----------------------------------------------// diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java b/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java index 874b86f6..827acf64 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdStuck.java @@ -70,9 +70,14 @@ public class CmdStuck extends FCommand { // spiral task to find nearest wilderness chunk new SpiralTask(new FLocation(me), radius * 2) { + final int buffer = P.p.getConfig().getInt("world-border.buffer", 0); + @Override public boolean work() { FLocation chunk = currentFLocation(); + if (chunk.isOutsideWorldBorder(buffer)) { + return true; + } Faction faction = board.getFactionAt(chunk); int buffer = P.p.getConfig().getInt("world-border.buffer", 0); if (faction.isWilderness() && !chunk.isOutsideWorldBorder(buffer)) { diff --git a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryBoard.java b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryBoard.java index a40662e7..13e15096 100644 --- a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryBoard.java +++ b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryBoard.java @@ -376,8 +376,13 @@ public abstract class MemoryBoard extends Board { } public void removeFaction(String factionId) { - Collection flocations = factionToLandMap.removeAll(factionId); - for (FLocation floc : flocations) { + Collection fLocations = factionToLandMap.removeAll(factionId); + for (FPlayer fPlayer : FPlayers.getInstance().getOnlinePlayers()) { + if (fLocations.contains(fPlayer.getLastStoodAt()) && !fPlayer.isAdminBypassing() && fPlayer.isFlying()) { + fPlayer.setFlying(false); + } + } + for (FLocation floc : fLocations) { super.remove(floc); } } diff --git a/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java b/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java index 24ff4c19..1324b020 100644 --- a/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java +++ b/src/main/java/com/massivecraft/factions/zcore/util/TagReplacer.java @@ -124,7 +124,7 @@ public enum TagReplacer { case TOTAL_ONLINE: return String.valueOf(Bukkit.getOnlinePlayers().size()); case FACTIONLESS: - return String.valueOf(Factions.getInstance().getWilderness().getFPlayersWhereOnline(true).size()); + return String.valueOf(FPlayers.getInstance().getAllFPlayers().stream().filter(p -> !p.hasFaction()).count()); case MAX_ALLIES: if (P.p.getConfig().getBoolean("max-relations.enabled", true)) { return String.valueOf(P.p.getConfig().getInt("max-relations.ally", 10));