support for Nylium blocks
This commit is contained in:
@@ -47,17 +47,17 @@ object StandardGrassDiscovery : ParametrizedModelDiscovery() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
data class StandardGrassKey(
|
data class StandardGrassKey(
|
||||||
val grassLocation: ResourceLocation,
|
val sprite: ResourceLocation,
|
||||||
val overrideColor: Color?
|
val overrideColor: Color?
|
||||||
) : HalfBakedWrapperKey() {
|
) : HalfBakedWrapperKey() {
|
||||||
val tintIndex: Int get() = if (overrideColor == null) 0 else -1
|
val tintIndex: Int get() = if (overrideColor == null) 0 else -1
|
||||||
|
|
||||||
override fun bake(ctx: ModelBakingContext, wrapped: SpecialRenderModel): SpecialRenderModel {
|
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)
|
logColorOverride(BetterFoliageMod.detailLogger(this), Config.shortGrass.saturationThreshold, hsb)
|
||||||
hsb.colorOverride(Config.shortGrass.saturationThreshold)
|
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()
|
tuftModelSet(grassTuftShapes, null) { idx -> grassTuftSprites[randomI()] }.buildTufts()
|
||||||
}
|
}
|
||||||
val grassFullBlockMeshes = BetterFoliage.modelManager.lazyMap { key: StandardGrassKey ->
|
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 {
|
val snowFullBlockMeshes by BetterFoliage.modelManager.lazy {
|
||||||
Array(64) { fullCubeTextured(ResourceLocation("block/snow"), -1) }
|
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.ModelDiscoveryContext
|
||||||
import mods.betterfoliage.resource.discovery.ParametrizedModelDiscovery
|
import mods.betterfoliage.resource.discovery.ParametrizedModelDiscovery
|
||||||
import mods.betterfoliage.util.Atlas
|
import mods.betterfoliage.util.Atlas
|
||||||
|
import mods.betterfoliage.util.averageColor
|
||||||
|
import mods.betterfoliage.util.colorOverride
|
||||||
import mods.betterfoliage.util.idxOrNull
|
import mods.betterfoliage.util.idxOrNull
|
||||||
import mods.betterfoliage.util.lazy
|
import mods.betterfoliage.util.lazy
|
||||||
|
import mods.betterfoliage.util.lazyMap
|
||||||
|
import mods.betterfoliage.util.logColorOverride
|
||||||
import mods.betterfoliage.util.randomI
|
import mods.betterfoliage.util.randomI
|
||||||
import net.minecraft.client.renderer.RenderType
|
import net.minecraft.client.renderer.RenderType
|
||||||
import net.minecraft.util.Direction
|
import net.minecraft.util.Direction
|
||||||
@@ -31,13 +35,23 @@ import java.util.Random
|
|||||||
|
|
||||||
object StandardMyceliumDiscovery : ParametrizedModelDiscovery() {
|
object StandardMyceliumDiscovery : ParametrizedModelDiscovery() {
|
||||||
override fun processModel(ctx: ModelDiscoveryContext, params: Map<String, String>) {
|
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()
|
ctx.blockState.block.extendLayers()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
object StandardMyceliumKey : HalfBakedWrapperKey() {
|
data class StandardMyceliumKey(
|
||||||
override fun bake(ctx: ModelBakingContext, wrapped: SpecialRenderModel) = StandardMyceliumModel(wrapped)
|
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(
|
class MyceliumRenderData(
|
||||||
@@ -47,15 +61,17 @@ class MyceliumRenderData(
|
|||||||
}
|
}
|
||||||
|
|
||||||
class StandardMyceliumModel(
|
class StandardMyceliumModel(
|
||||||
wrapped: SpecialRenderModel
|
wrapped: SpecialRenderModel,
|
||||||
|
key: StandardMyceliumKey
|
||||||
) : HalfBakedSpecialWrapper(wrapped) {
|
) : HalfBakedSpecialWrapper(wrapped) {
|
||||||
|
|
||||||
|
val tuftModels by myceliumTuftModels.delegate(key)
|
||||||
val tuftLighting = LightingPreferredFace(Direction.UP)
|
val tuftLighting = LightingPreferredFace(Direction.UP)
|
||||||
|
|
||||||
override fun prepare(ctx: BlockCtx, random: Random): Any {
|
override fun prepare(ctx: BlockCtx, random: Random): Any {
|
||||||
if (!Config.enabled) return Unit
|
if (!Config.enabled) return Unit
|
||||||
return MyceliumRenderData(
|
return MyceliumRenderData(
|
||||||
random.idxOrNull(myceliumTuftModels) {
|
random.idxOrNull(tuftModels) {
|
||||||
Config.shortGrass.enabled(random) &&
|
Config.shortGrass.enabled(random) &&
|
||||||
Config.shortGrass.myceliumEnabled &&
|
Config.shortGrass.myceliumEnabled &&
|
||||||
ctx.state(Direction.UP).isAir(ctx.world, ctx.pos)
|
ctx.state(Direction.UP).isAir(ctx.world, ctx.pos)
|
||||||
@@ -67,7 +83,7 @@ class StandardMyceliumModel(
|
|||||||
super.renderLayer(ctx, data, layer)
|
super.renderLayer(ctx, data, layer)
|
||||||
if (data is MyceliumRenderData && data.tuftIndex != null && layer == Layers.tufts) {
|
if (data is MyceliumRenderData && data.tuftIndex != null && layer == Layers.tufts) {
|
||||||
ctx.vertexLighter = tuftLighting
|
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 ->
|
val myceliumTuftSprites by SpriteSetDelegate(Atlas.BLOCKS) { idx ->
|
||||||
ResourceLocation(BetterFoliageMod.MOD_ID, "blocks/better_mycel_$idx")
|
ResourceLocation(BetterFoliageMod.MOD_ID, "blocks/better_mycel_$idx")
|
||||||
}
|
}
|
||||||
val myceliumTuftModels by BetterFoliage.modelManager.lazy {
|
val myceliumTuftShapes by BetterFoliage.modelManager.lazy {
|
||||||
val shapes = Config.shortGrass.let { tuftShapeSet(it.size, it.heightMin, it.heightMax, it.hOffset) }
|
Config.shortGrass.let { tuftShapeSet(it.size, it.heightMin, it.heightMax, it.hOffset) }
|
||||||
tuftModelSet(shapes, Color.white) { idx -> myceliumTuftSprites[randomI()] }.buildTufts()
|
}
|
||||||
|
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"))
|
setParam("texture-grass", model.texture("top"))
|
||||||
end
|
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
|
// Dirt
|
||||||
match block.name.matches("minecraft:dirt") setParam("type", "dirt") end
|
match block.name.matches("minecraft:dirt") setParam("type", "dirt") end
|
||||||
|
|
||||||
@@ -38,10 +46,9 @@ end
|
|||||||
// Sand & Dirt
|
// Sand & Dirt
|
||||||
match block.name.matches("minecraft:sand", "minecraft:red_sand") setParam("type", "sand") end
|
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:cactus") setParam("type", "cactus") end
|
||||||
match block.name.matches("minecraft:lilypad") setParam("type", "lilypad") 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
|
match block.name.matches("minecraft:netherrack") setParam("type", "netherrack") end
|
||||||
|
|
||||||
// Crops
|
// Crops
|
||||||
|
|||||||
Reference in New Issue
Block a user