FishingCommand.java 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package com.gmail.nossr50.commands.skills;
  2. import com.gmail.nossr50.config.AdvancedConfig;
  3. import com.gmail.nossr50.config.treasure.TreasureConfig;
  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.locale.LocaleLoader;
  8. import com.gmail.nossr50.skills.fishing.Fishing;
  9. import com.gmail.nossr50.skills.fishing.Fishing.Tier;
  10. import com.gmail.nossr50.skills.fishing.FishingManager;
  11. import com.gmail.nossr50.util.Permissions;
  12. import com.gmail.nossr50.util.TextComponentFactory;
  13. import com.gmail.nossr50.util.player.UserManager;
  14. import net.md_5.bungee.api.chat.TextComponent;
  15. import org.bukkit.Location;
  16. import org.bukkit.entity.EntityType;
  17. import org.bukkit.entity.Player;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. public class FishingCommand extends SkillCommand {
  21. private int lootTier;
  22. private String shakeChance;
  23. private String shakeChanceLucky;
  24. private int fishermansDietRank;
  25. private String biteChance;
  26. private String trapTreasure;
  27. private String commonTreasure;
  28. private String uncommonTreasure;
  29. private String rareTreasure;
  30. private String epicTreasure;
  31. private String legendaryTreasure;
  32. private String recordTreasure;
  33. private String magicChance;
  34. private boolean canTreasureHunt;
  35. private boolean canMagicHunt;
  36. private boolean canShake;
  37. private boolean canFishermansDiet;
  38. private boolean canMasterAngler;
  39. private boolean canIceFish;
  40. public FishingCommand() {
  41. super(PrimarySkillType.FISHING);
  42. }
  43. @Override
  44. protected void dataCalculations(Player player, float skillValue, boolean isLucky) {
  45. FishingManager fishingManager = UserManager.getPlayer(player).getFishingManager();
  46. // TREASURE HUNTER
  47. if (canTreasureHunt) {
  48. lootTier = fishingManager.getLootTier();
  49. // Item drop rates
  50. trapTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.TRAP) / 100.0);
  51. commonTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.COMMON) / 100.0);
  52. uncommonTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.UNCOMMON) / 100.0);
  53. rareTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.RARE) / 100.0);
  54. epicTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.EPIC) / 100.0);
  55. legendaryTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.LEGENDARY) / 100.0);
  56. recordTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.RECORD) / 100.0);
  57. // Magic hunter drop rates
  58. double totalEnchantChance = 0;
  59. for (Rarity rarity : Rarity.values()) {
  60. if (rarity != Rarity.TRAP && rarity != Rarity.RECORD) {
  61. totalEnchantChance += TreasureConfig.getInstance().getEnchantmentDropRate(lootTier, rarity);
  62. }
  63. }
  64. magicChance = percent.format(totalEnchantChance / 100.0);
  65. }
  66. // FISHING_SHAKE
  67. if (canShake) {
  68. String[] shakeStrings = calculateAbilityDisplayValues(UserManager.getPlayer(player).getFishingManager().getShakeProbability(), isLucky);
  69. shakeChance = shakeStrings[0];
  70. shakeChanceLucky = shakeStrings[1];
  71. }
  72. // FISHERMAN'S DIET
  73. if (canFishermansDiet) {
  74. fishermansDietRank = calculateRank(skillValue, Fishing.fishermansDietMaxLevel, Fishing.fishermansDietRankLevel1);
  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.masterAnglerBiomes.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. biteChance = calculateAbilityDisplayValues(rawBiteChance * 100.0, isLucky)[0];
  90. }
  91. }
  92. @Override
  93. protected void permissionsCheck(Player player) {
  94. canTreasureHunt = Permissions.isSubSkillEnabled(player, SubSkillType.FISHING_TREASURE_HUNTER);
  95. canMagicHunt = Permissions.isSubSkillEnabled(player, SubSkillType.FISHING_MAGIC_HUNTER);
  96. canShake = Permissions.isSubSkillEnabled(player, SubSkillType.FISHING_SHAKE);
  97. canFishermansDiet = Permissions.isSubSkillEnabled(player, SubSkillType.FISHING_FISHERMANS_DIET);
  98. canMasterAngler = Permissions.isSubSkillEnabled(player, SubSkillType.FISHING_MASTER_ANGLER);
  99. canIceFish = Permissions.isSubSkillEnabled(player, SubSkillType.FISHING_ICE_FISHING);
  100. }
  101. @Override
  102. protected List<String> effectsDisplay() {
  103. List<String> messages = new ArrayList<String>();
  104. if (canTreasureHunt) {
  105. messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.0"), LocaleLoader.getString("Fishing.Effect.1")));
  106. }
  107. if (canMagicHunt) {
  108. messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.2"), LocaleLoader.getString("Fishing.Effect.3")));
  109. }
  110. if (canIceFish) {
  111. messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.10"), LocaleLoader.getString("Fishing.Effect.11")));
  112. }
  113. if (canMasterAngler) {
  114. messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.8"), LocaleLoader.getString("Fishing.Effect.9")));
  115. }
  116. if (canShake) {
  117. messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.4"), LocaleLoader.getString("Fishing.Effect.5")));
  118. }
  119. if (canFishermansDiet) {
  120. messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Fishing.Effect.6"), LocaleLoader.getString("Fishing.Effect.7")));
  121. }
  122. return messages;
  123. }
  124. @Override
  125. protected List<String> statsDisplay(Player player, float skillValue, boolean hasEndurance, boolean isLucky) {
  126. List<String> messages = new ArrayList<String>();
  127. if (canTreasureHunt) {
  128. messages.add(LocaleLoader.getString("Fishing.Ability.Rank", lootTier, Tier.values().length));
  129. messages.add(LocaleLoader.getString("Fishing.Ability.TH.DropRate", trapTreasure, commonTreasure, uncommonTreasure, rareTreasure, epicTreasure, legendaryTreasure, recordTreasure));
  130. }
  131. if (canMagicHunt) {
  132. messages.add(LocaleLoader.getString("Fishing.Ability.TH.MagicRate", magicChance));
  133. }
  134. if (canIceFish) {
  135. int unlockLevel = AdvancedConfig.getInstance().getIceFishingUnlockLevel();
  136. if (skillValue < unlockLevel) {
  137. messages.add(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Fishing.Ability.Locked.1", unlockLevel)));
  138. }
  139. else {
  140. messages.add(LocaleLoader.getString("Fishing.Ability.IceFishing"));
  141. }
  142. }
  143. if (canMasterAngler) {
  144. int unlockLevel = AdvancedConfig.getInstance().getMasterAnglerUnlockLevel();
  145. if (skillValue < unlockLevel) {
  146. messages.add(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Fishing.Ability.Locked.2", unlockLevel)));
  147. }
  148. else {
  149. messages.add(LocaleLoader.getString("Fishing.Ability.Chance", biteChance));
  150. }
  151. }
  152. if (canShake) {
  153. int unlockLevel = AdvancedConfig.getInstance().getFishingTierLevel(Tier.ONE);
  154. if (skillValue < unlockLevel) {
  155. messages.add(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Fishing.Ability.Locked.0", unlockLevel)));
  156. }
  157. else {
  158. messages.add(LocaleLoader.getString("Fishing.Ability.Shake", shakeChance) + (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", shakeChanceLucky) : ""));
  159. }
  160. }
  161. if (canFishermansDiet) {
  162. messages.add(LocaleLoader.getString("Fishing.Ability.FD", fishermansDietRank));
  163. }
  164. return messages;
  165. }
  166. @Override
  167. protected List<TextComponent> getTextComponents(Player player) {
  168. List<TextComponent> textComponents = new ArrayList<>();
  169. TextComponentFactory.getSubSkillTextComponents(player, textComponents, PrimarySkillType.FISHING);
  170. return textComponents;
  171. }
  172. }