42 lines
1.7 KiB
Kotlin
42 lines
1.7 KiB
Kotlin
package mods.betterfoliage.client.render
|
|
|
|
import mods.betterfoliage.BetterFoliage
|
|
import mods.betterfoliage.BetterFoliageMod
|
|
import mods.betterfoliage.client.Client
|
|
import mods.betterfoliage.client.config.Config
|
|
import mods.betterfoliage.client.integration.ShadersModIntegration
|
|
import mods.octarinecore.client.render.CombinedContext
|
|
import mods.octarinecore.client.render.RenderDecorator
|
|
import net.minecraft.block.material.Material
|
|
import net.minecraft.tags.BlockTags
|
|
import net.minecraft.util.ResourceLocation
|
|
import net.minecraft.world.biome.Biome
|
|
import org.apache.logging.log4j.Level.DEBUG
|
|
|
|
class RenderAlgae : RenderDecorator(BetterFoliageMod.MOD_ID, BetterFoliageMod.bus) {
|
|
|
|
val noise = simplexNoise()
|
|
|
|
val algaeIcons = spriteSet { idx -> ResourceLocation(BetterFoliageMod.MOD_ID, "blocks/better_algae_$idx") }
|
|
val algaeModels = modelSet(64) { idx -> RenderGrass.grassTopQuads(Config.algae.heightMin, Config.algae.heightMax)(idx) }
|
|
|
|
override fun isEligible(ctx: CombinedContext) =
|
|
Config.enabled && Config.algae.enabled &&
|
|
ctx.state(up2).material == Material.WATER &&
|
|
ctx.state(up1).material == Material.WATER &&
|
|
BlockTags.DIRT_LIKE.contains(ctx.state.block) &&
|
|
ctx.biome.category.let { it == Biome.Category.OCEAN || it == Biome.Category.BEACH || it == Biome.Category.RIVER } &&
|
|
noise[ctx.pos] < Config.algae.population
|
|
|
|
override fun render(ctx: CombinedContext) {
|
|
ctx.render()
|
|
if (!ctx.isCutout) return
|
|
val rand = ctx.semiRandomArray(3)
|
|
ShadersModIntegration.grass(ctx, Config.algae.shaderWind) {
|
|
ctx.render(
|
|
algaeModels[rand[2]],
|
|
icon = { _, qi, _ -> algaeIcons[rand[qi and 1]] }
|
|
)
|
|
}
|
|
}
|
|
} |