1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
package moe.nea.firmament.features.inventory
import org.lwjgl.glfw.GLFW
import net.minecraft.text.Text
import net.minecraft.util.StringIdentifiable
import moe.nea.firmament.annotations.Subscribe
import moe.nea.firmament.events.ItemTooltipEvent
import moe.nea.firmament.features.FirmamentFeature
import moe.nea.firmament.gui.config.ManagedConfig
import moe.nea.firmament.repo.HypixelStaticData
import moe.nea.firmament.util.FirmFormatters.formatCommas
import moe.nea.firmament.util.asBazaarStock
import moe.nea.firmament.util.bold
import moe.nea.firmament.util.darkGrey
import moe.nea.firmament.util.gold
import moe.nea.firmament.util.skyBlockId
import moe.nea.firmament.util.tr
import moe.nea.firmament.util.yellow
object PriceData : FirmamentFeature {
override val identifier: String
get() = "price-data"
object TConfig : ManagedConfig(identifier, Category.INVENTORY) {
val tooltipEnabled by toggle("enable-always") { true }
val enableKeybinding by keyBindingWithDefaultUnbound("enable-keybind")
val stackSizeKey by keyBinding("stack-size-keybind") { GLFW.GLFW_KEY_LEFT_SHIFT }
val avgLowestBin by choice(
"avg-lowest-bin-days",
) {
AvgLowestBin.THREEDAYAVGLOWESTBIN
}
}
enum class AvgLowestBin : StringIdentifiable {
OFF,
ONEDAYAVGLOWESTBIN,
THREEDAYAVGLOWESTBIN,
SEVENDAYAVGLOWESTBIN;
override fun asString(): String {
return name
}
}
override val config get() = TConfig
fun formatPrice(label: Text, price: Double): Text {
return Text.literal("")
.yellow()
.bold()
.append(label)
.append(": ")
.append(
Text.literal(formatCommas(price, fractionalDigits = 1))
.append(if (price != 1.0) " coins" else " coin")
.gold()
.bold()
)
}
@Subscribe
fun onItemTooltip(it: ItemTooltipEvent) {
if (!TConfig.tooltipEnabled) return
if (TConfig.enableKeybinding.isBound && !TConfig.enableKeybinding.isPressed()) return
val sbId = it.stack.skyBlockId
val stackSize = it.stack.count
val isShowingStack = TConfig.stackSizeKey.isPressed()
val multiplier = if (isShowingStack) stackSize else 1
val multiplierText =
if (isShowingStack)
tr("firmament.tooltip.multiply", "Showing prices for x${stackSize}").darkGrey()
else
tr(
"firmament.tooltip.multiply.hint",
"[${TConfig.stackSizeKey.format()}] to show x${stackSize}"
).darkGrey()
val bazaarData = HypixelStaticData.bazaarData[sbId?.asBazaarStock]
val lowestBin = HypixelStaticData.lowestBin[sbId]
val avgBinValue: Double? = when (TConfig.avgLowestBin) {
AvgLowestBin.ONEDAYAVGLOWESTBIN -> HypixelStaticData.avg1dlowestBin[sbId]
AvgLowestBin.THREEDAYAVGLOWESTBIN -> HypixelStaticData.avg3dlowestBin[sbId]
AvgLowestBin.SEVENDAYAVGLOWESTBIN -> HypixelStaticData.avg7dlowestBin[sbId]
AvgLowestBin.OFF -> null
}
if (bazaarData != null) {
it.lines.add(Text.literal(""))
it.lines.add(multiplierText)
it.lines.add(
formatPrice(
tr("firmament.tooltip.bazaar.sell-order", "Bazaar Sell Order"),
bazaarData.quickStatus.sellPrice * multiplier
)
)
it.lines.add(
formatPrice(
tr("firmament.tooltip.bazaar.buy-order", "Bazaar Buy Order"),
bazaarData.quickStatus.buyPrice * multiplier
)
)
} else if (lowestBin != null) {
it.lines.add(Text.literal(""))
it.lines.add(multiplierText)
it.lines.add(
formatPrice(
tr("firmament.tooltip.ah.lowestbin", "Lowest BIN"),
lowestBin * multiplier
)
)
if (avgBinValue != null) {
it.lines.add(
formatPrice(
tr("firmament.tooltip.ah.avg-lowestbin", "AVG Lowest BIN"),
avgBinValue * multiplier
)
)
}
}
}
}
|