diff --git a/src/main/java/com/gmail/llmdlio/townyflight/TownyFlightAPI.java b/src/main/java/com/gmail/llmdlio/townyflight/TownyFlightAPI.java index 1953f1f..c3a64b4 100644 --- a/src/main/java/com/gmail/llmdlio/townyflight/TownyFlightAPI.java +++ b/src/main/java/com/gmail/llmdlio/townyflight/TownyFlightAPI.java @@ -6,6 +6,8 @@ import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import com.gmail.llmdlio.townyflight.event.PlayerFlightChangeEvent; +import com.palmergames.bukkit.util.BukkitTools; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; @@ -176,6 +178,15 @@ public static boolean allowedLocation(Player player, Location location, Resident */ @SuppressWarnings("deprecation") public void removeFlight(Player player, boolean silent, boolean forced, String cause) { + PlayerFlightChangeEvent event = new PlayerFlightChangeEvent(player, false); + BukkitTools.fireEvent(event); + if (event.isCancelled()) { + if (!silent && event.getCancelMessage() != null && !event.getCancelMessage().isEmpty()) { + Message.of(event.getCancelMessage()).serious().to(player); + } + return; + } + if (!silent) { if (forced) { String reason = Message.getLangString("flightDeactivatedMsg"); @@ -205,6 +216,15 @@ public void removeFlight(Player player, boolean silent, boolean forced, String c * @param silent true will mean no message is shown to the {@link Player}. */ public void addFlight(Player player, boolean silent) { + PlayerFlightChangeEvent event = new PlayerFlightChangeEvent(player, true); + BukkitTools.fireEvent(event); + if (event.isCancelled()) { + if (!silent && event.getCancelMessage() != null && !event.getCancelMessage().isEmpty()) { + Message.of(event.getCancelMessage()).serious().to(player); + } + return; + } + if (!silent) Message.of("flightOnMsg").to(player); player.setAllowFlight(true); cachePlayerFlight(player, true); diff --git a/src/main/java/com/gmail/llmdlio/townyflight/event/PlayerFlightChangeEvent.java b/src/main/java/com/gmail/llmdlio/townyflight/event/PlayerFlightChangeEvent.java new file mode 100644 index 0000000..2aa6e10 --- /dev/null +++ b/src/main/java/com/gmail/llmdlio/townyflight/event/PlayerFlightChangeEvent.java @@ -0,0 +1,34 @@ +package com.gmail.llmdlio.townyflight.event; + +import com.palmergames.bukkit.towny.event.CancellableTownyEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +public class PlayerFlightChangeEvent extends CancellableTownyEvent { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private final Player player; + private final boolean flightAllowed; + + public PlayerFlightChangeEvent(Player player, boolean flightAllowed) { + this.player = player; + this.flightAllowed = flightAllowed; + } + + public Player getPlayer() { + return player; + } + + public boolean isFlightAllowed() { + return flightAllowed; + } + + public static HandlerList getHandlerList() { + return HANDLER_LIST; + } + + @Override + public @NotNull HandlerList getHandlers() { + return HANDLER_LIST; + } +}