Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.github.ricky12awesome.storagecubes.experience
- import com.github.ricky12awesome.storagecubes.StorageCubesMod
- import com.github.ricky12awesome.undefinedcore.utils.id
- import com.github.ricky12awesome.undefinedcore.utils.minecraft
- import com.mojang.blaze3d.platform.GLX
- import com.mojang.blaze3d.platform.GlStateManager
- import net.minecraft.client.MinecraftClient
- import net.minecraft.client.render.BufferBuilder
- import net.minecraft.client.render.Tessellator
- import net.minecraft.client.render.VertexFormats
- import net.minecraft.client.render.block.entity.BlockEntityRenderer
- import net.minecraft.state.property.Properties
- import net.minecraft.util.math.Direction
- import org.lwjgl.opengl.GL11
- inline fun glMatrix(render: () -> Unit) {
- GlStateManager.pushMatrix()
- render()
- GlStateManager.popMatrix()
- }
- inline fun drawTessellator(fn: BufferBuilder.() -> Unit) {
- val tessellator = Tessellator.getInstance()
- fn(tessellator.bufferBuilder)
- tessellator.draw()
- }
- class ExperienceStorageBlockEntityRenderer : BlockEntityRenderer<ExperienceStorageCubeBlockEntity>() {
- val fg = minecraft("textures/item/experience_bottle.png")
- val bg = id(StorageCubesMod.MOD_ID, "textures/item/experience_bottle_greyed.png") // fg but grayed scaled
- override fun render(
- be: ExperienceStorageCubeBlockEntity,
- x: Double,
- y: Double,
- z: Double,
- pt: Float,
- breakState: Int
- ) {
- be.updatePercentage()
- val scale = 1.0 / 3
- val percent = be.percentage
- val direction = be.world!!.getBlockState(be.pos)?.get(Properties.HORIZONTAL_FACING)
- glMatrix {
- val y = y + (scale / 2)
- when (direction) {
- Direction.WEST -> {
- GlStateManager.translated(x, y, z + 0.5 + scale)
- GlStateManager.rotated(90.0, 0.0, 1.0, 0.0)
- }
- Direction.SOUTH -> {
- GlStateManager.translated(x + 0.5 + scale, y, z + 1)
- GlStateManager.rotated(180.0, 0.0, 1.0, 0.0)
- }
- Direction.EAST -> {
- GlStateManager.translated(x + 1, y, z + (scale / 2))
- GlStateManager.rotated(270.0, 0.0, 1.0, 0.0)
- }
- else -> {
- GlStateManager.translated(x + (scale / 2), y, z)
- }
- }
- val light = be.world!!.getLightmapIndex(be.pos.offset(direction), 0)
- val offsetZ = 0.05
- GlStateManager.scaled(1.0 - scale, 1.0 - scale, 1.0)
- GLX.glMultiTexCoord2f(GLX.GL_TEXTURE1, (light and 0xFFFF).toFloat(), (light shr 16 and 0xFFFF).toFloat())
- MinecraftClient.getInstance().textureManager.bindTexture(fg)
- drawTessellator {
- begin(GL11.GL_QUADS, VertexFormats.POSITION_UV)
- vertex(0.0, percent, offsetZ).texture(0.0, -percent).next()
- vertex(1.0, percent, offsetZ).texture(1.0, -percent).next()
- vertex(1.0, 0.0, offsetZ).texture(1.0, 0.0).next()
- vertex(0.0, 0.0, offsetZ).texture(0.0, 0.0).next()
- }
- if (percent < 1.0) {
- MinecraftClient.getInstance().textureManager.bindTexture(bg)
- drawTessellator {
- begin(GL11.GL_QUADS, VertexFormats.POSITION_UV)
- vertex(0.0, 1.0, offsetZ).texture(0.0, 0.0).next()
- vertex(1.0, 1.0, offsetZ).texture(1.0, 0.0).next()
- vertex(1.0, percent, offsetZ).texture(1.0, 1.0 - percent).next()
- vertex(0.0, percent, offsetZ).texture(0.0, 1.0 - percent).next()
- }
- }
- }
- super.render(be, x, y, z, pt, breakState)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement