diff --git a/src/main/kotlin/codes/som/hibiscus/Hibiscus.kt b/src/main/kotlin/codes/som/hibiscus/Hibiscus.kt index 2eb7d52..6a7a833 100644 --- a/src/main/kotlin/codes/som/hibiscus/Hibiscus.kt +++ b/src/main/kotlin/codes/som/hibiscus/Hibiscus.kt @@ -41,6 +41,7 @@ object Hibiscus : ModInitializer { data.runMigrations() for (feature in features.getAllFeatures()) { + feature.loadData() commands.register(feature.createFeatureCommand()) } diff --git a/src/main/kotlin/codes/som/hibiscus/api/feature/Feature.kt b/src/main/kotlin/codes/som/hibiscus/api/feature/Feature.kt index 1dba2b8..6b1a651 100644 --- a/src/main/kotlin/codes/som/hibiscus/api/feature/Feature.kt +++ b/src/main/kotlin/codes/som/hibiscus/api/feature/Feature.kt @@ -48,5 +48,7 @@ abstract class Feature(val name: String, val category: FeatureCategory) { return FeatureCommand(this) } + open fun loadData() {} + // TODO: Module commands } diff --git a/src/main/kotlin/codes/som/hibiscus/data/DataManager.kt b/src/main/kotlin/codes/som/hibiscus/data/DataManager.kt index c4fe41c..f06f7c0 100644 --- a/src/main/kotlin/codes/som/hibiscus/data/DataManager.kt +++ b/src/main/kotlin/codes/som/hibiscus/data/DataManager.kt @@ -13,6 +13,10 @@ class DataManager { TransactionManager.manager.defaultIsolationLevel = Connection.TRANSACTION_SERIALIZABLE } + init { + runMigrations() + } + fun runMigrations() { val latestId = try { txn { diff --git a/src/main/kotlin/codes/som/hibiscus/data/MigrationData.kt b/src/main/kotlin/codes/som/hibiscus/data/MigrationData.kt index 7e0405b..1574913 100644 --- a/src/main/kotlin/codes/som/hibiscus/data/MigrationData.kt +++ b/src/main/kotlin/codes/som/hibiscus/data/MigrationData.kt @@ -3,11 +3,32 @@ package codes.som.hibiscus.data import org.jetbrains.exposed.dao.id.IntIdTable import org.jetbrains.exposed.sql.SchemaUtils import org.jetbrains.exposed.sql.Transaction +import org.jetbrains.exposed.sql.insert object HibiscusDataMigrations : IntIdTable("_hibiscus_migrations") +// PLEASE ONLY APPEND @Suppress("FunctionName") fun HIBISCUS_MIGRATIONS(): Sequence Unit> = sequenceOf( { SchemaUtils.create(HibiscusDataMigrations) }, - { SchemaUtils.create(MinecraftAccounts) } + { SchemaUtils.create(MinecraftAccounts) }, + { SchemaUtils.create(XrayBlocks) }, + { + for (defaultTag in sequenceOf( + "#minecraft:diamond_ores", + "#minecraft:iron_ores", + "#minecraft:portals", + "minecraft:obsidian", + "minecraft:furnace", + "minecraft:blast_furnace", + "minecraft:smoker", + "minecraft:dropper", + "minecraft:hopper", + "minecraft:barrel", + "minecraft:dispenser", + "minecraft:brewing_stand" + )) { + XrayBlocks.insert { it[tag] = defaultTag } + } + } ) diff --git a/src/main/kotlin/codes/som/hibiscus/data/XrayBlockData.kt b/src/main/kotlin/codes/som/hibiscus/data/XrayBlockData.kt new file mode 100644 index 0000000..43d28a6 --- /dev/null +++ b/src/main/kotlin/codes/som/hibiscus/data/XrayBlockData.kt @@ -0,0 +1,7 @@ +package codes.som.hibiscus.data + +import org.jetbrains.exposed.dao.id.IntIdTable + +object XrayBlocks : IntIdTable("xray_blocks") { + val tag = varchar("tag", 1024) +} diff --git a/src/main/kotlin/codes/som/hibiscus/features/visual/Xray.kt b/src/main/kotlin/codes/som/hibiscus/features/visual/Xray.kt index 997e256..0b5264a 100644 --- a/src/main/kotlin/codes/som/hibiscus/features/visual/Xray.kt +++ b/src/main/kotlin/codes/som/hibiscus/features/visual/Xray.kt @@ -1,31 +1,30 @@ package codes.som.hibiscus.features.visual +import codes.som.hibiscus.Hibiscus import codes.som.hibiscus.HibiscusLog import codes.som.hibiscus.api.feature.Feature import codes.som.hibiscus.api.feature.FeatureCategory +import codes.som.hibiscus.data.XrayBlocks import codes.som.hibiscus.events.WorldCullingEvent import codes.som.hibiscus.mc +import org.jetbrains.exposed.sql.deleteWhere +import org.jetbrains.exposed.sql.insert +import org.jetbrains.exposed.sql.selectAll class Xray : Feature("X-ray", FeatureCategory.VISUAL) { - val xrayBlocks = mutableSetOf( - "#minecraft:diamond_ores", - "#minecraft:iron_ores", - "#minecraft:portals", - "minecraft:obsidian", - "minecraft:furnace", - "minecraft:blast_furnace", - "minecraft:smoker", - "minecraft:dropper", - "minecraft:hopper", - "minecraft:barrel", - "minecraft:dispenser", - "minecraft:brewing_stand", - ) + val xrayBlocks = mutableSetOf() init { on { event: WorldCullingEvent -> event.cancel() } } + override fun loadData() { + Hibiscus.data.txn { + xrayBlocks.clear() + xrayBlocks.addAll(XrayBlocks.selectAll().map { it[XrayBlocks.tag] }) + } + } + override fun onEnable() { mc.worldRenderer.reload() } @@ -41,10 +40,18 @@ class Xray : Feature("X-ray", FeatureCategory.VISUAL) { branch("add") { blockOrTag: String -> xrayBlocks.add(blockOrTag) + + Hibiscus.data.txn { + XrayBlocks.insert { it[tag] = blockOrTag } + } } branch("del") { blockOrTag: String -> xrayBlocks.remove(blockOrTag) + + Hibiscus.data.txn { + XrayBlocks.deleteWhere { XrayBlocks.tag eq blockOrTag } + } } branch("list") {