diff options
Diffstat (limited to 'mod/src/main')
46 files changed, 571 insertions, 394 deletions
diff --git a/mod/src/main/java/moe/nea/ledger/init/AutoDiscoveryMixinPlugin.java b/mod/src/main/java/moe/nea/ledger/init/AutoDiscoveryMixinPlugin.java index 56841b5..64fa6c2 100644 --- a/mod/src/main/java/moe/nea/ledger/init/AutoDiscoveryMixinPlugin.java +++ b/mod/src/main/java/moe/nea/ledger/init/AutoDiscoveryMixinPlugin.java @@ -96,6 +96,8 @@ public class AutoDiscoveryMixinPlugin implements IMixinConfigPlugin { * @param className the name or path of a class to be registered as a mixin. */ public void tryAddMixinClass(String className) { + if (!className.endsWith(".class")) return; + if (className.indexOf('$') >= 0) return; String norm = (className.endsWith(".class") ? className.substring(0, className.length() - ".class".length()) : className) .replace("\\", "/") .replace("/", "."); diff --git a/mod/src/main/java/moe/nea/ledger/mixin/AccessorContainerDispenser.java b/mod/src/main/java/moe/nea/ledger/mixin/AccessorContainerDispenser.java new file mode 100644 index 0000000..a3d32c4 --- /dev/null +++ b/mod/src/main/java/moe/nea/ledger/mixin/AccessorContainerDispenser.java @@ -0,0 +1,12 @@ +package moe.nea.ledger.mixin; + +import net.minecraft.inventory.ContainerDispenser; +import net.minecraft.inventory.IInventory; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ContainerDispenser.class) +public interface AccessorContainerDispenser { + @Accessor("dispenserInventory") + IInventory getDispenserInventory_ledger(); +} diff --git a/mod/src/main/java/moe/nea/ledger/mixin/AccessorContainerHopper.java b/mod/src/main/java/moe/nea/ledger/mixin/AccessorContainerHopper.java new file mode 100644 index 0000000..ee29d4f --- /dev/null +++ b/mod/src/main/java/moe/nea/ledger/mixin/AccessorContainerHopper.java @@ -0,0 +1,13 @@ +package moe.nea.ledger.mixin; + +import net.minecraft.inventory.ContainerDispenser; +import net.minecraft.inventory.ContainerHopper; +import net.minecraft.inventory.IInventory; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ContainerHopper.class) +public interface AccessorContainerHopper { + @Accessor("hopperInventory") + IInventory getHopperInventory_ledger(); +} diff --git a/mod/src/main/kotlin/moe/nea/ledger/ItemChange.kt b/mod/src/main/kotlin/moe/nea/ledger/ItemChange.kt deleted file mode 100644 index fda709c..0000000 --- a/mod/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/mod/src/main/kotlin/moe/nea/ledger/ItemId.kt b/mod/src/main/kotlin/moe/nea/ledger/ItemId.kt deleted file mode 100644 index 8211cd3..0000000 --- a/mod/src/main/kotlin/moe/nea/ledger/ItemId.kt +++ /dev/null @@ -1,35 +0,0 @@ -package moe.nea.ledger - -import moe.nea.ledger.utils.NoSideEffects - -data class ItemId( - val string: String -) { - @NoSideEffects - fun singleItem(): Pair<ItemId, Double> { - return withStackSize(1) - } - - @NoSideEffects - fun withStackSize(size: Number): Pair<ItemId, Double> { - return Pair(this, size.toDouble()) - } - - - companion object { - - @JvmStatic - @NoSideEffects - fun forName(string: String) = ItemId(string) - fun skill(skill: String) = ItemId("SKYBLOCK_SKILL_$skill") - - val GARDEN = skill("GARDEN") - val FARMING = skill("FARMING") - - - val COINS = ItemId("SKYBLOCK_COIN") - val GEMSTONE_POWDER = ItemId("SKYBLOCK_POWDER_GEMSTONE") - val MITHRIL_POWDER = ItemId("SKYBLOCK_POWDER_MITHRIL") - val NIL = ItemId("SKYBLOCK_NIL") - } -}
\ No newline at end of file diff --git a/mod/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt b/mod/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt index 0bacf32..ff2c691 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt @@ -20,12 +20,12 @@ class ItemIdProvider { @SubscribeEvent fun onMouseInput(event: GuiScreenEvent.MouseInputEvent.Pre) { if (Mouse.getEventButton() == -1) return - MinecraftForge.EVENT_BUS.post(BeforeGuiAction(event.gui)) + BeforeGuiAction(event.gui).post() } @SubscribeEvent fun onKeyInput(event: GuiScreenEvent.KeyboardInputEvent.Pre) { - MinecraftForge.EVENT_BUS.post(BeforeGuiAction(event.gui)) + BeforeGuiAction(event.gui).post() } private val knownNames = mutableMapOf<String, ItemId>() diff --git a/mod/src/main/kotlin/moe/nea/ledger/Ledger.kt b/mod/src/main/kotlin/moe/nea/ledger/Ledger.kt index bc667e4..87c990c 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/Ledger.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/Ledger.kt @@ -16,26 +16,34 @@ import moe.nea.ledger.modules.AccessorySwapperDetection import moe.nea.ledger.modules.AllowanceDetection import moe.nea.ledger.modules.AuctionHouseDetection import moe.nea.ledger.modules.BankDetection +import moe.nea.ledger.modules.BankInterestDetection +import moe.nea.ledger.modules.BasicReforgeDetection import moe.nea.ledger.modules.BazaarDetection import moe.nea.ledger.modules.BazaarOrderDetection import moe.nea.ledger.modules.BitsDetection import moe.nea.ledger.modules.BitsShopDetection +import moe.nea.ledger.modules.CaducousFeederDetection import moe.nea.ledger.modules.DragonEyePlacementDetection -import moe.nea.ledger.modules.`DragonSacrificeDetection` +import moe.nea.ledger.modules.DragonSacrificeDetection import moe.nea.ledger.modules.DungeonChestDetection import moe.nea.ledger.modules.ExternalDataProvider import moe.nea.ledger.modules.EyedropsDetection import moe.nea.ledger.modules.ForgeDetection import moe.nea.ledger.modules.GambleDetection +import moe.nea.ledger.modules.GhostCoinDropDetection import moe.nea.ledger.modules.GodPotionDetection import moe.nea.ledger.modules.GodPotionMixinDetection +import moe.nea.ledger.modules.GummyPolarBearDetection import moe.nea.ledger.modules.KatDetection import moe.nea.ledger.modules.KuudraChestDetection import moe.nea.ledger.modules.MineshaftCorpseDetection import moe.nea.ledger.modules.MinionDetection import moe.nea.ledger.modules.NpcDetection +import moe.nea.ledger.modules.PestRepellentDetection +import moe.nea.ledger.modules.StonksAuctionDetection import moe.nea.ledger.modules.UpdateChecker import moe.nea.ledger.modules.VisitorDetection +import moe.nea.ledger.telemetry.TelemetryProvider import moe.nea.ledger.utils.ErrorUtil import moe.nea.ledger.utils.MinecraftExecutor import moe.nea.ledger.utils.di.DI @@ -88,7 +96,7 @@ class Ledger { // You sold Cactus x1 for 3 Coins! // You bought back Potato x3 for 9 Coins! - TODO: TRADING, FORGE, VISITORS / COPPER, CORPSES ÖFFNEN, HIGH / LOW GAMBLES, MINION ITEMS (maybe inferno refuel) + TODO: TRADING, FORGE, MINION ITEMS (maybe inferno refuel) TODO: PET LEVELING COSTS AT FANN, SLAYER / MOB DROPS, SLAYER START COST */ companion object { @@ -106,7 +114,9 @@ class Ledger { tickQueue.add(runnable) } - val di = DI() + private val di = DI() + + fun leakDI() = di } @Mod.EventHandler @@ -119,17 +129,20 @@ class Ledger { di.registerSingleton(gson) di.register(LedgerConfig::class.java, DIProvider { managedConfig.instance }) di.register(Config::class.java, DIProvider.fromInheritance(LedgerConfig::class.java)) + di.register(Database::class.java, DIProvider { Database(dataFolder) }) di.registerInjectableClasses( AccessorySwapperDetection::class.java, AllowanceDetection::class.java, AuctionHouseDetection::class.java, BankDetection::class.java, + BankInterestDetection::class.java, + BasicReforgeDetection::class.java, BazaarDetection::class.java, BazaarOrderDetection::class.java, BitsDetection::class.java, BitsShopDetection::class.java, + CaducousFeederDetection::class.java, ConfigCommand::class.java, - Database::class.java, DebugDataCommand::class.java, DragonEyePlacementDetection::class.java, DragonSacrificeDetection::class.java, @@ -139,8 +152,10 @@ class Ledger { EyedropsDetection::class.java, ForgeDetection::class.java, GambleDetection::class.java, + GhostCoinDropDetection::class.java, GodPotionDetection::class.java, GodPotionMixinDetection::class.java, + GummyPolarBearDetection::class.java, ItemIdProvider::class.java, KatDetection::class.java, KuudraChestDetection::class.java, @@ -150,8 +165,10 @@ class Ledger { MineshaftCorpseDetection::class.java, MinionDetection::class.java, NpcDetection::class.java, + PestRepellentDetection::class.java, QueryCommand::class.java, RequestUtil::class.java, + StonksAuctionDetection::class.java, TriggerCommand::class.java, UpdateChecker::class.java, VisitorDetection::class.java, diff --git a/mod/src/main/kotlin/moe/nea/ledger/NumberUtil.kt b/mod/src/main/kotlin/moe/nea/ledger/NumberUtil.kt index 438f342..fa295b0 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/NumberUtil.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/NumberUtil.kt @@ -115,3 +115,38 @@ fun Instant.formatChat(): IChatComponent { .setColor(EnumChatFormatting.AQUA)) return text } + +private val formatChatDirection = run { + fun ItemChange.ChangeDirection.formatChat0(): IChatComponent { + val (text, color) = when (this) { + ItemChange.ChangeDirection.GAINED -> "+" to EnumChatFormatting.GREEN + ItemChange.ChangeDirection.TRANSFORM -> "~" to EnumChatFormatting.YELLOW + ItemChange.ChangeDirection.SYNC -> "=" to EnumChatFormatting.BLUE + ItemChange.ChangeDirection.CATALYST -> "*" to EnumChatFormatting.DARK_PURPLE + ItemChange.ChangeDirection.LOST -> "-" to EnumChatFormatting.RED + } + return ChatComponentText(text) + .setChatStyle( + ChatStyle() + .setColor(color) + .setChatHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT, + ChatComponentText(name).setChatStyle(ChatStyle().setColor(color))))) + } + ItemChange.ChangeDirection.entries.associateWith { it.formatChat0() } +} + +fun ItemChange.ChangeDirection.formatChat(): IChatComponent { + return formatChatDirection[this]!! +} + +fun ItemChange.formatChat(): IChatComponent { + return ChatComponentText(" ") + .appendSibling(direction.formatChat()) + .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)))) +} + diff --git a/mod/src/main/kotlin/moe/nea/ledger/QueryCommand.kt b/mod/src/main/kotlin/moe/nea/ledger/QueryCommand.kt index 19bd5d0..80dd54c 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/QueryCommand.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/QueryCommand.kt @@ -103,7 +103,7 @@ class QueryCommand : CommandBase() { val timestamp = transactionId.getTimestamp() val items = DBItemEntry.selectAll(database.connection) .where(Clause { column(DBItemEntry.transactionId) eq string(transactionId.wrapped) }) - .map { ItemChange.from(it) } + .map { DBItemEntry.objMap(it) } val text = ChatComponentText("") .setChatStyle(ChatStyle().setColor(EnumChatFormatting.YELLOW)) .appendSibling( @@ -172,7 +172,7 @@ class QueryCommand : CommandBase() { override val name: String get() = "withitem" - private val itemIdProvider = Ledger.di.provide<ItemIdProvider>() // TODO: close this escape hatch + private val itemIdProvider = Ledger.leakDI().provide<ItemIdProvider>() // TODO: close this escape hatch override fun getFilter(text: String): BooleanExpression { return Clause { column(DBItemEntry.itemId) like text } } diff --git a/mod/src/main/kotlin/moe/nea/ledger/TransactionType.kt b/mod/src/main/kotlin/moe/nea/ledger/TransactionType.kt deleted file mode 100644 index 33c633d..0000000 --- a/mod/src/main/kotlin/moe/nea/ledger/TransactionType.kt +++ /dev/null @@ -1,35 +0,0 @@ -package moe.nea.ledger - -enum class TransactionType { - ACCESSORIES_SWAPPING, - ALLOWANCE_GAIN, - AUCTION_BOUGHT, - AUCTION_LISTING_CHARGE, - AUCTION_SOLD, - AUTOMERCHANT_PROFIT_COLLECT, - BANK_DEPOSIT, - BANK_WITHDRAW, - BAZAAR_BUY_INSTANT, - BAZAAR_BUY_ORDER, - BAZAAR_SELL_INSTANT, - BAZAAR_SELL_ORDER, - BITS_PURSE_STATUS, - BOOSTER_COOKIE_ATE, - CAPSAICIN_EYEDROPS_USED, - COMMUNITY_SHOP_BUY, - CORPSE_DESECRATED, - DIE_ROLLED, - DRACONIC_SACRIFICE, - DUNGEON_CHEST_OPEN, - FORGED, - GOD_POTION_DRANK, - GOD_POTION_MIXIN_DRANK, - KAT_TIMESKIP, - KAT_UPGRADE, - KISMET_REROLL, - KUUDRA_CHEST_OPEN, - NPC_BUY, - NPC_SELL, - VISITOR_BARGAIN, - WYRM_EVOKED, -}
\ No newline at end of file diff --git a/mod/src/main/kotlin/moe/nea/ledger/config/DebugOptions.kt b/mod/src/main/kotlin/moe/nea/ledger/config/DebugOptions.kt index fd5ed3d..6b4e51c 100644 --- a/mod/src/main/kotlin/moe/nea/ledger/config/DebugOptions.kt +++ b/mod/src/main/kotlin/moe/nea/ledger/config/DebugOptions.kt @@ -2,6 +2,7 @@ package moe.nea.ledger.config import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean import io.github.notenoughupdates.moulconfig.annotations.ConfigOption +import moe.nea.ledger.DevUtil class DebugOptions { @ConfigOption(name = "Log entries to chat", @@ -9,5 +10,5 @@ class DebugOptions { @Transient @ConfigEditorBoolean @JvmField - var logEntries = false + var logEntries = DevUtil.isDevEnv } diff --git a/mod/src/main/kotlin/moe/nea/ledger/database/DBLogEntry.kt b/mod/src/main/kotlin/moe/nea/ledger/database/DBLogEntry.kt deleted file mode 100644 index b162c6f..0000000 --- a/mod/src/main/kotlin/moe/nea/ledger/database/DBLogEntry.kt +++ /dev/null @@ -1,24 +0,0 @@ -package moe.nea.ledger.database - -import moe.nea.ledger.ItemChange -import moe.nea.ledger.ItemId -import moe.nea.ledger.TransactionType -import moe.nea.ledger.database.columns.DBDouble -import moe.nea.ledger.database.columns.DBEnum -import moe.nea.ledger.database.columns.DBString -import moe.nea.ledger.database.columns.DBUlid -import moe.nea.ledger.database.columns.DBUuid - -object DBLogEntry : Table("LogEntry") { - val transactionId = column("transactionId", DBUlid) - val type = column("type", DBEnum<TransactionType>()) - val profileId = column("profileId", DBUuid) - val playerId = column("playerId", DBUuid) -} - -object DBItemEntry : Table("ItemEntry") { - val transactionId = column("transactionId", DBUlid) // TODO: add foreign keys - val mode = column("mode", DBEnum<ItemChange.ChangeDirection>()) - val itemId = column("item", DBString.mapped(ItemId::string, ::ItemId)) - val size = column("size", DBDouble) -} diff --git a/mod/src/main/kotlin/moe/nea/ledger/database/DBUpgrade.kt b/mod/src/main/kotlin/moe/nea/ledger/database/DBUpgrade.kt deleted file mode 100644 index 7d1782a..0000000 --- a/mod/src/main/kotlin/moe/nea/ledger/database/DBUpgrade.kt +++ /dev/null @@ -1,68 +0,0 @@ -package moe.nea.ledger.database - -import java.sql.Connection - -interface DBUpgrade { - val toVersion: Long - val fromVersion get() = toVersion - 1 - fun performUpgrade(connection: Connection) - - companion object { - - fun performUpgrades( - connection: Connection, - upgrades: Iterable<DBUpgrade>, - ) { - for (upgrade in upgrades) { - upgrade.performUpgrade(connection) - } - } - - fun performUpgradeChain( - connection: Connection, - from: Long, to: Long, - upgrades: Iterable<DBUpgrade>, - afterEach: (newVersion: Long) -> Unit, - ) { - val table = buildLookup(upgrades) - for (version in (from + 1)..(to)) { - val currentUpgrades = table[version] ?: listOf() - println("Scheduled ${currentUpgrades.size} upgrades to reach DB version $version") - performUpgrades(connection, currentUpgrades) - afterEach(version) - } - } - - fun buildLookup(upgrades: Iterable<DBUpgrade>): Map<Long, List<DBUpgrade>> { - return upgrades.groupBy { it.toVersion } - } - - fun createTable(to: Long, table: Table, vararg columns: Column<*>): DBUpgrade { - require(columns.all { it in table.columns }) - return of("Create table ${table}", to) { - table.createIfNotExists(it, columns.toList()) - } - } - - fun addColumns(to: Long, table: Table, vararg columns: Column<*>): DBUpgrade { - return of("Add columns to table $table", to) { - table.alterTableAddColumns(it, columns.toList()) - } - } - - fun of(name: String, to: Long, block: (Connection) -> Unit): DBUpgrade { - return object : DBUpgrade { - override val toVersion: Long - get() = to - - override fun performUpgrade(connection: Connection) { - block(connection) - } - - override fun toString(): String { - return name - } - } - } - } -}
\ No newline at end of file diff --git a/mod/src/main/kotlin/moe/nea/ledger/database/Database.kt b/mod/src/main/kotlin/moe/nea/ledger/database/Database.kt deleted file mode 100644 index 025888c..0000000 --- a/mod/src/main/kotlin/moe/nea/ledger/database/Database.kt +++ /dev/null @@ -1,57 +0,0 @@ -package moe.nea.ledger.database - -import moe.nea.ledger.Ledger -import moe.nea.ledger.database.columns.DBString -import java.sql.Connection -import java.sql.DriverManager - -class Database { - lateinit var connection: Connection - - object MetaTable : Table("LedgerMeta") { - val key = column("key", DBString) - val value = column("value", DBString) - - init { - unique(key) - } - } - - data class MetaKey(val name: String) { - companion object { - val DATABASE_VERSION = MetaKey("databaseVersion") - val LAST_LAUNCH = MetaKey("lastLaunch") - } - } - - fun setMetaKey(key: MetaKey, value: String) { - MetaTable.insert(connection, Table.OnConflict.REPLACE) { - it[MetaTable.key] = key.name - it[MetaTable.value] = value - } - } - - val databaseVersion: Long = 1 - - fun loadAndUpgrade() { - connection = DriverManager.getConnection("jdbc:sqlite:${Ledger.dataFolder.resolve("database.db")}") - MetaTable.createIfNotExists(connection) - val meta = MetaTable.selectAll(connection).associate { MetaKey(it[MetaTable.key]) to it[MetaTable.value] } - val lastLaunch = meta[MetaKey.LAST_LAUNCH]?.toLong() ?: 0L - println("Last launch $lastLaunch") - setMetaKey(MetaKey.LAST_LAUNCH, System.currentTimeMillis().toString()) - - val oldVersion = meta[MetaKey.DATABASE_VERSION]?.toLong() ?: -1 - println("Old Database Version: $oldVersion; Current version: $databaseVersion") - if (oldVersion > databaseVersion) - error("Outdated software. Database is newer than me!") - // TODO: create a backup if there is a db version upgrade happening - DBUpgrade.performUpgradeChain( - connection, oldVersion, databaseVersion, - Upgrades().upgrades - ) { version -> - setMetaKey(MetaKey.DATABASE_VERSION, version.toString()) - } - } - -}
\ No newline at end of file diff --git a/mod/src/main/kotlin/moe/nea/ledger/database/Upgrades.kt b/mod/src/main/kotlin/moe/nea/ledger/database/Upgrades.kt deleted file mode 100644 index e83abe7..0000000 --- a/mod/src/main/kotlin/moe/nea/ledger/database/Upgrades.kt +++ /d |
