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 3b7b213cc..c0f55d033 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/DataGen.kt @@ -8,6 +8,8 @@ import net.minecraft.tags.ItemTags import net.minecraft.tags.Tag import net.minecraft.world.item.Item import net.minecraft.world.level.block.Block +import net.minecraft.world.level.block.IronBarsBlock +import net.minecraftforge.client.model.generators.ModelFile import net.minecraftforge.common.Tags import net.minecraftforge.eventbus.api.SubscribeEvent import net.minecraftforge.fml.common.Mod @@ -56,6 +58,48 @@ object DataGen { blockStateProvider.block(block) } + private fun pane(block: Block, textureSide: ResourceLocation, textureRailing: ResourceLocation) { + val name = block.registryName?.path ?: throw IllegalStateException("Invalid state of glass pane $block") + + val post = name + val side = "${name}_ne" + val side_alt = "${name}_sw" + val noside = "${name}_noside_ne" + val noside_alt = "${name}_noside_sw" + + var mdl_post: ModelFile? = null + var mdl_side: ModelFile? = null + var mdl_side_alt: ModelFile? = null + var mdl_noside: ModelFile? = null + 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) + } + } + + blockStateProvider.lambda { + check(mdl_post != null) { "DataGen execution order is screwed lmaooooooo" } + + with(it.getMultipartBuilder(block)) { + part().modelFile(mdl_post!!).addModel() + part().modelFile(mdl_side!!).addModel().condition(IronBarsBlock.NORTH, true) + part().modelFile(mdl_side!!).rotationY(90).addModel().condition(IronBarsBlock.EAST, true) + part().modelFile(mdl_side_alt!!).addModel().condition(IronBarsBlock.SOUTH, true) + part().modelFile(mdl_side_alt!!).rotationY(90).addModel().condition(IronBarsBlock.WEST, true) + part().modelFile(mdl_noside!!).addModel().condition(IronBarsBlock.NORTH, false) + part().modelFile(mdl_noside!!).rotationY(270).addModel().condition(IronBarsBlock.WEST, false) + part().modelFile(mdl_noside_alt!!).addModel().condition(IronBarsBlock.EAST, false) + part().modelFile(mdl_noside_alt!!).rotationY(90).addModel().condition(IronBarsBlock.SOUTH, false) + } + } + } + @SubscribeEvent @JvmStatic @Suppress("unused") @@ -71,6 +115,9 @@ object DataGen { event.generator.addProvider(blockStateProvider) event.generator.addProvider(blockStateProvider) event.generator.addProvider(recipeProvider) + event.generator.addProvider(MatterBankProvider(event)) + event.generator.addProvider(BatteryBankProvider(event)) + event.generator.addProvider(lootTableProvider) decorativeCubeAll(*Blocks.CRATES) decorativeCubeAll(Blocks.CARBON_FIBRE_BLOCK) @@ -86,6 +133,13 @@ object DataGen { decorativeColumn(Blocks.TRITANIUM_STRIPED_BLOCK, "tritanium_striped_block", "tritanium_block") + for (glass in Registry.INDUSTRIAL_GLASS_LIST) { + val name = glass.block.registryName?.path ?: throw IllegalStateException("Invalid state of glass block ${glass.block}") + val textureSide = ResourceLocation(MOD_ID, "block/decorative/$name") + val textureRailing = textureSide + pane(glass.pane, textureSide, textureRailing) + } + with(blockModelProvider) { lambda { copy("block/battery/battery1", "block/battery/battery0").also { it.offset(-4f, 0f, 0f) } @@ -120,14 +174,7 @@ object DataGen { ore(Blocks.DEEPSLATE_TRITANIUM_ORE) ore(Blocks.TRITANIUM_ORE) ore(Blocks.TRITANIUM_RAW_BLOCK) - } - event.generator.addProvider(MatterBankProvider(event)) - event.generator.addProvider(BatteryBankProvider(event)) - - event.generator.addProvider(lootTableProvider) - - with(blockStateProvider) { block(Blocks.CHEMICAL_GENERATOR) block(Blocks.MATTER_SCANNER) block(Blocks.ITEM_MONITOR) @@ -153,6 +200,11 @@ object DataGen { block(Items.ITEM_MONITOR) block(Items.TRITANIUM_BLOCK) + for (glass in Registry.INDUSTRIAL_GLASS_LIST) { + block(glass.item) + generated(glass.paneItem, ResourceLocation(MOD_ID, "block/decorative/${glass.item.registryName!!.path}")) + } + blocks(*Items.CRATES) components(*Items.DATAGEN_COMPONENTS) 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 ec5e8178d..c0518be68 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 @@ -40,6 +40,8 @@ class MatteryItemModelProvider(event: GatherDataEvent) : ItemModelProvider(event } fun generated(vararg items: Item) = items.forEach { generated(it, ResourceLocation(DataGen.MOD_ID, "item/${it.registryName!!.path}")) } + fun generatedBlock(vararg items: Item) = items.forEach { generated(it, ResourceLocation(DataGen.MOD_ID, "block/${it.registryName!!.path}")) } + fun generatedBlockDecorative(vararg items: Item) = items.forEach { generated(it, ResourceLocation(DataGen.MOD_ID, "block/decorative/${it.registryName!!.path}")) } fun handheld(vararg items: Item) = items.forEach { handheld(it, ResourceLocation(DataGen.MOD_ID, "item/${it.registryName!!.path}")) } fun generated(item: Item, prefix: String) = generated(item, ResourceLocation(DataGen.MOD_ID, "item/${prefix}${item.registryName!!.path}")) diff --git a/src/main/java/ru/dbotthepony/mc/otm/Registry.java b/src/main/java/ru/dbotthepony/mc/otm/Registry.java index 63a9eace1..650c55e54 100644 --- a/src/main/java/ru/dbotthepony/mc/otm/Registry.java +++ b/src/main/java/ru/dbotthepony/mc/otm/Registry.java @@ -2,6 +2,8 @@ package ru.dbotthepony.mc.otm; import net.minecraft.ChatFormatting; import net.minecraft.client.gui.screens.MenuScreens; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TextComponent; @@ -554,6 +556,17 @@ public class Registry { // OverdriveThatMatters.LOGGER.info("Registered blocks"); } + + @SubscribeEvent + @SuppressWarnings("unused") + public static void registerClient(final FMLClientSetupEvent event) { + final var translucent = RenderType.translucent(); + + for (var glass : INDUSTRIAL_GLASS_LIST) { + ItemBlockRenderTypes.setRenderLayer(glass.block, translucent); + ItemBlockRenderTypes.setRenderLayer(glass.pane, translucent); + } + } } public static class Items {