Update to 1.21.5

Signed-off-by: Username404-59 <w.iron.zombie@gmail.com>
This commit is contained in:
Username404-59 2025-04-16 02:46:59 +02:00
parent b56a8b0cad
commit 92c8e36c71
Signed by: Username404-59
GPG Key ID: 7AB361FBB257A5D1
9 changed files with 154 additions and 48 deletions

View File

@ -18,7 +18,7 @@ plugins {
kotlin("plugin.serialization") version "2.0.0" kotlin("plugin.serialization") version "2.0.0"
id("com.github.johnrengelman.shadow") version "8.1.1" apply false id("com.github.johnrengelman.shadow") version "8.1.1" apply false
id("architectury-plugin") version "[3.4.160, 3.5[" id("architectury-plugin") version "[3.4.160, 3.5["
id("dev.architectury.loom") version "1.9-SNAPSHOT" apply false id("dev.architectury.loom") version "1.10-SNAPSHOT" apply false
id("com.github.ben-manes.versions") version "0.51.0" id("com.github.ben-manes.versions") version "0.51.0"
id("net.kyori.indra.git") version "3.1.3" id("net.kyori.indra.git") version "3.1.3"
id("org.cqfn.diktat.diktat-gradle-plugin") version "1.2.5" id("org.cqfn.diktat.diktat-gradle-plugin") version "1.2.5"
@ -56,7 +56,7 @@ subprojects {
} }
mappingsDep = layered { mappingsDep = layered {
silentMojangMappingsLicense() silentMojangMappingsLicense()
officialMojangMappings().parchment("org.parchmentmc.data:parchment-1.21:2024.06.23") officialMojangMappings().parchment("org.parchmentmc.data:parchment-1.21.4:2025.03.23")
} }
val refmap = "snowygui-${project.name}-refmap.json" val refmap = "snowygui-${project.name}-refmap.json"
mixin { mixin {

View File

@ -0,0 +1,38 @@
package fr.username404.snowygui.mixins;
import com.mojang.blaze3d.opengl.*;
import com.mojang.blaze3d.pipeline.RenderPipeline;
import com.mojang.blaze3d.systems.RenderPass;
import com.mojang.blaze3d.textures.GpuTexture;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import static fr.username404.snowygui.misc.CreateRenderPassRewriteKt.createRenderPassRewrite;
import java.util.OptionalDouble;
import java.util.OptionalInt;
@Mixin(GlCommandEncoder.class)
abstract class CursedRenderPassMixin {
@Shadow private boolean inRenderPass;
@Shadow @Final private GlDevice device;
@Shadow @Nullable private RenderPipeline lastPipeline;
/**
* @author Username404-59
* @reason war crimes- I REGRET NOTHING
*/
@Overwrite
public RenderPass createRenderPass(GpuTexture gpuTexture, OptionalInt optionalInt, @Nullable GpuTexture gpuTexture2, OptionalDouble optionalDouble) {
this.inRenderPass = false; // VIP access 😈
int framebufferId = ((GlTexture)gpuTexture).getFbo(this.device.directStateAccess(), gpuTexture2);
createRenderPassRewrite(framebufferId, gpuTexture, optionalInt, gpuTexture2, optionalDouble);
this.lastPipeline = null;
return new GlRenderPass((GlCommandEncoder) (Object) this, gpuTexture2 != null);
};
}

View File

@ -11,31 +11,25 @@ import com.typesafe.config.ConfigValueFactory
import fr.username404.snowygui.ClickGui import fr.username404.snowygui.ClickGui
import fr.username404.snowygui.Snowy import fr.username404.snowygui.Snowy
import fr.username404.snowygui.Snowy.Companion.MissingComponent import fr.username404.snowygui.Snowy.Companion.MissingComponent
import fr.username404.snowygui.gui.feature.shouldSave
import fr.username404.snowygui.gui.feature.Category import fr.username404.snowygui.gui.feature.Category
import fr.username404.snowygui.gui.feature.Macro import fr.username404.snowygui.gui.feature.Macro
import fr.username404.snowygui.gui.feature.shouldSave
import io.github.config4k.extract import io.github.config4k.extract
import io.github.config4k.getValue import io.github.config4k.getValue
import net.minecraft.client.Minecraft
import java.io.File
import kotlin.reflect.KProperty
import kotlinx.coroutines.CoroutineStart import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import net.minecraft.network.chat.MutableComponent import net.minecraft.client.Minecraft
import net.minecraft.network.chat.contents.TranslatableContents import net.minecraft.network.chat.contents.TranslatableContents
import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.ApiStatus
import java.io.File
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.KProperty
import kotlin.reflect.full.isSuperclassOf import kotlin.reflect.full.isSuperclassOf
@OptIn(ExperimentalSerializationApi::class)
object Configuration { object Configuration {
@Deprecated("Use the getValue or setValue methods instead", level = DeprecationLevel.ERROR) @Deprecated("Use the getValue or setValue methods instead", level = DeprecationLevel.ERROR)
@JvmStatic @JvmStatic

View File

@ -1,8 +1,5 @@
package fr.username404.snowygui.gui.elements package fr.username404.snowygui.gui.elements
import com.mojang.blaze3d.vertex.BufferUploader
import com.mojang.blaze3d.vertex.DefaultVertexFormat
import com.mojang.blaze3d.vertex.VertexFormat
import fr.username404.snowygui.Snowy.Companion.MissingComponent import fr.username404.snowygui.Snowy.Companion.MissingComponent
import fr.username404.snowygui.config.Configuration import fr.username404.snowygui.config.Configuration
import fr.username404.snowygui.gui.ColoredElement import fr.username404.snowygui.gui.ColoredElement
@ -12,11 +9,12 @@ import fr.username404.snowygui.gui.feature.Colors
import fr.username404.snowygui.utils.RenderingUtil.colorShader import fr.username404.snowygui.utils.RenderingUtil.colorShader
import fr.username404.snowygui.utils.RenderingUtil.endDraw import fr.username404.snowygui.utils.RenderingUtil.endDraw
import fr.username404.snowygui.utils.RenderingUtil.prepareDraw import fr.username404.snowygui.utils.RenderingUtil.prepareDraw
import fr.username404.snowygui.utils.RenderingUtil.tessellator import fr.username404.snowygui.utils.RenderingUtil.renderBufferWithPipeline
import io.github.config4k.extract import io.github.config4k.extract
import net.minecraft.client.Minecraft import net.minecraft.client.Minecraft
import net.minecraft.client.gui.Font import net.minecraft.client.gui.Font
import net.minecraft.client.gui.GuiGraphics import net.minecraft.client.gui.GuiGraphics
import net.minecraft.client.renderer.RenderPipelines
import net.minecraft.network.chat.Component import net.minecraft.network.chat.Component
import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.ApiStatus
import java.util.TreeSet import java.util.TreeSet
@ -82,7 +80,8 @@ class ClickBox(
val y = y.toFloat() val y = y.toFloat()
val currentHeight = y + (height + clickboxHeightOffset) val currentHeight = y + (height + clickboxHeightOffset)
prepareDraw() prepareDraw()
with(tessellator.begin(VertexFormat.Mode.TRIANGLE_FAN, DefaultVertexFormat.POSITION_COLOR)) { renderBufferWithPipeline(renderPipeline = RenderPipelines.DEBUG_TRIANGLE_FAN) {
with(it) {
// Render the header: // Render the header:
addVertex(x, y + height, 0.0F).colorEnd() addVertex(x, y + height, 0.0F).colorEnd()
addVertex(x + width + inclination, y + height, 0.0F).colorEnd() addVertex(x + width + inclination, y + height, 0.0F).colorEnd()
@ -93,13 +92,14 @@ class ClickBox(
addVertex(x, currentHeight, 0.0F).colorEnd() addVertex(x, currentHeight, 0.0F).colorEnd()
addVertex(x + width + inclination, currentHeight, 0.0F).colorEnd() addVertex(x + width + inclination, currentHeight, 0.0F).colorEnd()
addVertex(x + width + inclination, y + height, 0.0F).colorEnd() addVertex(x + width + inclination, y + height, 0.0F).colorEnd()
BufferUploader.drawWithShader(buildOrThrow()) }
}
renderBufferWithPipeline(renderPipeline = RenderPipelines.DEBUG_LINE_STRIP) {
with(it) {
colorShader() colorShader()
with(tessellator.begin(VertexFormat.Mode.DEBUG_LINES, DefaultVertexFormat.POSITION_COLOR)) {
addVertex(x + inclination, y + height, 0.0F).colorEnd(Colors.WHITE_LINES.hexValue) addVertex(x + inclination, y + height, 0.0F).colorEnd(Colors.WHITE_LINES.hexValue)
addVertex(x + width, y + height, 0.0F).colorEnd(Colors.WHITE_LINES.hexValue) addVertex(x + width, y + height, 0.0F).colorEnd(Colors.WHITE_LINES.hexValue)
BufferUploader.drawWithShader(buildOrThrow())
} }
} }
endDraw() endDraw()

View File

@ -0,0 +1,33 @@
package fr.username404.snowygui.misc
import com.mojang.blaze3d.opengl.GlStateManager
import com.mojang.blaze3d.textures.GpuTexture
import net.minecraft.util.ARGB
import org.lwjgl.opengl.GL11
import java.util.*
fun createRenderPassRewrite(framebufferId: Int, gpuTexture: GpuTexture, optionalInt: OptionalInt, gpuTexture2: GpuTexture?, optionalDouble: OptionalDouble) {
GlStateManager._glBindFramebuffer(36160, framebufferId)
var clearFlags = 0
if (optionalInt.isPresent) {
val k: Int = optionalInt.getAsInt()
GL11.glClearColor(ARGB.redFloat(k), ARGB.greenFloat(k), ARGB.blueFloat(k), ARGB.alphaFloat(k))
clearFlags = 16384
}
gpuTexture2?.run {
if (optionalDouble.isPresent) {
GL11.glClearDepth(optionalDouble.asDouble)
clearFlags = clearFlags or 256
}
}
if (clearFlags != 0) {
GlStateManager._disableScissorTest()
GlStateManager._depthMask(true)
GlStateManager._colorMask(true, true, true, true)
GlStateManager._clear(clearFlags)
}
GlStateManager._viewport(0, 0, gpuTexture.getWidth(0), gpuTexture.getHeight(0))
}

View File

@ -1,14 +1,21 @@
package fr.username404.snowygui.utils package fr.username404.snowygui.utils
import com.mojang.blaze3d.buffers.BufferType
import com.mojang.blaze3d.buffers.BufferUsage
import com.mojang.blaze3d.opengl.GlStateManager
import com.mojang.blaze3d.pipeline.RenderPipeline
import com.mojang.blaze3d.pipeline.RenderTarget
import com.mojang.blaze3d.systems.RenderPass
import com.mojang.blaze3d.systems.RenderSystem import com.mojang.blaze3d.systems.RenderSystem
import com.mojang.blaze3d.vertex.BufferUploader import com.mojang.blaze3d.vertex.BufferBuilder
import com.mojang.blaze3d.vertex.DefaultVertexFormat
import com.mojang.blaze3d.vertex.Tesselator import com.mojang.blaze3d.vertex.Tesselator
import com.mojang.blaze3d.vertex.VertexConsumer import com.mojang.blaze3d.vertex.VertexConsumer
import com.mojang.blaze3d.vertex.VertexFormat
import fr.username404.snowygui.gui.feature.Colors import fr.username404.snowygui.gui.feature.Colors
import fr.username404.snowygui.gui.hextoRGB import fr.username404.snowygui.gui.hextoRGB
import net.minecraft.client.renderer.CoreShaders import net.minecraft.client.Minecraft
import net.minecraft.client.renderer.RenderPipelines
import java.util.OptionalInt
import java.util.OptionalDouble
object RenderingUtil { object RenderingUtil {
@JvmField val tessellator: Tesselator = Tesselator.getInstance() @JvmField val tessellator: Tesselator = Tesselator.getInstance()
@ -17,27 +24,58 @@ object RenderingUtil {
setColor(get(0), get(1), get(2), opacity) setColor(get(0), get(1), get(2), opacity)
} }
fun colorShader() { fun colorShader() {
RenderSystem.setShader(CoreShaders.POSITION_COLOR)
RenderSystem.setShaderColor(1F, 1F, 1F, 1F) RenderSystem.setShaderColor(1F, 1F, 1F, 1F)
} }
fun prepareDraw() { fun prepareDraw() {
colorShader() colorShader()
RenderSystem.enableBlend() GlStateManager._enableBlend()
RenderSystem.defaultBlendFunc()
} }
fun endDraw() { fun endDraw() {
RenderSystem.disableBlend() GlStateManager._disableBlend()
} }
fun drawRectangle( fun drawRectangle(
x: Double, y: Double, height: Int, width: Int, x: Double, y: Double, height: Int, width: Int,
color: Int = Colors.TRANSPARENT(), opacity: Float = 1F color: Int = Colors.TRANSPARENT(), opacity: Float = 1F
): Unit = tessellator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR).run { ): Unit = renderBufferWithPipeline(renderPipeline = RenderPipelines.DEBUG_QUADS) { buffer -> buffer.run {
fun VertexConsumer.colorIt() = colorIt(color, opacity) fun VertexConsumer.colorIt() = colorIt(color, opacity)
val x = x.toFloat() ; val y = y.toFloat() val x = x.toFloat() ; val y = y.toFloat()
addVertex(x, y + height, 0.0F).colorIt() addVertex(x, y + height, 0.0F).colorIt()
addVertex(x + width, y + height, 0.0F).colorIt() addVertex(x + width, y + height, 0.0F).colorIt()
addVertex(x + width, y, 0.0F).colorIt() addVertex(x + width, y, 0.0F).colorIt()
addVertex(x, y, 0.0F).colorIt() addVertex(x, y, 0.0F).colorIt()
BufferUploader.drawWithShader(buildOrThrow()) } }
fun renderBufferWithPipeline(
name: String? = "Dynamic vertex buffer",
renderPipeline: RenderPipeline,
renderTarget: RenderTarget = Minecraft.getInstance().mainRenderTarget,
uniformAndSamplerConsumer: ((RenderPass) -> Unit)? = null,
bufferBuilderConsumer: (BufferBuilder) -> Unit,
) {
val mode = renderPipeline.vertexFormatMode
val builder = Tesselator.getInstance().begin(mode, renderPipeline.vertexFormat)
bufferBuilderConsumer(builder)
builder.buildOrThrow().use { meshData ->
RenderSystem.getDevice().createCommandEncoder().createRenderPass(
renderTarget.colorTexture!!,
OptionalInt.empty(),
renderTarget.depthTexture,
OptionalDouble.empty()
).use { renderPass ->
RenderSystem.getDevice().createBuffer(
{ name }, BufferType.VERTICES, BufferUsage.DYNAMIC_WRITE, meshData.vertexBuffer()
).use { buffer ->
val autoStorageIndexBuffer = RenderSystem.getSequentialBuffer(mode)
renderPass.setPipeline(renderPipeline)
renderPass.setVertexBuffer(0, buffer)
renderPass.setIndexBuffer(
autoStorageIndexBuffer.getBuffer(meshData.drawState().indexCount()),
autoStorageIndexBuffer.type()
)
uniformAndSamplerConsumer?.invoke(renderPass)
renderPass.drawIndexed(0, meshData.drawState().indexCount())
}
}
}
} }
} }

View File

@ -3,6 +3,7 @@
"package": "fr.username404.snowygui.mixins", "package": "fr.username404.snowygui.mixins",
"compatibilityLevel": "JAVA_18", "compatibilityLevel": "JAVA_18",
"client": [ "client": [
"CursedRenderPassMixin",
"EndTickMixin", "EndTickMixin",
"TitleScreenMixin", "TitleScreenMixin",
"KeysAccessor", "KeysAccessor",

View File

@ -7,16 +7,16 @@ org.gradle.parallel=true
org.gradle.unsafe.configuration-cache=on org.gradle.unsafe.configuration-cache=on
org.gradle.vfs.watch=true org.gradle.vfs.watch=true
minecraft=1.21.2 minecraft=1.21.5
forge_version=21.2.1-beta forge_version=21.5.40-beta
kotlinforforge=5.7.0 kotlinforforge=5.7.0
kotlinVer=2.1.0 kotlinVer=2.1.0
kotlin_coroutines_version=1.9.0 kotlin_coroutines_version=1.9.0
serializationVer=1.7.3 serializationVer=1.7.3
fabric_loader_version=0.14.20 fabric_loader_version=0.14.20
fabric_language_kotlin=1.13.0+kotlin.2.1.0 fabric_language_kotlin=1.13.0+kotlin.2.1.0
fabric_resource_loader_version=3.0.5+c47b9d4373 fabric_resource_loader_version=3.1.6+02ca679607
fabric_rendering_api_version=8.0.5+c47b9d4373 fabric_rendering_api_version=11.1.11+081cc04307
fabric_api_base_version=0.4.48+c47b9d4373 fabric_api_base_version=0.4.62+73a52b4b07
clothconfig_version=16.0.143 clothconfig_version=18.0.145
modmenu_version=12.0.0 modmenu_version=14.0.0-rc.2

View File

@ -2,7 +2,9 @@
"required": false, "required": false,
"package": "fr.username404.snowygui.mixins", "package": "fr.username404.snowygui.mixins",
"compatibilityLevel": "JAVA_21", "compatibilityLevel": "JAVA_21",
"client": [], "client": [
"CursedRenderPassMixin"
],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1
}, },