001package fr.aumgn.dac2.game;
002
003import org.bukkit.entity.Player;
004import org.bukkit.event.EventHandler;
005import org.bukkit.event.EventPriority;
006import org.bukkit.event.Listener;
007import org.bukkit.event.entity.EntityDamageEvent;
008import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
009import org.bukkit.event.player.PlayerMoveEvent;
010import org.bukkit.event.player.PlayerQuitEvent;
011
012import fr.aumgn.dac2.arena.Arena;
013
014/**
015 * Listener which provides common implementations of listeners
016 * for most game mode.
017 */
018public class GameListener implements Listener {
019
020    private final AbstractGame game;
021    private final Arena arena;
022
023    public GameListener(AbstractGame game) {
024        this.game = game;
025        this.arena = game.getArena();
026    }
027
028    @EventHandler(priority = EventPriority.MONITOR)
029    public void onMove(PlayerMoveEvent event) {
030        Player player = event.getPlayer();
031        if (!game.isPlayerTurn(player)) {
032            return;
033        }
034
035        if (!(arena.isIn(player.getWorld())
036                && arena.getPool().contains(player))) {
037            return;
038        }
039
040        game.onJumpSuccess(player);
041    }
042
043    @EventHandler(priority = EventPriority.HIGH)
044    public void onDamage(EntityDamageEvent event) {
045        if (event.getCause() != DamageCause.FALL) {
046            return;
047        }
048
049        if (!(event.getEntity() instanceof Player)) {
050            return;
051        }
052
053        Player player = (Player) event.getEntity();
054        if (!game.isPlayerTurn(player)) {
055            return;
056        }
057
058        if (!(arena.isIn(player.getWorld()) && arena.getSurroundingRegion()
059                .contains(player))) {
060            return;
061        }
062
063        game.onJumpFail(player);
064        event.setCancelled(true);
065    }
066
067    @EventHandler(priority = EventPriority.MONITOR)
068    public void onRawQuit(PlayerQuitEvent event) {
069        Player player = event.getPlayer();
070        if (!game.isPlayerTurn(player)) {
071            return;
072        }
073
074        game.onQuit(player);
075    }
076}