From 631c81738288668251686bf78d443bef200cbad4 Mon Sep 17 00:00:00 2001 From: DieGurke Date: Sun, 15 Nov 2020 21:46:41 +0100 Subject: [PATCH] Gliding activation and ToggleEvent cancelling control --- .classpath | 6 --- src/main/java/dev/kske/spawnfly/SpawnFly.java | 2 + .../java/dev/kske/spawnfly/SpawnListener.java | 54 +++++++++++++++++++ 3 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 src/main/java/dev/kske/spawnfly/SpawnListener.java diff --git a/.classpath b/.classpath index 0fb79cf..234db15 100644 --- a/.classpath +++ b/.classpath @@ -18,12 +18,6 @@ - - - - - - diff --git a/src/main/java/dev/kske/spawnfly/SpawnFly.java b/src/main/java/dev/kske/spawnfly/SpawnFly.java index 312d30b..91f0538 100644 --- a/src/main/java/dev/kske/spawnfly/SpawnFly.java +++ b/src/main/java/dev/kske/spawnfly/SpawnFly.java @@ -1,5 +1,6 @@ package dev.kske.spawnfly; +import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; public final class SpawnFly extends JavaPlugin { @@ -7,6 +8,7 @@ public final class SpawnFly extends JavaPlugin { @Override public void onEnable() { getLogger().info("onEnable has been invoked!"); + Bukkit.getPluginManager().registerEvents(new SpawnListener(), this); } @Override diff --git a/src/main/java/dev/kske/spawnfly/SpawnListener.java b/src/main/java/dev/kske/spawnfly/SpawnListener.java new file mode 100644 index 0000000..37a36c1 --- /dev/null +++ b/src/main/java/dev/kske/spawnfly/SpawnListener.java @@ -0,0 +1,54 @@ +package dev.kske.spawnfly; + +import java.util.*; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.*; +import org.bukkit.event.entity.EntityToggleGlideEvent; +import org.bukkit.event.player.*; + +public class SpawnListener implements Listener { + + Map activePlayers = new HashMap<>(); + Map canceledEvents = new HashMap<>(); + + @EventHandler + public void onMove(PlayerMoveEvent e) { + Player player = e.getPlayer(); + Location location = player.getLocation(); + if(isInSpawn(location)) activePlayers.put(player.getName(), true); + else if(activePlayers.get(player.getName()) && player.getVelocity().getY() < 0) { + player.setGliding(true); + canceledEvents.put(player.getName(), true); + activePlayers.put(player.getName(), false); + } + } + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent e) { + activePlayers.put(e.getPlayer().getName(), isInSpawn(e.getPlayer().getLocation())); + canceledEvents.put(e.getPlayer().getName(), false); + } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent e) { + activePlayers.remove(e.getPlayer().getName()); + canceledEvents.remove(e.getPlayer().getName()); + } + + private boolean isInSpawn(Location location) { + return (location.getX() <= -277 && location.getX() >= -302) + && (location.getZ() <= -172 && location.getZ() >= -191); + } + + @EventHandler + public void cancelEvent(EntityToggleGlideEvent e) { + if(canceledEvents.get(e.getEntity().getName()) && e.getEntity().getVelocity().getY() != 0 && !e.getEntity().isOnGround()) + e.setCancelled(true); + else { + e.setCancelled(false); + canceledEvents.put(e.getEntity().getName(), false); + } + } +} \ No newline at end of file