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); } } }