| 
					
				 | 
			
			
				@@ -1,12 +1,15 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package com.gmail.nossr50.skills.unarmed;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.bukkit.entity.LivingEntity;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.bukkit.Material;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.bukkit.entity.Player;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import org.bukkit.event.entity.EntityDamageEvent;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.bukkit.inventory.ItemStack;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gmail.nossr50.mcMMO;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.datatypes.McMMOPlayer;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gmail.nossr50.events.skills.McMMOPlayerDisarmEvent;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gmail.nossr50.locale.LocaleLoader;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.skills.SkillManager;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import com.gmail.nossr50.skills.utilities.PerksUtils;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.gmail.nossr50.skills.utilities.SkillTools;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.skills.utilities.SkillType;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.util.Misc;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.gmail.nossr50.util.Permissions;
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -21,55 +24,48 @@ public class UnarmedManager extends SkillManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      *
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @param defender The defending player
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void disarmCheck(LivingEntity defender) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Player defendingPlayer = (Player) defender;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        DisarmEventHandler eventHandler = new DisarmEventHandler(this, defendingPlayer);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void disarmCheck(Player defender) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (SkillTools.activationSuccessful(getPlayer(), skill, Unarmed.disarmMaxChance, Unarmed.disarmMaxBonusLevel) && !hasIronGrip(defender)) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            McMMOPlayerDisarmEvent disarmEvent = new McMMOPlayerDisarmEvent(defender);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            mcMMO.p.getServer().getPluginManager().callEvent(disarmEvent);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (eventHandler.isHoldingItem()) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            eventHandler.calculateSkillModifier();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (!disarmEvent.isCancelled()) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Misc.dropItem(defender.getLocation(), defender.getItemInHand());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            float chance = (float) ((Unarmed.disarmMaxChance / Unarmed.disarmMaxBonusLevel) * getSkillLevel());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (chance > Unarmed.disarmMaxChance) chance = (float) Unarmed.disarmMaxChance;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (chance > Misc.getRandom().nextInt(activationChance)) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (!hasIronGrip(defendingPlayer)) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    eventHandler.handleDisarm();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                defender.setItemInHand(new ItemStack(Material.AIR));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                defender.sendMessage(LocaleLoader.getString("Skills.Disarmed"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * Check for arrow deflection.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     *
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param event The event to modify
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void deflectCheck(EntityDamageEvent event) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        DeflectEventHandler eventHandler = new DeflectEventHandler(this, event);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        float chance = (float) ((Unarmed.deflectMaxChance / Unarmed.deflectMaxBonusLevel) * getSkillLevel());
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (chance > Unarmed.deflectMaxChance) chance = (float) Unarmed.deflectMaxChance;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public boolean deflectCheck() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Player player = getPlayer();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (chance > Misc.getRandom().nextInt(activationChance)) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            eventHandler.cancelEvent();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            eventHandler.sendAbilityMessage();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (SkillTools.activationSuccessful(player, skill, Unarmed.deflectMaxChance, Unarmed.deflectMaxBonusLevel)) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            player.sendMessage(LocaleLoader.getString("Combat.ArrowDeflect"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void berserkDamage(EntityDamageEvent event) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        event.setDamage((int) (event.getDamage() * Unarmed.berserkDamageModifier));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int berserkDamage(int damage) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return (int) (damage * Unarmed.berserkDamageModifier);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /**
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * Handle Unarmed bonus damage.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * Handle the effects of the Iron Arm ability
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      *
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     * @param event The event to modify.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param damage The amount of damage initially dealt by the event
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @return the modified event damage
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public void bonusDamage(EntityDamageEvent event) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        UnarmedBonusDamageEventHandler eventHandler = new UnarmedBonusDamageEventHandler(this, event);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public int ironArmCheck(int damage) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int unarmedBonus = Math.min(3 + (getSkillLevel() / Unarmed.ironArmIncreaseLevel), Unarmed.ironArmMaxBonusDamage);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        eventHandler.calculateDamageBonus();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        eventHandler.modifyEventDamage();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return damage + unarmedBonus;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /**
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -79,16 +75,10 @@ public class UnarmedManager extends SkillManager { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * @return true if the defender was not disarmed, false otherwise
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private boolean hasIronGrip(Player defender) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (Misc.isNPCEntity(defender) || !Permissions.ironGrip(defender)) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        IronGripEventHandler eventHandler = new IronGripEventHandler(this, defender);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        double chance = (Unarmed.ironGripMaxChance / Unarmed.ironGripMaxBonusLevel) * eventHandler.skillModifier;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (!Misc.isNPCEntity(defender) && Permissions.ironGrip(defender) && SkillTools.activationSuccessful(defender, skill, Unarmed.ironGripMaxChance, Unarmed.ironGripMaxBonusLevel)) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            defender.sendMessage(LocaleLoader.getString("Unarmed.Ability.IronGrip.Defender"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            getPlayer().sendMessage(LocaleLoader.getString("Unarmed.Ability.IronGrip.Attacker"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (chance > Misc.getRandom().nextInt(PerksUtils.handleLuckyPerks(defender, skill))) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            eventHandler.sendAbilityMessages();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 |