More optimization

This commit is contained in:
bm01 2012-02-26 17:36:11 +01:00
parent 9a7ea3b6d0
commit 87723bd06d
7 changed files with 359 additions and 399 deletions

View File

@ -1,18 +1,18 @@
/* /*
This file is part of mcMMO. This file is part of mcMMO.
mcMMO is free software: you can redistribute it and/or modify mcMMO is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
mcMMO is distributed in the hope that it will be useful, mcMMO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with mcMMO. If not, see <http://www.gnu.org/licenses/>. along with mcMMO. If not, see <http://www.gnu.org/licenses/>.
*/ */
package com.gmail.nossr50; package com.gmail.nossr50;
@ -48,7 +48,7 @@ public class Combat
Entity damager = event.getDamager(); Entity damager = event.getDamager();
LivingEntity target = (LivingEntity) event.getEntity(); LivingEntity target = (LivingEntity) event.getEntity();
int damage = event.getDamage(); int damage = event.getDamage();
/* /*
* PLAYER VERSUS ENTITIES * PLAYER VERSUS ENTITIES
*/ */
@ -58,18 +58,18 @@ public class Combat
ItemStack itemInHand = attacker.getItemInHand(); ItemStack itemInHand = attacker.getItemInHand();
PlayerProfile PPa = Users.getProfile(attacker); PlayerProfile PPa = Users.getProfile(attacker);
//If there are any abilities to activate
combatAbilityChecks(attacker, PPa);
//Damage modifiers and proc checks //Damage modifiers and proc checks
if(m.isSwords(itemInHand) && mcPermissions.getInstance().swords(attacker)) if(m.isSwords(itemInHand) && mcPermissions.getInstance().swords(attacker))
{ {
if(PPa.getSwordsPreparationMode())
Skills.abilityCheck(attacker, PPa, SkillType.SWORDS);
if(!pluginx.misc.bleedTracker.contains(target)) //Bleed 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()) if (!(event instanceof FakeEntityDamageByEntityEvent) && PPa.getSerratedStrikesMode())
Swords.applySerratedStrikes(attacker, event, pluginx); Swords.applySerratedStrikes(attacker, target, damage, pluginx);
if(target instanceof Player) if(target instanceof Player)
PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.SWORDS); PvPExperienceGain(attacker, PPa, (Player) target, damage, SkillType.SWORDS);
else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId())) else if(!pluginx.misc.mobSpawnerList.contains(target.getEntityId()))
@ -77,35 +77,41 @@ public class Combat
} }
else if(m.isAxes(itemInHand) && mcPermissions.getInstance().axes(attacker)) 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 //Impact
if(event.getEntity() instanceof LivingEntity) Axes.impact(attacker, target);
Axes.impact(attacker, (LivingEntity)event.getEntity());
if (!(event instanceof FakeEntityDamageByEntityEvent) && PPa.getSkullSplitterMode()) if (!(event instanceof FakeEntityDamageByEntityEvent) && PPa.getSkullSplitterMode())
Axes.applyAoeDamage(attacker, event, pluginx); Axes.applyAoeDamage(attacker, target, damage, pluginx);
if(target instanceof Player) 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())) 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 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()) if(PPa.getBerserkMode())
event.setDamage(event.getDamage() + (event.getDamage() / 2)); damage *= 1.5;
if(target instanceof Player) if(target instanceof Player)
Unarmed.disarmProcCheck(attacker, (Player) target); //Disarm Unarmed.disarmProcCheck(attacker, PPa.getSkillLevel(SkillType.UNARMED), (Player) target); //Disarm
if(target instanceof Player) 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())) 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. //Player use bone on wolf.
@ -116,6 +122,7 @@ public class Combat
if(itemInHand.getTypeId() == 352 && mcPermissions.getInstance().taming(attacker)) if(itemInHand.getTypeId() == 352 && mcPermissions.getInstance().taming(attacker))
{ {
event.setCancelled(true); event.setCancelled(true);
if(wolf.isTamed()) if(wolf.isTamed())
attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+ attacker.sendMessage(mcLocale.getString("Combat.BeastLore")+" "+
mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(wolf)})+" "+ mcLocale.getString("Combat.BeastLoreOwner", new Object[] {Taming.getOwnerName(wolf)})+" "+
@ -125,6 +132,8 @@ public class Combat
mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {wolf.getHealth()})); mcLocale.getString("Combat.BeastLoreHealthWolf", new Object[] {wolf.getHealth()}));
} }
} }
event.setDamage(damage);
} }
/* /*
@ -170,7 +179,7 @@ public class Combat
Swords.counterAttackChecks(event); Swords.counterAttackChecks(event);
Acrobatics.dodgeChecks(event); Acrobatics.dodgeChecks(event);
} }
/* /*
* DEFENSIVE CHECKS FOR WOLVES * 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) public static void archeryCheck(EntityDamageByEntityEvent event, mcMMO pluginx)
{ {
Arrow arrow = (Arrow)event.getDamager(); Arrow arrow = (Arrow)event.getDamager();
@ -322,7 +320,6 @@ public class Combat
EntityDamageEvent ede = (EntityDamageByEntityEvent) new FakeEntityDamageByEntityEvent(attacker, target, EntityDamageEvent.DamageCause.ENTITY_ATTACK, dmg); EntityDamageEvent ede = (EntityDamageByEntityEvent) new FakeEntityDamageByEntityEvent(attacker, target, EntityDamageEvent.DamageCause.ENTITY_ATTACK, dmg);
Bukkit.getPluginManager().callEvent(ede); Bukkit.getPluginManager().callEvent(ede);
if(ede.isCancelled()) return; if(ede.isCancelled()) return;
target.damage(ede.getDamage()); target.damage(ede.getDamage());
} else { } else {
target.damage(dmg); target.damage(dmg);

View File

@ -144,7 +144,7 @@ public class mcBlockListener implements Listener
//Green Terra //Green Terra
if(PP.getHoePreparationMode() && mcPermissions.getInstance().herbalismAbility(player) && ((id == 59 && block.getData() == (byte) 0x07) || Herbalism.canBeGreenTerra(block))) 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 //Wheat && Triple drops
if(PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block)) if(PP.getGreenTerraMode() && Herbalism.canBeGreenTerra(block))
@ -220,17 +220,17 @@ public class mcBlockListener implements Listener
if(m.abilityBlockCheck(block)) if(m.abilityBlockCheck(block))
{ {
if(PP.getHoePreparationMode() && Herbalism.canBeGreenTerra(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)) 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)) if(PP.getPickaxePreparationMode() && Mining.canBeSuperBroken(block))
Skills.abilityCheck(player, SkillType.MINING); Skills.abilityCheck(player, PP, SkillType.MINING);
if(PP.getShovelPreparationMode() && Excavation.canBeGigaDrillBroken(block)) 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)) if(PP.getFistsPreparationMode() && (Excavation.canBeGigaDrillBroken(block) || id == 78))
Skills.abilityCheck(player, SkillType.UNARMED); Skills.abilityCheck(player, PP, SkillType.UNARMED);
/* /*
* TREE FELLER STUFF * TREE FELLER STUFF

View File

@ -22,76 +22,67 @@ import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Wolf; import org.bukkit.entity.Wolf;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import com.gmail.nossr50.Combat; import com.gmail.nossr50.Combat;
import com.gmail.nossr50.Users; import com.gmail.nossr50.Users;
import com.gmail.nossr50.m; 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.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.locale.mcLocale;
import com.gmail.nossr50.party.Party; import com.gmail.nossr50.party.Party;
public class Axes { public class Axes
public static void axesBonus(Player attacker, EntityDamageByEntityEvent event) {
{ public static int axesBonus(Player attacker, PlayerProfile PP)
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)
{ {
Entity x = event.getEntity(); //Add 1 DMG for every 50 skill levels
int bonus = PP.getSkillLevel(SkillType.AXES) / 50;
if(x instanceof Wolf){
Wolf wolf = (Wolf)x; if(bonus > 4)
if(Taming.getOwner(wolf, pluginx) != null) bonus = 4;
{
if(Taming.getOwner(wolf, pluginx) == attacker) return bonus;
return; }
if(Party.getInstance().inSameParty(attacker, Taming.getOwner(wolf, pluginx)))
return; public static double axeCriticalBonus(Player attacker, int skillLevel, LivingEntity target, mcMMO pluginx)
} {
} if(target instanceof Wolf)
PlayerProfile PPa = Users.getProfile(attacker); {
if(m.isAxes(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){ if(Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx))
if(PPa.getSkillLevel(SkillType.AXES) >= 750){ return 1.0;
if(Math.random() * 1000 <= 750 && !x.isDead()){ }
if(x instanceof Player){
int damage = (event.getDamage() * 2) - (event.getDamage() / 2); double criticalBonus = 0.0;
event.setDamage(damage);
Player player = (Player)x; if(skillLevel >= 750)
player.sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!"); {
} if(Math.random() * 1000 <= 750)
else { {
int damage = event.getDamage() * 2; if(target instanceof Player)
event.setDamage(damage); {
} criticalBonus = 1.5;
attacker.sendMessage(ChatColor.RED+"CRITICAL HIT!"); ((Player) target).sendMessage(ChatColor.DARK_RED + "You were CRITICALLY hit!");
} }
} else if(Math.random() * 1000 <= PPa.getSkillLevel(SkillType.AXES) && !x.isDead()){ else
if(x instanceof Player){ criticalBonus = 2.0;
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!"); 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) public static void impact(Player attacker, LivingEntity target)
{ {
@ -146,68 +137,60 @@ public class Axes {
return false; 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 targets = 0;
int dmgAmount = (event.getDamage()/2); int dmgAmount = damage / 2;
//Setup minimum damage //Setup minimum damage
if(dmgAmount < 1) if(dmgAmount < 1)
dmgAmount = 1; dmgAmount = 1;
if(event.getEntity() instanceof LivingEntity) targets = m.getTier(attacker);
{
LivingEntity x = (LivingEntity) event.getEntity(); for(Entity derp : target.getNearbyEntities(2.5, 2.5, 2.5))
targets = m.getTier(attacker); {
//Make sure the Wolf is not friendly
for(Entity derp : x.getNearbyEntities(2.5, 2.5, 2.5)) if(derp instanceof Wolf)
{ {
//Make sure the Wolf is not friendly if (Taming.isFriendlyWolf(attacker, (Wolf) derp, pluginx))
if(derp instanceof Wolf) continue;
{ }
Wolf hurrDurr = (Wolf)derp;
if(Taming.getOwner(hurrDurr, pluginx) == attacker) //Damage nearby LivingEntities
else if(derp instanceof LivingEntity && targets >= 1)
{
if(derp instanceof Player)
{
Player nearbyPlayer = (Player) derp;
if(Users.getProfile(nearbyPlayer).getGodMode())
continue; continue;
if(Party.getInstance().inSameParty(attacker, Taming.getOwner(hurrDurr, pluginx)))
if(nearbyPlayer.getName().equals(attacker.getName()))
continue; 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
//Damage nearby LivingEntities {
if(derp instanceof LivingEntity && targets >= 1) LivingEntity nearbyLivingEntity = (LivingEntity) derp;
{ Combat.dealDamage(nearbyLivingEntity, dmgAmount, attacker);
if(derp instanceof Player) targets--;
{ }
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--;
}
}
}
}
} }
} }

View File

@ -275,15 +275,14 @@ public class Skills
* @param player The player activating the ability * @param player The player activating the ability
* @param type The skill the ability is based on * @param type The skill the ability is based on
*/ */
public static void abilityCheck(Player player, SkillType type) public static void abilityCheck(Player player, PlayerProfile PP, SkillType type)
{ {
PlayerProfile PP = Users.getProfile(player); AbilityType ability = type.getAbility();
AbilityType ability = type.getAbility(); if(type.getTool().inHand(player.getItemInHand()))
if(type.getTool().inHand(player.getItemInHand())) {
{ if(type.getTool().getToolMode(PP))
if(type.getTool().getToolMode(PP)) type.getTool().setToolMode(PP, false);
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 //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) if(type == SkillType.WOODCUTTING || type == SkillType.AXES)
{ {
@ -293,19 +292,19 @@ public class Skills
return; return;
} }
} }
int ticks = 2 + (PP.getSkillLevel(type) / 50); int ticks = 2 + (PP.getSkillLevel(type) / 50);
if(!ability.getMode(PP) && cooldownOver(player, PP.getSkillDATS(ability), ability.getCooldown())) if(!ability.getMode(PP) && cooldownOver(player, PP.getSkillDATS(ability), ability.getCooldown()))
{ {
player.sendMessage(ability.getAbilityOn()); player.sendMessage(ability.getAbilityOn());
for(Player y : player.getWorld().getPlayers()) for(Player y : player.getWorld().getPlayers())
{ {
if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10)) if(y != player && m.isNear(player.getLocation(), y.getLocation(), 10))
y.sendMessage(ability.getAbilityPlayer(player)); y.sendMessage(ability.getAbilityPlayer(player));
} }
PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks*1000)); PP.setSkillDATS(ability, System.currentTimeMillis()+(ticks*1000));
ability.setMode(PP, true); ability.setMode(PP, true);
} }
} }
} }
} }

View File

@ -33,186 +33,165 @@ import com.gmail.nossr50.party.Party;
public class Swords 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(target instanceof Wolf)
{
if(x instanceof Wolf) if(Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx))
{ return;
Wolf wolf = (Wolf)x; }
if(Taming.getOwner(wolf, pluginx) != null)
{ if(skillLevel >= 750)
if(Taming.getOwner(wolf, pluginx) == attacker) {
return; if(Math.random() * 1000 <= 750)
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(Math.random() * 1000 <= 750) if(!(target instanceof Player))
{ pluginx.misc.addToBleedQue(target);
if(!(x instanceof Player)) else if(target instanceof Player)
pluginx.misc.addToBleedQue(x); Users.getProfile((Player) target).addBleedTicks(3);
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);
}
attacker.sendMessage(ChatColor.GREEN+"**ENEMY BLEEDING**"); 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) public static void applySerratedStrikes(Player attacker, LivingEntity target, int damage, mcMMO pluginx)
{ {
//Don't want to counter attack stuff not alive int targets = 0;
if(!(event.getDamager() instanceof LivingEntity)) int dmgAmount = damage / 4;
return;
//Setup minimum damage
if(event instanceof EntityDamageByEntityEvent) if(dmgAmount < 1)
{ dmgAmount = 1;
Entity f = ((EntityDamageByEntityEvent) event).getDamager();
if(event.getEntity() instanceof Player) targets = m.getTier(attacker);
{
Player defender = (Player)event.getEntity(); for(Entity derp : target.getNearbyEntities(2.5, 2.5, 2.5))
PlayerProfile PPd = Users.getProfile(defender); {
if(m.isSwords(defender.getItemInHand()) && mcPermissions.getInstance().swords(defender)) //Make sure the Wolf is not friendly
{ if(derp instanceof Wolf)
if(PPd.getSkillLevel(SkillType.SWORDS) >= 600) {
{ if (Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx))
if(Math.random() * 2000 <= 600) continue;
{ }
Combat.dealDamage((LivingEntity) f, event.getDamage() / 2);
defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**"); //Damage nearby LivingEntities
if(f instanceof Player) if(derp instanceof LivingEntity && targets >= 1)
((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!"); {
} if(derp instanceof Player)
} {
else if (Math.random() * 2000 <= PPd.getSkillLevel(SkillType.SWORDS)) Player nearbyPlayer = (Player) derp;
{
Combat.dealDamage((LivingEntity) f, event.getDamage() / 2); if(nearbyPlayer.getName().equals(attacker.getName()))
defender.sendMessage(ChatColor.GREEN+"**COUNTER-ATTACKED**"); continue;
if(f instanceof Player)
((Player) f).sendMessage(ChatColor.DARK_RED+"Hit with counterattack!"); if(Users.getProfile(nearbyPlayer).getGodMode())
} continue;
}
} if(Party.getInstance().inSameParty(attacker, nearbyPlayer))
} continue;
}
if(targets >= 1 && nearbyPlayer.getWorld().getPVP())
public static void bleedSimulate(mcMMO plugin) {
{ Combat.dealDamage(nearbyPlayer, dmgAmount, attacker);
//Add items from Que list to BleedTrack list nearbyPlayer.sendMessage(ChatColor.DARK_RED+"Struck by Serrated Strikes!");
Users.getProfile(nearbyPlayer).addBleedTicks(5);
for(LivingEntity x : plugin.misc.bleedQue) targets--;
{ }
plugin.misc.bleedTracker.add(x); }
} else
{
//Clear list LivingEntity neabyLivingEntity = (LivingEntity) derp;
plugin.misc.bleedQue = new LivingEntity[plugin.misc.bleedQue.length];
plugin.misc.bleedQuePos = 0; if(!pluginx.misc.bleedTracker.contains(neabyLivingEntity))
pluginx.misc.addToBleedQue(neabyLivingEntity);
//Cleanup any dead entities from the list
for(LivingEntity x : plugin.misc.bleedRemovalQue) Combat.dealDamage(neabyLivingEntity, dmgAmount, attacker);
{ targets--;
plugin.misc.bleedTracker.remove(x); }
} }
}
//Clear bleed removal list }
plugin.misc.bleedRemovalQue = new LivingEntity[plugin.misc.bleedRemovalQue.length];
plugin.misc.bleedRemovalQuePos = 0; public static void counterAttackChecks(EntityDamageByEntityEvent event)
{
//Bleed monsters/animals //Don't want to counter attack stuff not alive
for(LivingEntity x : plugin.misc.bleedTracker)
{ if(!(event.getDamager() instanceof LivingEntity))
if(x == null || x.isDead()) return;
{
plugin.misc.addToBleedRemovalQue(x); if(event instanceof EntityDamageByEntityEvent)
continue; {
} Entity f = ((EntityDamageByEntityEvent) event).getDamager();
else 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); Combat.dealDamage(x, 2);
} }
} }
}
} }

View File

@ -1,18 +1,18 @@
/* /*
This file is part of mcMMO. This file is part of mcMMO.
mcMMO is free software: you can redistribute it and/or modify mcMMO is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
mcMMO is distributed in the hope that it will be useful, mcMMO is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with mcMMO. If not, see <http://www.gnu.org/licenses/>. along with mcMMO. If not, see <http://www.gnu.org/licenses/>.
*/ */
package com.gmail.nossr50.skills; 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.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.locale.mcLocale;
import com.gmail.nossr50.party.Party;
public class Taming public class Taming
{ {
@ -169,4 +170,11 @@ public class Taming
if(cause == DamageCause.FIRE_TICK) if(cause == DamageCause.FIRE_TICK)
event.getEntity().setFireTicks(0); 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;
}
} }

View File

@ -18,53 +18,47 @@ package com.gmail.nossr50.skills;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import com.gmail.nossr50.Users;
import com.gmail.nossr50.m; import com.gmail.nossr50.m;
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale; import com.gmail.nossr50.locale.mcLocale;
public class Unarmed { public class Unarmed
{
public static void unarmedBonus(Player attacker, EntityDamageByEntityEvent event) public static int unarmedBonus(int skillLevel)
{ {
int bonus = 3;
//Add 1 DMG for every 50 skill levels //Add 1 DMG for every 50 skill levels
bonus += Users.getProfile(attacker).getSkillLevel(SkillType.UNARMED)/50; int bonus = skillLevel / 50;
if(bonus > 8) if(bonus > 8)
bonus = 8; bonus = 8;
event.setDamage(event.getDamage() + bonus); 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(defender.getItemInHand() != null && defender.getItemInHand().getType() != Material.AIR)
{ {
if(skillLevel >= 1000) if(skillLevel >= 1000)
{ {
if(Math.random() * 3000 <= 1000) if(Math.random() * 3000 <= 1000)
{ {
ItemStack item = defender.getItemInHand(); ItemStack item = defender.getItemInHand();
defender.sendMessage(mcLocale.getString("Skills.Disarmed")); defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
m.mcDropItem(defender.getLocation(), item); m.mcDropItem(defender.getLocation(), item);
defender.setItemInHand(null); defender.setItemInHand(null);
} }
} }
else else
{ {
if(Math.random() * 3000 <= skillLevel) if(Math.random() * 3000 <= skillLevel)
{ {
ItemStack item = defender.getItemInHand(); ItemStack item = defender.getItemInHand();
defender.sendMessage(mcLocale.getString("Skills.Disarmed")); defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
m.mcDropItem(defender.getLocation(), item); m.mcDropItem(defender.getLocation(), item);
defender.setItemInHand(null); defender.setItemInHand(null);
} }
} }
} }
} }
} }