diff options
author | Linnea Gräf <nea@nea.moe> | 2024-12-19 22:13:32 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-12-19 22:13:32 +0100 |
commit | 175379be77dd530bc019e34d3937950df22e4f8a (patch) | |
tree | 26667fda120efefa857655583f622f170856bd38 /src/main/kotlin/moe/nea/ledger/modules/NpcDetection.kt | |
parent | 7c4b2e089fa23622799bc06a08f6932197365368 (diff) | |
download | LocalTransactionLedger-175379be77dd530bc019e34d3937950df22e4f8a.tar.gz LocalTransactionLedger-175379be77dd530bc019e34d3937950df22e4f8a.tar.bz2 LocalTransactionLedger-175379be77dd530bc019e34d3937950df22e4f8a.zip |
feat: Items bought for other items at NPCs
Diffstat (limited to 'src/main/kotlin/moe/nea/ledger/modules/NpcDetection.kt')
-rw-r--r-- | src/main/kotlin/moe/nea/ledger/modules/NpcDetection.kt | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/src/main/kotlin/moe/nea/ledger/modules/NpcDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/NpcDetection.kt index 5906562..c17cdc8 100644 --- a/src/main/kotlin/moe/nea/ledger/modules/NpcDetection.kt +++ b/src/main/kotlin/moe/nea/ledger/modules/NpcDetection.kt @@ -7,9 +7,16 @@ import moe.nea.ledger.LedgerEntry import moe.nea.ledger.LedgerLogger import moe.nea.ledger.SHORT_NUMBER_PATTERN import moe.nea.ledger.TransactionType +import moe.nea.ledger.asIterable +import moe.nea.ledger.events.BeforeGuiAction import moe.nea.ledger.events.ChatReceived +import moe.nea.ledger.getDisplayNameU +import moe.nea.ledger.getInternalId +import moe.nea.ledger.getLore import moe.nea.ledger.parseShortNumber +import moe.nea.ledger.unformattedString import moe.nea.ledger.useMatcher +import moe.nea.ledger.utils.ErrorUtil import moe.nea.ledger.utils.di.Inject import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.regex.Pattern @@ -21,7 +28,44 @@ class NpcDetection @Inject constructor(val ledger: LedgerLogger, val ids: ItemId val npcSellPattern = Pattern.compile("You sold (?<what>.*) (x(?<count>$SHORT_NUMBER_PATTERN) )?for (?<coins>$SHORT_NUMBER_PATTERN) Coins?!") - // TODO: IMPROVE BUYING FROM NPC TO INCLUDE ITEMS OTHER THAN COINS (KUUDRA KEYS ARE CHEAP) + // You bought InfiniDirt™ Wand! + // You bought Prismapump x4! + val npcBuyWithItemPattern = + "You bought (?<what>.*?)!".toPattern() + var storedPurchases = mutableMapOf<String, List<ItemChange>>() + + @SubscribeEvent + fun onClick(event: BeforeGuiAction) { + (event.chestSlots?.lowerChestInventory?.asIterable() ?: listOf()) + .filterNotNull().forEach { + val name = it.getDisplayNameU().unformattedString() + val id = it.getInternalId() ?: return@forEach + val count = it.stackSize + val cost = ids.findCostItemsFromSpan(it.getLore()) + storedPurchases[name] = listOf(ItemChange.gain(id, count)) + cost.map { ItemChange.unpairLose(it) } + } + } + + @Inject + lateinit var errorUtil: ErrorUtil + + @SubscribeEvent + fun onBarteredItemBought(event: ChatReceived) { + npcBuyWithItemPattern.useMatcher(event.message) { + val changes = storedPurchases[group("what")] + if (changes == null) { + errorUtil.reportAdHoc("Item bought for items without associated cost") + } + storedPurchases.clear() + ledger.logEntry( + LedgerEntry( + TransactionType.NPC_BUY, + event.timestamp, + changes ?: listOf() + ) + ) + } + } @SubscribeEvent fun onNpcBuy(event: ChatReceived) { |