Skip to content

Commit 2f9ef32

Browse files
committed
Handle 3rd party fly plugins
Make the fly flag apply to general flying, e.g., by the Essentials /fly command BentoBoxWorld/BentoBox#2159
1 parent de0d406 commit 2f9ef32

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
<!-- Revision variable removes warning about dynamic version -->
5353
<revision>${build.version}-SNAPSHOT</revision>
5454
<!-- This allows to change between versions and snapshots. -->
55-
<build.version>1.10.0</build.version>
55+
<build.version>1.11.0</build.version>
5656
<build.number>-LOCAL</build.number>
5757
</properties>
5858

src/main/java/world/bentobox/islandfly/listeners/FlyListener.java

+29
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import org.bukkit.event.EventHandler;
77
import org.bukkit.event.EventPriority;
88
import org.bukkit.event.Listener;
9+
import org.bukkit.event.player.PlayerToggleFlightEvent;
910

11+
import world.bentobox.bentobox.api.events.island.IslandEnterEvent;
1012
import world.bentobox.bentobox.api.events.island.IslandExitEvent;
1113
import world.bentobox.bentobox.api.localization.TextVariables;
1214
import world.bentobox.bentobox.api.user.User;
@@ -32,6 +34,33 @@ public FlyListener(final IslandFlyAddon addon) {
3234
this.addon = addon;
3335
}
3436

37+
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
38+
public void onToggleFlight(final PlayerToggleFlightEvent event) {
39+
final User user = User.getInstance(event.getPlayer());
40+
if (checkUser(user)) {
41+
user.sendMessage("islandfly.not-allowed");
42+
}
43+
}
44+
45+
/**
46+
* @param user user
47+
* @return true if fly was blocked
48+
*/
49+
private boolean checkUser(User user) {
50+
String permPrefix = addon.getPlugin().getIWM().getPermissionPrefix(user.getWorld());
51+
// Ignore ops
52+
if (user.isOp() || user.getPlayer().getGameMode().equals(GameMode.CREATIVE)
53+
|| user.getPlayer().getGameMode().equals(GameMode.SPECTATOR)
54+
|| user.hasPermission(permPrefix + "island.flybypass")) return false;
55+
return removeFly(user);
56+
}
57+
58+
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
59+
public void onEnterIsland(final IslandEnterEvent event) {
60+
final User user = User.getInstance(event.getPlayerUUID());
61+
// Wait until after arriving at the island
62+
Bukkit.getScheduler().runTask(this.addon.getPlugin(), () -> checkUser(user));
63+
}
3564

3665
/**
3766
* This method is triggered when player leaves their island.

src/main/resources/locales/en-US.yml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ islandfly:
22
fly-outside-alert: "&c You are outside your island so fly mode will be disabled in &e[number] &c seconds."
33
fly-turning-off-alert: "&c You are not permitted to fly here anymore. Turning fly off in &e[number] &c seconds."
44
disable-fly: "&c Your fly mode has been disabled."
5+
not-allowed: "&c Flying is not allowed here."
56
reallowed-fly: "&a Your fly has been reallowed"
67
enable-fly: "&a Your fly mode has been enabled."
78
cancel-disable: "&a You are back, huh! Fly fuel successfully refilled!"

0 commit comments

Comments
 (0)