diff options
Diffstat (limited to 'mod/src/main/kotlin/moe/nea/ledger/modules')
21 files changed, 370 insertions, 29 deletions
diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/AccessorySwapperDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/AccessorySwapperDetection.kt index 1c228ff..808ac5c 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/AccessorySwapperDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/AccessorySwapperDetection.kt @@ -22,9 +22,9 @@ class AccessorySwapperDetection { swapperUsed.useMatcher(event.message) { logger.logEntry( LedgerEntry( - TransactionType.ACCESSORIES_SWAPPING, - event.timestamp, - listOf( + TransactionType.ACCESSORIES_SWAPPING, + event.timestamp, + listOf( ItemChange.lose(ItemIds.TALISMAN_ENRICHMENT_SWAPPER, 1) ) ) diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/BankInterestDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/BankInterestDetection.kt new file mode 100644 index 0000000..5069930 --- /dev/null +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/BankInterestDetection.kt @@ -0,0 +1,44 @@ +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.Matcher +import java.util.regex.Pattern + +class BankInterestDetection { + + val bankInterestPattern = + Pattern.compile("You have just received (?<coins>$SHORT_NUMBER_PATTERN) coins as interest in your (co-op|personal) bank account!") + val offlineBankInterestPattern = + Pattern.compile("Since you've been away you earned (?<coins>$SHORT_NUMBER_PATTERN) coins as interest in your personal bank account!") + + @Inject + lateinit var logger: LedgerLogger + + + @SubscribeEvent + fun onChat(event: ChatReceived) { + fun Matcher.logInterest() { + logger.logEntry( + LedgerEntry( + TransactionType.BANK_INTEREST, + event.timestamp, + listOf( + ItemChange.gainCoins(parseShortNumber(group("coins"))), + ) + ) + ) + } + + bankInterestPattern.useMatcher(event.message) { logInterest() } + offlineBankInterestPattern.useMatcher(event.message) { logInterest() } + } +} diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/BasicReforgeDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/BasicReforgeDetection.kt new file mode 100644 index 0000000..17e2983 --- /dev/null +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/BasicReforgeDetection.kt @@ -0,0 +1,71 @@ +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.SHORT_NUMBER_PATTERN +import moe.nea.ledger.TransactionType +import moe.nea.ledger.events.ChatReceived +import moe.nea.ledger.events.GuiClickEvent +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.di.Inject +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.time.Duration.Companion.seconds + +class BasicReforgeDetection { + + var costPattern = "(?<cost>$SHORT_NUMBER_PATTERN) Coins".toPattern() + + @Inject + lateinit var logger: LedgerLogger + + data class ReforgeInstance( + val price: Double, + val item: ItemId, + ) + + var lastReforge = ExpiringValue.empty<ReforgeInstance>() + + @SubscribeEvent + fun onReforgeClick(event: GuiClickEvent) { + val slot = event.slotIn ?: return + val displayName = slot.inventory.displayName.unformattedText + if (!displayName.unformattedString().contains("Reforge Item") && + !displayName.unformattedString().startsWith("The Hex") + ) return + val stack = slot.stack ?: return + val cost = stack.getLore() + .firstNotNullOfOrNull { costPattern.useMatcher(it.unformattedString()) { parseShortNumber(group("cost")) } } + ?: return + + if (stack.getDisplayNameU() == "§aReforge Item" || stack.getDisplayNameU() == "§aRandom Basic Reforge") { + lastReforge = ExpiringValue(ReforgeInstance(cost, ItemId.NIL /*TODO: read out item stack that is being reforged to save it as a transformed item!*/)) + } + } + + val reforgeChatNotification = "You reforged your .* into a .*!".toPattern() + + @SubscribeEvent + fun onReforgeChat(event: ChatReceived) { + reforgeChatNotification.useMatcher(event.message) { + val reforge = lastReforge.get(3.seconds) ?: return + logger.logEntry( + LedgerEntry( + TransactionType.BASIC_REFORGE, + event.timestamp, + listOf( + ItemChange.loseCoins(reforge.price), + ItemChange(reforge.item, 1.0, ItemChange.ChangeDirection.TRANSFORM) + ) + ) + ) + } + } +}
\ No newline at end of file diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/BitsDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/BitsDetection.kt index 44a0050..f6dad12 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/BitsDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/BitsDetection.kt @@ -1,7 +1,6 @@ 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 @@ -51,8 +50,8 @@ class BitsDetection @Inject constructor(val ledger: LedgerLogger) { ledger.logEntry( LedgerEntry( TransactionType.BOOSTER_COOKIE_ATE, - Instant.now(), - listOf( + Instant.now(), + listOf( ItemChange.lose(ItemIds.BOOSTER_COOKIE, 1) ) ) diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/BitsShopDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/BitsShopDetection.kt index 553bebf..84185bf 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/BitsShopDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/BitsShopDetection.kt @@ -22,10 +22,10 @@ class BitsShopDetection @Inject constructor(val ledger: LedgerLogger) { data class BitShopEntry( - val id: ItemId, - val stackSize: Int, - val bitPrice: Int, - val timestamp: Long = System.currentTimeMillis() + val id: ItemId, + val stackSize: Int, + val bitPrice: Int, + val timestamp: Long = System.currentTimeMillis() ) var lastClickedBitShopItem: BitShopEntry? = null diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/CaducousFeederDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/CaducousFeederDetection.kt new file mode 100644 index 0000000..b64c7e5 --- /dev/null +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/CaducousFeederDetection.kt @@ -0,0 +1,48 @@ +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.GuiClickEvent +import moe.nea.ledger.gen.ItemIds +import moe.nea.ledger.getDisplayNameU +import moe.nea.ledger.getInternalId +import moe.nea.ledger.unformattedString +import moe.nea.ledger.utils.di.Inject +import net.minecraft.client.Minecraft +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import java.time.Instant + +class CaducousFeederDetection { + + @Inject + lateinit var logger: LedgerLogger + + @Inject + lateinit var minecraft: Minecraft + + @SubscribeEvent + fun onFeederClick(event: GuiClickEvent) { + val slot = event.slotIn ?: return + val displayName = slot.inventory.displayName.unformattedText + if (!displayName.unformattedString().contains("Confirm Caducous Feeder")) return + val stack = slot.stack ?: return + val player = minecraft.thePlayer ?: return + if (!player.inventory.mainInventory.any { it?.getInternalId() == ItemIds.ULTIMATE_CARROT_CANDY }) return + if (stack.getDisplayNameU() != "§aUse Caducous Feeder") return + val petId = slot.inventory.getStackInSlot(13)?.getInternalId() ?: ItemId.NIL + + logger.logEntry( + LedgerEntry( + TransactionType.CADUCOUS_FEEDER_USED, + Instant.now(), + listOf( + ItemChange.lose(ItemIds.ULTIMATE_CARROT_CANDY, 1), + ItemChange(petId, 1.0, ItemChange.ChangeDirection.TRANSFORM), + ) + ) + ) + } +}
\ No newline at end of file diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/DragonEyePlacementDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/DragonEyePlacementDetection.kt index e389ffb..b7b9de1 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/DragonEyePlacementDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/DragonEyePlacementDetection.kt @@ -1,7 +1,6 @@ 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 diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/DragonSacrificeDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/DragonSacrificeDetection.kt index 574cfcf..3bf36f9 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/DragonSacrificeDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/DragonSacrificeDetection.kt @@ -2,7 +2,6 @@ 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 diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/DungeonChestDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/DungeonChestDetection.kt index e747be9..37d0e9c 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/DungeonChestDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/DungeonChestDetection.kt @@ -76,7 +76,7 @@ class DungeonChestDetection @Inject constructor(val logger: LedgerLogger) : Ches } } - val rewardMessage = " (WOOD|GOLD|DIAMOND|EMERALD|OBSIDIAN|BEDROCK) CHEST REWARDS".toPattern() + val rewardMessage = " *(WOOD|GOLD|DIAMOND|EMERALD|OBSIDIAN|BEDROCK) CHEST REWARDS".toPattern() @SubscribeEvent fun onChatMessage(event: ChatReceived) { diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/ExternalDataProvider.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/ExternalDataProvider.kt index 93bb453..42a1f42 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/ExternalDataProvider.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/ExternalDataProvider.kt @@ -14,6 +14,7 @@ import java.util.concurrent.CompletableFuture class ExternalDataProvider @Inject constructor( val requestUtil: RequestUtil ) { + // TODO: Save all the data locally, so in case of a failed request older versions can be used fun createAuxillaryDataRequest(path: String): Request { return requestUtil.createRequest("https://github.com/nea89o/ledger-auxiliary-data/raw/refs/heads/master/$path") @@ -22,7 +23,9 @@ class ExternalDataProvider @Inject constructor( private val itemNameFuture: CompletableFuture<Map<String, String>> = CompletableFuture.supplyAsync { val request = createAuxillaryDataRequest("data/item_names.json") val response = request.execute(requestUtil) - val nameMap = response.json(GsonUtil.typeToken<Map<String, String>>()) + val nameMap = + response?.json(GsonUtil.typeToken<Map<String, String>>()) + ?: mapOf() return@supplyAsync nameMap } diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/EyedropsDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/EyedropsDetection.kt index 04dbe80..c90f8d9 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/EyedropsDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/EyedropsDetection.kt @@ -1,7 +1,6 @@ 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 @@ -23,9 +22,9 @@ class EyedropsDetection { capsaicinEyedropsUsed.useMatcher(event.message) { logger.logEntry( LedgerEntry( - TransactionType.CAPSAICIN_EYEDROPS_USED, - event.timestamp, - listOf( + TransactionType.CAPSAICIN_EYEDROPS_USED, + event.timestamp, + listOf( ItemChange.lose(ItemIds.CAPSAICIN_EYEDROPS_NO_CHARGES, 1) ) ) diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/ForgeDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/ForgeDetection.kt index 95811ed..b8974c0 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/ForgeDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/ForgeDetection.kt @@ -9,6 +9,7 @@ import moe.nea.ledger.getInternalId import moe.nea.ledger.matches import moe.nea.ledger.unformattedString import moe.nea.ledger.utils.di.Inject +import net.minecraft.item.EnumDyeColor import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.time.Instant @@ -20,7 +21,9 @@ class ForgeDetection { fun onClick(event: GuiClickEvent) { val slot = event.slotIn ?: return val clickedItem = slot.stack ?: return + val dyeColor = EnumDyeColor.byMetadata(clickedItem.itemDamage) if (clickedItem.displayName.unformattedString() != "Confirm") return + if (dyeColor == EnumDyeColor.RED) return val furnaceSlotName = slot.inventory.getStackInSlot(furnaceSlot)?.displayName?.unformattedString() ?: return if (!furnaceName.matches(furnaceSlotName)) return diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/GambleDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/GambleDetection.kt index a8f79c1..9149e14 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/GambleDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/GambleDetection.kt @@ -1,7 +1,6 @@ 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 diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/GhostCoinDropDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/GhostCoinDropDetection.kt new file mode 100644 index 0000000..42084e2 --- /dev/null +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/GhostCoinDropDetection.kt @@ -0,0 +1,38 @@ +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 GhostCoinDropDetection { + + val ghostCoinPattern = + Pattern.compile("The ghost's death materialized (?<coins>$SHORT_NUMBER_PATTERN) coins from the mists!") + + @Inject + lateinit var logger: LedgerLogger + + @SubscribeEvent + fun onGhostCoinDrop(event: ChatReceived) { + ghostCoinPattern.useMatcher(event.message) { + logger.logEntry( + LedgerEntry( + // TODO: merge this into a generic mob drop tt + TransactionType.GHOST_COIN_DROP, + event.timestamp, + listOf( + ItemChange.gainCoins(parseShortNumber(group("coins"))), + ) + ) + ) + } + } +} diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/GodPotionDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/GodPotionDetection.kt index ae86519..56e2b69 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/GodPotionDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/GodPotionDetection.kt @@ -1,7 +1,6 @@ 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 @@ -23,9 +22,9 @@ class GodPotionDetection { godPotionDrank.useMatcher(event.message) { logger.logEntry( LedgerEntry( - TransactionType.GOD_POTION_DRANK, - event.timestamp, - listOf( + TransactionType.GOD_POTION_DRANK, + event.timestamp, + listOf( ItemChange.lose(ItemIds.GOD_POTION_2, 1) ) ) diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/GodPotionMixinDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/GodPotionMixinDetection.kt index b96a24a..072503f 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/GodPotionMixinDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/GodPotionMixinDetection.kt @@ -26,9 +26,9 @@ class GodPotionMixinDetection { godPotionMixinDrank.useMatcher(event.message) { logger.logEntry( LedgerEntry( - TransactionType.GOD_POTION_MIXIN_DRANK, - event.timestamp, - listOf( + TransactionType.GOD_POTION_MIXIN_DRANK, + event.timestamp, + listOf( ItemChange.lose(itemIdProvider.findForName(group("what")) ?: ItemId.NIL, 1) ) ) diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/GummyPolarBearDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/GummyPolarBearDetection.kt new file mode 100644 index 0000000..d69df83 --- /dev/null +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/GummyPolarBearDetection.kt @@ -0,0 +1,34 @@ +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 GummyPolarBearDetection { + + val ateGummyPolarBear = "You ate a Re-heated Gummy Polar Bear!".toPattern() + + @Inject + lateinit var logger: LedgerLogger + + @SubscribeEvent + fun onChat(event: ChatReceived) { + ateGummyPolarBear.useMatcher(event.message) { + logger.logEntry( + LedgerEntry( + TransactionType.GUMMY_POLAR_BEAR_ATE, + event.timestamp, + listOf( + ItemChange.lose(ItemIds.REHEATED_GUMMY_POLAR_BEAR, 1) + ) + ) + ) + } + } +}
\ No newline at end of file diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/KuudraChestDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/KuudraChestDetection.kt index e0e9322..88c45d2 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/KuudraChestDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/KuudraChestDetection.kt @@ -36,6 +36,9 @@ class KuudraChestDetection : ChestDetection() { if (requiredKey != null && !hasKey(requiredKey)) { return } + if (requiredKey == null && event.slotIn.inventory.name != "Free Chest") { + return + } log.logEntry(LedgerEntry( TransactionType.KUUDRA_CHEST_OPEN, diffs.timestamp, diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/PestRepellentDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/PestRepellentDetection.kt new file mode 100644 index 0000000..f627393 --- /dev/null +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/PestRepellentDetection.kt @@ -0,0 +1,47 @@ +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 PestRepellentDetection { + + val pestRepellent = "YUM! Pests will now spawn (?<reduction>[2-4])x less while you break crops for the next 60m!".toPattern() + + @Inject + lateinit var logger: LedgerLogger + + @SubscribeEvent + fun onChat(event: ChatReceived) { + pestRepellent.useMatcher(event.message) { + val reductionAmount = group("reduction") + if (reductionAmount == "2") { + logger.logEntry( + LedgerEntry( + TransactionType.PEST_REPELLENT_USED, + event.timestamp, + listOf( + ItemChange.lose(ItemIds.PEST_REPELLENT, 1), + ) + ) + ) + } else if (reductionAmount == "4"){ + logger.logEntry( + LedgerEntry( + TransactionType.PEST_REPELLENT_USED, + event.timestamp, + listOf( + ItemChange.lose(ItemIds.PEST_REPELLENT_MAX, 1), + ) + ) + ) + } + } + } +}
\ No newline at end of file diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/StonksAuctionDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/StonksAuctionDetection.kt new file mode 100644 index 0000000..4f3706c --- /dev/null +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/StonksAuctionDetection.kt @@ -0,0 +1,59 @@ +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.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 java.util.regex.Matcher +import java.util.regex.Pattern + +class StonksAuctionDetection { + + val stonksPlacedBid = + Pattern.compile("Successfully placed your Stonk bid of (?<coins>$SHORT_NUMBER_PATTERN) Coins!") + val stonksIncreaseBid = + Pattern.compile("Successfully increased your Stonk bid by (?<coins>$SHORT_NUMBER_PATTERN) Coins!") + val stonksClaim = + Pattern.compile("You claimed (?<count>$SHORT_NUMBER_PATTERN)x Stock of Stonks from the Stonks Auction!") + + @Inject + lateinit var logger: LedgerLogger + + @SubscribeEvent + fun onChat(event: ChatReceived) { + fun Matcher.logBidding() { + logger.logEntry( + LedgerEntry( + TransactionType.STONKS_AUCTION, + event.timestamp, + listOf( + ItemChange.loseCoins(parseShortNumber(group("coins"))), + ) + ) + ) + } + + fun Matcher.logClaim() { + logger.logEntry( + LedgerEntry( + TransactionType.STONKS_AUCTION, + event.timestamp, + listOf( + ItemChange.gain(ItemIds.STOCK_OF_STONKS, parseShortNumber(group("count"))) + ) + ) + ) + } + + stonksPlacedBid.useMatcher(event.message) { logBidding() } + stonksIncreaseBid.useMatcher(event.message) { logBidding() } + stonksClaim.useMatcher(event.message) { logClaim() } + } +} diff --git a/mod/src/main/kotlin/moe/nea/ledger/modules/VisitorDetection.kt b/mod/src/main/kotlin/moe/nea/ledger/modules/VisitorDetection.kt index f457ae4..5178e9f 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/modules/VisitorDetection.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/modules/VisitorDetection.kt @@ -5,15 +5,12 @@ 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.ExtraSupplyIdEvent import moe.nea.ledger.events.GuiClickEvent import moe.nea.ledger.getDisplayNameU 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 |