mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-24 14:16:45 +01:00
More optimization
This commit is contained in:
parent
9a7ea3b6d0
commit
87723bd06d
@ -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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with mcMMO. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package com.gmail.nossr50;
|
||||
|
||||
@ -58,17 +58,17 @@ 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);
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
//Add 1 DMG for every 50 skill levels
|
||||
int bonus = PP.getSkillLevel(SkillType.AXES) / 50;
|
||||
|
||||
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);
|
||||
}
|
||||
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);
|
||||
int dmgAmount = damage / 2;
|
||||
|
||||
//Setup minimum damage
|
||||
if(dmgAmount < 1)
|
||||
dmgAmount = 1;
|
||||
//Setup minimum damage
|
||||
if(dmgAmount < 1)
|
||||
dmgAmount = 1;
|
||||
|
||||
if(event.getEntity() instanceof LivingEntity)
|
||||
{
|
||||
LivingEntity x = (LivingEntity) event.getEntity();
|
||||
targets = m.getTier(attacker);
|
||||
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)
|
||||
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--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -275,14 +275,13 @@ 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)
|
||||
@ -294,18 +293,18 @@ public class Skills
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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(target instanceof Wolf)
|
||||
{
|
||||
if(Taming.isFriendlyWolf(attacker, (Wolf) target, pluginx))
|
||||
return;
|
||||
}
|
||||
|
||||
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(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**");
|
||||
}
|
||||
}
|
||||
}
|
||||
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--;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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 counterAttackChecks(EntityDamageByEntityEvent event)
|
||||
{
|
||||
//Don't want to counter attack stuff not alive
|
||||
public static void applySerratedStrikes(Player attacker, LivingEntity target, int damage, mcMMO pluginx)
|
||||
{
|
||||
int targets = 0;
|
||||
|
||||
if(!(event.getDamager() instanceof LivingEntity))
|
||||
return;
|
||||
int dmgAmount = damage / 4;
|
||||
|
||||
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!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//Setup minimum damage
|
||||
if(dmgAmount < 1)
|
||||
dmgAmount = 1;
|
||||
|
||||
public static void bleedSimulate(mcMMO plugin)
|
||||
{
|
||||
//Add items from Que list to BleedTrack list
|
||||
targets = m.getTier(attacker);
|
||||
|
||||
for(LivingEntity x : plugin.misc.bleedQue)
|
||||
{
|
||||
plugin.misc.bleedTracker.add(x);
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
//Clear list
|
||||
plugin.misc.bleedQue = new LivingEntity[plugin.misc.bleedQue.length];
|
||||
plugin.misc.bleedQuePos = 0;
|
||||
//Damage nearby LivingEntities
|
||||
if(derp instanceof LivingEntity && targets >= 1)
|
||||
{
|
||||
if(derp instanceof Player)
|
||||
{
|
||||
Player nearbyPlayer = (Player) derp;
|
||||
|
||||
//Cleanup any dead entities from the list
|
||||
for(LivingEntity x : plugin.misc.bleedRemovalQue)
|
||||
{
|
||||
plugin.misc.bleedTracker.remove(x);
|
||||
}
|
||||
if(nearbyPlayer.getName().equals(attacker.getName()))
|
||||
continue;
|
||||
|
||||
//Clear bleed removal list
|
||||
plugin.misc.bleedRemovalQue = new LivingEntity[plugin.misc.bleedRemovalQue.length];
|
||||
plugin.misc.bleedRemovalQuePos = 0;
|
||||
if(Users.getProfile(nearbyPlayer).getGodMode())
|
||||
continue;
|
||||
|
||||
//Bleed monsters/animals
|
||||
for(LivingEntity x : plugin.misc.bleedTracker)
|
||||
{
|
||||
if(x == null || x.isDead())
|
||||
{
|
||||
plugin.misc.addToBleedRemovalQue(x);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with mcMMO. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
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(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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user