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 f0a8d5251..cadd756d3 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -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) diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt index 4857cc46b..122d12205 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/blocks/MatteryBlockStateProvider.kt @@ -62,7 +62,7 @@ class MatteryBlockStateProvider(event: GatherDataEvent) : BlockStateProvider(eve this.simpleBlocks.addAll(blocks) } - fun simpleBlockM(blocks: List) { + fun simpleBlockM(blocks: Collection) { this.simpleBlocks.addAll(blocks) } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt index 83d822ff2..1d516a310 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/items/MatteryItemModelProvider.kt @@ -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() - private val handheld = ArrayList() - private val delegates = ArrayList() + 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 (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 - } + for (callback in callbacks) { + callback.invoke() } } - 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) = 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}")) } diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt index a7aec60f7..dfd6d8c65 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/models/MatteryModelProvider.kt @@ -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() + private val callbacks = LinkedList() - 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() - private val cubeColumn = ArrayList() - - override fun registerModels() { - super.registerModels() - - for ((path, texture) in cubeAll) { - cubeAll(path, texture) + fun decorativeGlassAll(blocks: Collection) { + 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) { - 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}")) + } } } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt index b0d85fa5b..14a09a346 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlocks.kt @@ -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() }