73 lines
2.9 KiB
Kotlin
73 lines
2.9 KiB
Kotlin
package mods.betterfoliage.render.block.vanilla
|
|
|
|
import mods.betterfoliage.BetterFoliageMod
|
|
import mods.betterfoliage.config.Config
|
|
import mods.betterfoliage.model.HalfBakedSpecialWrapper
|
|
import mods.betterfoliage.model.HalfBakedWrapperKey
|
|
import mods.betterfoliage.model.SpecialRenderModel
|
|
import mods.betterfoliage.model.SpriteSetDelegate
|
|
import mods.betterfoliage.model.buildTufts
|
|
import mods.betterfoliage.model.tuftModelSet
|
|
import mods.betterfoliage.model.tuftShapeSet
|
|
import mods.betterfoliage.render.lighting.LightingPreferredFace
|
|
import mods.betterfoliage.render.pipeline.RenderCtxBase
|
|
import mods.betterfoliage.resource.discovery.AbstractModelDiscovery
|
|
import mods.betterfoliage.resource.discovery.BakeWrapperManager
|
|
import mods.betterfoliage.resource.discovery.ModelBakingContext
|
|
import mods.betterfoliage.resource.discovery.ModelDiscoveryContext
|
|
import mods.betterfoliage.util.Atlas
|
|
import mods.betterfoliage.util.LazyInvalidatable
|
|
import mods.betterfoliage.util.get
|
|
import mods.betterfoliage.util.randomI
|
|
import net.minecraft.block.Blocks
|
|
import net.minecraft.client.renderer.RenderType
|
|
import net.minecraft.client.renderer.RenderTypeLookup
|
|
import net.minecraft.client.renderer.model.BlockModel
|
|
import net.minecraft.util.Direction
|
|
import net.minecraft.util.ResourceLocation
|
|
|
|
object StandardMyceliumDiscovery : AbstractModelDiscovery() {
|
|
val MYCELIUM_BLOCKS = listOf(Blocks.MYCELIUM)
|
|
|
|
override fun processModel(ctx: ModelDiscoveryContext) {
|
|
if (ctx.getUnbaked() is BlockModel && ctx.blockState.block in MYCELIUM_BLOCKS) {
|
|
ctx.addReplacement(StandardMyceliumKey)
|
|
RenderTypeLookup.setRenderLayer(ctx.blockState.block, RenderType.getCutout())
|
|
}
|
|
super.processModel(ctx)
|
|
}
|
|
}
|
|
|
|
object StandardMyceliumKey : HalfBakedWrapperKey() {
|
|
override fun bake(ctx: ModelBakingContext, wrapped: SpecialRenderModel) = StandardMyceliumModel(wrapped)
|
|
}
|
|
|
|
class StandardMyceliumModel(
|
|
wrapped: SpecialRenderModel
|
|
) : HalfBakedSpecialWrapper(wrapped) {
|
|
|
|
val tuftLighting = LightingPreferredFace(Direction.UP)
|
|
|
|
override fun render(ctx: RenderCtxBase, noDecorations: Boolean) {
|
|
super.render(ctx, noDecorations)
|
|
|
|
if (Config.shortGrass.enabled &&
|
|
Config.shortGrass.myceliumEnabled &&
|
|
Config.shortGrass.enabled(ctx.random) &&
|
|
ctx.state(Direction.UP).isAir(ctx.world, ctx.pos)
|
|
) {
|
|
ctx.vertexLighter = tuftLighting
|
|
ctx.renderQuads(myceliumTuftModels[ctx.random])
|
|
}
|
|
}
|
|
|
|
companion object {
|
|
val myceliumTuftSprites by SpriteSetDelegate(Atlas.BLOCKS) { idx ->
|
|
ResourceLocation(BetterFoliageMod.MOD_ID, "blocks/better_mycel_$idx")
|
|
}
|
|
val myceliumTuftModels by LazyInvalidatable(BakeWrapperManager) {
|
|
val shapes = Config.shortGrass.let { tuftShapeSet(it.size, it.heightMin, it.heightMax, it.hOffset) }
|
|
tuftModelSet(shapes, -1) { idx -> myceliumTuftSprites[randomI()] }.buildTufts()
|
|
}
|
|
}
|
|
} |