package com.gmail.nossr50.commands.skills; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.util.Misc; import com.neetgames.mcmmo.player.OnlineMMOPlayer; import com.gmail.nossr50.datatypes.skills.PrimarySkillType; import com.gmail.nossr50.datatypes.skills.SubSkillType; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.skills.alchemy.AlchemyManager; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.skills.RankUtils; import com.gmail.nossr50.util.text.TextComponentFactory; import net.kyori.adventure.text.Component; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; public class AlchemyCommand extends SkillCommand { private String brewSpeed; private String brewSpeedLucky; private int tier; private int ingredientCount; private String ingredientList; private boolean canCatalysis; private boolean canConcoctions; public AlchemyCommand() { super(PrimarySkillType.ALCHEMY); } protected String[] calculateAbilityDisplayValues(@NotNull Player player) { //TODO: Needed? OnlineMMOPlayer mmoPlayer = mcMMO.getUserManager().queryPlayer(player); if(mmoPlayer == null) { player.sendMessage(LocaleLoader.getString("Profile.PendingLoad")); return new String[] {"DATA NOT LOADED", "DATA NOT LOADED"}; } return calculateAbilityDisplayValues(mmoPlayer); } protected String[] calculateAbilityDisplayValues(@NotNull OnlineMMOPlayer mmoPlayer) { AlchemyManager alchemyManager = ((McMMOPlayer) (mmoPlayer)).getAlchemyManager(); String[] displayValues = new String[2]; boolean isLucky = Permissions.lucky(Misc.adaptPlayer(mmoPlayer), PrimarySkillType.ALCHEMY); displayValues[0] = decimal.format(alchemyManager.calculateBrewSpeed(false)) + "x"; displayValues[1] = isLucky ? decimal.format(alchemyManager.calculateBrewSpeed(true)) + "x" : null; return displayValues; } @Override protected void dataCalculations(@NotNull OnlineMMOPlayer mmoPlayer, float skillValue) { // ALCHEMY_CATALYSIS if (canCatalysis) { String[] catalysisStrings = calculateAbilityDisplayValues(mmoPlayer.getPlayer()); brewSpeed = catalysisStrings[0]; brewSpeedLucky = catalysisStrings[1]; } // ALCHEMY_CONCOCTIONS if (canConcoctions) { AlchemyManager alchemyManager = mmoPlayer.getAlchemyManager(); tier = alchemyManager.getTier(); ingredientCount = alchemyManager.getIngredients().size(); ingredientList = alchemyManager.getIngredientList(); } } @Override protected void permissionsCheck(@NotNull OnlineMMOPlayer mmoPlayer) { canCatalysis = canUseSubskill(mmoPlayer, SubSkillType.ALCHEMY_CATALYSIS); canConcoctions = canUseSubskill(mmoPlayer, SubSkillType.ALCHEMY_CONCOCTIONS); } @Override protected @NotNull List statsDisplay(@NotNull OnlineMMOPlayer mmoPlayer, float skillValue, boolean hasEndurance, boolean isLucky) { List messages = new ArrayList<>(); if (canCatalysis) { messages.add(getStatMessage(SubSkillType.ALCHEMY_CATALYSIS, brewSpeed) + (isLucky ? LocaleLoader.getString("Perks.Lucky.Bonus", brewSpeedLucky) : "")); } if (canConcoctions) { messages.add(getStatMessage(false, true, SubSkillType.ALCHEMY_CONCOCTIONS, String.valueOf(tier), String.valueOf(RankUtils.getHighestRank(SubSkillType.ALCHEMY_CONCOCTIONS)))); messages.add(getStatMessage(true, true, SubSkillType.ALCHEMY_CONCOCTIONS, String.valueOf(ingredientCount), ingredientList)); //messages.add(LocaleLoader.getString("Alchemy.Concoctions.Rank", tier, RankUtils.getHighestRank(SubSkillType.ALCHEMY_CONCOCTIONS))); //messages.add(LocaleLoader.getString("Alchemy.Concoctions.Ingredients", ingredientCount, ingredientList)); } return messages; } @Override protected @NotNull List getTextComponents(@NotNull OnlineMMOPlayer mmoPlayer) { List textComponents = new ArrayList<>(); TextComponentFactory.getSubSkillTextComponents(mmoPlayer, textComponents, PrimarySkillType.ALCHEMY); return textComponents; } }