diff options
| author | Linnea Gräf <nea@nea.moe> | 2025-01-08 19:25:29 +0100 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2025-01-08 19:25:29 +0100 |
| commit | d1e16a47819509ed645bb93e1a173e0a97025cef (patch) | |
| tree | efbe886d9ac1ab4ea01788cb4842812fd0af9079 /src/main/kotlin/moe/nea/ledger/modules | |
| parent | f694daf322bbb4ff530a9332547c5c8337c3e0c0 (diff) | |
| download | LocalTransactionLedger-d1e16a47819509ed645bb93e1a173e0a97025cef.tar.gz LocalTransactionLedger-d1e16a47819509ed645bb93e1a173e0a97025cef.tar.bz2 LocalTransactionLedger-d1e16a47819509ed645bb93e1a173e0a97025cef.zip | |
build: Move mod to subproject
Diffstat (limited to 'src/main/kotlin/moe/nea/ledger/modules')
25 files changed, 0 insertions, 1714 deletions
diff --git a/src/main/kotlin/moe/nea/ledger/modules/AccessorySwapperDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/AccessorySwapperDetection.kt deleted file mode 100644 index 1c228ff..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/AccessorySwapperDetection.kt +++ /dev/null @@ -1,34 +0,0 @@ -package moe.nea.ledger.modules - -import moe.nea.ledger.ItemChange -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.gen.ItemIds -import moe.nea.ledger.useMatcher -import moe.nea.ledger.utils.di.Inject -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent - -class AccessorySwapperDetection { - - val swapperUsed = "Swapped .* enrichments to .*!".toPattern() - - @Inject - lateinit var logger: LedgerLogger - - @SubscribeEvent - fun onChat(event: ChatReceived) { - swapperUsed.useMatcher(event.message) { - logger.logEntry( - LedgerEntry( - TransactionType.ACCESSORIES_SWAPPING, - event.timestamp, - listOf( - ItemChange.lose(ItemIds.TALISMAN_ENRICHMENT_SWAPPER, 1) - ) - ) - ) - } - } -}
\ No newline at end of file diff --git a/src/main/kotlin/moe/nea/ledger/modules/AllowanceDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/AllowanceDetection.kt deleted file mode 100644 index cd48d45..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/AllowanceDetection.kt +++ /dev/null @@ -1,37 +0,0 @@ -package moe.nea.ledger.modules - -import moe.nea.ledger.ItemChange -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.events.ChatReceived -import moe.nea.ledger.parseShortNumber -import moe.nea.ledger.useMatcher -import moe.nea.ledger.utils.di.Inject -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.regex.Pattern - -class AllowanceDetection { - - val allowancePattern = - Pattern.compile("ALLOWANCE! You earned (?<coins>$SHORT_NUMBER_PATTERN) coins!") - - @Inject - lateinit var logger: LedgerLogger - - @SubscribeEvent - fun onAllowanceGain(event: ChatReceived) { - allowancePattern.useMatcher(event.message) { - logger.logEntry( - LedgerEntry( - TransactionType.ALLOWANCE_GAIN, - event.timestamp, - listOf( - ItemChange.gainCoins(parseShortNumber(group("coins"))), - ) - ) - ) - } - } -} diff --git a/src/main/kotlin/moe/nea/ledger/modules/AuctionHouseDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/AuctionHouseDetection.kt deleted file mode 100644 index d02095d..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/AuctionHouseDetection.kt +++ /dev/null @@ -1,143 +0,0 @@ -package moe.nea.ledger.modules - -import moe.nea.ledger.ExpiringValue -import moe.nea.ledger.ItemChange -import moe.nea.ledger.ItemId -import moe.nea.ledger.ItemIdProvider -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.events.BeforeGuiAction -import moe.nea.ledger.events.ChatReceived -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.di.Inject -import net.minecraft.client.gui.inventory.GuiChest -import net.minecraft.inventory.ContainerChest -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.regex.Pattern -import kotlin.time.Duration.Companion.seconds - -class AuctionHouseDetection @Inject constructor(val ledger: LedgerLogger, val ids: ItemIdProvider) { - data class LastViewedItem( - val count: Int, - val id: ItemId, - ) - /* - You collected 8,712,000 coins from selling Ultimate Carrot Candy Upgrade to [VIP] kodokush in an auction! - You collected 60,000 coins from selling Walnut to [MVP++] Alea1337 in an auction! - You purchased 2x Walnut for 69 coins! - You purchased ◆ Ice Rune I for 4,000 coins! - */ - - val createAuctionScreen = "Confirm( BIN)? Auction".toPattern() - val auctionCreationCostPattern = "Cost: (?<cost>$SHORT_NUMBER_PATTERN) coins?".toPattern() - - val auctionCreatedChatPattern = "(BIN )?Auction started for .*".toPattern() - - var lastCreationCost: ExpiringValue<Double> = ExpiringValue.empty() - - @SubscribeEvent - fun onCreateAuctionClick(event: BeforeGuiAction) { - val slots = event.chestSlots ?: return - if (!createAuctionScreen.asPredicate().test(slots.lowerChestInventory.name)) return - val auctionSlot = slots.lowerChestInventory.getStackInSlot(9 + 2) ?: return - val creationCost = auctionSlot.getLore().firstNotNullOfOrNull { - auctionCreationCostPattern.useMatcher(it.unformattedString()) { parseShortNumber(group("cost")) } - } - if (creationCost != null) { - lastCreationCost = ExpiringValue(creationCost) - } - } - - @SubscribeEvent - fun onCreateAuctionChat(event: ChatReceived) { - auctionCreatedChatPattern.useMatcher(event.message) { - lastCreationCost.consume(3.seconds)?.let { cost -> - ledger.logEntry(LedgerEntry( - TransactionType.AUCTION_LISTING_CHARGE, - event.timestamp, - listOf(ItemChange.loseCoins(cost)) - )) - } - } - } - - val collectSold = - Pattern.compile("You collected (?<coins>$SHORT_NUMBER_PATTERN) coins? from selling (?<what>.*) to (?<buyer>.*) in an auction!") - val purchased = - Pattern.compile("You purchased (?:(?<amount>[0-9]+)x )?(?<what>.*) for (?<coins>$SHORT_NUMBER_PATTERN) coins!") - var lastViewedItems: MutableList<LastViewedItem> = mutableListOf() - - @SubscribeEvent - fun onEvent(event: ChatReceived) { - collectSold.useMatcher(event.message) { - val lastViewedItem = lastViewedItems.removeLastOrNull() - ledger.logEntry( - LedgerEntry( - TransactionType.AUCTION_SOLD, - event.timestamp, - listOfNotNull( - ItemChange.gainCoins(parseShortNumber(group("coins"))), - lastViewedItem?.let { ItemChange.lose(it.id, it.count) } - ), - ) - ) - } - purchased.useMatcher(event.message) { - ledger.logEntry( - LedgerEntry( - TransactionType.AUCTION_BOUGHT, - event.timestamp, - listOf( - ItemChange.loseCoins(parseShortNumber(group("coins"))), - ItemChange.gain( - ids.findForName(group("what")) ?: ItemId.NIL, - group("amount")?.toInt() ?: 1 - ) - ) - ) - ) - } - } - - @SubscribeEvent - fun onBeforeAuctionCollected(event: BeforeGuiAction) { - val chest = (event.gui as? GuiChest) ?: return - val slots = chest.inventorySlots as ContainerChest - val name = slots.lowerChestInventory.displayName.unformattedText.unformattedString() - - if (name == "BIN Auction View" || name == "Auction View") { - handleCollectSingleAuctionView(slots) - } - if (name == "Manage Auctions") { - handleCollectMultipleAuctionsView(slots) - } - } - - private fun handleCollectMultipleAuctionsView(slots: ContainerChest) { - lastViewedItems = - (0 until slots.lowerChestInventory.sizeInventory) - .mapNotNull { slots.lowerChestInventory.getStackInSlot(it) } - .filter { - it.getLore().contains("§7Status: §aSold!") // BINs - || it.getLore().contains("§7Status: §aEnded!") // Auctions - } - .mapNotNull { LastViewedItem(it.stackSize, it.getInternalId() ?: return@mapNotNull null) } - .toMutableList() - } - - - fun handleCollectSingleAuctionView(slots: ContainerChest) { - val soldItem = slots.lowerChestInventory.getStackInSlot(9 + 4) ?: return - val id = soldItem.getInternalId() ?: return - val count = soldItem.stackSize - lastViewedItems = mutableListOf(LastViewedItem(count, id)) - } - - -}
\ No newline at end of file diff --git a/src/main/kotlin/moe/nea/ledger/modules/BankDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/BankDetection.kt deleted file mode 100644 index 928d30c..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/BankDetection.kt +++ /dev/null @@ -1,49 +0,0 @@ -package moe.nea.ledger.modules - -import moe.nea.ledger.ItemChange -import moe.nea.ledger.ItemId -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.events.ChatReceived -import moe.nea.ledger.parseShortNumber -import moe.nea.ledger.useMatcher -import moe.nea.ledger.utils.di.Inject -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.regex.Pattern - - -class BankDetection @Inject constructor(val ledger: LedgerLogger) { - val withdrawPattern = - Pattern.compile("^(You have withdrawn|Withdrew) (?<amount>$SHORT_NUMBER_PATTERN) coins?! (?:There's now|You now have) (?<newtotal>$SHORT_NUMBER_PATTERN) coins? (?:left in the account!|in your account!)$") - val depositPattern = - Pattern.compile("^(?:You have deposited|Deposited) (?<amount>$SHORT_NUMBER_PATTERN) coins?! (?:There's now|You now have) (?<newtotal>$SHORT_NUMBER_PATTERN) coins? (?:in your account!|in the account!)$") - - @SubscribeEvent - fun onChat(event: ChatReceived) { - withdrawPattern.useMatcher(event.message) { - ledger.logEntry( - LedgerEntry( - TransactionType.BANK_WITHDRAW, - event.timestamp, - listOf(ItemChange(ItemId.COINS, - parseShortNumber(group("amount")), - ItemChange.ChangeDirection.TRANSFORM)), - ) - ) - } - depositPattern.useMatcher(event.message) { - ledger.logEntry( - LedgerEntry( - TransactionType.BANK_DEPOSIT, - event.timestamp, - listOf(ItemChange(ItemId.COINS, - parseShortNumber(group("amount")), - ItemChange.ChangeDirection.TRANSFORM)), - ) - ) - } - } - -} diff --git a/src/main/kotlin/moe/nea/ledger/modules/BazaarDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/BazaarDetection.kt deleted file mode 100644 index 0f1fc2c..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/BazaarDetection.kt +++ /dev/null @@ -1,58 +0,0 @@ -package moe.nea.ledger.modules - -import moe.nea.ledger.ItemChange -import moe.nea.ledger.ItemId -import moe.nea.ledger.ItemIdProvider -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.events.ChatReceived -import moe.nea.ledger.parseShortNumber -import moe.nea.ledger.useMatcher -import moe.nea.ledger.utils.di.Inject -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.regex.Pattern - -class BazaarDetection @Inject constructor(val ledger: LedgerLogger, val ids: ItemIdProvider) { - - val instaBuyPattern = - Pattern.compile("\\[Bazaar\\] Bought (?<count>$SHORT_NUMBER_PATTERN)x (?<what>.*) for (?<coins>$SHORT_NUMBER_PATTERN) coins!") - val instaSellPattern = - Pattern.compile("\\[Bazaar\\] Sold (?<count>$SHORT_NUMBER_PATTERN)x (?<what>.*) for (?<coins>$SHORT_NUMBER_PATTERN) coins!") - - - @SubscribeEvent - fun onInstSellChat(event: ChatReceived) { - instaBuyPattern.useMatcher(event.message) { - ledger.logEntry( - LedgerEntry( - TransactionType.BAZAAR_BUY_INSTANT, - event.timestamp, - listOf( - ItemChange.loseCoins(parseShortNumber(group("coins"))), - ItemChange.gain( - ids.findForName(group("what")) ?: ItemId.NIL, - parseShortNumber(group("count")) - ) - ) - ) - ) - } - instaSellPattern.useMatcher(event.message) { - ledger.logEntry( - LedgerEntry( - TransactionType.BAZAAR_SELL_INSTANT, - event.timestamp, - listOf( - ItemChange.gainCoins(parseShortNumber(group("coins"))), - ItemChange.lose( - ids.findForName(group("what")) ?: ItemId.NIL, - parseShortNumber(group("count")) - ) - ), - ) - ) - } - } -} diff --git a/src/main/kotlin/moe/nea/ledger/modules/BazaarOrderDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/BazaarOrderDetection.kt deleted file mode 100644 index 330ee1d..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/BazaarOrderDetection.kt +++ /dev/null @@ -1,95 +0,0 @@ -package moe.nea.ledger.modules - -import moe.nea.ledger.ItemChange -import moe.nea.ledger.ItemId -import moe.nea.ledger.ItemIdProvider -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.events.ChatReceived -import moe.nea.ledger.mixin.AccessorGuiEditSign -import moe.nea.ledger.parseShortNumber -import moe.nea.ledger.useMatcher -import moe.nea.ledger.utils.di.Inject -import net.minecraft.client.gui.inventory.GuiEditSign -import net.minecraftforge.client.event.GuiScreenEvent -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.util.regex.Pattern - -class BazaarOrderDetection @Inject constructor(val ledger: LedgerLogger, val ids: ItemIdProvider) { - - val buyOrderClaimed = - Pattern.compile("\\[Bazaar] Claimed (?<amount>$SHORT_NUMBER_PATTERN)x (?<what>.*) worth (?<coins>$SHORT_NUMBER_PATTERN) coins? bought for $SHORT_NUMBER_PATTERN each!") - val sellOrderClaimed = - Pattern.compile("\\[Bazaar] Claimed (?<coins>$SHORT_NUMBER_PATTERN) coins? from selling (?<amount>$SHORT_NUMBER_PATTERN)x (?<what>.*) at $SHORT_NUMBER_PATTERN each!") - val orderFlipped = - Pattern.compile("\\[Bazaar] Order Flipped! (?<amount>$SHORT_NUMBER_PATTERN)x (?<what>.*) for (?<coins>$SHORT_NUMBER_PATTERN) coins? of total expected profit.") - val previousPricePattern = - Pattern.compile("(?<price>$SHORT_NUMBER_PATTERN)/u") - var lastFlippedPreviousPrice = 0.0 - - @SubscribeEvent - fun detectSignFlip(event: GuiScreenEvent.InitGuiEvent) { - val gui = event.gui - if (gui !is GuiEditSign) return - gui as AccessorGuiEditSign - val text = gui.tileEntity_ledger.signText - if (text[2].unformattedText != "Previous price:") return - previousPricePattern.useMatcher(text[3].unformattedText) { - lastFlippedPreviousPrice = parseShortNumber(group("price")) - } - } - - @SubscribeEvent - fun detectBuyOrders(event: ChatReceived) { - orderFlipped.useMatcher(event.message) { - val amount = parseShortNumber(group("amount")).toInt() - ledger.logEntry( - LedgerEntry( - TransactionType.BAZAAR_BUY_ORDER, - event.timestamp, - listOf( - ItemChange.loseCoins(lastFlippedPreviousPrice * amount), - ItemChange.gain( - ids.findForName(group("what")) ?: ItemId.NIL, - amount, - ) - ) - ) - ) - } - buyOrderClaimed.useMatcher(event.message) { - ledger.logEntry( - LedgerEntry( - TransactionType.BAZAAR_BUY_ORDER, - event.timestamp, - listOf( - ItemChange.loseCoins(parseShortNumber(group("coins"))), - ItemChange.gain( - ids.findForName(group("what")) ?: ItemId.NIL, - parseShortNumber(group("amount")) - ) - ), - ) - ) - } - sellOrderClaimed.useMatcher(event.message) { - ledger.logEntry( - LedgerEntry( - TransactionType.BAZAAR_SELL_ORDER, - event.timestamp, - listOf( - ItemChange.gainCoins( - parseShortNumber(group("coins")) - ), - ItemChange.lose( - ids.findForName(group("what")) ?: ItemId.NIL, - parseShortNumber(group("amount")), - ) - ), - ) - ) - } - } -} diff --git a/src/main/kotlin/moe/nea/ledger/modules/BitsDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/BitsDetection.kt deleted file mode 100644 index 44a0050..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/BitsDetection.kt +++ /dev/null @@ -1,62 +0,0 @@ -package moe.nea.ledger.modules - -import moe.nea.ledger.ItemChange -import moe.nea.ledger.ItemId -import moe.nea.ledger.events.ChatReceived -import moe.nea.ledger.events.LateWorldLoadEvent -import moe.nea.ledger.LedgerEntry -import moe.nea.ledger.LedgerLogger -import moe.nea.ledger.SHORT_NUMBER_PATTERN -import moe.nea.ledger.ScoreboardUtil -import moe.nea.ledger.TransactionType -import moe.nea.ledger.gen.ItemIds -import moe.nea.ledger.parseShortNumber -import moe.nea.ledger.unformattedString -import moe.nea.ledger.useMatcher -import moe.nea.ledger.utils.di.Inject -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.time.Instant - -class BitsDetection @Inject constructor(val ledger: LedgerLogger) { - - var lastBits = -1 - - val bitScoreboardRegex = "Bits: (?<purse>$SHORT_NUMBER_PATTERN)".toPattern() - - @SubscribeEvent - fun onWorldSwitch(event: LateWorldLoadEvent) { - ScoreboardUtil.getScoreboardStrings().forEach { - bitScoreboardRegex.useMatcher<Unit>(it.unformattedString()) { - val bits = parseShortNumber(group("purse")).toInt() - if (lastBits != bits) { - ledger.logEntry( - LedgerEntry( - TransactionType.BITS_PURSE_STATUS, - Instant.now(), - listOf( - ItemChange(ItemIds.SKYBLOCK_BIT, bits.toDouble(), ItemChange.ChangeDirection.SYNC) - ) - ) - ) - lastBits = bits - } - return - } - } - } - - @SubscribeEvent - fun onEvent(event: ChatReceived) { - if (event.message.startsWith("You consumed a Booster Cookie!")) { - ledger.logEntry( - LedgerEntry( - TransactionType.BOOSTER_COOKIE_ATE, - Instant.now(), - listOf( - ItemChange.lose(ItemIds.BOOSTER_COOKIE, 1) - ) - ) - ) - } - } -} diff --git a/src/main/kotlin/moe/nea/ledger/modules/BitsShopDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/BitsShopDetection.kt deleted file mode 100644 index 553bebf..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/BitsShopDetection.kt +++ /dev/null @@ -1,66 +0,0 @@ -package moe.nea.ledger.modules - -import moe.nea.ledger.ItemChange -import moe.nea.ledger.ItemId -import moe.nea.ledger.events.ChatReceived -import moe.nea.ledger.events.GuiClickEvent -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.gen.ItemIds -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.di.Inject -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import java.time.Instant - -class BitsShopDetection @Inject constructor(val ledger: LedgerLogger) { - - - data class BitShopEntry( - val id: ItemId, - val stackSize: Int, - val bitPrice: Int, - val timestamp: Long = System.currentTimeMillis() - ) - - var lastClickedBitShopItem: BitShopEntry? = null - var bitCostPattern = "(?<cost>$SHORT_NUMBER_PATTERN) Bits".toPattern() - - @SubscribeEvent - fun recordLastBitPrice(event: GuiClickEvent) { - val slot = event.slotIn ?: return - val name = slot.inventory.displayName.unformattedText.unformattedString() - if (name != "Community Shop" && !name.startsWith("Bits Shop")) - return - val stack = slot.stack ?: return - val id = stack.getInternalId() ?: return - val bitPrice = stack.getLore() - .firstNotNullOfOrNull { bitCostPattern.useMatcher(it.unformattedString()) { parseShortNumber(group("cost")).toInt() } } - ?: return - lastClickedBitShopItem = BitShopEntry(id, stack.stackSize, bitPrice) - } - - @SubscribeEvent - fun onChat(event: ChatReceived) { - if (event.message.startsWith("You bought ")) { - val lastBit = lastClickedBitShopItem ?: return - if (System.currentTimeMillis() - lastBit.timestamp > 5000) return - ledger.logEntry( - LedgerEntry( - TransactionType.COMMUNITY_SHOP_BUY, - Instant.now(), - listOf( - ItemChange.lose(ItemIds.SKYBLOCK_BIT, lastBit.bitPrice.toDouble()), - ItemChange.gain(lastBit.id, lastBit.stackSize) - ) - ) - ) - } - } - -}
\ No newline at end of file diff --git a/src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt deleted file mode 100644 index cca02e1..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt +++ /dev/null @@ -1,48 +0,0 @@ -package moe.nea.ledger.modules - -import moe.nea.ledger.ItemChange -import moe.nea.ledger.ItemId -import moe.nea.ledger.ItemIdProvider -import moe.nea.ledger.getDisplayNameU -import moe.nea.ledger.getInternalId -import moe.nea.ledger.getLore -import moe.nea.ledger.unformattedString -import moe.nea.ledger.utils.di.Inject -import net.minecraft.init.Blocks -import net.minecraft.inventory.Slot -import net.minecraft.item.Item -import java.time.Instant - -abstract class ChestDetection { - data class ChestCost( - val diff: List<ItemChange>, - val timestamp: Instant, - ) - - @Inject - lateinit var itemIdProvider: ItemIdProvider - fun scrapeChestReward(rewardSlot: Slot): ChestCost? { - val inventory = rewardSlot.inventory - if (!inventory.displayName.unformattedText.unformattedString() - .endsWith(" Chest") - ) return null - val rewardStack = rewardSlot.stack ?: return null - val name = rewardStack.getDisplayNameU() - if (name != "§aOpen Reward Chest") return null - val lore = rewardStack.getLore() - val cost = itemIdProvider.findCostItemsFromSpan(lore) - val gain = (9..18) - .mapNotNull { inventory.getStackInSlot(it) } - .filter { it.item != Item.getItemFromBlock(Blocks.stained_glass_pane) } - .map { - it.getInternalId()?.withStackSize(it.stackSize) - ?: itemIdProvider.findStackableItemByName(it.displayName) - ?: ItemId.NIL.withStackSize(it.stackSize) - } - return ChestCost( - cost.map { ItemChange.lose(it.first, it.second) } + gain.map { ItemChange.gain(it.first, it.second) }, - Instant.now() - ) - } - -}
\ No newline at end of file diff --git a/src/main/kotlin/moe/nea/ledger/modules/DragonEyePlacementDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/DragonEyePlacementDetection.kt deleted file mode 100644 index e389ffb..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/DragonEyePlacementDetection.kt +++ /dev/null @@ -1,47 +0,0 @@ -package moe.nea.ledger.modules - -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.WorldSwitchEvent -import moe.nea.ledger.gen.ItemIds -import moe.nea.ledger.useMatcher -import moe.nea.ledger.utils.di.Inject -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent - -class DragonEyePlacementDetection { - val eyePlaced = "☬ You placed a Summoning Eye!( Brace yourselves!)? \\(./.\\)".toPattern() -//☬ You placed a Summoning Eye! Brace yourselves! (8/8) - var eyeCount = 0 - - @SubscribeEvent - fun onWorldSwap(event: WorldSwitchEvent) { - eyeCount = 0 - } - - @SubscribeEvent - fun onRetrieveEye(event: ChatReceived) { - if (event.message == "You recovered a Summoning Eye!") { - eyeCount-- - } - eyePlaced.useMatcher(event.message) { - eyeCount++ - } - if (event.message == "Your Sleeping Eyes have been awoken by the magic of the Dragon. They are now Remnants of the Eye!") { - logger.logEntry(LedgerEntry( - TransactionType.WYRM_EVOKED, - event.timestamp, - listOf( - ItemChange.lose(ItemIds.SUMMONING_EYE, eyeCount) - ) - )) - eyeCount = 0 - } - } - - @Inject - lateinit var logger: LedgerLogger -}
\ No newline at end of file diff --git a/src/main/kotlin/moe/nea/ledger/modules/DragonSacrificeDetection.kt b/src/main/kotlin/moe/nea/ledger/modules/DragonSacrificeDetection.kt deleted file mode 100644 index 574cfcf..0000000 --- a/src/main/kotlin/moe/nea/ledger/modules/DragonSacrificeDetection.kt +++ /dev/null @@ -1,72 +0,0 @@ -package moe.nea.ledger.modules - -import moe.nea.ledger.DebouncedValue -import moe.nea.ledger.ItemChange -import moe.nea.ledger.ItemId -import moe.nea.ledger.ItemIdProvider -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.events.ChatReceived -import moe.nea.ledger.gen.ItemIds -import moe.nea.ledger.parseShortNumber -import moe.nea.ledger.useMatcher -import moe.nea.ledger.utils.di.Inject -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import net.minecraftforge.fml.common.gameevent.TickEvent -import kotlin.time.Duration.Companion.seconds - -class DragonSacrificeDetection { - //SACRIFICE! You turned Holy Dragon Boots into 30 Dragon Essence! - //BONUS LOOT! You also received 17x Holy Dragon Fragment from your sacrifice! - @Inject - lateinit var itemIdProvider: ItemIdProvider - - @Inject - lateinit var logger: LedgerLogger - - val sacrificePattern = - "SACRIFICE! You turned (?<sacrifice>.*) into (?<amount>$SHORT_NUMBER_PATTERN) Dragon Essence!".toPattern() - val bonusLootPattern = "BONUS LOOT! You also received (?<bonus>.*) from your sacrifice!".toPattern() - - var lastSacrifice: DebouncedValue<LedgerEntry> = DebouncedValue.farFuture() - - - @SubscribeEvent - fun onChat(event: ChatReceived) { - sacrificePattern.useMatcher(event.message) { - val sacrifice = itemIdProvider.findForName(group("sacrifice")) ?: return - val lootEssence = parseShortNumber(group("amount")) - consume(lastSacrifice.replace()) - lastSacrifice = DebouncedValue(LedgerEntry( - TransactionType.DRACONIC_SACRIFICE, - event.timestamp, - listOf( - ItemChange.lose(sacrifice, 1), - ItemChange.gain(ItemIds.ESSENCE_DRAGON, lootEssence) - ) - )) - } - bonusLootPattern.useMatcher(event.message) { - val bonusItem = itemIdProvider.findStackableItemByName( - group("bonus"), true - ) ?: return - lastSacrifice.replace()?.let { - consume( - it.copy(items = it.items + ItemChange.unpairGain(bonusItem)) - ) - } - } - } - - @SubscribeEvent - fun onTick(event: TickEvent) { - consume(lastSacrifice.consume(4.seconds)) - } - - fun consume(entry: LedgerEntry?) { - if (entry != null) - logger.logEntry(entry) - } -}
\ No newlin |
