diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
5 files changed, 95 insertions, 48 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaProfitTracker.kt index 1ba2724c3..01d2c1d2e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaProfitTracker.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.features.event.diana import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.ItemAddManager import at.hannibal2.skyhanni.data.jsonobjects.repo.DianaDropsJson import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.ItemAddEvent @@ -33,17 +34,18 @@ object DianaProfitTracker { private val patternGroup = RepoPattern.group("diana.chat") private val chatDugOutPattern by patternGroup.pattern( "burrow.dug", - "(§eYou dug out a Griffin Burrow!|§eYou finished the Griffin burrow chain!) .*" + "(§eYou dug out a Griffin Burrow!|§eYou finished the Griffin burrow chain!) .*", ) private val chatDugOutCoinsPattern by patternGroup.pattern( "coins", - "§6§lWow! §r§eYou dug out §r§6(?<coins>.*) coins§r§e!" + "§6§lWow! §r§eYou dug out §r§6(?<coins>.*) coins§r§e!", ) private val tracker = SkyHanniItemTracker( "Diana Profit Tracker", { Data() }, - { it.diana.dianaProfitTracker }) { drawDisplay(it) } + { it.diana.dianaProfitTracker }, + ) { drawDisplay(it) } class Data : ItemTrackerData() { @@ -70,7 +72,7 @@ object DianaProfitTracker { val burrowDugCoinsFormat = item.totalAmount.shortFormat() return listOf( "§7Digging treasures gave you", - "§6$burrowDugCoinsFormat coins §7in total." + "§6$burrowDugCoinsFormat coins §7in total.", ) } } @@ -84,8 +86,8 @@ object DianaProfitTracker { addAsSingletonList( Renderable.hoverTips( "§7Burrows dug: §e${treasureCoins.addSeparators()}", - listOf("§7You dug out griffin burrows §e${treasureCoins.addSeparators()} §7times.") - ) + listOf("§7You dug out griffin burrows §e${treasureCoins.addSeparators()} §7times."), + ), ) addAsSingletonList(tracker.addTotalProfit(profit, data.burrowsDug, "burrow")) @@ -97,14 +99,16 @@ object DianaProfitTracker { fun onItemAdd(event: ItemAddEvent) { if (!isEnabled()) return - val internalName = event.internalName + tryAddItem(event.internalName, event.amount, event.source == ItemAddManager.Source.COMMAND) + } - if (!isAllowedItem(internalName)) { + private fun tryAddItem(internalName: NEUInternalName, amount: Int, command: Boolean) { + if (!isAllowedItem(internalName) && internalName != NEUInternalName.SKYBLOCK_COIN) { ChatUtils.debug("Ignored non-diana item pickup: '$internalName'") return } - tracker.addItem(internalName, event.amount) + tracker.addItem(internalName, amount, command) } @SubscribeEvent @@ -119,7 +123,7 @@ object DianaProfitTracker { } chatDugOutCoinsPattern.matchMatcher(message) { BurrowAPI.lastBurrowRelatedChatMessage = SimpleTimeMark.now() - tracker.addCoins(group("coins").formatInt()) + tryAddItem(NEUInternalName.SKYBLOCK_COIN, group("coins").formatInt(), command = false) tryHide(event) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt index b99c03ff5..a0590816e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.features.fishing.tracker import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.ItemAddManager import at.hannibal2.skyhanni.data.jsonobjects.repo.FishingProfitItemsJson import at.hannibal2.skyhanni.events.FishingBobberCastEvent import at.hannibal2.skyhanni.events.GuiRenderEvent @@ -43,14 +44,15 @@ object FishingProfitTracker { private val coinsChatPattern by RepoPattern.pattern( "fishing.tracker.chat.coins", - ".* CATCH! §r§bYou found §r§6(?<coins>.*) Coins§r§b\\." + ".* CATCH! §r§bYou found §r§6(?<coins>.*) Coins§r§b\\.", ) private var lastCatchTime = SimpleTimeMark.farPast() private val tracker = SkyHanniItemTracker( "Fishing Profit Tracker", { Data() }, - { it.fishing.fishingProfitTracker }) { drawDisplay(it) } + { it.fishing.fishingProfitTracker }, + ) { drawDisplay(it) } class Data : ItemTrackerData() { @@ -64,7 +66,7 @@ object FishingProfitTracker { return listOf( "§7Caught §e${timesCaught.addSeparators()} §7times.", - "§7Your catch rate: §c$catchRate" + "§7Your catch rate: §c$catchRate", ) } @@ -73,7 +75,7 @@ object FishingProfitTracker { override fun getCoinDescription(item: TrackedItem): List<String> { val mobKillCoinsFormat = item.totalAmount.shortFormat() return listOf( - "§7You fished up §6$mobKillCoinsFormat coins §7already." + "§7You fished up §6$mobKillCoinsFormat coins §7already.", ) } @@ -127,8 +129,8 @@ object FishingProfitTracker { addAsSingletonList( Renderable.hoverTips( "§7Times fished: §e${fishedCount.addSeparators()}", - listOf("§7You've reeled in §e${fishedCount.addSeparators()} §7catches.") - ) + listOf("§7You've reeled in §e${fishedCount.addSeparators()} §7catches."), + ), ) addAsSingletonList(tracker.addTotalProfit(profit, data.totalCatchAmount, "catch")) @@ -152,7 +154,7 @@ object FishingProfitTracker { val id = list.indexOf(currentCategory) currentCategory = list[(id + 1) % list.size] tracker.update() - } + }, ) } @@ -178,7 +180,7 @@ object FishingProfitTracker { "Loaded $label not in a fishing category", "Found items missing in itemCategories", "missingItems" to missingItems, - noStackTrace = true + noStackTrace = true, ) } } @@ -186,15 +188,21 @@ object FishingProfitTracker { @SubscribeEvent fun onItemAdd(event: ItemAddEvent) { if (!isEnabled()) return + + if (event.source == ItemAddManager.Source.COMMAND) { + tryAddItem(event.internalName, event.amount, command = true) + return + } + DelayedRun.runDelayed(500.milliseconds) { - maybeAddItem(event.internalName, event.amount) + tryAddItem(event.internalName, event.amount, command = false) } } @SubscribeEvent fun onChat(event: LorenzChatEvent) { coinsChatPattern.matchMatcher(event.message) { - tracker.addCoins(group("coins").formatInt()) + tryAddItem(NEUInternalName.SKYBLOCK_COIN, group("coins").formatInt(), command = false) addCatch() } } @@ -221,14 +229,14 @@ object FishingProfitTracker { lastCatchTime = SimpleTimeMark.farPast() } - private fun maybeAddItem(internalName: NEUInternalName, amount: Int) { + private fun tryAddItem(internalName: NEUInternalName, amount: Int, command: Boolean) { if (!FishingAPI.isFishing(checkRodInHand = false)) return if (!isAllowedItem(internalName)) { ChatUtils.debug("Ignored non-fishing item pickup: $internalName'") return } - tracker.addItem(internalName, amount) + tracker.addItem(internalName, amount, command) addCatch() } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestProfitTracker.kt index 5f630335b..1d2710c7c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestProfitTracker.kt @@ -2,8 +2,10 @@ package at.hannibal2.skyhanni.features.garden.pests import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.data.ItemAddManager import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.IslandChangeEvent +import at.hannibal2.skyhanni.events.ItemAddEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.PurseChangeCause import at.hannibal2.skyhanni.events.PurseChangeEvent @@ -37,14 +39,15 @@ object PestProfitTracker { */ private val pestRareDropPattern by patternGroup.pattern( "raredrop", - "§6§l(?:RARE|PET) DROP! (?:§r)?(?<item>.+) §6\\(§6\\+.*☘\\)" + "§6§l(?:RARE|PET) DROP! (?:§r)?(?<item>.+) §6\\(§6\\+.*☘\\)", ) private var lastPestKillTime = SimpleTimeMark.farPast() private val tracker = SkyHanniItemTracker( "Pest Profit Tracker", { Data() }, - { it.garden.pestProfitTracker }) { drawDisplay(it) } + { it.garden.pestProfitTracker }, + ) { drawDisplay(it) } class Data : ItemTrackerData() { override fun resetItems() { @@ -56,7 +59,7 @@ object PestProfitTracker { val dropRate = LorenzUtils.formatPercentage(percentage.coerceAtMost(1.0)) return listOf( "§7Dropped §e${timesGained.addSeparators()} §7times.", - "§7Your drop rate: §c$dropRate." + "§7Your drop rate: §c$dropRate.", ) } @@ -66,7 +69,7 @@ object PestProfitTracker { val pestsCoinsFormat = item.totalAmount.shortFormat() return listOf( "§7Killing pests gives you coins.", - "§7You got §6$pestsCoinsFormat coins §7that way." + "§7You got §6$pestsCoinsFormat coins §7that way.", ) } @@ -75,24 +78,38 @@ object PestProfitTracker { } @SubscribeEvent + fun onItemAdd(event: ItemAddEvent) { + if (!isEnabled()) return + + val internalName = event.internalName + if (event.source == ItemAddManager.Source.COMMAND) { + tryAddItem(internalName, event.amount, command = true) + } + } + + @SubscribeEvent fun onChat(event: LorenzChatEvent) { if (!isEnabled()) return PestAPI.pestDeathChatPattern.matchMatcher(event.message) { val amount = group("amount").toInt() val internalName = NEUInternalName.fromItemNameOrNull(group("item")) ?: return - tracker.addItem(internalName, amount) + tryAddItem(internalName, amount, command = false) addKill() if (config.hideChat) event.blockedReason = "pest_drop" } pestRareDropPattern.matchMatcher(event.message) { val internalName = NEUInternalName.fromItemNameOrNull(group("item")) ?: return - tracker.addItem(internalName, 1) + tryAddItem(internalName, 1, command = false) // pests always have guaranteed loot, therefore there's no need to add kill here } } + private fun tryAddItem(internalName: NEUInternalName, amount: Int, command: Boolean) { + tracker.addItem(internalName, amount, command) + } + private fun addKill() { tracker.modify { it.totalPestsKills++ @@ -108,8 +125,8 @@ object PestProfitTracker { addAsSingletonList( Renderable.hoverTips( "§7Pests killed: §e${pestsKilled.addSeparators()}", - listOf("§7You killed pests §e${pestsKilled.addSeparators()} §7times.") - ) + listOf("§7You killed pests §e${pestsKilled.addSeparators()} §7times."), + ), ) addAsSingletonList(tracker.addTotalProfit(profit, data.totalPestsKills, "kill")) @@ -131,7 +148,7 @@ object PestProfitTracker { val coins = event.coins if (coins > 1000) return if (event.reason == PurseChangeCause.GAIN_MOB_KILL && lastPestKillTime.passedSince() < 2.seconds) { - tracker.addCoins(coins.toInt()) + tryAddItem(NEUInternalName.SKYBLOCK_COIN, coins.toInt(), command = false) } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/ExcavatorProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/ExcavatorProfitTracker.kt index dcf9b8c4d..ef3b780b7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/ExcavatorProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/ExcavatorProfitTracker.kt @@ -2,8 +2,10 @@ package at.hannibal2.skyhanni.features.mining.fossilexcavator import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.data.ItemAddManager import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.IslandChangeEvent +import at.hannibal2.skyhanni.events.ItemAddEvent import at.hannibal2.skyhanni.events.mining.FossilExcavationEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ChatUtils @@ -155,6 +157,20 @@ object ExcavatorProfitTracker { } @SubscribeEvent + fun onItemAdd(event: ItemAddEvent) { + if (!isEnabled()) return + + val internalName = event.internalName + if (event.source == ItemAddManager.Source.COMMAND) { + tryAddItem(internalName, event.amount, command = true) + } + } + + private fun tryAddItem(internalName: NEUInternalName, amount: Int, command: Boolean) { + tracker.addItem(internalName, amount, command) + } + + @SubscribeEvent fun onFossilExcavation(event: FossilExcavationEvent) { if (!isEnabled()) return for ((name, amount) in event.loot) { @@ -185,11 +201,11 @@ object ExcavatorProfitTracker { val internalName = NEUInternalName.fromItemNameOrNull(name) if (internalName == null) { - ChatUtils.debug("no price for exavator profit: '$name'") + ChatUtils.debug("no price for excavator profit: '$name'") return } // TODO use primitive item stacks in trackers - tracker.addItem(internalName, amount) + tryAddItem(internalName, amount, command = false) } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt index 372c7daa9..d2f50358d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt @@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.features.slayer import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.config.storage.ProfileSpecificStorage +import at.hannibal2.skyhanni.data.ItemAddManager import at.hannibal2.skyhanni.data.SlayerAPI import at.hannibal2.skyhanni.data.jsonobjects.repo.SlayerProfitTrackerItemsJson import at.hannibal2.skyhanni.events.GuiRenderEvent @@ -46,7 +47,7 @@ object SlayerProfitTracker { */ private val autoSlayerBankPattern by RepoPattern.pattern( "slayer.autoslayer.bank.chat", - "§7Took (?<coins>.+) coins from your bank for auto-slayer\\.\\.\\." + "§7Took (?<coins>.+) coins from your bank for auto-slayer\\.\\.\\.", ) class Data : ItemTrackerData() { @@ -78,7 +79,7 @@ object SlayerProfitTracker { val mobKillCoinsFormat = item.totalAmount.shortFormat() return listOf( "§7Killing mobs gives you coins (more with scavenger).", - "§7You got §6$mobKillCoinsFormat coins §7that way." + "§7You got §6$mobKillCoinsFormat coins §7that way.", ) } } @@ -104,7 +105,7 @@ object SlayerProfitTracker { if (!isEnabled()) return val coins = event.coins if (event.reason == PurseChangeCause.GAIN_MOB_KILL && SlayerAPI.isInCorrectArea) { - getTracker()?.addCoins(coins.toInt()) + tryAddItem(NEUInternalName.SKYBLOCK_COIN, coins.toInt(), command = false) } if (event.reason == PurseChangeCause.LOSE_SLAYER_QUEST_STARTED) { addSlayerCosts(coins) @@ -133,7 +134,7 @@ object SlayerProfitTracker { return trackers.getOrPut(itemLogCategory) { val getStorage: (ProfileSpecificStorage) -> Data = { it.slayerProfitData.getOrPut( - itemLogCategory + itemLogCategory, ) { Data() } } SkyHanniItemTracker("$itemLogCategory Profit Tracker", { Data() }, getStorage) { drawDisplay(it) } @@ -153,15 +154,16 @@ object SlayerProfitTracker { if (!SlayerAPI.isInCorrectArea) return if (!SlayerAPI.hasActiveSlayerQuest()) return - val internalName = event.internalName - val amount = event.amount + tryAddItem(event.internalName, event.amount, event.source == ItemAddManager.Source.COMMAND) + } - if (!isAllowedItem(internalName)) { + private fun tryAddItem(internalName: NEUInternalName, amount: Int, command: Boolean) { + if (!isAllowedItem(internalName) && internalName != NEUInternalName.SKYBLOCK_COIN) { ChatUtils.debug("Ignored non-slayer item pickup: '$internalName' '$itemLogCategory'") return } - getTracker()?.addItem(internalName, amount) + getTracker()?.addItem(internalName, amount, command) } private fun isAllowedItem(internalName: NEUInternalName): Boolean { @@ -176,12 +178,12 @@ object SlayerProfitTracker { var profit = tracker.drawItems(data, { true }, this) val slayerSpawnCost = data.slayerSpawnCost if (slayerSpawnCost != 0L) { - val mobKillCoinsFormat = slayerSpawnCost.shortFormat() + val slayerSpawnCostFormat = slayerSpawnCost.shortFormat() addAsSingletonList( Renderable.hoverTips( - " §7Slayer Spawn Costs: §c$mobKillCoinsFormat", - listOf("§7You paid §c$mobKillCoinsFormat §7in total", "§7for starting the slayer quests.") - ) + " §7Slayer Spawn Costs: §c$slayerSpawnCostFormat", + listOf("§7You paid §c$slayerSpawnCostFormat §7in total", "§7for starting the slayer quests."), + ), ) profit += slayerSpawnCost } @@ -190,8 +192,8 @@ object SlayerProfitTracker { addAsSingletonList( Renderable.hoverTips( "§7Bosses killed: §e${slayerCompletedCount.addSeparators()}", - listOf("§7You killed the $itemLogCategory boss", "§e${slayerCompletedCount.addSeparators()} §7times.") - ) + listOf("§7You killed the $itemLogCategory boss", "§e${slayerCompletedCount.addSeparators()} §7times."), + ), ) addAsSingletonList(tracker.addTotalProfit(profit, data.slayerCompletedCount, "boss")) @@ -204,7 +206,7 @@ object SlayerProfitTracker { val text = " §6Mob kill coins§7: §6$mobKillCoinsFormat" val lore = listOf( "§7Killing mobs gives you coins (more with scavenger)", - "§7You got §e$mobKillCoinsFormat §7coins in total this way" + "§7You got §e$mobKillCoinsFormat §7coins in total this way", ) text to lore |
