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

101 lines
3.3 KiB
Java
Raw Normal View History

2012-01-09 20:00:13 +01:00
package com.gmail.nossr50.skills;
2012-03-26 17:04:17 +02:00
import java.util.Random;
import org.bukkit.ChatColor;
2012-03-01 17:34:56 +01:00
import org.bukkit.Material;
2012-01-09 20:00:13 +01:00
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack;
2012-03-17 17:52:48 +01:00
import com.gmail.nossr50.Users;
2012-01-09 20:00:13 +01:00
import com.gmail.nossr50.m;
import com.gmail.nossr50.mcPermissions;
2012-03-17 17:52:48 +01:00
import com.gmail.nossr50.datatypes.PlayerProfile;
2012-01-09 20:00:13 +01:00
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.mcLocale;
public class Unarmed {
2012-03-17 17:52:48 +01:00
2012-03-26 17:04:17 +02:00
private static Random random = new Random();
2012-03-17 17:52:48 +01:00
/**
* Apply bonus to Unarmed damage.
*
* @param PPa Profile of the attacking player
* @param event The event to modify
*/
public static void unarmedBonus(PlayerProfile PPa, EntityDamageByEntityEvent event) {
final int MAX_BONUS = 8;
int bonus = 3;
bonus += PPa.getSkillLevel(SkillType.UNARMED) / 50; //Add 1 DMG for every 50 skill levels
if (bonus > MAX_BONUS) {
bonus = MAX_BONUS;
}
event.setDamage(event.getDamage() + bonus);
}
/**
* Check for disarm.
*
* @param PPa Profile of the attacking player
* @param defender The defending player
*/
public static void disarmProcCheck(Player attacker, Player defender) {
2012-03-17 17:52:48 +01:00
final int MAX_BONUS_LEVEL = 1000;
PlayerProfile PPa = Users.getProfile(attacker);
int skillLevel = PPa.getSkillLevel(SkillType.UNARMED);
2012-03-17 17:52:48 +01:00
int skillCheck = m.skillCheck(skillLevel, MAX_BONUS_LEVEL);
ItemStack inHand = defender.getItemInHand();
2012-03-17 17:52:48 +01:00
if (!inHand.getType().equals(Material.AIR)) {
if (random.nextInt(3000) <= skillCheck && ironGrip(defender, attacker)) {
2012-03-17 17:52:48 +01:00
defender.sendMessage(mcLocale.getString("Skills.Disarmed"));
m.mcDropItem(defender.getLocation(), inHand);
2012-03-17 17:52:48 +01:00
defender.setItemInHand(new ItemStack(Material.AIR));
}
}
}
/**
* Check for arrow deflection.
*
* @param defender The defending player
* @param event The event to modify
*/
public static void deflectCheck(Player defender, EntityDamageByEntityEvent event) {
final int MAX_BONUS_LEVEL = 1000;
int skillLevel = Users.getProfile(defender).getSkillLevel(SkillType.UNARMED);
int skillCheck = m.skillCheck(skillLevel, MAX_BONUS_LEVEL);
2012-03-26 17:04:17 +02:00
if (random.nextInt(2000) <= skillCheck && mcPermissions.getInstance().deflect(defender)) {
event.setCancelled(true);
defender.sendMessage(mcLocale.getString("Combat.ArrowDeflect"));
}
}
public static boolean ironGrip(Player defender, Player attacker) {
final int MAX_BONUS_LEVEL = 1000;
PlayerProfile PPd = Users.getProfile(defender);
int skillLevel = PPd.getSkillLevel(SkillType.UNARMED);
int skillCheck = m.skillCheck(skillLevel, MAX_BONUS_LEVEL);
if (random.nextInt(3000) <= skillCheck) {
defender.sendMessage(ChatColor.GREEN + "Your iron grip kept you from being disarmed!"); //TODO: Use locale
attacker.sendMessage(ChatColor.RED + "Your opponent has an iron grip!"); //TODO: Use locale
return true;
}
else {
return false;
}
}
2012-03-17 17:52:48 +01:00
}