コード例 #1
0
  @Override
  public void onEntityDamage(EntityDamageEvent event) {

    if (event.isCancelled()) {
      return;
    }

    if (event instanceof EntityDamageByProjectileEvent) {
      this.onEntityDamageByProjectile((EntityDamageByProjectileEvent) event);
      return;
    } else if (event instanceof EntityDamageByEntityEvent) {
      this.onEntityDamageByEntity((EntityDamageByEntityEvent) event);
      return;
    } else if (event instanceof EntityDamageByBlockEvent) {
      this.onEntityDamageByBlock((EntityDamageByBlockEvent) event);
      return;
    }

    Entity defender = event.getEntity();
    DamageCause type = event.getCause();

    if (defender instanceof Player) {
      Player player = (Player) defender;

      GlobalConfiguration cfg = plugin.getGlobalConfiguration();
      WorldConfiguration wcfg = cfg.getWorldConfig(player.getWorld().getName());

      if (cfg.isInvinciblePlayer(player.getName())) {
        event.setCancelled(true);
        return;
      }

      if (wcfg.disableFallDamage && type == DamageCause.FALL) {
        event.setCancelled(true);
        return;
      }

      if (wcfg.disableFireDamage && (type == DamageCause.FIRE || type == DamageCause.FIRE_TICK)) {
        event.setCancelled(true);
        return;
      }

      if (wcfg.disableDrowningDamage && type == DamageCause.DROWNING) {
        event.setCancelled(true);
        return;
      }

      if (wcfg.teleportOnSuffocation && type == DamageCause.SUFFOCATION) {
        findFreePosition(player);
        event.setCancelled(true);
        return;
      }

      if (wcfg.disableSuffocationDamage && type == DamageCause.SUFFOCATION) {
        event.setCancelled(true);
        return;
      }

      if (type == DamageCause.DROWNING && cfg.isAmphibiousPlayer(player.getName())) {
        event.setCancelled(true);
        return;
      }
    }
  }