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

@ -2,13 +2,13 @@ package com.gmail.nossr50.skills.archery;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
public class BonusDamageEventHandler { public class ArcheryBonusDamageEventHandler {
private ArcheryManager manager; private ArcheryManager manager;
private EntityDamageEvent event; private EntityDamageEvent event;
protected double damageBonusPercent; protected double damageBonusPercent;
protected BonusDamageEventHandler(ArcheryManager manager, EntityDamageEvent event) { protected ArcheryBonusDamageEventHandler(ArcheryManager manager, EntityDamageEvent event) {
this.manager = manager; this.manager = manager;
this.event = event; this.event = event;
} }

View File

@ -69,7 +69,7 @@ public class ArcheryManager {
} }
if (skillLevel >= Archery.BONUS_DAMAGE_INCREASE_LEVEL) { if (skillLevel >= Archery.BONUS_DAMAGE_INCREASE_LEVEL) {
BonusDamageEventHandler eventHandler = new BonusDamageEventHandler(this, event); ArcheryBonusDamageEventHandler eventHandler = new ArcheryBonusDamageEventHandler(this, event);
eventHandler.calculateDamageBonus(); eventHandler.calculateDamageBonus();
eventHandler.modifyEventDamage(); eventHandler.modifyEventDamage();

View File

@ -1,106 +0,0 @@
package com.gmail.nossr50.skills.combat;
import java.util.Random;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.ItemStack;
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;
public class Unarmed {
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);
}
/**
* Check for disarm.
*
* @param PPa Profile of the attacking player
* @param defender The defending player
*/
public static void disarmProcCheck(Player attacker, Player defender) {
final int MAX_BONUS_LEVEL = 1000;
PlayerProfile PPa = Users.getProfile(attacker);
int skillLevel = PPa.getSkillLevel(SkillType.UNARMED);
int skillCheck = Misc.skillCheck(skillLevel, MAX_BONUS_LEVEL);
ItemStack inHand = defender.getItemInHand();
if (!inHand.getType().equals(Material.AIR)) {
if (random.nextInt(3000) <= skillCheck && !ironGrip(defender, attacker)) {
defender.sendMessage(LocaleLoader.getString("Skills.Disarmed"));
Misc.dropItem(defender.getLocation(), inHand);
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 = Misc.skillCheck(skillLevel, MAX_BONUS_LEVEL);
if (random.nextInt(2000) <= skillCheck && Permissions.getInstance().deflect(defender)) {
event.setCancelled(true);
defender.sendMessage(LocaleLoader.getString("Combat.ArrowDeflect"));
}
}
/**
* Check Iron Grip ability success
*
* @param defender The defending player
* @param attacker The attacking player
* @return true if the defender was not disarmed, false otherwise
*/
private 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 = Misc.skillCheck(skillLevel, MAX_BONUS_LEVEL);
if (random.nextInt(1000) <= 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;
}
}
}

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.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.Misc;

View File

@ -2,37 +2,15 @@ package com.gmail.nossr50.skills.unarmed;
import java.util.Random; 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 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 DEFLECT_MAX_BONUS_LEVEL = 1000;
public static final int DISARM_MAX_BONUS_LEVEL = 1000; public static final int DISARM_MAX_BONUS_LEVEL = 1000;
public static final int IRON_GRIP_MAX_BONUS_LEVEL = 1000; public static final int IRON_GRIP_MAX_BONUS_LEVEL = 1000;
private static Random random = new Random(); 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() { protected static Random getRandom() {
return random; 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; package com.gmail.nossr50.skills.unarmed;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
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.LocaleLoader;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.Users; import com.gmail.nossr50.util.Users;
@ -39,7 +36,7 @@ public class UnarmedManager {
if (eventHandler.isHoldingItem()) { if (eventHandler.isHoldingItem()) {
eventHandler.calculateSkillModifier(); eventHandler.calculateSkillModifier();
if (Unarmed.getRandom().nextInt(3000) <= eventHandler.skillModifier) { if (Unarmed.getRandom().nextInt(3000) < eventHandler.skillModifier) {
if (!hasIronGrip(defender)) { if (!hasIronGrip(defender)) {
eventHandler.sendAbilityMessage(); eventHandler.sendAbilityMessage();
eventHandler.handleDisarm(); eventHandler.handleDisarm();
@ -54,17 +51,35 @@ public class UnarmedManager {
* @param defender The defending player * @param defender The defending player
* @param event The event to modify * @param event The event to modify
*/ */
public void deflectCheck(Player defender, EntityDamageEvent event) { public void deflectCheck(EntityDamageEvent event) {
if (!permissionsInstance.deflect(defender)) { if (!permissionsInstance.deflect(player)) {
return; return;
} }
if (Unarmed.getRandom().nextInt(2000) <= skillLevel) { DeflectEventHandler eventHandler = new DeflectEventHandler(this, event);
event.setCancelled(true);
defender.sendMessage(LocaleLoader.getString("Combat.ArrowDeflect")); 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 * Check Iron Grip ability success
* *
@ -76,7 +91,7 @@ public class UnarmedManager {
IronGripEventHandler eventHandler = new IronGripEventHandler(this, defender); IronGripEventHandler eventHandler = new IronGripEventHandler(this, defender);
if (Unarmed.getRandom().nextInt(1000) <= eventHandler.skillModifier) { if (Unarmed.getRandom().nextInt(1000) < eventHandler.skillModifier) {
eventHandler.sendAbilityMessages(); eventHandler.sendAbilityMessages();
return true; return true;
} }

View File

@ -34,7 +34,6 @@ import com.gmail.nossr50.skills.acrobatics.AcrobaticsManager;
import com.gmail.nossr50.skills.archery.ArcheryManager; import com.gmail.nossr50.skills.archery.ArcheryManager;
import com.gmail.nossr50.skills.combat.Axes; import com.gmail.nossr50.skills.combat.Axes;
import com.gmail.nossr50.skills.combat.Swords; import com.gmail.nossr50.skills.combat.Swords;
import com.gmail.nossr50.skills.combat.Unarmed;
import com.gmail.nossr50.skills.taming.TamingManager; import com.gmail.nossr50.skills.taming.TamingManager;
import com.gmail.nossr50.skills.unarmed.UnarmedManager; import com.gmail.nossr50.skills.unarmed.UnarmedManager;
@ -135,9 +134,7 @@ public class Combat {
UnarmedManager unarmedManager = new UnarmedManager(attacker); UnarmedManager unarmedManager = new UnarmedManager(attacker);
if (permInstance.unarmedBonus(attacker)) { unarmedManager.bonusDamage(event);
Unarmed.unarmedBonus(PPa, event);
}
if (PPa.getAbilityMode(AbilityType.BERSERK) && permInstance.berserk(attacker)) { if (PPa.getAbilityMode(AbilityType.BERSERK) && permInstance.berserk(attacker)) {
event.setDamage((int) (event.getDamage() * 1.5)); event.setDamage((int) (event.getDamage() * 1.5));
@ -254,7 +251,8 @@ public class Combat {
if (defender.getItemInHand().getType().equals(Material.AIR)) { if (defender.getItemInHand().getType().equals(Material.AIR)) {
if (configInstance.getUnarmedPVP()) { if (configInstance.getUnarmedPVP()) {
Unarmed.deflectCheck(defender, event); UnarmedManager unarmedManager = new UnarmedManager(defender);
unarmedManager.deflectCheck(event);
} }
} }
} }