From 3c1d534472fbd83a24799a3df7ce7c80c764597e Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 1 Dec 2023 12:16:14 +0100 Subject: Add support for hidden bingo tips. --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 2 +- .../java/at/hannibal2/skyhanni/data/BingoAPI.kt | 19 -------- .../java/at/hannibal2/skyhanni/data/HypixelData.kt | 1 + .../hannibal2/skyhanni/features/bingo/BingoAPI.kt | 22 +++++++++ .../skyhanni/features/bingo/BingoCardDisplay.kt | 49 +++++++++++++++++--- .../skyhanni/features/bingo/BingoCardTips.kt | 54 +++++++++++++--------- .../misc/compacttablist/AdvancedPlayerList.kt | 4 +- 7 files changed, 101 insertions(+), 50 deletions(-) delete mode 100644 src/main/java/at/hannibal2/skyhanni/data/BingoAPI.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/bingo/BingoAPI.kt (limited to 'src/main/java') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 0e2e49a9b..5d4f61e44 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -8,7 +8,6 @@ import at.hannibal2.skyhanni.config.Features import at.hannibal2.skyhanni.config.SackData import at.hannibal2.skyhanni.config.commands.Commands.init import at.hannibal2.skyhanni.data.ActionBarStatsData -import at.hannibal2.skyhanni.data.BingoAPI import at.hannibal2.skyhanni.data.BlockData import at.hannibal2.skyhanni.data.ChatManager import at.hannibal2.skyhanni.data.CropAccessoryData @@ -53,6 +52,7 @@ import at.hannibal2.skyhanni.features.bazaar.BazaarBestSellMethod import at.hannibal2.skyhanni.features.bazaar.BazaarCancelledBuyOrderClipboard import at.hannibal2.skyhanni.features.bazaar.BazaarOpenPriceWebsite import at.hannibal2.skyhanni.features.bazaar.BazaarOrderHelper +import at.hannibal2.skyhanni.features.bingo.BingoAPI import at.hannibal2.skyhanni.features.bingo.BingoCardDisplay import at.hannibal2.skyhanni.features.bingo.BingoCardTips import at.hannibal2.skyhanni.features.bingo.BingoNextStepHelper diff --git a/src/main/java/at/hannibal2/skyhanni/data/BingoAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/BingoAPI.kt deleted file mode 100644 index 5ba6c84dd..000000000 --- a/src/main/java/at/hannibal2/skyhanni/data/BingoAPI.kt +++ /dev/null @@ -1,19 +0,0 @@ -package at.hannibal2.skyhanni.data - -import at.hannibal2.skyhanni.events.RepositoryReloadEvent -import at.hannibal2.skyhanni.data.jsonobjects.repo.BingoRanksJson -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent - -object BingoAPI { - private var ranks = mapOf() - - @SubscribeEvent - fun onRepoReload(event: RepositoryReloadEvent) { - ranks = event.getConstant("BingoRanks").ranks - } - - fun getRank(text: String) = ranks.entries.find { text.contains(it.key) }?.value - - fun getIcon(searchRank: Int) = ranks.entries.find { it.value == searchRank }?.key - -} diff --git a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt index aa78bec09..1b0b46352 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt @@ -7,6 +7,7 @@ import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.events.ProfileJoinEvent +import at.hannibal2.skyhanni.features.bingo.BingoAPI import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoAPI.kt new file mode 100644 index 000000000..6941e7f57 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoAPI.kt @@ -0,0 +1,22 @@ +package at.hannibal2.skyhanni.features.bingo + +import at.hannibal2.skyhanni.data.jsonobjects.repo.BingoJson +import at.hannibal2.skyhanni.data.jsonobjects.repo.BingoRanksJson +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object BingoAPI { + private var ranks = mapOf() + var tips: Map = emptyMap() + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + ranks = event.getConstant("BingoRanks").ranks + tips = event.getConstant("Bingo").bingo_tips + } + + fun getRank(text: String) = ranks.entries.find { text.contains(it.key) }?.value + + fun getIcon(searchRank: Int) = ranks.entries.find { it.value == searchRank }?.key + +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoCardDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoCardDisplay.kt index 8951272c1..d6d84ff82 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoCardDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoCardDisplay.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.features.bingo import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator +import at.hannibal2.skyhanni.data.jsonobjects.repo.BingoJson.BingoTip import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent @@ -81,6 +82,8 @@ class BingoCardDisplay { } } + private fun BingoTip.getDescriptionLine() = "§7" + note.joinToString(" ") + @SubscribeEvent fun onInventoryOpen(event: InventoryFullyOpenedEvent) { if (!LorenzUtils.isBingoProfile) return @@ -90,9 +93,9 @@ class BingoCardDisplay { personalGoals.clear() communityGoals.clear() for (stack in event.inventoryItems.values) { - val personalGoal = stack.getLore().any { it.endsWith("Personal Goal") } - val communityGoal = stack.getLore().any { it.endsWith("Community Goal") } - if (!personalGoal && !communityGoal) continue + val isPersonalGoal = stack.getLore().any { it.endsWith("Personal Goal") } + val isCommunityGoal = stack.getLore().any { it.endsWith("Community Goal") } + if (!isPersonalGoal && !isCommunityGoal) continue val name = stack.name?.removeColor() ?: continue val lore = stack.getLore() var index = 0 @@ -114,15 +117,49 @@ class BingoCardDisplay { } val done = stack.getLore().any { it.contains("GOAL REACHED") } - if (personalGoal) { - personalGoals.add(PersonalGoal(name, description, done)) + if (isPersonalGoal) { + personalGoals.add(getPersonalGoal(name, description, done)) } else { - communityGoals.add(CommunityGoal(name, description, done)) + communityGoals.add(getCommunityGoal(name, description, done)) } } lastBingoCardOpenTime = SimpleTimeMark.now() update() + for (goal in personalGoals) { + println("goal.displayName: '${goal.displayName}' - ${goal.description}") + } + } + + private fun getPersonalGoal( + name: String, + description: String, + done: Boolean + ): PersonalGoal { + var personalGoal = PersonalGoal(name, description, done) + if (!done) { + personalHiddenGoalPattern.matchMatcher(description) { + BingoAPI.tips[name]?.let { + personalGoal = PersonalGoal(name, it.getDescriptionLine(), false) + } + } + } + return personalGoal + } + + private fun getCommunityGoal( + name: String, + description: String, + done: Boolean + ): CommunityGoal { + if (!done) { + if (description == "§7This goal will be revealed §7when it hits Tier IV.") { + BingoAPI.tips[name]?.let { + return CommunityGoal(name, it.getDescriptionLine(), false) + } + } + } + return CommunityGoal(name, description, done) } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoCardTips.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoCardTips.kt index 2486166a5..22925b405 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoCardTips.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/BingoCardTips.kt @@ -1,44 +1,52 @@ package at.hannibal2.skyhanni.features.bingo import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.jsonobjects.repo.BingoJson.BingoTip import at.hannibal2.skyhanni.events.GuiContainerEvent -import at.hannibal2.skyhanni.events.RepositoryReloadEvent import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.getOrNull import at.hannibal2.skyhanni.utils.RenderUtils.highlight import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import at.hannibal2.skyhanni.data.jsonobjects.repo.BingoJson -import at.hannibal2.skyhanni.data.jsonobjects.repo.BingoJson.BingoTip import net.minecraft.inventory.ContainerChest import net.minecraftforge.event.entity.player.ItemTooltipEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class BingoCardTips { - private var tips: Map = emptyMap() - - @SubscribeEvent - fun onRepoReload(event: RepositoryReloadEvent) { - tips = event.getConstant("Bingo").bingo_tips - } @SubscribeEvent fun onItemTooltipLow(event: ItemTooltipEvent) { if (!isEnabled()) return if (InventoryUtils.openInventoryName() != "Bingo Card") return - val itemName = event.itemStack?.name ?: return - tips[itemName.removeColor()]?.let { - val difficulty = Difficulty.valueOf(it.difficulty.uppercase()) - event.toolTip[0] = event.toolTip[0] + " §7(" + difficulty.displayName + "§7)" + val itemName = event.itemStack?.name?.removeColor() ?: return - var index = event.toolTip.indexOf("§5§o§7Reward") - 1 - event.toolTip.add(index++, "") - event.toolTip.add(index++, "§eGuide:") - for (line in it.note) { - event.toolTip.add(index++, line) - } + val toolTip = event.toolTip + val communityGoal = toolTip.getOrNull(1) == "§5§o§8Community Goal" + val bingoTip: BingoTip = if (communityGoal) { + BingoAPI.tips.filter { itemName.startsWith(it.key) }.values.firstOrNull() ?: return + } else { + BingoAPI.tips[itemName] ?: return + } + + if (!communityGoal) { + val difficulty = Difficulty.valueOf(bingoTip.difficulty.uppercase()) + toolTip[0] = toolTip[0] + " §7(" + difficulty.displayName + "§7)" + } + + var index = if (!communityGoal) { + toolTip.indexOf("§5§o§7Reward") + } else { + toolTip.indexOfFirst { it.startsWith("§5§o§7Contribution Rewards") } + } - 1 + + toolTip.add(index++, "") + toolTip.add(index++, "§eGuide:") + for (line in bingoTip.note) { + toolTip.add(index++, line) } } @@ -53,11 +61,13 @@ class BingoCardTips { for (slot in chest.inventorySlots) { if (slot == null) continue if (slot.slotNumber != slot.slotIndex) continue - if (slot.stack == null) continue + val stack = slot.stack ?: continue - val itemName = slot.stack.name ?: continue + val itemName = stack.name ?: continue + val communityGoal = stack.getLore().getOrNull(1) == "§8Community Goal" + if (communityGoal) continue - tips[itemName.removeColor()]?.let { + BingoAPI.tips[itemName.removeColor()]?.let { val difficulty = Difficulty.valueOf(it.difficulty.uppercase()) slot highlight difficulty.color.addOpacity(120) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt index 9275b6ea7..2eac62d1f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt @@ -1,12 +1,13 @@ package at.hannibal2.skyhanni.features.misc.compacttablist import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.data.BingoAPI import at.hannibal2.skyhanni.data.FriendAPI import at.hannibal2.skyhanni.data.GuildAPI import at.hannibal2.skyhanni.data.IslandType import at.hannibal2.skyhanni.data.PartyAPI +import at.hannibal2.skyhanni.data.jsonobjects.repo.ContributorListJson import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.features.bingo.BingoAPI import at.hannibal2.skyhanni.features.misc.MarkedPlayerManager import at.hannibal2.skyhanni.test.SkyHanniDebugsAndTests import at.hannibal2.skyhanni.utils.KeyboardManager @@ -14,7 +15,6 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import at.hannibal2.skyhanni.data.jsonobjects.repo.ContributorListJson import com.google.common.cache.CacheBuilder import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.concurrent.TimeUnit -- cgit