support for Nylium blocks
This commit is contained in:
@@ -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) }
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user