Show teleportation location and phase-through blocks

This commit is contained in:
DBotThePony 2022-10-13 07:51:46 +07:00
parent 6e90378656
commit 3fa0933ac8
Signed by: DBot
GPG Key ID: DCC23B5715498507
5 changed files with 185 additions and 21 deletions

View File

@ -2,9 +2,9 @@ package ru.dbotthepony.mc.otm.android.feature
import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.systems.RenderSystem
import com.mojang.blaze3d.vertex.PoseStack import com.mojang.blaze3d.vertex.PoseStack
import com.mojang.math.Quaternion
import com.mojang.math.Vector3f import com.mojang.math.Vector3f
import net.minecraft.ChatFormatting import net.minecraft.ChatFormatting
import net.minecraft.client.renderer.LevelRenderer
import net.minecraft.core.BlockPos import net.minecraft.core.BlockPos
import net.minecraft.core.Direction import net.minecraft.core.Direction
import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.CompoundTag
@ -15,11 +15,11 @@ import net.minecraft.sounds.SoundSource
import net.minecraft.world.level.ClipContext import net.minecraft.world.level.ClipContext
import net.minecraft.world.level.block.Block import net.minecraft.world.level.block.Block
import net.minecraft.world.level.material.Material import net.minecraft.world.level.material.Material
import net.minecraft.world.phys.BlockHitResult
import net.minecraft.world.phys.HitResult import net.minecraft.world.phys.HitResult
import net.minecraft.world.phys.shapes.CollisionContext import net.minecraft.world.phys.shapes.CollisionContext
import net.minecraftforge.client.event.RenderLevelStageEvent import net.minecraftforge.client.event.RenderLevelStageEvent
import net.minecraftforge.event.entity.living.LivingDeathEvent import net.minecraftforge.event.entity.living.LivingDeathEvent
import org.lwjgl.opengl.GL11.GL_ALWAYS
import org.lwjgl.opengl.GL11.GL_LESS import org.lwjgl.opengl.GL11.GL_LESS
import ru.dbotthepony.mc.otm.NULLABLE_MINECRAFT_SERVER import ru.dbotthepony.mc.otm.NULLABLE_MINECRAFT_SERVER
import ru.dbotthepony.mc.otm.OverdriveThatMatters import ru.dbotthepony.mc.otm.OverdriveThatMatters
@ -29,8 +29,12 @@ import ru.dbotthepony.mc.otm.android.AndroidResearchManager
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
import ru.dbotthepony.mc.otm.capability.extractEnergyInnerExact import ru.dbotthepony.mc.otm.capability.extractEnergyInnerExact
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.client.render.DynamicBufferSource
import ru.dbotthepony.mc.otm.client.render.ResearchIcons import ru.dbotthepony.mc.otm.client.render.ResearchIcons
import ru.dbotthepony.mc.otm.client.render.element import ru.dbotthepony.mc.otm.client.render.element
import ru.dbotthepony.mc.otm.client.render.linesIgnoreZRenderType
import ru.dbotthepony.mc.otm.core.ImmutableList
import ru.dbotthepony.mc.otm.core.Vector import ru.dbotthepony.mc.otm.core.Vector
import ru.dbotthepony.mc.otm.core.asVector import ru.dbotthepony.mc.otm.core.asVector
import ru.dbotthepony.mc.otm.core.component1 import ru.dbotthepony.mc.otm.core.component1
@ -86,7 +90,13 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv
return false return false
} }
private fun trace(): BlockPos? { private data class TraceResult(val pos: BlockPos? = null, val phasedBlocks: Collection<BlockPos> = listOf()) {
companion object {
val EMPTY = TraceResult()
}
}
private fun trace(): TraceResult {
val headPosition = ply.eyePosition val headPosition = ply.eyePosition
val aimVector = ply.getViewVector(1f) val aimVector = ply.getViewVector(1f)
@ -99,7 +109,7 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv
)) ))
if (result.isInside || result.type == HitResult.Type.MISS) { if (result.isInside || result.type == HitResult.Type.MISS) {
return null return TraceResult.EMPTY
} }
if ( if (
@ -107,18 +117,18 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv
isValidPosition(result.blockPos.above()) && isValidPosition(result.blockPos.above()) &&
shortestDistanceBetween(ply.genericPositions(), result.blockPos.above().asVector()) <= ServerConfig.EnderTeleporter.MAX_DISTANCE shortestDistanceBetween(ply.genericPositions(), result.blockPos.above().asVector()) <= ServerConfig.EnderTeleporter.MAX_DISTANCE
) { ) {
return result.blockPos.above() return TraceResult(result.blockPos.above())
} }
for (y in 0 .. ServerConfig.EnderTeleporter.MAX_PHASE_DISTANCE) { for (y in 0 .. ServerConfig.EnderTeleporter.MAX_PHASE_DISTANCE) {
val pos = result.blockPos + BlockPos(0, y + 1, 0) val pos = result.blockPos + BlockPos(0, y + 1, 0)
if (isValidPosition(pos) && shortestDistanceBetween(ply.genericPositions(), pos.asVector()) <= ServerConfig.EnderTeleporter.MAX_DISTANCE) { if (isValidPosition(pos) && shortestDistanceBetween(ply.genericPositions(), pos.asVector()) <= ServerConfig.EnderTeleporter.MAX_DISTANCE) {
return pos return TraceResult(pos, if (y != 0) ImmutableList(y + 1) { result.blockPos + BlockPos(0, it, 0) } else listOf())
} }
} }
return null return TraceResult.EMPTY
} }
override fun activate(isClient: Boolean): Boolean { override fun activate(isClient: Boolean): Boolean {
@ -126,7 +136,8 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv
return false return false
} }
val blockPos = trace() ?: return false val (blockPos) = trace()
blockPos ?: return false
cooldown = ServerConfig.EnderTeleporter.COOLDOWN cooldown = ServerConfig.EnderTeleporter.COOLDOWN
@ -152,14 +163,19 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv
} }
} }
override val previewRenderStage: RenderLevelStageEvent.Stage
get() = RenderLevelStageEvent.Stage.AFTER_PARTICLES
override fun renderPreview(event: RenderLevelStageEvent) { override fun renderPreview(event: RenderLevelStageEvent) {
if (!canUse()) return if (!canUse()) return
val pos = trace() val (pos, phasedBlocks) = trace()
if (pos != null) { if (pos != null) {
val (x, y, z) = pos.asVector() val (x, y, z) = pos.asVector()
val (vx, vy, vz) = event.camera.position val (vx, vy, vz) = event.camera.position
//event.poseStack.translate(x, y, z)
if (phasedBlocks.isNotEmpty())
event.poseStack.pushPose()
event.poseStack.translate(x - vx, y - vy, z - vz) event.poseStack.translate(x - vx, y - vy, z - vz)
event.poseStack.mulPose(Vector3f.YP.rotationDegrees(-event.camera.yRot)) event.poseStack.mulPose(Vector3f.YP.rotationDegrees(-event.camera.yRot))
@ -168,12 +184,36 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv
val size = 1f + sin((System.nanoTime() / 1_000_000) / 250.0).toFloat() * 0.2f val size = 1f + sin((System.nanoTime() / 1_000_000) / 250.0).toFloat() * 0.2f
val half = size / -2f val half = size / -2f
RenderSystem.enableDepthTest() RenderSystem.disableDepthTest()
RenderSystem.depthFunc(GL_LESS)
RenderSystem.setShaderColor(1f, 1f, 1f, 0.5f) RenderSystem.setShaderColor(1f, 1f, 1f, 0.5f)
SPRITE.render(event.poseStack, x = half, y = half, width = size, height = size) SPRITE.render(event.poseStack, x = half, y = half, width = size, height = size)
RenderSystem.setShaderColor(1f, 1f, 1f, 1f) RenderSystem.setShaderColor(1f, 1f, 1f, 1f)
if (phasedBlocks.isNotEmpty()) {
event.poseStack.popPose()
val collisionContext = CollisionContext.of(ply)
val builder = source.getBuffer(linesIgnoreZRenderType)
for (blockPos in phasedBlocks) {
val blockState = ply.level.getBlockState(blockPos)
val shape = blockState.getShape(ply.level, blockPos, collisionContext)
LevelRenderer.renderShape(
event.poseStack,
builder,
shape,
blockPos.x - vx,
blockPos.y - vy,
blockPos.z - vz,
1f, 1f, 1f, 1f
)
}
source.endBatch(linesIgnoreZRenderType)
}
RenderSystem.enableDepthTest()
} }
} }
@ -190,6 +230,10 @@ class EnderTeleporterFeature(capability: MatteryPlayerCapability) : AndroidActiv
} }
companion object { companion object {
private val source by lazy {
DynamicBufferSource(maximalInitialBufferSize = 256)
}
val SPRITE = ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/item/black_hole.png").element(0f, 0f, 16f, 16f, 16f, 16f) val SPRITE = ResourceLocation(OverdriveThatMatters.MOD_ID, "textures/item/black_hole.png").element(0f, 0f, 16f, 16f, 16f, 16f)
val POWER_COST_DESCRIPTION = val POWER_COST_DESCRIPTION =

View File

@ -62,7 +62,12 @@ private fun equals(existing: ImmutableList<RenderType>?, types: ImmutableList<Re
* *
* Allows to batch OTM's geometry * Allows to batch OTM's geometry
*/ */
class DynamicBufferSource(val minimalBufferSize: Int = 0) : MultiBufferSource { class DynamicBufferSource(val minimalInitialBufferSize: Int = 0, val maximalInitialBufferSize: Int = Int.MAX_VALUE) : MultiBufferSource {
init {
require(minimalInitialBufferSize >= 0) { "Invalid minimal buffer size $minimalInitialBufferSize" }
require(maximalInitialBufferSize >= minimalInitialBufferSize) { "Maximal buffer size $maximalInitialBufferSize must be greater or equal to minimal buffer size $minimalInitialBufferSize" }
}
private inner class State( private inner class State(
val type: RenderType, val type: RenderType,
var after: ImmutableList<RenderType>? = null, var after: ImmutableList<RenderType>? = null,
@ -95,7 +100,7 @@ class DynamicBufferSource(val minimalBufferSize: Int = 0) : MultiBufferSource {
var priority = -1 var priority = -1
var dirty: Boolean = false var dirty: Boolean = false
val builder by lazy(LazyThreadSafetyMode.NONE) { val builder by lazy(LazyThreadSafetyMode.NONE) {
BufferBuilder(type.bufferSize().coerceAtLeast(minimalBufferSize)) BufferBuilder(type.bufferSize().coerceAtLeast(minimalInitialBufferSize).coerceAtMost(maximalInitialBufferSize))
} }
} }
@ -387,8 +392,8 @@ class DynamicBufferSource(val minimalBufferSize: Int = 0) : MultiBufferSource {
} }
companion object { companion object {
val GUI = DynamicBufferSource() val GUI = DynamicBufferSource(maximalInitialBufferSize = 2 shl 8)
val WORLD = DynamicBufferSource(2 shl 16) val WORLD = DynamicBufferSource(minimalInitialBufferSize = 2 shl 12)
/** /**
* Called from LevelRenderer * Called from LevelRenderer

View File

@ -6,13 +6,15 @@ import com.mojang.blaze3d.vertex.*
import com.mojang.math.Matrix4f import com.mojang.math.Matrix4f
import net.minecraft.client.renderer.GameRenderer import net.minecraft.client.renderer.GameRenderer
import net.minecraft.client.renderer.RenderStateShard import net.minecraft.client.renderer.RenderStateShard
import net.minecraft.client.renderer.RenderStateShard.LineStateShard
import net.minecraft.client.renderer.RenderType import net.minecraft.client.renderer.RenderType
import net.minecraft.client.renderer.texture.TextureAtlasSprite import net.minecraft.client.renderer.texture.TextureAtlasSprite
import org.lwjgl.opengl.GL11
import org.lwjgl.opengl.GL11.GL_ALWAYS import org.lwjgl.opengl.GL11.GL_ALWAYS
import org.lwjgl.opengl.GL11.GL_LESS import org.lwjgl.opengl.GL11.GL_LESS
import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.core.RGBAColor import ru.dbotthepony.mc.otm.core.RGBAColor
import java.util.*
import kotlin.collections.ArrayDeque
import kotlin.math.PI import kotlin.math.PI
import kotlin.math.acos import kotlin.math.acos
import kotlin.math.cos import kotlin.math.cos
@ -692,6 +694,28 @@ val coloredRectRenderType by lazy {
builder.createCompositeState(false)) as RenderType builder.createCompositeState(false)) as RenderType
} }
val linesIgnoreZRenderType by lazy {
@Suppress("INACCESSIBLE_TYPE")
RenderType.create(
"lines_ignore_z",
DefaultVertexFormat.POSITION_COLOR_NORMAL,
VertexFormat.Mode.LINES,
256,
false,
false,
RenderType.CompositeState.builder()
.setShaderState(RenderStateShard.RENDERTYPE_LINES_SHADER)
.setLineState(LineStateShard(OptionalDouble.empty()))
.setLayeringState(RenderStateShard.VIEW_OFFSET_Z_LAYERING)
.setTransparencyState(RenderStateShard.TRANSLUCENT_TRANSPARENCY)
.setOutputState(RenderStateShard.ITEM_ENTITY_TARGET)
.setWriteMaskState(RenderStateShard.COLOR_DEPTH_WRITE)
.setCullState(RenderStateShard.NO_CULL)
.setDepthTestState(RenderStateShard.NO_DEPTH_TEST)
.createCompositeState(false)
) as RenderType
}
fun VertexConsumer.quad( fun VertexConsumer.quad(
pose: PoseStack, pose: PoseStack,
x: Float, x: Float,

View File

@ -22,6 +22,7 @@ import ru.dbotthepony.mc.otm.NULLABLE_MINECRAFT_SERVER
import ru.dbotthepony.mc.otm.block.entity.WorkerState import ru.dbotthepony.mc.otm.block.entity.WorkerState
import ru.dbotthepony.mc.otm.block.entity.matter.MatterReplicatorBlockEntity import ru.dbotthepony.mc.otm.block.entity.matter.MatterReplicatorBlockEntity
import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.client.render.DynamicBufferSource
import ru.dbotthepony.mc.otm.client.render.lockBlendFunc import ru.dbotthepony.mc.otm.client.render.lockBlendFunc
import ru.dbotthepony.mc.otm.client.render.popScissorRect import ru.dbotthepony.mc.otm.client.render.popScissorRect
import ru.dbotthepony.mc.otm.client.render.pushScissorRect import ru.dbotthepony.mc.otm.client.render.pushScissorRect
@ -37,6 +38,7 @@ class MatterReplicatorRenderer(private val context: BlockEntityRendererProvider.
companion object { companion object {
private val smoke = DustParticleOptions(Vector3f(1f, 1f, 1f), 1f) private val smoke = DustParticleOptions(Vector3f(1f, 1f, 1f), 1f)
private val rand = XoroshiroRandomSource(System.nanoTime(), System.currentTimeMillis()) private val rand = XoroshiroRandomSource(System.nanoTime(), System.currentTimeMillis())
private val source = DynamicBufferSource(maximalInitialBufferSize = 2 shl 10)
} }
override fun render( override fun render(
@ -85,10 +87,6 @@ class MatterReplicatorRenderer(private val context: BlockEntityRendererProvider.
0 0
) )
val source = minecraft.renderBuffers().bufferSource()
source.endBatch()
context.itemRenderer.render( context.itemRenderer.render(
item, item,
ItemTransforms.TransformType.NONE, ItemTransforms.TransformType.NONE,

View File

@ -79,3 +79,96 @@ public com.mojang.math.Matrix3f f_8142_ # m22
public-f net.minecraft.world.inventory.Slot f_40220_ # x public-f net.minecraft.world.inventory.Slot f_40220_ # x
public-f net.minecraft.world.inventory.Slot f_40221_ # y public-f net.minecraft.world.inventory.Slot f_40221_ # y
public net.minecraft.client.renderer.LevelRenderer m_109782_(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/mojang/blaze3d/vertex/VertexConsumer;Lnet/minecraft/world/phys/shapes/VoxelShape;DDDFFFF)V # renderShape
public net.minecraft.client.renderer.RenderStateShard f_110135_ # ADDITIVE_TRANSPARENCY
public net.minecraft.client.renderer.RenderStateShard f_173097_ # BLOCK_SHADER
public net.minecraft.client.renderer.RenderStateShard f_110146_ # BLOCK_SHEET
public net.minecraft.client.renderer.RenderStateShard f_110145_ # BLOCK_SHEET_MIPPED
public net.minecraft.client.renderer.RenderStateShard f_110128_ # CLOUDS_TARGET
public net.minecraft.client.renderer.RenderStateShard f_110114_ # COLOR_DEPTH_WRITE
public net.minecraft.client.renderer.RenderStateShard f_110115_ # COLOR_WRITE
public net.minecraft.client.renderer.RenderStateShard f_110138_ # CRUMBLING_TRANSPARENCY
public net.minecraft.client.renderer.RenderStateShard f_110158_ # CULL
public net.minecraft.client.renderer.RenderStateShard f_110130_ # DEFAULT_LINE
public net.minecraft.client.renderer.RenderStateShard f_110148_ # DEFAULT_TEXTURING
public net.minecraft.client.renderer.RenderStateShard f_110116_ # DEPTH_WRITE
public net.minecraft.client.renderer.RenderStateShard f_110151_ # ENTITY_GLINT_TEXTURING
public net.minecraft.client.renderer.RenderStateShard f_110112_ # EQUAL_DEPTH_TEST
public net.minecraft.client.renderer.RenderStateShard f_110150_ # GLINT_TEXTURING
public net.minecraft.client.renderer.RenderStateShard f_110137_ # GLINT_TRANSPARENCY
public net.minecraft.client.renderer.RenderStateShard f_110129_ # ITEM_ENTITY_TARGET
public net.minecraft.client.renderer.RenderStateShard f_110113_ # LEQUAL_DEPTH_TEST
public net.minecraft.client.renderer.RenderStateShard f_110152_ # LIGHTMAP
public net.minecraft.client.renderer.RenderStateShard f_110136_ # LIGHTNING_TRANSPARENCY
public net.minecraft.client.renderer.RenderStateShard f_110123_ # MAIN_TARGET
public net.minecraft.client.renderer.RenderStateShard f_173098_ # NEW_ENTITY_SHADER
public net.minecraft.client.renderer.RenderStateShard f_110110_ # NO_CULL
public net.minecraft.client.renderer.RenderStateShard f_110111_ # NO_DEPTH_TEST
public net.minecraft.client.renderer.RenderStateShard f_110117_ # NO_LAYERING
public net.minecraft.client.renderer.RenderStateShard f_110153_ # NO_LIGHTMAP
public net.minecraft.client.renderer.RenderStateShard f_110155_ # NO_OVERLAY
public net.minecraft.client.renderer.RenderStateShard f_173096_ # NO_SHADER
public net.minecraft.client.renderer.RenderStateShard f_110147_ # NO_TEXTURE
public net.minecraft.client.renderer.RenderStateShard f_110134_ # NO_TRANSPARENCY
public net.minecraft.client.renderer.RenderStateShard f_110124_ # OUTLINE_TARGET
public net.minecraft.client.renderer.RenderStateShard f_110154_ # OVERLAY
public net.minecraft.client.renderer.RenderStateShard f_110126_ # PARTICLES_TARGET
public net.minecraft.client.renderer.RenderStateShard f_110118_ # POLYGON_OFFSET_LAYERING
public net.minecraft.client.renderer.RenderStateShard f_173099_ # POSITION_COLOR_LIGHTMAP_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173104_ # POSITION_COLOR_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173103_ # POSITION_COLOR_TEX_LIGHTMAP_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173101_ # POSITION_COLOR_TEX_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173100_ # POSITION_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173102_ # POSITION_TEX_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173111_ # RENDERTYPE_ARMOR_CUTOUT_NO_CULL_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173079_ # RENDERTYPE_ARMOR_ENTITY_GLINT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173078_ # RENDERTYPE_ARMOR_GLINT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173068_ # RENDERTYPE_BEACON_BEAM_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173085_ # RENDERTYPE_CRUMBLING_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173106_ # RENDERTYPE_CUTOUT_MIPPED_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173107_ # RENDERTYPE_CUTOUT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173094_ # RENDERTYPE_END_GATEWAY_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173093_ # RENDERTYPE_END_PORTAL_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173074_ # RENDERTYPE_ENERGY_SWIRL_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173072_ # RENDERTYPE_ENTITY_ALPHA_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173114_ # RENDERTYPE_ENTITY_CUTOUT_NO_CULL_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173063_ # RENDERTYPE_ENTITY_CUTOUT_NO_CULL_Z_OFFSET_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173113_ # RENDERTYPE_ENTITY_CUTOUT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173069_ # RENDERTYPE_ENTITY_DECAL_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173084_ # RENDERTYPE_ENTITY_GLINT_DIRECT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173083_ # RENDERTYPE_ENTITY_GLINT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173070_ # RENDERTYPE_ENTITY_NO_OUTLINE_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173071_ # RENDERTYPE_ENTITY_SHADOW_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173067_ # RENDERTYPE_ENTITY_SMOOTH_CUTOUT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173112_ # RENDERTYPE_ENTITY_SOLID_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173065_ # RENDERTYPE_ENTITY_TRANSLUCENT_CULL_SHADER
public net.minecraft.client.renderer.RenderStateShard f_234323_ # RENDERTYPE_ENTITY_TRANSLUCENT_EMISSIVE_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173066_ # RENDERTYPE_ENTITY_TRANSLUCENT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173073_ # RENDERTYPE_EYES_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173082_ # RENDERTYPE_GLINT_DIRECT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173081_ # RENDERTYPE_GLINT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173080_ # RENDERTYPE_GLINT_TRANSLUCENT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173064_ # RENDERTYPE_ITEM_ENTITY_TRANSLUCENT_CULL_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173075_ # RENDERTYPE_LEASH_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173091_ # RENDERTYPE_LIGHTNING_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173095_ # RENDERTYPE_LINES_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173077_ # RENDERTYPE_OUTLINE_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173105_ # RENDERTYPE_SOLID_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173090_ # RENDERTYPE_TEXT_INTENSITY_SEE_THROUGH_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173087_ # RENDERTYPE_TEXT_INTENSITY_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173088_ # RENDERTYPE_TEXT_SEE_THROUGH_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173086_ # RENDERTYPE_TEXT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173109_ # RENDERTYPE_TRANSLUCENT_MOVING_BLOCK_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173110_ # RENDERTYPE_TRANSLUCENT_NO_CRUMBLING_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173108_ # RENDERTYPE_TRANSLUCENT_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173092_ # RENDERTYPE_TRIPWIRE_SHADER
public net.minecraft.client.renderer.RenderStateShard f_173076_ # RENDERTYPE_WATER_MASK_SHADER
public net.minecraft.client.renderer.RenderStateShard f_110125_ # TRANSLUCENT_TARGET
public net.minecraft.client.renderer.RenderStateShard f_110139_ # TRANSLUCENT_TRANSPARENCY
public net.minecraft.client.renderer.RenderStateShard f_110119_ # VIEW_OFFSET_Z_LAYERING
public net.minecraft.client.renderer.RenderStateShard f_173089_ # VIEW_SCALE_Z_EPSILON
public net.minecraft.client.renderer.RenderStateShard f_110127_ # WEATHER_TARGET
public net.minecraft.client.renderer.RenderStateShard$LineStateShard