2
0

Acrobatics.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package com.gmail.nossr50.skills;
  2. import org.bukkit.entity.Player;
  3. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  4. import org.bukkit.event.entity.EntityDamageEvent;
  5. import com.gmail.nossr50.Users;
  6. import com.gmail.nossr50.m;
  7. import com.gmail.nossr50.mcPermissions;
  8. import com.gmail.nossr50.datatypes.PlayerProfile;
  9. import com.gmail.nossr50.datatypes.SkillType;
  10. import com.gmail.nossr50.locale.mcLocale;
  11. import com.gmail.nossr50.party.Party;
  12. public class Acrobatics {
  13. /**
  14. * Check for fall damage reduction.
  15. *
  16. * @param player The player whose fall damage to modify
  17. * @param event The event to check
  18. */
  19. public static void acrobaticsCheck(Player player, EntityDamageEvent event) {
  20. final int ROLL_XP_MODIFIER = 80;
  21. final int FALL_XP_MODIFIER = 120;
  22. final int MAX_BONUS_LEVEL = 1000;
  23. PlayerProfile PP = Users.getProfile(player);
  24. int acrovar = PP.getSkillLevel(SkillType.ACROBATICS);
  25. boolean gracefulRoll = player.isSneaking();
  26. int damage = event.getDamage();
  27. int health = player.getHealth();
  28. if (!mcPermissions.getInstance().gracefulRoll(player)) {
  29. gracefulRoll = false;
  30. }
  31. if (gracefulRoll) {
  32. acrovar = acrovar * 2;
  33. }
  34. if ((acrovar > MAX_BONUS_LEVEL || Math.random() * 1000 <= acrovar) && mcPermissions.getInstance().roll(player)) {
  35. int threshold = 7;
  36. if (gracefulRoll) {
  37. threshold = threshold * 2;
  38. }
  39. int newDamage = damage - threshold;
  40. if (newDamage < 0) {
  41. newDamage = 0;
  42. }
  43. /* Check for death */
  44. if (health - damage >= 1) {
  45. PP.addXP(SkillType.ACROBATICS, damage * ROLL_XP_MODIFIER, player);
  46. Skills.XpCheckSkill(SkillType.ACROBATICS, player);
  47. event.setDamage(newDamage);
  48. if (event.getDamage() <= 0) {
  49. event.setCancelled(true);
  50. }
  51. if (gracefulRoll) {
  52. player.sendMessage(mcLocale.getString("Acrobatics.GracefulRoll"));
  53. }
  54. else {
  55. player.sendMessage(mcLocale.getString("Acrobatics.Roll"));
  56. }
  57. }
  58. }
  59. else if (health - damage >= 1) {
  60. PP.addXP(SkillType.ACROBATICS, event.getDamage() * FALL_XP_MODIFIER, player);
  61. Skills.XpCheckSkill(SkillType.ACROBATICS, player);
  62. }
  63. }
  64. /**
  65. * Check for dodge damage reduction.
  66. *
  67. * @param event The event to check
  68. */
  69. public static void dodgeChecks(EntityDamageByEntityEvent event) {
  70. final int DODGE_MODIFIER = 120;
  71. final int MAX_BONUS_LEVEL = 800;
  72. Player defender = (Player) event.getEntity();
  73. PlayerProfile PPd = Users.getProfile(defender);
  74. int damage = event.getDamage();
  75. /* PARTY CHECK */
  76. if (event.getDamager() instanceof Player) {
  77. Player attacker = (Player) event.getDamager();
  78. if (Party.getInstance().inSameParty(defender, attacker)) {
  79. return;
  80. }
  81. }
  82. if (mcPermissions.getInstance().acrobatics(defender)) {
  83. int skillLevel = PPd.getSkillLevel(SkillType.ACROBATICS);
  84. int skillCheck = m.skillCheck(skillLevel, MAX_BONUS_LEVEL);
  85. if (Math.random() * 4000 <= skillCheck && mcPermissions.getInstance().dodge(defender)) {
  86. defender.sendMessage(mcLocale.getString("Acrobatics.Dodge"));
  87. if (System.currentTimeMillis() >= (5000 + PPd.getRespawnATS()) && defender.getHealth() >= 1) {
  88. PPd.addXP(SkillType.ACROBATICS, damage * DODGE_MODIFIER, defender);
  89. Skills.XpCheckSkill(SkillType.ACROBATICS, defender);
  90. }
  91. int newDamage = damage / 2;
  92. if (newDamage <= 0) {
  93. event.setDamage(1);
  94. }
  95. else {
  96. event.setDamage(newDamage);
  97. }
  98. }
  99. }
  100. }
  101. }