Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.35 KB | None | 0 0
  1. package com.github.ricky12awesome.storagecubes.experience
  2.  
  3. import com.github.ricky12awesome.storagecubes.StorageCubesMod
  4. import com.github.ricky12awesome.undefinedcore.utils.id
  5. import com.github.ricky12awesome.undefinedcore.utils.minecraft
  6. import com.mojang.blaze3d.platform.GLX
  7. import com.mojang.blaze3d.platform.GlStateManager
  8. import net.minecraft.client.MinecraftClient
  9. import net.minecraft.client.render.BufferBuilder
  10. import net.minecraft.client.render.Tessellator
  11. import net.minecraft.client.render.VertexFormats
  12. import net.minecraft.client.render.block.entity.BlockEntityRenderer
  13. import net.minecraft.state.property.Properties
  14. import net.minecraft.util.math.Direction
  15. import org.lwjgl.opengl.GL11
  16.  
  17. inline fun glMatrix(render: () -> Unit) {
  18. GlStateManager.pushMatrix()
  19. render()
  20. GlStateManager.popMatrix()
  21. }
  22.  
  23. inline fun drawTessellator(fn: BufferBuilder.() -> Unit) {
  24. val tessellator = Tessellator.getInstance()
  25. fn(tessellator.bufferBuilder)
  26. tessellator.draw()
  27. }
  28.  
  29. class ExperienceStorageBlockEntityRenderer : BlockEntityRenderer<ExperienceStorageCubeBlockEntity>() {
  30. val fg = minecraft("textures/item/experience_bottle.png")
  31. val bg = id(StorageCubesMod.MOD_ID, "textures/item/experience_bottle_greyed.png") // fg but grayed scaled
  32.  
  33. override fun render(
  34. be: ExperienceStorageCubeBlockEntity,
  35. x: Double,
  36. y: Double,
  37. z: Double,
  38. pt: Float,
  39. breakState: Int
  40. ) {
  41. be.updatePercentage()
  42. val scale = 1.0 / 3
  43. val percent = be.percentage
  44. val direction = be.world!!.getBlockState(be.pos)?.get(Properties.HORIZONTAL_FACING)
  45.  
  46. glMatrix {
  47. val y = y + (scale / 2)
  48. when (direction) {
  49. Direction.WEST -> {
  50. GlStateManager.translated(x, y, z + 0.5 + scale)
  51. GlStateManager.rotated(90.0, 0.0, 1.0, 0.0)
  52. }
  53. Direction.SOUTH -> {
  54. GlStateManager.translated(x + 0.5 + scale, y, z + 1)
  55. GlStateManager.rotated(180.0, 0.0, 1.0, 0.0)
  56. }
  57. Direction.EAST -> {
  58. GlStateManager.translated(x + 1, y, z + (scale / 2))
  59. GlStateManager.rotated(270.0, 0.0, 1.0, 0.0)
  60. }
  61. else -> {
  62. GlStateManager.translated(x + (scale / 2), y, z)
  63. }
  64. }
  65.  
  66. val light = be.world!!.getLightmapIndex(be.pos.offset(direction), 0)
  67. val offsetZ = 0.05
  68. GlStateManager.scaled(1.0 - scale, 1.0 - scale, 1.0)
  69. GLX.glMultiTexCoord2f(GLX.GL_TEXTURE1, (light and 0xFFFF).toFloat(), (light shr 16 and 0xFFFF).toFloat())
  70.  
  71. MinecraftClient.getInstance().textureManager.bindTexture(fg)
  72. drawTessellator {
  73. begin(GL11.GL_QUADS, VertexFormats.POSITION_UV)
  74. vertex(0.0, percent, offsetZ).texture(0.0, -percent).next()
  75. vertex(1.0, percent, offsetZ).texture(1.0, -percent).next()
  76. vertex(1.0, 0.0, offsetZ).texture(1.0, 0.0).next()
  77. vertex(0.0, 0.0, offsetZ).texture(0.0, 0.0).next()
  78. }
  79.  
  80. if (percent < 1.0) {
  81. MinecraftClient.getInstance().textureManager.bindTexture(bg)
  82. drawTessellator {
  83. begin(GL11.GL_QUADS, VertexFormats.POSITION_UV)
  84. vertex(0.0, 1.0, offsetZ).texture(0.0, 0.0).next()
  85. vertex(1.0, 1.0, offsetZ).texture(1.0, 0.0).next()
  86. vertex(1.0, percent, offsetZ).texture(1.0, 1.0 - percent).next()
  87. vertex(0.0, percent, offsetZ).texture(0.0, 1.0 - percent).next()
  88. }
  89. }
  90. }
  91.  
  92. super.render(be, x, y, z, pt, breakState)
  93. }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement