aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal002@users.noreply.github.com>2024-04-15 18:54:33 +0200
committerGitHub <noreply@github.com>2024-04-15 18:54:33 +0200
commit79432868dab02fce68bcd513e01c49bd07271eba (patch)
tree6a6ddb1b3d4a83fb700c2cad35cc80074ffa871e /src/main/java/at/hannibal2/skyhanni
parentc78914d5e8bfca12eef8f6c9ff976aed26269345 (diff)
downloadskyhanni-79432868dab02fce68bcd513e01c49bd07271eba.tar.gz
skyhanni-79432868dab02fce68bcd513e01c49bd07271eba.tar.bz2
skyhanni-79432868dab02fce68bcd513e01c49bd07271eba.zip
New Feature: Profit Per Excavation (#1439)
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/mining/FossilExcavatorConfig.java11
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt2
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/ExcavatorProfitTracker.kt5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/FossilExcavatorAPI.kt3
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/ProfitPerExcavation.kt48
6 files changed, 67 insertions, 4 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
index 6b55fd37b..b890ce157 100644
--- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
+++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt
@@ -273,6 +273,7 @@ import at.hannibal2.skyhanni.features.mining.eventtracker.MiningEventDisplay
import at.hannibal2.skyhanni.features.mining.eventtracker.MiningEventTracker
import at.hannibal2.skyhanni.features.mining.fossilexcavator.ExcavatorProfitTracker
import at.hannibal2.skyhanni.features.mining.fossilexcavator.FossilExcavatorAPI
+import at.hannibal2.skyhanni.features.mining.fossilexcavator.ProfitPerExcavation
import at.hannibal2.skyhanni.features.mining.fossilexcavator.solver.FossilSolverDisplay
import at.hannibal2.skyhanni.features.mining.powdertracker.PowderTracker
import at.hannibal2.skyhanni.features.minion.InfernoMinionFeatures
@@ -668,6 +669,7 @@ class SkyHanniMod {
loadModule(ChickenHeadTimer())
loadModule(FossilSolverDisplay)
loadModule(ExcavatorProfitTracker())
+ loadModule(ProfitPerExcavation())
loadModule(GardenOptimalSpeed())
loadModule(GardenLevelDisplay())
loadModule(FarmingWeightDisplay())
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/mining/FossilExcavatorConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/mining/FossilExcavatorConfig.java
index f1b70c6b3..43f863e94 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/mining/FossilExcavatorConfig.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/mining/FossilExcavatorConfig.java
@@ -1,7 +1,9 @@
package at.hannibal2.skyhanni.config.features.mining;
+import at.hannibal2.skyhanni.config.FeatureToggle;
import com.google.gson.annotations.Expose;
import io.github.notenoughupdates.moulconfig.annotations.Accordion;
+import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean;
import io.github.notenoughupdates.moulconfig.annotations.ConfigOption;
public class FossilExcavatorConfig {
@@ -16,4 +18,13 @@ public class FossilExcavatorConfig {
@Accordion
public ExcavatorProfitTrackerConfig profitTracker = new ExcavatorProfitTrackerConfig();
+ @Expose
+ @ConfigOption(
+ name = "Profit Per",
+ desc = "Show profit/loss in chat after each excavation. Also include breakdown information on hover."
+ )
+ @ConfigEditorBoolean
+ @FeatureToggle
+ public boolean profitPerExcavation = false;
+
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt
index 20c042f64..e043f9d57 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt
@@ -214,7 +214,7 @@ class HideNotClickableItems {
showGreenLine = true
val internalName = stack.getInternalNameOrNull() ?: return true
- if (internalName == "SUSPICIOUS_SCRAP".asInternalName()) {
+ if (internalName == FossilExcavatorAPI.scrapItem) {
return 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 b2bc4a910..f0a3fcaa8 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
@@ -11,7 +11,6 @@ import at.hannibal2.skyhanni.utils.ItemUtils.itemName
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland
import at.hannibal2.skyhanni.utils.NEUInternalName
-import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName
import at.hannibal2.skyhanni.utils.NEUItems.getPrice
import at.hannibal2.skyhanni.utils.NumberUtil
import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
@@ -63,7 +62,7 @@ class ExcavatorProfitTracker {
var fossilDustGained = 0L
}
- private val scrapItem = "SUSPICIOUS_SCRAP".asInternalName()
+ private val scrapItem get() = FossilExcavatorAPI.scrapItem
private fun drawDisplay(data: Data): List<List<Any>> = buildList {
addAsSingletonList("§e§lFossil Excavation Profit Tracker")
@@ -137,7 +136,7 @@ class ExcavatorProfitTracker {
val name = StringUtils.pluralize(timesExcavated.toInt(), scrapItem.itemName)
addAsSingletonList(
Renderable.hoverTips(
- "${scrapItem.itemName} §7price: §c-${NumberUtil.format(scrapPrice)}",
+ "$name §7price: §c-${NumberUtil.format(scrapPrice)}",
listOf(
"§7You paid §c${NumberUtil.format(scrapPrice)} coins §7in total",
"§7for all §e$timesExcavated $name",
diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/FossilExcavatorAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/FossilExcavatorAPI.kt
index 40971c87e..d2e50bd1c 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/FossilExcavatorAPI.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/FossilExcavatorAPI.kt
@@ -10,6 +10,7 @@ import at.hannibal2.skyhanni.events.mining.FossilExcavationEvent
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.ItemUtils
import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland
+import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
import at.hannibal2.skyhanni.utils.StringUtils.matches
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
@@ -47,6 +48,8 @@ object FossilExcavatorAPI {
var inInventory = false
var inExcavatorMenu = false
+ val scrapItem = "SUSPICIOUS_SCRAP".asInternalName()
+
@SubscribeEvent
fun onInventoryOpen(event: InventoryFullyOpenedEvent) {
if (!IslandType.DWARVEN_MINES.isInIsland()) return
diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/ProfitPerExcavation.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/ProfitPerExcavation.kt
new file mode 100644
index 000000000..4ac8dd4ff
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/ProfitPerExcavation.kt
@@ -0,0 +1,48 @@
+package at.hannibal2.skyhanni.features.mining.fossilexcavator
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.mining.FossilExcavationEvent
+import at.hannibal2.skyhanni.utils.ChatUtils
+import at.hannibal2.skyhanni.utils.CollectionUtils.sortedDesc
+import at.hannibal2.skyhanni.utils.ItemUtils.itemName
+import at.hannibal2.skyhanni.utils.NEUInternalName
+import at.hannibal2.skyhanni.utils.NEUItems.getPrice
+import at.hannibal2.skyhanni.utils.NumberUtil
+import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+class ProfitPerExcavation {
+ private val config get() = SkyHanniMod.feature.mining.fossilExcavator
+
+ @SubscribeEvent
+ fun onFossilExcavation(event: FossilExcavationEvent) {
+ if (!config.profitPerExcavation) return
+ val loot = event.loot
+
+ var totalProfit = 0.0
+ val map = mutableMapOf<String, Double>()
+ loot.forEach { (name, amount) ->
+ NEUInternalName.fromItemNameOrNull(name)?.let {
+ val pricePer = it.getPrice()
+ if (pricePer == -1.0) return@forEach
+ val profit = amount * pricePer
+ val text = "Found $name §8${amount.addSeparators()}x §7(§6${NumberUtil.format(profit)}§7)"
+ map[text] = profit
+ totalProfit += profit
+ }
+ }
+
+ val scrapItem = FossilExcavatorAPI.scrapItem
+
+ val scrapPrice = scrapItem.getPrice()
+ map["${scrapItem.itemName}: §c-${NumberUtil.format(scrapPrice)}"] = -scrapPrice
+ totalProfit -= scrapPrice
+
+ val hover = map.sortedDesc().keys.toMutableList()
+ val profitPrefix = if (totalProfit < 0) "§c" else "§6"
+ val totalMessage = "Profit this excavation: $profitPrefix${NumberUtil.format(totalProfit)}"
+ hover.add("")
+ hover.add("§e$totalMessage")
+ ChatUtils.hoverableChat(totalMessage, hover)
+ }
+}