FishingCommand.java 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package com.gmail.nossr50.commands.skills;
  2. import com.gmail.nossr50.config.treasure.FishingTreasureConfig;
  3. import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
  4. import com.gmail.nossr50.datatypes.skills.SubSkillType;
  5. import com.gmail.nossr50.datatypes.treasure.Rarity;
  6. import com.gmail.nossr50.locale.LocaleLoader;
  7. import com.gmail.nossr50.mcMMO;
  8. import com.gmail.nossr50.skills.fishing.FishingManager;
  9. import com.gmail.nossr50.util.Permissions;
  10. import com.gmail.nossr50.util.player.UserManager;
  11. import com.gmail.nossr50.util.random.Probability;
  12. import com.gmail.nossr50.util.random.ProbabilityFactory;
  13. import com.gmail.nossr50.util.skills.RankUtils;
  14. import com.gmail.nossr50.util.skills.SkillUtils;
  15. import com.gmail.nossr50.util.text.StringUtils;
  16. import com.gmail.nossr50.util.text.TextComponentFactory;
  17. import net.kyori.adventure.text.Component;
  18. import org.bukkit.entity.Player;
  19. import java.util.ArrayList;
  20. import java.util.List;
  21. public class FishingCommand extends SkillCommand {
  22. private int lootTier;
  23. private String shakeChance;
  24. private String shakeChanceLucky;
  25. private int fishermansDietRank;
  26. private String commonTreasure;
  27. private String uncommonTreasure;
  28. private String rareTreasure;
  29. private String epicTreasure;
  30. private String legendaryTreasure;
  31. private String mythicTreasure;
  32. private String magicChance;
  33. private boolean canTreasureHunt;
  34. private boolean canMagicHunt;
  35. private boolean canShake;
  36. private boolean canFishermansDiet;
  37. private boolean canMasterAngler;
  38. private boolean canIceFish;
  39. private String maMinWaitTime, maMaxWaitTime;
  40. public FishingCommand() {
  41. super(PrimarySkillType.FISHING);
  42. }
  43. @Override
  44. protected void dataCalculations(Player player, float skillValue) {
  45. FishingManager fishingManager = UserManager.getPlayer(player).getFishingManager();
  46. // TREASURE HUNTER
  47. if (canTreasureHunt) {
  48. lootTier = fishingManager.getLootTier();
  49. // Item drop rates
  50. commonTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.COMMON) / 100.0);
  51. uncommonTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.UNCOMMON) / 100.0);
  52. rareTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.RARE) / 100.0);
  53. epicTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.EPIC) / 100.0);
  54. legendaryTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.LEGENDARY) / 100.0);
  55. mythicTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.MYTHIC) / 100.0);
  56. // Magic hunter drop rates
  57. double totalEnchantChance = 0;
  58. for (Rarity rarity : Rarity.values()) {
  59. if (rarity != Rarity.MYTHIC) {
  60. totalEnchantChance += FishingTreasureConfig.getInstance().getEnchantmentDropRate(lootTier, rarity);
  61. }
  62. }
  63. if(totalEnchantChance >= 1)
  64. magicChance = percent.format(totalEnchantChance / 100.0);
  65. else
  66. magicChance = percent.format(0);
  67. }
  68. // FISHING_SHAKE
  69. if (canShake) {
  70. Probability shakeProbability = ProbabilityFactory.ofPercentageValue(fishingManager.getShakeChance());
  71. String[] shakeStrings = SkillUtils.getRNGDisplayValues(shakeProbability);
  72. shakeChance = shakeStrings[0];
  73. shakeChanceLucky = shakeStrings[1];
  74. }
  75. // FISHERMAN'S DIET
  76. if (canFishermansDiet) {
  77. fishermansDietRank = RankUtils.getRank(player, SubSkillType.FISHING_FISHERMANS_DIET);
  78. }
  79. // MASTER ANGLER
  80. if (canMasterAngler) {
  81. maMinWaitTime = StringUtils.ticksToSeconds(fishingManager.getMasterAnglerTickMinWaitReduction(RankUtils.getRank(player, SubSkillType.FISHING_MASTER_ANGLER), false));
  82. maMaxWaitTime = StringUtils.ticksToSeconds(fishingManager.getMasterAnglerTickMaxWaitReduction(RankUtils.getRank(player, SubSkillType.FISHING_MASTER_ANGLER), false, 0));
  83. }
  84. }
  85. @Override
  86. protected void permissionsCheck(Player player) {
  87. canTreasureHunt = Permissions.canUseSubSkill(player, SubSkillType.FISHING_TREASURE_HUNTER);
  88. canMagicHunt = Permissions.canUseSubSkill(player, SubSkillType.FISHING_MAGIC_HUNTER) && Permissions.canUseSubSkill(player, SubSkillType.FISHING_TREASURE_HUNTER);
  89. canShake = Permissions.canUseSubSkill(player, SubSkillType.FISHING_SHAKE);
  90. canFishermansDiet = Permissions.canUseSubSkill(player, SubSkillType.FISHING_FISHERMANS_DIET);
  91. canMasterAngler = mcMMO.getCompatibilityManager().getMasterAnglerCompatibilityLayer() != null && Permissions.canUseSubSkill(player, SubSkillType.FISHING_MASTER_ANGLER);
  92. canIceFish = Permissions.canUseSubSkill(player, SubSkillType.FISHING_ICE_FISHING);
  93. }
  94. @Override
  95. protected List<String> statsDisplay(Player player, float skillValue, boolean hasEndurance, boolean isLucky) {
  96. List<String> messages = new ArrayList<>();
  97. if (canFishermansDiet) {
  98. messages.add(getStatMessage(false, true, SubSkillType.FISHING_FISHERMANS_DIET, String.valueOf(fishermansDietRank)));
  99. }
  100. if (canIceFish) {
  101. messages.add(getStatMessage(SubSkillType.FISHING_ICE_FISHING, SubSkillType.FISHING_ICE_FISHING.getLocaleStatDescription()));
  102. }
  103. if (canMagicHunt) {
  104. messages.add(getStatMessage(SubSkillType.FISHING_MAGIC_HUNTER, magicChance));
  105. }
  106. if (canMasterAngler) {
  107. messages.add(getStatMessage(false,true,
  108. SubSkillType.FISHING_MASTER_ANGLER,
  109. maMinWaitTime));
  110. messages.add(getStatMessage(true,true,
  111. SubSkillType.FISHING_MASTER_ANGLER,
  112. maMaxWaitTime));
  113. }
  114. if (canShake) {
  115. messages.add(getStatMessage(SubSkillType.FISHING_SHAKE, shakeChance)
  116. + (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", shakeChanceLucky) : ""));
  117. }
  118. if (canTreasureHunt) {
  119. messages.add(getStatMessage(false, true, SubSkillType.FISHING_TREASURE_HUNTER, String.valueOf(lootTier), String.valueOf(RankUtils.getHighestRank(SubSkillType.FISHING_TREASURE_HUNTER))));
  120. messages.add(getStatMessage(true, true, SubSkillType.FISHING_TREASURE_HUNTER,
  121. String.valueOf(commonTreasure),
  122. String.valueOf(uncommonTreasure),
  123. String.valueOf(rareTreasure),
  124. String.valueOf(epicTreasure),
  125. String.valueOf(legendaryTreasure),
  126. String.valueOf(mythicTreasure)));
  127. }
  128. return messages;
  129. }
  130. @Override
  131. protected List<Component> getTextComponents(Player player) {
  132. List<Component> textComponents = new ArrayList<>();
  133. TextComponentFactory.getSubSkillTextComponents(player, textComponents, PrimarySkillType.FISHING);
  134. return textComponents;
  135. }
  136. }