Combine blockstate providers
This commit is contained in:
parent
26df2ea5b2
commit
0c20bce816
@ -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"),
|
||||
|
@ -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<Boolean>, val func: AdvancedBlockStateBoolFunction)
|
||||
//private data class AdvancedBlockStateBooleanMapped(val block: BlockMattery, val mapping: Array<out BooleanPropertyMapping>)
|
||||
|
||||
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<AdvancedBlockStateEntry>()
|
||||
//private val boolMapped = ArrayList<AdvancedBlockStateBooleanMapped>()
|
||||
|
||||
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<Block>()
|
||||
private val ores = ArrayList<Block>()
|
||||
private val lambdas = ArrayList<Lambda>()
|
||||
|
||||
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<ConfiguredModel>()
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
@ -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<Block>()
|
||||
private val ores = ArrayList<Block>()
|
||||
|
||||
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<ConfiguredModel>()
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user