FishingCommand.java 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. package com.gmail.nossr50.commands.skills;
  2. import com.gmail.nossr50.config.AdvancedConfig;
  3. import com.gmail.nossr50.config.treasure.FishingTreasureConfig;
  4. import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
  5. import com.gmail.nossr50.datatypes.skills.SubSkillType;
  6. import com.gmail.nossr50.datatypes.treasure.Rarity;
  7. import com.gmail.nossr50.mcMMO;
  8. import com.gmail.nossr50.skills.fishing.Fishing;
  9. import com.gmail.nossr50.skills.fishing.FishingManager;
  10. import com.gmail.nossr50.util.Permissions;
  11. import net.md_5.bungee.api.chat.TextComponent;
  12. import org.bukkit.Location;
  13. import org.bukkit.entity.EntityType;
  14. import org.bukkit.entity.Player;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. public class FishingCommand extends SkillCommand {
  18. private int lootTier;
  19. private String shakeChance;
  20. private String shakeChanceLucky;
  21. private int fishermansDietRank;
  22. private String biteChance;
  23. private String innerPeaceMult;
  24. private String commonTreasure;
  25. private String uncommonTreasure;
  26. private String rareTreasure;
  27. private String epicTreasure;
  28. private String legendaryTreasure;
  29. private String recordTreasure;
  30. private String magicChance;
  31. private boolean canTreasureHunt;
  32. private boolean canMagicHunt;
  33. private boolean canShake;
  34. private boolean canFishermansDiet;
  35. private boolean canMasterAngler;
  36. private boolean canIceFish;
  37. private boolean canInnerPeace;
  38. public FishingCommand(mcMMO pluginRef) {
  39. super(PrimarySkillType.FISHING, pluginRef);
  40. }
  41. @Override
  42. protected void dataCalculations(Player player, double skillValue) {
  43. FishingManager fishingManager = pluginRef.getUserManager().getPlayer(player).getFishingManager();
  44. // TREASURE HUNTER
  45. if (canTreasureHunt) {
  46. lootTier = fishingManager.getLootTier();
  47. // Item drop rates
  48. commonTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.COMMON) / 100.0);
  49. uncommonTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.UNCOMMON) / 100.0);
  50. rareTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.RARE) / 100.0);
  51. epicTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.EPIC) / 100.0);
  52. legendaryTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.LEGENDARY) / 100.0);
  53. recordTreasure = percent.format(FishingTreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.RECORD) / 100.0);
  54. // Magic hunter drop rates
  55. double totalEnchantChance = 0;
  56. for (Rarity rarity : Rarity.values()) {
  57. if (rarity != Rarity.RECORD) {
  58. totalEnchantChance += FishingTreasureConfig.getInstance().getEnchantmentDropRate(lootTier, rarity);
  59. }
  60. }
  61. if (totalEnchantChance >= 1)
  62. magicChance = percent.format(totalEnchantChance / 100.0);
  63. else
  64. magicChance = percent.format(0);
  65. }
  66. // FISHING_SHAKE
  67. if (canShake) {
  68. String[] shakeStrings = pluginRef.getRandomChanceTools().calculateAbilityDisplayValuesStatic(player, PrimarySkillType.FISHING, fishingManager.getShakeChance());
  69. shakeChance = shakeStrings[0];
  70. shakeChanceLucky = shakeStrings[1];
  71. }
  72. // FISHERMAN'S DIET
  73. if (canFishermansDiet) {
  74. fishermansDietRank = pluginRef.getRankTools().getRank(player, SubSkillType.FISHING_FISHERMANS_DIET);
  75. }
  76. // MASTER ANGLER
  77. if (canMasterAngler) {
  78. double rawBiteChance = 1.0 / (player.getWorld().hasStorm() ? 300 : 500);
  79. Location location = fishingManager.getHookLocation();
  80. if (location == null) {
  81. location = player.getLocation();
  82. }
  83. if (Fishing.getInstance().getMasterAnglerBiomes().contains(location.getBlock().getBiome())) {
  84. rawBiteChance = rawBiteChance * AdvancedConfig.getInstance().getMasterAnglerBiomeModifier();
  85. }
  86. if (player.isInsideVehicle() && player.getVehicle().getType() == EntityType.BOAT) {
  87. rawBiteChance = rawBiteChance * AdvancedConfig.getInstance().getMasterAnglerBoatModifier();
  88. }
  89. double luckyModifier = Permissions.lucky(player, PrimarySkillType.FISHING) ? 1.333D : 1.0D;
  90. biteChance = percent.format((rawBiteChance * 100.0D) * luckyModifier);
  91. }
  92. if (canInnerPeace) {
  93. innerPeaceMult = String.valueOf(fishingManager.getInnerPeaceMultiplier());
  94. }
  95. }
  96. @Override
  97. protected void permissionsCheck(Player player) {
  98. canTreasureHunt = canUseSubskill(player, SubSkillType.FISHING_TREASURE_HUNTER);
  99. canMagicHunt = canUseSubskill(player, SubSkillType.FISHING_MAGIC_HUNTER) && canUseSubskill(player, SubSkillType.FISHING_TREASURE_HUNTER);
  100. canShake = canUseSubskill(player, SubSkillType.FISHING_SHAKE);
  101. canFishermansDiet = canUseSubskill(player, SubSkillType.FISHING_FISHERMANS_DIET);
  102. canMasterAngler = canUseSubskill(player, SubSkillType.FISHING_MASTER_ANGLER);
  103. canIceFish = canUseSubskill(player, SubSkillType.FISHING_ICE_FISHING);
  104. canInnerPeace = canUseSubskill(player, SubSkillType.FISHING_INNER_PEACE);
  105. }
  106. @Override
  107. protected List<String> statsDisplay(Player player, double skillValue, boolean hasEndurance, boolean isLucky) {
  108. List<String> messages = new ArrayList<>();
  109. if (canFishermansDiet) {
  110. messages.add(getStatMessage(false, true, SubSkillType.FISHING_FISHERMANS_DIET, String.valueOf(fishermansDietRank)));
  111. }
  112. if (canIceFish) {
  113. messages.add(getStatMessage(SubSkillType.FISHING_ICE_FISHING, SubSkillType.FISHING_ICE_FISHING.getLocaleStatDescription()));
  114. }
  115. if (canMagicHunt) {
  116. messages.add(getStatMessage(SubSkillType.FISHING_MAGIC_HUNTER, magicChance));
  117. }
  118. if (canMasterAngler) {
  119. //TODO: Update this with more details
  120. messages.add(getStatMessage(false, true, SubSkillType.FISHING_MASTER_ANGLER, biteChance));
  121. }
  122. if (canShake) {
  123. messages.add(getStatMessage(SubSkillType.FISHING_SHAKE, shakeChance)
  124. + (isLucky ? pluginRef.getLocaleManager().getString("Perks.Lucky.Bonus", shakeChanceLucky) : ""));
  125. }
  126. if (canTreasureHunt) {
  127. messages.add(getStatMessage(false, true, SubSkillType.FISHING_TREASURE_HUNTER, String.valueOf(lootTier), String.valueOf(pluginRef.getRankTools().getHighestRank(SubSkillType.FISHING_TREASURE_HUNTER))));
  128. messages.add(getStatMessage(true, true, SubSkillType.FISHING_TREASURE_HUNTER,
  129. String.valueOf(commonTreasure),
  130. String.valueOf(uncommonTreasure),
  131. String.valueOf(rareTreasure),
  132. String.valueOf(epicTreasure),
  133. String.valueOf(legendaryTreasure),
  134. String.valueOf(recordTreasure)));
  135. }
  136. if (canInnerPeace) {
  137. messages.add(getStatMessage(SubSkillType.FISHING_INNER_PEACE, innerPeaceMult));
  138. }
  139. return messages;
  140. }
  141. @Override
  142. protected List<TextComponent> getTextComponents(Player player) {
  143. List<TextComponent> textComponents = new ArrayList<>();
  144. pluginRef.getTextComponentFactory().getSubSkillTextComponents(player, textComponents, PrimarySkillType.FISHING);
  145. return textComponents;
  146. }
  147. }