66 lines
2.3 KiB
Kotlin
66 lines
2.3 KiB
Kotlin
package mods.betterfoliage.render.pipeline
|
|
|
|
import com.mojang.blaze3d.matrix.MatrixStack
|
|
import com.mojang.blaze3d.vertex.IVertexBuilder
|
|
import mods.betterfoliage.chunk.BasicBlockCtx
|
|
import mods.betterfoliage.chunk.BlockCtx
|
|
import mods.betterfoliage.model.HalfBakedQuad
|
|
import mods.betterfoliage.model.SpecialRenderModel
|
|
import mods.betterfoliage.util.getWithDefault
|
|
import net.minecraft.block.BlockState
|
|
import net.minecraft.client.renderer.BlockModelRenderer
|
|
import net.minecraft.util.math.BlockPos
|
|
import net.minecraft.world.IBlockDisplayReader
|
|
import net.minecraftforge.client.MinecraftForgeClient
|
|
import net.minecraftforge.client.model.data.IModelData
|
|
import java.util.Random
|
|
|
|
class RenderCtxVanilla(
|
|
val renderer: BlockModelRenderer,
|
|
blockCtx: BlockCtx,
|
|
val buffer: IVertexBuilder,
|
|
val combinedOverlay: Int,
|
|
matrixStack: MatrixStack,
|
|
checkSides: Boolean,
|
|
random: Random,
|
|
val randomSeed: Long,
|
|
modelData: IModelData,
|
|
val useAO: Boolean
|
|
): RenderCtxBase(blockCtx, matrixStack, checkSides, random, modelData) {
|
|
|
|
override fun renderQuad(quad: HalfBakedQuad) {
|
|
vertexLighter.updateLightmapAndColor(quad, lightingData)
|
|
buffer.putBulkData(
|
|
matrixStack.last(), quad.baked,
|
|
lightingData.colorMultiplier,
|
|
lightingData.tint[0], lightingData.tint[1], lightingData.tint[2],
|
|
lightingData.packedLight, combinedOverlay, true
|
|
)
|
|
}
|
|
|
|
companion object {
|
|
@JvmStatic
|
|
fun render(
|
|
renderer: BlockModelRenderer,
|
|
world: IBlockDisplayReader,
|
|
model: SpecialRenderModel,
|
|
state: BlockState,
|
|
pos: BlockPos,
|
|
matrixStack: MatrixStack,
|
|
buffer: IVertexBuilder,
|
|
checkSides: Boolean,
|
|
random: Random,
|
|
seed: Long,
|
|
combinedOverlay: Int,
|
|
modelData: IModelData,
|
|
smooth: Boolean
|
|
): Boolean {
|
|
val blockCtx = BasicBlockCtx(world, pos)
|
|
// init context if missing (this is the first render layer)
|
|
val ctx = RenderCtxVanilla(renderer, blockCtx, buffer, combinedOverlay, matrixStack, checkSides, random, seed, modelData, smooth)
|
|
model.renderLayer(ctx, specialRenderData.get()!!, MinecraftForgeClient.getRenderLayer())
|
|
return ctx.hasRendered
|
|
}
|
|
}
|
|
}
|