@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()); } } } } } } }
public void attackPlayerDefender( RpgPlayer rpgDefender, RpgPlayer rpgAttacker, RpgMonster rpgMobAttacker, double damage, int damageType, String typeString) { EntityDamageByEntityEvent edbe; Player playerDefender = rpgDefender.getPlayer(); String guildName = ""; HealthConverter hc = null; boolean ignoreArmor = false; int guildMemberCount = 0; // Get party and member count. if (FC_Rpg.guildConfig.getGuildByMember(playerDefender.getName()) != null) { guildName = FC_Rpg.guildConfig.getGuildByMember(playerDefender.getName()); guildMemberCount = FC_Rpg.guildConfig.getOnlineGuildPlayerList(guildName).size(); } else guildMemberCount = 1; // Check to see if the player was recently attacked to make sure he isn't attacked too much. if (canAttack(rpgDefender.getLastDamagedLong(), guildMemberCount) == false) return; // Refresh player enchants. rpgDefender.refreshItemEnchants(); // Handle immortality effect first. if (rpgDefender.playerConfig.getStatusActiveRpgPlayer(SpellEffect.IMMORTAL.getID())) { rpgDefender.attemptDamageAvoidNotification(true); return; } // Check if the player has dodge status on them. if (rpgDefender.playerConfig.getStatusActiveRpgPlayer(SpellEffect.DODGE.getID())) { Random rand = new Random(); if (rand.nextInt(100) < rpgDefender.playerConfig.getStatusMagnitude(SpellEffect.DODGE.getID())) { rpgDefender.attemptDamageAvoidNotification(false); return; } } if (rpgDefender.playerConfig.getStatusActiveRpgPlayer(SpellEffect.HEAL_CHANCE.getID())) rpgDefender.healHealth( rpgDefender.playerConfig.maxHealth * rpgDefender.playerConfig.getStatusMagnitude(SpellEffect.HEAL_CHANCE.getID())); // Set the last damage cause for players. if (rpgAttacker != null) { // Refresh player enchants. rpgAttacker.refreshItemEnchants(); // Update durability of weapons. updateSwordDurabilities(rpgAttacker.getPlayer()); // Apply false EDBEE edbe = new EntityDamageByEntityEvent( rpgAttacker.getPlayer(), playerDefender, DamageCause.ENTITY_ATTACK, 0); playerDefender.setLastDamageCause(edbe); // Calculate potions. damage *= FC_Rpg.battleCalculations.getPotionOffenseBonus(playerDefender); // True gets returned, we ignore armor. ignoreArmor = rpgAttacker.playerConfig.getStatusActiveRpgPlayer(SpellEffect.IGNORE_ARMOR.getID()); } else if (rpgMobAttacker != null) { // Apply false EDBEE edbe = new EntityDamageByEntityEvent( rpgMobAttacker.getEntity(), rpgDefender.getPlayer(), DamageCause.ENTITY_ATTACK, 0); playerDefender.setLastDamageCause(edbe); // Handle enchantments for mobs. if (damageType == 0) damage *= FC_Rpg.battleCalculations.getEntityEnchantmentBonus( rpgMobAttacker.getEntity(), Enchantment.DAMAGE_ARTHROPODS); if (damageType == 1) damage *= FC_Rpg.battleCalculations.getEntityEnchantmentBonus( rpgMobAttacker.getEntity(), Enchantment.ARROW_DAMAGE); // Calculate potions. damage *= FC_Rpg.battleCalculations.getPotionOffenseBonus(rpgMobAttacker.getEntity()); } // Deal thorns damage before anything is calculated. if (rpgDefender.playerConfig.getStatusActiveRpgPlayer(SpellEffect.THORNS.getID())) { double thornsDamage = damage * rpgDefender.playerConfig.getStatusMagnitude(SpellEffect.THORNS.getID()); // Attempt a dodge notification rpgDefender.attemptThornsNotification(thornsDamage); if (rpgAttacker != null) rpgAttacker.dealDamage(thornsDamage); else if (rpgMobAttacker != null) rpgMobAttacker.dealDamage(thornsDamage); } // If the attacker doesn't have the ignore defense status, then... if (!ignoreArmor) { // Calculate damage based on players armor. damage *= FC_Rpg.battleCalculations.getArmorBonus(rpgDefender); // Add in enchantment bonuses. damage *= FC_Rpg.battleCalculations.getArmorEnchantmentBonus( playerDefender, Enchantment.PROTECTION_ENVIRONMENTAL); if (damageType == 1) damage *= FC_Rpg.battleCalculations.getArmorEnchantmentBonus( playerDefender, Enchantment.PROTECTION_PROJECTILE); } damage *= FC_Rpg.battleCalculations.getPotionDefenseBonus(playerDefender); // Handle block. if (playerDefender.isBlocking() == true) { // Variable Declaration. RpgClass rpgClass = rpgDefender.playerConfig.getRpgClass(); if (rpgClass != null) { if (rpgClass.getPassiveID() == BalanceConfig.passive_StrongerParry) damage *= FC_Rpg.balanceConfig .getPassivesStrongerParry(); // 25% damage reduction for blocking as defender. else damage *= .9; // 10% damage reduction for blocking. } else damage *= .9; // 10% damage reduction for blocking. } // If taunt status is active, then... if (rpgDefender.playerConfig.getStatusActiveRpgPlayer(SpellEffect.TAUNT.getID()) == true) { // Apply taunt damage reduction. damage *= rpgDefender.playerConfig.getStatusMagnitude(SpellEffect.TAUNT.getID()); } // Deal damage greater than 0. if (damage < 0.1) damage = 0.1; // Deal the damage to the player rpgDefender.dealDamage(damage); // Perform damage effect. playerDefender.playEffect(EntityEffect.HURT); if (rpgAttacker != null) { handle_Post_Offense_Buffs(rpgAttacker, playerDefender, damage); if (playerDefender != null) handle_Post_Offense_Buffs(rpgAttacker, playerDefender, damage); rpgAttacker.attemptAttackNotification( rpgDefender.getPlayer().getName(), rpgDefender.playerConfig.getClassLevel(), rpgDefender.playerConfig.curHealth, rpgDefender.playerConfig.maxHealth, damage); applyKnockback(rpgAttacker.getPlayer(), playerDefender, damageType); } // Set the players health based current health out of maximum health. hc = new HealthConverter(rpgDefender.playerConfig.maxHealth, rpgDefender.playerConfig.curHealth); playerDefender.setHealth(hc.getPlayerHearts()); // Check armor durabilities for the player defender. increaseArmorDurabilities(playerDefender); // If the players has 0 health, kill minecraft body and set to dead. if (rpgDefender.playerConfig.curHealth < 1) { // Damage the player defender. playerDefender.damage(10000); // Set the player to alive. rpgDefender.setIsAlive(false); } else { if (rpgAttacker != null) { rpgDefender.attemptDefenseNotification( damage, rpgAttacker.getPlayer().getName(), rpgAttacker.playerConfig.getClassLevel()); handle_Defense_Passives(damage, rpgDefender, rpgAttacker.getPlayer()); } else if (rpgMobAttacker != null) { rpgDefender.attemptDefenseNotification( damage, rpgMobAttacker.getEntity().getType().toString(), rpgMobAttacker.getLevel()); handle_Defense_Passives(damage, rpgDefender, rpgMobAttacker.getEntity()); } else { rpgDefender.attemptDefenseNotification(damage, typeString, -1); } } }
@Override public void setLastDamageCause(EntityDamageEvent event) { caller.setLastDamageCause(event); }
// Mob combat public void attackMobDefender( RpgMonster rpgMobDefender, RpgPlayer rpgAttacker, double damage, int damageType) { // Variable Declarations. Player playerAttacker = rpgAttacker.getPlayer(); LivingEntity entityDefender = rpgMobDefender.getEntity(); String guild = null; int partyMemberCount = 1; // Make sure that the mob wasn't attacked too recently. if (FC_Rpg.guildConfig.getGuildByMember(playerAttacker.getName()) != null) { guild = FC_Rpg.guildConfig.getGuildByMember(playerAttacker.getName()); partyMemberCount = FC_Rpg.guildConfig.getOnlineGuildPlayerList(guild).size(); if (canAttack(rpgMobDefender.getLastDamagedLong(), partyMemberCount) == false) return; } // Check to see if the player was recently attacked to make sure he isn't attacked too much. if (canAttack(rpgMobDefender.getLastDamagedLong(), partyMemberCount) == false) return; // Refresh player enchants. rpgAttacker.refreshItemEnchants(); // If the player has the fire arrow status, then... if (rpgAttacker.playerConfig.getStatusActiveRpgPlayer(SpellEffect.FIRE_STRIKE.getID())) { // If the mob is alive and not a boss. if (rpgMobDefender.getIsBoss() == false && rpgMobDefender.getIsAlive() == true) { // Put mob on fire ((LivingEntity) entityDefender).setFireTicks(20); // set the mob on fire! // Then return return; } } // Update sword durabilities. updateSwordDurabilities(playerAttacker); if (rpgAttacker.playerConfig.getStatusActiveRpgPlayer( SpellEffect.CRITICAL_DAMAGE_DOUBLE.getID())) { Random rand = new Random(); // Increase attack damage by its magnitude. if (rand.nextInt(100) > rpgAttacker.playerConfig.getStatusMagnitude(SpellEffect.CRITICAL_DAMAGE_DOUBLE.getID())) damage *= 2; } // Handle the passives for attacking players. damage = handle_Offense_Passives(damage, rpgAttacker, playerAttacker); // If the attacker doesn't have the ignore defense status, then... if (rpgAttacker.playerConfig.getStatusActiveRpgPlayer(SpellEffect.IGNORE_ARMOR.getID()) == false) { damage *= FC_Rpg.battleCalculations.getArmorBonus(rpgMobDefender); // Add in enchantment bonuses. damage *= FC_Rpg.battleCalculations.getArmorEnchantmentBonus( rpgMobDefender.getEntity(), Enchantment.PROTECTION_ENVIRONMENTAL); if (damageType == 1) damage *= FC_Rpg.battleCalculations.getArmorEnchantmentBonus( rpgMobDefender.getEntity(), Enchantment.PROTECTION_PROJECTILE); } // Account for potions. damage *= FC_Rpg.battleCalculations.getPotionOffenseBonus(playerAttacker); damage *= FC_Rpg.battleCalculations.getPotionDefenseBonus(rpgMobDefender.getEntity()); // Damage must always be 1 or 0. If it is negative it will heal the creature (not good). if (damage < 0.1) damage = 0.1; // Find the attacker and deal damage from the attacker to the defender. rpgMobDefender.dealDamage(damage); // Perform damage effect. entityDefender.playEffect(EntityEffect.HURT); // Update health for ender dragon and wither bosses. if (entityDefender.getType() == EntityType.ENDER_DRAGON) { HealthConverter hc = new HealthConverter(rpgMobDefender.getMaxHealth(), rpgMobDefender.getCurHealth()); entityDefender.setHealth(hc.getEnderDragonHearts()); } else if (entityDefender.getType() == EntityType.WITHER) { HealthConverter hc = new HealthConverter(rpgMobDefender.getMaxHealth(), rpgMobDefender.getCurHealth()); entityDefender.setHealth(hc.getWitherHearts()); } // Attempt to send an attack notification. rpgAttacker.attemptAttackNotification( rpgMobDefender.getEntity().getType().toString(), rpgMobDefender.getLevel(), rpgMobDefender.getCurHealth(), rpgMobDefender.getMaxHealth(), damage); // Handle berserker class spells handle_Post_Offense_Buffs(rpgAttacker, entityDefender, damage); if (playerAttacker != null) applyKnockback(playerAttacker, entityDefender, damageType); // Put entity damage by entity event on both attacker and defender. EntityDamageByEntityEvent edbe = new EntityDamageByEntityEvent(playerAttacker, entityDefender, DamageCause.ENTITY_ATTACK, 0); playerAttacker.setLastDamageCause(edbe); entityDefender.setLastDamageCause(edbe); // If the mob has 0 health handle it's death processes AND drop loot. if (rpgMobDefender.getCurHealth() <= 0) { if (rpgMobDefender.getIsAlive() == false) return; rpgMobDefender.setIsAlive(false); if (rpgMobDefender.getMobAggressionCheck()) { // Give the attacker a mob kill rpgAttacker.playerConfig.setLifetimeMobKills( rpgAttacker.playerConfig.getLifetimeMobKills() + 1); // If the player is in a party, then... if (guild != null) FC_Rpg.guildConfig.addMobKill(guild); // Add a mob kill for that party. // Give battle winnings attemptGiveBattleWinnings(guild, playerAttacker, rpgMobDefender); // Don't drop loot if the monster level is too high/low. if ((rpgMobDefender.getLevel() - rpgAttacker.playerConfig.getClassLevel()) > FC_Rpg.balanceConfig.getPowerLevelPrevention() * -1) rpgMobDefender.handleHostileMobDrops( entityDefender.getLocation()); // Drop rpg items for hostile mobs. } else { // Drop items for non-hostile mobs. if (FC_Rpg.balanceConfig.getDefaultItemDrops() == false) rpgMobDefender.handlePassiveMobDrops(entityDefender.getLocation()); } // Drop experience rpgMobDefender.dropExperience(); // Remove the mob removeMob(entityDefender); } }