RollEventHandler.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.gmail.nossr50.skills.acrobatics;
  2. import org.bukkit.event.entity.EntityDamageEvent;
  3. import com.gmail.nossr50.datatypes.SkillType;
  4. import com.gmail.nossr50.locale.LocaleLoader;
  5. import com.gmail.nossr50.util.Misc;
  6. import com.gmail.nossr50.util.Skills;
  7. public class RollEventHandler extends AcrobaticsEventHandler{
  8. private AcrobaticsPermissionsHandler permHandler;
  9. private boolean isGraceful;
  10. private int damageThreshold;
  11. protected RollEventHandler(AcrobaticsManager manager, EntityDamageEvent event) {
  12. super(manager, event);
  13. this.permHandler = manager.getPermissionsHandler();
  14. isGracefulRoll();
  15. calculateSkillModifier();
  16. calculateModifiedDamage();
  17. calculateDamageThreshold();
  18. }
  19. protected void calculateSkillModifier() {
  20. int skillModifer = manager.getSkillLevel();
  21. if (isGraceful) {
  22. skillModifer = skillModifer * 2;
  23. }
  24. skillModifer = Misc.skillCheck(skillModifer, Acrobatics.ROLL_MAX_BONUS_LEVEL);
  25. this.skillModifier = skillModifer;
  26. }
  27. protected void calculateModifiedDamage() {
  28. int modifiedDamage = damage - damageThreshold;
  29. if (modifiedDamage < 0) {
  30. modifiedDamage = 0;
  31. }
  32. this.modifiedDamage = modifiedDamage;
  33. }
  34. protected void modifyEventDamage() {
  35. event.setDamage(modifiedDamage);
  36. if (event.getDamage() == 0) {
  37. event.setCancelled(true);
  38. }
  39. }
  40. protected void sendAbilityMessage() {
  41. if (isGraceful) {
  42. player.sendMessage(LocaleLoader.getString("Acrobatics.Ability.Proc"));
  43. }
  44. else {
  45. player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.Text"));
  46. }
  47. }
  48. protected void processXPGain(int xpGain) {
  49. if (permHandler.canGainXP()) {
  50. Skills.xpProcessing(player, manager.getProfile(), SkillType.ACROBATICS, xpGain);
  51. }
  52. }
  53. /**
  54. * Check if this is a graceful roll.
  55. */
  56. private void isGracefulRoll() {
  57. if (permHandler.canGracefulRoll()) {
  58. this.isGraceful = player.isSneaking();
  59. }
  60. else {
  61. this.isGraceful = false;
  62. }
  63. }
  64. /**
  65. * Calculate the damage threshold for this event.
  66. */
  67. private void calculateDamageThreshold() {
  68. int damageThreshold = 7;
  69. if (isGraceful) {
  70. damageThreshold = damageThreshold * 2;
  71. }
  72. this.damageThreshold = damageThreshold;
  73. }
  74. }