WIP: Port some 1.21.5 things
This commit is contained in:
@@ -99,7 +99,7 @@ object MC {
|
||||
inline val soundManager get() = instance.soundManager
|
||||
inline val player: ClientPlayerEntity? get() = TestUtil.unlessTesting { instance.player }
|
||||
inline val camera: Entity? get() = instance.cameraEntity
|
||||
inline val stackInHand: ItemStack get() = player?.inventory?.mainHandStack ?: ItemStack.EMPTY
|
||||
inline val stackInHand: ItemStack get() = player?.mainHandStack ?: ItemStack.EMPTY
|
||||
inline val guiAtlasManager get() = instance.guiAtlasManager
|
||||
inline val world: ClientWorld? get() = TestUtil.unlessTesting { instance.world }
|
||||
inline val playerName: String? get() = player?.name?.unformattedString
|
||||
|
||||
@@ -130,13 +130,14 @@ fun ItemStack.modifyExtraAttributes(block: (NbtCompound) -> Unit) {
|
||||
}
|
||||
|
||||
val ItemStack.skyblockUUIDString: String?
|
||||
get() = extraAttributes.getString("uuid")?.takeIf { it.isNotBlank() }
|
||||
get() = extraAttributes.getString("uuid").getOrNull()?.takeIf { it.isNotBlank() }
|
||||
|
||||
val ItemStack.skyblockUUID: UUID?
|
||||
get() = skyblockUUIDString?.let { UUID.fromString(it) }
|
||||
|
||||
private val petDataCache = WeakCache.memoize<ItemStack, Optional<HypixelPetInfo>>("PetInfo") {
|
||||
val jsonString = it.extraAttributes.getString("petInfo")
|
||||
.getOrNull()
|
||||
if (jsonString.isNullOrBlank()) return@memoize Optional.empty()
|
||||
ErrorUtil.catch<HypixelPetInfo?>("Could not decode hypixel pet info") {
|
||||
jsonparser.decodeFromString<HypixelPetInfo>(jsonString)
|
||||
@@ -145,8 +146,8 @@ private val petDataCache = WeakCache.memoize<ItemStack, Optional<HypixelPetInfo>
|
||||
}
|
||||
|
||||
fun ItemStack.getUpgradeStars(): Int {
|
||||
return extraAttributes.getInt("upgrade_level").takeIf { it > 0 }
|
||||
?: extraAttributes.getInt("dungeon_item_level").takeIf { it > 0 }
|
||||
return extraAttributes.getInt("upgrade_level").getOrNull()?.takeIf { it > 0 }
|
||||
?: extraAttributes.getInt("dungeon_item_level").getOrNull()?.takeIf { it > 0 }
|
||||
?: 0
|
||||
}
|
||||
|
||||
@@ -155,7 +156,7 @@ fun ItemStack.getUpgradeStars(): Int {
|
||||
value class ReforgeId(val id: String)
|
||||
|
||||
fun ItemStack.getReforgeId(): ReforgeId? {
|
||||
return extraAttributes.getString("modifier").takeIf { it.isNotBlank() }?.let(::ReforgeId)
|
||||
return extraAttributes.getString("modifier").getOrNull()?.takeIf { it.isNotBlank() }?.let(::ReforgeId)
|
||||
}
|
||||
|
||||
val ItemStack.petData: HypixelPetInfo?
|
||||
@@ -169,8 +170,8 @@ fun ItemStack.setSkyBlockId(skyblockId: SkyblockId): ItemStack {
|
||||
|
||||
val ItemStack.skyBlockId: SkyblockId?
|
||||
get() {
|
||||
return when (val id = extraAttributes.getString("id")) {
|
||||
"" -> {
|
||||
return when (val id = extraAttributes.getString("id").getOrNull()) {
|
||||
"", null -> {
|
||||
null
|
||||
}
|
||||
|
||||
@@ -180,20 +181,22 @@ val ItemStack.skyBlockId: SkyblockId?
|
||||
|
||||
"RUNE", "UNIQUE_RUNE" -> {
|
||||
val runeData = extraAttributes.getCompound("runes")
|
||||
val runeKind = runeData.keys.singleOrNull()
|
||||
.getOrNull()
|
||||
val runeKind = runeData?.keys?.singleOrNull()
|
||||
if (runeKind == null) SkyblockId("RUNE")
|
||||
else SkyblockId("${runeKind.uppercase()}_RUNE;${runeData.getInt(runeKind)}")
|
||||
else SkyblockId("${runeKind.uppercase()}_RUNE;${runeData.getInt(runeKind).getOrNull()}")
|
||||
}
|
||||
|
||||
"ABICASE" -> {
|
||||
SkyblockId("ABICASE_${extraAttributes.getString("model").uppercase()}")
|
||||
SkyblockId("ABICASE_${extraAttributes.getString("model").getOrNull()?.uppercase()}")
|
||||
}
|
||||
|
||||
"ENCHANTED_BOOK" -> {
|
||||
val enchantmentData = extraAttributes.getCompound("enchantments")
|
||||
val enchantName = enchantmentData.keys.singleOrNull()
|
||||
.getOrNull()
|
||||
val enchantName = enchantmentData?.keys?.singleOrNull()
|
||||
if (enchantName == null) SkyblockId("ENCHANTED_BOOK")
|
||||
else SkyblockId("${enchantName.uppercase()};${enchantmentData.getInt(enchantName)}")
|
||||
else SkyblockId("${enchantName.uppercase()};${enchantmentData.getInt(enchantName).getOrNull()}")
|
||||
}
|
||||
|
||||
// TODO: PARTY_HAT_CRAB{,_ANIMATED,_SLOTH},POTION
|
||||
|
||||
8
src/main/kotlin/util/mc/ArmorUtil.kt
Normal file
8
src/main/kotlin/util/mc/ArmorUtil.kt
Normal file
@@ -0,0 +1,8 @@
|
||||
package moe.nea.firmament.util.mc
|
||||
|
||||
import net.minecraft.entity.EquipmentSlot
|
||||
import net.minecraft.entity.LivingEntity
|
||||
|
||||
val LivingEntity.iterableArmorItems
|
||||
get() = EquipmentSlot.entries.asSequence()
|
||||
.map { it to getEquippedStack(it) }
|
||||
7
src/main/kotlin/util/mc/PlayerUtil.kt
Normal file
7
src/main/kotlin/util/mc/PlayerUtil.kt
Normal file
@@ -0,0 +1,7 @@
|
||||
package moe.nea.firmament.util.mc
|
||||
|
||||
import net.minecraft.entity.EquipmentSlot
|
||||
import net.minecraft.entity.player.PlayerEntity
|
||||
|
||||
|
||||
val PlayerEntity.mainHandStack get() = this.getEquippedStack(EquipmentSlot.MAINHAND)
|
||||
@@ -1,5 +1,6 @@
|
||||
package moe.nea.firmament.util.mc
|
||||
|
||||
import net.minecraft.nbt.AbstractNbtList
|
||||
import net.minecraft.nbt.NbtByte
|
||||
import net.minecraft.nbt.NbtByteArray
|
||||
import net.minecraft.nbt.NbtCompound
|
||||
@@ -38,7 +39,7 @@ class SNbtFormatter private constructor() : NbtElementVisitor {
|
||||
|
||||
|
||||
override fun visitString(element: NbtString) {
|
||||
result.append(NbtString.escape(element.asString()))
|
||||
result.append(NbtString.escape(element.value))
|
||||
}
|
||||
|
||||
override fun visitByte(element: NbtByte) {
|
||||
@@ -65,18 +66,18 @@ class SNbtFormatter private constructor() : NbtElementVisitor {
|
||||
result.append(element.doubleValue()).append("d")
|
||||
}
|
||||
|
||||
private fun visitArrayContents(array: List<NbtElement>) {
|
||||
private fun visitArrayContents(array: AbstractNbtList) {
|
||||
array.forEachIndexed { index, element ->
|
||||
writeIndent()
|
||||
element.accept(this)
|
||||
if (array.size != index + 1) {
|
||||
if (array.size() != index + 1) {
|
||||
result.append(",")
|
||||
}
|
||||
result.append("\n")
|
||||
}
|
||||
}
|
||||
|
||||
private fun writeArray(arrayTypeTag: String, array: List<NbtElement>) {
|
||||
private fun writeArray(arrayTypeTag: String, array: AbstractNbtList) {
|
||||
result.append("[").append(arrayTypeTag).append("\n")
|
||||
pushIndent()
|
||||
visitArrayContents(array)
|
||||
|
||||
62
src/main/kotlin/util/render/CustomRenderLayers.kt
Normal file
62
src/main/kotlin/util/render/CustomRenderLayers.kt
Normal file
@@ -0,0 +1,62 @@
|
||||
package util.render
|
||||
|
||||
import com.mojang.blaze3d.pipeline.RenderPipeline
|
||||
import com.mojang.blaze3d.platform.DepthTestFunction
|
||||
import com.mojang.blaze3d.vertex.VertexFormat.DrawMode
|
||||
import java.util.function.Function
|
||||
import net.minecraft.client.gl.RenderPipelines
|
||||
import net.minecraft.client.render.RenderLayer
|
||||
import net.minecraft.client.render.RenderPhase
|
||||
import net.minecraft.client.render.VertexFormats
|
||||
import net.minecraft.util.Identifier
|
||||
import net.minecraft.util.TriState
|
||||
import net.minecraft.util.Util
|
||||
import moe.nea.firmament.Firmament
|
||||
|
||||
object CustomRenderPipelines {
|
||||
val GUI_TEXTURED_NO_DEPTH_TRIS =
|
||||
RenderPipeline.builder(RenderPipelines.POSITION_TEX_COLOR_SNIPPET)
|
||||
.withVertexFormat(VertexFormats.POSITION_TEXTURE_COLOR, DrawMode.TRIANGLES)
|
||||
.withLocation(Firmament.identifier("gui_textured_overlay_tris"))
|
||||
.withDepthTestFunction(DepthTestFunction.NO_DEPTH_TEST)
|
||||
.withCull(false)
|
||||
.withDepthWrite(false)
|
||||
.build()
|
||||
val COLORED_OMNIPRESENT_QUADS = RenderPipeline.builder(RenderPipelines.ENTITY_SNIPPET)// TODO: split this up to support better transparent ordering.
|
||||
.withLocation(Firmament.identifier("colored_omnipresent_quads"))
|
||||
.withDepthTestFunction(DepthTestFunction.NO_DEPTH_TEST)
|
||||
.withDepthWrite(false)
|
||||
.build()
|
||||
}
|
||||
|
||||
object CustomRenderLayers {
|
||||
|
||||
|
||||
inline fun memoizeTextured(crossinline func: (Identifier) -> RenderLayer) = memoize(func)
|
||||
inline fun <T, R> memoize(crossinline func: (T) -> R): Function<T, R> {
|
||||
return Util.memoize { it: T -> func(it) }
|
||||
}
|
||||
|
||||
val GUI_TEXTURED_NO_DEPTH_TRIS = memoizeTextured { texture ->
|
||||
RenderLayer.of("firmament_gui_textured_overlay_tris",
|
||||
RenderLayer.DEFAULT_BUFFER_SIZE,
|
||||
CustomRenderPipelines.GUI_TEXTURED_NO_DEPTH_TRIS,
|
||||
RenderLayer.MultiPhaseParameters.builder().texture(
|
||||
RenderPhase.Texture(texture, TriState.DEFAULT, false))
|
||||
.build(false))
|
||||
}
|
||||
val LINES = RenderLayer.of(
|
||||
"firmament_lines",
|
||||
RenderLayer.DEFAULT_BUFFER_SIZE,
|
||||
RenderPipelines.LINES,
|
||||
RenderLayer.MultiPhaseParameters.builder()
|
||||
.build(false)
|
||||
)
|
||||
val COLORED_QUADS = RenderLayer.of(
|
||||
"firmament_quads",
|
||||
RenderLayer.DEFAULT_BUFFER_SIZE,
|
||||
CustomRenderPipelines.COLORED_OMNIPRESENT_QUADS,
|
||||
RenderLayer.MultiPhaseParameters.builder()
|
||||
.build(false)
|
||||
)
|
||||
}
|
||||
@@ -1,52 +1,24 @@
|
||||
package moe.nea.firmament.util.render
|
||||
|
||||
import com.mojang.blaze3d.pipeline.RenderPipeline
|
||||
import com.mojang.blaze3d.platform.DepthTestFunction
|
||||
import com.mojang.blaze3d.systems.RenderSystem
|
||||
import com.mojang.blaze3d.vertex.VertexFormat.DrawMode
|
||||
import me.shedaniel.math.Color
|
||||
import org.joml.Matrix4f
|
||||
import util.render.CustomRenderLayers
|
||||
import net.minecraft.client.gl.RenderPipelines
|
||||
import net.minecraft.client.gui.DrawContext
|
||||
import net.minecraft.client.render.RenderLayer
|
||||
import net.minecraft.client.render.RenderLayer.MultiPhaseParameters
|
||||
import net.minecraft.client.render.RenderPhase
|
||||
import net.minecraft.client.render.VertexFormat
|
||||
import net.minecraft.client.render.VertexFormat.DrawMode
|
||||
import net.minecraft.client.render.VertexFormats
|
||||
import net.minecraft.util.Identifier
|
||||
import net.minecraft.util.TriState
|
||||
import net.minecraft.util.Util
|
||||
import moe.nea.firmament.Firmament
|
||||
import moe.nea.firmament.util.MC
|
||||
|
||||
fun DrawContext.isUntranslatedGuiDrawContext(): Boolean {
|
||||
return (matrices.peek().positionMatrix.properties() and Matrix4f.PROPERTY_IDENTITY.toInt()) != 0
|
||||
}
|
||||
|
||||
object GuiRenderLayers {
|
||||
val GUI_TEXTURED_NO_DEPTH = Util.memoize<Identifier, RenderLayer> { texture: Identifier ->
|
||||
RenderLayer.of("firmament_gui_textured_no_depth",
|
||||
VertexFormats.POSITION_TEXTURE_COLOR,
|
||||
DrawMode.QUADS,
|
||||
DEFAULT_BUFFER_SIZE,
|
||||
MultiPhaseParameters.builder()
|
||||
.texture(RenderPhase.Texture(texture, TriState.FALSE, false))
|
||||
.program(RenderPhase.POSITION_TEXTURE_COLOR_PROGRAM)
|
||||
.transparency(RenderPhase.TRANSLUCENT_TRANSPARENCY)
|
||||
.depthTest(RenderPhase.ALWAYS_DEPTH_TEST)
|
||||
.build(false))
|
||||
}
|
||||
val GUI_TEXTURED_TRIS = Util.memoize { texture: Identifier ->
|
||||
RenderLayer.of("firmament_gui_textured_overlay_tris",
|
||||
VertexFormats.POSITION_TEXTURE_COLOR,
|
||||
DrawMode.TRIANGLES,
|
||||
DEFAULT_BUFFER_SIZE,
|
||||
MultiPhaseParameters.builder()
|
||||
.texture(RenderPhase.Texture(texture, TriState.DEFAULT, false))
|
||||
.program(RenderPhase.POSITION_TEXTURE_COLOR_PROGRAM)
|
||||
.transparency(RenderPhase.TRANSLUCENT_TRANSPARENCY)
|
||||
.depthTest(RenderPhase.ALWAYS_DEPTH_TEST)
|
||||
.writeMaskState(RenderPhase.COLOR_MASK)
|
||||
.build(false))
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Use the other drawGuiTexture")
|
||||
fun DrawContext.drawGuiTexture(
|
||||
x: Int, y: Int, z: Int, width: Int, height: Int, sprite: Identifier
|
||||
@@ -91,7 +63,7 @@ fun DrawContext.drawLine(fromX: Int, fromY: Int, toX: Int, toY: Int, color: Colo
|
||||
}
|
||||
RenderSystem.lineWidth(MC.window.scaleFactor.toFloat())
|
||||
draw { vertexConsumers ->
|
||||
val buf = vertexConsumers.getBuffer(RenderInWorldContext.RenderLayers.LINES)
|
||||
val buf = vertexConsumers.getBuffer(CustomRenderLayers.LINES)
|
||||
buf.vertex(fromX.toFloat(), fromY.toFloat(), 0F).color(color.color)
|
||||
.normal(toX - fromX.toFloat(), toY - fromY.toFloat(), 0F)
|
||||
buf.vertex(toX.toFloat(), toY.toFloat(), 0F).color(color.color)
|
||||
|
||||
@@ -1,18 +1,12 @@
|
||||
|
||||
package moe.nea.firmament.util.render
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem
|
||||
import io.github.notenoughupdates.moulconfig.platform.next
|
||||
import org.joml.Matrix4f
|
||||
import net.minecraft.client.font.TextRenderer
|
||||
import net.minecraft.client.render.BufferRenderer
|
||||
import net.minecraft.client.render.GameRenderer
|
||||
import net.minecraft.client.render.LightmapTextureManager
|
||||
import net.minecraft.client.render.RenderLayer
|
||||
import net.minecraft.client.render.Tessellator
|
||||
import net.minecraft.client.render.VertexConsumer
|
||||
import net.minecraft.client.render.VertexFormat
|
||||
import net.minecraft.client.render.VertexFormats
|
||||
import net.minecraft.text.Text
|
||||
import net.minecraft.util.Identifier
|
||||
import net.minecraft.util.math.BlockPos
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package moe.nea.firmament.util.render
|
||||
|
||||
import com.mojang.blaze3d.vertex.VertexFormat
|
||||
import net.minecraft.client.gl.CompiledShader
|
||||
import net.minecraft.client.gl.Defines
|
||||
import net.minecraft.client.gl.ShaderProgramKey
|
||||
import net.minecraft.client.gl.ShaderProgram
|
||||
import net.minecraft.client.render.RenderPhase
|
||||
import net.minecraft.client.render.VertexFormat
|
||||
import net.minecraft.client.render.VertexFormats
|
||||
import moe.nea.firmament.Firmament
|
||||
import moe.nea.firmament.annotations.Subscribe
|
||||
@@ -11,20 +12,9 @@ import moe.nea.firmament.events.DebugInstantiateEvent
|
||||
import moe.nea.firmament.util.MC
|
||||
|
||||
object FirmamentShaders {
|
||||
val shaders = mutableListOf<ShaderProgramKey>()
|
||||
|
||||
private fun shader(name: String, format: VertexFormat, defines: Defines): ShaderProgramKey {
|
||||
val key = ShaderProgramKey(Firmament.identifier(name), format, defines)
|
||||
shaders.add(key)
|
||||
return key
|
||||
}
|
||||
|
||||
val LINES = RenderPhase.ShaderProgram(shader("core/rendertype_lines", VertexFormats.LINES, Defines.EMPTY))
|
||||
|
||||
@Subscribe
|
||||
fun debugLoad(event: DebugInstantiateEvent) {
|
||||
shaders.forEach {
|
||||
MC.instance.shaderLoader.getOrCreateProgram(it)
|
||||
}
|
||||
// TODO: do i still need to work with shaders like this?
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,12 @@
|
||||
package moe.nea.firmament.util.render
|
||||
|
||||
import com.mojang.blaze3d.systems.RenderSystem
|
||||
import io.github.notenoughupdates.moulconfig.platform.next
|
||||
import org.joml.Matrix4f
|
||||
import org.joml.Vector2f
|
||||
import util.render.CustomRenderLayers
|
||||
import kotlin.math.atan2
|
||||
import kotlin.math.tan
|
||||
import net.minecraft.client.gui.DrawContext
|
||||
import net.minecraft.client.render.BufferRenderer
|
||||
import net.minecraft.client.render.RenderLayer
|
||||
import net.minecraft.client.render.RenderPhase
|
||||
import net.minecraft.client.render.Tessellator
|
||||
import net.minecraft.client.render.VertexFormat.DrawMode
|
||||
import net.minecraft.client.render.VertexFormats
|
||||
import net.minecraft.util.Identifier
|
||||
|
||||
object RenderCircleProgress {
|
||||
@@ -26,9 +20,8 @@ object RenderCircleProgress {
|
||||
v1: Float,
|
||||
v2: Float,
|
||||
) {
|
||||
RenderSystem.enableBlend()
|
||||
drawContext.draw {
|
||||
val bufferBuilder = it.getBuffer(GuiRenderLayers.GUI_TEXTURED_TRIS.apply(texture))
|
||||
val bufferBuilder = it.getBuffer(CustomRenderLayers.GUI_TEXTURED_NO_DEPTH_TRIS.apply(texture))
|
||||
val matrix: Matrix4f = drawContext.matrices.peek().positionMatrix
|
||||
|
||||
val corners = listOf(
|
||||
@@ -86,7 +79,6 @@ object RenderCircleProgress {
|
||||
.next()
|
||||
}
|
||||
}
|
||||
RenderSystem.disableBlend()
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -5,15 +5,12 @@ import io.github.notenoughupdates.moulconfig.platform.next
|
||||
import java.lang.Math.pow
|
||||
import org.joml.Matrix4f
|
||||
import org.joml.Vector3f
|
||||
import net.minecraft.client.gl.VertexBuffer
|
||||
import util.render.CustomRenderLayers
|
||||
import net.minecraft.client.render.Camera
|
||||
import net.minecraft.client.render.RenderLayer
|
||||
import net.minecraft.client.render.RenderPhase
|
||||
import net.minecraft.client.render.RenderTickCounter
|
||||
import net.minecraft.client.render.Tessellator
|
||||
import net.minecraft.client.render.VertexConsumer
|
||||
import net.minecraft.client.render.VertexConsumerProvider
|
||||
import net.minecraft.client.render.VertexFormat
|
||||
import net.minecraft.client.render.VertexFormats
|
||||
import net.minecraft.client.texture.Sprite
|
||||
import net.minecraft.client.util.math.MatrixStack
|
||||
@@ -27,47 +24,12 @@ import moe.nea.firmament.util.MC
|
||||
|
||||
@RenderContextDSL
|
||||
class RenderInWorldContext private constructor(
|
||||
private val tesselator: Tessellator,
|
||||
val matrixStack: MatrixStack,
|
||||
private val camera: Camera,
|
||||
private val tickCounter: RenderTickCounter,
|
||||
val vertexConsumers: VertexConsumerProvider.Immediate,
|
||||
) {
|
||||
|
||||
object RenderLayers {
|
||||
val TRANSLUCENT_TRIS = RenderLayer.of("firmament_translucent_tris",
|
||||
VertexFormats.POSITION_COLOR,
|
||||
VertexFormat.DrawMode.TRIANGLES,
|
||||
RenderLayer.CUTOUT_BUFFER_SIZE,
|
||||
false, true,
|
||||
RenderLayer.MultiPhaseParameters.builder()
|
||||
.depthTest(RenderPhase.ALWAYS_DEPTH_TEST)
|
||||
.transparency(RenderPhase.TRANSLUCENT_TRANSPARENCY)
|
||||
.program(RenderPhase.POSITION_COLOR_PROGRAM)
|
||||
.build(false))
|
||||
val LINES = RenderLayer.of("firmament_rendertype_lines",
|
||||
VertexFormats.LINES,
|
||||
VertexFormat.DrawMode.LINES,
|
||||
RenderLayer.CUTOUT_BUFFER_SIZE,
|
||||
false, false, // do we need translucent? i dont think so
|
||||
RenderLayer.MultiPhaseParameters.builder()
|
||||
.depthTest(RenderPhase.ALWAYS_DEPTH_TEST)
|
||||
.program(FirmamentShaders.LINES)
|
||||
.build(false)
|
||||
)
|
||||
val COLORED_QUADS = RenderLayer.of(
|
||||
"firmament_quads",
|
||||
VertexFormats.POSITION_COLOR,
|
||||
VertexFormat.DrawMode.QUADS,
|
||||
RenderLayer.CUTOUT_BUFFER_SIZE,
|
||||
false, true,
|
||||
RenderLayer.MultiPhaseParameters.builder()
|
||||
.depthTest(RenderPhase.ALWAYS_DEPTH_TEST)
|
||||
.program(RenderPhase.POSITION_COLOR_PROGRAM)
|
||||
.transparency(RenderPhase.TRANSLUCENT_TRANSPARENCY)
|
||||
.build(false)
|
||||
)
|
||||
}
|
||||
|
||||
@Deprecated("stateful color management is no longer a thing")
|
||||
fun color(color: me.shedaniel.math.Color) {
|
||||
@@ -82,7 +44,7 @@ class RenderInWorldContext private constructor(
|
||||
fun block(blockPos: BlockPos, color: Int) {
|
||||
matrixStack.push()
|
||||
matrixStack.translate(blockPos.x.toFloat(), blockPos.y.toFloat(), blockPos.z.toFloat())
|
||||
buildCube(matrixStack.peek().positionMatrix, vertexConsumers.getBuffer(RenderLayers.COLORED_QUADS), color)
|
||||
buildCube(matrixStack.peek().positionMatrix, vertexConsumers.getBuffer(CustomRenderLayers.COLORED_QUADS), color)
|
||||
matrixStack.pop()
|
||||
}
|
||||
|
||||
@@ -155,7 +117,7 @@ class RenderInWorldContext private constructor(
|
||||
matrixStack.translate(vec3d.x, vec3d.y, vec3d.z)
|
||||
matrixStack.scale(size, size, size)
|
||||
matrixStack.translate(-.5, -.5, -.5)
|
||||
buildCube(matrixStack.peek().positionMatrix, vertexConsumers.getBuffer(RenderLayers.COLORED_QUADS), color)
|
||||
buildCube(matrixStack.peek().positionMatrix, vertexConsumers.getBuffer(CustomRenderLayers.COLORED_QUADS), color)
|
||||
matrixStack.pop()
|
||||
vertexConsumers.draw()
|
||||
}
|
||||
@@ -182,8 +144,7 @@ class RenderInWorldContext private constructor(
|
||||
|
||||
fun line(points: List<Vec3d>, lineWidth: Float = 10F) {
|
||||
RenderSystem.lineWidth(lineWidth)
|
||||
// TODO: replace with renderlayers
|
||||
val buffer = tesselator.begin(VertexFormat.DrawMode.LINES, VertexFormats.LINES)
|
||||
val buffer = vertexConsumers.getBuffer(CustomRenderLayers.LINES)
|
||||
|
||||
val matrix = matrixStack.peek()
|
||||
var lastNormal: Vector3f? = null
|
||||
@@ -203,7 +164,6 @@ class RenderInWorldContext private constructor(
|
||||
.next()
|
||||
}
|
||||
|
||||
RenderLayers.LINES.draw(buffer.end())
|
||||
}
|
||||
// TODO: put the favourite icons in front of items again
|
||||
|
||||
@@ -281,16 +241,15 @@ class RenderInWorldContext private constructor(
|
||||
fun renderInWorld(event: WorldRenderLastEvent, block: RenderInWorldContext. () -> Unit) {
|
||||
// TODO: there should be *no more global state*. the only thing we should be doing is render layers. that includes settings like culling, blending, shader color, and depth testing
|
||||
// For now i will let these functions remain, but this needs to go before i do a full (non-beta) release
|
||||
RenderSystem.disableDepthTest()
|
||||
RenderSystem.enableBlend()
|
||||
RenderSystem.defaultBlendFunc()
|
||||
RenderSystem.disableCull()
|
||||
// RenderSystem.disableDepthTest()
|
||||
// RenderSystem.enableBlend()
|
||||
// RenderSystem.defaultBlendFunc()
|
||||
// RenderSystem.disableCull()
|
||||
|
||||
event.matrices.push()
|
||||
event.matrices.translate(-event.camera.pos.x, -event.camera.pos.y, -event.camera.pos.z)
|
||||
|
||||
val ctx = RenderInWorldContext(
|
||||
RenderSystem.renderThreadTesselator(),
|
||||
event.matrices,
|
||||
event.camera,
|
||||
event.tickCounter,
|
||||
@@ -302,10 +261,6 @@ class RenderInWorldContext private constructor(
|
||||
event.matrices.pop()
|
||||
event.vertexConsumers.draw()
|
||||
RenderSystem.setShaderColor(1F, 1F, 1F, 1F)
|
||||
VertexBuffer.unbind()
|
||||
RenderSystem.enableDepthTest()
|
||||
RenderSystem.enableCull()
|
||||
RenderSystem.disableBlend()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package moe.nea.firmament.util.render
|
||||
|
||||
import com.mojang.blaze3d.platform.GlConst
|
||||
import com.mojang.blaze3d.systems.RenderSystem
|
||||
import me.shedaniel.math.Color
|
||||
import net.minecraft.client.render.OverlayTexture
|
||||
import net.minecraft.util.math.ColorHelper
|
||||
@@ -29,16 +27,9 @@ class TintedOverlayTexture : OverlayTexture() {
|
||||
}
|
||||
}
|
||||
|
||||
RenderSystem.activeTexture(GlConst.GL_TEXTURE1)
|
||||
texture.bindTexture()
|
||||
texture.setFilter(false, false)
|
||||
texture.setClamp(true)
|
||||
image.upload(0,
|
||||
0, 0,
|
||||
0, 0,
|
||||
image.width, image.height,
|
||||
false)
|
||||
RenderSystem.activeTexture(GlConst.GL_TEXTURE0)
|
||||
texture.upload()
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ object SackUtil {
|
||||
|
||||
fun updateFromHoverText(text: Text) {
|
||||
text.siblings.forEach(::updateFromHoverText)
|
||||
val hoverText = text.style.hoverEvent?.getValue(HoverEvent.Action.SHOW_TEXT) ?: return
|
||||
val hoverText = (text.style.hoverEvent as? HoverEvent.ShowText)?.value ?: return
|
||||
val cleanedText = hoverText.unformattedString
|
||||
if (cleanedText.startsWith("Added items:\n")) {
|
||||
if (!foundAdded) {
|
||||
|
||||
@@ -127,13 +127,13 @@ fun MutableText.darkGrey() = withColor(Formatting.DARK_GRAY)
|
||||
fun MutableText.red() = withColor(Formatting.RED)
|
||||
fun MutableText.white() = withColor(Formatting.WHITE)
|
||||
fun MutableText.bold(): MutableText = styled { it.withBold(true) }
|
||||
fun MutableText.hover(text: Text): MutableText = styled {it.withHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT, text))}
|
||||
fun MutableText.hover(text: Text): MutableText = styled {it.withHoverEvent(HoverEvent.ShowText(text))}
|
||||
|
||||
|
||||
fun MutableText.clickCommand(command: String): MutableText {
|
||||
require(command.startsWith("/"))
|
||||
return this.styled {
|
||||
it.withClickEvent(ClickEvent(ClickEvent.Action.RUN_COMMAND, command))
|
||||
it.withClickEvent(ClickEvent.RunCommand(command))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user