From 0e04edce748c9f208f7dcac9ed99becbc122dedc Mon Sep 17 00:00:00 2001 From: Stefan923 Date: Thu, 17 Sep 2020 18:20:18 +0300 Subject: [PATCH] Added bypass for fly checkers --- .../hooks/checkers/FactionsChecker.java | 2 +- .../hooks/checkers/SaberFactionsChecker.java | 2 +- .../perfectflight/utils/PlayerUtils.java | 6 ++++-- .../me/stefan923/perfectflight/utils/User.java | 15 ++++++++++++++- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/main/java/me/stefan923/perfectflight/hooks/checkers/FactionsChecker.java b/src/main/java/me/stefan923/perfectflight/hooks/checkers/FactionsChecker.java index 32d7280..be2305f 100644 --- a/src/main/java/me/stefan923/perfectflight/hooks/checkers/FactionsChecker.java +++ b/src/main/java/me/stefan923/perfectflight/hooks/checkers/FactionsChecker.java @@ -46,7 +46,7 @@ private boolean checkNearbyPlayers(Player player, FPlayer fplayer) { boolean canFly = true; FPlayers fpInstance = FPlayers.getInstance(); - for (Player nearbyPlayer : getNearbyPlayers(player, settings.getInt("Hooks.Factions.Auto-Disable Near Enemies.Check Radius"))) { + for (Player nearbyPlayer : getNearbyPlayers(player, settings.getInt("Hooks.Factions.Auto-Disable Near Enemies.Check Radius"), instance)) { if (fplayer.getRelationTo(fpInstance.getByPlayer(nearbyPlayer)) == com.massivecraft.factions.struct.Relation.ENEMY) { if (nearbyPlayer.getAllowFlight()) { instance.getUser(nearbyPlayer).setFlight(false, CheckResult.NEARBY_ENEMIES); diff --git a/src/main/java/me/stefan923/perfectflight/hooks/checkers/SaberFactionsChecker.java b/src/main/java/me/stefan923/perfectflight/hooks/checkers/SaberFactionsChecker.java index deda9ea..7b3148e 100644 --- a/src/main/java/me/stefan923/perfectflight/hooks/checkers/SaberFactionsChecker.java +++ b/src/main/java/me/stefan923/perfectflight/hooks/checkers/SaberFactionsChecker.java @@ -46,7 +46,7 @@ private boolean checkNearbyPlayers(Player player, FPlayer fplayer) { boolean canFly = true; FPlayers fpInstance = FPlayers.getInstance(); - for (Player nearbyPlayer : getNearbyPlayers(player, settings.getInt("Hooks.Factions.Auto-Disable Near Enemies.Check Radius"))) { + for (Player nearbyPlayer : getNearbyPlayers(player, settings.getInt("Hooks.Factions.Auto-Disable Near Enemies.Check Radius"), instance)) { if (fplayer.getRelationTo(fpInstance.getByPlayer(nearbyPlayer)) == Relation.ENEMY) { if (nearbyPlayer.getAllowFlight()) { instance.getUser(nearbyPlayer).setFlight(false, CheckResult.NEARBY_ENEMIES); diff --git a/src/main/java/me/stefan923/perfectflight/utils/PlayerUtils.java b/src/main/java/me/stefan923/perfectflight/utils/PlayerUtils.java index 9fdaf00..533c6f6 100644 --- a/src/main/java/me/stefan923/perfectflight/utils/PlayerUtils.java +++ b/src/main/java/me/stefan923/perfectflight/utils/PlayerUtils.java @@ -1,5 +1,6 @@ package me.stefan923.perfectflight.utils; +import me.stefan923.perfectflight.PerfectFlight; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -8,14 +9,15 @@ public interface PlayerUtils { - default List getNearbyPlayers(Player player, int distance) { + default List getNearbyPlayers(Player player, int distance, PerfectFlight instance) { List list = new ArrayList<>(); for (Entity entity : player.getNearbyEntities(distance, distance, distance)) { if (entity instanceof Player) { Player nearbyPlayer = (Player) entity; + User nearbyUser = instance.getUser(nearbyPlayer); - if (nearbyPlayer.canSee(player) && player.canSee(nearbyPlayer)) + if (!nearbyUser.isBypassing() && nearbyPlayer.canSee(player) && player.canSee(nearbyPlayer)) list.add(nearbyPlayer); } } diff --git a/src/main/java/me/stefan923/perfectflight/utils/User.java b/src/main/java/me/stefan923/perfectflight/utils/User.java index 8e8f358..f4b610a 100644 --- a/src/main/java/me/stefan923/perfectflight/utils/User.java +++ b/src/main/java/me/stefan923/perfectflight/utils/User.java @@ -12,12 +12,14 @@ public class User implements MessageUtils { private final Player player; private boolean enableFly; + private boolean isBypassing; private long noFallDamageDuration; public User(PerfectFlight instance, Player player) { this.instance = instance; this.player = player; this.enableFly = true; + this.isBypassing = false; this.noFallDamageDuration = 0; instance.getUsers().put(player, this); @@ -31,6 +33,14 @@ public boolean getFly() { return enableFly; } + public boolean isBypassing() { + return isBypassing; + } + + public void setBypassing(boolean bypassing) { + isBypassing = bypassing; + } + public long getNoFallDamageDuration() { return noFallDamageDuration; } @@ -104,6 +114,10 @@ public void checkFly() { } public CheckResult canFly() { + if (isBypassing) { + return CheckResult.ALLOWED; + } + for (AbstractChecker checker : instance.getCheckers()) { CheckResult checkResult = checker.canFlyAtLocation(player); if (checkResult != CheckResult.ALLOWED) { @@ -112,5 +126,4 @@ public CheckResult canFly() { } return CheckResult.ALLOWED; } - }