36 lines
1.7 KiB
Kotlin
36 lines
1.7 KiB
Kotlin
package mods.betterfoliage.client.render
|
|
|
|
import mods.betterfoliage.BetterFoliageMod
|
|
import mods.betterfoliage.client.config.Config
|
|
import mods.octarinecore.client.render.AbstractBlockRenderingHandler
|
|
import mods.octarinecore.client.render.BlockContext
|
|
import mods.octarinecore.client.render.withOffset
|
|
import mods.octarinecore.common.Int3
|
|
import mods.octarinecore.common.forgeDirsHorizontal
|
|
import mods.octarinecore.common.offset
|
|
import net.minecraft.client.renderer.BlockRendererDispatcher
|
|
import net.minecraft.client.renderer.BufferBuilder
|
|
import net.minecraft.util.BlockRenderLayer
|
|
import net.minecraftforge.fml.relauncher.Side
|
|
import net.minecraftforge.fml.relauncher.SideOnly
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
class RenderConnectedGrass : AbstractBlockRenderingHandler(BetterFoliageMod.MOD_ID) {
|
|
override fun isEligible(ctx: BlockContext) =
|
|
Config.enabled && Config.connectedGrass.enabled &&
|
|
Config.blocks.dirt.matchesClass(ctx.block) &&
|
|
Config.blocks.grassClasses.matchesClass(ctx.block(up1)) &&
|
|
(Config.connectedGrass.snowEnabled || !ctx.blockState(up2).isSnow)
|
|
|
|
override fun render(ctx: BlockContext, dispatcher: BlockRendererDispatcher, renderer: BufferBuilder, layer: BlockRenderLayer): Boolean {
|
|
// if the block sides are not visible anyway, render normally
|
|
if (forgeDirsHorizontal.all { ctx.blockState(it.offset).isOpaqueCube }) return renderWorldBlockBase(ctx, dispatcher, renderer, layer)
|
|
|
|
if (ctx.isSurroundedBy { it.isOpaqueCube } ) return false
|
|
return ctx.withOffset(Int3.zero, up1) {
|
|
ctx.withOffset(up1, up2) {
|
|
renderWorldBlockBase(ctx, dispatcher, renderer, layer)
|
|
}
|
|
}
|
|
}
|
|
} |