aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/moe/nea')
-rw-r--r--src/main/kotlin/moe/nea/ledger/ConfigCommand.kt31
-rw-r--r--src/main/kotlin/moe/nea/ledger/DebugDataCommand.kt34
-rw-r--r--src/main/kotlin/moe/nea/ledger/DevUtil.kt7
-rw-r--r--src/main/kotlin/moe/nea/ledger/ExpiringValue.kt28
-rw-r--r--src/main/kotlin/moe/nea/ledger/ItemChange.kt84
-rw-r--r--src/main/kotlin/moe/nea/ledger/ItemId.kt37
-rw-r--r--src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt179
-rw-r--r--src/main/kotlin/moe/nea/ledger/ItemUtil.kt90
-rw-r--r--src/main/kotlin/moe/nea/ledger/Ledger.kt187
-rw-r--r--src/main/kotlin/moe/nea/ledger/LedgerEntry.kt28
-rw-r--r--src/main/kotlin/moe/nea/ledger/LedgerLogger.kt135
-rw-r--r--src/main/kotlin/moe/nea/ledger/LogChatCommand.kt27
-rw-r--r--src/main/kotlin/moe/nea/ledger/NumberUtil.kt117
-rw-r--r--src/main/kotlin/moe/nea/ledger/QueryCommand.kt196
-rw-r--r--src/main/kotlin/moe/nea/ledger/ScoreboardUtil.kt29
-rw-r--r--src/main/kotlin/moe/nea/ledger/TelemetryProvider.kt66
-rw-r--r--src/main/kotlin/moe/nea/ledger/TransactionType.kt28
-rw-r--r--src/main/kotlin/moe/nea/ledger/TriggerCommand.kt34
-rw-r--r--src/main/kotlin/moe/nea/ledger/UUIDUtil.kt43
-rw-r--r--src/main/kotlin/moe/nea/ledger/config/DebugOptions.kt13
-rw-r--r--src/main/kotlin/moe/nea/ledger/config/LedgerConfig.kt35
-rw-r--r--src/main/kotlin/moe/nea/ledger/config/MainOptions.kt27
-rw-r--r--src/main/kotlin/moe/nea/ledger/config/SynchronizationOptions.kt11
-rw-r--r--src/main/kotlin/moe/nea/ledger/config/UpdateUi.kt17
-rw-r--r--src/main/kotlin/moe/nea/ledger/config/UpdateUiMarker.kt6
-rw-r--r--src/main/kotlin/moe/nea/ledger/database/DBLogEntry.kt19
-rw-r--r--src/main/kotlin/moe/nea/ledger/database/DBSchema.kt545
-rw-r--r--src/main/kotlin/moe/nea/ledger/database/DBUpgrade.kt68
-rw-r--r--src/main/kotlin/moe/nea/ledger/database/Database.kt54
-rw-r--r--src/main/kotlin/moe/nea/ledger/database/Upgrades.kt20
-rw-r--r--src/main/kotlin/moe/nea/ledger/database/schema.dot23
-rw-r--r--src/main/kotlin/moe/nea/ledger/events/BeforeGuiAction.kt11
-rw-r--r--src/main/kotlin/moe/nea/ledger/events/ChatReceived.kt15
-rw-r--r--src/main/kotlin/moe/nea/ledger/events/ExtraSupplyIdEvent.kt12
-rw-r--r--src/main/kotlin/moe/nea/ledger/events/GuiClickEvent.kt9
-rw-r--r--src/main/kotlin/moe/nea/ledger/events/InitializationComplete.kt6
-rw-r--r--src/main/kotlin/moe/nea/ledger/events/SupplyDebugInfo.kt10
-rw-r--r--src/main/kotlin/moe/nea/ledger/events/TriggerEvent.kt7
-rw-r--r--src/main/kotlin/moe/nea/ledger/events/WorldLoadEvent.kt5
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/AuctionHouseDetection.kt143
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/BankDetection.kt49
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/BazaarDetection.kt58
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/BazaarOrderDetection.kt95
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/BitsDetection.kt61
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/BitsShopDetection.kt65
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/ChestDetection.kt48
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/DungeonChestDetection.kt70
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/ExternalDataProvider.kt43
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/ForgeDetection.kt48
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/GambleDetection.kt61
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/KatDetection.kt95
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/KuudraChestDetection.kt45
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/MineshaftCorpseDetection.kt81
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/MinionDetection.kt61
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/NpcDetection.kt111
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/UpdateChecker.kt149
-rw-r--r--src/main/kotlin/moe/nea/ledger/modules/VisitorDetection.kt87
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/BorderedTextTracker.kt41
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/ErrorUtil.kt52
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/GsonUtil.kt10
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/MinecraftExecutor.kt10
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/di/DI.kt78
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/di/DIProvider.kt52
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/di/Inject.kt6
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/network/Request.kt40
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/network/RequestUtil.kt63
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/network/Response.kt19
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/BooleanContext.kt10
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/CommonKeys.kt9
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/Context.kt57
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/ContextValue.kt70
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/EventRecorder.kt9
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/ExceptionContextValue.kt39
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/JsonElementContext.kt9
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/LoggingEventRecorder.kt25
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/RecordedEvent.kt5
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/Severity.kt8
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/Span.kt146
-rw-r--r--src/main/kotlin/moe/nea/ledger/utils/telemetry/StringContext.kt11
79 files changed, 0 insertions, 4432 deletions
diff --git a/src/main/kotlin/moe/nea/ledger/ConfigCommand.kt b/src/main/kotlin/moe/nea/ledger/ConfigCommand.kt
deleted file mode 100644
index 5b964c8..0000000
--- a/src/main/kotlin/moe/nea/ledger/ConfigCommand.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package moe.nea.ledger
-
-import io.github.notenoughupdates.moulconfig.common.IMinecraft
-import net.minecraft.command.CommandBase
-import net.minecraft.command.ICommandSender
-
-class ConfigCommand : CommandBase() {
- override fun canCommandSenderUseCommand(sender: ICommandSender?): Boolean {
- return true
- }
-
- override fun getCommandName(): String {
- return "ledgerconfig"
- }
-
- override fun getCommandUsage(sender: ICommandSender?): String {
- return ""
- }
-
- override fun processCommand(sender: ICommandSender?, args: Array<out String>) {
- val editor = Ledger.managedConfig.getEditor()
- editor.search(args.joinToString(" "))
- Ledger.runLater {
- IMinecraft.instance.openWrappedScreen(editor)
- }
- }
-
- override fun getCommandAliases(): List<String> {
- return listOf("moneyledger")
- }
-} \ No newline at end of file
diff --git a/src/main/kotlin/moe/nea/ledger/DebugDataCommand.kt b/src/main/kotlin/moe/nea/ledger/DebugDataCommand.kt
deleted file mode 100644
index bab0a78..0000000
--- a/src/main/kotlin/moe/nea/ledger/DebugDataCommand.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package moe.nea.ledger
-
-import moe.nea.ledger.events.SupplyDebugInfo
-import moe.nea.ledger.utils.di.Inject
-import net.minecraft.command.CommandBase
-import net.minecraft.command.ICommandSender
-import net.minecraftforge.common.MinecraftForge
-
-class DebugDataCommand : CommandBase() {
-
- override fun canCommandSenderUseCommand(sender: ICommandSender?): Boolean {
- return true
- }
-
- override fun getCommandName(): String {
- return "ledgerdebug"
- }
-
- override fun getCommandUsage(sender: ICommandSender?): String {
- return ""
- }
-
- @Inject
- lateinit var logger: LedgerLogger
-
- override fun processCommand(sender: ICommandSender?, args: Array<out String>?) {
- val debugInfo = SupplyDebugInfo()
- MinecraftForge.EVENT_BUS.post(debugInfo)
- logger.printOut("Collected debug info:")
- debugInfo.data.forEach {
- logger.printOut("${it.first}: ${it.second}")
- }
- }
-} \ No newline at end of file
diff --git a/src/main/kotlin/moe/nea/ledger/DevUtil.kt b/src/main/kotlin/moe/nea/ledger/DevUtil.kt
deleted file mode 100644
index d0dd653..0000000
--- a/src/main/kotlin/moe/nea/ledger/DevUtil.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package moe.nea.ledger
-
-import net.minecraft.launchwrapper.Launch
-
-object DevUtil {
- val isDevEnv = Launch.blackboard["fml.deobfuscatedEnvironment"] as Boolean
-} \ No newline at end of file
diff --git a/src/main/kotlin/moe/nea/ledger/ExpiringValue.kt b/src/main/kotlin/moe/nea/ledger/ExpiringValue.kt
deleted file mode 100644
index dac4751..0000000
--- a/src/main/kotlin/moe/nea/ledger/ExpiringValue.kt
+++ /dev/null
@@ -1,28 +0,0 @@
-package moe.nea.ledger
-
-import kotlin.time.Duration
-import kotlin.time.Duration.Companion.nanoseconds
-
-class ExpiringValue<T>(private val value: T) {
- val lastSeenAt: Long = System.nanoTime()
- val age get() = (System.nanoTime() - lastSeenAt).nanoseconds
- var taken = false
- fun get(expiry: Duration): T? {
- return if (!taken && expiry > age) value
- else null
- }
-
- companion object {
- fun <T> empty(): ExpiringValue<T> {
- val value = ExpiringValue(Unit)
- value.take()
- @Suppress("UNCHECKED_CAST")
- return value as ExpiringValue<T>
- }
- }
-
- fun consume(expiry: Duration): T? = get(expiry).also { take() }
- fun take() {
- taken = true
- }
-} \ No newline at end of file
diff --git a/src/main/kotlin/moe/nea/ledger/ItemChange.kt b/src/main/kotlin/moe/nea/ledger/ItemChange.kt
deleted file mode 100644
index fda709c..0000000
--- a/src/main/kotlin/moe/nea/ledger/ItemChange.kt
+++ /dev/null
@@ -1,84 +0,0 @@
-package moe.nea.ledger
-
-import moe.nea.ledger.database.DBItemEntry
-import moe.nea.ledger.database.ResultRow
-import net.minecraft.event.HoverEvent
-import net.minecraft.util.ChatComponentText
-import net.minecraft.util.ChatStyle
-import net.minecraft.util.EnumChatFormatting
-import net.minecraft.util.IChatComponent
-
-data class ItemChange(
- val itemId: ItemId,
- val count: Double,
- val direction: ChangeDirection,
-) {
- fun formatChat(): IChatComponent {
- return ChatComponentText(" ")
- .appendSibling(direction.chatFormat)
- .appendText(" ")
- .appendSibling(ChatComponentText("$count").setChatStyle(ChatStyle().setColor(EnumChatFormatting.WHITE)))
- .appendSibling(ChatComponentText("x").setChatStyle(ChatStyle().setColor(EnumChatFormatting.DARK_GRAY)))
- .appendText(" ")
- .appendSibling(ChatComponentText(itemId.string).setChatStyle(ChatStyle().setParentStyle(ChatStyle().setColor(
- EnumChatFormatting.WHITE))))
- }
-
- enum class ChangeDirection {
- GAINED,
- TRANSFORM,
- SYNC,
- CATALYST,
- LOST;
-
- val chatFormat by lazy { formatChat0() }
- private fun formatChat0(): IChatComponent {
- val (text, color) = when (this) {
- GAINED -> "+" to EnumChatFormatting.GREEN
- TRANSFORM -> "~" to EnumChatFormatting.YELLOW
- SYNC -> "=" to EnumChatFormatting.BLUE
- CATALYST -> "*" to EnumChatFormatting.DARK_PURPLE
- LOST -> "-" to EnumChatFormatting.RED
- }
- return ChatComponentText(text)
- .setChatStyle(
- ChatStyle()
- .setColor(color)
- .setChatHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT,
- ChatComponentText(name).setChatStyle(ChatStyle().setColor(color)))))
- }
- }
-
- companion object {
- fun gainCoins(number: Double): ItemChange {
- return gain(ItemId.COINS, number)
- }
-
- fun unpair(direction: ChangeDirection, pair: Pair<ItemId, Double>): ItemChange {
- return ItemChange(pair.first, pair.second, direction)
- }
-
- fun unpairGain(pair: Pair<ItemId, Double>) = unpair(ChangeDirection.GAINED, pair)
- fun unpairLose(pair: Pair<ItemId, Double>) = unpair(ChangeDirection.LOST, pair)
-
- fun gain(itemId: ItemId, amount: Number): ItemChange {
- return ItemChange(itemId, amount.toDouble(), ChangeDirection.GAINED)
- }
-
- fun lose(itemId: ItemId, amount: Number): ItemChange {
- return ItemChange(itemId, amount.toDouble(), ChangeDirection.LOST)
- }
-
- fun loseCoins(number: Double): ItemChange {
- return lose(ItemId.COINS, number)
- }
-
- fun from(result: ResultRow): ItemChange {
- return ItemChange(
- result[DBItemEntry.itemId],
- result[DBItemEntry.size],
- result[DBItemEntry.mode],
- )
- }
- }
-} \ No newline at end of file
diff --git a/src/main/kotlin/moe/nea/ledger/ItemId.kt b/src/main/kotlin/moe/nea/ledger/ItemId.kt
deleted file mode 100644
index 2b83357..0000000
--- a/src/main/kotlin/moe/nea/ledger/ItemId.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package moe.nea.ledger
-
-@JvmInline
-value class ItemId(
- val string: String
-) {
- fun singleItem(): Pair<ItemId, Double> {
- return withStackSize(1)
- }
-
- fun withStackSize(size: Number): Pair<ItemId, Double> {
- return Pair(this, size.toDouble())
- }
-
-
- companion object {
- fun skill(skill: String) = ItemId("SKYBLOCK_SKILL_$skill")
-
- val GARDEN = skill("GARDEN")
- val FARMING = skill("FARMING")
- val GEMSTONE_POWDER = ItemId("SKYBLOCK_POWDER_GEMSTONE")
- val MITHRIL_POWDER = ItemId("SKYBLOCK_POWDER_MITHRIL")
- val GOLD_ESSENCE = ItemId("ESSENCE_GOLD")
- val PELT = ItemId("SKYBLOCK_PELT")
- val COINS = ItemId("SKYBLOCK_COIN")
- val FINE_FLOUR = ItemId("FINE_FLOUR")
- val BITS = ItemId("SKYBLOCK_BIT")
- val COPPER = ItemId("SKYBLOCK_COPPER")
- val NIL = ItemId("SKYBLOCK_NIL")
- val ARCHFIEND_LOW_CLASS = ItemId("ARCHFIEND_DICE")
- val ARCHFIEND_HIGH_CLASS = ItemId("HIGH_CLASS_ARCHFIEND_DICE")
- val ARCHFIEND_DYE = ItemId("DYE_ARCHFIEND")
- val DUNGEON_CHEST_KEY = ItemId("DUNGEON_CHEST_KEY")
- val BOOSTER_COOKIE = ItemId("BOOSTER_COOKIE")
- val KISMET_FEATHER = ItemId("KISMET_FEATHER")
- }
-} \ No newline at end of file
diff --git a/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt b/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt
deleted file mode 100644
index 7fe0206..0000000
--- a/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt
+++ /dev/null
@@ -1,179 +0,0 @@
-package moe.nea.ledger
-
-import moe.nea.ledger.events.BeforeGuiAction
-import moe.nea.ledger.events.ExtraSupplyIdEvent
-import moe.nea.ledger.events.RegistrationFinishedEvent
-import moe.nea.ledger.events.SupplyDebugInfo
-import moe.nea.ledger.modules.ExternalDataProvider
-import net.minecraft.client.Minecraft
-import net.minecraft.item.ItemStack
-import net.minecraft.nbt.NBTTagCompound
-import net.minecraftforge.client.event.GuiScreenEvent
-import net.minecraftforge.common.MinecraftForge
-import net.minecraftforge.fml.common.eventhandler.EventPriority
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-import org.lwjgl.input.Mouse
-
-class ItemIdProvider {
-
- @SubscribeEvent
- fun onMouseInput(event: GuiScreenEvent.MouseInputEvent.Pre) {
- if (Mouse.getEventButton() == -1) return
- MinecraftForge.EVENT_BUS.post(BeforeGuiAction(event.gui))
- }
-
- @SubscribeEvent
- fun onKeyInput(event: GuiScreenEvent.KeyboardInputEvent.Pre) {
- MinecraftForge.EVENT_BUS.post(BeforeGuiAction(event.gui))
- }
-
- private val knownNames = mutableMapOf<String, ItemId>()
-
- fun createLookupTagFromDisplayName(itemName: String): String {
- return itemName.unformattedString().trim().lowercase()
- }
-
- fun saveKnownItem(itemName: String, itemId: ItemId) {
- knownNames[createLookupTagFromDisplayName(itemName)] = itemId
- }
-
- @SubscribeEvent
- fun onDataLoaded(event: ExternalDataProvider.DataLoaded) {
- event.provider.itemNames.forEach { (itemId, itemName) ->
- saveKnownItem(itemName, ItemId(itemId))
- }
- }
-
- @SubscribeEvent
- fun onRegistrationFinished(event: RegistrationFinishedEvent) {
- MinecraftForge.EVENT_BUS.post(ExtraSupplyIdEvent(::saveKnownItem))
- }
-
- @SubscribeEvent(priority = EventPriority.HIGH)
- fun savePlayerInventoryIds(event: BeforeGuiAction) {
- val player = Minecraft.getMinecraft().thePlayer ?: return
- val inventory = player.inventory ?: return
- inventory.mainInventory?.forEach { saveFromSlot(it) }
- inventory.armorInventory?.forEach { saveFromSlot(it) }
- }
-
- @SubscribeEvent
- fun onDebugData(event: SupplyDebugInfo) {
- event.record("knownItemNames", knownNames.size)
- }
-
- fun saveFromSlot(stack: ItemStack?, preprocessName: (String) -> String = { it }) {
- if (stack == null) return
- val nbt = stack.tagCompound ?: NBTTagCompound()
- val display = nbt.getCompoundTag("display")
- var name = display.getString("Name").unformattedString()
- name = preprocessName(name)
- name = name.trim()
- val id = stack.getInternalId()
- if (id != null && name.isNotBlank()) {
- saveKnownItem(name, id)
- }
- }
-
- @SubscribeEvent(priority = EventPriority.HIGH)
- fun saveChestInventoryIds(event: BeforeGuiAction) {
- val slots = event.chestSlots ?: return
- val chestName = slots.lowerChestInventory.name.unformattedString()
- val isOrderMenu = chestName == "Your Bazaar Orders" || chestName == "Co-op Bazaar Orders"
- val preprocessor: (String) -> String = if (isOrderMenu) {
- { it.removePrefix("BUY ").removePrefix("SELL ") }
- } else {
- { it }
- }
- slots.inventorySlots.forEach {
- saveFromSlot(it?.stack, preprocessor)
- }
- }
-
- // TODO: make use of colour
- fun findForName(name: String, fallbackToGenerated: Boolean = true): ItemId? {
- var id = knownNames[createLookupTagFromDisplayName(name)]
- if (id == null && fallbackToGenerated) {
- id = generateName(name)
- }
- return id
- }
-
- fun generateName(name: String): ItemId {
- return ItemId(name.uppercase().replace(" ", "_"))
- }
-
- private val coinRegex = "(?<amount>$SHORT_NUMBER_PATTERN) Coins?".toPattern()
- private val stackedItemRegex = "(?<name>.*) x(?<count>$SHORT_NUMBER_PATTERN)".toPattern()
- private val essenceRegex = "(?<essence>.*) Essence x(?<count>$SHORT_NUMBER_PATTERN)".toPattern()
- private val numberedItemRegex = "(?<count>$SHORT_NUMBER_PATTERN) (?<what>.*)".toPattern()
-
- fun findCostItemsFromSpan(lore: List<String>): List<Pair<ItemId, Double>> {
- return lore.iterator().asSequence()
- .dropWhile { it.unfor