support for Nylium blocks

This commit is contained in:
octarine-noise
2021-07-12 21:47:06 +02:00
parent 54e245bcd4
commit 145e07363c
3 changed files with 40 additions and 15 deletions

View File

@@ -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) }

View File

@@ -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<String, String>) {
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()
}
}
}

View File

@@ -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