summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaProfitTracker.kt24
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt32
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestProfitTracker.kt35
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/ExcavatorProfitTracker.kt20
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt32
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