blob: 4be52288443dcebefeddc43ce41aba578aa32c8f (
plain)
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
|
package moe.nea.ledger.modules
import moe.nea.ledger.ExpiringValue
import moe.nea.ledger.ItemChange
import moe.nea.ledger.ItemId
import moe.nea.ledger.LedgerEntry
import moe.nea.ledger.LedgerLogger
import moe.nea.ledger.TransactionType
import moe.nea.ledger.events.ChatReceived
import moe.nea.ledger.events.ExtraSupplyIdEvent
import moe.nea.ledger.events.GuiClickEvent
import moe.nea.ledger.getDisplayNameU
import moe.nea.ledger.unformattedString
import moe.nea.ledger.useMatcher
import moe.nea.ledger.utils.Inject
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import java.time.Instant
import kotlin.time.Duration.Companion.seconds
class DungeonChestDetection @Inject constructor(val logger: LedgerLogger) : ChestDetection() {
@SubscribeEvent
fun onKismetClick(event: GuiClickEvent) {
val slot = event.slotIn ?: return
if (!slot.inventory.displayName.unformattedText.unformattedString().endsWith(" Chest")) return
val stack = slot.stack ?: return
if (stack.getDisplayNameU() == "§aReroll Chest") {
logger.logEntry(
LedgerEntry(
TransactionType.KISMET_REROLL,
Instant.now(),
listOf(
ItemChange.lose(ItemId.KISMET_FEATHER, 1)
)
)
)
}
}
var lastOpenedChest = ExpiringValue.empty<ChestCost>()
@SubscribeEvent
fun supplyExtraIds(event: ExtraSupplyIdEvent) {
event.store("Dungeon Chest Key", ItemId("DUNGEON_CHEST_KEY"))
event.store("Kismet Feather", ItemId("KISMET_FEATHER"))
}
@SubscribeEvent
fun onRewardChestClick(event: GuiClickEvent) {
lastOpenedChest = ExpiringValue(scrapeChestReward(event.slotIn ?: return) ?: return)
}
val rewardMessage = " .* CHEST REWARDS".toPattern()
@SubscribeEvent
fun onChatMessage(event: ChatReceived) {
if (event.message == "You don't have that many coins in the bank!") {
lastOpenedChest.take()
}
rewardMessage.useMatcher(event.message) {
val chest = lastOpenedChest.consume(3.seconds) ?: return
logger.logEntry(LedgerEntry(
TransactionType.DUNGEON_CHEST_OPEN,
chest.timestamp,
chest.diff,
))
}
}
}
|