From f480dff58664d1cd84ef193101b35e1cba6adb70 Mon Sep 17 00:00:00 2001 From: Maddy Miller Date: Sun, 21 Dec 2025 17:13:30 +1000 Subject: [PATCH 1/2] Early 1.21.11 work; WIP --- build.gradle.kts | 2 +- gradle/libs.versions.toml | 14 ++++----- .../listeners/CUIListenerWorldRender.java | 5 ++-- .../fabric/FabricModWorldEditCUI.java | 4 +-- .../render/BufferBuilderRenderSink.java | 14 ++++----- .../render/VanillaPipelineProvider.java | 29 ++++++++++--------- 6 files changed, 36 insertions(+), 32 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index a52dad60..0e454b76 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,7 +10,7 @@ plugins { allprojects { group = "org.enginehub.worldeditcui" - version = "${rootProject.libs.versions.minecraft.get()}+02-SNAPSHOT" + version = "${rootProject.libs.versions.minecraft.get()}+01-SNAPSHOT" repositories { // mirrors: diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1685665d..409054e0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,9 +3,9 @@ format = { version = "1.1" } [versions] indra = "3.1.3" -minecraft = "1.21.10" -fabricLoader = "0.17.3" -fabricApi = "0.138.0+1.21.10" +minecraft = "1.21.11" +fabricLoader = "0.18.3" +fabricApi = "0.140.0+1.21.11" modmenu = "16.0.0-rc.1" viafabricplus = "3.3.0" vineflower = "1.10.1" @@ -13,7 +13,7 @@ cuiProtocol = "4.0.2" [libraries] minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" } -parchment = { module = "org.parchmentmc.data:parchment-1.21.9", version = "2025.10.05" } +parchment = { module = "org.parchmentmc.data:parchment-1.21.10", version = "2025.10.12" } fabric-loader = { module = "net.fabricmc:fabric-loader", version.ref = "fabricLoader" } fabric-api = { module = "net.fabricmc.fabric-api:fabric-api", version.ref = "fabricApi" } fabric-api-bom = { module = "net.fabricmc.fabric-api:fabric-api-bom", version.ref = "fabricApi" } @@ -31,7 +31,7 @@ curseForgeGradle = { id = "net.darkhax.curseforgegradle", version = "1.1.26" } indra-git = { id = "net.kyori.indra.git", version.ref = "indra" } indra-spotlessLicenser = { id = "net.kyori.indra.licenser.spotless", version.ref = "indra" } jvmConflictResolution = { id = "org.gradlex.jvm-dependency-conflict-resolution", version = "2.1.2" } -loom = { id = "dev.architectury.loom", version = "1.11.454" } +loom = { id = "dev.architectury.loom", version = "1.13.463" } minotaur = { id = "com.modrinth.minotaur", version = "2.8.7" } publishGithubRelease = { id = "ca.stellardrift.publish-github-release", version = "0.1.0" } shadow = { id = "com.gradleup.shadow", version = "8.3.5" } @@ -39,9 +39,9 @@ spotless = { id = "com.diffplug.spotless", version = "6.25.0" } versions = { id = "com.github.ben-manes.versions", version = "0.51.0" } [libraries.cuiProtocol-fabric] -module = "org.enginehub.worldeditcui-protocol:worldeditcui-protocol-fabric-mc1.21.9" +module = "org.enginehub.worldeditcui-protocol:worldeditcui-protocol-fabric-mc1.21.11" version.ref = "cuiProtocol" [libraries.cuiProtocol-neoforge] -module = "org.enginehub.worldeditcui-protocol:worldeditcui-protocol-neoforge-mc1.21.9" +module = "org.enginehub.worldeditcui-protocol:worldeditcui-protocol-neoforge-mc1.21.11" version.ref = "cuiProtocol" diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIListenerWorldRender.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIListenerWorldRender.java index 3f9eb183..7beb3a01 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIListenerWorldRender.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/event/listeners/CUIListenerWorldRender.java @@ -20,6 +20,7 @@ import net.minecraft.util.profiling.Profiler; import net.minecraft.util.profiling.ProfilerFiller; import org.enginehub.worldeditcui.WorldEditCUI; +import org.enginehub.worldeditcui.render.BufferBuilderRenderSink; import org.enginehub.worldeditcui.render.LineStyle; import org.enginehub.worldeditcui.render.PipelineProvider; import org.enginehub.worldeditcui.render.RenderSink; @@ -98,7 +99,7 @@ public void onRender(final float partialTicks) { } final ProfilerFiller profiler = Profiler.get(); profiler.push("worldeditcui"); - this.ctx.init(new Vector3(this.minecraft.gameRenderer.getMainCamera().getPosition()), partialTicks, sink); + this.ctx.init(new Vector3(this.minecraft.gameRenderer.getMainCamera().position()), partialTicks, sink); final GpuBufferSlice fogStart = RenderSystem.getShaderFog(); RenderSystem.setShaderFog(this.minecraft.gameRenderer.fogRenderer.getBuffer(FogRenderer.FogMode.NONE)); final Matrix4fStack poseStack = RenderSystem.getModelViewStack(); @@ -113,7 +114,7 @@ public void onRender(final float partialTicks) { GlConst.toGl(SourceFactor.SRC_ALPHA), GlConst.toGl(DestFactor.ONE_MINUS_SRC_ALPHA)); GlStateManager._depthMask(true); - RenderSystem.lineWidth(LineStyle.DEFAULT_WIDTH); + BufferBuilderRenderSink.LineWidth.set(LineStyle.DEFAULT_WIDTH); try { this.controller.renderSelections(this.ctx); diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/fabric/FabricModWorldEditCUI.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/fabric/FabricModWorldEditCUI.java index 4aa1a01c..9fb58f48 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/fabric/FabricModWorldEditCUI.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/fabric/FabricModWorldEditCUI.java @@ -22,7 +22,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.player.LocalPlayer; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.level.Level; import org.enginehub.worldeditcui.WorldEditCUI; import org.enginehub.worldeditcui.config.CUIConfiguration; @@ -50,7 +50,7 @@ public final class FabricModWorldEditCUI implements ModInitializer { private static FabricModWorldEditCUI instance; private static final KeyMapping.Category KEYBIND_CATEGORY_WECUI - = new KeyMapping.Category(ResourceLocation.fromNamespaceAndPath(MOD_ID, "general")); + = new KeyMapping.Category(Identifier.fromNamespaceAndPath(MOD_ID, "general")); private final KeyMapping keyBindToggleUI = key("toggle", GLFW.GLFW_KEY_UNKNOWN); private final KeyMapping keyBindClearSel = key("clear", GLFW.GLFW_KEY_UNKNOWN); diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/BufferBuilderRenderSink.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/BufferBuilderRenderSink.java index 4b908de1..7893ae91 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/BufferBuilderRenderSink.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/BufferBuilderRenderSink.java @@ -10,7 +10,6 @@ package org.enginehub.worldeditcui.render; import com.mojang.blaze3d.opengl.GlStateManager; -import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.Tesselator; @@ -29,7 +28,7 @@ public class BufferBuilderRenderSink implements RenderSink { private final RenderType quads; private final Runnable preFlush; private final Runnable postFlush; - private BufferBuilder builder; + private static BufferBuilder builder; private @Nullable BufferBuilderRenderSink.RenderType activeRenderType; private boolean active; private boolean canFlush; @@ -54,18 +53,19 @@ public BufferBuilderRenderSink(final TypeFactory types, final Runnable preFlush, this.postFlush = postFlush; } - static class LineWidth { + public static class LineWidth { private static final boolean HAS_COMPATIBILITY = (GL11.glGetInteger(GL32.GL_CONTEXT_PROFILE_MASK) & GL32.GL_CONTEXT_COMPATIBILITY_PROFILE_BIT) != 0; private static float lineWidth = GL11.glGetInteger(GL11.GL_LINE_WIDTH); - static void set(final float width) { + public static void set(final float width) { if (HAS_COMPATIBILITY) { if (lineWidth != width) { GL11.glLineWidth(width); lineWidth = width; } } - RenderSystem.lineWidth(width); + + builder.setLineWidth(width); } } @@ -267,9 +267,9 @@ public static class RenderType { private final VertexFormat.Mode mode; private final VertexFormat format; private final boolean hasNormals; - private final net.minecraft.client.renderer.RenderType type; + private final net.minecraft.client.renderer.rendertype.RenderType type; - public RenderType(final VertexFormat.Mode mode, final VertexFormat format, @Nullable final net.minecraft.client.renderer.RenderType renderPipeline) { + public RenderType(final VertexFormat.Mode mode, final VertexFormat format, @Nullable final net.minecraft.client.renderer.rendertype.RenderType renderPipeline) { this.mode = mode; this.format = format; this.hasNormals = format.getElementAttributeNames().contains("Normal"); diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java index 205ddfb0..b7133df9 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java @@ -14,25 +14,28 @@ import com.mojang.blaze3d.vertex.DefaultVertexFormat; import com.mojang.blaze3d.vertex.VertexFormat; import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.rendertype.RenderSetup; +import net.minecraft.client.renderer.rendertype.RenderType; +import net.minecraft.client.renderer.rendertype.RenderTypes; public final class VanillaPipelineProvider implements PipelineProvider { public static class DefaultTypeFactory implements BufferBuilderRenderSink.TypeFactory { public static final DefaultTypeFactory INSTANCE = new DefaultTypeFactory(); + private static final RenderSetup QUADS_SETUP = RenderSetup.builder( + RenderPipeline.builder(RenderPipeline.builder(RenderPipelines.MATRICES_PROJECTION_SNIPPET) + .withVertexShader("core/position_color") + .withFragmentShader("core/position_color") + .withBlend(BlendFunction.TRANSLUCENT) + .withVertexFormat(DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.QUADS) + .buildSnippet()) + .withLocation("pipeline/wecui_quads").withCull(false).build() + ).bufferSize(1536).sortOnUpload().createRenderSetup(); private static final BufferBuilderRenderSink.RenderType QUADS = new BufferBuilderRenderSink.RenderType(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR, - RenderType.create("quads", 1536, false, true, - RenderPipeline.builder(RenderPipeline.builder(RenderPipelines.MATRICES_PROJECTION_SNIPPET) - .withVertexShader("core/position_color") - .withFragmentShader("core/position_color") - .withBlend(BlendFunction.TRANSLUCENT) - .withVertexFormat(DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.QUADS) - .buildSnippet()) - .withLocation("pipeline/wecui_quads").withCull(false).build(), - RenderType.CompositeState.builder().createCompositeState(false) - )); - private static final BufferBuilderRenderSink.RenderType LINES = new BufferBuilderRenderSink.RenderType(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL, RenderType.LINES); - private static final BufferBuilderRenderSink.RenderType LINES_LOOP = new BufferBuilderRenderSink.RenderType(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL, RenderType.LINES); + RenderType.create("quads", QUADS_SETUP) + ); + private static final BufferBuilderRenderSink.RenderType LINES = new BufferBuilderRenderSink.RenderType(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL, RenderTypes.LINES); + private static final BufferBuilderRenderSink.RenderType LINES_LOOP = new BufferBuilderRenderSink.RenderType(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL, RenderTypes.LINES); private DefaultTypeFactory() {} From 19e6718054f90be31c8d7e5c7a7bc4e0fbf4b308 Mon Sep 17 00:00:00 2001 From: Maddy Miller Date: Sun, 21 Dec 2025 19:53:07 +1000 Subject: [PATCH 2/2] better handle line widths --- .../render/BufferBuilderRenderSink.java | 26 ++++++++----------- .../render/VanillaPipelineProvider.java | 4 +-- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/BufferBuilderRenderSink.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/BufferBuilderRenderSink.java index 7893ae91..fd76842b 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/BufferBuilderRenderSink.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/BufferBuilderRenderSink.java @@ -10,7 +10,6 @@ package org.enginehub.worldeditcui.render; import com.mojang.blaze3d.opengl.GlStateManager; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.BufferBuilder; import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexFormat; @@ -28,7 +27,7 @@ public class BufferBuilderRenderSink implements RenderSink { private final RenderType quads; private final Runnable preFlush; private final Runnable postFlush; - private static BufferBuilder builder; + private BufferBuilder builder; private @Nullable BufferBuilderRenderSink.RenderType activeRenderType; private boolean active; private boolean canFlush; @@ -58,14 +57,11 @@ public static class LineWidth { private static float lineWidth = GL11.glGetInteger(GL11.GL_LINE_WIDTH); public static void set(final float width) { - if (HAS_COMPATIBILITY) { - if (lineWidth != width) { - GL11.glLineWidth(width); - lineWidth = width; - } + if (HAS_COMPATIBILITY && lineWidth != width) { + GL11.glLineWidth(width); } - builder.setLineWidth(width); + lineWidth = width; } } @@ -112,12 +108,12 @@ public RenderSink vertex(final double x, final double y, final double z) { // duplicate last if (this.canLoop) { final Vector3f normal = this.activeRenderType.hasNormals ? this.computeNormal(this.loopX, this.loopY, this.loopZ, x, y, z) : null; - builder.addVertex(this.loopX, this.loopY, this.loopZ).setColor(this.r, this.g, this.b, this.a); + builder.addVertex(this.loopX, this.loopY, this.loopZ).setColor(this.r, this.g, this.b, this.a).setLineWidth(LineWidth.lineWidth); if (normal != null) { // we need to compute normals pointing directly towards the screen builder.setNormal(normal.x(), normal.y(), normal.z()); } - builder.addVertex((float) x, (float) y, (float) z).setColor(this.r, this.g, this.b, this.a); + builder.addVertex((float) x, (float) y, (float) z).setColor(this.r, this.g, this.b, this.a).setLineWidth(LineWidth.lineWidth); if (normal != null) { builder.setNormal(normal.x(), normal.y(), normal.z()); } @@ -134,11 +130,11 @@ public RenderSink vertex(final double x, final double y, final double z) { // we buffer vertices so we can compute normals here if (this.canLoop) { final Vector3f normal = this.activeRenderType.hasNormals ? this.computeNormal(this.loopX, this.loopY, this.loopZ, x, y, z) : null; - builder.addVertex(this.loopX, this.loopY, this.loopZ).setColor(this.r, this.g, this.b, this.a); + builder.addVertex(this.loopX, this.loopY, this.loopZ).setColor(this.r, this.g, this.b, this.a).setLineWidth(LineWidth.lineWidth); if (normal != null) { builder.setNormal(normal.x(), normal.y(), normal.z()); } - builder.addVertex((float) x, (float) y, (float) z).setColor(this.r, this.g, this.b, this.a); + builder.addVertex((float) x, (float) y, (float) z).setColor(this.r, this.g, this.b, this.a).setLineWidth(LineWidth.lineWidth); if (normal != null) { builder.setNormal(normal.x(), normal.y(), normal.z()); } @@ -150,7 +146,7 @@ public RenderSink vertex(final double x, final double y, final double z) { this.canLoop = true; } } else { - builder.addVertex((float) x, (float) y, (float) z).setColor(this.r, this.g, this.b, this.a); + builder.addVertex((float) x, (float) y, (float) z).setColor(this.r, this.g, this.b, this.a).setLineWidth(LineWidth.lineWidth); } return this; } @@ -178,12 +174,12 @@ public RenderSink endLineLoop() { if (this.canLoop) { this.canLoop = false; final Vector3f normal = this.activeRenderType.hasNormals ? this.computeNormal(this.loopX, this.loopY, this.loopZ, this.loopFirstX, this.loopFirstY, this.loopFirstZ) : null; - this.builder.addVertex(this.loopX, this.loopY, this.loopZ).setColor(this.r, this.g, this.b, this.a); + this.builder.addVertex(this.loopX, this.loopY, this.loopZ).setColor(this.r, this.g, this.b, this.a).setLineWidth(LineWidth.lineWidth); if (normal != null) { this.builder.setNormal(normal.x(), normal.y(), normal.z()); } - this.builder.addVertex(this.loopFirstX, this.loopFirstY, this.loopFirstZ).setColor(this.r, this.g, this.b, this.a); + this.builder.addVertex(this.loopFirstX, this.loopFirstY, this.loopFirstZ).setColor(this.r, this.g, this.b, this.a).setLineWidth(LineWidth.lineWidth); if (normal != null) { this.builder.setNormal(normal.x(), normal.y(), normal.z()); } diff --git a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java index b7133df9..2326c289 100644 --- a/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java +++ b/worldeditcui-fabric/src/main/java/org/enginehub/worldeditcui/render/VanillaPipelineProvider.java @@ -34,8 +34,8 @@ public static class DefaultTypeFactory implements BufferBuilderRenderSink.TypeFa private static final BufferBuilderRenderSink.RenderType QUADS = new BufferBuilderRenderSink.RenderType(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR, RenderType.create("quads", QUADS_SETUP) ); - private static final BufferBuilderRenderSink.RenderType LINES = new BufferBuilderRenderSink.RenderType(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL, RenderTypes.LINES); - private static final BufferBuilderRenderSink.RenderType LINES_LOOP = new BufferBuilderRenderSink.RenderType(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL, RenderTypes.LINES); + private static final BufferBuilderRenderSink.RenderType LINES = new BufferBuilderRenderSink.RenderType(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL_LINE_WIDTH, RenderTypes.LINES); + private static final BufferBuilderRenderSink.RenderType LINES_LOOP = new BufferBuilderRenderSink.RenderType(VertexFormat.Mode.LINES, DefaultVertexFormat.POSITION_COLOR_NORMAL_LINE_WIDTH, RenderTypes.LINES); private DefaultTypeFactory() {}