Acrobatics.java 4.2 KB

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