diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt index e6ad0a373..2e3a82151 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -24,9 +24,8 @@ object DataGen { const val MOD_ID = OverdriveThatMatters.MOD_ID private lateinit var blockModelProvider: BlockMatteryModelProvider - private lateinit var blockStateProvider: SimpleBlockStateProvider private lateinit var itemModelProvider: SimpleItemModelProvider - private lateinit var advancedBlockStateProvider: AdvancedBlockStateProvider + private lateinit var blockStateProvider: MatteryBlockStateProvider private lateinit var lootTableProvider: MatteryLootTableProvider private fun decorativeCubeAll(vararg blocks: Block) { @@ -49,15 +48,14 @@ object DataGen { @Suppress("unused") fun onGatherData(event: GatherDataEvent) { blockModelProvider = BlockMatteryModelProvider(event) - blockStateProvider = SimpleBlockStateProvider(event) + blockStateProvider = MatteryBlockStateProvider(event) itemModelProvider = SimpleItemModelProvider(event) - advancedBlockStateProvider = AdvancedBlockStateProvider(event) lootTableProvider = MatteryLootTableProvider(event.generator) event.generator.addProvider(blockModelProvider) event.generator.addProvider(itemModelProvider) event.generator.addProvider(blockStateProvider) - event.generator.addProvider(advancedBlockStateProvider) + event.generator.addProvider(blockStateProvider) decorativeCubeAll(*Blocks.CRATES) decorativeCubeAll(Blocks.CARBON_FIBRE_BLOCK) @@ -110,7 +108,7 @@ object DataGen { event.generator.addProvider(lootTableProvider) - with(advancedBlockStateProvider) { + with(blockStateProvider) { block(Blocks.CHEMICAL_GENERATOR) block(Blocks.MATTER_SCANNER) block(Blocks.ITEM_MONITOR) @@ -160,48 +158,46 @@ object DataGen { block(Items.MATTER_DECOMPOSER, "matter_decomposer_working") } - event.generator.addProvider(object : BlockStateProvider(event.generator, MOD_ID, event.existingFileHelper) { - override fun registerStatesAndModels() { - with(getMultipartBuilder(Blocks.DRIVE_VIEWER)) { - for (facing in BlockMatteryRotatable.FACING.possibleValues) { + blockStateProvider.lambda { + with(it.getMultipartBuilder(Blocks.DRIVE_VIEWER)) { + for (facing in BlockMatteryRotatable.FACING.possibleValues) { + part() + .modelFile(it.models().getExistingFile(ResourceLocation(MOD_ID, "block/drive_viewer_drive_part"))) + .rotationY(facing.toYRotBlockstate()) + .addModel() + .condition(BlockMatteryRotatable.FACING, facing) + .condition(BlockDriveViewer.DRIVE_PRESENT, true) + + for (workState in WorkerState.SEMI_WORKER_STATE.possibleValues) { part() - .modelFile(models().getExistingFile(ResourceLocation(MOD_ID, "block/drive_viewer_drive_part"))) - .rotationY(facing.toYRotBlockstate()) - .addModel() - .condition(BlockMatteryRotatable.FACING, facing) - .condition(BlockDriveViewer.DRIVE_PRESENT, true) - - for (workState in WorkerState.SEMI_WORKER_STATE.possibleValues) { - part() - .modelFile(models().getExistingFile(ResourceLocation(MOD_ID, "block/drive_viewer_${workState.name.lowercase()}"))) - .rotationY(facing.toYRotBlockstate()) - .addModel() - .condition(WorkerState.SEMI_WORKER_STATE, workState) - .condition(BlockMatteryRotatable.FACING, facing) - } - } - } - - with(getMultipartBuilder(Blocks.PATTERN_STORAGE)) { - for (facing in BlockMatteryRotatable.FACING.possibleValues) { - for (i in 0 .. 7) { - part() - .modelFile(models().getExistingFile(ResourceLocation(MOD_ID, "block/pattern/model$i"))) - .rotationY(facing.toYRotBlockstate()) - .addModel() - .condition(BlockMatteryRotatable.FACING, facing) - .condition(BlockPatternStorage.PATTERN_STORAGE_DISKS_PROPS[i], true) - } - - part() - .modelFile(models().getExistingFile(ResourceLocation(MOD_ID, "block/pattern_storage"))) + .modelFile(it.models().getExistingFile(ResourceLocation(MOD_ID, "block/drive_viewer_${workState.name.lowercase()}"))) .rotationY(facing.toYRotBlockstate()) .addModel() + .condition(WorkerState.SEMI_WORKER_STATE, workState) .condition(BlockMatteryRotatable.FACING, facing) } } } - }) + + with(it.getMultipartBuilder(Blocks.PATTERN_STORAGE)) { + for (facing in BlockMatteryRotatable.FACING.possibleValues) { + for (i in 0 .. 7) { + part() + .modelFile(it.models().getExistingFile(ResourceLocation(MOD_ID, "block/pattern/model$i"))) + .rotationY(facing.toYRotBlockstate()) + .addModel() + .condition(BlockMatteryRotatable.FACING, facing) + .condition(BlockPatternStorage.PATTERN_STORAGE_DISKS_PROPS[i], true) + } + + part() + .modelFile(it.models().getExistingFile(ResourceLocation(MOD_ID, "block/pattern_storage"))) + .rotationY(facing.toYRotBlockstate()) + .addModel() + .condition(BlockMatteryRotatable.FACING, facing) + } + } + } val workerTags = arrayOf( TileNbtCopy("work_ticks"), diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/AdvancedBlockStateProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt similarity index 57% rename from src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/AdvancedBlockStateProvider.kt rename to src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt index e9526d5da..01ea21b11 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/AdvancedBlockStateProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt @@ -1,8 +1,8 @@ package ru.dbotthepony.mc.otm.datagen.blocks import net.minecraft.resources.ResourceLocation +import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.state.BlockState -import net.minecraft.world.level.block.state.properties.Property import net.minecraftforge.client.model.generators.BlockStateProvider import net.minecraftforge.client.model.generators.ConfiguredModel import net.minecraftforge.forge.event.lifecycle.GatherDataEvent @@ -14,11 +14,7 @@ import ru.dbotthepony.mc.otm.datagen.getValueNullable import ru.dbotthepony.mc.otm.datagen.toYRotBlockstate typealias AdvancedBlockStateFunction = (BlockState, ConfiguredModel.Builder<*>, String) -> String? -//typealias AdvancedBlockStateBoolFunction = (BlockState, ConfiguredModel.Builder<*>) -> String - private data class AdvancedBlockStateEntry(val block: BlockMattery, val func: AdvancedBlockStateFunction) -//data class BooleanPropertyMapping(val property: Property, val func: AdvancedBlockStateBoolFunction) -//private data class AdvancedBlockStateBooleanMapped(val block: BlockMattery, val mapping: Array) private fun initialTransform(it: BlockState, modelPath: String, builder: ConfiguredModel.Builder<*>): String { var modelPath = modelPath @@ -38,18 +34,65 @@ private fun initialTransform(it: BlockState, modelPath: String, builder: Configu return modelPath } -class AdvancedBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) { +private typealias Lambda = (MatteryBlockStateProvider) -> Unit + +class MatteryBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) { private val blocks = ArrayList() - //private val boolMapped = ArrayList() fun block(block: BlockMattery) = blocks.add(AdvancedBlockStateEntry(block) { _, _, _ -> null }) fun block(block: BlockMattery, func: AdvancedBlockStateFunction) = blocks.add(AdvancedBlockStateEntry(block, func)) - //fun multipartBoolBlock(block: BlockMattery, vararg props: BooleanPropertyMapping) { - // boolMapped.add(AdvancedBlockStateBooleanMapped(block, props)) - //} + private val simpleBlocks = ArrayList() + private val ores = ArrayList() + private val lambdas = ArrayList() + + fun block(vararg blocks: Block) { + this.simpleBlocks.addAll(blocks) + } + + fun ore(vararg blocks: Block) { + ores.addAll(blocks) + } + + fun lambda(lambda: Lambda) { + lambdas.add(lambda) + } override fun registerStatesAndModels() { + for (block in simpleBlocks) { + getVariantBuilder(block).forAllStates { + check(block.registryName != null) {"$block registry name is null!"} + return@forAllStates arrayOf(ConfiguredModel(models().getExistingFile(block.registryName))) + } + } + + for (block in ores) { + var first = true + + getVariantBuilder(block).forAllStates { + check(first) {"$block has more than one BlockState"} + first = false + + check(block.registryName != null) {"$block registry name is null!"} + val localModel = models().getExistingFile(block.registryName) + + val generated = ArrayList() + + for (x in arrayOf(0, 90, 180)) { + for (y in arrayOf(0, 90, 180, 270)) { + generated.add(with(ConfiguredModel.builder()) { + rotationX(x) + rotationY(y) + modelFile(localModel) + return@with buildLast() + }) + } + } + + return@forAllStates generated.toTypedArray() + } + } + for ((block, func) in blocks) { getVariantBuilder(block).forAllStates { val builder = ConfiguredModel.builder() @@ -61,5 +104,9 @@ class AdvancedBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(ev return@forAllStates arrayOf(builder.buildLast()) } } + + for (lambda in lambdas) { + lambda(this) + } } } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/SimpleBlockStateProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/SimpleBlockStateProvider.kt deleted file mode 100644 index 07de2f8fd..000000000 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/SimpleBlockStateProvider.kt +++ /dev/null @@ -1,56 +0,0 @@ -package ru.dbotthepony.mc.otm.datagen.blocks - -import net.minecraft.world.level.block.Block -import net.minecraftforge.client.model.generators.BlockStateProvider -import net.minecraftforge.client.model.generators.ConfiguredModel -import net.minecraftforge.forge.event.lifecycle.GatherDataEvent -import ru.dbotthepony.mc.otm.datagen.DataGen - -class SimpleBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) { - private val blocks = ArrayList() - private val ores = ArrayList() - - fun block(vararg blocks: Block) { - this.blocks.addAll(blocks) - } - - fun ore(vararg blocks: Block) { - ores.addAll(blocks) - } - - override fun registerStatesAndModels() { - for (block in blocks) { - getVariantBuilder(block).forAllStates { - check(block.registryName != null) {"$block registry name is null!"} - return@forAllStates arrayOf(ConfiguredModel(models().getExistingFile(block.registryName))) - } - } - - for (block in ores) { - var first = true - - getVariantBuilder(block).forAllStates { - check(first) {"$block has more than one BlockState"} - first = false - - check(block.registryName != null) {"$block registry name is null!"} - val localModel = models().getExistingFile(block.registryName) - - val generated = ArrayList() - - for (x in arrayOf(0, 90, 180)) { - for (y in arrayOf(0, 90, 180, 270)) { - generated.add(with(ConfiguredModel.builder()) { - rotationX(x) - rotationY(y) - modelFile(localModel) - return@with buildLast() - }) - } - } - - return@forAllStates generated.toTypedArray() - } - } - } -}