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}