Datagen glass blocks with correct render type

Fixes #75
This commit is contained in:
DBotThePony 2022-09-08 19:41:58 +07:00
parent 5946413b7a
commit b53d19308e
Signed by: DBot
GPG Key ID: DCC23B5715498507
5 changed files with 92 additions and 111 deletions

View File

@ -9,7 +9,6 @@ import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.IronBarsBlock
import net.minecraftforge.client.model.generators.ConfiguredModel
import net.minecraftforge.client.model.generators.ModelFile
import net.minecraftforge.common.Tags
import net.minecraftforge.eventbus.api.SubscribeEvent
import net.minecraftforge.fml.common.Mod
import net.minecraftforge.data.event.GatherDataEvent
@ -26,7 +25,7 @@ import ru.dbotthepony.mc.otm.datagen.loot.LootModifiers
import ru.dbotthepony.mc.otm.datagen.items.MatteryItemModelProvider
import ru.dbotthepony.mc.otm.datagen.lang.AddEnglishLanguage
import ru.dbotthepony.mc.otm.datagen.loot.LootTables
import ru.dbotthepony.mc.otm.datagen.models.BlockMatteryModelProvider
import ru.dbotthepony.mc.otm.datagen.models.MatteryBlockModelProvider
import ru.dbotthepony.mc.otm.datagen.recipes.MatteryRecipeProvider
import ru.dbotthepony.mc.otm.datagen.recipes.has
import ru.dbotthepony.mc.otm.registry.*
@ -44,7 +43,7 @@ import ru.dbotthepony.mc.otm.registry.objects.DecorativeBlock
object DataGen {
const val MOD_ID = OverdriveThatMatters.MOD_ID
private lateinit var blockModelProvider: BlockMatteryModelProvider
private lateinit var blockModelProvider: MatteryBlockModelProvider
private lateinit var itemModelProvider: MatteryItemModelProvider
private lateinit var blockStateProvider: MatteryBlockStateProvider
private lateinit var lootTableProvider: LootTables
@ -98,12 +97,12 @@ object DataGen {
var mdl_noside_alt: ModelFile? = null
with(blockModelProvider) {
lambda {
mdl_post = panePost(post, textureSide, textureRailing)
mdl_side = paneSide(side, textureSide, textureRailing)
mdl_side_alt = paneSideAlt(side_alt, textureSide, textureRailing)
mdl_noside = paneNoSide(noside, textureSide)
mdl_noside_alt = paneNoSideAlt(noside_alt, textureSide)
exec {
mdl_post = panePost(post, textureSide, textureRailing).renderType("translucent")
mdl_side = paneSide(side, textureSide, textureRailing).renderType("translucent")
mdl_side_alt = paneSideAlt(side_alt, textureSide, textureRailing).renderType("translucent")
mdl_noside = paneNoSide(noside, textureSide).renderType("translucent")
mdl_noside_alt = paneNoSideAlt(noside_alt, textureSide).renderType("translucent")
}
}
@ -188,13 +187,21 @@ object DataGen {
@JvmStatic
@Suppress("unused")
fun onGatherData(event: GatherDataEvent) {
blockModelProvider = BlockMatteryModelProvider(event)
blockStateProvider = MatteryBlockStateProvider(event)
itemModelProvider = MatteryItemModelProvider(event)
lootTableProvider = LootTables(event.generator)
recipeProvider = MatteryRecipeProvider(event.generator)
lootModifier = LootModifiers(event.generator)
languageProvider = MatteryLanguageProvider(event.generator)
val blockModelProvider = MatteryBlockModelProvider(event)
val blockStateProvider = MatteryBlockStateProvider(event)
val itemModelProvider = MatteryItemModelProvider(event)
val lootTableProvider = LootTables(event.generator)
val recipeProvider = MatteryRecipeProvider(event.generator)
val lootModifier = LootModifiers(event.generator)
val languageProvider = MatteryLanguageProvider(event.generator)
this.blockModelProvider = blockModelProvider
this.blockStateProvider = blockStateProvider
this.itemModelProvider = itemModelProvider
this.lootTableProvider = lootTableProvider
this.recipeProvider = recipeProvider
this.lootModifier = lootModifier
this.languageProvider = languageProvider
val tagsProvider = TagsProvider(event)
@ -228,9 +235,8 @@ object DataGen {
decoratives(MRegistry.VENT)
decoratives(MRegistry.VENT_ALTERNATIVE)
for (glass in MRegistry.INDUSTRIAL_GLASS.allBlocks.values) {
decorativeCubeAll(glass)
}
blockModelProvider.decorativeGlassAll(MRegistry.INDUSTRIAL_GLASS.allBlocks.values)
blockStateProvider.simpleBlockM(MRegistry.INDUSTRIAL_GLASS.allBlocks.values)
for ((block, colors) in MRegistry.TRITANIUM_STRIPED_BLOCK.blocksWithColor) {
decorativeColumn(block, "stripe/${block.registryName!!.path}", "tritanium_block_${colors.first.name.lowercase()}")
@ -240,7 +246,7 @@ object DataGen {
blockModelProvider.resourceCubeAll(MBlocks.TRITANIUM_RAW_BLOCK)
blockModelProvider.resourceCubeAll(MBlocks.DEEPSLATE_TRITANIUM_ORE)
blockModelProvider.lambda {
blockModelProvider.exec {
for (crate in MRegistry.CARGO_CRATES.blocks.values) {
it.withExistingParent("${crate.registryName!!.path}_closed", ResourceLocation(OverdriveThatMatters.MOD_ID, "${MNames.CARGO_CRATE}_closed"))
.texture("texture", "block/cargo_crates/${crate.registryName!!.path}")
@ -254,15 +260,15 @@ object DataGen {
decorativeColumn(MBlocks.TRITANIUM_STRIPED_BLOCK, "tritanium_striped_block", "tritanium_block")
for ((color, glass) in MRegistry.INDUSTRIAL_GLASS_PANE.blocks) {
val name = MRegistry.INDUSTRIAL_GLASS.blocks[color]!!.registryName!!.path
for ((color, glass) in MRegistry.INDUSTRIAL_GLASS_PANE.allBlocks) {
val name = MRegistry.INDUSTRIAL_GLASS.allBlocks[color]!!.registryName!!.path
val textureSide = ResourceLocation(MOD_ID, "block/decorative/$name")
val textureRailing = ResourceLocation(MOD_ID, "block/decorative/industrial_glass_frame")
pane(glass, textureSide, textureRailing)
}
with(blockModelProvider) {
lambda {
exec {
copy("block/battery/battery1", "block/battery/battery0").also { it.offset(-4f, 0f, 0f) }
copy("block/battery/battery2", "block/battery/battery0").also { it.offset(-8f, 0f, 0f) }
@ -444,7 +450,7 @@ object DataGen {
}
for ((color, glass) in MRegistry.INDUSTRIAL_GLASS_PANE.allItems) {
generated(glass, ResourceLocation(MOD_ID, "block/decorative/${MRegistry.INDUSTRIAL_GLASS.allItems[color]!!.registryName!!.path}"))
generatedTranslucent(glass, ResourceLocation(MOD_ID, "block/decorative/${MRegistry.INDUSTRIAL_GLASS.allItems[color]!!.registryName!!.path}"))
}
blocks(MRegistry.DECORATIVE_CRATE.allItems.values)

View File

@ -62,7 +62,7 @@ class MatteryBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(eve
this.simpleBlocks.addAll(blocks)
}
fun simpleBlockM(blocks: List<Block>) {
fun simpleBlockM(blocks: Collection<Block>) {
this.simpleBlocks.addAll(blocks)
}

View File

@ -7,62 +7,37 @@ import net.minecraftforge.data.event.GatherDataEvent
import org.apache.logging.log4j.LogManager
import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.core.registryName
private data class SimpleItemModel(val item: String, val path: ResourceLocation) {
val traceback = IllegalArgumentException("Failed to register model")
}
import java.util.LinkedList
class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event.generator, DataGen.MOD_ID, event.existingFileHelper) {
private val generated = ArrayList<SimpleItemModel>()
private val handheld = ArrayList<SimpleItemModel>()
private val delegates = ArrayList<SimpleItemModel>()
private val callbacks = LinkedList<() -> Unit>()
fun exec(func: () -> Unit): MatteryItemModelProvider {
callbacks.add(func)
return this
}
override fun registerModels() {
for (obj in generated) {
val (item, path) = obj
try {
withExistingParent(item, GENERATED).texture("layer0", path)
} catch(err: Throwable) {
LOGGER.error(err, obj.traceback)
throw err
for (callback in callbacks) {
callback.invoke()
}
}
for (obj in handheld) {
val (item, path) = obj
try {
withExistingParent(item, HANDHELD).texture("layer0", path)
} catch(err: Throwable) {
LOGGER.error(err, obj.traceback)
throw err
}
}
for (obj in delegates) {
val (item, path) = obj
try {
withExistingParent(item, path)
} catch(err: Throwable) {
LOGGER.error(err, obj.traceback)
throw err
}
}
}
fun block(item: Item) = delegates.add(SimpleItemModel(item.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/${item.registryName!!.path}")))
fun block(item: Item, path: String) = delegates.add(SimpleItemModel(item.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/$path")))
fun block(item: Item) = exec { withExistingParent(item.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/${item.registryName!!.path}")) }
fun block(item: Item, path: String) = exec { withExistingParent(item.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/$path")) }
fun blocks(vararg items: Item) = items.forEach(this::block)
fun blocks(items: Collection<Item>) = items.forEach(this::block)
fun generated(item: Item, texture: ResourceLocation) {
generated.add(SimpleItemModel(item.registryName!!.path, texture))
fun generated(item: Item, texture: ResourceLocation) = exec {
withExistingParent(item.registryName!!.path, GENERATED).texture("layer0", texture)
}
fun handheld(item: Item, texture: ResourceLocation) {
handheld.add(SimpleItemModel(item.registryName!!.path, texture))
fun generatedTranslucent(item: Item, texture: ResourceLocation) = exec {
withExistingParent(item.registryName!!.path, GENERATED).texture("layer0", texture).renderType("translucent")
}
fun handheld(item: Item, texture: ResourceLocation) = exec {
withExistingParent(item.registryName!!.path, HANDHELD).texture("layer0", texture)
}
fun generated(vararg items: Item) = items.forEach { generated(it, ResourceLocation(DataGen.MOD_ID, "item/${it.registryName!!.path}")) }

View File

@ -9,6 +9,7 @@ import net.minecraftforge.client.model.generators.ModelProvider
import net.minecraftforge.data.event.GatherDataEvent
import ru.dbotthepony.mc.otm.datagen.DataGen
import ru.dbotthepony.mc.otm.core.registryName
import java.util.LinkedList
private typealias Callback = (MatteryModelProvider) -> Unit
@ -39,9 +40,9 @@ sealed class MatteryModelProvider(event: GatherDataEvent, folder: String) : Mode
}
}
private val callbacks = ArrayList<Callback>()
private val callbacks = LinkedList<Callback>()
fun lambda(callback: Callback) {
fun exec(callback: Callback) {
callbacks.add(callback)
}
@ -52,59 +53,69 @@ sealed class MatteryModelProvider(event: GatherDataEvent, folder: String) : Mode
}
}
private data class CubeAllEntry(val path: String, val texture: ResourceLocation)
private data class CubeColumnEntry(val path: String, val end: ResourceLocation, val side: ResourceLocation)
class BlockMatteryModelProvider(event: GatherDataEvent) : MatteryModelProvider(event, BLOCK_FOLDER) {
class MatteryBlockModelProvider(event: GatherDataEvent) : MatteryModelProvider(event, BLOCK_FOLDER) {
override fun getName(): String {
return "Block Models: $modid"
}
private val cubeAll = ArrayList<CubeAllEntry>()
private val cubeColumn = ArrayList<CubeColumnEntry>()
override fun registerModels() {
super.registerModels()
for ((path, texture) in cubeAll) {
cubeAll(path, texture)
fun decorativeGlassAll(blocks: Collection<Block>) {
for (block in blocks) {
exec {
cubeAll(block.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/decorative/${block.registryName!!.path}")).renderType("translucent")
}
}
}
for ((path, end, side) in cubeColumn) {
cubeColumn(path, end, side)
fun decorativeGlassAll(vararg blocks: Block) {
for (block in blocks) {
exec {
cubeAll(block.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/decorative/${block.registryName!!.path}")).renderType("translucent")
}
}
}
fun decorativeCubeAll(vararg blocks: Block) {
for (it in blocks) {
cubeAll.add(CubeAllEntry(it.registryName!!.path, ResourceLocation("overdrive_that_matters:block/decorative/${it.registryName!!.path}")))
for (block in blocks) {
exec {
cubeAll(block.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/decorative/${block.registryName!!.path}"))
}
}
}
fun decorativeCubeAll(subdir: String, vararg blocks: Block) {
for (it in blocks) {
cubeAll.add(CubeAllEntry(it.registryName!!.path, ResourceLocation("overdrive_that_matters:block/decorative/${subdir}/${it.registryName!!.path}")))
for (block in blocks) {
exec {
cubeAll(block.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/decorative/${subdir}/${block.registryName!!.path}"))
}
}
}
fun decorativeCubeAll(subdir: String, suffix: String, vararg blocks: Block) {
for (it in blocks) {
cubeAll.add(CubeAllEntry(it.registryName!!.path, ResourceLocation("overdrive_that_matters:block/decorative/${subdir}/${it.registryName!!.path}$suffix")))
for (block in blocks) {
exec {
cubeAll(block.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/decorative/${subdir}/${block.registryName!!.path}$suffix"))
}
}
}
fun decorativeCubeAll(blocks: Collection<Block>) {
for (it in blocks) {
cubeAll.add(CubeAllEntry(it.registryName!!.path, ResourceLocation("overdrive_that_matters:block/decorative/${it.registryName!!.path}")))
for (block in blocks) {
exec {
cubeAll(block.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/decorative/${block.registryName!!.path}"))
}
}
}
fun decorativeCubeAll(block: Block, texture: String) {
cubeAll.add(CubeAllEntry(block.registryName!!.path, ResourceLocation("overdrive_that_matters:block/decorative/$texture")))
exec {
cubeAll(block.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/decorative/$texture"))
}
}
fun column(it: Block, end: String, side: String) {
cubeColumn.add(CubeColumnEntry(it.registryName!!.path, ResourceLocation(DataGen.MOD_ID, end), ResourceLocation(DataGen.MOD_ID, side)))
fun column(block: Block, end: String, side: String) {
exec {
cubeColumn(block.registryName!!.path, ResourceLocation(DataGen.MOD_ID, end), ResourceLocation(DataGen.MOD_ID, side))
}
}
fun decorativeColumn(it: Block, end: String, side: String) {
@ -112,8 +123,10 @@ class BlockMatteryModelProvider(event: GatherDataEvent) : MatteryModelProvider(e
}
fun resourceCubeAll(vararg blocks: Block) {
for (it in blocks) {
cubeAll.add(CubeAllEntry(it.registryName!!.path, ResourceLocation("overdrive_that_matters:block/resource/${it.registryName!!.path}")))
for (block in blocks) {
exec {
cubeAll(block.registryName!!.path, ResourceLocation(DataGen.MOD_ID, "block/resource/${block.registryName!!.path}"))
}
}
}
}

View File

@ -27,19 +27,6 @@ object MBlocks {
internal fun register(bus: IEventBus) {
registry.register(bus)
bus.addListener(this::registerClient)
}
private fun registerClient(event: FMLClientSetupEvent) {
val translucent = RenderType.translucent()
for (block in MRegistry.INDUSTRIAL_GLASS.blocks.values) {
ItemBlockRenderTypes.setRenderLayer(block, translucent)
}
for (block in MRegistry.INDUSTRIAL_GLASS_PANE.blocks.values) {
ItemBlockRenderTypes.setRenderLayer(block, translucent)
}
}
val ANDROID_STATION: Block by registry.register(MNames.ANDROID_STATION) { AndroidStationBlock() }