Skip to content

Commit

Permalink
Turns on island fly automatically on login if player is in air
Browse files Browse the repository at this point in the history
Requires player to have the islandfly permission, to be on an island
where they are allowed to fly and be in the air.

Fixes #33
  • Loading branch information
tastybento committed Apr 6, 2020
1 parent 744e821 commit 5ea1723
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/main/java/world/bentobox/islandfly/IslandFlyAddon.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import world.bentobox.islandfly.listeners.FlyDeathListener;
import world.bentobox.islandfly.listeners.FlyFlagListener;
import world.bentobox.islandfly.listeners.FlyListener;
import world.bentobox.islandfly.listeners.FlyLoginListener;
import world.bentobox.islandfly.listeners.FlyLogoutListener;


Expand Down Expand Up @@ -96,6 +97,7 @@ public void onEnable() {
registerListener(new FlyListener(this));
registerListener(new FlyDeathListener(this));
registerListener(new FlyLogoutListener(this));
registerListener(new FlyLoginListener(this));
registerListener(new FlyFlagListener(this));

// Register a flag
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package world.bentobox.islandfly.listeners;

import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;

import world.bentobox.bentobox.api.user.User;
import world.bentobox.islandfly.IslandFlyAddon;

/**
* This class disables fly mode if player quits server.
*/
public class FlyLoginListener implements Listener {

/**
* IslandFlyAddon instance.
*/
private final IslandFlyAddon addon;


/**
* Default constructor.
* @param addon instance of IslandFlyAddon
*/
public FlyLoginListener(IslandFlyAddon addon)
{
this.addon = addon;
}


/**
* Disable player fly mode on logout
* @param event Instance of PlayerQuitEvent
*/
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onLogin(final PlayerJoinEvent event) {
final Player player = event.getPlayer();
final User user = User.getInstance(player);
final String permPrefix = addon.getPlugin().getIWM().getPermissionPrefix(player.getWorld());
if (player.hasPermission(permPrefix + "island.fly")
&& !this.addon.getSettings().isFlyDisableOnLogout() && isInAir(player)
&& addon.getIslands().userIsOnIsland(user.getWorld(), user))
{
if (!addon.getIslands().getIslandAt(user.getLocation()).map(i -> {
if (i.isAllowed(user, IslandFlyAddon.ISLAND_FLY_PROTECTION)) {
// Enable fly
player.setFallDistance(0);
player.setAllowFlight(true);
player.setFlying(true);
user.sendMessage("islandfly.enable-fly");
return true;
}
return false;
}).orElse(false)) {
user.sendMessage("islandfly.command.not-allowed-fly");
}
}
}


private boolean isInAir(Player player) {
Block b = player.getLocation().getBlock();
return player.getLocation().getBlockY() > 1 && b.getRelative(BlockFace.DOWN).isEmpty() && b.getRelative(BlockFace.DOWN, 2).isEmpty();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public void onLogout(final PlayerQuitEvent event) {

if (player.getAllowFlight() && this.addon.getSettings().isFlyDisableOnLogout())
{
addon.logWarning("Disabling flight");
// Disable fly
player.setFlying(false);
player.setAllowFlight(false);
Expand Down

0 comments on commit 5ea1723

Please sign in to comment.