From 9424e2ec716c9a0e1507a80900b634b989f57894 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Wed, 25 Mar 2026 19:24:02 +0100 Subject: [PATCH] Refactored RenderScope 1.21.6 #59 --- .../features/mixins/render/RenderMixin.java | 4 +- .../impl/mixins/MatrixStackMixin.java | 45 --- .../impl/ref/Matrix3x2fStackRef.java | 40 +-- .../impl/ui/EntityDrawerImpl.java | 40 +-- .../saturnclient/impl/ui/RenderScopeImpl.java | 334 +++++++----------- .../src/main/resources/impl.mixins.json | 1 - 6 files changed, 163 insertions(+), 301 deletions(-) delete mode 100644 versions/1.21.6/src/main/java/org/saturnclient/impl/mixins/MatrixStackMixin.java diff --git a/versions/1.21.6/src/main/java/org/saturnclient/impl/features/mixins/render/RenderMixin.java b/versions/1.21.6/src/main/java/org/saturnclient/impl/features/mixins/render/RenderMixin.java index 0c109d0..f9d59c8 100644 --- a/versions/1.21.6/src/main/java/org/saturnclient/impl/features/mixins/render/RenderMixin.java +++ b/versions/1.21.6/src/main/java/org/saturnclient/impl/features/mixins/render/RenderMixin.java @@ -62,8 +62,8 @@ public class RenderMixin { ModLayout dim = hud.getDimensions(); scope.getMatrixStack().push(); - scope.getMatrixStack().translate(dim.x.value, (float) dim.y.value, 0f); - scope.getMatrixStack().scale(dim.scale.value, dim.scale.value, 1.0f); + scope.getMatrixStack().translate(dim.x.value, (float) dim.y.value); + scope.getMatrixStack().scale(dim.scale.value, dim.scale.value); if (dim.renderBackground) { scope.drawRoundedRectangle(0, 0, dim.width, dim.height, diff --git a/versions/1.21.6/src/main/java/org/saturnclient/impl/mixins/MatrixStackMixin.java b/versions/1.21.6/src/main/java/org/saturnclient/impl/mixins/MatrixStackMixin.java deleted file mode 100644 index 2823f6a..0000000 --- a/versions/1.21.6/src/main/java/org/saturnclient/impl/mixins/MatrixStackMixin.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.saturnclient.impl.mixins; -import org.joml.Quaternionfc; -import org.saturnclient.common.ref.render.MatrixStackRef; -import org.saturnclient.common.ref.render.QuaternionfRef; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.gen.Invoker; -import net.minecraft.client.util.math.MatrixStack; - -@Mixin(MatrixStack.class) -public abstract class MatrixStackMixin implements MatrixStackRef { - @Shadow - public abstract void translate(double x, double y, double z); - @Shadow - public abstract void translate(float x, float y, float z); - @Shadow - public abstract void scale(float x, float y, float z); - @Shadow - public abstract void multiply(Quaternionfc quaternion); - @Shadow - public abstract void multiply(Quaternionfc quaternion, float originX, float originY, float originZ); - @Shadow - public abstract void push(); - @Shadow - public abstract void pop(); - @Invoker("peek") - public abstract MatrixStack.Entry peekM(); - @Shadow - public abstract boolean isEmpty(); - @Shadow - public abstract void loadIdentity(); - - @Override - public void multiply(QuaternionfRef quaternion) { - this.multiply((Quaternionfc) quaternion); - } - @Override - public void multiply(QuaternionfRef quaternion, float originX, float originY, float originZ) { - this.multiply((Quaternionfc) quaternion, originX, originY, originZ); - } - @Override - public Object peek() { - return this.peekM(); - } -} \ No newline at end of file diff --git a/versions/1.21.6/src/main/java/org/saturnclient/impl/ref/Matrix3x2fStackRef.java b/versions/1.21.6/src/main/java/org/saturnclient/impl/ref/Matrix3x2fStackRef.java index b6ae6c9..4091120 100644 --- a/versions/1.21.6/src/main/java/org/saturnclient/impl/ref/Matrix3x2fStackRef.java +++ b/versions/1.21.6/src/main/java/org/saturnclient/impl/ref/Matrix3x2fStackRef.java @@ -5,7 +5,6 @@ import java.util.Deque; import org.joml.Matrix3x2fStack; import org.saturnclient.common.ref.render.MatrixStackRef; -import org.saturnclient.common.ref.render.QuaternionfRef; public class Matrix3x2fStackRef implements MatrixStackRef { public final Matrix3x2fStack stack; @@ -33,11 +32,11 @@ public class Matrix3x2fStackRef implements MatrixStackRef { if (t.scaleX != 1 || t.scaleY != 1) stack.scale(1f / t.scaleX, 1f / t.scaleY); stack.translate(-t.translateX, -t.translateY); - // rotation inversion can be added here if needed + stack.rotate(-t.rotation); } @Override - public void scale(float x, float y, float z) { + public void scale(float x, float y) { stack.scale(x, y); if (!customStack.isEmpty()) { Transform t = customStack.peek(); @@ -47,7 +46,7 @@ public class Matrix3x2fStackRef implements MatrixStackRef { } @Override - public void translate(float x, float y, float z) { + public void translate(float x, float y) { stack.translate(x, y); if (!customStack.isEmpty()) { Transform t = customStack.peek(); @@ -57,38 +56,21 @@ public class Matrix3x2fStackRef implements MatrixStackRef { } @Override - public void translate(double x, double y, double z) { - translate((float) x, (float) y, (float) z); + public void rotate(float angle) { + stack.rotate(angle); + if (!customStack.isEmpty()) { + Transform t = customStack.peek(); + t.rotation += angle; + } } @Override - public void multiply(QuaternionfRef quaternion) { - // Not implemented yet - } - - @Override - public void multiply(QuaternionfRef quaternion, float originX, float originY, float originZ) { - // Not implemented yet - } - - @Override - public void loadIdentity() { - customStack.clear(); - } - - @Override - public Object peek() { - return null; - } - - @Override - public boolean isEmpty() { - return customStack.isEmpty(); + public void rotate(float angle, float originX, float originY, float originZ) { } private static class Transform { float scaleX = 1f, scaleY = 1f; float translateX = 0f, translateY = 0f; - // rotation can be added if needed + float rotation = 0f; } } \ No newline at end of file diff --git a/versions/1.21.6/src/main/java/org/saturnclient/impl/ui/EntityDrawerImpl.java b/versions/1.21.6/src/main/java/org/saturnclient/impl/ui/EntityDrawerImpl.java index 8fe4914..e1320c4 100644 --- a/versions/1.21.6/src/main/java/org/saturnclient/impl/ui/EntityDrawerImpl.java +++ b/versions/1.21.6/src/main/java/org/saturnclient/impl/ui/EntityDrawerImpl.java @@ -51,27 +51,27 @@ public class EntityDrawerImpl implements EntityDrawer { public static void drawEntity(RenderScope renderScope, float x, float y, float size, Vector3f vector3f, Quaternionf quaternionf, @Nullable Quaternionf quaternionf2, LivingEntity entity) { - renderScope.getMatrixStack().push(); - renderScope.getMatrixStack().translate((double) x, (double) y, 50.0); - renderScope.getMatrixStack().scale(size, size, -size); - renderScope.getMatrixStack().translate(vector3f.x, vector3f.y, vector3f.z); - renderScope.getMatrixStack().multiply((QuaternionfRef) quaternionf); - renderScope.draw(); - // DiffuseLighting.disableGuiDepthLighting(); - EntityRenderDispatcher entityRenderDispatcher = SaturnClient.client.getEntityRenderDispatcher(); + // if (renderScope instanceof RenderScopeImpl scopeImpl) { + // scopeImpl.matrices.push(); + // scopeImpl.matrices.translate((double) x, (double) y, 0); + // scopeImpl.matrices.scale(size, size, -size); + // scopeImpl.matrices.translate(vector3f.x, vector3f.y, vector3f.z); + // scopeImpl.matrices.multiply(quaternionf); + // scopeImpl.draw(); + // DiffuseLighting.disableGuiDepthLighting(); + // EntityRenderDispatcher entityRenderDispatcher = SaturnClient.client.getEntityRenderDispatcher(); - entityRenderDispatcher.setRenderShadows(false); - if (renderScope instanceof RenderScopeImpl r) { - // r.draw((vertexConsumers) -> { - // entityRenderDispatcher.render(entity, 0.0, 0.0, 0.0, 1.0F, - // r.matrices, vertexConsumers, - // 15728880); - // }); - } - renderScope.draw(); - entityRenderDispatcher.setRenderShadows(true); - renderScope.getMatrixStack().pop(); - // DiffuseLighting.enableGuiDepthLighting(); + // entityRenderDispatcher.setRenderShadows(false); + // scopeImpl.draw((vertexConsumers) -> { + // entityRenderDispatcher.render(entity, 0.0, 0.0, 0.0, 1.0F, + // scopeImpl.matrices, vertexConsumers, 15728880); + // }); + + // scopeImpl.draw(); + // entityRenderDispatcher.setRenderShadows(true); + // scopeImpl.getMatrixStack().pop(); + // DiffuseLighting.enableGuiDepthLighting(); + // } } @Override diff --git a/versions/1.21.6/src/main/java/org/saturnclient/impl/ui/RenderScopeImpl.java b/versions/1.21.6/src/main/java/org/saturnclient/impl/ui/RenderScopeImpl.java index 68f3f93..c0278d0 100644 --- a/versions/1.21.6/src/main/java/org/saturnclient/impl/ui/RenderScopeImpl.java +++ b/versions/1.21.6/src/main/java/org/saturnclient/impl/ui/RenderScopeImpl.java @@ -3,15 +3,11 @@ package org.saturnclient.impl.ui; import java.util.ArrayDeque; import java.util.Deque; import java.util.Objects; -import java.util.function.Consumer; import org.jetbrains.annotations.Nullable; import org.joml.Matrix3x2f; import org.joml.Matrix3x2fStack; -import org.joml.Matrix4f; -import com.mojang.blaze3d.pipeline.RenderPipeline; -import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.textures.GpuTextureView; import org.saturnclient.common.provider.Providers; @@ -35,12 +31,11 @@ import net.minecraft.client.gui.render.state.ItemGuiElementRenderState; import net.minecraft.client.gui.render.state.TextGuiElementRenderState; import net.minecraft.client.gui.render.state.TexturedQuadGuiElementRenderState; import net.minecraft.client.render.item.ItemRenderState; -import net.minecraft.client.texture.GuiAtlasManager; import net.minecraft.client.texture.Sprite; import net.minecraft.client.texture.TextureSetup; import net.minecraft.entity.LivingEntity; -import net.minecraft.item.ItemStack; import net.minecraft.item.ItemDisplayContext; +import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.crash.CrashException; @@ -49,13 +44,12 @@ import net.minecraft.util.crash.CrashReportSection; import net.minecraft.world.World; public class RenderScopeImpl implements RenderScope { - private final Matrix3x2fStackRef matrices; - private final GuiAtlasManager guiAtlasManager; + + public final Matrix3x2fStackRef matrices; public final GuiRenderState state; private ScissorStack scissorStack; - private int opacity = 255 << 24; - private final ItemRenderState itemRenderState; + private int opacity = 0xFF << 24; public RenderScopeImpl(DrawContext context) { this(context.getMatrices(), ((DrawContextAccessor) (Object) context).getState()); @@ -64,9 +58,7 @@ public class RenderScopeImpl implements RenderScope { public RenderScopeImpl(Matrix3x2fStack matrices, GuiRenderState state) { this.state = state; this.matrices = new Matrix3x2fStackRef(matrices); - this.guiAtlasManager = SaturnClient.client.getGuiAtlasManager(); this.scissorStack = new ScissorStack(); - this.itemRenderState = new ItemRenderState(); } @Override @@ -76,7 +68,7 @@ public class RenderScopeImpl implements RenderScope { @Override public void setOpacity(float alpha) { - this.opacity = (int) (alpha * 255) << 24; + this.opacity = ((int) (alpha * 255)) << 24; } @Override @@ -90,15 +82,12 @@ public class RenderScopeImpl implements RenderScope { @Override public void fill(int x1, int y1, int x2, int y2, int color) { this.state.addSimpleElement( - new ColoredQuadGuiElementRenderState(RenderPipelines.GUI, TextureSetup.empty(), + new ColoredQuadGuiElementRenderState( + RenderPipelines.GUI, + TextureSetup.empty(), new Matrix3x2f(this.matrices.stack), - x1, y1, x2, - y2, color, color, this.scissorStack.peekLast())); - } - - @Override - public void fill(int x1, int y1, int x2, int y2, int z, int color) { - this.fill(x1, y1, x2, y2, color); + x1, y1, x2, y2, color, color, + this.scissorStack.peekLast())); } @Override @@ -106,22 +95,21 @@ public class RenderScopeImpl implements RenderScope { if (color == 0) return; color = getColor(color); + int x1 = x; int x2 = x + width; int y1 = y; int y2 = y + height; - int i; - if (x1 < x2) { - i = x1; + if (x2 < x1) { + int tmp = x1; x1 = x2; - x2 = i; + x2 = tmp; } - - if (y1 < y2) { - i = y1; + if (y2 < y1) { + int tmp = y1; y1 = y2; - y2 = i; + y2 = tmp; } this.fill(x1, y1, x2, y2, color); @@ -136,64 +124,56 @@ public class RenderScopeImpl implements RenderScope { public void drawText(float scale, String text, int x, int y, int font, int color) { if (color == 0) return; - if (font == 0) { + if (font == 0) scale *= 2; - } - int i = 0; + + int lineIndex = 0; for (String line : text.split("\n")) { - color = getColor(color); - this.state.addText(new TextGuiElementRenderState(SaturnClient.client.textRenderer, - ((Text) Fonts.setFont(line, font)).asOrderedText(), new Matrix3x2f(this.matrices.stack), x, y, - color, 0, false, this.scissorStack.peekLast())); + int finalColor = getColor(color); + this.state.addText( + new TextGuiElementRenderState( + SaturnClient.client.textRenderer, + ((Text) Fonts.setFont(line, font)).asOrderedText(), + new Matrix3x2f(this.matrices.stack), + x, y, + finalColor, 0, false, this.scissorStack.peekLast())); matrices.push(); - matrices.translate(x, y + (i * Fonts.getHeight()), 0); - matrices.scale(scale, scale, 0); - i++; + matrices.translate(x, y + (lineIndex * Fonts.getHeight())); + matrices.scale(scale, scale); + lineIndex++; } } + // Rounded rectangle helpers private void drawRoundedCorner(int width, int height, int radius, int color) { int w = width * 20; int h = height * 20; for (int y = 0; y < h; y++) { int startX = 0; - if (y < radius) { double dy = radius - y - 0.5; double dx = Math.sqrt(Math.max(0, radius * radius - dy * dy)); startX = radius - (int) dx; } - - this.drawRectangle(startX, y, w - startX, 1, color); + drawRectangle(startX, y, w - startX, 1, color); } } private void drawRoundedSide(int cornerWidth, int cornerHeight, int radius, int color) { - // Top - this.matrices.push(); + matrices.push(); + matrices.scale(0.05f, 0.05f); + drawRoundedCorner(cornerWidth, cornerHeight, radius * 10, color); + matrices.pop(); - this.matrices.scale(0.05f, 0.05f, 0); - - this.drawRoundedCorner(cornerWidth, cornerHeight, radius * 10, color); - - this.matrices.pop(); - - // Bottom - this.matrices.push(); - - this.matrices.translate(cornerWidth, cornerHeight * 2, 0); - - this.matrices.stack.rotate((float) Math.toRadians(90)); - - this.matrices.translate(0, -cornerWidth, 0); - - this.matrices.scale(0.05f, 0.05f, 0); - - this.drawRoundedCorner(cornerHeight, cornerWidth, radius * 10, color); - - this.matrices.pop(); + matrices.push(); + matrices.translate(cornerWidth, cornerHeight * 2); + matrices.stack.rotate((float) Math.toRadians(90)); + matrices.translate(0, -cornerWidth); + matrices.scale(0.05f, 0.05f); + drawRoundedCorner(cornerHeight, cornerWidth, radius * 10, color); + matrices.pop(); } @Override @@ -201,24 +181,18 @@ public class RenderScopeImpl implements RenderScope { if (color == 0) return; radius = Math.min(radius, Math.min(width, height)); + int cornerWidth = width / 2; int cornerHeight = height / 2; - this.matrices.push(); + matrices.push(); + matrices.translate(x, y); + drawRoundedSide(cornerWidth, cornerHeight, radius, color); - this.matrices.translate(x, y, 0); - - this.drawRoundedSide(cornerWidth, cornerHeight, radius, color); - - this.matrices.translate(cornerWidth * 2, cornerHeight * 2, 0); - - this.matrices.stack.rotate((float) Math.toRadians(90)); - - this.matrices.translate(0, 0, 0); - - this.drawRoundedSide(cornerWidth, cornerHeight, radius, color); - - this.matrices.pop(); + matrices.translate(cornerWidth * 2, cornerHeight * 2); + matrices.stack.rotate((float) Math.toRadians(90)); + drawRoundedSide(cornerWidth, cornerHeight, radius, color); + matrices.pop(); } @Override @@ -231,212 +205,164 @@ public class RenderScopeImpl implements RenderScope { return SaturnClient.client.getWindow().getScaledHeight(); } - @Override - public void drawTexture(IdentifierRef sprite, int x, int y, float u, float v, int width, int height, int color) { - this.drawTexture(sprite, x, y, u, v, width, height, width, height, width, height, color); - } - + // Texture rendering @Override public void drawTexture(IdentifierRef sprite, int x, int y, float u, float v, int width, int height) { - this.drawTexture(sprite, x, y, u, v, width, height, width, height, width, height); + drawTexture(sprite, x, y, u, v, width, height, -1); + } + + @Override + public void drawTexture(IdentifierRef sprite, int x, int y, float u, float v, int width, int height, int color) { + drawTexture(sprite, x, y, u, v, width, height, width, height, width, height, color); } @Override public void drawTexture(IdentifierRef sprite, int x, int y, float u, float v, int width, int height, - int regionWith, - int regionHeight, int textureWidth, int textureHeight) { - this.drawTexture(sprite, x, y, u, v, width, height, regionWith, regionHeight, textureWidth, textureHeight, -1); + int regionWidth, int regionHeight, int textureWidth, int textureHeight) { + drawTexture(sprite, x, y, u, v, width, height, regionWidth, regionHeight, textureWidth, textureHeight, -1); } @Override public void drawTexture(IdentifierRef sprite, int x, int y, float u, float v, int width, int height, - int regionWidth, - int regionHeight, int textureWidth, int textureHeight, int color) { - this.drawTexturedQuad((Identifier) (Object) sprite, x, x + width, y, y + height, - (u + 0.0F) / (float) textureWidth, - (u + (float) regionWidth) / (float) textureWidth, (v + 0.0F) / (float) textureHeight, - (v + (float) regionHeight) / (float) textureHeight, color); + int regionWidth, int regionHeight, int textureWidth, int textureHeight, int color) { + drawTexturedQuad((Identifier) (Object) sprite, x, x + width, y, y + height, + (u + 0f) / textureWidth, + (u + regionWidth) / textureWidth, + (v + 0f) / textureHeight, + (v + regionHeight) / textureHeight, + color); } - /* Minecraft sprites */ - - public void drawTexture(Identifier sprite, int x, int y, float u, float v, int width, int height, int color) { - this.drawTexture(sprite, x, y, u, v, width, height, width, height, width, height, color); - } - - public void drawTexture(Identifier sprite, int x, int y, float u, float v, int width, int height) { - this.drawTexture(sprite, x, y, u, v, width, height, width, height, width, height); - } - - public void drawTexture(Identifier sprite, int x, int y, float u, float v, int width, int height, int regionWith, - int regionHeight, int textureWidth, int textureHeight) { - this.drawTexture(sprite, x, y, u, v, width, height, regionWith, regionHeight, textureWidth, textureHeight, -1); - } - - public void drawTexture(Identifier sprite, int x, int y, float u, float v, int width, int height, int regionWidth, - int regionHeight, int textureWidth, int textureHeight, int color) { - this.drawTexturedQuad(sprite, x, x + width, y, y + height, (u + 0.0F) / (float) textureWidth, - (u + (float) regionWidth) / (float) textureWidth, (v + 0.0F) / (float) textureHeight, - (v + (float) regionHeight) / (float) textureHeight, color); - } - - private void drawTexturedQuad(Identifier sprite, int x1, int x2, int y1, int y2, float u1, float u2, float v1, - float v2, int color) { - GpuTextureView gpuTextureView = SaturnClient.client.getTextureManager().getTexture(sprite).getGlTextureView(); - + private void drawTexturedQuad(Identifier sprite, int x1, int x2, int y1, int y2, + float u1, float u2, float v1, float v2, int color) { if (color == 0) return; - - x1 *= 4; - x2 *= 4; - y1 *= 4; - y2 *= 4; color = getColor(color); - if (sprite.toString().endsWith(".svg")) { - sprite = (Identifier) (Object) SvgTexture.getSvg(Providers.saturn.getClient(), + GpuTextureView gpuTextureView = SaturnClient.client.getTextureManager() + .getTexture(sprite).getGlTextureView(); + + if (sprite.getPath().endsWith(".svg")) { + sprite = (Identifier) (Object) SvgTexture.getSvg( + Providers.saturn.getClient(), (IdentifierRef) (Object) sprite, (x2 - x1) * 2, (y2 - y1) * 2); } - this.state.addSimpleElement(new TexturedQuadGuiElementRenderState(RenderPipelines.GUI, - TextureSetup.withoutGlTexture(gpuTextureView), new Matrix3x2f(this.matrices.stack), x1, y1, x2, y2, u1, - u2, - v1, v2, - color, this.scissorStack.peekLast())); + this.state.addSimpleElement(new TexturedQuadGuiElementRenderState( + RenderPipelines.GUI, + TextureSetup.withoutGlTexture(gpuTextureView), + new Matrix3x2f(this.matrices.stack), + x1, y1, x2, y2, u1, u2, v1, v2, color, + this.scissorStack.peekLast())); } + // Scissor management @Override public void enableScissor(int x1, int y1, int x2, int y2) { - ScreenRect screenRect = (new ScreenRect(x1, y1, x2 - x1, y2 - y1)).transform(this.matrices.stack); - this.scissorStack.push(screenRect); + ScreenRect rect = new ScreenRect(x1, y1, x2 - x1, y2 - y1).transform(this.matrices.stack); + scissorStack.push(rect); } @Override public void disableScissor() { - this.scissorStack.pop(); + scissorStack.pop(); } @Override public boolean scissorContains(int x, int y) { - return this.scissorStack.contains(x, y); + return scissorStack.contains(x, y); } public static class ScissorStack { - private final Deque stack = new ArrayDeque(); - - ScissorStack() { - } + private final Deque stack = new ArrayDeque<>(); public ScreenRect push(ScreenRect rect) { - ScreenRect screenRect = (ScreenRect) this.stack.peekLast(); - if (screenRect != null) { - ScreenRect screenRect2 = (ScreenRect) Objects.requireNonNullElse(rect.intersection(screenRect), - ScreenRect.empty()); - this.stack.addLast(screenRect2); - return screenRect2; + ScreenRect last = stack.peekLast(); + if (last != null) { + ScreenRect intersection = Objects.requireNonNullElse(rect.intersection(last), ScreenRect.empty()); + stack.addLast(intersection); + return intersection; } else { - this.stack.addLast(rect); + stack.addLast(rect); return rect; } } @Nullable public ScreenRect pop() { - if (this.stack.isEmpty()) { + if (stack.isEmpty()) throw new IllegalStateException("Scissor stack underflow"); - } else { - this.stack.removeLast(); - return (ScreenRect) this.stack.peekLast(); - } + stack.removeLast(); + return stack.peekLast(); } @Nullable public ScreenRect peekLast() { - return (ScreenRect) this.stack.peekLast(); + return stack.peekLast(); } public boolean contains(int x, int y) { - return this.stack.isEmpty() ? true : ((ScreenRect) this.stack.peek()).contains(x, y); + return stack.isEmpty() || stack.peekLast().contains(x, y); } } + // Item rendering @Override - public void drawItem(ItemStackRef item, int x, int y) { - this.drawItem(SaturnClient.client.player, SaturnClient.client.world, item, x, y, 0); - } - - @Override - public void drawItem(ItemStackRef stack, int x, int y, int seed) { - this.drawItem(SaturnClient.client.player, SaturnClient.client.world, stack, x, y, seed); - } - - @Override - public void drawItem(ItemStackRef stack, int x, int y, int seed, int z) { - this.drawItem(SaturnClient.client.player, SaturnClient.client.world, (ItemStack) (Object) stack, x, y, seed, z); - } - - @Override - public void drawItemWithoutEntity(ItemStackRef stack, int x, int y) { - this.drawItemWithoutEntity(stack, x, y, 0); - } - - @Override - public void drawItemWithoutEntity(ItemStackRef stack, int x, int y, int seed) { - this.drawItem((LivingEntity) null, SaturnClient.client.world, stack, x, y, seed); + public void drawItem(ItemStackRef stack, int x, int y) { + drawItem(null, SaturnClient.client.world, stack, x, y, 0); } private void drawItem(@Nullable LivingEntity entity, @Nullable World world, ItemStackRef stack, int x, int y, int seed) { - this.drawItem(entity, world, (ItemStack) (Object) stack, x, y, seed, 0); + drawItem(entity, world, (ItemStack) (Object) stack, x, y, seed, 0); } private void drawItem(@Nullable LivingEntity entity, @Nullable World world, ItemStack stack, int x, int y, int seed, int z) { if (!stack.isEmpty()) { - ItemRenderState itemRenderState = new ItemRenderState(); - SaturnClient.client.getItemModelManager().clearAndUpdate(itemRenderState, stack, ItemDisplayContext.GUI, - world, + ItemRenderState state = new ItemRenderState(); + SaturnClient.client.getItemModelManager().clearAndUpdate(state, stack, ItemDisplayContext.GUI, world, entity, seed); try { this.state.addItem(new ItemGuiElementRenderState(stack.getItem().getName().toString(), - new Matrix3x2f(this.matrices.stack), itemRenderState, x, y, this.scissorStack.peekLast())); - } catch (Throwable throwable) { - CrashReport crashReport = CrashReport.create(throwable, "Rendering item"); - CrashReportSection crashReportSection = crashReport.addElement("Item being rendered"); - crashReportSection.add("Item Type", () -> String.valueOf(stack.getItem())); - crashReportSection.add("Item Components", () -> String.valueOf(stack.getComponents())); - crashReportSection.add("Item Foil", () -> String.valueOf(stack.hasGlint())); - throw new CrashException(crashReport); + new Matrix3x2f(this.matrices.stack), state, x, y, scissorStack.peekLast())); + } catch (Throwable t) { + CrashReport report = CrashReport.create(t, "Rendering item"); + CrashReportSection section = report.addElement("Item being rendered"); + section.add("Item Type", () -> String.valueOf(stack.getItem())); + section.add("Item Components", () -> String.valueOf(stack.getComponents())); + section.add("Item Foil", () -> String.valueOf(stack.hasGlint())); + throw new CrashException(report); } } } - @Override - public void draw() { - } - @Override public void drawSpriteStretched(SpriteRef sprite, int x, int y, int width, int height) { - this.drawSpriteStretched(sprite, x, y, width, height, -1); + drawSpriteStretched(sprite, x, y, width, height, -1); } @Override - public void drawSpriteStretched(SpriteRef saturnSprite, int x, int y, int width, int height, int color) { - Sprite sprite = (Sprite) saturnSprite; - if (color == 0) + public void drawSpriteStretched(SpriteRef sprite, int x, int y, int width, int height, int color) { + Sprite mcSprite = (Sprite) sprite; + if (color == 0 || width == 0 || height == 0) return; - if (width != 0 && height != 0) { - this.drawTexturedQuad(sprite.getAtlasId(), x, x + width, y, y + height, sprite.getMinU(), sprite.getMaxU(), - sprite.getMinV(), sprite.getMaxV(), color); - } + + drawTexturedQuad(mcSprite.getAtlasId(), x, x + width, y, y + height, + mcSprite.getMinU(), mcSprite.getMaxU(), mcSprite.getMinV(), mcSprite.getMaxV(), color); + } + + @Override + public void draw() { + // No-op for now } public void drawBorder(int x, int y, int width, int height, int color) { - this.fill(x, y, x + width, y + 1, color); - this.fill(x, y + height - 1, x + width, y + height, color); - this.fill(x, y + 1, x + 1, y + height - 1, color); - this.fill(x + width - 1, y + 1, x + width, y + height - 1, color); + fill(x, y, x + width, y + 1, color); + fill(x, y + height - 1, x + width, y + height, color); + fill(x, y + 1, x + 1, y + height - 1, color); + fill(x + width - 1, y + 1, x + width, y + height - 1, color); } -} +} \ No newline at end of file diff --git a/versions/1.21.6/src/main/resources/impl.mixins.json b/versions/1.21.6/src/main/resources/impl.mixins.json index 094792b..ef9d58f 100644 --- a/versions/1.21.6/src/main/resources/impl.mixins.json +++ b/versions/1.21.6/src/main/resources/impl.mixins.json @@ -6,7 +6,6 @@ "client": [ "IdentifierMixin", "ItemStackMixin", - "MatrixStackMixin", "MinecraftClientMixin", "QuaternionfMixin", "WindowMixin",