From 145e07363c86676ca8050364dbb338e986294b17 Mon Sep 17 00:00:00 2001 From: octarine-noise Date: Mon, 12 Jul 2021 21:47:06 +0200 Subject: [PATCH] support for Nylium blocks --- .../render/block/vanilla/Grass.kt | 8 ++--- .../render/block/vanilla/Mycelium.kt | 36 ++++++++++++++----- .../config/betterfoliage/vanilla.rules | 11 ++++-- 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Grass.kt b/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Grass.kt index 2fdf895..ca987e1 100644 --- a/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Grass.kt +++ b/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Grass.kt @@ -47,17 +47,17 @@ object StandardGrassDiscovery : ParametrizedModelDiscovery() { } data class StandardGrassKey( - val grassLocation: ResourceLocation, + val sprite: ResourceLocation, val overrideColor: Color? ) : HalfBakedWrapperKey() { val tintIndex: Int get() = if (overrideColor == null) 0 else -1 override fun bake(ctx: ModelBakingContext, wrapped: SpecialRenderModel): SpecialRenderModel { - val grassSpriteColor = Atlas.BLOCKS[grassLocation].averageColor.let { hsb -> + val grassColor = Atlas.BLOCKS[sprite].averageColor.let { hsb -> logColorOverride(BetterFoliageMod.detailLogger(this), Config.shortGrass.saturationThreshold, hsb) hsb.colorOverride(Config.shortGrass.saturationThreshold) } - return StandardGrassModel(wrapped, this.copy(overrideColor = grassSpriteColor)) + return StandardGrassModel(wrapped, this.copy(overrideColor = grassColor)) } } @@ -136,7 +136,7 @@ class StandardGrassModel( tuftModelSet(grassTuftShapes, null) { idx -> grassTuftSprites[randomI()] }.buildTufts() } val grassFullBlockMeshes = BetterFoliage.modelManager.lazyMap { key: StandardGrassKey -> - Array(64) { fullCubeTextured(key.grassLocation, key.tintIndex) } + Array(64) { fullCubeTextured(key.sprite, key.tintIndex) } } val snowFullBlockMeshes by BetterFoliage.modelManager.lazy { Array(64) { fullCubeTextured(ResourceLocation("block/snow"), -1) } diff --git a/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Mycelium.kt b/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Mycelium.kt index d681751..c1b0887 100644 --- a/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Mycelium.kt +++ b/src/main/kotlin/mods/betterfoliage/render/block/vanilla/Mycelium.kt @@ -21,8 +21,12 @@ import mods.betterfoliage.resource.discovery.ModelBakingContext import mods.betterfoliage.resource.discovery.ModelDiscoveryContext import mods.betterfoliage.resource.discovery.ParametrizedModelDiscovery import mods.betterfoliage.util.Atlas +import mods.betterfoliage.util.averageColor +import mods.betterfoliage.util.colorOverride import mods.betterfoliage.util.idxOrNull import mods.betterfoliage.util.lazy +import mods.betterfoliage.util.lazyMap +import mods.betterfoliage.util.logColorOverride import mods.betterfoliage.util.randomI import net.minecraft.client.renderer.RenderType import net.minecraft.util.Direction @@ -31,13 +35,23 @@ import java.util.Random object StandardMyceliumDiscovery : ParametrizedModelDiscovery() { override fun processModel(ctx: ModelDiscoveryContext, params: Map) { - ctx.addReplacement(StandardMyceliumKey) + val textureMycelium = params.texture("texture-mycelium") ?: return + ctx.addReplacement(StandardMyceliumKey(textureMycelium, null)) ctx.blockState.block.extendLayers() } } -object StandardMyceliumKey : HalfBakedWrapperKey() { - override fun bake(ctx: ModelBakingContext, wrapped: SpecialRenderModel) = StandardMyceliumModel(wrapped) +data class StandardMyceliumKey( + val sprite: ResourceLocation, + val overrideColor: Color? +) : HalfBakedWrapperKey() { + override fun bake(ctx: ModelBakingContext, wrapped: SpecialRenderModel): SpecialRenderModel { + val myceliumColor = Atlas.BLOCKS[sprite].averageColor.let { hsb -> + logColorOverride(BetterFoliageMod.detailLogger(this), Config.shortGrass.saturationThreshold, hsb) + hsb.colorOverride(Config.shortGrass.saturationThreshold) + } + return StandardMyceliumModel(wrapped, copy(overrideColor = myceliumColor)) + } } class MyceliumRenderData( @@ -47,15 +61,17 @@ class MyceliumRenderData( } class StandardMyceliumModel( - wrapped: SpecialRenderModel + wrapped: SpecialRenderModel, + key: StandardMyceliumKey ) : HalfBakedSpecialWrapper(wrapped) { + val tuftModels by myceliumTuftModels.delegate(key) val tuftLighting = LightingPreferredFace(Direction.UP) override fun prepare(ctx: BlockCtx, random: Random): Any { if (!Config.enabled) return Unit return MyceliumRenderData( - random.idxOrNull(myceliumTuftModels) { + random.idxOrNull(tuftModels) { Config.shortGrass.enabled(random) && Config.shortGrass.myceliumEnabled && ctx.state(Direction.UP).isAir(ctx.world, ctx.pos) @@ -67,7 +83,7 @@ class StandardMyceliumModel( super.renderLayer(ctx, data, layer) if (data is MyceliumRenderData && data.tuftIndex != null && layer == Layers.tufts) { ctx.vertexLighter = tuftLighting - ctx.renderQuads(myceliumTuftModels[data.tuftIndex]) + ctx.renderQuads(tuftModels[data.tuftIndex]) } } @@ -75,9 +91,11 @@ class StandardMyceliumModel( val myceliumTuftSprites by SpriteSetDelegate(Atlas.BLOCKS) { idx -> ResourceLocation(BetterFoliageMod.MOD_ID, "blocks/better_mycel_$idx") } - val myceliumTuftModels by BetterFoliage.modelManager.lazy { - val shapes = Config.shortGrass.let { tuftShapeSet(it.size, it.heightMin, it.heightMax, it.hOffset) } - tuftModelSet(shapes, Color.white) { idx -> myceliumTuftSprites[randomI()] }.buildTufts() + val myceliumTuftShapes by BetterFoliage.modelManager.lazy { + Config.shortGrass.let { tuftShapeSet(it.size, it.heightMin, it.heightMax, it.hOffset) } + } + val myceliumTuftModels = BetterFoliage.modelManager.lazyMap { key: StandardMyceliumKey -> + tuftModelSet(myceliumTuftShapes, key.overrideColor) { idx -> myceliumTuftSprites[randomI()] }.buildTufts() } } } \ No newline at end of file diff --git a/src/main/resources/assets/betterfoliage/config/betterfoliage/vanilla.rules b/src/main/resources/assets/betterfoliage/config/betterfoliage/vanilla.rules index 5821cfc..276b2f3 100644 --- a/src/main/resources/assets/betterfoliage/config/betterfoliage/vanilla.rules +++ b/src/main/resources/assets/betterfoliage/config/betterfoliage/vanilla.rules @@ -17,6 +17,14 @@ model.extends("minecraft:block/grass_block", "minecraft:block/cube_bottom_top") setParam("texture-grass", model.texture("top")) end +// Mycelium & Nylium +match block.name.matches("minecraft:mycelium", "minecraft:crimson_nylium", "minecraft:warped_nylium") setParam("type", "mycelium") end + +match isParam("type", "mycelium") +model.extends("minecraft:block/cube_bottom_top") +setParam("texture-mycelium", model.texture("top")) +end + // Dirt match block.name.matches("minecraft:dirt") setParam("type", "dirt") end @@ -38,10 +46,9 @@ end // Sand & Dirt match block.name.matches("minecraft:sand", "minecraft:red_sand") setParam("type", "sand") end -// Cactus, Lilypad, Mycelium, Netherrack +// Cactus, Lilypad, Netherrack match block.name.matches("minecraft:cactus") setParam("type", "cactus") end match block.name.matches("minecraft:lilypad") setParam("type", "lilypad") end -match block.name.matches("minecraft:mycelium") setParam("type", "mycelium") end match block.name.matches("minecraft:netherrack") setParam("type", "netherrack") end // Crops