@EventHandler(priority = EventPriority.HIGH) public void onRegainHealth(EntityRegainHealthEvent rhe) { if (rhe.getEntityType() != EntityType.PLAYER) { return; } Player player = (Player) rhe.getEntity(); Game game = Main.getInstance().getGameManager().getGameOfPlayer(player); if (game == null) { return; } if (game.getState() != GameState.RUNNING) { return; } if (player.getHealth() >= player.getMaxHealth()) { game.setPlayerDamager(player, null); } }
@EventHandler public void onDamage(EntityDamageEvent ede) { if (!(ede.getEntity() instanceof Player)) { if (!(ede instanceof EntityDamageByEntityEvent)) { return; } EntityDamageByEntityEvent edbee = (EntityDamageByEntityEvent) ede; if (edbee.getDamager() == null || !(edbee.getDamager() instanceof Player)) { return; } Player player = (Player) edbee.getDamager(); Game game = Main.getInstance().getGameManager().getGameOfPlayer(player); if (game == null) { return; } if (game.getState() == GameState.WAITING) { ede.setCancelled(true); } return; } Player p = (Player) ede.getEntity(); Game g = Main.getInstance().getGameManager().getGameOfPlayer(p); if (g == null) { return; } if (g.getState() == GameState.STOPPED) { return; } if (g.getState() == GameState.RUNNING) { if (g.isSpectator(p)) { ede.setCancelled(true); return; } if (g.isProtected(p) && ede.getCause() != DamageCause.VOID) { ede.setCancelled(true); return; } if (Main.getInstance().getBooleanConfig("die-on-void", false) && ede.getCause() == DamageCause.VOID) { ede.setCancelled(true); p.setHealth(0); return; } if (ede instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent edbee = (EntityDamageByEntityEvent) ede; if (edbee.getDamager() instanceof Player) { Player damager = (Player) edbee.getDamager(); if (g.isSpectator(damager)) { ede.setCancelled(true); return; } g.setPlayerDamager(p, damager); } else if (edbee.getDamager().getType().equals(EntityType.ARROW)) { Arrow arrow = (Arrow) edbee.getDamager(); if (arrow.getShooter() instanceof Player) { Player shooter = (Player) arrow.getShooter(); if (g.isSpectator(shooter)) { ede.setCancelled(true); return; } g.setPlayerDamager(p, (Player) arrow.getShooter()); } } } if (!g.getCycle().isEndGameRunning()) { return; } else if (ede.getCause() == DamageCause.VOID) { p.teleport(g.getPlayerTeam(p).getSpawnLocation()); } } else if (g.getState() == GameState.WAITING) { if (ede.getCause() == EntityDamageEvent.DamageCause.VOID) { p.teleport(g.getLobby()); } } ede.setCancelled(true); }