diff options
author | Cow <cow@volloeko.de> | 2021-01-02 03:21:27 +0100 |
---|---|---|
committer | Cow <cow@volloeko.de> | 2021-01-02 03:21:27 +0100 |
commit | f518b342c68d17b4a826984808995b51fe132517 (patch) | |
tree | 4b4feb32cce0b5b983252cb4d01dbfb08c9b83de | |
parent | a62c6c1484eaf7bd03110e34a7522ca87fd86a6d (diff) | |
download | Cowlection-f518b342c68d17b4a826984808995b51fe132517.tar.gz Cowlection-f518b342c68d17b4a826984808995b51fe132517.tar.bz2 Cowlection-f518b342c68d17b4a826984808995b51fe132517.zip |
Implemented feedback from 0.12.0 pre-release
- Dungeon Party Finder: only lookup party members after *successfully* joining a party
- Various small changes to several features
- Added a few more config options
10 files changed, 179 insertions, 86 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 78c0664..ff0a496 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [1.8.9-0.12.0] - unreleased ### Added -- New config options to enable/disable some features: +- New config options to change/adjust/deactivate some features: - Auto-replacement of `/r ` with `/w <last sender>` - Short alias `/m` for `/moo` command - Copy inventories to clipboard as JSON with <kbd>CTRL</kbd> + <kbd>C</kbs> + - (and several more - simply look through `/moo config`) - Added sound when a best friend comes online (deactivated by default) - Check how long current world has been loaded - ≈ when server was last restarted @@ -30,7 +31,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Made party indicators clearer (current, suitable, unideal, unjoinable party) - Show sizes of parties - Mark parties with 'carry' in their notes - - Lookup info when joining another party via Dungeon Party Finder (disabled by default) + - Lookup info when joining another party via Dungeon Party Finder - Added active pet + found dungeon secrets to dungeon player lookup ### Fixed diff --git a/src/main/java/de/cowtipper/cowlection/command/MooCommand.java b/src/main/java/de/cowtipper/cowlection/command/MooCommand.java index b5768fb..763a2c7 100644 --- a/src/main/java/de/cowtipper/cowlection/command/MooCommand.java +++ b/src/main/java/de/cowtipper/cowlection/command/MooCommand.java @@ -123,36 +123,56 @@ public class MooCommand extends CommandBase { } else if (args[0].equalsIgnoreCase("whatyearisit") || args[0].equalsIgnoreCase("year")) { long year = ((System.currentTimeMillis() - 1560275700000L) / (TimeUnit.HOURS.toMillis(124))) + 1; main.getChatHelper().sendMessage(EnumChatFormatting.YELLOW, "It is SkyBlock year " + EnumChatFormatting.GOLD + year + EnumChatFormatting.YELLOW + "."); - } else if (args[0].equalsIgnoreCase("worldage")) { - long worldTime = Minecraft.getMinecraft().theWorld.getWorldTime(); - new TickDelay(() -> { - WorldClient world = Minecraft.getMinecraft().theWorld; - if (world == null) { - return; + } else if (args[0].equalsIgnoreCase("worldage") || args[0].equalsIgnoreCase("serverage")) { + if (args.length == 2) { + boolean enable; + switch (args[1]) { + case "on": + case "enable": + enable = true; + break; + case "off": + case "disable": + enable = false; + break; + default: + main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Command usage: /" + getCommandName() + " worldage [on|off]"); + return; } - String msgPrefix; - long worldTime2 = world.getWorldTime(); - if (worldTime > worldTime2 || (worldTime2 - worldTime) < 15) { - // time is frozen - worldTime2 = world.getTotalWorldTime(); - msgPrefix = "World time seems to be frozen at around " + worldTime + " ticks. "; - if (worldTime2 > 24 * 60 * 60 * 20) { - // total world time >24h - main.getChatHelper().sendMessage(EnumChatFormatting.GOLD, msgPrefix + "However, how long this world is loaded cannot be determined."); + MooConfig.notifyServerAge = enable; + main.getChatHelper().sendMessage(EnumChatFormatting.GREEN, "✔ " + (enable ? EnumChatFormatting.DARK_GREEN + "Enabled" : EnumChatFormatting.RED + "Disabled") + EnumChatFormatting.GREEN + " world age notifications."); + main.getConfig().syncFromFields(); + } else { + long worldTime = Minecraft.getMinecraft().theWorld.getWorldTime(); + new TickDelay(() -> { + WorldClient world = Minecraft.getMinecraft().theWorld; + if (world == null) { return; } - msgPrefix += "However, this world is probably"; - } else { - msgPrefix = "This world is"; - } - long days = worldTime2 / 24000L + 1; - long minutes = days * 20; - long hours = minutes / 60; - minutes -= hours * 60; - - main.getChatHelper().sendMessage(EnumChatFormatting.YELLOW, msgPrefix + " loaded around " + EnumChatFormatting.GOLD + days + " ingame days " - + EnumChatFormatting.YELLOW + "(= less than" + EnumChatFormatting.GOLD + (hours > 0 ? " " + hours + " hours" : "") + (minutes > 0 ? " " + minutes + " mins" : "") + ")"); - }, 20); + String msgPrefix; + long worldTime2 = world.getWorldTime(); + if (worldTime > worldTime2 || (worldTime2 - worldTime) < 15) { + // time is frozen + worldTime2 = world.getTotalWorldTime(); + msgPrefix = "World time seems to be frozen at around " + worldTime + " ticks. "; + if (worldTime2 > 24 * 60 * 60 * 20) { + // total world time >24h + main.getChatHelper().sendMessage(EnumChatFormatting.GOLD, msgPrefix + "However, how long this world is loaded cannot be determined."); + return; + } + msgPrefix += "However, this world is probably"; + } else { + msgPrefix = "This world is"; + } + long days = worldTime2 / 24000L + 1; + long minutes = days * 20; + long hours = minutes / 60; + minutes -= hours * 60; + + main.getChatHelper().sendMessage(EnumChatFormatting.YELLOW, msgPrefix + " loaded around " + EnumChatFormatting.GOLD + days + " ingame days " + + EnumChatFormatting.YELLOW + "(= less than" + EnumChatFormatting.GOLD + (hours > 0 ? " " + hours + " hours" : "") + (minutes > 0 ? " " + minutes + " mins" : "") + ")"); + }, 20); + } } //endregion //region sub-commands: update mod @@ -812,6 +832,7 @@ public class MooCommand extends CommandBase { private void sendCommandUsage(ICommandSender sender) { IChatComponent usage = new MooChatComponent("➜ " + Cowlection.MODNAME + " commands:").gold().bold() .appendSibling(createCmdHelpEntry("config", "Open mod's configuration")) + .appendSibling(new MooChatComponent("\n").reset().white().appendText(EnumChatFormatting.DARK_GREEN + " ❢" + EnumChatFormatting.LIGHT_PURPLE + EnumChatFormatting.ITALIC + " To move the Dungeons overlay: " + EnumChatFormatting.WHITE + "/" + getCommandName() + " config " + EnumChatFormatting.GRAY + "➡ " + EnumChatFormatting.WHITE + "SB Dungeons " + EnumChatFormatting.GRAY + "➡ " + EnumChatFormatting.WHITE + "Performance Overlay")) .appendSibling(new MooChatComponent("\n").reset().gray().appendText(EnumChatFormatting.DARK_GREEN + " ❢" + EnumChatFormatting.GRAY + EnumChatFormatting.ITALIC + " Commands marked with §d§l⚷" + EnumChatFormatting.GRAY + EnumChatFormatting.ITALIC + " require a valid API key")) .appendSibling(createCmdHelpSection(1, "Best friends, friends & other players")) .appendSibling(createCmdHelpEntry("stalk", "Get info of player's status §d§l⚷")) @@ -861,7 +882,7 @@ public class MooCommand extends CommandBase { return getListOfStringsMatchingLastWord(args, /* Best friends, friends & other players */ "stalk", "add", "remove", "list", "online", "nameChangeCheck", /* SkyBlock */ "stalkskyblock", "skyblockstalk", "analyzeIsland", "dungeon", - /* miscellaneous */ "config", "search", "worldage", "guiscale", "rr", "shrug", "apikey", + /* miscellaneous */ "config", "search", "worldage", "serverage", "guiscale", "rr", "shrug", "apikey", /* update mod */ "update", "updateHelp", "version", "directory", /* help */ "help", /* rarely used aliases */ "askPolitelyWhereTheyAre", "askPolitelyAboutTheirSkyBlockProgress", "year", "whatyearisit"); @@ -869,6 +890,8 @@ public class MooCommand extends CommandBase { return getListOfStringsMatchingLastWord(args, main.getFriendsHandler().getBestFriends()); } else if (args.length == 2 && args[0].equalsIgnoreCase("dungeon")) { return getListOfStringsMatchingLastWord(args, "party", "enter", "leave"); + } else if (args.length == 2 && (args[0].equalsIgnoreCase("worldage") || args[0].equalsIgnoreCase("serverage"))) { + return getListOfStringsMatchingLastWord(args, "off", "on", "disable", "enable"); } String commandArg = args[0].toLowerCase(); if (args.length == 2 && (commandArg.equals("s") || commandArg.equals("ss") || commandArg.equals("namechangecheck") || commandArg.contains("stalk") || commandArg.contains("askpolitely"))) { // stalk & stalkskyblock + namechangecheck diff --git a/src/main/java/de/cowtipper/cowlection/config/MooConfig.java b/src/main/java/de/cowtipper/cowlection/config/MooConfig.java index 63856af..2510820 100644 --- a/src/main/java/de/cowtipper/cowlection/config/MooConfig.java +++ b/src/main/java/de/cowtipper/cowlection/config/MooConfig.java @@ -12,6 +12,7 @@ import de.cowtipper.cowlection.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.SoundCategory; import net.minecraft.command.ICommand; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagInt; import net.minecraft.nbt.NBTTagString; @@ -67,19 +68,23 @@ public class MooConfig { private static String enableSkyBlockOnlyFeatures; public static int notifyFreshServer; public static int notifyOldServer; + public static boolean notifyServerAge; public static int tooltipToggleKeyBinding; - private static String tooltipAuctionHousePriceEach; - private static String bazaarConnectGraphsNodes; private static String tooltipItemAge; public static boolean tooltipItemAgeShortened; private static String tooltipItemTimestamp; private static String numeralSystem; + private static String tooltipAuctionHousePriceEach; + private static String bazaarConnectGraphsNodes; + public static int bazaarConnectGraphsLineWidth; private static int lookupWikiKeyBinding; private static int lookupPriceKeyBinding; + public static boolean lookupItemDirectly; // Category: SkyBlock Dungeons private static String showItemQualityAndFloor; private static String dungItemQualityPos; public static int dungItemToolTipToggleKeyBinding; + public static boolean dungSendPerformanceOnDeath; public static boolean dungOverlayEnabled; public static int dungOverlayPositionX; public static int dungOverlayPositionY; @@ -313,6 +318,8 @@ public class MooConfig { "notifyFreshServer", 1, "Notify when a world is loaded <X ingame days", 0, 40)); Property propNotifyOldServer = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), "notifyOldServer", 30, "Notify when a world is loaded >X ingame days", 0, 40)); + Property propNotifyServerAge = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), + "notifyServerAge", true, "Show server age notifications?")); // Sub-Category: Tooltip enhancements subCat = configCat.addSubCategory("Tooltip enhancements"); @@ -320,21 +327,6 @@ public class MooConfig { Property propTooltipToggleKeyBinding = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), "tooltipToggleKeyBinding", Keyboard.KEY_LSHIFT, "Key to toggle tooltip")); - Property propTooltipAuctionHousePriceEach = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), - "tooltipAuctionHousePriceEach", "always", "Add price per item if multiple items are bought or sold", new String[]{"always", "key press", "never"})); - - MooConfigPreview bazaarGraphPreview = new MooConfigPreview(MooConfigPreview.createDemoItem("paper", "§aBuy Price §731d §77d §e24h", new String[]{ - "§7The price at which buy orders have been filled.", "", - "§r┌----------------------------------------------┐", "§r│§66. 1k§r+§bxxxxxx§8·································§bxx§r│", - "§r│§8····§r│§8······································§bx§8··§r│", "§r│§66. 1k§r+§8·····§bx§8···················§bx§8·······§bxxxxx§8···§r│", - "§r│§8····§r│§8···············§bx§8········§bxxxxxxxxx§8········§r│", "§r│§8··§66k§r+§8··············§bx§8····§bxx§8··§bx§8·················§r│", - "§r│§8····§r│§8············§bx§8··§bxxxx§8·§bxxx§8··················§r│", "§r│§8··§66k§r+§8······§bx§8·§bxxxx§8·§bx§8···························§r│", - "§r│§8····§r│§8·······§bx§8·································§r│", "§r│§8··§66k§r+---------+----------+---------+---------+│", - "§r│§8····§r24h§8······§r18h§8········§r12h§8·······§r6h§8·······§rnow│", "§r└----------------------------------------------┘"}, Maps.newHashMap())); - Property propBazaarConnectGraphsNodes = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), - "bazaarConnectGraphsNodes", "always", "Bazaar: connect the graph nodes", new String[]{"always", "key press", "never"}), - bazaarGraphPreview); - Map<String, NBTBase> demoItemExtraAttributes = new HashMap<>(); demoItemExtraAttributes.put("new_years_cake", new NBTTagInt(1)); demoItemExtraAttributes.put("originTag", new NBTTagString("REWARD_NEW_YEARS_CAKE_NPC")); @@ -356,6 +348,29 @@ public class MooConfig { Property propNumeralSystem = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), "numeralSystem", "Arabic: 1, 4, 10", "Use Roman or Arabic numeral system?", new String[]{"Arabic: 1, 4, 10", "Roman: I, IV, X"})); + Map<String, NBTBase> demoAhItemExtraAttributes = new HashMap<>(); + demoItemExtraAttributes.put("id", new NBTTagString("BEACON")); + ItemStack demoAhItem = MooConfigPreview.createDemoItem("beacon", "§764x §fB§8e§facon Block", new String[]{"§f§lCOMMON", "§8§m-----------------", "§7Seller: §6[MVP§0++§6] Enlightener", "§7Buy it now: §63,900,000 coins", "", "§7Ends in: §e13h 33m 37s", "", "§eDon't click to inspect!"}, demoAhItemExtraAttributes); + demoAhItem.stackSize = 64; + MooConfigPreview ahItemPreview = new MooConfigPreview(demoAhItem); + Property propTooltipAuctionHousePriceEach = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), + "tooltipAuctionHousePriceEach", "always", "Add price per item if multiple items are bought or sold", new String[]{"always", "key press", "never"}), ahItemPreview); + + MooConfigPreview bazaarGraphPreview = new MooConfigPreview(MooConfigPreview.createDemoItem("paper", "§aBuy Price §731d §77d §e24h", new String[]{ + "§7The price at which buy orders have been filled.", "", + "§r┌----------------------------------------------┐", "§r│§66. 1k§r+§bxxxxxx§8·································§bxx§r│", + "§r│§8····§r│§8······································§bx§8··§r│", "§r│§66. 1k§r+§8·····§bx§8···················§bx§8·······§bxxxxx§8···§r│", + "§r│§8····§r│§8···············§bx§8········§bxxxxxxxxx§8········§r│", "§r│§8··§66k§r+§8··············§bx§8····§bxx§8··§bx§8·················§r│", + "§r│§8····§r│§8············§bx§8··§bxxxx§8·§bxxx§8··················§r│", "§r│§8··§66k§r+§8······§bx§8·§bxxxx§8·§bx§8···························§r│", + "§r│§8····§r│§8·······§bx§8·································§r│", "§r│§8··§66k§r+---------+----------+---------+---------+│", + "§r│§8····§r24h§8······§r18h§8········§r12h§8·······§r6h§8·······§rnow│", "§r└----------------------------------------------┘"}, Maps.newHashMap())); + Property propBazaarConnectGraphsNodes = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), + "bazaarConnectGraphsNodes", "always", "Bazaar: connect the graph nodes", new String[]{"always", "key press", "never"}), + bazaarGraphPreview); + + Property propBazaarConnectGraphsLineWidth = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), + "bazaarConnectGraphsLineWidth", 3, "Line width of bazaar graph", 1, 10)); + // Sub-Category: Item lookup subCat = configCat.addSubCategory("Item lookup"); subCat.addExplanations("Lookup item prices or wiki articles for any SkyBlock item in any inventory."); @@ -365,6 +380,9 @@ public class MooConfig { Property propLookupPriceKeyBinding = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), "lookupPriceKeyBinding", Keyboard.KEY_P, "Key to lookup item price")); + Property propLookupItemDirectly = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), + "lookupItemDirectly", true, "Open website directly?")); + // Category: SkyBlock Dungeons configCat = new MooConfigCategory("SkyBlock Dungeons", "skyblockdungeons"); configCat.setMenuDisplayName("SB Dungeons"); @@ -402,6 +420,9 @@ public class MooConfig { " ‣ bonus score " + EnumChatFormatting.GRAY + "(+1 [max 5] for each destroyed crypt; if 'enhanced tab list' is disabled: limited to ~50 blocks away from the player)", "Does " + EnumChatFormatting.ITALIC + "not" + EnumChatFormatting.RESET + " track explorer score " + EnumChatFormatting.GRAY + "(explored rooms, secrets, ...)"); + Property propDungSendPerformanceOnDeath = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), + "dungSendPerformanceOnDeath", true, "Send dungeon performance after a player died?")); + Property propDungOverlayEnabled = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), "dungOverlayEnabled", true, "Enable Dungeon performance overlay?")); @@ -449,7 +470,7 @@ public class MooConfig { "dungPartyFinderPlayerLookup", "as a tooltip", "Show armor + dungeons stats of player joining via party finder as a tooltip or in chat?", new String[]{"as a tooltip", "in chat", "disabled"})); Property propDungPartyFinderPartyLookup = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), - "dungPartyFinderPartyLookup", false, "Lookup info when joining another party?")); + "dungPartyFinderPartyLookup", true, "Lookup info when joining another party?")); Property propDungPartiesSize = subCat.addConfigEntry(cfg.get(configCat.getConfigName(), "dungPartiesSize", true, "Show size of parties?"), @@ -509,19 +530,23 @@ public class MooConfig { enableSkyBlockOnlyFeatures = propEnableSkyBlockOnlyFeatures.getString(); notifyFreshServer = propNotifyFreshServer.getInt(); notifyOldServer = propNotifyOldServer.getInt(); + notifyServerAge = propNotifyServerAge.getBoolean(); tooltipToggleKeyBinding = propTooltipToggleKeyBinding.getInt(); - tooltipAuctionHousePriceEach = propTooltipAuctionHousePriceEach.getString(); - bazaarConnectGraphsNodes = propBazaarConnectGraphsNodes.getString(); tooltipItemAge = propTooltipItemAge.getString(); tooltipItemAgeShortened = propTooltipItemAgeShortened.getBoolean(); tooltipItemTimestamp = propTooltipItemTimestamp.getString(); numeralSystem = propNumeralSystem.getString(); + tooltipAuctionHousePriceEach = propTooltipAuctionHousePriceEach.getString(); + bazaarConnectGraphsNodes = propBazaarConnectGraphsNodes.getString(); + bazaarConnectGraphsLineWidth = propBazaarConnectGraphsLineWidth.getInt(); lookupWikiKeyBinding = propLookupWikiKeyBinding.getInt(); lookupPriceKeyBinding = propLookupPriceKeyBinding.getInt(); + lookupItemDirectly = propLookupItemDirectly.getBoolean(); // Category: SkyBlock Dungeons showItemQualityAndFloor = propShowItemQualityAndFloor.getString(); dungItemQualityPos = propDungItemQualityPos.getString(); dungItemToolTipToggleKeyBinding = propDungItemToolTipToggleKeyBinding.getInt(); + dungSendPerformanceOnDeath = propDungSendPerformanceOnDeath.getBoolean(); dungOverlayEnabled = propDungOverlayEnabled.getBoolean(); dungOverlayPositionX = propDungOverlayPositionX.getInt(); dungOverlayPositionY = propDungOverlayPositionY.getInt(); @@ -566,19 +591,23 @@ public class MooConfig { propEnableSkyBlockOnlyFeatures.set(enableSkyBlockOnlyFeatures); propNotifyFreshServer.set(notifyFreshServer); propNotifyOldServer.set(notifyOldServer); + propNotifyServerAge.set(notifyServerAge); propTooltipToggleKeyBinding.set(tooltipToggleKeyBinding); - propTooltipAuctionHousePriceEach.set(tooltipAuctionHousePriceEach); - propBazaarConnectGraphsNodes.set(bazaarConnectGraphsNodes); propTooltipItemAge.set(tooltipItemAge); propTooltipItemAgeShortened.set(tooltipItemAgeShortened); propTooltipItemTimestamp.set(tooltipItemTimestamp); propNumeralSystem.set(numeralSystem); + propTooltipAuctionHousePriceEach.set(tooltipAuctionHousePriceEach); + propBazaarConnectGraphsNodes.set(bazaarConnectGraphsNodes); + propBazaarConnectGraphsLineWidth.set(bazaarConnectGraphsLineWidth); propLookupWikiKeyBinding.set(lookupWikiKeyBinding); propLookupPriceKeyBinding.set(lookupPriceKeyBinding); + propLookupItemDirectly.set(lookupItemDirectly); // Category: SkyBlock Dungeons propShowItemQualityAndFloor.set(showItemQualityAndFloor); propDungItemQualityPos.set(dungItemQualityPos); propDungItemToolTipToggleKeyBinding.set(dungItemToolTipToggleKeyBinding); + propDungSendPerformanceOnDeath.set(dungSendPerformanceOnDeath); propDungOverlayEnabled.set(dungOverlayEnabled); propDungOverlayPositionX.set(dungOverlayPositionX); propDungOverlayPositionY.set(dungOverlayPositionY); diff --git a/src/main/java/de/cowtipper/cowlection/handler/DungeonCache.java b/src/main/java/de/cowtipper/cowlection/handler/DungeonCache.java index e06ba7d..cfacd9d 100644 --- a/src/main/java/de/cowtipper/cowlection/handler/DungeonCache.java +++ b/src/main/java/de/cowtipper/cowlection/handler/DungeonCache.java @@ -3,6 +3,8 @@ package de.cowtipper.cowlection.handler; import com.google.common.collect.ComparisonChain; import com.google.common.collect.Ordering; import de.cowtipper.cowlection.Cowlection; +import de.cowtipper.cowlection.config.MooConfig; +import de.cowtipper.cowlection.listener.skyblock.DungeonsPartyListener; import de.cowtipper.cowlection.util.TickDelay; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiPlayerTabOverlay; @@ -33,6 +35,7 @@ public class DungeonCache { private long lastScoreboardCheck; private long nextPerformanceSend; private String queuedFloor; + private List<String> potentialPartyMembers; public DungeonCache(Cowlection main) { this.main = main; @@ -156,7 +159,18 @@ public class DungeonCache { } } + public void lookupPartyMembers() { + if (potentialPartyMembers.size() > 0) { + new DungeonsPartyListener(main, potentialPartyMembers); + potentialPartyMembers.clear(); + } + } + // setter/adder + public void setPotentialPartyMembers(List<String> potentialPartyMembers) { + this.potentialPartyMembers = potentialPartyMembers; + } + public void setQueuedFloor(String floorNr) { this.queuedFloor = floorNr; } @@ -170,7 +184,9 @@ public class DungeonCache { int previousPlayerDeaths = deathCounter.getOrDefault(playerName, 0); deathCounter.put(playerName, previousPlayerDeaths + 1); - new TickDelay(this::sendDungeonPerformance, 1); + if (MooConfig.dungSendPerformanceOnDeath) { + new TickDelay(this::sendDungeonPerformance, 1); + } } public void revivedPlayer(String playerName) { diff --git a/src/main/java/de/cowtipper/cowlection/listener/ChatListener.java b/src/main/java/de/cowtipper/cowlection/listener/ChatListener.java index 43f49fe..0240938 100644 --- a/src/main/java/de/cowtipper/cowlection/listener/ChatListener.java +++ b/src/main/java/de/cowtipper/cowlection/listener/ChatListener.java @@ -176,11 +176,16 @@ public class ChatListener { messageSender = partyOrGameInviteMatcher.group(1); } else if (dungeonPartyFinderJoinedMatcher.find()) { messageSender = dungeonPartyFinderJoinedMatcher.group(1); - if (CredentialStorage.isMooValid && !messageSender.equals(Minecraft.getMinecraft().thePlayer.getName()) - && MooConfig.getDungPartyFinderPlayerLookupDisplay() != MooConfig.Setting.DISABLED) { - // another player joined via Dungeon Party Finder - String dungeonClass = dungeonPartyFinderJoinedMatcher.group(2) + " Lvl " + dungeonPartyFinderJoinedMatcher.group(3); - getDungeonPartyMemberDetails(messageSender, dungeonClass); + if (CredentialStorage.isMooValid) { + boolean joinedYourself = messageSender.equals(Minecraft.getMinecraft().thePlayer.getName()); + if (!joinedYourself && MooConfig.getDungPartyFinderPlayerLookupDisplay() != MooConfig.Setting.DISABLED) { + // another player joined via Dungeon Party Finder + String dungeonClass = dungeonPartyFinderJoinedMatcher.group(2) + " Lvl " + dungeonPartyFinderJoinedMatcher.group(3); + getDungeonPartyMemberDetails(messageSender, dungeonClass); + } else if (joinedYourself && MooConfig.dungPartyFinderPartyLookup) { + // successfully joined another party via Dungeon Party Finder + main.getDungeonCache().lookupPartyMembers(); + } } } diff --git a/src/main/java/de/cowtipper/cowlection/listener/PlayerListener.java b/src/main/java/de/cowtipper/cowlection/listener/PlayerListener.java index 31d2d73..5e1ad0b 100644 --- a/src/main/java/de/cowtipper/cowlection/listener/PlayerListener.java +++ b/src/main/java/de/cowtipper/cowlection/listener/PlayerListener.java @@ -188,7 +188,7 @@ public class PlayerListener { private void checkWorldAge() { WorldClient theWorld = Minecraft.getMinecraft().theWorld; - if (MooConfig.notifyFreshServer == 0 && MooConfig.notifyOldServer == 0 || theWorld == null) { + if (!MooConfig.notifyServerAge || MooConfig.notifyFreshServer == 0 && MooConfig.notifyOldServer == 0 || theWorld == null) { return; } long worldTime = theWorld.getWorldTime(); diff --git a/src/main/java/de/cowtipper/cowlection/listener/skyblock/DungeonsListener.java b/src/main/java/de/cowtipper/cowlection/listener/skyblock/DungeonsListener.java index 5a65a36..27da9f0 100644 --- a/src/main/java/de/cowtipper/cowlection/listener/skyblock/DungeonsListener.java +++ b/src/main/java/de/cowtipper/cowlection/listener/skyblock/DungeonsListener.java @@ -501,9 +501,7 @@ public class DungeonsListener { partyMembers.add(playerDetailMatcher.group(1)); } } - if (partyMembers.size() > 0) { - new DungeonsPartyListener(main, partyMembers); - } + main.getDungeonCache().setPotentialPartyMembers(partyMembers); } } } else if (inventory.getName().equals("Group Builder")) { diff --git a/src/main/java/de/cowtipper/cowlection/listener/skyblock/SkyBlockListener.java b/src/main/java/de/cowtipper/cowlection/listener/skyblock/SkyBlockListener.java index a8103bf..b53ef24 100644 --- a/src/main/java/de/cowtipper/cowlection/listener/skyblock/SkyBlockListener.java +++ b/src/main/java/de/cowtipper/cowlection/listener/skyblock/SkyBlockListener.java @@ -5,6 +5,7 @@ import de.cowtipper.cowlection.Cowlection; import de.cowtipper.cowlection.config.MooConfig; import de.cowtipper.cowlection.config.gui.MooConfigGui; import de.cowtipper.cowlection.util.GuiHelper; +import de.cowtipper.cowlection.util.MooChatComponent; import de.cowtipper.cowlection.util.Utils; import net.minecraft.client.Minecraft; import net.minecraft.client.audio.SoundCategory; @@ -31,6 +32,7 @@ import org.apache.commons.lang3.StringUtils; import org.lwjgl.input.Keyboard; import java.awt.*; +import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; import java.text.NumberFormat; @@ -102,12 +104,20 @@ public class SkyBlockListener { } else if ("CAKE_SOUL".equals(sbId)) { itemBaseName = EnumChatFormatting.LIGHT_PURPLE + "Cake Soul"; } + String link = buildLink(EnumChatFormatting.getTextWithoutFormattingCodes(itemBaseName).trim() + querySuffix, itemLookupType); + if (link == null) { + main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Error: Your operating system doesn't support UTF-8? Huh?"); + return; + } + main.getChatHelper().sendMessage(new MooChatComponent(EnumChatFormatting.DARK_GREEN + " ➡ " + + EnumChatFormatting.GREEN + "Open" + (MooConfig.lookupItemDirectly ? "ing " : " ") + itemLookupType.getDescription() + " for " + itemBaseName).green() + .setUrl(link, itemLookupType.description + ": " + EnumChatFormatting.WHITE + link)); - main.getChatHelper().sendMessage(EnumChatFormatting.GREEN, "Opening " + itemLookupType.getDescription() + " for " + itemBaseName); - boolean success = openLink(EnumChatFormatting.getTextWithoutFormattingCodes(itemBaseName).trim() + querySuffix, itemLookupType); - if (!success) { - main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Error: couldn't open your browser"); - Minecraft.getMinecraft().thePlayer.playSound("mob.villager.no", Minecraft.getMinecraft().gameSettings.getSoundLevel(SoundCategory.MASTER), 1.4f); + if (MooConfig.lookupItemDirectly) { + boolean success = openLink(link); + if (!success) { + main.getChatHelper().sendMessage(EnumChatFormatting.RED, "Error: couldn't open your browser"); + } } } else { // item is blacklisted from lookup @@ -154,12 +164,9 @@ public class SkyBlockListener { // remove unnecessary tooltip entries: dyed leather armor NBTTagCompound nbtDisplay = e.itemStack.getSubCompound("display", false); - if (nbtDisplay != null && nbtDisplay.hasKey("color", Constants.NBT.TAG_INT)) { - if (Minecraft.getMinecraft().gameSettings.advancedItemTooltips) { - e.toolTip.removeIf(line -> line.startsWith("Color: #")); - } else { - e.toolTip.removeIf(line -> line.equals(EnumChatFormatting.ITALIC + StatCollector.translateToLocal("item.dyed"))); - } + if (!Minecraft.getMinecraft().gameSettings.advancedItemTooltips + && nbtDisplay != null && nbtDisplay.hasKey("color", Constants.NBT.TAG_INT)) { + e.toolTip.removeIf(line -> line.equals(EnumChatFormatting.ITALIC + StatCollector.translateToLocal("item.dyed"))); } // remove unnecessary tooltip entries: enchantments (already added via lore) @@ -218,7 +225,7 @@ public class SkyBlockListener { // for auction house: show price for each item if multiple items are sold at once MooConfig.Setting tooltipAuctionHousePriceEachDisplay = MooConfig.getTooltipAuctionHousePriceEachDisplay(); if ((tooltipAuctionHousePriceEachDisplay == MooConfig.Setting.ALWAYS || tooltipAuctionHousePriceEachDisplay == MooConfig.Setting.SPECIAL && MooConfig.isTooltipToggleKeyBindingPressed()) - && e.entityPlayer.openContainer instanceof ContainerChest) { + && (e.entityPlayer.openContainer instanceof ContainerChest || Minecraft.getMinecraft().currentScreen instanceof MooConfigGui)) { int stackSize = e.itemStack.stackSize; if ((stackSize == 1 && !isSubmitBidItem(e.itemStack)) || e.toolTip.size() < 4) { // only 1 item or irrelevant tooltip - nothing to do here, abort! @@ -262,15 +269,20 @@ public class SkyBlockListener { } } - private boolean openLink(String itemName, ItemLookupType itemLookupType) { - String baseUrl = itemLookupType.getBaseUrl(); + private String buildLink(String itemName, ItemLookupType itemLookupType) { + try { + return itemLookupType.getBaseUrl() + URLEncoder.encode(itemName, "UTF-8"); + } catch (UnsupportedEncodingException ignored) { + } + return null; + } + + private boolean openLink(String link) { try { - String url = baseUrl + URLEncoder.encode(itemName, "UTF-8"); - Desktop.getDesktop().browse(new URI(url)); - main.getLogger().info("Opening url: " + url); + Desktop.getDesktop().browse(new URI(link)); return true; } catch (Throwable throwable) { - main.getLogger().error("Couldn't open link: " + baseUrl + itemName, throwable); + main.getLogger().error("Couldn't open link: " + link, throwable); return false; } } diff --git a/src/main/java/de/cowtipper/cowlection/util/GuiHelper.java b/src/main/java/de/cowtipper/cowlection/util/GuiHelper.java index decc579..fdaa9dc 100644 --- a/src/main/java/de/cowtipper/cowlection/util/GuiHelper.java +++ b/src/main/java/de/cowtipper/cowlection/util/GuiHelper.java @@ -1,5 +1,6 @@ package de.cowtipper.cowlection.util; +import de.cowtipper.cowlection.config.MooConfig; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.Gui; @@ -124,7 +125,7 @@ public final class GuiHelper extends GuiScreen { */ private void drawHoveringText(List<String> textLines, final int mouseX, final int mouseY, final int screenWidth, final int screenHeight, final int maxTextWidth, boolean drawGraph) { if (!textLines.isEmpty()) { - FontRenderer font = fontRendererAscii != null ? fontRendererAscii : fontRendererObj; + FontRenderer font = (drawGraph && fontRendererAscii != null) ? fontRendererAscii : fontRendererObj; GlStateManager.disableRescaleNormal(); RenderHelper.disableStandardItemLighting(); @@ -267,7 +268,7 @@ public final class GuiHelper extends GuiScreen { if (drawGraph) { GlStateManager.pushMatrix(); GlStateManager.clear(GL11.GL_DEPTH_BUFFER_BIT); - GL11.glLineWidth(6F); + GL11.glLineWidth(MooConfig.bazaarConnectGraphsLineWidth); GlStateManager.disableTexture2D(); GlStateManager.color(255 / 255F, 170 / 255F, 0 / 255F); WorldRenderer wr = Tessellator.getInstance().getWorldRenderer(); diff --git a/src/main/resources/assets/cowlection/lang/en_US.lang b/src/main/resources/assets/cowlection/lang/en_US.lang index fc8b2e0..53af4a0 100644 --- a/src/main/resources/assets/cowlection/lang/en_US.lang +++ b/src/main/resources/assets/cowlection/lang/en_US.lang @@ -36,12 +36,10 @@ cowlection.config.notifyFreshServer=Notify when world is loaded <X days cowlection.config.notifyFreshServer.tooltip=Notify when entering a world that has been loaded less than X ingame days ago.\n§eSet to 0 to disable notifications! cowlection.config.notifyOldServer=Notify when server restarted ≥X days ago cowlection.config.notifyOldServer.tooltip=Notify when joining a server that hasn't restarted for X ingame days.\n§eSet to 0 to disable notifications! +cowlection.config.notifyServerAge=Show server age notifications? +cowlection.config.notifyServerAge.tooltip=Overrides the two settings above.\n§7This setting can also be changed with §e/moo worldage <on|off> cowlection.config.tooltipToggleKeyBinding=Key binding: toggle tooltip cowlection.config.tooltipToggleKeyBinding.tooltip=Hold down this key to toggle tooltip if one of the following settings is set to 'key press'\n\n§7§odisable key binding: §e§oset key binding to §lESC -cowlection.config.tooltipAuctionHousePriceEach=§7Auction house: §rprice per item -cowlection.config.tooltipAuctionHousePriceEach.tooltip=Add price per item if multiple items are bought or sold? -cowlection.config.bazaarConnectGraphsNodes=§7Bazaar: §rconnect the graph nodes -cowlection.config.bazaarConnectGraphsNodes.tooltip=Draw a line through the bazaar graphs' nodes?\n§7§oThis also (tries to) fix the graphs when using the MC unicode font. cowlection.config.tooltipItemAge=Show item age cowlection.config.tooltipItemAge.tooltip=Show item age? Only works for non-stackable items cowlection.config.tooltipItemAgeShortened=Shorten item age? @@ -50,16 +48,26 @@ cowlection.config.tooltipItemTimestamp=Show item creation date cowlection.config.tooltipItemTimestamp.tooltip=Show item creation date? Only works for non-stackable items cowlection.config.numeralSystem=Numeral system cowlection.config.numeralSystem.tooltip=Use Roman or Arabic numeral system?\nThis is currently used to display numbers in the commands /moo stalkSkyBlock and /moo analyzeIsland +cowlection.config.tooltipAuctionHousePriceEach=§7Auction house: §rprice per item +cowlection.config.tooltipAuctionHousePriceEach.tooltip=Add price per item if multiple items are bought or sold? +cowlection.config.bazaarConnectGraphsNodes=§7Bazaar: §rconnect the graph nodes +cowlection.config.bazaarConnectGraphsNodes.tooltip=Draw a line through the nodes of the bazaar graphs?\n§7§oThis also (tries to) fix the graphs when using the MC unicode font. +cowlection.config.bazaarConnectGraphsLineWidth=§7Bazaar: §rline width +cowlection.config.bazaarConnectGraphsLineWidth.tooltip=Width of the line drawn through the nodes of the bazaar graphs? cowlection.config.lookupWikiKeyBinding=Key binding: lookup item wiki cowlection.config.lookupWikiKeyBinding.tooltip=Hover over an item in any inventory and press keybinding to open the item's wiki article.\n§7§oAccesses §e§ohypixel-skyblock.fandom.com\n§7§odefault key: §e§oI = info\n\n§7§odisable key binding: §e§oset key binding to §lESC cowlection.config.lookupPriceKeyBinding=Key binding: lookup item price cowlection.config.lookupPriceKeyBinding.tooltip=Hover over an item in any inventory and press keybinding to open the item's price details.\n§7§oAccesses §e§ostonks.gg\n§7§odefault key: §e§oP = price\n\n§7§odisable key binding: §e§oset key binding to §lESC +cowlection.config.lookupItemDirectly=Open website directly? +cowlection.config.lookupItemDirectly.tooltip=Should the corresponding website be opened immediately (§a✔§r) or sent as a chat message (§c✘§r)? cowlection.config.showItemQualityAndFloor=Show item quality + obtained floor cowlection.config.showItemQualityAndFloor.tooltip=Should the item quality (in %%) and the obtained floor be added to the dungeon items' tooltips?\n§e'top' replaces the default 'gear score' entry §rwhich normally includes reforges and essence upgrades. cowlection.config.dungItemQualityPos=Item quality + obtained floor position cowlection.config.dungItemQualityPos.tooltip=Position of item quality and otained floor in dungeon item tooltips cowlection.config.dungItemToolTipToggleKeyBinding=Key binding: Show dungeon item base stats cowlection.config.dungItemToolTipToggleKeyBinding.tooltip=Hold down this key to toggle dungeon item tooltip.\nDisplays the base stats of an item without reforges and without essence upgrades.\n\n§7§odisable key binding: §e§oset key binding to §lESC +cowlection.config.dungSendPerformanceOnDeath=Send player deaths overview after each death? +cowlection.config.dungSendPerformanceOnDeath.tooltip=Send an overview of the §enumber of deaths of each player §rand minus points due to failed puzzles §eeach time a player dies? cowlection.config.dungOverlayEnabled=Show overlay inside dungeons? cowlection.config.dungOverlayEnabled.tooltip=Show the performance overlay while inside a dungeon? cowlection.config.dungOverlayPositionX=Overlay x position (⇦/⇨ keys to fine-tune) |