From ed8e2ab8b9aff9815a089d2dd468e356c8e5ad77 Mon Sep 17 00:00:00 2001 From: bm01 Date: Sun, 26 Feb 2012 17:36:11 +0100 Subject: [PATCH] More optimzation --- src/main/java/com/gmail/nossr50/Combat.java | 56 ++- .../nossr50/listeners/mcBlockListener.java | 2 +- .../java/com/gmail/nossr50/skills/Axes.java | 281 ++++++------- .../java/com/gmail/nossr50/skills/Swords.java | 389 ++++++++---------- .../java/com/gmail/nossr50/skills/Taming.java | 8 + .../com/gmail/nossr50/skills/Unarmed.java | 151 +++---- 6 files changed, 418 insertions(+), 469 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/Combat.java b/src/main/java/com/gmail/nossr50/Combat.java index 002d099d0..59d10660e 100644 --- a/src/main/java/com/gmail/nossr50/Combat.java +++ b/src/main/java/com/gmail/nossr50/Combat.java @@ -22,7 +22,6 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.inventory.ItemStack; -import org.bukkit.plugin.Plugin; import com.gmail.nossr50.config.LoadProperties; import com.gmail.nossr50.datatypes.PlayerProfile; @@ -62,17 +61,17 @@ public class Combat ItemStack itemInHand = attacker.getItemInHand(); PlayerProfile PPa = Users.getProfile(attacker); - //If there are any abilities to activate - combatAbilityChecks(attacker, PPa, pluginx); - //Damage modifiers and proc checks if(m.isSwords(itemInHand) && mcPermissions.getInstance().swords(attacker)) { + if(PPa.getSwordsPreparationMode()) + Swords.serratedStrikesActivationCheck(attacker, PPa); + 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, eEvent, pluginx); + Swords.applySerratedStrikes(attacker, target, damage, pluginx); if(target instanceof Player) PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.SWORDS); @@ -81,31 +80,39 @@ public class Combat } else if(m.isAxes(itemInHand) && mcPermissions.getInstance().axes(attacker)) { - if(Users.getProfile(attacker).getSkillLevel(SkillType.AXES) >= 500) - event.setDamage(damage + 4); + if(PPa.getAxePreparationMode()) + Axes.skullSplitterActivationCheck(attacker, PPa); - Axes.axeCriticalCheck(attacker, eEvent, pluginx); //Critical hit + if(PPa.getSkillLevel(SkillType.AXES) >= 500) + damage += 4; + + damage = Axes.axeCriticalCheck(attacker, PPa.getSkillLevel(SkillType.AXES), target, damage, pluginx); //Critical hit if (!(event instanceof FakeEntityDamageByEntityEvent) && PPa.getSkullSplitterMode()) - Axes.applyAoeDamage(attacker, eEvent, pluginx); + Axes.applyAoeDamage(attacker, target, damage, pluginx); if(target instanceof Player) - PvPExperienceGain(attacker, PPa, (Player) target, eEvent.getDamage(), SkillType.AXES); + PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.AXES); else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId())) - PvEExperienceGain(attacker, PPa, target, eEvent.getDamage(), SkillType.AXES); + PvEExperienceGain(attacker, PPa, target, damage, SkillType.AXES); } else if(itemInHand.getTypeId() == 0 && mcPermissions.getInstance().unarmed(attacker)) //Unarmed { - Unarmed.unarmedBonus(attacker, eEvent); + if(PPa.getFistsPreparationMode()) + Unarmed.berserkActivationCheck(attacker, PPa); + + damage += Unarmed.unarmedBonus(PPa); + if(PPa.getBerserkMode()) - event.setDamage(eEvent.getDamage() + (eEvent.getDamage() / 2)); - if(target instanceof Player) - Unarmed.disarmProcCheck(attacker, (Player) target); //Disarm + damage *= 1.5; if(target instanceof Player) - PvPExperienceGain(attacker, PPa, (Player) target, eEvent.getDamage(), SkillType.UNARMED); + Unarmed.disarmProcCheck(attacker, PPa.getSkillLevel(SkillType.UNARMED), (Player) target); //Disarm + + if(target instanceof Player) + PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.UNARMED); else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId())) - PvEExperienceGain(attacker, PPa, target, eEvent.getDamage(), SkillType.UNARMED); + PvEExperienceGain(attacker, PPa, target, damage, SkillType.UNARMED); } //Player use bone on wolf. @@ -125,6 +132,8 @@ public class Combat mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {wolf.getHealth()})); } } + + eEvent.setDamage(damage); } /* @@ -183,17 +192,6 @@ public class Combat } } - public static void combatAbilityChecks(Player attacker, PlayerProfile PPa, Plugin pluginx) - { - //Check to see if any abilities need to be activated - if(PPa.getAxePreparationMode()) - Axes.skullSplitterCheck(attacker); - if(PPa.getSwordsPreparationMode()) - Swords.serratedStrikesActivationCheck(attacker); - if(PPa.getFistsPreparationMode()) - Unarmed.berserkActivationCheck(attacker); - } - public static void archeryCheck(EntityDamageByEntityEvent event, mcMMO pluginx) { Arrow arrow = (Arrow)event.getDamager(); diff --git a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java index 2188c7f24..31340d0ed 100644 --- a/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/mcBlockListener.java @@ -233,7 +233,7 @@ public class mcBlockListener implements Listener Excavation.gigaDrillBreakerActivationCheck(player); } if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || id == 78)) - Unarmed.berserkActivationCheck(player); + Unarmed.berserkActivationCheck(player, PP); /* * 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 f2a6a4852..5a256cc45 100644 --- a/src/main/java/com/gmail/nossr50/skills/Axes.java +++ b/src/main/java/com/gmail/nossr50/skills/Axes.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; @@ -21,163 +21,144 @@ 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.plugin.Plugin; import com.gmail.nossr50.locale.mcLocale; 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.config.LoadProperties; import com.gmail.nossr50.datatypes.AbilityType; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.party.Party; -public class Axes { - public static void skullSplitterCheck(Player player){ - PlayerProfile PP = Users.getProfile(player); - if(m.isAxes(player.getItemInHand()) && mcPermissions.getInstance().axesAbility(player)){ - /* - * CHECK FOR AXE PREP MODE - */ - if(PP.getAxePreparationMode()) - { - PP.setAxePreparationMode(false); - } - int ticks = 2; - int x = PP.getSkillLevel(SkillType.AXES); - while(x >= 50){ - x-=50; - ticks++; - } - - if(!PP.getSkullSplitterMode() && Skills.cooldownOver(player, (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown)) - { - player.sendMessage(mcLocale.getString("Skills.SkullSplitterOn")); - for(Player y : player.getWorld().getPlayers()){ - if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) - y.sendMessage(mcLocale.getString("Skills.SkullSplitterPlayer", new Object[] {player.getName()})); - } - PP.setSkillDATS(AbilityType.SKULL_SPLIITER, System.currentTimeMillis()+(ticks*1000)); - PP.setSkullSplitterMode(true); - } - if(!PP.getSkullSplitterMode() && !Skills.cooldownOver(player, (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown)){ - player.sendMessage(mcLocale.getString("Skills.TooTired") - +ChatColor.YELLOW+" ("+Skills.calculateTimeLeft(player, (PP.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown)+"s)"); - } - } - } - - public static void axeCriticalCheck(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx) +public class Axes +{ + public static void skullSplitterActivationCheck(Player player, PlayerProfile PPa) { - 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); - } - attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!"); - } - } - } + PPa.setAxePreparationMode(false); + + int ticks = 2; + int x = PPa.getSkillLevel(SkillType.AXES); + while(x >= 50){ + x-=50; + ticks++; + } + + if (!PPa.getSkullSplitterMode()) + { + if (Skills.cooldownOver(player, (PPa.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown)) + { + player.sendMessage(mcLocale.getString("Skills.SkullSplitterOn")); + for(Player y : player.getWorld().getPlayers()){ + if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) + y.sendMessage(mcLocale.getString("Skills.SkullSplitterPlayer", new Object[] {player.getName()})); + } + PPa.setSkillDATS(AbilityType.SKULL_SPLIITER, System.currentTimeMillis()+(ticks*1000)); + PPa.setSkullSplitterMode(true); + } + + else + player.sendMessage(mcLocale.getString("Skills.TooTired") + +ChatColor.YELLOW+" ("+Skills.calculateTimeLeft(player, (PPa.getSkillDATS(AbilityType.SKULL_SPLIITER)*1000), LoadProperties.skullSplitterCooldown)+"s)"); + } + } - public static void applyAoeDamage(Player attacker, EntityDamageByEntityEvent event, Plugin pluginx) + public static int axeCriticalCheck(Player attacker, int skillLevel, LivingEntity target, int damage, mcMMO pluginx) + { + if(target instanceof Wolf) + { + if (Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx)) + return damage; + } + + double random = Math.random() * 1000; + int newDamage = damage; + + if(skillLevel >= 750) + { + if(random <= 750) + { + if(target instanceof Player) + { + newDamage *= 1.5; + ((Player) target).sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!"); + } + else + newDamage *= 2; + attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!"); + } + } + else if(random <= skillLevel) + { + if(target instanceof Player) + { + newDamage *= 1.5; + ((Player) target).sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!"); + } + else + newDamage *= 2; + attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!"); + } + + return newDamage; + } + + 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 + 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))) - continue; - } - - //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--; - } - } - } - } + 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--; + } + } + else + { + LivingEntity nearbyLivingEntity = (LivingEntity) derp; + Combat.dealDamage(nearbyLivingEntity, dmgAmount, attacker); + targets--; + } + } + } } } diff --git a/src/main/java/com/gmail/nossr50/skills/Swords.java b/src/main/java/com/gmail/nossr50/skills/Swords.java index dc025f881..d3abb17f3 100644 --- a/src/main/java/com/gmail/nossr50/skills/Swords.java +++ b/src/main/java/com/gmail/nossr50/skills/Swords.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; @@ -35,219 +35,196 @@ import com.gmail.nossr50.party.Party; public class Swords { - public static void serratedStrikesActivationCheck(Player player){ - PlayerProfile PP = Users.getProfile(player); - if(m.isSwords(player.getItemInHand())) + public static void serratedStrikesActivationCheck(Player player, PlayerProfile PPa) + { + PPa.setSwordsPreparationMode(false); + + int ticks = 2; + int x = PPa.getSkillLevel(SkillType.SWORDS); + while(x >= 50) { - if(PP.getSwordsPreparationMode()) + x-=50; + ticks++; + } + + if(!PPa.getSerratedStrikesMode() && PPa.getSkillDATS(AbilityType.SERRATED_STRIKES) < System.currentTimeMillis()) + { + player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOn")); + for(Player y : player.getWorld().getPlayers()) { - PP.setSwordsPreparationMode(false); - } - int ticks = 2; - int x = PP.getSkillLevel(SkillType.SWORDS); - while(x >= 50) - { - x-=50; - ticks++; - } - - if(!PP.getSerratedStrikesMode() && PP.getSkillDATS(AbilityType.SERRATED_STRIKES) < System.currentTimeMillis()) - { - player.sendMessage(mcLocale.getString("Skills.SerratedStrikesOn")); - for(Player y : player.getWorld().getPlayers()) - { - if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) - y.sendMessage(mcLocale.getString("Skills.SerratedStrikesPlayer", new Object[] {player.getName()})); - } - PP.setSkillDATS(AbilityType.SERRATED_STRIKES, System.currentTimeMillis()+(ticks*1000)); - PP.setSerratedStrikesMode(true); - } - - } + if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) + y.sendMessage(mcLocale.getString("Skills.SerratedStrikesPlayer", new Object[] {player.getName()})); + } + PPa.setSkillDATS(AbilityType.SERRATED_STRIKES, System.currentTimeMillis()+(ticks*1000)); + PPa.setSerratedStrikesMode(true); + } } - 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; + } + + double random = Math.random() * 1000; + + if(skillLevel >= 750) + { + if(random <= 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(random <= skillLevel) + { + if(!(target instanceof Player)) + pluginx.misc.addToBleedQue(target); + 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; + + 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 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!"); - } + 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){continue;} - - if(x.getHealth() <= 0) - { - plugin.misc.addToBleedRemovalQue(x); - continue; - } - else - { + } + } + } + + 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){continue;} + + if(x.getHealth() <= 0) + { + 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..b374ef27f 100644 --- a/src/main/java/com/gmail/nossr50/skills/Taming.java +++ b/src/main/java/com/gmail/nossr50/skills/Taming.java @@ -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 507aa1cc5..c0ca8aaee 100644 --- a/src/main/java/com/gmail/nossr50/skills/Unarmed.java +++ b/src/main/java/com/gmail/nossr50/skills/Unarmed.java @@ -1,26 +1,24 @@ /* 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; import org.bukkit.Location; 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.config.LoadProperties; import com.gmail.nossr50.datatypes.AbilityType; @@ -28,93 +26,80 @@ import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.locale.mcLocale; -public class Unarmed { - public static void berserkActivationCheck(Player player) +public class Unarmed +{ + public static void berserkActivationCheck(Player player, PlayerProfile PPa) { - PlayerProfile PP = Users.getProfile(player); - if(player.getItemInHand().getTypeId() == 0) + PPa.setFistsPreparationMode(false); + + int ticks = 2; + int x = PPa.getSkillLevel(SkillType.UNARMED); + while(x >= 50) { - if(PP.getFistsPreparationMode()) - { - PP.setFistsPreparationMode(false); - } + x-=50; + ticks++; + } - int ticks = 2; - int x = PP.getSkillLevel(SkillType.UNARMED); - - while(x >= 50) - { - x-=50; - ticks++; - } - - if(!PP.getBerserkMode() && Skills.cooldownOver(player, PP.getSkillDATS(AbilityType.BERSERK), LoadProperties.berserkCooldown)) - { - player.sendMessage(mcLocale.getString("Skills.BerserkOn")); - for(Player y : player.getWorld().getPlayers()) - { - if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) - y.sendMessage(mcLocale.getString("Skills.BerserkPlayer", new Object[] {player.getName()})); - } - PP.setSkillDATS(AbilityType.BERSERK, System.currentTimeMillis()+(ticks*1000)); - System.out.println("getSkillDATS(): "+PP.getSkillDATS(AbilityType.BERSERK)); - PP.setBerserkMode(true); - } - } + if(!PPa.getBerserkMode() && Skills.cooldownOver(player, PPa.getSkillDATS(AbilityType.BERSERK), LoadProperties.berserkCooldown)) + { + player.sendMessage(mcLocale.getString("Skills.BerserkOn")); + for(Player y : player.getWorld().getPlayers()) + { + if(y != null && y != player && m.getDistance(player.getLocation(), y.getLocation()) < 10) + y.sendMessage(mcLocale.getString("Skills.BerserkPlayer", new Object[] {player.getName()})); + } + PPa.setSkillDATS(AbilityType.BERSERK, System.currentTimeMillis()+(ticks*1000)); + //System.out.println("getSkillDATS(): "+PPa.getSkillDATS(AbilityType.BERSERK)); + PPa.setBerserkMode(true); + } } - public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event) + public static int unarmedBonus(PlayerProfile PPa) { - PlayerProfile PPa = Users.getProfile(attacker); int bonus = 3; //Add 1 DMG for every 50 skill levels bonus += PPa.getSkillLevel(SkillType.UNARMED)/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) { - PlayerProfile PP = Users.getProfile(attacker); - if(attacker.getItemInHand().getTypeId() == 0) + double random = Math.random() * 4000; + + if(skillLevel >= 1000) { - if(PP.getSkillLevel(SkillType.UNARMED) >= 1000) - { - if(Math.random() * 4000 <= 1000) - { - Location loc = defender.getLocation(); - if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0) - { - defender.sendMessage(mcLocale.getString("Skills.Disarmed")); - ItemStack item = defender.getItemInHand(); - if(item != null) - { - m.mcDropItem(loc, item); - ItemStack itemx = null; - defender.setItemInHand(itemx); - } - } - } - } else { - if(Math.random() * 4000 <= PP.getSkillLevel(SkillType.UNARMED)){ - Location loc = defender.getLocation(); - if(defender.getItemInHand() != null && defender.getItemInHand().getTypeId() != 0) - { - defender.sendMessage(mcLocale.getString("Skills.Disarmed")); - ItemStack item = defender.getItemInHand(); - if(item != null) - { - m.mcDropItem(loc, item); - ItemStack itemx = null; - defender.setItemInHand(itemx); - } - } - } - } + if(random <= 1000) + { + Location loc = defender.getLocation(); + ItemStack itemInHand = defender.getItemInHand(); + + if(itemInHand != null && itemInHand.getTypeId() != 0) + { + defender.sendMessage(mcLocale.getString("Skills.Disarmed")); + m.mcDropItem(loc, itemInHand); + defender.setItemInHand(null); + } + } + } + else + { + if(random <= skillLevel) + { + Location loc = defender.getLocation(); + ItemStack itemInHand = defender.getItemInHand(); + + if(itemInHand != null && itemInHand.getTypeId() != 0) + { + defender.sendMessage(mcLocale.getString("Skills.Disarmed")); + m.mcDropItem(loc, itemInHand); + defender.setItemInHand(null); + } + } } } }