More reworking of Unarmed, renamed ArcheryBonusDamageEventHandler for

clarity's sake.
This commit is contained in:
GJ
2012-06-14 23:29:08 -04:00
parent 77b4aaa50d
commit 48dd537257
9 changed files with 96 additions and 149 deletions

View File

@ -0,0 +1,31 @@
package com.gmail.nossr50.skills.unarmed;
import org.bukkit.event.entity.EntityDamageEvent;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Misc;
public class DeflectEventHandler {
private UnarmedManager manager;
private EntityDamageEvent event;
protected int skillModifier;
protected DeflectEventHandler(UnarmedManager manager, EntityDamageEvent event) {
this.manager = manager;
this.event = event;
calculateSkillModifier();
}
protected void calculateSkillModifier() {
this.skillModifier = Misc.skillCheck(manager.getSkillLevel(), Unarmed.DEFLECT_MAX_BONUS_LEVEL);
}
protected void sendAbilityMessage() {
manager.getPlayer().sendMessage(LocaleLoader.getString("Combat.ArrowDeflect"));
}
protected void cancelEvent() {
event.setCancelled(true);
}
}

View File

@ -2,7 +2,6 @@ package com.gmail.nossr50.skills.unarmed;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.gmail.nossr50.util.Misc;

View File

@ -2,37 +2,15 @@ package com.gmail.nossr50.skills.unarmed;
import java.util.Random;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType;
public class Unarmed {
public static final int BONUS_DAMAGE_MAX_BONUS_MODIFIER = 8;
public static final int BONUS_DAMAGE_INCREASE_LEVEL = 50;
public static final int DEFLECT_MAX_BONUS_LEVEL = 1000;
public static final int DISARM_MAX_BONUS_LEVEL = 1000;
public static final int IRON_GRIP_MAX_BONUS_LEVEL = 1000;
private static Random random = new Random();
/**
* 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);
}
protected static Random getRandom() {
return random;
}

View File

@ -0,0 +1,32 @@
package com.gmail.nossr50.skills.unarmed;
import org.bukkit.event.entity.EntityDamageEvent;
public class UnarmedBonusDamageEventHandler {
private UnarmedManager manager;
private EntityDamageEvent event;
protected int damageBonus;
protected UnarmedBonusDamageEventHandler(UnarmedManager manager, EntityDamageEvent event) {
this.manager = manager;
this.event = event;
}
protected void calculateDamageBonus() {
int damageBonus = 3 + (manager.getSkillLevel() / Unarmed.BONUS_DAMAGE_INCREASE_LEVEL);
if (damageBonus > Unarmed.BONUS_DAMAGE_MAX_BONUS_MODIFIER) {
damageBonus = Unarmed.BONUS_DAMAGE_MAX_BONUS_MODIFIER;
}
this.damageBonus = damageBonus;
}
protected void modifyEventDamage() {
int damage = event.getDamage();
int unarmedBonus = (int) (damage + damageBonus);
event.setDamage(damage + unarmedBonus);
}
}

View File

@ -1,13 +1,10 @@
package com.gmail.nossr50.skills.unarmed;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent;
import com.gmail.nossr50.datatypes.PlayerProfile;
import com.gmail.nossr50.datatypes.SkillType;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.Users;
@ -39,7 +36,7 @@ public class UnarmedManager {
if (eventHandler.isHoldingItem()) {
eventHandler.calculateSkillModifier();
if (Unarmed.getRandom().nextInt(3000) <= eventHandler.skillModifier) {
if (Unarmed.getRandom().nextInt(3000) < eventHandler.skillModifier) {
if (!hasIronGrip(defender)) {
eventHandler.sendAbilityMessage();
eventHandler.handleDisarm();
@ -54,17 +51,35 @@ public class UnarmedManager {
* @param defender The defending player
* @param event The event to modify
*/
public void deflectCheck(Player defender, EntityDamageEvent event) {
if (!permissionsInstance.deflect(defender)) {
public void deflectCheck(EntityDamageEvent event) {
if (!permissionsInstance.deflect(player)) {
return;
}
if (Unarmed.getRandom().nextInt(2000) <= skillLevel) {
event.setCancelled(true);
defender.sendMessage(LocaleLoader.getString("Combat.ArrowDeflect"));
DeflectEventHandler eventHandler = new DeflectEventHandler(this, event);
if (Unarmed.getRandom().nextInt(2000) < eventHandler.skillModifier) {
eventHandler.cancelEvent();
eventHandler.sendAbilityMessage();
}
}
/**
* Handle Unarmed bonus damage.
*
* @param event The event to modify.
*/
public void bonusDamage(EntityDamageEvent event) {
if (!permissionsInstance.unarmedBonus(player)) {
return;
}
UnarmedBonusDamageEventHandler eventHandler = new UnarmedBonusDamageEventHandler(this, event);
eventHandler.calculateDamageBonus();
eventHandler.modifyEventDamage();
}
/**
* Check Iron Grip ability success
*
@ -76,7 +91,7 @@ public class UnarmedManager {
IronGripEventHandler eventHandler = new IronGripEventHandler(this, defender);
if (Unarmed.getRandom().nextInt(1000) <= eventHandler.skillModifier) {
if (Unarmed.getRandom().nextInt(1000) < eventHandler.skillModifier) {
eventHandler.sendAbilityMessages();
return true;
}