diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/moe/nea/ledger/BazaarDetection.kt | 6 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt | 44 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/ledger/Ledger.kt | 4 | ||||
-rw-r--r-- | src/main/kotlin/moe/nea/ledger/NumberUtil.kt | 1 |
4 files changed, 51 insertions, 4 deletions
diff --git a/src/main/java/moe/nea/ledger/BazaarDetection.kt b/src/main/java/moe/nea/ledger/BazaarDetection.kt index aa3aeba..9bcab30 100644 --- a/src/main/java/moe/nea/ledger/BazaarDetection.kt +++ b/src/main/java/moe/nea/ledger/BazaarDetection.kt @@ -3,7 +3,7 @@ package moe.nea.ledger import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.regex.Pattern -class BazaarDetection(val ledger: LedgerLogger) { +class BazaarDetection(val ledger: LedgerLogger, val ids: ItemIdProvider) { val instaBuyPattern = Pattern.compile("\\[Bazaar\\] Bought (?<count>[0-9]+)x (?<what>.*) for (?<coins>$SHORT_NUMBER_PATTERN) coins!") @@ -19,7 +19,7 @@ class BazaarDetection(val ledger: LedgerLogger) { "BAZAAR_BUY_INSTANT", event.timestamp, parseShortNumber(group("coins")), - group("what"), + ids.findForName(group("what")), group("count").toInt(), ) ) @@ -30,7 +30,7 @@ class BazaarDetection(val ledger: LedgerLogger) { "BAZAAR_SELL_INSTANT", event.timestamp, parseShortNumber(group("coins")), - group("what"), + ids.findForName(group("what")), group("count").toInt(), ) ) diff --git a/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt b/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt new file mode 100644 index 0000000..8ad8d26 --- /dev/null +++ b/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt @@ -0,0 +1,44 @@ +package moe.nea.ledger + +import net.minecraft.client.gui.GuiScreen +import net.minecraft.client.gui.inventory.GuiChest +import net.minecraft.inventory.ContainerChest +import net.minecraft.nbt.NBTTagCompound +import net.minecraftforge.client.event.GuiScreenEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class ItemIdProvider { + + @SubscribeEvent + fun onMouseInput(event: GuiScreenEvent.MouseInputEvent.Pre) { + saveInventoryIds(event.gui) + } + + @SubscribeEvent + fun onKeyInput(event: GuiScreenEvent.KeyboardInputEvent.Pre) { + saveInventoryIds(event.gui) + } + + private val knownNames = mutableMapOf<String, String>() + + fun saveInventoryIds(gui: GuiScreen) { + val chest = (gui as? GuiChest) ?: return + val slots = chest.inventorySlots as ContainerChest + slots.inventorySlots.forEach { + val stack = it.stack ?: return@forEach + val nbt = stack.tagCompound ?: NBTTagCompound() + val display = nbt.getCompoundTag("display") + val name = display.getString("Name").unformattedString() + val extraAttributes = nbt.getCompoundTag("ExtraAttributes") + val id = extraAttributes.getString("id") + if (id.isNotBlank() && name.isNotBlank()) { + knownNames[name] = id + } + } + } + + fun findForName(name: String): String? { + return knownNames[name] + } + +}
\ No newline at end of file diff --git a/src/main/kotlin/moe/nea/ledger/Ledger.kt b/src/main/kotlin/moe/nea/ledger/Ledger.kt index 773f90e..7f2f306 100644 --- a/src/main/kotlin/moe/nea/ledger/Ledger.kt +++ b/src/main/kotlin/moe/nea/ledger/Ledger.kt @@ -37,10 +37,12 @@ class Ledger { @Mod.EventHandler fun init(event: FMLInitializationEvent) { val ledger = LedgerLogger() + val ids = ItemIdProvider() listOf( this, + ids, BankDetection(ledger), - BazaarDetection(ledger) + BazaarDetection(ledger, ids) ).forEach(MinecraftForge.EVENT_BUS::register) } diff --git a/src/main/kotlin/moe/nea/ledger/NumberUtil.kt b/src/main/kotlin/moe/nea/ledger/NumberUtil.kt index 8aa9bb8..267a8c5 100644 --- a/src/main/kotlin/moe/nea/ledger/NumberUtil.kt +++ b/src/main/kotlin/moe/nea/ledger/NumberUtil.kt @@ -30,3 +30,4 @@ fun parseShortNumber(string: String): Double { fun <T> Pattern.useMatcher(string: String, block: Matcher.() -> T): T? = matcher(string).takeIf { it.matches() }?.let(block) +fun String.unformattedString(): String = replace("ยง.".toRegex(), "")
\ No newline at end of file |