RandomChanceSkill.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package com.gmail.nossr50.util.random;
  2. import com.gmail.nossr50.datatypes.player.McMMOPlayer;
  3. import com.gmail.nossr50.datatypes.skills.SubSkillType;
  4. import com.gmail.nossr50.util.Permissions;
  5. import com.gmail.nossr50.util.player.UserManager;
  6. import org.bukkit.entity.Player;
  7. import org.jetbrains.annotations.NotNull;
  8. import org.jetbrains.annotations.Nullable;
  9. public class RandomChanceSkill implements RandomChanceExecution {
  10. protected final double probabilityCap;
  11. protected final boolean isLucky;
  12. protected int skillLevel;
  13. protected final double resultModifier;
  14. protected final double maximumBonusLevelCap;
  15. public RandomChanceSkill(@Nullable Player player, @NotNull SubSkillType subSkillType, double resultModifier) {
  16. this.probabilityCap = RandomChanceUtil.LINEAR_CURVE_VAR;
  17. final McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
  18. if (player != null && mcMMOPlayer != null) {
  19. this.skillLevel = mcMMOPlayer.getSkillLevel(subSkillType.getParentSkill());
  20. } else {
  21. this.skillLevel = 0;
  22. }
  23. if (player != null)
  24. isLucky = Permissions.lucky(player, subSkillType.getParentSkill());
  25. else
  26. isLucky = false;
  27. this.resultModifier = resultModifier;
  28. this.maximumBonusLevelCap = RandomChanceUtil.getMaxBonusLevelCap(subSkillType);
  29. }
  30. public RandomChanceSkill(@Nullable Player player, @NotNull SubSkillType subSkillType) {
  31. this.probabilityCap = RandomChanceUtil.LINEAR_CURVE_VAR;
  32. final McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
  33. if (player != null && mcMMOPlayer != null) {
  34. this.skillLevel = mcMMOPlayer.getSkillLevel(subSkillType.getParentSkill());
  35. } else {
  36. this.skillLevel = 0;
  37. }
  38. if (player != null)
  39. isLucky = Permissions.lucky(player, subSkillType.getParentSkill());
  40. else
  41. isLucky = false;
  42. this.resultModifier = 1.0D;
  43. this.maximumBonusLevelCap = RandomChanceUtil.getMaxBonusLevelCap(subSkillType);
  44. }
  45. public RandomChanceSkill(@Nullable Player player, @NotNull SubSkillType subSkillType, boolean hasCap) {
  46. if (hasCap)
  47. this.probabilityCap = RandomChanceUtil.getMaximumProbability(subSkillType);
  48. else
  49. this.probabilityCap = RandomChanceUtil.LINEAR_CURVE_VAR;
  50. final McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
  51. if (player != null && mcMMOPlayer != null) {
  52. this.skillLevel = mcMMOPlayer.getSkillLevel(subSkillType.getParentSkill());
  53. } else {
  54. this.skillLevel = 0;
  55. }
  56. if (player != null)
  57. isLucky = Permissions.lucky(player, subSkillType.getParentSkill());
  58. else
  59. isLucky = false;
  60. this.resultModifier = 1.0D;
  61. this.maximumBonusLevelCap = RandomChanceUtil.getMaxBonusLevelCap(subSkillType);
  62. }
  63. public RandomChanceSkill(@Nullable Player player, @NotNull SubSkillType subSkillType, boolean hasCap, boolean luckyOverride) {
  64. if (hasCap)
  65. this.probabilityCap = RandomChanceUtil.getMaximumProbability(subSkillType);
  66. else
  67. this.probabilityCap = RandomChanceUtil.LINEAR_CURVE_VAR;
  68. final McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
  69. if (player != null && mcMMOPlayer != null) {
  70. this.skillLevel = mcMMOPlayer.getSkillLevel(subSkillType.getParentSkill());
  71. } else {
  72. this.skillLevel = 0;
  73. }
  74. isLucky = luckyOverride;
  75. this.resultModifier = 1.0D;
  76. this.maximumBonusLevelCap = RandomChanceUtil.getMaxBonusLevelCap(subSkillType);
  77. }
  78. public RandomChanceSkill(@Nullable Player player, @NotNull SubSkillType subSkillType, boolean hasCap, double resultModifier) {
  79. if (hasCap)
  80. this.probabilityCap = RandomChanceUtil.getMaximumProbability(subSkillType);
  81. else
  82. this.probabilityCap = RandomChanceUtil.LINEAR_CURVE_VAR;
  83. final McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
  84. if (player != null && mcMMOPlayer != null) {
  85. this.skillLevel = mcMMOPlayer.getSkillLevel(subSkillType.getParentSkill());
  86. } else {
  87. this.skillLevel = 0;
  88. }
  89. if (player != null)
  90. isLucky = Permissions.lucky(player, subSkillType.getParentSkill());
  91. else
  92. isLucky = false;
  93. this.resultModifier = resultModifier;
  94. this.maximumBonusLevelCap = RandomChanceUtil.getMaxBonusLevelCap(subSkillType);
  95. }
  96. /**
  97. * Gets the skill level of the player who owns this RandomChanceSkill
  98. *
  99. * @return the current skill level relating to this RandomChanceSkill
  100. */
  101. public int getSkillLevel() {
  102. return skillLevel;
  103. }
  104. /**
  105. * Modify the skill level used for this skill's RNG calculations
  106. *
  107. * @param newSkillLevel new skill level
  108. */
  109. public void setSkillLevel(int newSkillLevel) {
  110. skillLevel = newSkillLevel;
  111. }
  112. /**
  113. * The maximum bonus level for this skill
  114. * This is when the skills level no longer increases the odds of success
  115. * For example, a value of 25 will mean the success chance no longer grows after skill level 25
  116. *
  117. * @return the maximum bonus from skill level for this skill
  118. */
  119. public double getMaximumBonusLevelCap() {
  120. return maximumBonusLevelCap;
  121. }
  122. /**
  123. * Gets the XPos used in the formula for success
  124. *
  125. * @return value of x for our success probability graph
  126. */
  127. @Override
  128. public double getXPos() {
  129. return getSkillLevel();
  130. }
  131. /**
  132. * The maximum odds for this RandomChanceExecution
  133. * For example, if this value is 10, then 10% odds would be the maximum and would be achieved only when xPos equaled the LinearCurvePeak
  134. *
  135. * @return maximum probability odds from 0.00 (no chance of ever happened) to 100.0 (probability can be guaranteed)
  136. */
  137. @Override
  138. public double getProbabilityCap() {
  139. return probabilityCap;
  140. }
  141. public boolean isLucky() {
  142. return isLucky;
  143. }
  144. public double getResultModifier() {
  145. return resultModifier;
  146. }
  147. }