WoodcuttingCommand.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package com.gmail.nossr50.commands.skills;
  2. import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
  3. import com.gmail.nossr50.datatypes.skills.SubSkillType;
  4. import com.gmail.nossr50.locale.LocaleLoader;
  5. import com.gmail.nossr50.util.Permissions;
  6. import com.gmail.nossr50.util.skills.RankUtils;
  7. import com.gmail.nossr50.util.skills.SkillUtils;
  8. import com.gmail.nossr50.util.text.TextComponentFactory;
  9. import net.kyori.adventure.text.Component;
  10. import org.bukkit.entity.Player;
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. public class WoodcuttingCommand extends SkillCommand {
  14. private String treeFellerLength;
  15. private String treeFellerLengthEndurance;
  16. private String doubleDropChance;
  17. private String tripleDropChance;
  18. private String doubleDropChanceLucky;
  19. private String tripleDropChanceLucky;
  20. private boolean canTreeFell;
  21. private boolean canLeafBlow;
  22. private boolean canDoubleDrop;
  23. private boolean canTripleDrop;
  24. private boolean canKnockOnWood;
  25. // private boolean canSplinter;
  26. // private boolean canBarkSurgeon;
  27. // private boolean canNaturesBounty;
  28. public WoodcuttingCommand() {
  29. super(PrimarySkillType.WOODCUTTING);
  30. }
  31. @Override
  32. protected void dataCalculations(Player player, float skillValue) {
  33. // DOUBLE DROPS
  34. if (canDoubleDrop) {
  35. setDoubleDropClassicChanceStrings(player);
  36. }
  37. //Clean Cuts
  38. if(canTripleDrop) {
  39. String[] tripleDropStrings = SkillUtils.getRNGDisplayValues(player, SubSkillType.WOODCUTTING_CLEAN_CUTS);
  40. tripleDropChance = tripleDropStrings[0];
  41. tripleDropChanceLucky = tripleDropStrings[1];
  42. }
  43. // TREE FELLER
  44. if (canTreeFell) {
  45. String[] treeFellerStrings = calculateLengthDisplayValues(player, skillValue);
  46. treeFellerLength = treeFellerStrings[0];
  47. treeFellerLengthEndurance = treeFellerStrings[1];
  48. }
  49. }
  50. private void setDoubleDropClassicChanceStrings(Player player) {
  51. String[] doubleDropStrings = SkillUtils.getRNGDisplayValues(player, SubSkillType.WOODCUTTING_HARVEST_LUMBER);
  52. doubleDropChance = doubleDropStrings[0];
  53. doubleDropChanceLucky = doubleDropStrings[1];
  54. }
  55. @Override
  56. protected void permissionsCheck(Player player) {
  57. canTreeFell = RankUtils.hasUnlockedSubskill(player, SubSkillType.WOODCUTTING_TREE_FELLER) && Permissions.treeFeller(player);
  58. canDoubleDrop = Permissions.canUseSubSkill(player, SubSkillType.WOODCUTTING_HARVEST_LUMBER) && !skill.getDoubleDropsDisabled();
  59. canTripleDrop = Permissions.canUseSubSkill(player, SubSkillType.WOODCUTTING_CLEAN_CUTS) && !skill.getDoubleDropsDisabled();
  60. canLeafBlow = Permissions.canUseSubSkill(player, SubSkillType.WOODCUTTING_LEAF_BLOWER);
  61. canKnockOnWood = canTreeFell && Permissions.canUseSubSkill(player, SubSkillType.WOODCUTTING_KNOCK_ON_WOOD);
  62. /*canSplinter = canUseSubskill(player, SubSkillType.WOODCUTTING_SPLINTER);
  63. canBarkSurgeon = canUseSubskill(player, SubSkillType.WOODCUTTING_BARK_SURGEON);
  64. canNaturesBounty = canUseSubskill(player, SubSkillType.WOODCUTTING_NATURES_BOUNTY);*/
  65. }
  66. @Override
  67. protected List<String> statsDisplay(Player player, float skillValue, boolean hasEndurance, boolean isLucky) {
  68. List<String> messages = new ArrayList<>();
  69. if (canDoubleDrop) {
  70. messages.add(getStatMessage(SubSkillType.WOODCUTTING_HARVEST_LUMBER, doubleDropChance)
  71. + (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", doubleDropChanceLucky) : ""));
  72. }
  73. if(canTripleDrop) {
  74. messages.add(getStatMessage(SubSkillType.WOODCUTTING_CLEAN_CUTS, tripleDropChance)
  75. + (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", tripleDropChanceLucky) : ""));
  76. }
  77. if (canKnockOnWood) {
  78. String lootNote;
  79. if(RankUtils.hasReachedRank(2, player, SubSkillType.WOODCUTTING_KNOCK_ON_WOOD)) {
  80. lootNote = LocaleLoader.getString("Woodcutting.SubSkill.KnockOnWood.Loot.Rank2");
  81. } else {
  82. lootNote = LocaleLoader.getString("Woodcutting.SubSkill.KnockOnWood.Loot.Normal");
  83. }
  84. messages.add(getStatMessage(SubSkillType.WOODCUTTING_KNOCK_ON_WOOD, lootNote));
  85. }
  86. if (canLeafBlow) {
  87. messages.add(LocaleLoader.getString("Ability.Generic.Template", LocaleLoader.getString("Woodcutting.Ability.0"), LocaleLoader.getString("Woodcutting.Ability.1")));
  88. }
  89. if (canTreeFell) {
  90. messages.add(getStatMessage(SubSkillType.WOODCUTTING_TREE_FELLER, treeFellerLength)
  91. + (hasEndurance ? LocaleLoader.getString("Perks.ActivationTime.Bonus", treeFellerLengthEndurance) : ""));
  92. }
  93. return messages;
  94. }
  95. @Override
  96. protected List<Component> getTextComponents(Player player) {
  97. List<Component> textComponents = new ArrayList<>();
  98. TextComponentFactory.getSubSkillTextComponents(player, textComponents, PrimarySkillType.WOODCUTTING);
  99. return textComponents;
  100. }
  101. }