public boolean exorcise(Player player, Player victim) {
   SuperNPlayer snplayer = SuperNManager.get(player);
   SuperNPlayer snvictim = SuperNManager.get(victim);
   if (!SupernaturalsPlugin.instance.getPvP(victim)) {
     SuperNManager.sendMessage(snplayer, "Cannot cast in a non-PvP zone.");
     return false;
   }
   if (snplayer.getPower() > SNConfigHandler.priestPowerExorcise) {
     if (snvictim.isSuper()) {
       SuperNManager.alterPower(
           snplayer, -SNConfigHandler.priestPowerExorcise, "Exorcised " + victim.getName());
       SuperNManager.sendMessage(
           snvictim,
           "You were exorcised by " + ChatColor.WHITE + snplayer.getName() + ChatColor.RED + "!");
       SuperNManager.cure(snvictim);
       ItemStack item = player.getItemInHand();
       if (item.getAmount() == 1) {
         player.setItemInHand(null);
       } else {
         item.setAmount(player.getItemInHand().getAmount() - 1);
       }
       return true;
     } else {
       SuperNManager.sendMessage(snplayer, "Only supernatural players can be exorcised.");
       return false;
     }
   } else {
     SuperNManager.sendMessage(snplayer, "Not enough power to exorcise.");
     return false;
   }
 }
 public boolean heal(Player player, Player victim) {
   SuperNPlayer snplayer = SuperNManager.get(player);
   SuperNPlayer snvictim = SuperNManager.get(victim);
   if (snplayer.getPower() > SNConfigHandler.priestPowerHeal) {
     if (!snvictim.isSuper() && victim.getHealth() < victim.getMaxHealth() && !victim.isDead()) {
       SuperNManager.alterPower(
           snplayer, -SNConfigHandler.priestPowerHeal, "Healed " + victim.getName());
       SuperNManager.sendMessage(
           snvictim,
           "You were healed by " + ChatColor.WHITE + snplayer.getName() + ChatColor.RED + "!");
       double health = victim.getHealth() + SNConfigHandler.priestHealAmount;
       if (health > victim.getMaxHealth()) {
         health = victim.getMaxHealth();
       }
       victim.setHealth(health);
       ItemStack item = player.getItemInHand();
       if (item.getAmount() == 1) {
         player.setItemInHand(null);
       } else {
         item.setAmount(player.getItemInHand().getAmount() - 1);
       }
       return true;
     } else {
       SuperNManager.sendMessage(snplayer, "Player cannot be healed.");
       return false;
     }
   } else {
     SuperNManager.sendMessage(snplayer, "Not enough power to heal.");
     return false;
   }
 }
 public boolean banish(Player player, Player victim) {
   SuperNPlayer snplayer = SuperNManager.get(player);
   SuperNPlayer snvictim = SuperNManager.get(victim);
   if (!SupernaturalsPlugin.instance.getPvP(victim)) {
     SuperNManager.sendMessage(snplayer, "Cannot cast in a non-PvP zone.");
     return false;
   }
   if (snplayer.getPower() > SNConfigHandler.priestPowerBanish) {
     if (snvictim.isSuper()) {
       SuperNManager.alterPower(
           snplayer, -SNConfigHandler.priestPowerBanish, "Banished " + victim.getName());
       SuperNManager.sendMessage(
           snvictim,
           "You were banished by " + ChatColor.WHITE + snplayer.getName() + ChatColor.RED + "!");
       victim.teleport(SNConfigHandler.priestBanishLocation);
       ItemStack item = player.getItemInHand();
       if (item.getAmount() == 1) {
         player.setItemInHand(null);
       } else {
         item.setAmount(player.getItemInHand().getAmount() - 1);
       }
       return true;
     }
     SuperNManager.sendMessage(snplayer, "Can only banish supernatural players.");
     return false;
   } else {
     SuperNManager.sendMessage(snplayer, "Not enough power to banish.");
     return false;
   }
 }
 public boolean drainPower(Player player, Player victim) {
   SuperNPlayer snplayer = SuperNManager.get(player);
   SuperNPlayer snvictim = SuperNManager.get(victim);
   if (!SupernaturalsPlugin.instance.getPvP(victim)) {
     SuperNManager.sendMessage(snplayer, "Cannot cast in a non-PvP zone.");
     return false;
   }
   if (snplayer.getPower() > SNConfigHandler.priestPowerDrain) {
     if (snvictim.isSuper()) {
       double power = snvictim.getPower();
       power *= SNConfigHandler.priestDrainFactor;
       SuperNManager.alterPower(
           snplayer,
           -SNConfigHandler.priestPowerDrain,
           "Drained  " + snvictim.getName() + "'s power!");
       SuperNManager.alterPower(snvictim, -power, "Drained by " + snplayer.getName());
       ItemStack item = player.getItemInHand();
       if (item.getAmount() == 1) {
         player.setItemInHand(null);
       } else {
         item.setAmount(player.getItemInHand().getAmount() - 1);
       }
       return true;
     } else {
       SuperNManager.sendMessage(snplayer, "Only supernatural players can be power drained.");
       return false;
     }
   } else {
     SuperNManager.sendMessage(snplayer, "Not enough power to drain power.");
     return false;
   }
 }
  @Override
  public double damagerEvent(EntityDamageByEntityEvent event, double damage) {
    Player pDamager = (Player) event.getDamager();
    Entity victim = event.getEntity();

    SuperNPlayer snDamager = SuperNManager.get(pDamager);
    ItemStack item = pDamager.getItemInHand();

    if (item != null) {
      if (SNConfigHandler.priestWeapons.contains(item.getType())) {
        SuperNManager.sendMessage(snDamager, "Priests cannot use this weapon!");
        return 0;
      }
    }

    if (victim instanceof Animals && !(victim instanceof Wolf)) {
      SuperNManager.sendMessage(SuperNManager.get(pDamager), "You cannot hurt innocent animals.");
      damage = 0;
    } else if (victim instanceof Player) {
      Player pVictim = (Player) victim;
      if (!SupernaturalsPlugin.instance.getPvP(pVictim)) {
        return damage;
      }
      SuperNPlayer snvictim = SuperNManager.get(pVictim);
      if (snvictim.isSuper()) {
        if (!snvictim.isDemon()) {
          pVictim.setFireTicks(SNConfigHandler.priestFireTicks);
        }
        damage +=
            damage
                * SuperNManager.get(pDamager).scale(SNConfigHandler.priestDamageFactorAttackSuper);
      } else {
        damage +=
            damage
                * SuperNManager.get(pDamager).scale(SNConfigHandler.priestDamageFactorAttackHuman);
      }
    } else if (victim instanceof Monster) {
      Monster mVictim = (Monster) victim;
      mVictim.setFireTicks(SNConfigHandler.priestFireTicks);
    }
    return damage;
  }
  public boolean guardianAngel(Player player, Player victim) {
    SuperNPlayer priest = SuperNManager.get(player);
    SuperNPlayer snvictim = SuperNManager.get(victim);

    if (priest.getPower() > SNConfigHandler.priestPowerGuardianAngel) {
      if (!snvictim.isSuper()) {
        if (SupernaturalsPlugin.instance.getDataHandler().hasAngel(priest)) {
          SuperNManager.sendMessage(
              priest,
              "Removed Guardian Angel from "
                  + ChatColor.WHITE
                  + SupernaturalsPlugin.instance.getDataHandler().getAngelPlayer(priest).getName());
          SuperNManager.sendMessage(
              SupernaturalsPlugin.instance.getDataHandler().getAngelPlayer(priest),
              "Guardian Angel removed!");
          SupernaturalsPlugin.instance.getDataHandler().removeAngel(priest);
        }
        SuperNManager.sendMessage(snvictim, "You now have a Guardian Angel!");
        SuperNManager.alterPower(
            priest,
            -SNConfigHandler.priestPowerGuardianAngel,
            "Guardian Angel on " + ChatColor.WHITE + snvictim.getName() + ChatColor.RED + "!");
        SupernaturalsPlugin.instance.getDataHandler().addAngel(priest, snvictim);

        ItemStack item = player.getItemInHand();
        if (item.getAmount() == 1) {
          player.setItemInHand(null);
        } else {
          item.setAmount(player.getItemInHand().getAmount() - 1);
        }
        return true;
      }
      SuperNManager.sendMessage(
          priest, "You cannot set a Guardian Angel on a Supernatural player.");
      return false;
    } else {
      SuperNManager.sendMessage(priest, "Not enough power to cast Guardian Angel.");
      return false;
    }
  }
 public boolean cure(Player player, Player victim, Material material) {
   SuperNPlayer snplayer = SuperNManager.get(player);
   SuperNPlayer snvictim = SuperNManager.get(victim);
   if (snplayer.getPower() > SNConfigHandler.priestPowerCure) {
     if (snvictim.isSuper()) {
       if (victim.getItemInHand().getType().equals(material)) {
         SuperNManager.alterPower(
             snplayer, -SNConfigHandler.priestPowerCure, "Cured " + victim.getName());
         SuperNManager.sendMessage(
             snvictim,
             ChatColor.WHITE + snplayer.getName() + ChatColor.RED + " has restored your humanity");
         SuperNManager.cure(snvictim);
         ItemStack item = player.getItemInHand();
         ItemStack item2 = victim.getItemInHand();
         if (item.getAmount() == 1) {
           player.setItemInHand(null);
         } else {
           item.setAmount(player.getItemInHand().getAmount() - 1);
         }
         if (item2.getAmount() == 1) {
           victim.setItemInHand(null);
         } else {
           item2.setAmount(victim.getItemInHand().getAmount() - 1);
         }
         return true;
       } else {
         SuperNManager.sendMessage(
             snplayer,
             ChatColor.WHITE
                 + snvictim.getName()
                 + ChatColor.RED
                 + " is not holding "
                 + ChatColor.WHITE
                 + material.toString()
                 + ChatColor.RED
                 + ".");
         return false;
       }
     } else {
       SuperNManager.sendMessage(snplayer, "You can only cure supernatural players.");
       return false;
     }
   } else {
     SuperNManager.sendMessage(snplayer, "Not enough power to cure.");
     return false;
   }
 }
 @SuppressWarnings("deprecation")
 public void useAltar(Player player) {
   Location location = player.getLocation();
   World world = location.getWorld();
   int locX = location.getBlockX();
   int locY = location.getBlockY();
   int locZ = location.getBlockZ();
   SuperNPlayer snplayer = SuperNManager.get(player);
   int amount = 0;
   int delta = 0;
   if (world.getName().equalsIgnoreCase(SNConfigHandler.priestChurchWorld)) {
     if (Math.abs(locX - SNConfigHandler.priestChurchLocationX) <= 10) {
       if (Math.abs(locY - SNConfigHandler.priestChurchLocationY) <= 10) {
         if (Math.abs(locZ - SNConfigHandler.priestChurchLocationZ) <= 10) {
           if (snplayer.isPriest()) {
             if (player.getItemInHand().getType().equals(Material.COAL)) {
               SuperNManager.sendMessage(snplayer, "The Church excommunicates you!");
               SuperNManager.cure(snplayer);
             } else {
               PlayerInventory inv = player.getInventory();
               ItemStack[] items = inv.getContents();
               for (Material mat : SNConfigHandler.priestDonationMap.keySet()) {
                 for (ItemStack itemStack : items) {
                   if (itemStack != null) {
                     if (itemStack.getType().equals(mat)) {
                       amount += itemStack.getAmount();
                     }
                   }
                 }
                 delta += amount * SNConfigHandler.priestDonationMap.get(mat);
                 amount = 0;
               }
               for (Material mat : SNConfigHandler.priestDonationMap.keySet()) {
                 inv.remove(mat);
               }
               player.updateInventory();
               SuperNManager.sendMessage(
                   snplayer,
                   "The Church accepts your gracious donations of Bread, Fish, Grilled Pork and Apples.");
               SuperNManager.alterPower(snplayer, delta, "Donations!");
             }
           } else {
             SuperNManager.sendMessage(snplayer, "The Church Altar radiates holy power.");
             if (snplayer.isSuper()) {
               SuperNManager.sendMessage(
                   snplayer, "The holy power of the Church tears you asunder!");
               EntityDamageEvent event =
                   new EntityDamageEvent(player, DamageCause.BLOCK_EXPLOSION, 20);
               player.setLastDamageCause(event);
               player.setHealth(0);
               if (snplayer.isGhoul()) {
                 double random = Math.random();
                 if (random < SNConfigHandler.ghoulCureChance - 0.1) {
                   SuperNManager.cure(snplayer);
                 }
               }
               return;
             }
             if (SNConfigHandler.priestAltarRecipe.playerHasEnough(player)) {
               if (!SupernaturalsPlugin.hasPermissions(
                   player, "supernatural.player.shrineuse.priest")) {
                 SuperNManager.sendMessage(snplayer, "You cannot use priest altars.");
                 return;
               }
               SuperNManager.sendMessage(snplayer, "You donate these items to the Church:");
               SuperNManager.sendMessage(
                   snplayer, SNConfigHandler.priestAltarRecipe.getRecipeLine());
               SuperNManager.sendMessage(
                   snplayer,
                   "The Church recognizes your holy spirit and accepts you into the priesthood.");
               SNConfigHandler.priestAltarRecipe.removeFromPlayer(player);
               SuperNManager.convert(snplayer, "priest", SNConfigHandler.priestPowerStart);
             } else {
               SuperNManager.sendMessage(
                   snplayer,
                   "The Church judges your intended donate insufficient.  You must gather the following: ");
               SuperNManager.sendMessage(
                   snplayer, SNConfigHandler.priestAltarRecipe.getRecipeLine());
             }
           }
         }
       }
     }
   }
 }