mcMMO/src/main/java/com/gmail/nossr50/skills/Axes.java

119 lines
4.2 KiB
Java
Raw Normal View History

2012-01-09 20:00:13 +01:00
package com.gmail.nossr50.skills;
import org.bukkit.Material;
2012-01-09 20:00:13 +01:00
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 com.gmail.nossr50.ItemChecks;
2012-01-09 20:00:13 +01:00
import com.gmail.nossr50.Users;
import com.gmail.nossr50.mcPermissions;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale;
2012-01-09 20:00:13 +01:00
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)
2012-01-09 20:00:13 +01:00
{
Entity x = event.getEntity();
2012-01-09 20:00:13 +01:00
if(x instanceof Wolf){
Wolf wolf = (Wolf)x;
2012-03-02 19:55:23 +01:00
if(wolf.getOwner() instanceof Player)
2012-01-09 20:00:13 +01:00
{
2012-03-02 19:55:23 +01:00
Player owner = (Player) wolf.getOwner();
if(owner == attacker)
2012-01-09 20:00:13 +01:00
return;
2012-03-02 19:55:23 +01:00
if(Party.getInstance().inSameParty(attacker, owner))
2012-01-09 20:00:13 +01:00
return;
}
}
PlayerProfile PPa = Users.getProfile(attacker);
if(ItemChecks.isAxe(attacker.getItemInHand()) && mcPermissions.getInstance().axes(attacker)){
2012-01-09 20:00:13 +01:00
if(PPa.getSkillLevel(SkillType.AXES) >= 750){
if(Math.random() * 2000 <= 750 && !x.isDead()){
2012-01-09 20:00:13 +01:00
if(x instanceof Player){
int damage = (event.getDamage() * 2) - (event.getDamage() / 2);
event.setDamage(damage);
2012-01-09 20:00:13 +01:00
Player player = (Player)x;
2012-03-03 20:48:40 +01:00
player.sendMessage(mcLocale.getString("Axes.HitCritically"));
2012-01-09 20:00:13 +01:00
}
else {
int damage = event.getDamage() * 2;
event.setDamage(damage);
2012-01-09 20:00:13 +01:00
}
2012-03-03 20:48:40 +01:00
attacker.sendMessage(mcLocale.getString("Axes.CriticalHit"));
2012-01-09 20:00:13 +01:00
}
} else if(Math.random() * 2000 <= PPa.getSkillLevel(SkillType.AXES) && !x.isDead()){
2012-01-09 20:00:13 +01:00
if(x instanceof Player){
int damage = (event.getDamage() * 2) - (event.getDamage() / 2);
event.setDamage(damage);
2012-01-09 20:00:13 +01:00
Player player = (Player)x;
2012-03-03 20:48:40 +01:00
player.sendMessage(mcLocale.getString("Axes.HitCritically"));
2012-01-09 20:00:13 +01:00
}
else {
int damage = event.getDamage() * 2;
event.setDamage(damage);
2012-01-09 20:00:13 +01:00
}
2012-03-03 20:48:40 +01:00
attacker.sendMessage(mcLocale.getString("Axes.CriticalHit"));
2012-01-09 20:00:13 +01:00
}
}
}
public static void impact(Player attacker, LivingEntity target, EntityDamageByEntityEvent event)
{
2012-02-29 22:19:22 +01:00
//TODO: Finish this skill, the idea is you will greatly damage an opponents armor and when they are armor less you have a proc that will stun them and deal additional damage.
if(target instanceof Player)
{
Player targetPlayer = (Player) target;
int emptySlots = 0;
short durDmg = 5; //Start with 5 durability dmg
durDmg+=Users.getProfile(attacker).getSkillLevel(SkillType.AXES)/30; //Every 30 Skill Levels you gain 1 durability dmg
for(ItemStack x : targetPlayer.getInventory().getArmorContents())
{
if(x.getType() == Material.AIR)
{
emptySlots++;
} else {
x.setDurability((short) (x.getDurability()+durDmg)); //Damage armor piece
}
}
if(emptySlots == 4)
applyImpact(attacker, target, event);
}
2012-03-02 23:19:12 +01:00
else
//Since mobs are technically unarmored this will always trigger
applyImpact(attacker, target, event);
}
public static void applyImpact(Player attacker, LivingEntity target, EntityDamageByEntityEvent event)
{
if(Math.random() * 100 > 75)
{
event.setDamage(event.getDamage()+2);
target.setVelocity(attacker.getLocation().getDirection().normalize().multiply(1.5D));
2012-03-02 23:19:12 +01:00
attacker.sendMessage(mcLocale.getString("Axes.GreaterImpactOnEnemy"));
}
}
2012-01-09 20:00:13 +01:00
}