diff --git a/src/main/java/com/massivecraft/factions/Conf.java b/src/main/java/com/massivecraft/factions/Conf.java index 8e726943..bd361ba5 100644 --- a/src/main/java/com/massivecraft/factions/Conf.java +++ b/src/main/java/com/massivecraft/factions/Conf.java @@ -115,6 +115,7 @@ public class Conf { public static boolean logMoneyTransactions = true; public static boolean logPlayerCommands = true; // prevent some potential exploits + public static boolean denyFlightIfInNoClaimingWorld = false; public static boolean preventCreeperGlitch = true; public static boolean handleExploitObsidianGenerators = true; public static boolean handleExploitEnderPearlClipping = true; @@ -540,6 +541,10 @@ public class Conf { defaultFactionPermissions.put("MODERATOR", new DefaultPermissions(true)); defaultFactionPermissions.put("NORMAL MEMBER", new DefaultPermissions(false)); defaultFactionPermissions.put("RECRUIT", new DefaultPermissions(false)); + defaultFactionPermissions.put("ALLY", new DefaultPermissions(false)); + defaultFactionPermissions.put("ENEMY", new DefaultPermissions(false)); + defaultFactionPermissions.put("TRUCE", new DefaultPermissions(false)); + defaultFactionPermissions.put("NEUTRAL", new DefaultPermissions(false)); } public static void load() { diff --git a/src/main/java/com/massivecraft/factions/cmd/CmdFly.java b/src/main/java/com/massivecraft/factions/cmd/CmdFly.java index 85e6b130..0079c908 100644 --- a/src/main/java/com/massivecraft/factions/cmd/CmdFly.java +++ b/src/main/java/com/massivecraft/factions/cmd/CmdFly.java @@ -97,6 +97,9 @@ public class CmdFly extends FCommand { } public static boolean checkBypassPerms(FPlayer fme, Player me, Faction toFac) { + if (Conf.denyFlightIfInNoClaimingWorld && !Conf.worldsNoClaiming.isEmpty() && Conf.worldsNoClaiming.stream().anyMatch(me.getWorld().getName()::equalsIgnoreCase)) + return false; + if (toFac != fme.getFaction()) { if (!me.hasPermission(Permission.FLY_WILD.node) && toFac.isWilderness() || !me.hasPermission(Permission.FLY_SAFEZONE.node) && toFac.isSafeZone() || !me.hasPermission(Permission.FLY_WARZONE.node) && toFac.isWarZone()) { fme.msg(TL.COMMAND_FLY_NO_ACCESS, toFac.getTag(fme)); @@ -182,7 +185,7 @@ public class CmdFly extends FCommand { } - if (fme.canFlyAtLocation()) + if (fme.canFlyAtLocation()) { context.doWarmUp(WarmUpUtil.Warmup.FLIGHT, TL.WARMUPS_NOTIFY_FLIGHT, "Fly", () -> { fme.setFlying(true); flyMap.put(fme.getPlayer().getName(), true); @@ -194,6 +197,9 @@ public class CmdFly extends FCommand { startFlyCheck(); } }, FactionsPlugin.getInstance().getConfig().getLong("warmups.f-fly", 0)); + } else { + fme.msg(TL.COMMAND_FLY_NO_ACCESS, Board.getInstance().getFactionAt(fme.getLastStoodAt()).getTag()); + } } @Override diff --git a/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java b/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java index fb4363b1..ed7fd7ec 100644 --- a/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java +++ b/src/main/java/com/massivecraft/factions/listeners/FactionsPlayerListener.java @@ -553,9 +553,14 @@ public class FactionsPlayerListener implements Listener { return string; } - public void enableFly(FPlayer me) { - if (!FactionsPlugin.instance.getConfig().getBoolean("ffly.AutoEnable")) return; // Looks prettier sorry - if (!me.canFlyAtLocation()) return; + public void checkCanFly(FPlayer me) { + if (me.isFlying() && (!me.canFlyAtLocation() || me.checkIfNearbyEnemies())) { + me.setFFlying(false, false); + me.msg(TL.COMMAND_FLY_NO_ACCESS, Board.getInstance().getFactionAt(me.getLastStoodAt()).getTag()); + return; + } + if (me.isFlying() || !FactionsPlugin.instance.getConfig().getBoolean("ffly.AutoEnable")) + return; me.setFFlying(true, false); CmdFly.flyMap.put(me.getName(), true); if (CmdFly.particleTask == null) @@ -729,9 +734,7 @@ public class FactionsPlayerListener implements Listener { }, 5); } } - if (!me.isFlying()) { - enableFly(me); - } + this.checkCanFly(me); if (me.getAutoClaimFor() != null) { me.attemptClaim(me.getAutoClaimFor(), newLocation, true); diff --git a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java index c05ad6f8..4c28fe40 100644 --- a/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java +++ b/src/main/java/com/massivecraft/factions/zcore/persist/MemoryFPlayer.java @@ -1225,7 +1225,7 @@ public abstract class MemoryFPlayer implements FPlayer { } // if economy is enabled and they're not on the bypass list, make sure they can pay - boolean mustPay = Econ.shouldBeUsed() && !this.isAdminBypassing() && !forFaction.isSafeZone() && !forFaction.isWarZone(); + boolean mustPay = Econ.shouldBeUsed() && !this.isAdminBypassing() && !forFaction.isSafeZone() && !forFaction.isWarZone() && (Conf.econCostClaimWilderness != 0); double cost = 0.0; EconomyParticipator payee = null; if (mustPay) {