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