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
|
const val MOD_ID = OverdriveThatMatters.MOD_ID
|
||||||
|
|
||||||
private lateinit var blockModelProvider: BlockMatteryModelProvider
|
private lateinit var blockModelProvider: BlockMatteryModelProvider
|
||||||
private lateinit var blockStateProvider: SimpleBlockStateProvider
|
|
||||||
private lateinit var itemModelProvider: SimpleItemModelProvider
|
private lateinit var itemModelProvider: SimpleItemModelProvider
|
||||||
private lateinit var advancedBlockStateProvider: AdvancedBlockStateProvider
|
private lateinit var blockStateProvider: MatteryBlockStateProvider
|
||||||
private lateinit var lootTableProvider: MatteryLootTableProvider
|
private lateinit var lootTableProvider: MatteryLootTableProvider
|
||||||
|
|
||||||
private fun decorativeCubeAll(vararg blocks: Block) {
|
private fun decorativeCubeAll(vararg blocks: Block) {
|
||||||
@ -49,15 +48,14 @@ object DataGen {
|
|||||||
@Suppress("unused")
|
@Suppress("unused")
|
||||||
fun onGatherData(event: GatherDataEvent) {
|
fun onGatherData(event: GatherDataEvent) {
|
||||||
blockModelProvider = BlockMatteryModelProvider(event)
|
blockModelProvider = BlockMatteryModelProvider(event)
|
||||||
blockStateProvider = SimpleBlockStateProvider(event)
|
blockStateProvider = MatteryBlockStateProvider(event)
|
||||||
itemModelProvider = SimpleItemModelProvider(event)
|
itemModelProvider = SimpleItemModelProvider(event)
|
||||||
advancedBlockStateProvider = AdvancedBlockStateProvider(event)
|
|
||||||
lootTableProvider = MatteryLootTableProvider(event.generator)
|
lootTableProvider = MatteryLootTableProvider(event.generator)
|
||||||
|
|
||||||
event.generator.addProvider(blockModelProvider)
|
event.generator.addProvider(blockModelProvider)
|
||||||
event.generator.addProvider(itemModelProvider)
|
event.generator.addProvider(itemModelProvider)
|
||||||
event.generator.addProvider(blockStateProvider)
|
event.generator.addProvider(blockStateProvider)
|
||||||
event.generator.addProvider(advancedBlockStateProvider)
|
event.generator.addProvider(blockStateProvider)
|
||||||
|
|
||||||
decorativeCubeAll(*Blocks.CRATES)
|
decorativeCubeAll(*Blocks.CRATES)
|
||||||
decorativeCubeAll(Blocks.CARBON_FIBRE_BLOCK)
|
decorativeCubeAll(Blocks.CARBON_FIBRE_BLOCK)
|
||||||
@ -110,7 +108,7 @@ object DataGen {
|
|||||||
|
|
||||||
event.generator.addProvider(lootTableProvider)
|
event.generator.addProvider(lootTableProvider)
|
||||||
|
|
||||||
with(advancedBlockStateProvider) {
|
with(blockStateProvider) {
|
||||||
block(Blocks.CHEMICAL_GENERATOR)
|
block(Blocks.CHEMICAL_GENERATOR)
|
||||||
block(Blocks.MATTER_SCANNER)
|
block(Blocks.MATTER_SCANNER)
|
||||||
block(Blocks.ITEM_MONITOR)
|
block(Blocks.ITEM_MONITOR)
|
||||||
@ -160,12 +158,11 @@ object DataGen {
|
|||||||
block(Items.MATTER_DECOMPOSER, "matter_decomposer_working")
|
block(Items.MATTER_DECOMPOSER, "matter_decomposer_working")
|
||||||
}
|
}
|
||||||
|
|
||||||
event.generator.addProvider(object : BlockStateProvider(event.generator, MOD_ID, event.existingFileHelper) {
|
blockStateProvider.lambda {
|
||||||
override fun registerStatesAndModels() {
|
with(it.getMultipartBuilder(Blocks.DRIVE_VIEWER)) {
|
||||||
with(getMultipartBuilder(Blocks.DRIVE_VIEWER)) {
|
|
||||||
for (facing in BlockMatteryRotatable.FACING.possibleValues) {
|
for (facing in BlockMatteryRotatable.FACING.possibleValues) {
|
||||||
part()
|
part()
|
||||||
.modelFile(models().getExistingFile(ResourceLocation(MOD_ID, "block/drive_viewer_drive_part")))
|
.modelFile(it.models().getExistingFile(ResourceLocation(MOD_ID, "block/drive_viewer_drive_part")))
|
||||||
.rotationY(facing.toYRotBlockstate())
|
.rotationY(facing.toYRotBlockstate())
|
||||||
.addModel()
|
.addModel()
|
||||||
.condition(BlockMatteryRotatable.FACING, facing)
|
.condition(BlockMatteryRotatable.FACING, facing)
|
||||||
@ -173,7 +170,7 @@ object DataGen {
|
|||||||
|
|
||||||
for (workState in WorkerState.SEMI_WORKER_STATE.possibleValues) {
|
for (workState in WorkerState.SEMI_WORKER_STATE.possibleValues) {
|
||||||
part()
|
part()
|
||||||
.modelFile(models().getExistingFile(ResourceLocation(MOD_ID, "block/drive_viewer_${workState.name.lowercase()}")))
|
.modelFile(it.models().getExistingFile(ResourceLocation(MOD_ID, "block/drive_viewer_${workState.name.lowercase()}")))
|
||||||
.rotationY(facing.toYRotBlockstate())
|
.rotationY(facing.toYRotBlockstate())
|
||||||
.addModel()
|
.addModel()
|
||||||
.condition(WorkerState.SEMI_WORKER_STATE, workState)
|
.condition(WorkerState.SEMI_WORKER_STATE, workState)
|
||||||
@ -182,11 +179,11 @@ object DataGen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
with(getMultipartBuilder(Blocks.PATTERN_STORAGE)) {
|
with(it.getMultipartBuilder(Blocks.PATTERN_STORAGE)) {
|
||||||
for (facing in BlockMatteryRotatable.FACING.possibleValues) {
|
for (facing in BlockMatteryRotatable.FACING.possibleValues) {
|
||||||
for (i in 0 .. 7) {
|
for (i in 0 .. 7) {
|
||||||
part()
|
part()
|
||||||
.modelFile(models().getExistingFile(ResourceLocation(MOD_ID, "block/pattern/model$i")))
|
.modelFile(it.models().getExistingFile(ResourceLocation(MOD_ID, "block/pattern/model$i")))
|
||||||
.rotationY(facing.toYRotBlockstate())
|
.rotationY(facing.toYRotBlockstate())
|
||||||
.addModel()
|
.addModel()
|
||||||
.condition(BlockMatteryRotatable.FACING, facing)
|
.condition(BlockMatteryRotatable.FACING, facing)
|
||||||
@ -194,14 +191,13 @@ object DataGen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
part()
|
part()
|
||||||
.modelFile(models().getExistingFile(ResourceLocation(MOD_ID, "block/pattern_storage")))
|
.modelFile(it.models().getExistingFile(ResourceLocation(MOD_ID, "block/pattern_storage")))
|
||||||
.rotationY(facing.toYRotBlockstate())
|
.rotationY(facing.toYRotBlockstate())
|
||||||
.addModel()
|
.addModel()
|
||||||
.condition(BlockMatteryRotatable.FACING, facing)
|
.condition(BlockMatteryRotatable.FACING, facing)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
|
||||||
|
|
||||||
val workerTags = arrayOf(
|
val workerTags = arrayOf(
|
||||||
TileNbtCopy("work_ticks"),
|
TileNbtCopy("work_ticks"),
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package ru.dbotthepony.mc.otm.datagen.blocks
|
package ru.dbotthepony.mc.otm.datagen.blocks
|
||||||
|
|
||||||
import net.minecraft.resources.ResourceLocation
|
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.BlockState
|
||||||
import net.minecraft.world.level.block.state.properties.Property
|
|
||||||
import net.minecraftforge.client.model.generators.BlockStateProvider
|
import net.minecraftforge.client.model.generators.BlockStateProvider
|
||||||
import net.minecraftforge.client.model.generators.ConfiguredModel
|
import net.minecraftforge.client.model.generators.ConfiguredModel
|
||||||
import net.minecraftforge.forge.event.lifecycle.GatherDataEvent
|
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
|
import ru.dbotthepony.mc.otm.datagen.toYRotBlockstate
|
||||||
|
|
||||||
typealias AdvancedBlockStateFunction = (BlockState, ConfiguredModel.Builder<*>, String) -> String?
|
typealias AdvancedBlockStateFunction = (BlockState, ConfiguredModel.Builder<*>, String) -> String?
|
||||||
//typealias AdvancedBlockStateBoolFunction = (BlockState, ConfiguredModel.Builder<*>) -> String
|
|
||||||
|
|
||||||
private data class AdvancedBlockStateEntry(val block: BlockMattery, val func: AdvancedBlockStateFunction)
|
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 {
|
private fun initialTransform(it: BlockState, modelPath: String, builder: ConfiguredModel.Builder<*>): String {
|
||||||
var modelPath = modelPath
|
var modelPath = modelPath
|
||||||
@ -38,18 +34,65 @@ private fun initialTransform(it: BlockState, modelPath: String, builder: Configu
|
|||||||
return modelPath
|
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 blocks = ArrayList<AdvancedBlockStateEntry>()
|
||||||
//private val boolMapped = ArrayList<AdvancedBlockStateBooleanMapped>()
|
|
||||||
|
|
||||||
fun block(block: BlockMattery) = blocks.add(AdvancedBlockStateEntry(block) { _, _, _ -> null })
|
fun block(block: BlockMattery) = blocks.add(AdvancedBlockStateEntry(block) { _, _, _ -> null })
|
||||||
fun block(block: BlockMattery, func: AdvancedBlockStateFunction) = blocks.add(AdvancedBlockStateEntry(block, func))
|
fun block(block: BlockMattery, func: AdvancedBlockStateFunction) = blocks.add(AdvancedBlockStateEntry(block, func))
|
||||||
|
|
||||||
//fun multipartBoolBlock(block: BlockMattery, vararg props: BooleanPropertyMapping) {
|
private val simpleBlocks = ArrayList<Block>()
|
||||||
// boolMapped.add(AdvancedBlockStateBooleanMapped(block, props))
|
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() {
|
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) {
|
for ((block, func) in blocks) {
|
||||||
getVariantBuilder(block).forAllStates {
|
getVariantBuilder(block).forAllStates {
|
||||||
val builder = ConfiguredModel.builder()
|
val builder = ConfiguredModel.builder()
|
||||||
@ -61,5 +104,9 @@ class AdvancedBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(ev
|
|||||||
return@forAllStates arrayOf(builder.buildLast())
|
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