diff options
| author | Cow <cow@volloeko.de> | 2020-07-27 23:50:02 +0200 |
|---|---|---|
| committer | Cow <cow@volloeko.de> | 2020-07-27 23:50:02 +0200 |
| commit | 023589c75ae72ddc5ff75fa7235bce4d102b2ad1 (patch) | |
| tree | fbb43090ea1ff3d6b3a3b1fb15bbd2c5446ddc7e /src/main/java/eu/olli/cowlection/command | |
| parent | 0027466a564a9a6bebbdeed05192a616175ea6f3 (diff) | |
| download | Cowlection-023589c75ae72ddc5ff75fa7235bce4d102b2ad1.tar.gz Cowlection-023589c75ae72ddc5ff75fa7235bce4d102b2ad1.tar.bz2 Cowlection-023589c75ae72ddc5ff75fa7235bce4d102b2ad1.zip | |
Added new stats to `/moo stalkskyblock`
- new stats: skill average, slayer levels, pets
- also new alias: `/moo ss`
- new alias for `moo stalk`: `/moo s`
- also: stalking = bad!
Diffstat (limited to 'src/main/java/eu/olli/cowlection/command')
| -rw-r--r-- | src/main/java/eu/olli/cowlection/command/MooCommand.java | 111 |
1 files changed, 95 insertions, 16 deletions
diff --git a/src/main/java/eu/olli/cowlection/command/MooCommand.java b/src/main/java/eu/olli/cowlection/command/MooCommand.java index e1c8a13..bde7758 100644 --- a/src/main/java/eu/olli/cowlection/command/MooCommand.java +++ b/src/main/java/eu/olli/cowlection/command/MooCommand.java @@ -7,10 +7,8 @@ import eu.olli.cowlection.command.exception.InvalidPlayerNameException; import eu.olli.cowlection.command.exception.MooCommandException; import eu.olli.cowlection.config.MooConfig; import eu.olli.cowlection.config.MooGuiConfig; -import eu.olli.cowlection.data.DataHelper; -import eu.olli.cowlection.data.Friend; -import eu.olli.cowlection.data.HySkyBlockStats; -import eu.olli.cowlection.data.HyStalkingData; +import eu.olli.cowlection.data.*; +import eu.olli.cowlection.data.HySkyBlockStats.Profile.Pet; import eu.olli.cowlection.handler.DungeonCache; import eu.olli.cowlection.search.GuiSearch; import eu.olli.cowlection.util.*; @@ -53,7 +51,9 @@ public class MooCommand extends CommandBase { // work-around so you can still say 'moo' in chat without triggering the client-side command String msg = CommandBase.buildString(args, 1); Minecraft.getMinecraft().thePlayer.sendChatMessage(getCommandName() + (!msg.isEmpty() ? " " + msg : "")); - } else if (args[0].equalsIgnoreCase("stalk")) { + } else if (args[0].equalsIgnoreCase("stalk") + || args[0].equalsIgnoreCase("s") + || args[0].equalsIgnoreCase("askPolitelyWhereTheyAre")) { if (args.length != 2) { throw new WrongUsageException("/" + getCommandName() + " stalk <playerName>"); } else if (!Utils.isValidMcName(args[1])) { @@ -61,9 +61,12 @@ public class MooCommand extends CommandBase { } else { handleStalking(args[1]); } - } else if (args[0].equalsIgnoreCase("stalksb") || args[0].equalsIgnoreCase("stalkskyblock") || args[0].equalsIgnoreCase("skyblockstalk")) { + } else if (args[0].equalsIgnoreCase("stalkskyblock") || args[0].equalsIgnoreCase("skyblockstalk") + || args[0].equalsIgnoreCase("ss") + || args[0].equalsIgnoreCase("stalksb") || args[0].equalsIgnoreCase("sbstalk") + || args[0].equalsIgnoreCase("askPolitelyAboutTheirSkyBlockProgress")) { if (args.length != 2) { - throw new WrongUsageException("/" + getCommandName() + " stalkskyblock <playerName>"); + throw new WrongUsageException("/" + getCommandName() + " skyblockstalk <playerName>"); } else if (!Utils.isValidMcName(args[1])) { throw new InvalidPlayerNameException(args[1]); } else { @@ -370,21 +373,25 @@ public class MooCommand extends CommandBase { MooChatComponent skillLevels = new MooChatComponent("Skill levels:").gold(); HySkyBlockStats.Profile.Member member = activeProfile.getMember(stalkedPlayer.getUuid()); - for (Map.Entry<HySkyBlockStats.SkillLevel, Double> entry : member.getSkills().entrySet()) { + int skillLevelsSum = 0; + for (Map.Entry<XpTables.Skill, Integer> entry : member.getSkills().entrySet()) { String skill = Utils.fancyCase(entry.getKey().name()); - int level = entry.getKey().getLevel(entry.getValue()); - if (level > 0) { - String skillLevel = MooConfig.useRomanNumerals() ? Utils.convertArabicToRoman(level) : String.valueOf(level); - skillLevels.appendFreshSibling(new MooChatComponent.KeyValueTooltipComponent(skill, skillLevel)); - } + int level = entry.getValue(); + String skillLevel = MooConfig.useRomanNumerals() ? Utils.convertArabicToRoman(level) : String.valueOf(level); + skillLevels.appendFreshSibling(new MooChatComponent.KeyValueTooltipComponent(skill, skillLevel)); if (level > highestLevel) { highestSkill = skill; highestLevel = level; } + if (!skill.equals("Carpentry") && !skill.equals("Runecrafting")) { + skillLevelsSum += level; + } } // output inspired by /profiles hover + + // coins: String coinsBankAndPurse = (activeProfile.getCoinBank() >= 0) ? Utils.formatNumberWithAbbreviations(activeProfile.getCoinBank() + member.getCoinPurse()) : "API access disabled"; Pair<String, String> fancyFirstJoined = member.getFancyFirstJoined(); @@ -399,6 +406,7 @@ public class MooCommand extends CommandBase { MooChatComponent sbStats = new MooChatComponent("SkyBlock stats of " + stalkedPlayer.getName() + " (" + activeProfile.getCuteName() + ")").gold().bold().setUrl("https://sky.lea.moe/stats/" + stalkedPlayer.getName() + "/" + activeProfile.getCuteName(), "Click to view SkyBlock stats on sky.lea.moe") .appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Coins", coinsBankAndPurse).setHover(wealthHover)); + // highest skill + skill average: if (highestSkill != null) { if (highestLevel == 0) { sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Highest Skill", "All skills level 0")); @@ -406,22 +414,93 @@ public class MooCommand extends CommandBase { String highestSkillLevel = MooConfig.useRomanNumerals() ? Utils.convertArabicToRoman(highestLevel) : String.valueOf(highestLevel); sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Highest Skill", highestSkill + " " + highestSkillLevel).setHover(skillLevels)); } + double skillAverage = XpTables.Skill.getSkillAverage(skillLevelsSum); + sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Skill average", String.format("%.1f", skillAverage)) + .setHover(new MooChatComponent("Average skill level over all non-cosmetic skills\n(all except Carpentry and Runecrafting)").gray())); } else { sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Highest Skill", "API access disabled")); } + // slayer levels: + StringBuilder slayerLevels = new StringBuilder(); + StringBuilder slayerLevelsTooltip = new StringBuilder(); + MooChatComponent slayerLevelsTooltipComponent = new MooChatComponent("Slayer bosses:").gold(); + for (Map.Entry<XpTables.Slayer, Integer> entry : member.getSlayerLevels().entrySet()) { + String slayerBoss = Utils.fancyCase(entry.getKey().name()); + if (slayerLevels.length() > 0) { + slayerLevels.append(EnumChatFormatting.GRAY).append(" | ").append(EnumChatFormatting.YELLOW); + slayerLevelsTooltip.append(EnumChatFormatting.DARK_GRAY).append(" | ").append(EnumChatFormatting.WHITE); + } + slayerLevelsTooltip.append(slayerBoss); + int level = entry.getValue(); + + String slayerLevel = (level > 0) ? (MooConfig.useRomanNumerals() ? Utils.convertArabicToRoman(level) : String.valueOf(level)) : "0"; + slayerLevels.append(slayerLevel); + } + MooChatComponent slayerLevelsComponent = new MooChatComponent.KeyValueChatComponent("Slayer levels", slayerLevels.toString()); + slayerLevelsComponent.setHover(slayerLevelsTooltipComponent.appendFreshSibling(new MooChatComponent(slayerLevelsTooltip.toString()).white())); + sbStats.appendFreshSibling(slayerLevelsComponent); + + // pets: + Pet activePet = null; + Pet bestPet = null; + StringBuilder pets = new StringBuilder(); + List<Pet> memberPets = member.getPets(); + int showPetsLimit = Math.min(16, memberPets.size()); + for (int i = 0; i < showPetsLimit; i++) { + Pet pet = memberPets.get(i); + if (pet.isActive()) { + activePet = pet; + } else { + if (activePet == null && bestPet == null && pets.length() == 0) { + // no active pet, display highest pet instead + bestPet = pet; + continue; + } else if (pets.length() > 0) { + pets.append("\n"); + } + pets.append(pet.toFancyString()); + } + } + int remainingPets = memberPets.size() - showPetsLimit; + if (remainingPets > 0 && pets.length() > 0) { + pets.append("\n").append(EnumChatFormatting.GRAY).append(" + ").append(remainingPets).append(" other pets"); + } + MooChatComponent petsComponent = null; + if (activePet != null) { + petsComponent = new MooChatComponent.KeyValueChatComponent("Active Pet", activePet.toFancyString()); + } else if (bestPet != null) { + petsComponent = new MooChatComponent.KeyValueChatComponent("Best Pet", bestPet.toFancyString()); + } + if (pets.length() > 0 && petsComponent != null) { + petsComponent.setHover(new MooChatComponent("Other pets:").gold().bold().appendFreshSibling(new MooChatComponent(pets.toString()))); + } + if (petsComponent == null) { + petsComponent = new MooChatComponent.KeyValueChatComponent("Pet", "none"); + } + sbStats.appendFreshSibling(petsComponent); + + // minions: Pair<Integer, Integer> uniqueMinionsData = activeProfile.getUniqueMinions(); String uniqueMinions = String.valueOf(uniqueMinionsData.first()); + String uniqueMinionsHoverText = null; if (uniqueMinionsData.second() > activeProfile.coopCount()) { // all players have their unique minions api access disabled uniqueMinions = "API access disabled"; } else if (uniqueMinionsData.second() > 0) { // at least one player has their unique minions api access disabled - uniqueMinions += " or more (" + uniqueMinionsData.second() + "/" + (activeProfile.coopCount() + 1) + " have their API access disabled)"; + uniqueMinions += EnumChatFormatting.GRAY + " or more"; + uniqueMinionsHoverText = "" + EnumChatFormatting.WHITE + uniqueMinionsData.second() + " out of " + (activeProfile.coopCount() + 1) + EnumChatFormatting.GRAY + " Co-op members have disabled API access, so some unique minions may be missing"; } - sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Unique Minions", uniqueMinions)); + MooChatComponent.KeyValueChatComponent uniqueMinionsComponent = new MooChatComponent.KeyValueChatComponent("Unique Minions", uniqueMinions); + if (uniqueMinionsHoverText != null) { + uniqueMinionsComponent.setHover(new MooChatComponent(uniqueMinionsHoverText).gray()); + } + sbStats.appendFreshSibling(uniqueMinionsComponent); + // fairy souls: sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Fairy Souls", (member.getFairySoulsCollected() >= 0) ? String.valueOf(member.getFairySoulsCollected()) : "API access disabled")); + // profile age: sbStats.appendFreshSibling(new MooChatComponent.KeyValueChatComponent("Profile age", fancyFirstJoined.first()).setHover(new MooChatComponent.KeyValueTooltipComponent("Join date", fancyFirstJoined.second()))); main.getChatHelper().sendMessage(sbStats); @@ -548,7 +627,7 @@ public class MooCommand extends CommandBase { public List<String> addTabCompletionOptions(ICommandSender sender, String[] args, BlockPos pos) { if (args.length == 1) { return getListOfStringsMatchingLastWord(args, - /* friends & other players */ "stalk", "stalkskyblock", "skyblockstalk", "analyzeIsland", "deaths", "add", "remove", "list", "nameChangeCheck", "toggle", + /* friends & other players */ "stalk", "askPolitelyWhereTheyAre", "stalkskyblock", "skyblockstalk", "askPolitelyAboutTheirSkyBlockProgress", "analyzeIsland", "deaths", "add", "remove", "list", "nameChangeCheck", "toggle", /* miscellaneous */ "config", "search", "guiscale", "rr", "shrug", "apikey", /* update mod */ "update", "updateHelp", "version", "directory", /* help */ "help"); |
