diff --git a/src/main/java/com/gmail/nossr50/Combat.java b/src/main/java/com/gmail/nossr50/Combat.java
index afc6d1540..369fdd443 100644
--- a/src/main/java/com/gmail/nossr50/Combat.java
+++ b/src/main/java/com/gmail/nossr50/Combat.java
@@ -1,18 +1,18 @@
/*
This file is part of mcMMO.
- mcMMO is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
+ mcMMO is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- mcMMO is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ mcMMO is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with mcMMO. If not, see .
+ You should have received a copy of the GNU General Public License
+ along with mcMMO. If not, see .
*/
package com.gmail.nossr50;
@@ -48,7 +48,7 @@ public class Combat
Entity damager = event.getDamager();
LivingEntity target = (LivingEntity) event.getEntity();
int damage = event.getDamage();
-
+
/*
* PLAYER VERSUS ENTITIES
*/
@@ -58,18 +58,18 @@ public class Combat
ItemStack itemInHand = attacker.getItemInHand();
PlayerProfile PPa = Users.getProfile(attacker);
- //If there are any abilities to activate
- combatAbilityChecks(attacker, PPa);
-
//Damage modifiers and proc checks
if(m.isSwords(itemInHand) && mcPermissions.getInstance().swords(attacker))
{
+ if(PPa.getSwordsPreparationMode())
+ Skills.abilityCheck(attacker, PPa, SkillType.SWORDS);
+
if(!pluginx.misc.bleedTracker.contains(target)) //Bleed
- Swords.bleedCheck(attacker, target, pluginx);
+ Swords.bleedCheck(attacker, PPa.getSkillLevel(SkillType.SWORDS), target, pluginx);
if (!(event instanceof FakeEntityDamageByEntityEvent) && PPa.getSerratedStrikesMode())
- Swords.applySerratedStrikes(attacker, event, pluginx);
-
+ Swords.applySerratedStrikes(attacker, target, damage, pluginx);
+
if(target instanceof Player)
PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.SWORDS);
else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId()))
@@ -77,35 +77,41 @@ public class Combat
}
else if(m.isAxes(itemInHand) && mcPermissions.getInstance().axes(attacker))
{
- Axes.axesBonus(attacker, event);
+ if(PPa.getAxePreparationMode())
+ Skills.abilityCheck(attacker, PPa, SkillType.AXES);
- Axes.axeCriticalCheck(attacker, event, pluginx); //Critical hit
+ damage += Axes.axesBonus(attacker, PPa);
+
+ damage *= Axes.axeCriticalBonus(attacker, PPa.getSkillLevel(SkillType.AXES), target, pluginx); //Critical hit
//Impact
- if(event.getEntity() instanceof LivingEntity)
- Axes.impact(attacker, (LivingEntity)event.getEntity());
+ Axes.impact(attacker, target);
if (!(event instanceof FakeEntityDamageByEntityEvent) && PPa.getSkullSplitterMode())
- Axes.applyAoeDamage(attacker, event, pluginx);
+ Axes.applyAoeDamage(attacker, target, damage, pluginx);
if(target instanceof Player)
- PvPExperienceGain(attacker, PPa, (Player) target, event.getDamage(), SkillType.AXES);
+ PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.AXES);
else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId()))
- PvEExperienceGain(attacker, PPa, target, event.getDamage(), SkillType.AXES);
+ PvEExperienceGain(attacker, PPa, target, damage, SkillType.AXES);
}
else if(itemInHand.getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker)) //Unarmed
{
- Unarmed.unarmedBonus(attacker, event);
+ if(PPa.getFistsPreparationMode())
+ Skills.abilityCheck(attacker, PPa, SkillType.UNARMED);
+
+ damage += Unarmed.unarmedBonus(PPa.getSkillLevel(SkillType.UNARMED));
+
if(PPa.getBerserkMode())
- event.setDamage(event.getDamage() + (event.getDamage() / 2));
+ damage *= 1.5;
if(target instanceof Player)
- Unarmed.disarmProcCheck(attacker, (Player) target); //Disarm
+ Unarmed.disarmProcCheck(attacker, PPa.getSkillLevel(SkillType.UNARMED), (Player) target); //Disarm
if(target instanceof Player)
- PvPExperienceGain(attacker, PPa, (Player) target, event.getDamage(), SkillType.UNARMED);
+ PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.UNARMED);
else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId()))
- PvEExperienceGain(attacker, PPa, target, event.getDamage(), SkillType.UNARMED);
+ PvEExperienceGain(attacker, PPa, target, damage, SkillType.UNARMED);
}
//Player use bone on wolf.
@@ -116,6 +122,7 @@ public class Combat
if(itemInHand.getTypeId() == 352 && mcPermissions.getInstance().taming(attacker))
{
event.setCancelled(true);
+
if(wolf.isTamed())
attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(wolf)})+" "+
@@ -125,6 +132,8 @@ public class Combat
mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {wolf.getHealth()}));
}
}
+
+ event.setDamage(damage);
}
/*
@@ -170,7 +179,7 @@ public class Combat
Swords.counterAttackChecks(event);
Acrobatics.dodgeChecks(event);
}
-
+
/*
* DEFENSIVE CHECKS FOR WOLVES
*/
@@ -182,17 +191,6 @@ public class Combat
}
}
- public static void combatAbilityChecks(Player attacker, PlayerProfile PPa)
- {
- //Check to see if any abilities need to be activated
- if(PPa.getAxePreparationMode())
- Skills.abilityCheck(attacker, SkillType.AXES);
- if(PPa.getSwordsPreparationMode())
- Skills.abilityCheck(attacker, SkillType.SWORDS);
- if(PPa.getFistsPreparationMode())
- Skills.abilityCheck(attacker, SkillType.UNARMED);
- }
-
public static void archeryCheck(EntityDamageByEntityEvent event, mcMMO pluginx)
{
Arrow arrow = (Arrow)event.getDamager();
@@ -322,7 +320,6 @@ public class Combat
EntityDamageEvent ede = (EntityDamageByEntityEvent) new FakeEntityDamageByEntityEvent(attacker, target, EntityDamageEvent.DamageCause.ENTITY_ATTACK, dmg);
Bukkit.getPluginManager().callEvent(ede);
if(ede.isCancelled()) return;
-
target.damage(ede.getDamage());
} else {
target.damage(dmg);
diff --git a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
index da870510b..9e83de767 100644
--- a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
+++ b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java
@@ -144,7 +144,7 @@ public class mcBlockListener implements Listener
//Green Terra
if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && ((id == 59 && block.getData() == (byte) 0x07) || Herbalism.canBeGreenTerra(block)))
- Skills.abilityCheck(player, SkillType.HERBALISM);
+ Skills.abilityCheck(player, PP, SkillType.HERBALISM);
//Wheat && Triple drops
if(PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block))
@@ -220,17 +220,17 @@ public class mcBlockListener implements Listener
if(m.abilityBlockCheck(block))
{
if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(block))
- Skills.abilityCheck(player, SkillType.HERBALISM);
+ Skills.abilityCheck(player, PP, SkillType.HERBALISM);
if(PP.getAxePreparationMode() && id == 17 && mcPermissions.getInstance().woodCuttingAbility(player))
- Skills.abilityCheck(player, SkillType.WOODCUTTING);
+ Skills.abilityCheck(player, PP, SkillType.WOODCUTTING);
if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block))
- Skills.abilityCheck(player, SkillType.MINING);
+ Skills.abilityCheck(player, PP, SkillType.MINING);
if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block))
- Skills.abilityCheck(player, SkillType.EXCAVATION);
+ Skills.abilityCheck(player, PP, SkillType.EXCAVATION);
}
if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || id == 78))
- Skills.abilityCheck(player, SkillType.UNARMED);
+ Skills.abilityCheck(player, PP, SkillType.UNARMED);
/*
* TREE FELLER STUFF
diff --git a/src/main/java/com/gmail/nossr50/skills/Axes.java b/src/main/java/com/gmail/nossr50/skills/Axes.java
index c06f3763d..ce8d2b2ab 100644
--- a/src/main/java/com/gmail/nossr50/skills/Axes.java
+++ b/src/main/java/com/gmail/nossr50/skills/Axes.java
@@ -22,76 +22,67 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Wolf;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.plugin.Plugin;
import com.gmail.nossr50.Combat;
import com.gmail.nossr50.Users;
import com.gmail.nossr50.m;
-import com.gmail.nossr50.mcPermissions;
+import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale;
import com.gmail.nossr50.party.Party;
-public class Axes {
- public static void axesBonus(Player attacker, EntityDamageByEntityEvent event)
- {
- int bonus = 0;
-
- //Add 1 DMG for every 50 skill levels
- bonus += Users.getProfile(attacker).getSkillLevel(SkillType.AXES)/50;
-
- if(bonus > 4)
- bonus = 4;
-
- event.setDamage(event.getDamage() + bonus);
- }
- public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx)
+public class Axes
+{
+ public static int axesBonus(Player attacker, PlayerProfile PP)
{
- Entity x = event.getEntity();
-
- if(x instanceof Wolf){
- Wolf wolf = (Wolf)x;
- if(Taming.getOwner(wolf, pluginx) != null)
- {
- if(Taming.getOwner(wolf, pluginx) == attacker)
- return;
- if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
- return;
- }
- }
- PlayerProfile PPa = Users.getProfile(attacker);
- if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
- if(PPa.getSkillLevel(SkillType.AXES) >= 750){
- if(Math.random() * 1000 <= 750 && !x.isDead()){
- if(x instanceof Player){
- int damage = (event.getDamage() * 2) - (event.getDamage() / 2);
- event.setDamage(damage);
- Player player = (Player)x;
- player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
- }
- else {
- int damage = event.getDamage() * 2;
- event.setDamage(damage);
- }
- attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
- }
- } else if(Math.random() * 1000 <= PPa.getSkillLevel(SkillType.AXES) && !x.isDead()){
- if(x instanceof Player){
- int damage = (event.getDamage() * 2) - (event.getDamage() / 2);
- event.setDamage(damage);
- Player player = (Player)x;
- player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
- }
- else {
- int damage = event.getDamage() * 2;
- event.setDamage(damage);
- }
+ //Add 1 DMG for every 50 skill levels
+ int bonus = PP.getSkillLevel(SkillType.AXES) / 50;
+
+ if(bonus > 4)
+ bonus = 4;
+
+ return bonus;
+ }
+
+ public static double axeCriticalBonus(Player attacker, int skillLevel, LivingEntity target, mcMMO pluginx)
+ {
+ if(target instanceof Wolf)
+ {
+ if(Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx))
+ return 1.0;
+ }
+
+ double criticalBonus = 0.0;
+
+ if(skillLevel >= 750)
+ {
+ if(Math.random() * 1000 <= 750)
+ {
+ if(target instanceof Player)
+ {
+ criticalBonus = 1.5;
+ ((Player) target).sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
+ }
+ else
+ criticalBonus = 2.0;
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
- }
- }
- }
+ }
+ }
+ else if(Math.random() * 1000 <= skillLevel)
+ {
+ if(target instanceof Player)
+ {
+ criticalBonus = 1.5;
+ ((Player) target).sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
+ }
+ else
+ criticalBonus = 2.0;
+ attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!");
+ }
+
+ return criticalBonus;
+ }
public static void impact(Player attacker, LivingEntity target)
{
@@ -146,68 +137,60 @@ public class Axes {
return false;
}
- public static void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx)
+ public static void applyAoeDamage(Player attacker, LivingEntity target, int damage, mcMMO pluginx)
{
int targets = 0;
- int dmgAmount = (event.getDamage()/2);
-
- //Setup minimum damage
- if(dmgAmount < 1)
- dmgAmount = 1;
-
- if(event.getEntity() instanceof LivingEntity)
- {
- LivingEntity x = (LivingEntity) event.getEntity();
- targets = m.getTier(attacker);
-
- for(Entity derp : x.getNearbyEntities(2.5, 2.5, 2.5))
- {
- //Make sure the Wolf is not friendly
- if(derp instanceof Wolf)
- {
- Wolf hurrDurr = (Wolf)derp;
- if(Taming.getOwner(hurrDurr, pluginx) == attacker)
+ int dmgAmount = damage / 2;
+
+ //Setup minimum damage
+ if(dmgAmount < 1)
+ dmgAmount = 1;
+
+ targets = m.getTier(attacker);
+
+ for(Entity derp : target.getNearbyEntities(2.5, 2.5, 2.5))
+ {
+ //Make sure the Wolf is not friendly
+ if(derp instanceof Wolf)
+ {
+ if (Taming.isFriendlyWolf(attacker, (Wolf) derp, pluginx))
+ continue;
+ }
+
+ //Damage nearby LivingEntities
+ else if(derp instanceof LivingEntity && targets >= 1)
+ {
+ if(derp instanceof Player)
+ {
+ Player nearbyPlayer = (Player) derp;
+
+ if(Users.getProfile(nearbyPlayer).getGodMode())
continue;
- if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
+
+ if(nearbyPlayer.getName().equals(attacker.getName()))
continue;
+
+ if(Party.getInstance().inSameParty(attacker, nearbyPlayer))
+ continue;
+
+ if(target.isDead())
+ continue;
+
+ if(targets >= 1 && nearbyPlayer.getWorld().getPVP())
+ {
+ Combat.dealDamage(nearbyPlayer, dmgAmount, attacker);
+ nearbyPlayer.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!");
+ targets--;
+ }
}
-
- //Damage nearby LivingEntities
- if(derp instanceof LivingEntity && targets >= 1)
- {
- if(derp instanceof Player)
- {
- Player target = (Player)derp;
-
- if(Users.getProfile(target).getGodMode())
- continue;
-
- if(target.getName().equals(attacker.getName()))
- continue;
-
- if(Party.getInstance().inSameParty(attacker, target))
- continue;
-
- if(target.isDead())
- continue;
-
- if(targets >= 1 && derp.getWorld().getPVP())
- {
- Combat.dealDamage(target, dmgAmount, attacker);
- target.sendMessage(ChatColor.DARK_RED+"Struck by CLEAVE!");
- targets--;
- continue;
- }
- }
- else
- {
- LivingEntity target = (LivingEntity)derp;
- Combat.dealDamage(target, dmgAmount, attacker);
- targets--;
- }
- }
- }
- }
+ else
+ {
+ LivingEntity nearbyLivingEntity = (LivingEntity) derp;
+ Combat.dealDamage(nearbyLivingEntity, dmgAmount, attacker);
+ targets--;
+ }
+ }
+ }
}
}
diff --git a/src/main/java/com/gmail/nossr50/skills/Skills.java b/src/main/java/com/gmail/nossr50/skills/Skills.java
index f9bdde49c..67e54ced4 100644
--- a/src/main/java/com/gmail/nossr50/skills/Skills.java
+++ b/src/main/java/com/gmail/nossr50/skills/Skills.java
@@ -275,15 +275,14 @@ public class Skills
* @param player The player activating the ability
* @param type The skill the ability is based on
*/
- public static void abilityCheck(Player player, SkillType type)
- {
- PlayerProfile PP = Users.getProfile(player);
- AbilityType ability = type.getAbility();
- if(type.getTool().inHand(player.getItemInHand()))
- {
- if(type.getTool().getToolMode(PP))
- type.getTool().setToolMode(PP, false);
-
+ public static void abilityCheck(Player player, PlayerProfile PP, SkillType type)
+ {
+ AbilityType ability = type.getAbility();
+ if(type.getTool().inHand(player.getItemInHand()))
+ {
+ if(type.getTool().getToolMode(PP))
+ type.getTool().setToolMode(PP, false);
+
//Axes and Woodcutting are odd because they share the same tool so we show them the too tired message when they take action
if(type == SkillType.WOODCUTTING || type == SkillType.AXES)
{
@@ -293,19 +292,19 @@ public class Skills
return;
}
}
-
- int ticks = 2 + (PP.getSkillLevel(type) / 50);
- if(!ability.getMode(PP) && cooldownOver(player, PP.getSkillDATS(ability), ability.getCooldown()))
- {
- player.sendMessage(ability.getAbilityOn());
- for(Player y : player.getWorld().getPlayers())
- {
- if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10))
- y.sendMessage(ability.getAbilityPlayer(player));
- }
- PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks*1000));
- ability.setMode(PP, true);
- }
- }
- }
+
+ int ticks = 2 + (PP.getSkillLevel(type) / 50);
+ if(!ability.getMode(PP) && cooldownOver(player, PP.getSkillDATS(ability), ability.getCooldown()))
+ {
+ player.sendMessage(ability.getAbilityOn());
+ for(Player y : player.getWorld().getPlayers())
+ {
+ if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10))
+ y.sendMessage(ability.getAbilityPlayer(player));
+ }
+ PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks*1000));
+ ability.setMode(PP, true);
+ }
+ }
+ }
}
diff --git a/src/main/java/com/gmail/nossr50/skills/Swords.java b/src/main/java/com/gmail/nossr50/skills/Swords.java
index 61bf1ca12..da7904ae6 100644
--- a/src/main/java/com/gmail/nossr50/skills/Swords.java
+++ b/src/main/java/com/gmail/nossr50/skills/Swords.java
@@ -33,186 +33,165 @@ import com.gmail.nossr50.party.Party;
public class Swords
{
- public static void bleedCheck(Player attacker, LivingEntity x, mcMMO pluginx)
+ public static void bleedCheck(Player attacker, int skillLevel, LivingEntity target, mcMMO pluginx)
{
- PlayerProfile PPa = Users.getProfile(attacker);
-
- if(x instanceof Wolf)
- {
- Wolf wolf = (Wolf)x;
- if(Taming.getOwner(wolf, pluginx) != null)
- {
- if(Taming.getOwner(wolf, pluginx) == attacker)
- return;
- if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
- return;
- }
- }
- if(mcPermissions.getInstance().swords(attacker) && m.isSwords(attacker.getItemInHand())){
- if(PPa.getSkillLevel(SkillType.SWORDS) >= 750)
+ if(target instanceof Wolf)
+ {
+ if(Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx))
+ return;
+ }
+
+ if(skillLevel >= 750)
+ {
+ if(Math.random() * 1000 <= 750)
{
- if(Math.random() * 1000 <= 750)
- {
- if(!(x instanceof Player))
- pluginx.misc.addToBleedQue(x);
- if(x instanceof Player)
- {
- Player target = (Player)x;
- Users.getProfile(target).addBleedTicks(3);
- }
- attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
- }
- }
- else if (Math.random() * 1000 <= PPa.getSkillLevel(SkillType.SWORDS))
- {
- if(!(x instanceof Player))
- pluginx.misc.addToBleedQue(x);
- if(x instanceof Player)
- {
- Player target = (Player)x;
- Users.getProfile(target).addBleedTicks(2);
- }
+ if(!(target instanceof Player))
+ pluginx.misc.addToBleedQue(target);
+ else if(target instanceof Player)
+ Users.getProfile((Player) target).addBleedTicks(3);
attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
}
+ }
+ else if(Math.random() * 1000 <= skillLevel)
+ {
+ if(!(target instanceof Player))
+ pluginx.misc.addToBleedQue(target);
+ else if(target instanceof Player)
+ Users.getProfile((Player) target).addBleedTicks(2);
+ attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**");
}
- }
- public static void applySerratedStrikes(Player attacker, EntityDamageByEntityEvent event, mcMMO pluginx)
- {
- int targets = 0;
-
- int dmgAmount = (event.getDamage()/4);
-
- //Setup minimum damage
- if(dmgAmount < 1)
- dmgAmount = 1;
-
- if(event.getEntity() instanceof LivingEntity)
- {
- LivingEntity x = (LivingEntity) event.getEntity();
- targets = m.getTier(attacker);
-
- for(Entity derp : x.getNearbyEntities(2.5, 2.5, 2.5))
- {
- //Make sure the Wolf is not friendly
- if(derp instanceof Wolf)
- {
- Wolf hurrDurr = (Wolf)derp;
- if(Taming.getOwner(hurrDurr, pluginx) == attacker)
- continue;
- if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
- continue;
- }
- //Damage nearby LivingEntities
- if(derp instanceof LivingEntity && targets >= 1)
- {
- if(derp instanceof Player)
- {
- Player target = (Player)derp;
-
- if(target.getName().equals(attacker.getName()))
- continue;
-
- if(Users.getProfile(target).getGodMode())
- continue;
-
- if(Party.getInstance().inSameParty(attacker, target))
- continue;
- if(targets >= 1 && derp.getWorld().getPVP())
- {
- Combat.dealDamage(target, dmgAmount, attacker);
- target.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
- Users.getProfile(target).addBleedTicks(5);
- targets--;
- continue;
- }
- }
- else
- {
- if(!pluginx.misc.bleedTracker.contains(derp))
- pluginx.misc.addToBleedQue((LivingEntity)derp);
-
- LivingEntity target = (LivingEntity)derp;
- Combat.dealDamage(target, dmgAmount, attacker);
- targets--;
- }
- }
- }
- }
}
-
- public static void counterAttackChecks(EntityDamageByEntityEvent event)
- {
- //Don't want to counter attack stuff not alive
-
- if(!(event.getDamager() instanceof LivingEntity))
- return;
-
- if(event instanceof EntityDamageByEntityEvent)
- {
- Entity f = ((EntityDamageByEntityEvent) event).getDamager();
- if(event.getEntity() instanceof Player)
- {
- Player defender = (Player)event.getEntity();
- PlayerProfile PPd = Users.getProfile(defender);
- if(m.isSwords(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender))
- {
- if(PPd.getSkillLevel(SkillType.SWORDS) >= 600)
- {
- if(Math.random() * 2000 <= 600)
- {
- Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
- defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
- if(f instanceof Player)
- ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
- }
- }
- else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS))
- {
- Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
- defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
- if(f instanceof Player)
- ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
- }
- }
- }
- }
- }
-
- public static void bleedSimulate(mcMMO plugin)
- {
- //Add items from Que list to BleedTrack list
-
- for(LivingEntity x : plugin.misc.bleedQue)
- {
- plugin.misc.bleedTracker.add(x);
- }
-
- //Clear list
- plugin.misc.bleedQue = new LivingEntity[plugin.misc.bleedQue.length];
- plugin.misc.bleedQuePos = 0;
-
- //Cleanup any dead entities from the list
- for(LivingEntity x : plugin.misc.bleedRemovalQue)
- {
- plugin.misc.bleedTracker.remove(x);
- }
-
- //Clear bleed removal list
- plugin.misc.bleedRemovalQue = new LivingEntity[plugin.misc.bleedRemovalQue.length];
- plugin.misc.bleedRemovalQuePos = 0;
-
- //Bleed monsters/animals
- for(LivingEntity x : plugin.misc.bleedTracker)
- {
- if(x == null || x.isDead())
- {
- plugin.misc.addToBleedRemovalQue(x);
- continue;
- }
- else
- {
+
+ public static void applySerratedStrikes(Player attacker, LivingEntity target, int damage, mcMMO pluginx)
+ {
+ int targets = 0;
+
+ int dmgAmount = damage / 4;
+
+ //Setup minimum damage
+ if(dmgAmount < 1)
+ dmgAmount = 1;
+
+ targets = m.getTier(attacker);
+
+ for(Entity derp : target.getNearbyEntities(2.5, 2.5, 2.5))
+ {
+ //Make sure the Wolf is not friendly
+ if(derp instanceof Wolf)
+ {
+ if (Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx))
+ continue;
+ }
+
+ //Damage nearby LivingEntities
+ if(derp instanceof LivingEntity && targets >= 1)
+ {
+ if(derp instanceof Player)
+ {
+ Player nearbyPlayer = (Player) derp;
+
+ if(nearbyPlayer.getName().equals(attacker.getName()))
+ continue;
+
+ if(Users.getProfile(nearbyPlayer).getGodMode())
+ continue;
+
+ if(Party.getInstance().inSameParty(attacker, nearbyPlayer))
+ continue;
+
+ if(targets >= 1 && nearbyPlayer.getWorld().getPVP())
+ {
+ Combat.dealDamage(nearbyPlayer, dmgAmount, attacker);
+ nearbyPlayer.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
+ Users.getProfile(nearbyPlayer).addBleedTicks(5);
+ targets--;
+ }
+ }
+ else
+ {
+ LivingEntity neabyLivingEntity = (LivingEntity) derp;
+
+ if(!pluginx.misc.bleedTracker.contains(neabyLivingEntity))
+ pluginx.misc.addToBleedQue(neabyLivingEntity);
+
+ Combat.dealDamage(neabyLivingEntity, dmgAmount, attacker);
+ targets--;
+ }
+ }
+ }
+ }
+
+ public static void counterAttackChecks(EntityDamageByEntityEvent event)
+ {
+ //Don't want to counter attack stuff not alive
+
+ if(!(event.getDamager() instanceof LivingEntity))
+ return;
+
+ if(event instanceof EntityDamageByEntityEvent)
+ {
+ Entity f = ((EntityDamageByEntityEvent) event).getDamager();
+ if(event.getEntity() instanceof Player)
+ {
+ Player defender = (Player)event.getEntity();
+ PlayerProfile PPd = Users.getProfile(defender);
+ if(m.isSwords(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender))
+ {
+ if(PPd.getSkillLevel(SkillType.SWORDS) >= 600)
+ {
+ if(Math.random() * 2000 <= 600)
+ {
+ Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
+ defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
+ if(f instanceof Player)
+ ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
+ }
+ }
+ else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS))
+ {
+ Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
+ defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**");
+ if(f instanceof Player)
+ ((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!");
+ }
+ }
+ }
+ }
+ }
+
+ public static void bleedSimulate(mcMMO plugin)
+ {
+ //Add items from Que list to BleedTrack list
+
+ for(LivingEntity x : plugin.misc.bleedQue)
+ {
+ plugin.misc.bleedTracker.add(x);
+ }
+
+ //Clear list
+ plugin.misc.bleedQue = new LivingEntity[plugin.misc.bleedQue.length];
+ plugin.misc.bleedQuePos = 0;
+
+ //Cleanup any dead entities from the list
+ for(LivingEntity x : plugin.misc.bleedRemovalQue)
+ {
+ plugin.misc.bleedTracker.remove(x);
+ }
+
+ //Clear bleed removal list
+ plugin.misc.bleedRemovalQue = new LivingEntity[plugin.misc.bleedRemovalQue.length];
+ plugin.misc.bleedRemovalQuePos = 0;
+
+ //Bleed monsters/animals
+ for(LivingEntity x : plugin.misc.bleedTracker)
+ {
+ if(x == null || x.isDead())
+ {
+ plugin.misc.addToBleedRemovalQue(x);
+ continue;
+ }
+ else
Combat.dealDamage(x, 2);
- }
- }
- }
+ }
+ }
}
diff --git a/src/main/java/com/gmail/nossr50/skills/Taming.java b/src/main/java/com/gmail/nossr50/skills/Taming.java
index b7c7c6f4b..098ade452 100644
--- a/src/main/java/com/gmail/nossr50/skills/Taming.java
+++ b/src/main/java/com/gmail/nossr50/skills/Taming.java
@@ -1,18 +1,18 @@
/*
This file is part of mcMMO.
- mcMMO is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
+ mcMMO is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- mcMMO is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ mcMMO is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with mcMMO. If not, see .
+ You should have received a copy of the GNU General Public License
+ along with mcMMO. If not, see .
*/
package com.gmail.nossr50.skills;
@@ -31,6 +31,7 @@ import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale;
+import com.gmail.nossr50.party.Party;
public class Taming
{
@@ -169,4 +170,11 @@ public class Taming
if(cause == DamageCause.FIRE_TICK)
event.getEntity().setFireTicks(0);
}
+
+ public static boolean isFriendlyWolf(Player player, Wolf wolf, mcMMO pluginx)
+ {
+ if(getOwner(wolf, pluginx) == player || Party.getInstance().inSameParty(player, getOwner(wolf, pluginx)))
+ return true;
+ return false;
+ }
}
diff --git a/src/main/java/com/gmail/nossr50/skills/Unarmed.java b/src/main/java/com/gmail/nossr50/skills/Unarmed.java
index 9fccdccfe..632a3c2b5 100644
--- a/src/main/java/com/gmail/nossr50/skills/Unarmed.java
+++ b/src/main/java/com/gmail/nossr50/skills/Unarmed.java
@@ -18,53 +18,47 @@ package com.gmail.nossr50.skills;
import org.bukkit.Material;
import org.bukkit.entity.Player;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack;
-import com.gmail.nossr50.Users;
import com.gmail.nossr50.m;
-import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale;
-public class Unarmed {
-
- public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event)
+public class Unarmed
+{
+ public static int unarmedBonus(int skillLevel)
{
- int bonus = 3;
-
//Add 1 DMG for every 50 skill levels
- bonus += Users.getProfile(attacker).getSkillLevel(SkillType.UNARMED)/50;
+ int bonus = skillLevel / 50;
if(bonus > 8)
- bonus = 8;
-
- event.setDamage(event.getDamage() + bonus);
+ bonus = 8;
+
+ return bonus;
}
- public static void disarmProcCheck(Player attacker, Player defender)
+ public static void disarmProcCheck(Player attacker, int skillLevel, Player defender)
{
- int skillLevel = Users.getProfile(attacker).getSkillLevel(SkillType.UNARMED);
if(defender.getItemInHand() != null && defender.getItemInHand().getType() != Material.AIR)
{
if(skillLevel >= 1000)
{
if(Math.random() * 3000 <= 1000)
{
- ItemStack item = defender.getItemInHand();
- defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
- m.mcDropItem(defender.getLocation(), item);
- defender.setItemInHand(null);
+ ItemStack item = defender.getItemInHand();
+ defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
+ m.mcDropItem(defender.getLocation(), item);
+ defender.setItemInHand(null);
}
- }
+ }
else
- {
+ {
if(Math.random() * 3000 <= skillLevel)
{
- ItemStack item = defender.getItemInHand();
- defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
- m.mcDropItem(defender.getLocation(), item);
- defender.setItemInHand(null);
+ ItemStack item = defender.getItemInHand();
+ defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
+ m.mcDropItem(defender.getLocation(), item);
+ defender.setItemInHand(null);
}
- }
+ }
}
}
-}
\ No newline at end of file
+}