ArcheryManager.java 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package com.gmail.nossr50.skills.archery;
  2. import org.bukkit.Location;
  3. import org.bukkit.entity.LivingEntity;
  4. import org.bukkit.entity.Player;
  5. import org.bukkit.event.entity.EntityDamageEvent;
  6. import com.gmail.nossr50.datatypes.McMMOPlayer;
  7. import com.gmail.nossr50.skills.SkillManager;
  8. import com.gmail.nossr50.skills.utilities.SkillType;
  9. import com.gmail.nossr50.util.Misc;
  10. import com.gmail.nossr50.util.Permissions;
  11. public class ArcheryManager extends SkillManager {
  12. public ArcheryManager (McMMOPlayer mcMMOPlayer) {
  13. super(mcMMOPlayer, SkillType.ARCHERY);
  14. }
  15. public void distanceXpBonus(LivingEntity target) {
  16. Player player = mcMMOPlayer.getPlayer();
  17. Location shooterLocation = player.getLocation();
  18. Location targetLocation = target.getLocation();
  19. if (!shooterLocation.getWorld().equals(targetLocation.getWorld())) {
  20. return;
  21. }
  22. double squaredDistance = shooterLocation.distanceSquared(targetLocation);
  23. // Cap distance at 100^2 to prevent teleport exploit.
  24. // TODO: Better way to handle this would be great...
  25. if (squaredDistance > 10000) {
  26. squaredDistance = 10000;
  27. }
  28. int bonusXp = (int) (squaredDistance * Archery.distanceXpModifer);
  29. mcMMOPlayer.beginXpGain(SkillType.ARCHERY, bonusXp);
  30. }
  31. /**
  32. * Track arrows fired for later retrieval.
  33. *
  34. * @param livingEntity Entity damaged by the arrow
  35. */
  36. public void trackArrows(LivingEntity livingEntity) {
  37. ArrowTrackingEventHandler eventHandler = new ArrowTrackingEventHandler(this, livingEntity);
  38. double chance = (Archery.retrieveMaxChance / Archery.retrieveMaxBonusLevel) * eventHandler.skillModifier;
  39. if (chance > Misc.getRandom().nextInt(activationChance)) {
  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. DazeEventHandler eventHandler = new DazeEventHandler(this, event, defender);
  51. double chance = (Archery.dazeMaxBonus / Archery.dazeMaxBonusLevel) * eventHandler.skillModifier;
  52. if (chance > Misc.getRandom().nextInt(activationChance)) {
  53. eventHandler.handleDazeEffect();
  54. eventHandler.sendAbilityMessages();
  55. }
  56. }
  57. /**
  58. * Handle archery bonus damage.
  59. *
  60. * @param event The event to modify.
  61. */
  62. public void skillShot(EntityDamageEvent event) {
  63. if (getSkillLevel() >= Archery.skillShotIncreaseLevel && Permissions.bonusDamage(mcMMOPlayer.getPlayer(), skill)) {
  64. SkillShotEventHandler eventHandler = new SkillShotEventHandler(this, event);
  65. eventHandler.calculateDamageBonus();
  66. eventHandler.modifyEventDamage();
  67. }
  68. }
  69. }