From 744f843f9b74d2f1930777d78500a61142759091 Mon Sep 17 00:00:00 2001 From: Llm Dl Date: Sat, 18 Jan 2020 15:28:49 -0600 Subject: [PATCH] 1.5.3: Compatibility for 1.15.* servers. --- pom.xml | 4 +- .../llmdlio/townyflight/TownyFlight.java | 37 +++++++++++++++++-- .../listeners/PlayerFallListener.java | 30 +++++++++++++++ .../listeners/PlayerLeaveTownListener.java | 6 +-- .../listeners/PlayerPVPListener.java | 6 +-- .../listeners/TownUnclaimListener.java | 7 +--- 6 files changed, 70 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerFallListener.java diff --git a/pom.xml b/pom.xml index 44cfb02..3b2a583 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ 4.0.0 com.gmail.llmdlio TownyFlight - 1.5.2 + 1.5.3 TownyFlight A flight plugin for Towny servers. @@ -42,7 +42,7 @@ org.bukkit bukkit - 1.14.4-R0.1-SNAPSHOT + 1.15.1-R0.1-SNAPSHOT jar provided diff --git a/src/main/java/com/gmail/llmdlio/townyflight/TownyFlight.java b/src/main/java/com/gmail/llmdlio/townyflight/TownyFlight.java index 5191ea4..20b432e 100644 --- a/src/main/java/com/gmail/llmdlio/townyflight/TownyFlight.java +++ b/src/main/java/com/gmail/llmdlio/townyflight/TownyFlight.java @@ -1,6 +1,9 @@ package com.gmail.llmdlio.townyflight; +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; + import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.OfflinePlayer; @@ -12,9 +15,11 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; import com.gmail.llmdlio.townyflight.config.TownyFlightConfig; import com.gmail.llmdlio.townyflight.listeners.PlayerEnterTownListener; +import com.gmail.llmdlio.townyflight.listeners.PlayerFallListener; import com.gmail.llmdlio.townyflight.listeners.PlayerJoinListener; import com.gmail.llmdlio.townyflight.listeners.PlayerLeaveTownListener; import com.gmail.llmdlio.townyflight.listeners.PlayerPVPListener; @@ -28,9 +33,10 @@ public class TownyFlight extends JavaPlugin { private final PlayerEnterTownListener playerEnterListener = new PlayerEnterTownListener(this); private final PlayerJoinListener playerJoinListener = new PlayerJoinListener(this); - private final PlayerLeaveTownListener playerLeaveListener = new PlayerLeaveTownListener(this); - private final PlayerPVPListener playerPVPListener = new PlayerPVPListener(this); - private final TownUnclaimListener townUnclaimListener = new TownUnclaimListener(this); + private final PlayerLeaveTownListener playerLeaveListener = new PlayerLeaveTownListener(); + private final PlayerPVPListener playerPVPListener = new PlayerPVPListener(); + private final TownUnclaimListener townUnclaimListener = new TownUnclaimListener(); + private final PlayerFallListener playerFallListener = new PlayerFallListener(); public static String pluginPrefix; private static String flightOnMsg; @@ -49,11 +55,15 @@ public class TownyFlight extends JavaPlugin { private static Boolean disableDuringWar; private static Boolean showPermissionInMessage; private static Boolean warsForTownyFound = false; + + public static List flyingPlayers = new ArrayList<>(); private TownyFlightConfig config = new TownyFlightConfig(this); + private static TownyFlight plugin; public void onEnable() { + plugin = this; reloadConfig(); if (!LoadSettings()) { @@ -155,6 +165,7 @@ private void registerEvents(){ if (disableCombatPrevention) pluginManager.registerEvents(playerPVPListener, this); pluginManager.registerEvents(townUnclaimListener, this); + pluginManager.registerEvents(playerFallListener, this); } public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { @@ -316,8 +327,21 @@ public static void toggleFlight(Player player, boolean silent, boolean forced, S player.sendMessage(pluginPrefix + flightOffMsg); } } - if (player.isFlying()) + System.out.println("player.isFlying() " + player.isFlying()); + if (player.isFlying()) { + // As of 1.15 the below line does not seem to be reliable. player.setFallDistance(-100000); + // As of 1.15 the below is required. + if (!player.isOnGround()) { + flyingPlayers.add(player); + new BukkitRunnable() { + @Override + public void run() { + removeFallProtection(player); + } + }.runTaskLater(plugin, 100); + } + } player.setAllowFlight(false); } else { if (!silent) @@ -325,4 +349,9 @@ public static void toggleFlight(Player player, boolean silent, boolean forced, S player.setAllowFlight(true); } } + + private static void removeFallProtection(Player player) { + if (flyingPlayers.contains(player)) + flyingPlayers.remove(player); + } } diff --git a/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerFallListener.java b/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerFallListener.java new file mode 100644 index 0000000..53c0026 --- /dev/null +++ b/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerFallListener.java @@ -0,0 +1,30 @@ +package com.gmail.llmdlio.townyflight.listeners; + +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import com.gmail.llmdlio.townyflight.TownyFlight; + +public class PlayerFallListener implements Listener { + + public PlayerFallListener() { + } + + @EventHandler(priority = EventPriority.LOWEST) + private void playerFallEvent (EntityDamageEvent event) { + + if (!event.getCause().equals(DamageCause.FALL) && !(event.getEntityType().equals(EntityType.PLAYER))) + return; + + Player player = (Player) event.getEntity(); + if (TownyFlight.flyingPlayers.contains(player)) { + TownyFlight.flyingPlayers.remove(player); + event.setCancelled(true); + } + } + +} diff --git a/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerLeaveTownListener.java b/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerLeaveTownListener.java index 06c4766..f41e89e 100644 --- a/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerLeaveTownListener.java +++ b/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerLeaveTownListener.java @@ -10,11 +10,7 @@ public class PlayerLeaveTownListener implements Listener{ - @SuppressWarnings("unused") - private final TownyFlight plugin; - - public PlayerLeaveTownListener(TownyFlight instance) { - plugin = instance; + public PlayerLeaveTownListener() { } /* diff --git a/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerPVPListener.java b/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerPVPListener.java index 2a0d930..e0e5263 100644 --- a/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerPVPListener.java +++ b/src/main/java/com/gmail/llmdlio/townyflight/listeners/PlayerPVPListener.java @@ -20,12 +20,10 @@ public class PlayerPVPListener implements Listener { - @SuppressWarnings("unused") - private final TownyFlight plugin; + private Towny towny = (Towny) Bukkit.getServer().getPluginManager().getPlugin("Towny"); - public PlayerPVPListener(TownyFlight instance) { - plugin = instance; + public PlayerPVPListener() { } /* diff --git a/src/main/java/com/gmail/llmdlio/townyflight/listeners/TownUnclaimListener.java b/src/main/java/com/gmail/llmdlio/townyflight/listeners/TownUnclaimListener.java index 585cf88..6d6790a 100644 --- a/src/main/java/com/gmail/llmdlio/townyflight/listeners/TownUnclaimListener.java +++ b/src/main/java/com/gmail/llmdlio/townyflight/listeners/TownUnclaimListener.java @@ -15,11 +15,8 @@ public class TownUnclaimListener implements Listener { - @SuppressWarnings("unused") - private final TownyFlight plugin; - - public TownUnclaimListener(TownyFlight instance) { - plugin = instance; + public TownUnclaimListener() { + } /*