Acrobatics.java 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package com.gmail.nossr50.skills.acrobatics;
  2. import org.bukkit.entity.Player;
  3. import com.gmail.nossr50.config.AdvancedConfig;
  4. import com.gmail.nossr50.config.Config;
  5. import com.gmail.nossr50.locale.LocaleLoader;
  6. import com.gmail.nossr50.skills.utilities.PerksUtils;
  7. import com.gmail.nossr50.skills.utilities.SkillType;
  8. import com.gmail.nossr50.util.Misc;
  9. import com.gmail.nossr50.util.Permissions;
  10. import com.gmail.nossr50.util.Users;
  11. public final class Acrobatics {
  12. public static double dodgeMaxChance = AdvancedConfig.getInstance().getDodgeChanceMax();
  13. public static int dodgeMaxBonusLevel = AdvancedConfig.getInstance().getDodgeMaxBonusLevel();
  14. public static int dodgeXpModifier = AdvancedConfig.getInstance().getDodgeXPModifier();
  15. public static double rollMaxChance = AdvancedConfig.getInstance().getRollChanceMax();
  16. public static int rollMaxBonusLevel = AdvancedConfig.getInstance().getRollMaxBonusLevel();
  17. public static int rollThreshold = AdvancedConfig.getInstance().getRollDamageThreshold();
  18. public static double gracefulRollMaxChance = AdvancedConfig.getInstance().getGracefulRollChanceMax();
  19. public static int gracefulRollMaxBonusLevel = AdvancedConfig.getInstance().getGracefulRollMaxBonusLevel();
  20. public static int gracefulRollThreshold = AdvancedConfig.getInstance().getGracefulRollDamageThreshold();
  21. public static int gracefulRollSuccessModifier = AdvancedConfig.getInstance().getGracefulRollSuccessModifer();
  22. public static int rollXpModifier = AdvancedConfig.getInstance().getRollXPModifier();
  23. public static int fallXpModifier = AdvancedConfig.getInstance().getFallXPModifier();
  24. public static boolean afkLevelingDisabled = Config.getInstance().getAcrobaticsAFKDisabled();
  25. public static boolean dodgeLightningDisabled = Config.getInstance().getDodgeLightningDisabled();
  26. private Acrobatics() {};
  27. public static int processRoll(Player player, int damage) {
  28. if (player.isSneaking() && Permissions.gracefulRoll(player)) {
  29. return processGracefulRoll(player, damage);
  30. }
  31. int modifiedDamage = calculateModifiedDamage(damage, rollThreshold);
  32. if (!isFatal(player, modifiedDamage) && isSuccessfulRoll(player, rollMaxChance, rollMaxBonusLevel, 1)) {
  33. player.sendMessage(LocaleLoader.getString("Acrobatics.Roll.Text"));
  34. applyXpGain(player, damage, rollXpModifier);
  35. return modifiedDamage;
  36. }
  37. else if (!isFatal(player, damage)) {
  38. applyXpGain(player, damage, fallXpModifier);
  39. }
  40. return damage;
  41. }
  42. private static int processGracefulRoll(Player player, int damage) {
  43. int modifiedDamage = calculateModifiedDamage(damage, gracefulRollThreshold);
  44. if (!isFatal(player, modifiedDamage) && isSuccessfulRoll(player, gracefulRollMaxChance, gracefulRollMaxBonusLevel, gracefulRollSuccessModifier)) {
  45. player.sendMessage(LocaleLoader.getString("Acrobatics.Ability.Proc"));
  46. applyXpGain(player, damage, rollXpModifier);
  47. return modifiedDamage;
  48. }
  49. else if (!isFatal(player, damage)) {
  50. applyXpGain(player, damage, fallXpModifier);
  51. }
  52. return damage;
  53. }
  54. private static boolean isFatal(Player player, int damage) {
  55. return player.getHealth() - damage < 1;
  56. }
  57. private static int calculateModifiedDamage(int damage, int damageThreshold) {
  58. return Math.max(damage - damageThreshold, 0);
  59. }
  60. private static boolean isSuccessfulRoll(Player player, double maxChance, int maxLevel, int successModifier) {
  61. double successChance = (maxChance / maxLevel) * Math.min(Users.getPlayer(player).getProfile().getSkillLevel(SkillType.ACROBATICS), maxLevel) * successModifier;
  62. return successChance > Misc.getRandom().nextInt(PerksUtils.handleLuckyPerks(player, SkillType.ACROBATICS));
  63. }
  64. private static void applyXpGain(Player player, int baseXp, int multiplier) {
  65. Users.getPlayer(player).beginXpGain(SkillType.ACROBATICS, baseXp * multiplier);
  66. }
  67. }