ArcheryManager.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package com.gmail.nossr50.skills.archery;
  2. import org.bukkit.entity.LivingEntity;
  3. import org.bukkit.entity.Player;
  4. import org.bukkit.event.entity.EntityDamageEvent;
  5. import com.gmail.nossr50.datatypes.PlayerProfile;
  6. import com.gmail.nossr50.datatypes.SkillType;
  7. import com.gmail.nossr50.util.Permissions;
  8. import com.gmail.nossr50.util.Users;
  9. public class ArcheryManager {
  10. private Player player;
  11. private PlayerProfile profile;
  12. private int skillLevel;
  13. public ArcheryManager (Player player) {
  14. this.player = player;
  15. this.profile = Users.getProfile(player);
  16. //Compatibility with Citizens, Citizens NPCs won't create a profile so we'll check for it here
  17. if(this.profile == null)
  18. return;
  19. this.skillLevel = profile.getSkillLevel(SkillType.ARCHERY);
  20. }
  21. /**
  22. * Track arrows fired for later retrieval.
  23. *
  24. * @param livingEntity Entity damaged by the arrow
  25. */
  26. public void trackArrows(LivingEntity livingEntity) {
  27. if(player == null)
  28. return;
  29. if (!Permissions.trackArrows(player)) {
  30. return;
  31. }
  32. ArrowTrackingEventHandler eventHandler = new ArrowTrackingEventHandler(this, livingEntity);
  33. int randomChance = 100;
  34. if (Permissions.luckyArchery(player)) {
  35. randomChance = (int) (randomChance * 0.75);
  36. }
  37. float chance = (float) (((double) Archery.ARROW_TRACKING_MAX_BONUS / (double) Archery.ARROW_TRACKING_MAX_BONUS_LEVEL) * skillLevel);
  38. if (chance > Archery.ARROW_TRACKING_MAX_BONUS) chance = Archery.ARROW_TRACKING_MAX_BONUS;
  39. if (chance > Archery.getRandom().nextInt(randomChance)) {
  40. eventHandler.addToTracker();
  41. }
  42. }
  43. /**
  44. * Check for Daze.
  45. *
  46. * @param defender Defending player
  47. * @param event The event to modify
  48. */
  49. public void dazeCheck(Player defender, EntityDamageEvent event) {
  50. if(player == null)
  51. return;
  52. if (!Permissions.daze(player)) {
  53. return;
  54. }
  55. DazeEventHandler eventHandler = new DazeEventHandler(this, event, defender);
  56. int randomChance = 100;
  57. if (Permissions.luckyArchery(player)) {
  58. randomChance = (int) (randomChance * 0.75);
  59. }
  60. float chance = (float) (((double) Archery.DAZE_MAX_BONUS / (double) Archery.DAZE_MAX_BONUS_LEVEL) * skillLevel);
  61. if (chance > Archery.DAZE_MAX_BONUS) chance = Archery.DAZE_MAX_BONUS;
  62. if (chance > Archery.getRandom().nextInt(randomChance)) {
  63. eventHandler.handleDazeEffect();
  64. eventHandler.sendAbilityMessages();
  65. }
  66. }
  67. /**
  68. * Handle archery bonus damage.
  69. *
  70. * @param event The event to modify.
  71. */
  72. public void bonusDamage(EntityDamageEvent event) {
  73. if(player == null)
  74. return;
  75. if (!Permissions.archeryBonus(player)) {
  76. return;
  77. }
  78. if (skillLevel >= Archery.BONUS_DAMAGE_INCREASE_LEVEL) {
  79. ArcheryBonusDamageEventHandler eventHandler = new ArcheryBonusDamageEventHandler(this, event);
  80. eventHandler.calculateDamageBonus();
  81. eventHandler.modifyEventDamage();
  82. }
  83. }
  84. protected int getSkillLevel() {
  85. return skillLevel;
  86. }
  87. protected Player getPlayer() {
  88. return player;
  89. }
  90. }