From a381131d79d72942991df02663cb8d3bac55ce08 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Tue, 7 Oct 2025 20:48:49 +0200 Subject: [PATCH 01/23] feat: Add 1.16.5 support * Support ItemEffect#NONE and ItemEffect#GLOW * Implement custom enchantment glint color * Implement custom armor glint color --- .../v1_16_5/ColoredVertexConsumer.java | 65 ++++++++++ .../v1_16_5/CustomRenderTypes.java | 99 +++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 43 +++++++ .../v1_16_5/mixins/MixinItemRenderer.java | 113 ++++++++++++++++++ 4 files changed, 320 insertions(+) create mode 100644 game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/CustomRenderTypes.java create mode 100644 game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinItemRenderer.java diff --git a/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/ColoredVertexConsumer.java b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/ColoredVertexConsumer.java new file mode 100644 index 0000000..7b35eb1 --- /dev/null +++ b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/ColoredVertexConsumer.java @@ -0,0 +1,65 @@ +package com.rappytv.glintcolorizer.v1_16_5; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + this.delegate.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + return this; + } + + @Override + public VertexConsumer uv(float u, float v) { + this.delegate.uv(u, v); + return this; + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + this.delegate.overlayCoords(u, v); + return this; + } + + @Override + public VertexConsumer uv2(int u, int v) { + this.delegate.uv2(u, v); + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + this.delegate.normal(x, y, z); + return this; + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/CustomRenderTypes.java b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/CustomRenderTypes.java new file mode 100644 index 0000000..6e673a0 --- /dev/null +++ b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/CustomRenderTypes.java @@ -0,0 +1,99 @@ +package com.rappytv.glintcolorizer.v1_16_5; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import net.minecraft.client.renderer.RenderStateShard; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + 7, + 256, + RenderType.CompositeState.builder() + .setTextureState( + new RenderStateShard.TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, + false)) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + 7, + 256, + RenderType.CompositeState.builder() + .setTextureState( + new RenderStateShard.TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, + false)) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + 7, + 256, + RenderType.CompositeState.builder() + .setTextureState( + new RenderStateShard.TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, + false)) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + 7, + 256, + RenderType.CompositeState.builder() + .setTextureState( + new RenderStateShard.TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, + false)) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .createCompositeState(false) + ); + + private CustomRenderTypes(String name, VertexFormat format, int mode, int bufferSize, + boolean affectsCrumbling, boolean sortOnUpload, Runnable setupState, Runnable clearState) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..65d6192 --- /dev/null +++ b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,43 @@ +package com.rappytv.glintcolorizer.v1_16_5.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_16_5.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderModel(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/item/ArmorItem;ZLnet/minecraft/client/model/HumanoidModel;ZFFFLjava/lang/String;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getArmorFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( + MultiBufferSource source, + RenderType type, + boolean noEntity, + boolean hasGlint, + Operation original + ) { + VertexConsumer buffer = original.call(source, type, noEntity, hasGlint); + + if (hasGlint) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + } + + return buffer; + } +} diff --git a/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinItemRenderer.java b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..1b2c2a0 --- /dev/null +++ b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinItemRenderer.java @@ -0,0 +1,113 @@ +package com.rappytv.glintcolorizer.v1_16_5.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_16_5.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_16_5.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = + isItem ? CustomRenderTypes.getGlowGlint() : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + From 1feea2a556da723510a757ce0d459873ebc12494 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Tue, 7 Oct 2025 22:06:30 +0200 Subject: [PATCH 02/23] feat: Add 1.17.1 implementation TODO: Bypass RenderType#create being private --- .../v1_17_1/ColoredVertexConsumer.java | 75 ++++++++++++ .../v1_17_1/CustomRenderTypes.java | 107 +++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 43 +++++++ .../v1_17_1/mixins/MixinItemRenderer.java | 113 ++++++++++++++++++ 4 files changed, 338 insertions(+) create mode 100644 game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java create mode 100644 game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinItemRenderer.java diff --git a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/ColoredVertexConsumer.java b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/ColoredVertexConsumer.java new file mode 100644 index 0000000..98aef3a --- /dev/null +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/ColoredVertexConsumer.java @@ -0,0 +1,75 @@ +package com.rappytv.glintcolorizer.v1_17_1; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + this.delegate.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + return this; + } + + @Override + public VertexConsumer uv(float u, float v) { + this.delegate.uv(u, v); + return this; + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + this.delegate.overlayCoords(u, v); + return this; + } + + @Override + public VertexConsumer uv2(int u, int v) { + this.delegate.uv2(u, v); + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + this.delegate.normal(x, y, z); + return this; + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + this.delegate.defaultColor(red, green, blue, alpha); + } + + @Override + public void unsetDefaultColor() { + this.delegate.unsetDefaultColor(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java new file mode 100644 index 0000000..af50599 --- /dev/null +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java @@ -0,0 +1,107 @@ +package com.rappytv.glintcolorizer.v1_17_1; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public abstract class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState( + new TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, + false)) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState( + new TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, + false)) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState( + new TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, + false)) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState( + new TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, + false)) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + VertexFormat.Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..870ff7a --- /dev/null +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,43 @@ +package com.rappytv.glintcolorizer.v1_17_1.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_17_1.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderModel(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/item/ArmorItem;ZLnet/minecraft/client/model/HumanoidModel;ZFFFLjava/lang/String;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getArmorFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( + MultiBufferSource source, + RenderType type, + boolean noEntity, + boolean hasGlint, + Operation original + ) { + VertexConsumer buffer = original.call(source, type, noEntity, hasGlint); + + if (hasGlint) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + } + + return buffer; + } +} diff --git a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinItemRenderer.java b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..1d67f0c --- /dev/null +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinItemRenderer.java @@ -0,0 +1,113 @@ +package com.rappytv.glintcolorizer.v1_17_1.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_17_1.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_17_1.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = + isItem ? CustomRenderTypes.getGlowGlint() : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + From 72b121d1ef86f41eb8efb275abd7ca23de73b7c4 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 20:03:23 +0200 Subject: [PATCH 03/23] chore: Format CustomRenderTypes classes --- .../v1_16_5/CustomRenderTypes.java | 44 +++++++++++++------ .../v1_17_1/CustomRenderTypes.java | 34 ++++++++------ 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/CustomRenderTypes.java b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/CustomRenderTypes.java index 6e673a0..517df25 100644 --- a/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/CustomRenderTypes.java +++ b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/CustomRenderTypes.java @@ -14,9 +14,11 @@ public class CustomRenderTypes extends RenderType { 7, 256, RenderType.CompositeState.builder() - .setTextureState( - new RenderStateShard.TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, - false)) + .setTextureState(new RenderStateShard.TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) .setWriteMaskState(COLOR_WRITE) .setCullState(NO_CULL) .setDepthTestState(NO_DEPTH_TEST) @@ -31,9 +33,11 @@ public class CustomRenderTypes extends RenderType { 7, 256, RenderType.CompositeState.builder() - .setTextureState( - new RenderStateShard.TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, - false)) + .setTextureState(new RenderStateShard.TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) .setWriteMaskState(COLOR_WRITE) .setCullState(NO_CULL) .setDepthTestState(NO_DEPTH_TEST) @@ -48,9 +52,11 @@ public class CustomRenderTypes extends RenderType { 7, 256, RenderType.CompositeState.builder() - .setTextureState( - new RenderStateShard.TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, - false)) + .setTextureState(new RenderStateShard.TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) .setWriteMaskState(COLOR_WRITE) .setCullState(NO_CULL) .setDepthTestState(NO_DEPTH_TEST) @@ -65,9 +71,11 @@ public class CustomRenderTypes extends RenderType { 7, 256, RenderType.CompositeState.builder() - .setTextureState( - new RenderStateShard.TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, - false)) + .setTextureState(new RenderStateShard.TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) .setWriteMaskState(COLOR_WRITE) .setCullState(NO_CULL) .setDepthTestState(NO_DEPTH_TEST) @@ -76,8 +84,16 @@ public class CustomRenderTypes extends RenderType { .createCompositeState(false) ); - private CustomRenderTypes(String name, VertexFormat format, int mode, int bufferSize, - boolean affectsCrumbling, boolean sortOnUpload, Runnable setupState, Runnable clearState) { + private CustomRenderTypes( + String name, + VertexFormat format, + int mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); } diff --git a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java index af50599..2447e34 100644 --- a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java @@ -6,7 +6,7 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.ItemRenderer; -public abstract class CustomRenderTypes extends RenderType { +public class CustomRenderTypes extends RenderType { private static final RenderType GLOW_GLINT = create( "glint_glow", @@ -14,9 +14,11 @@ public abstract class CustomRenderTypes extends RenderType { Mode.QUADS, 256, CompositeState.builder() - .setTextureState( - new TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, - false)) + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) .setWriteMaskState(COLOR_WRITE) .setCullState(NO_CULL) .setDepthTestState(NO_DEPTH_TEST) @@ -31,9 +33,11 @@ public abstract class CustomRenderTypes extends RenderType { Mode.QUADS, 256, CompositeState.builder() - .setTextureState( - new TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, - false)) + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) .setWriteMaskState(COLOR_WRITE) .setCullState(NO_CULL) .setDepthTestState(NO_DEPTH_TEST) @@ -48,9 +52,11 @@ public abstract class CustomRenderTypes extends RenderType { Mode.QUADS, 256, CompositeState.builder() - .setTextureState( - new TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, - false)) + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) .setWriteMaskState(COLOR_WRITE) .setCullState(NO_CULL) .setDepthTestState(NO_DEPTH_TEST) @@ -65,9 +71,11 @@ public abstract class CustomRenderTypes extends RenderType { Mode.QUADS, 256, CompositeState.builder() - .setTextureState( - new TextureStateShard(ItemRenderer.ENCHANT_GLINT_LOCATION, true, - false)) + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) .setWriteMaskState(COLOR_WRITE) .setCullState(NO_CULL) .setDepthTestState(NO_DEPTH_TEST) From 2298dc9d76fcb3ba17d5a7a40a0959e124f038d9 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 20:03:59 +0200 Subject: [PATCH 04/23] feat: Add access widener to access RenderType#create in 1.17.1 --- build.gradle.kts | 3 +++ .../src/v1_17_1/resources/glintcolorizer-1.17.1.accesswidener | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 game-runner/src/v1_17_1/resources/glintcolorizer-1.17.1.accesswidener diff --git a/build.gradle.kts b/build.gradle.kts index 67fc6de..86f43b5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,6 +22,9 @@ labyMod { minecraft { registerVersion(versions.toTypedArray()) { + + accessWidener.set(file("./game-runner/src/${this.sourceSetName}/resources/glintcolorizer-${versionId}.accesswidener")) + runs { getByName("client") { devLogin = true diff --git a/game-runner/src/v1_17_1/resources/glintcolorizer-1.17.1.accesswidener b/game-runner/src/v1_17_1/resources/glintcolorizer-1.17.1.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_17_1/resources/glintcolorizer-1.17.1.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From bcfccfe58794140ffef31689b88bfb3a7de20c39 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 20:19:07 +0200 Subject: [PATCH 05/23] fix: Fix ItemEffect#GLOW crashing on 1.17.1 --- .../glintcolorizer/v1_16_5/mixins/MixinItemRenderer.java | 8 +++++--- .../rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java | 4 ++++ .../glintcolorizer/v1_17_1/mixins/MixinItemRenderer.java | 8 +++++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinItemRenderer.java b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinItemRenderer.java index 1b2c2a0..629df1f 100644 --- a/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinItemRenderer.java +++ b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinItemRenderer.java @@ -45,8 +45,9 @@ private VertexConsumer modifyFoilBuffer( RenderType glintType; if (effect == ItemEffect.GLOW) { - glintType = - isItem ? CustomRenderTypes.getGlowGlint() : CustomRenderTypes.getGlowEntityGlint(); + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); } else { glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); } @@ -91,7 +92,8 @@ private VertexConsumer modifyFoilBufferDirect( RenderType glintType; if (effect == ItemEffect.GLOW) { - glintType = isItem ? CustomRenderTypes.getGlowGlintDirect() + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() : CustomRenderTypes.getGlowEntityGlintDirect(); } else { glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); diff --git a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java index 2447e34..a812739 100644 --- a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java @@ -24,6 +24,7 @@ public class CustomRenderTypes extends RenderType { .setDepthTestState(NO_DEPTH_TEST) .setTransparencyState(GLINT_TRANSPARENCY) .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) .createCompositeState(false) ); @@ -43,6 +44,7 @@ public class CustomRenderTypes extends RenderType { .setDepthTestState(NO_DEPTH_TEST) .setTransparencyState(GLINT_TRANSPARENCY) .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) .createCompositeState(false) ); @@ -62,6 +64,7 @@ public class CustomRenderTypes extends RenderType { .setDepthTestState(NO_DEPTH_TEST) .setTransparencyState(GLINT_TRANSPARENCY) .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) .createCompositeState(false) ); @@ -81,6 +84,7 @@ public class CustomRenderTypes extends RenderType { .setDepthTestState(NO_DEPTH_TEST) .setTransparencyState(GLINT_TRANSPARENCY) .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) .createCompositeState(false) ); diff --git a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinItemRenderer.java b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinItemRenderer.java index 1d67f0c..abeb595 100644 --- a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinItemRenderer.java +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinItemRenderer.java @@ -45,8 +45,9 @@ private VertexConsumer modifyFoilBuffer( RenderType glintType; if (effect == ItemEffect.GLOW) { - glintType = - isItem ? CustomRenderTypes.getGlowGlint() : CustomRenderTypes.getGlowEntityGlint(); + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); } else { glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); } @@ -91,7 +92,8 @@ private VertexConsumer modifyFoilBufferDirect( RenderType glintType; if (effect == ItemEffect.GLOW) { - glintType = isItem ? CustomRenderTypes.getGlowGlintDirect() + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() : CustomRenderTypes.getGlowEntityGlintDirect(); } else { glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); From 64dfa46a11a6506d7799f7c76b5e12dc39ce0f4f Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 20:25:38 +0200 Subject: [PATCH 06/23] feat: Add 1.18.2 implementation --- .../v1_18_2/ColoredVertexConsumer.java | 75 +++++++++++ .../v1_18_2/CustomRenderTypes.java | 119 ++++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 43 +++++++ .../v1_18_2/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.18.2.accesswidener | 3 + 5 files changed, 355 insertions(+) create mode 100644 game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/CustomRenderTypes.java create mode 100644 game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_18_2/resources/glintcolorizer-1.18.2.accesswidener diff --git a/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/ColoredVertexConsumer.java b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/ColoredVertexConsumer.java new file mode 100644 index 0000000..483ef70 --- /dev/null +++ b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/ColoredVertexConsumer.java @@ -0,0 +1,75 @@ +package com.rappytv.glintcolorizer.v1_18_2; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + this.delegate.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + return this; + } + + @Override + public VertexConsumer uv(float u, float v) { + this.delegate.uv(u, v); + return this; + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + this.delegate.overlayCoords(u, v); + return this; + } + + @Override + public VertexConsumer uv2(int u, int v) { + this.delegate.uv2(u, v); + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + this.delegate.normal(x, y, z); + return this; + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + this.delegate.defaultColor(red, green, blue, alpha); + } + + @Override + public void unsetDefaultColor() { + this.delegate.unsetDefaultColor(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/CustomRenderTypes.java b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/CustomRenderTypes.java new file mode 100644 index 0000000..36799b7 --- /dev/null +++ b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_18_2; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..a72eb83 --- /dev/null +++ b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,43 @@ +package com.rappytv.glintcolorizer.v1_18_2.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_18_2.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderModel(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/item/ArmorItem;ZLnet/minecraft/client/model/HumanoidModel;ZFFFLjava/lang/String;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getArmorFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( + MultiBufferSource source, + RenderType type, + boolean noEntity, + boolean hasGlint, + Operation original + ) { + VertexConsumer buffer = original.call(source, type, noEntity, hasGlint); + + if (hasGlint) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + } + + return buffer; + } +} diff --git a/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/mixins/MixinItemRenderer.java b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..b4ef4f8 --- /dev/null +++ b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_18_2.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_18_2.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_18_2.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_18_2/resources/glintcolorizer-1.18.2.accesswidener b/game-runner/src/v1_18_2/resources/glintcolorizer-1.18.2.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_18_2/resources/glintcolorizer-1.18.2.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From 79f3db8870041ef41f27f539e34a6848e1041e16 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 20:37:18 +0200 Subject: [PATCH 07/23] feat: Add 1.19.2 implementation --- .../v1_19_2/ColoredVertexConsumer.java | 75 +++++++++++ .../v1_19_2/CustomRenderTypes.java | 119 ++++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 43 +++++++ .../v1_19_2/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.19.2.accesswidener | 3 + 5 files changed, 355 insertions(+) create mode 100644 game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/CustomRenderTypes.java create mode 100644 game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_19_2/resources/glintcolorizer-1.19.2.accesswidener diff --git a/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/ColoredVertexConsumer.java b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/ColoredVertexConsumer.java new file mode 100644 index 0000000..68509c4 --- /dev/null +++ b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/ColoredVertexConsumer.java @@ -0,0 +1,75 @@ +package com.rappytv.glintcolorizer.v1_19_2; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + this.delegate.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + return this; + } + + @Override + public VertexConsumer uv(float u, float v) { + this.delegate.uv(u, v); + return this; + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + this.delegate.overlayCoords(u, v); + return this; + } + + @Override + public VertexConsumer uv2(int u, int v) { + this.delegate.uv2(u, v); + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + this.delegate.normal(x, y, z); + return this; + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + this.delegate.defaultColor(red, green, blue, alpha); + } + + @Override + public void unsetDefaultColor() { + this.delegate.unsetDefaultColor(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/CustomRenderTypes.java b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/CustomRenderTypes.java new file mode 100644 index 0000000..42ad0b1 --- /dev/null +++ b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_19_2; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..36b6347 --- /dev/null +++ b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,43 @@ +package com.rappytv.glintcolorizer.v1_19_2.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_19_2.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderModel(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/item/ArmorItem;ZLnet/minecraft/client/model/HumanoidModel;ZFFFLjava/lang/String;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getArmorFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( + MultiBufferSource source, + RenderType type, + boolean noEntity, + boolean hasGlint, + Operation original + ) { + VertexConsumer buffer = original.call(source, type, noEntity, hasGlint); + + if (hasGlint) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + } + + return buffer; + } +} diff --git a/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/mixins/MixinItemRenderer.java b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..9370023 --- /dev/null +++ b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_19_2.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_19_2.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_19_2.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_19_2/resources/glintcolorizer-1.19.2.accesswidener b/game-runner/src/v1_19_2/resources/glintcolorizer-1.19.2.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_19_2/resources/glintcolorizer-1.19.2.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From d92906e0c66bbf319057918770c8d0b22732d57b Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 20:47:25 +0200 Subject: [PATCH 08/23] feat: Add 1.19.3 implementation --- .../v1_19_3/ColoredVertexConsumer.java | 75 +++++++++++ .../v1_19_3/CustomRenderTypes.java | 119 ++++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 43 +++++++ .../v1_19_3/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.19.3.accesswidener | 3 + 5 files changed, 355 insertions(+) create mode 100644 game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/CustomRenderTypes.java create mode 100644 game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_19_3/resources/glintcolorizer-1.19.3.accesswidener diff --git a/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/ColoredVertexConsumer.java b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/ColoredVertexConsumer.java new file mode 100644 index 0000000..65e6e9c --- /dev/null +++ b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/ColoredVertexConsumer.java @@ -0,0 +1,75 @@ +package com.rappytv.glintcolorizer.v1_19_3; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + this.delegate.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + return this; + } + + @Override + public VertexConsumer uv(float u, float v) { + this.delegate.uv(u, v); + return this; + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + this.delegate.overlayCoords(u, v); + return this; + } + + @Override + public VertexConsumer uv2(int u, int v) { + this.delegate.uv2(u, v); + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + this.delegate.normal(x, y, z); + return this; + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + this.delegate.defaultColor(red, green, blue, alpha); + } + + @Override + public void unsetDefaultColor() { + this.delegate.unsetDefaultColor(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/CustomRenderTypes.java b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/CustomRenderTypes.java new file mode 100644 index 0000000..cbf00ac --- /dev/null +++ b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_19_3; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANT_GLINT_LOCATION, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..0f18d90 --- /dev/null +++ b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,43 @@ +package com.rappytv.glintcolorizer.v1_19_3.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_19_3.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderModel(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/item/ArmorItem;ZLnet/minecraft/client/model/HumanoidModel;ZFFFLjava/lang/String;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getArmorFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( + MultiBufferSource source, + RenderType type, + boolean noEntity, + boolean hasGlint, + Operation original + ) { + VertexConsumer buffer = original.call(source, type, noEntity, hasGlint); + + if (hasGlint) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + } + + return buffer; + } +} diff --git a/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/mixins/MixinItemRenderer.java b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..5749f85 --- /dev/null +++ b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_19_3.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_19_3.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_19_3.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_19_3/resources/glintcolorizer-1.19.3.accesswidener b/game-runner/src/v1_19_3/resources/glintcolorizer-1.19.3.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_19_3/resources/glintcolorizer-1.19.3.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From 259cb726be5af97f13b3b57c103cb7ca26701fbf Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 20:57:26 +0200 Subject: [PATCH 09/23] feat: Add 1.19.4 implementation --- .../v1_19_4/ColoredVertexConsumer.java | 75 +++++++++++ .../v1_19_4/CustomRenderTypes.java | 119 ++++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 43 +++++++ .../v1_19_4/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.19.4.accesswidener | 3 + 5 files changed, 355 insertions(+) create mode 100644 game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/CustomRenderTypes.java create mode 100644 game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_19_4/resources/glintcolorizer-1.19.4.accesswidener diff --git a/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/ColoredVertexConsumer.java b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/ColoredVertexConsumer.java new file mode 100644 index 0000000..d490484 --- /dev/null +++ b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/ColoredVertexConsumer.java @@ -0,0 +1,75 @@ +package com.rappytv.glintcolorizer.v1_19_4; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + this.delegate.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + return this; + } + + @Override + public VertexConsumer uv(float u, float v) { + this.delegate.uv(u, v); + return this; + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + this.delegate.overlayCoords(u, v); + return this; + } + + @Override + public VertexConsumer uv2(int u, int v) { + this.delegate.uv2(u, v); + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + this.delegate.normal(x, y, z); + return this; + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + this.delegate.defaultColor(red, green, blue, alpha); + } + + @Override + public void unsetDefaultColor() { + this.delegate.unsetDefaultColor(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/CustomRenderTypes.java b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/CustomRenderTypes.java new file mode 100644 index 0000000..fea2069 --- /dev/null +++ b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_19_4; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..d42c4d7 --- /dev/null +++ b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,43 @@ +package com.rappytv.glintcolorizer.v1_19_4.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_19_4.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderModel(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/item/ArmorItem;ZLnet/minecraft/client/model/HumanoidModel;ZFFFLjava/lang/String;)V", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getArmorFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( + MultiBufferSource source, + RenderType type, + boolean noEntity, + boolean hasGlint, + Operation original + ) { + VertexConsumer buffer = original.call(source, type, noEntity, hasGlint); + + if (hasGlint) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + } + + return buffer; + } +} diff --git a/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/mixins/MixinItemRenderer.java b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..dabbe6c --- /dev/null +++ b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_19_4.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_19_4.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_19_4.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_19_4/resources/glintcolorizer-1.19.4.accesswidener b/game-runner/src/v1_19_4/resources/glintcolorizer-1.19.4.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_19_4/resources/glintcolorizer-1.19.4.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From 78473ac09f287e6b50c0b4a3a6ad000ac03580b2 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 21:11:59 +0200 Subject: [PATCH 10/23] feat: Add 1.20.1 implementation --- .../v1_20_1/ColoredVertexConsumer.java | 75 +++++++++++ .../v1_20_1/CustomRenderTypes.java | 119 ++++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 39 ++++++ .../v1_20_1/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.20.1.accesswidener | 3 + 5 files changed, 351 insertions(+) create mode 100644 game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/CustomRenderTypes.java create mode 100644 game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_20_1/resources/glintcolorizer-1.20.1.accesswidener diff --git a/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/ColoredVertexConsumer.java b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/ColoredVertexConsumer.java new file mode 100644 index 0000000..926bd58 --- /dev/null +++ b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/ColoredVertexConsumer.java @@ -0,0 +1,75 @@ +package com.rappytv.glintcolorizer.v1_20_1; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + this.delegate.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + return this; + } + + @Override + public VertexConsumer uv(float u, float v) { + this.delegate.uv(u, v); + return this; + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + this.delegate.overlayCoords(u, v); + return this; + } + + @Override + public VertexConsumer uv2(int u, int v) { + this.delegate.uv2(u, v); + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + this.delegate.normal(x, y, z); + return this; + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + this.delegate.defaultColor(red, green, blue, alpha); + } + + @Override + public void unsetDefaultColor() { + this.delegate.unsetDefaultColor(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/CustomRenderTypes.java b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/CustomRenderTypes.java new file mode 100644 index 0000000..be92290 --- /dev/null +++ b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_20_1; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..9c7771d --- /dev/null +++ b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,39 @@ +package com.rappytv.glintcolorizer.v1_20_1.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_20_1.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderGlint", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + MultiBufferSource instance, + RenderType renderType, + Operation original + ) { + VertexConsumer buffer = original.call(instance, renderType); + + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + + return buffer; + } +} diff --git a/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinItemRenderer.java b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..5bc0550 --- /dev/null +++ b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_20_1.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_20_1.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_20_1.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_20_1/resources/glintcolorizer-1.20.1.accesswidener b/game-runner/src/v1_20_1/resources/glintcolorizer-1.20.1.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_20_1/resources/glintcolorizer-1.20.1.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From 95fe2878f78ad16d0407592ada2a54e22e5f4776 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 21:42:04 +0200 Subject: [PATCH 11/23] feat: Add 1.20.2 implementation --- .../v1_20_2/ColoredVertexConsumer.java | 75 +++++++++++ .../v1_20_2/CustomRenderTypes.java | 119 ++++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 39 ++++++ .../v1_20_2/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.20.2.accesswidener | 3 + 5 files changed, 351 insertions(+) create mode 100644 game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/CustomRenderTypes.java create mode 100644 game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_20_2/resources/glintcolorizer-1.20.2.accesswidener diff --git a/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/ColoredVertexConsumer.java b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/ColoredVertexConsumer.java new file mode 100644 index 0000000..b5203ed --- /dev/null +++ b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/ColoredVertexConsumer.java @@ -0,0 +1,75 @@ +package com.rappytv.glintcolorizer.v1_20_2; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + this.delegate.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + return this; + } + + @Override + public VertexConsumer uv(float u, float v) { + this.delegate.uv(u, v); + return this; + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + this.delegate.overlayCoords(u, v); + return this; + } + + @Override + public VertexConsumer uv2(int u, int v) { + this.delegate.uv2(u, v); + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + this.delegate.normal(x, y, z); + return this; + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + this.delegate.defaultColor(red, green, blue, alpha); + } + + @Override + public void unsetDefaultColor() { + this.delegate.unsetDefaultColor(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/CustomRenderTypes.java b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/CustomRenderTypes.java new file mode 100644 index 0000000..f79d4d2 --- /dev/null +++ b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_20_2; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..1e74297 --- /dev/null +++ b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,39 @@ +package com.rappytv.glintcolorizer.v1_20_2.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_20_2.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderGlint", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + MultiBufferSource instance, + RenderType renderType, + Operation original + ) { + VertexConsumer buffer = original.call(instance, renderType); + + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + + return buffer; + } +} diff --git a/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinItemRenderer.java b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..a3a48ff --- /dev/null +++ b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_20_2.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_20_2.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_20_2.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_20_2/resources/glintcolorizer-1.20.2.accesswidener b/game-runner/src/v1_20_2/resources/glintcolorizer-1.20.2.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_20_2/resources/glintcolorizer-1.20.2.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From b9b020ac4f8b2a89c33352edff4c412f3f4cedf1 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 21:49:03 +0200 Subject: [PATCH 12/23] feat: Add 1.20.4 implementation --- .../v1_20_4/ColoredVertexConsumer.java | 75 +++++++++++ .../v1_20_4/CustomRenderTypes.java | 119 ++++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 39 ++++++ .../v1_20_4/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.20.4.accesswidener | 3 + 5 files changed, 351 insertions(+) create mode 100644 game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/CustomRenderTypes.java create mode 100644 game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_20_4/resources/glintcolorizer-1.20.4.accesswidener diff --git a/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/ColoredVertexConsumer.java b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/ColoredVertexConsumer.java new file mode 100644 index 0000000..a4b214d --- /dev/null +++ b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/ColoredVertexConsumer.java @@ -0,0 +1,75 @@ +package com.rappytv.glintcolorizer.v1_20_4; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + this.delegate.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + return this; + } + + @Override + public VertexConsumer uv(float u, float v) { + this.delegate.uv(u, v); + return this; + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + this.delegate.overlayCoords(u, v); + return this; + } + + @Override + public VertexConsumer uv2(int u, int v) { + this.delegate.uv2(u, v); + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + this.delegate.normal(x, y, z); + return this; + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + this.delegate.defaultColor(red, green, blue, alpha); + } + + @Override + public void unsetDefaultColor() { + this.delegate.unsetDefaultColor(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/CustomRenderTypes.java b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/CustomRenderTypes.java new file mode 100644 index 0000000..413a623 --- /dev/null +++ b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_20_4; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..5bbd90a --- /dev/null +++ b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,39 @@ +package com.rappytv.glintcolorizer.v1_20_4.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_20_4.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderGlint", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + MultiBufferSource instance, + RenderType renderType, + Operation original + ) { + VertexConsumer buffer = original.call(instance, renderType); + + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + + return buffer; + } +} diff --git a/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinItemRenderer.java b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..c7647a3 --- /dev/null +++ b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_20_4.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_20_4.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_20_4.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_20_4/resources/glintcolorizer-1.20.4.accesswidener b/game-runner/src/v1_20_4/resources/glintcolorizer-1.20.4.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_20_4/resources/glintcolorizer-1.20.4.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From 536df93e9d0900495ba9c9f50c5c067d6a037e34 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 21:54:41 +0200 Subject: [PATCH 13/23] feat: Add 1.20.5 implementation --- .../v1_20_5/ColoredVertexConsumer.java | 75 +++++++++++ .../v1_20_5/CustomRenderTypes.java | 119 ++++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 39 ++++++ .../v1_20_5/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.20.5.accesswidener | 3 + 5 files changed, 351 insertions(+) create mode 100644 game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/CustomRenderTypes.java create mode 100644 game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_20_5/resources/glintcolorizer-1.20.5.accesswidener diff --git a/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/ColoredVertexConsumer.java b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/ColoredVertexConsumer.java new file mode 100644 index 0000000..607ee71 --- /dev/null +++ b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/ColoredVertexConsumer.java @@ -0,0 +1,75 @@ +package com.rappytv.glintcolorizer.v1_20_5; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + this.delegate.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + return this; + } + + @Override + public VertexConsumer uv(float u, float v) { + this.delegate.uv(u, v); + return this; + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + this.delegate.overlayCoords(u, v); + return this; + } + + @Override + public VertexConsumer uv2(int u, int v) { + this.delegate.uv2(u, v); + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + this.delegate.normal(x, y, z); + return this; + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + this.delegate.defaultColor(red, green, blue, alpha); + } + + @Override + public void unsetDefaultColor() { + this.delegate.unsetDefaultColor(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/CustomRenderTypes.java b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/CustomRenderTypes.java new file mode 100644 index 0000000..36ccaad --- /dev/null +++ b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_20_5; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..ac7db60 --- /dev/null +++ b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,39 @@ +package com.rappytv.glintcolorizer.v1_20_5.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_20_5.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderGlint", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + MultiBufferSource instance, + RenderType renderType, + Operation original + ) { + VertexConsumer buffer = original.call(instance, renderType); + + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + + return buffer; + } +} diff --git a/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinItemRenderer.java b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..6e3ad7d --- /dev/null +++ b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_20_5.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_20_5.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_20_5.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_20_5/resources/glintcolorizer-1.20.5.accesswidener b/game-runner/src/v1_20_5/resources/glintcolorizer-1.20.5.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_20_5/resources/glintcolorizer-1.20.5.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From c64654704403a6d16eb07400cdae7f1e227c296e Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 22:03:14 +0200 Subject: [PATCH 14/23] feat: Add 1.20.6 implementation --- .../v1_20_6/ColoredVertexConsumer.java | 69 ++++++++++ .../v1_20_6/CustomRenderTypes.java | 119 ++++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 39 ++++++ .../v1_20_6/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.20.6.accesswidener | 3 + 5 files changed, 345 insertions(+) create mode 100644 game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/CustomRenderTypes.java create mode 100644 game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_20_6/resources/glintcolorizer-1.20.6.accesswidener diff --git a/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/ColoredVertexConsumer.java b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/ColoredVertexConsumer.java new file mode 100644 index 0000000..8a25114 --- /dev/null +++ b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/ColoredVertexConsumer.java @@ -0,0 +1,69 @@ +package com.rappytv.glintcolorizer.v1_20_6; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer vertex(double x, double y, double z) { + return this.delegate.vertex(x, y, z); + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + return this.delegate.color( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + } + + @Override + public VertexConsumer uv(float u, float v) { + return this.delegate.uv(u, v); + } + + @Override + public VertexConsumer overlayCoords(int u, int v) { + return this.delegate.overlayCoords(u, v); + } + + @Override + public VertexConsumer uv2(int u, int v) { + return this.delegate.uv2(u, v); + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + return this.delegate.normal(x, y, z); + } + + @Override + public void endVertex() { + this.delegate.endVertex(); + } + + @Override + public void defaultColor(int red, int green, int blue, int alpha) { + this.delegate.defaultColor(red, green, blue, alpha); + } + + @Override + public void unsetDefaultColor() { + this.delegate.unsetDefaultColor(); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/CustomRenderTypes.java b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/CustomRenderTypes.java new file mode 100644 index 0000000..1a84562 --- /dev/null +++ b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_20_6; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..f52bf9a --- /dev/null +++ b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,39 @@ +package com.rappytv.glintcolorizer.v1_20_6.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_20_6.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderGlint", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + MultiBufferSource instance, + RenderType renderType, + Operation original + ) { + VertexConsumer buffer = original.call(instance, renderType); + + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + + return buffer; + } +} diff --git a/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinItemRenderer.java b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..1c214f2 --- /dev/null +++ b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_20_6.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_20_6.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_20_6.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_20_6/resources/glintcolorizer-1.20.6.accesswidener b/game-runner/src/v1_20_6/resources/glintcolorizer-1.20.6.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_20_6/resources/glintcolorizer-1.20.6.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From 9371334597d83a837480a739d72b1b8046a2e5fa Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 22:05:31 +0200 Subject: [PATCH 15/23] chore: Format ColoredVertexConsumer classes --- .../v1_16_5/ColoredVertexConsumer.java | 18 ++++++------------ .../v1_17_1/ColoredVertexConsumer.java | 18 ++++++------------ .../v1_18_2/ColoredVertexConsumer.java | 18 ++++++------------ .../v1_19_2/ColoredVertexConsumer.java | 18 ++++++------------ .../v1_19_3/ColoredVertexConsumer.java | 18 ++++++------------ .../v1_19_4/ColoredVertexConsumer.java | 18 ++++++------------ .../v1_20_1/ColoredVertexConsumer.java | 18 ++++++------------ .../v1_20_2/ColoredVertexConsumer.java | 18 ++++++------------ .../v1_20_4/ColoredVertexConsumer.java | 18 ++++++------------ .../v1_20_5/ColoredVertexConsumer.java | 18 ++++++------------ 10 files changed, 60 insertions(+), 120 deletions(-) diff --git a/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/ColoredVertexConsumer.java b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/ColoredVertexConsumer.java index 7b35eb1..b992788 100644 --- a/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/ColoredVertexConsumer.java +++ b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/ColoredVertexConsumer.java @@ -19,43 +19,37 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { @Override public VertexConsumer vertex(double x, double y, double z) { - this.delegate.vertex(x, y, z); - return this; + return this.delegate.vertex(x, y, z); } @Override public VertexConsumer color(int red, int green, int blue, int alpha) { - this.delegate.color( + return this.delegate.color( (int) (red * this.red), (int) (green * this.green), (int) (blue * this.blue), alpha ); - return this; } @Override public VertexConsumer uv(float u, float v) { - this.delegate.uv(u, v); - return this; + return this.delegate.uv(u, v); } @Override public VertexConsumer overlayCoords(int u, int v) { - this.delegate.overlayCoords(u, v); - return this; + return this.delegate.overlayCoords(u, v); } @Override public VertexConsumer uv2(int u, int v) { - this.delegate.uv2(u, v); - return this; + return this.delegate.uv2(u, v); } @Override public VertexConsumer normal(float x, float y, float z) { - this.delegate.normal(x, y, z); - return this; + return this.delegate.normal(x, y, z); } @Override diff --git a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/ColoredVertexConsumer.java b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/ColoredVertexConsumer.java index 98aef3a..080b6ef 100644 --- a/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/ColoredVertexConsumer.java +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/ColoredVertexConsumer.java @@ -19,43 +19,37 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { @Override public VertexConsumer vertex(double x, double y, double z) { - this.delegate.vertex(x, y, z); - return this; + return this.delegate.vertex(x, y, z); } @Override public VertexConsumer color(int red, int green, int blue, int alpha) { - this.delegate.color( + return this.delegate.color( (int) (red * this.red), (int) (green * this.green), (int) (blue * this.blue), alpha ); - return this; } @Override public VertexConsumer uv(float u, float v) { - this.delegate.uv(u, v); - return this; + return this.delegate.uv(u, v); } @Override public VertexConsumer overlayCoords(int u, int v) { - this.delegate.overlayCoords(u, v); - return this; + return this.delegate.overlayCoords(u, v); } @Override public VertexConsumer uv2(int u, int v) { - this.delegate.uv2(u, v); - return this; + return this.delegate.uv2(u, v); } @Override public VertexConsumer normal(float x, float y, float z) { - this.delegate.normal(x, y, z); - return this; + return this.delegate.normal(x, y, z); } @Override diff --git a/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/ColoredVertexConsumer.java b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/ColoredVertexConsumer.java index 483ef70..45a638f 100644 --- a/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/ColoredVertexConsumer.java +++ b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/ColoredVertexConsumer.java @@ -19,43 +19,37 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { @Override public VertexConsumer vertex(double x, double y, double z) { - this.delegate.vertex(x, y, z); - return this; + return this.delegate.vertex(x, y, z); } @Override public VertexConsumer color(int red, int green, int blue, int alpha) { - this.delegate.color( + return this.delegate.color( (int) (red * this.red), (int) (green * this.green), (int) (blue * this.blue), alpha ); - return this; } @Override public VertexConsumer uv(float u, float v) { - this.delegate.uv(u, v); - return this; + return this.delegate.uv(u, v); } @Override public VertexConsumer overlayCoords(int u, int v) { - this.delegate.overlayCoords(u, v); - return this; + return this.delegate.overlayCoords(u, v); } @Override public VertexConsumer uv2(int u, int v) { - this.delegate.uv2(u, v); - return this; + return this.delegate.uv2(u, v); } @Override public VertexConsumer normal(float x, float y, float z) { - this.delegate.normal(x, y, z); - return this; + return this.delegate.normal(x, y, z); } @Override diff --git a/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/ColoredVertexConsumer.java b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/ColoredVertexConsumer.java index 68509c4..d132cb2 100644 --- a/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/ColoredVertexConsumer.java +++ b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/ColoredVertexConsumer.java @@ -19,43 +19,37 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { @Override public VertexConsumer vertex(double x, double y, double z) { - this.delegate.vertex(x, y, z); - return this; + return this.delegate.vertex(x, y, z); } @Override public VertexConsumer color(int red, int green, int blue, int alpha) { - this.delegate.color( + return this.delegate.color( (int) (red * this.red), (int) (green * this.green), (int) (blue * this.blue), alpha ); - return this; } @Override public VertexConsumer uv(float u, float v) { - this.delegate.uv(u, v); - return this; + return this.delegate.uv(u, v); } @Override public VertexConsumer overlayCoords(int u, int v) { - this.delegate.overlayCoords(u, v); - return this; + return this.delegate.overlayCoords(u, v); } @Override public VertexConsumer uv2(int u, int v) { - this.delegate.uv2(u, v); - return this; + return this.delegate.uv2(u, v); } @Override public VertexConsumer normal(float x, float y, float z) { - this.delegate.normal(x, y, z); - return this; + return this.delegate.normal(x, y, z); } @Override diff --git a/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/ColoredVertexConsumer.java b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/ColoredVertexConsumer.java index 65e6e9c..71480dd 100644 --- a/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/ColoredVertexConsumer.java +++ b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/ColoredVertexConsumer.java @@ -19,43 +19,37 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { @Override public VertexConsumer vertex(double x, double y, double z) { - this.delegate.vertex(x, y, z); - return this; + return this.delegate.vertex(x, y, z); } @Override public VertexConsumer color(int red, int green, int blue, int alpha) { - this.delegate.color( + return this.delegate.color( (int) (red * this.red), (int) (green * this.green), (int) (blue * this.blue), alpha ); - return this; } @Override public VertexConsumer uv(float u, float v) { - this.delegate.uv(u, v); - return this; + return this.delegate.uv(u, v); } @Override public VertexConsumer overlayCoords(int u, int v) { - this.delegate.overlayCoords(u, v); - return this; + return this.delegate.overlayCoords(u, v); } @Override public VertexConsumer uv2(int u, int v) { - this.delegate.uv2(u, v); - return this; + return this.delegate.uv2(u, v); } @Override public VertexConsumer normal(float x, float y, float z) { - this.delegate.normal(x, y, z); - return this; + return this.delegate.normal(x, y, z); } @Override diff --git a/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/ColoredVertexConsumer.java b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/ColoredVertexConsumer.java index d490484..239773d 100644 --- a/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/ColoredVertexConsumer.java +++ b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/ColoredVertexConsumer.java @@ -19,43 +19,37 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { @Override public VertexConsumer vertex(double x, double y, double z) { - this.delegate.vertex(x, y, z); - return this; + return this.delegate.vertex(x, y, z); } @Override public VertexConsumer color(int red, int green, int blue, int alpha) { - this.delegate.color( + return this.delegate.color( (int) (red * this.red), (int) (green * this.green), (int) (blue * this.blue), alpha ); - return this; } @Override public VertexConsumer uv(float u, float v) { - this.delegate.uv(u, v); - return this; + return this.delegate.uv(u, v); } @Override public VertexConsumer overlayCoords(int u, int v) { - this.delegate.overlayCoords(u, v); - return this; + return this.delegate.overlayCoords(u, v); } @Override public VertexConsumer uv2(int u, int v) { - this.delegate.uv2(u, v); - return this; + return this.delegate.uv2(u, v); } @Override public VertexConsumer normal(float x, float y, float z) { - this.delegate.normal(x, y, z); - return this; + return this.delegate.normal(x, y, z); } @Override diff --git a/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/ColoredVertexConsumer.java b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/ColoredVertexConsumer.java index 926bd58..97b224c 100644 --- a/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/ColoredVertexConsumer.java +++ b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/ColoredVertexConsumer.java @@ -19,43 +19,37 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { @Override public VertexConsumer vertex(double x, double y, double z) { - this.delegate.vertex(x, y, z); - return this; + return this.delegate.vertex(x, y, z); } @Override public VertexConsumer color(int red, int green, int blue, int alpha) { - this.delegate.color( + return this.delegate.color( (int) (red * this.red), (int) (green * this.green), (int) (blue * this.blue), alpha ); - return this; } @Override public VertexConsumer uv(float u, float v) { - this.delegate.uv(u, v); - return this; + return this.delegate.uv(u, v); } @Override public VertexConsumer overlayCoords(int u, int v) { - this.delegate.overlayCoords(u, v); - return this; + return this.delegate.overlayCoords(u, v); } @Override public VertexConsumer uv2(int u, int v) { - this.delegate.uv2(u, v); - return this; + return this.delegate.uv2(u, v); } @Override public VertexConsumer normal(float x, float y, float z) { - this.delegate.normal(x, y, z); - return this; + return this.delegate.normal(x, y, z); } @Override diff --git a/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/ColoredVertexConsumer.java b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/ColoredVertexConsumer.java index b5203ed..faf53ff 100644 --- a/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/ColoredVertexConsumer.java +++ b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/ColoredVertexConsumer.java @@ -19,43 +19,37 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { @Override public VertexConsumer vertex(double x, double y, double z) { - this.delegate.vertex(x, y, z); - return this; + return this.delegate.vertex(x, y, z); } @Override public VertexConsumer color(int red, int green, int blue, int alpha) { - this.delegate.color( + return this.delegate.color( (int) (red * this.red), (int) (green * this.green), (int) (blue * this.blue), alpha ); - return this; } @Override public VertexConsumer uv(float u, float v) { - this.delegate.uv(u, v); - return this; + return this.delegate.uv(u, v); } @Override public VertexConsumer overlayCoords(int u, int v) { - this.delegate.overlayCoords(u, v); - return this; + return this.delegate.overlayCoords(u, v); } @Override public VertexConsumer uv2(int u, int v) { - this.delegate.uv2(u, v); - return this; + return this.delegate.uv2(u, v); } @Override public VertexConsumer normal(float x, float y, float z) { - this.delegate.normal(x, y, z); - return this; + return this.delegate.normal(x, y, z); } @Override diff --git a/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/ColoredVertexConsumer.java b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/ColoredVertexConsumer.java index a4b214d..066bc27 100644 --- a/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/ColoredVertexConsumer.java +++ b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/ColoredVertexConsumer.java @@ -19,43 +19,37 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { @Override public VertexConsumer vertex(double x, double y, double z) { - this.delegate.vertex(x, y, z); - return this; + return this.delegate.vertex(x, y, z); } @Override public VertexConsumer color(int red, int green, int blue, int alpha) { - this.delegate.color( + return this.delegate.color( (int) (red * this.red), (int) (green * this.green), (int) (blue * this.blue), alpha ); - return this; } @Override public VertexConsumer uv(float u, float v) { - this.delegate.uv(u, v); - return this; + return this.delegate.uv(u, v); } @Override public VertexConsumer overlayCoords(int u, int v) { - this.delegate.overlayCoords(u, v); - return this; + return this.delegate.overlayCoords(u, v); } @Override public VertexConsumer uv2(int u, int v) { - this.delegate.uv2(u, v); - return this; + return this.delegate.uv2(u, v); } @Override public VertexConsumer normal(float x, float y, float z) { - this.delegate.normal(x, y, z); - return this; + return this.delegate.normal(x, y, z); } @Override diff --git a/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/ColoredVertexConsumer.java b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/ColoredVertexConsumer.java index 607ee71..1001b4d 100644 --- a/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/ColoredVertexConsumer.java +++ b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/ColoredVertexConsumer.java @@ -19,43 +19,37 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { @Override public VertexConsumer vertex(double x, double y, double z) { - this.delegate.vertex(x, y, z); - return this; + return this.delegate.vertex(x, y, z); } @Override public VertexConsumer color(int red, int green, int blue, int alpha) { - this.delegate.color( + return this.delegate.color( (int) (red * this.red), (int) (green * this.green), (int) (blue * this.blue), alpha ); - return this; } @Override public VertexConsumer uv(float u, float v) { - this.delegate.uv(u, v); - return this; + return this.delegate.uv(u, v); } @Override public VertexConsumer overlayCoords(int u, int v) { - this.delegate.overlayCoords(u, v); - return this; + return this.delegate.overlayCoords(u, v); } @Override public VertexConsumer uv2(int u, int v) { - this.delegate.uv2(u, v); - return this; + return this.delegate.uv2(u, v); } @Override public VertexConsumer normal(float x, float y, float z) { - this.delegate.normal(x, y, z); - return this; + return this.delegate.normal(x, y, z); } @Override From e1718b875590170d188a7e0877a509fd05469251 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 22:10:04 +0200 Subject: [PATCH 16/23] feat: Add 1.21 implementation --- .../v1_21/ColoredVertexConsumer.java | 54 ++++++++ .../v1_21/CustomRenderTypes.java | 119 ++++++++++++++++++ .../v1_21/mixins/MixinHumanoidArmorLayer.java | 39 ++++++ .../v1_21/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.21.accesswidener | 3 + 5 files changed, 330 insertions(+) create mode 100644 game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/CustomRenderTypes.java create mode 100644 game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_21/resources/glintcolorizer-1.21.accesswidener diff --git a/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/ColoredVertexConsumer.java b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/ColoredVertexConsumer.java new file mode 100644 index 0000000..56f072f --- /dev/null +++ b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/ColoredVertexConsumer.java @@ -0,0 +1,54 @@ +package com.rappytv.glintcolorizer.v1_21; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer addVertex(float x, float y, float z) { + return this.delegate.addVertex(x, y, z); + } + + @Override + public VertexConsumer setColor(int red, int green, int blue, int alpha) { + return this.delegate.setColor( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + } + + @Override + public VertexConsumer setUv(float v, float v1) { + return this.delegate.setUv(v, v1); + } + + @Override + public VertexConsumer setUv1(int i, int i1) { + return this.delegate.setUv1(i, i1); + } + + @Override + public VertexConsumer setUv2(int i, int i1) { + return this.delegate.setUv2(i, i1); + } + + @Override + public VertexConsumer setNormal(float v, float v1, float v2) { + return this.delegate.setNormal(v, v1, v2); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/CustomRenderTypes.java b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/CustomRenderTypes.java new file mode 100644 index 0000000..8680fb2 --- /dev/null +++ b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_21; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..7b5d3dc --- /dev/null +++ b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,39 @@ +package com.rappytv.glintcolorizer.v1_21.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_21.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderGlint", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + MultiBufferSource instance, + RenderType renderType, + Operation original + ) { + VertexConsumer buffer = original.call(instance, renderType); + + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + + return buffer; + } +} diff --git a/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinItemRenderer.java b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..4b3e90f --- /dev/null +++ b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_21.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_21.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_21.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintTranslucent() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_21/resources/glintcolorizer-1.21.accesswidener b/game-runner/src/v1_21/resources/glintcolorizer-1.21.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_21/resources/glintcolorizer-1.21.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From 4ea1a5f9e792e9b523d04ce91ebf5f5a6df0afc9 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 22:17:06 +0200 Subject: [PATCH 17/23] feat: Add 1.21.1 implementation --- .../v1_21_1/ColoredVertexConsumer.java | 54 ++++++++ .../v1_21_1/CustomRenderTypes.java | 119 ++++++++++++++++++ .../mixins/MixinHumanoidArmorLayer.java | 39 ++++++ .../v1_21_1/mixins/MixinItemRenderer.java | 115 +++++++++++++++++ .../glintcolorizer-1.21.1.accesswidener | 3 + 5 files changed, 330 insertions(+) create mode 100644 game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/CustomRenderTypes.java create mode 100644 game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinHumanoidArmorLayer.java create mode 100644 game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_21_1/resources/glintcolorizer-1.21.1.accesswidener diff --git a/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/ColoredVertexConsumer.java b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/ColoredVertexConsumer.java new file mode 100644 index 0000000..3b00228 --- /dev/null +++ b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/ColoredVertexConsumer.java @@ -0,0 +1,54 @@ +package com.rappytv.glintcolorizer.v1_21_1; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer addVertex(float x, float y, float z) { + return this.delegate.addVertex(x, y, z); + } + + @Override + public VertexConsumer setColor(int red, int green, int blue, int alpha) { + return this.delegate.setColor( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + } + + @Override + public VertexConsumer setUv(float v, float v1) { + return this.delegate.setUv(v, v1); + } + + @Override + public VertexConsumer setUv1(int i, int i1) { + return this.delegate.setUv1(i, i1); + } + + @Override + public VertexConsumer setUv2(int i, int i1) { + return this.delegate.setUv2(i, i1); + } + + @Override + public VertexConsumer setNormal(float v, float v1, float v2) { + return this.delegate.setNormal(v, v1, v2); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/CustomRenderTypes.java b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/CustomRenderTypes.java new file mode 100644 index 0000000..5ab2f2c --- /dev/null +++ b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/CustomRenderTypes.java @@ -0,0 +1,119 @@ +package com.rappytv.glintcolorizer.v1_21_1; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_GLINT_DIRECT = create( + "glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create( + "entity_glint_direct_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + true, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } + + public static RenderType getGlowGlintDirect() { + return GLOW_GLINT_DIRECT; + } + + public static RenderType getGlowEntityGlintDirect() { + return GLOW_ENTITY_GLINT_DIRECT; + } +} diff --git a/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinHumanoidArmorLayer.java new file mode 100644 index 0000000..7de1e99 --- /dev/null +++ b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,39 @@ +package com.rappytv.glintcolorizer.v1_21_1.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_21_1.ColoredVertexConsumer; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(HumanoidArmorLayer.class) +public class MixinHumanoidArmorLayer { + + @WrapOperation( + method = "renderGlint", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + MultiBufferSource instance, + RenderType renderType, + Operation original + ) { + VertexConsumer buffer = original.call(instance, renderType); + + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + return new ColoredVertexConsumer(buffer, color); + } + + return buffer; + } +} diff --git a/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinItemRenderer.java b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..728dc68 --- /dev/null +++ b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +package com.rappytv.glintcolorizer.v1_21_1.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_21_1.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_21_1.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } + + @WrapOperation( + method = "render", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBufferDirect( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlintDirect() + : CustomRenderTypes.getGlowEntityGlintDirect(); + } else { + glintType = isItem ? RenderType.glintTranslucent() : RenderType.entityGlintDirect(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_21_1/resources/glintcolorizer-1.21.1.accesswidener b/game-runner/src/v1_21_1/resources/glintcolorizer-1.21.1.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_21_1/resources/glintcolorizer-1.21.1.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From b556c2768a1ec311d302b90fc3eedc4907687a76 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 22:24:49 +0200 Subject: [PATCH 18/23] feat: Add 1.21.3 implementation --- .../v1_21_3/ColoredVertexConsumer.java | 54 ++++++++++++++ .../v1_21_3/CustomRenderTypes.java | 72 +++++++++++++++++++ .../v1_21_3/mixins/MixinItemRenderer.java | 68 ++++++++++++++++++ .../glintcolorizer-1.21.3.accesswidener | 3 + 4 files changed, 197 insertions(+) create mode 100644 game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/CustomRenderTypes.java create mode 100644 game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_21_3/resources/glintcolorizer-1.21.3.accesswidener diff --git a/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/ColoredVertexConsumer.java b/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/ColoredVertexConsumer.java new file mode 100644 index 0000000..003aad3 --- /dev/null +++ b/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/ColoredVertexConsumer.java @@ -0,0 +1,54 @@ +package com.rappytv.glintcolorizer.v1_21_3; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer addVertex(float x, float y, float z) { + return this.delegate.addVertex(x, y, z); + } + + @Override + public VertexConsumer setColor(int red, int green, int blue, int alpha) { + return this.delegate.setColor( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + } + + @Override + public VertexConsumer setUv(float v, float v1) { + return this.delegate.setUv(v, v1); + } + + @Override + public VertexConsumer setUv1(int i, int i1) { + return this.delegate.setUv1(i, i1); + } + + @Override + public VertexConsumer setUv2(int i, int i1) { + return this.delegate.setUv2(i, i1); + } + + @Override + public VertexConsumer setNormal(float v, float v1, float v2) { + return this.delegate.setNormal(v, v1, v2); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/CustomRenderTypes.java b/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/CustomRenderTypes.java new file mode 100644 index 0000000..d5ec767 --- /dev/null +++ b/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/CustomRenderTypes.java @@ -0,0 +1,72 @@ +package com.rappytv.glintcolorizer.v1_21_3; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.util.TriState; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + TriState.TRUE, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + TriState.TRUE, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } +} diff --git a/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/mixins/MixinItemRenderer.java b/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..c48c787 --- /dev/null +++ b/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/mixins/MixinItemRenderer.java @@ -0,0 +1,68 @@ +package com.rappytv.glintcolorizer.v1_21_3.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_21_3.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_21_3.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "renderItem", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_21_3/resources/glintcolorizer-1.21.3.accesswidener b/game-runner/src/v1_21_3/resources/glintcolorizer-1.21.3.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_21_3/resources/glintcolorizer-1.21.3.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From f90d7a696bc3f81e584d60dfd2a3e5f274e473b5 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 22:28:18 +0200 Subject: [PATCH 19/23] chore: Register 1.21.5-1.21.10 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6168956..9243d49 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ org.gradle.jvmargs=-Xmx4096m -net.labymod.minecraft-versions=1.8.9;1.12.2;1.16.5;1.17.1;1.18.2;1.19.2;1.19.3;1.19.4;1.20.1;1.20.2;1.20.4;1.20.5;1.20.6;1.21;1.21.1;1.21.3;1.21.4 \ No newline at end of file +net.labymod.minecraft-versions=1.8.9;1.12.2;1.16.5;1.17.1;1.18.2;1.19.2;1.19.3;1.19.4;1.20.1;1.20.2;1.20.4;1.20.5;1.20.6;1.21;1.21.1;1.21.3;1.21.4;1.21.5;1.21.8;1.21.10 \ No newline at end of file From 81ba435be34334927d4e9d14e910d452a04b6a30 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Wed, 8 Oct 2025 22:32:09 +0200 Subject: [PATCH 20/23] feat: Add 1.21.4 implementation --- .../v1_21_4/ColoredVertexConsumer.java | 54 ++++++++++++++ .../v1_21_4/CustomRenderTypes.java | 72 +++++++++++++++++++ .../v1_21_4/mixins/MixinItemRenderer.java | 68 ++++++++++++++++++ .../glintcolorizer-1.21.4.accesswidener | 3 + 4 files changed, 197 insertions(+) create mode 100644 game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/ColoredVertexConsumer.java create mode 100644 game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/CustomRenderTypes.java create mode 100644 game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/mixins/MixinItemRenderer.java create mode 100644 game-runner/src/v1_21_4/resources/glintcolorizer-1.21.4.accesswidener diff --git a/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/ColoredVertexConsumer.java b/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/ColoredVertexConsumer.java new file mode 100644 index 0000000..f35d2f7 --- /dev/null +++ b/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/ColoredVertexConsumer.java @@ -0,0 +1,54 @@ +package com.rappytv.glintcolorizer.v1_21_4; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; + +public class ColoredVertexConsumer implements VertexConsumer { + + private final VertexConsumer delegate; + private final float red; + private final float green; + private final float blue; + + public ColoredVertexConsumer(VertexConsumer delegate, Color color) { + this.delegate = delegate; + this.red = color.getRed() / 255f; + this.green = color.getGreen() / 255f; + this.blue = color.getBlue() / 255f; + } + + @Override + public VertexConsumer addVertex(float x, float y, float z) { + return this.delegate.addVertex(x, y, z); + } + + @Override + public VertexConsumer setColor(int red, int green, int blue, int alpha) { + return this.delegate.setColor( + (int) (red * this.red), + (int) (green * this.green), + (int) (blue * this.blue), + alpha + ); + } + + @Override + public VertexConsumer setUv(float v, float v1) { + return this.delegate.setUv(v, v1); + } + + @Override + public VertexConsumer setUv1(int i, int i1) { + return this.delegate.setUv1(i, i1); + } + + @Override + public VertexConsumer setUv2(int i, int i1) { + return this.delegate.setUv2(i, i1); + } + + @Override + public VertexConsumer setNormal(float v, float v1, float v2) { + return this.delegate.setNormal(v, v1, v2); + } +} \ No newline at end of file diff --git a/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/CustomRenderTypes.java b/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/CustomRenderTypes.java new file mode 100644 index 0000000..e68e599 --- /dev/null +++ b/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/CustomRenderTypes.java @@ -0,0 +1,72 @@ +package com.rappytv.glintcolorizer.v1_21_4; + +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import net.minecraft.util.TriState; + +public class CustomRenderTypes extends RenderType { + + private static final RenderType GLOW_GLINT = create( + "glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ITEM, + TriState.TRUE, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_GLINT_SHADER) + .createCompositeState(false) + ); + + private static final RenderType GLOW_ENTITY_GLINT = create( + "entity_glint_glow", + DefaultVertexFormat.POSITION_TEX, + Mode.QUADS, + 256, + CompositeState.builder() + .setTextureState(new TextureStateShard( + ItemRenderer.ENCHANTED_GLINT_ENTITY, + TriState.TRUE, + false + )) + .setWriteMaskState(COLOR_WRITE) + .setCullState(NO_CULL) + .setDepthTestState(NO_DEPTH_TEST) + .setTransparencyState(GLINT_TRANSPARENCY) + .setTexturingState(ENTITY_GLINT_TEXTURING) + .setShaderState(ShaderStateShard.RENDERTYPE_ENTITY_GLINT_SHADER) + .createCompositeState(false) + ); + + private CustomRenderTypes( + String name, + VertexFormat format, + Mode mode, + int bufferSize, + boolean affectsCrumbling, + boolean sortOnUpload, + Runnable setupState, + Runnable clearState + ) { + super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState); + } + + public static RenderType getGlowGlint() { + return GLOW_GLINT; + } + + public static RenderType getGlowEntityGlint() { + return GLOW_ENTITY_GLINT; + } +} diff --git a/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/mixins/MixinItemRenderer.java b/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/mixins/MixinItemRenderer.java new file mode 100644 index 0000000..864faff --- /dev/null +++ b/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/mixins/MixinItemRenderer.java @@ -0,0 +1,68 @@ +package com.rappytv.glintcolorizer.v1_21_4.mixins; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.blaze3d.vertex.VertexMultiConsumer; +import com.rappytv.glintcolorizer.api.ItemEffect; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +import com.rappytv.glintcolorizer.v1_21_4.ColoredVertexConsumer; +import com.rappytv.glintcolorizer.v1_21_4.CustomRenderTypes; +import net.labymod.api.util.Color; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.ItemRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(ItemRenderer.class) +public class MixinItemRenderer { + + @WrapOperation( + method = "renderItem", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;" + ) + ) + private static VertexConsumer modifyFoilBuffer( + MultiBufferSource buffer, + RenderType renderType, + boolean isItem, + boolean hasFoil, + Operation original + ) { + if (!hasFoil) { + return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false); + } + + ItemEffect effect = GlintColorizerAddon.getItemEffect(); + if (effect == ItemEffect.NONE) { + return buffer.getBuffer(renderType); + } + + Color color = GlintColorizerAddon.getItemGlintColor(); + + RenderType glintType; + if (effect == ItemEffect.GLOW) { + glintType = isItem + ? CustomRenderTypes.getGlowGlint() + : CustomRenderTypes.getGlowEntityGlint(); + } else { + glintType = isItem ? RenderType.glint() : RenderType.entityGlint(); + } + + VertexConsumer baseBuffer = buffer.getBuffer(renderType); + VertexConsumer glintBuffer = buffer.getBuffer(glintType); + + if (color != null) { + return new ColoredVertexConsumer( + VertexMultiConsumer.create(glintBuffer, baseBuffer), + color + ); + } + + return VertexMultiConsumer.create(glintBuffer, baseBuffer); + } +} + diff --git a/game-runner/src/v1_21_4/resources/glintcolorizer-1.21.4.accesswidener b/game-runner/src/v1_21_4/resources/glintcolorizer-1.21.4.accesswidener new file mode 100644 index 0000000..ee4603e --- /dev/null +++ b/game-runner/src/v1_21_4/resources/glintcolorizer-1.21.4.accesswidener @@ -0,0 +1,3 @@ +accessWidener v1 named + +accessible method net/minecraft/client/renderer/RenderType create (Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;ILnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; \ No newline at end of file From 5f15b63e8b468550c4b4be2d579d38bcbda34a81 Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 10 Oct 2025 05:15:53 +0200 Subject: [PATCH 21/23] fix: Fix custom armor glint color not working in 1.20.x --- .../v1_20_1/mixins/MixinHumanoidArmorLayer.java | 16 ++++++++++++---- .../v1_20_2/mixins/MixinHumanoidArmorLayer.java | 16 ++++++++++++---- .../v1_20_4/mixins/MixinHumanoidArmorLayer.java | 16 ++++++++++++---- .../v1_20_5/mixins/MixinHumanoidArmorLayer.java | 16 ++++++++++++---- .../v1_20_6/mixins/MixinHumanoidArmorLayer.java | 16 ++++++++++++---- 5 files changed, 60 insertions(+), 20 deletions(-) diff --git a/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinHumanoidArmorLayer.java index 9c7771d..fbfd18d 100644 --- a/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinHumanoidArmorLayer.java +++ b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinHumanoidArmorLayer.java @@ -2,9 +2,9 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.VertexConsumer; import com.rappytv.glintcolorizer.core.GlintColorizerAddon; -import com.rappytv.glintcolorizer.v1_20_1.ColoredVertexConsumer; import net.labymod.api.util.Color; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -22,16 +22,24 @@ public class MixinHumanoidArmorLayer { target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" ) ) - private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + private VertexConsumer redirectFoilBuffer( MultiBufferSource instance, RenderType renderType, Operation original ) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + float r = color.getRed() / 255.0f; + float g = color.getGreen() / 255.0f; + float b = color.getBlue() / 255.0f; + RenderSystem.setShaderColor(r, g, b, 1.0f); + } + VertexConsumer buffer = original.call(instance, renderType); - Color color = GlintColorizerAddon.getArmorGlintColor(); if (color != null) { - return new ColoredVertexConsumer(buffer, color); + // Reset to default white so later rendering isn’t tinted + RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); } return buffer; diff --git a/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinHumanoidArmorLayer.java index 1e74297..b046874 100644 --- a/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinHumanoidArmorLayer.java +++ b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinHumanoidArmorLayer.java @@ -2,9 +2,9 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.VertexConsumer; import com.rappytv.glintcolorizer.core.GlintColorizerAddon; -import com.rappytv.glintcolorizer.v1_20_2.ColoredVertexConsumer; import net.labymod.api.util.Color; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -22,16 +22,24 @@ public class MixinHumanoidArmorLayer { target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" ) ) - private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + private VertexConsumer redirectFoilBuffer( MultiBufferSource instance, RenderType renderType, Operation original ) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + float r = color.getRed() / 255.0f; + float g = color.getGreen() / 255.0f; + float b = color.getBlue() / 255.0f; + RenderSystem.setShaderColor(r, g, b, 1.0f); + } + VertexConsumer buffer = original.call(instance, renderType); - Color color = GlintColorizerAddon.getArmorGlintColor(); if (color != null) { - return new ColoredVertexConsumer(buffer, color); + // Reset to default white so later rendering isn’t tinted + RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); } return buffer; diff --git a/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinHumanoidArmorLayer.java index 5bbd90a..4772533 100644 --- a/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinHumanoidArmorLayer.java +++ b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinHumanoidArmorLayer.java @@ -2,9 +2,9 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.VertexConsumer; import com.rappytv.glintcolorizer.core.GlintColorizerAddon; -import com.rappytv.glintcolorizer.v1_20_4.ColoredVertexConsumer; import net.labymod.api.util.Color; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -22,16 +22,24 @@ public class MixinHumanoidArmorLayer { target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" ) ) - private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + private VertexConsumer redirectFoilBuffer( MultiBufferSource instance, RenderType renderType, Operation original ) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + float r = color.getRed() / 255.0f; + float g = color.getGreen() / 255.0f; + float b = color.getBlue() / 255.0f; + RenderSystem.setShaderColor(r, g, b, 1.0f); + } + VertexConsumer buffer = original.call(instance, renderType); - Color color = GlintColorizerAddon.getArmorGlintColor(); if (color != null) { - return new ColoredVertexConsumer(buffer, color); + // Reset to default white so later rendering isn’t tinted + RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); } return buffer; diff --git a/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinHumanoidArmorLayer.java index ac7db60..98af175 100644 --- a/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinHumanoidArmorLayer.java +++ b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinHumanoidArmorLayer.java @@ -2,9 +2,9 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.VertexConsumer; import com.rappytv.glintcolorizer.core.GlintColorizerAddon; -import com.rappytv.glintcolorizer.v1_20_5.ColoredVertexConsumer; import net.labymod.api.util.Color; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -22,16 +22,24 @@ public class MixinHumanoidArmorLayer { target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" ) ) - private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + private VertexConsumer redirectFoilBuffer( MultiBufferSource instance, RenderType renderType, Operation original ) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + float r = color.getRed() / 255.0f; + float g = color.getGreen() / 255.0f; + float b = color.getBlue() / 255.0f; + RenderSystem.setShaderColor(r, g, b, 1.0f); + } + VertexConsumer buffer = original.call(instance, renderType); - Color color = GlintColorizerAddon.getArmorGlintColor(); if (color != null) { - return new ColoredVertexConsumer(buffer, color); + // Reset to default white so later rendering isn’t tinted + RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); } return buffer; diff --git a/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinHumanoidArmorLayer.java index f52bf9a..b2e3b3f 100644 --- a/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinHumanoidArmorLayer.java +++ b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinHumanoidArmorLayer.java @@ -2,9 +2,9 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.VertexConsumer; import com.rappytv.glintcolorizer.core.GlintColorizerAddon; -import com.rappytv.glintcolorizer.v1_20_6.ColoredVertexConsumer; import net.labymod.api.util.Color; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -22,16 +22,24 @@ public class MixinHumanoidArmorLayer { target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" ) ) - private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing + private VertexConsumer redirectFoilBuffer( MultiBufferSource instance, RenderType renderType, Operation original ) { + Color color = GlintColorizerAddon.getArmorGlintColor(); + if (color != null) { + float r = color.getRed() / 255.0f; + float g = color.getGreen() / 255.0f; + float b = color.getBlue() / 255.0f; + RenderSystem.setShaderColor(r, g, b, 1.0f); + } + VertexConsumer buffer = original.call(instance, renderType); - Color color = GlintColorizerAddon.getArmorGlintColor(); if (color != null) { - return new ColoredVertexConsumer(buffer, color); + // Reset to default white so later rendering isn’t tinted + RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f); } return buffer; From e393fdb5faa6c9b2919cdd4661c87860d7254e0a Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 10 Oct 2025 05:24:44 +0200 Subject: [PATCH 22/23] chore: Add missing NotNull annotations in ColoredVertexConsumer --- .../glintcolorizer/v1_21/ColoredVertexConsumer.java | 13 +++++++------ .../v1_21_1/ColoredVertexConsumer.java | 13 +++++++------ .../v1_21_3/ColoredVertexConsumer.java | 13 +++++++------ .../v1_21_4/ColoredVertexConsumer.java | 13 +++++++------ 4 files changed, 28 insertions(+), 24 deletions(-) diff --git a/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/ColoredVertexConsumer.java b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/ColoredVertexConsumer.java index 56f072f..8012887 100644 --- a/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/ColoredVertexConsumer.java +++ b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/ColoredVertexConsumer.java @@ -2,6 +2,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import net.labymod.api.util.Color; +import org.jetbrains.annotations.NotNull; public class ColoredVertexConsumer implements VertexConsumer { @@ -18,12 +19,12 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { } @Override - public VertexConsumer addVertex(float x, float y, float z) { + public @NotNull VertexConsumer addVertex(float x, float y, float z) { return this.delegate.addVertex(x, y, z); } @Override - public VertexConsumer setColor(int red, int green, int blue, int alpha) { + public @NotNull VertexConsumer setColor(int red, int green, int blue, int alpha) { return this.delegate.setColor( (int) (red * this.red), (int) (green * this.green), @@ -33,22 +34,22 @@ public VertexConsumer setColor(int red, int green, int blue, int alpha) { } @Override - public VertexConsumer setUv(float v, float v1) { + public @NotNull VertexConsumer setUv(float v, float v1) { return this.delegate.setUv(v, v1); } @Override - public VertexConsumer setUv1(int i, int i1) { + public @NotNull VertexConsumer setUv1(int i, int i1) { return this.delegate.setUv1(i, i1); } @Override - public VertexConsumer setUv2(int i, int i1) { + public @NotNull VertexConsumer setUv2(int i, int i1) { return this.delegate.setUv2(i, i1); } @Override - public VertexConsumer setNormal(float v, float v1, float v2) { + public @NotNull VertexConsumer setNormal(float v, float v1, float v2) { return this.delegate.setNormal(v, v1, v2); } } \ No newline at end of file diff --git a/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/ColoredVertexConsumer.java b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/ColoredVertexConsumer.java index 3b00228..b9cad9e 100644 --- a/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/ColoredVertexConsumer.java +++ b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/ColoredVertexConsumer.java @@ -2,6 +2,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import net.labymod.api.util.Color; +import org.jetbrains.annotations.NotNull; public class ColoredVertexConsumer implements VertexConsumer { @@ -18,12 +19,12 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { } @Override - public VertexConsumer addVertex(float x, float y, float z) { + public @NotNull VertexConsumer addVertex(float x, float y, float z) { return this.delegate.addVertex(x, y, z); } @Override - public VertexConsumer setColor(int red, int green, int blue, int alpha) { + public @NotNull VertexConsumer setColor(int red, int green, int blue, int alpha) { return this.delegate.setColor( (int) (red * this.red), (int) (green * this.green), @@ -33,22 +34,22 @@ public VertexConsumer setColor(int red, int green, int blue, int alpha) { } @Override - public VertexConsumer setUv(float v, float v1) { + public @NotNull VertexConsumer setUv(float v, float v1) { return this.delegate.setUv(v, v1); } @Override - public VertexConsumer setUv1(int i, int i1) { + public @NotNull VertexConsumer setUv1(int i, int i1) { return this.delegate.setUv1(i, i1); } @Override - public VertexConsumer setUv2(int i, int i1) { + public @NotNull VertexConsumer setUv2(int i, int i1) { return this.delegate.setUv2(i, i1); } @Override - public VertexConsumer setNormal(float v, float v1, float v2) { + public @NotNull VertexConsumer setNormal(float v, float v1, float v2) { return this.delegate.setNormal(v, v1, v2); } } \ No newline at end of file diff --git a/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/ColoredVertexConsumer.java b/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/ColoredVertexConsumer.java index 003aad3..1cb0092 100644 --- a/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/ColoredVertexConsumer.java +++ b/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/ColoredVertexConsumer.java @@ -2,6 +2,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import net.labymod.api.util.Color; +import org.jetbrains.annotations.NotNull; public class ColoredVertexConsumer implements VertexConsumer { @@ -18,12 +19,12 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { } @Override - public VertexConsumer addVertex(float x, float y, float z) { + public @NotNull VertexConsumer addVertex(float x, float y, float z) { return this.delegate.addVertex(x, y, z); } @Override - public VertexConsumer setColor(int red, int green, int blue, int alpha) { + public @NotNull VertexConsumer setColor(int red, int green, int blue, int alpha) { return this.delegate.setColor( (int) (red * this.red), (int) (green * this.green), @@ -33,22 +34,22 @@ public VertexConsumer setColor(int red, int green, int blue, int alpha) { } @Override - public VertexConsumer setUv(float v, float v1) { + public @NotNull VertexConsumer setUv(float v, float v1) { return this.delegate.setUv(v, v1); } @Override - public VertexConsumer setUv1(int i, int i1) { + public @NotNull VertexConsumer setUv1(int i, int i1) { return this.delegate.setUv1(i, i1); } @Override - public VertexConsumer setUv2(int i, int i1) { + public @NotNull VertexConsumer setUv2(int i, int i1) { return this.delegate.setUv2(i, i1); } @Override - public VertexConsumer setNormal(float v, float v1, float v2) { + public @NotNull VertexConsumer setNormal(float v, float v1, float v2) { return this.delegate.setNormal(v, v1, v2); } } \ No newline at end of file diff --git a/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/ColoredVertexConsumer.java b/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/ColoredVertexConsumer.java index f35d2f7..ad3827b 100644 --- a/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/ColoredVertexConsumer.java +++ b/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/ColoredVertexConsumer.java @@ -2,6 +2,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import net.labymod.api.util.Color; +import org.jetbrains.annotations.NotNull; public class ColoredVertexConsumer implements VertexConsumer { @@ -18,12 +19,12 @@ public ColoredVertexConsumer(VertexConsumer delegate, Color color) { } @Override - public VertexConsumer addVertex(float x, float y, float z) { + public @NotNull VertexConsumer addVertex(float x, float y, float z) { return this.delegate.addVertex(x, y, z); } @Override - public VertexConsumer setColor(int red, int green, int blue, int alpha) { + public @NotNull VertexConsumer setColor(int red, int green, int blue, int alpha) { return this.delegate.setColor( (int) (red * this.red), (int) (green * this.green), @@ -33,22 +34,22 @@ public VertexConsumer setColor(int red, int green, int blue, int alpha) { } @Override - public VertexConsumer setUv(float v, float v1) { + public @NotNull VertexConsumer setUv(float v, float v1) { return this.delegate.setUv(v, v1); } @Override - public VertexConsumer setUv1(int i, int i1) { + public @NotNull VertexConsumer setUv1(int i, int i1) { return this.delegate.setUv1(i, i1); } @Override - public VertexConsumer setUv2(int i, int i1) { + public @NotNull VertexConsumer setUv2(int i, int i1) { return this.delegate.setUv2(i, i1); } @Override - public VertexConsumer setNormal(float v, float v1, float v2) { + public @NotNull VertexConsumer setNormal(float v, float v1, float v2) { return this.delegate.setNormal(v, v1, v2); } } \ No newline at end of file From 8c34ee6355efd06a53f36452ba21148c3c12b74e Mon Sep 17 00:00:00 2001 From: RappyTV Date: Fri, 10 Oct 2025 05:28:12 +0200 Subject: [PATCH 23/23] chore: Prepare pre release * Bump version * Remove non-functional classes * Adjust version string * Restrict armor glint settings by version --- build.gradle.kts | 4 +- .../core/GlintColorizerConfig.java | 3 ++ .../v1_21/mixins/MixinHumanoidArmorLayer.java | 39 ------------------- .../mixins/MixinHumanoidArmorLayer.java | 39 ------------------- 4 files changed, 5 insertions(+), 80 deletions(-) delete mode 100644 game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinHumanoidArmorLayer.java delete mode 100644 game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinHumanoidArmorLayer.java diff --git a/build.gradle.kts b/build.gradle.kts index 86f43b5..81f2b09 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,7 +6,7 @@ plugins { val versions = providers.gradleProperty("net.labymod.minecraft-versions").get().split(";") group = "org.example" -version = providers.environmentVariable("VERSION").getOrElse("1.0.0") +version = providers.environmentVariable("VERSION").getOrElse("1.0.1-pre1") labyMod { defaultPackageName = "com.rappytv.glintcolorizer" @@ -16,7 +16,7 @@ labyMod { displayName = "GlintColorizer" author = "RappyTV" description = "Lets you adjust the color of enchanted items and armor." - minecraftVersion = "1.8.9,1.12.2" + minecraftVersion = "1.8.9<1.21.4" version = rootProject.version.toString() } diff --git a/core/src/main/java/com/rappytv/glintcolorizer/core/GlintColorizerConfig.java b/core/src/main/java/com/rappytv/glintcolorizer/core/GlintColorizerConfig.java index 3ca6ad5..2951747 100644 --- a/core/src/main/java/com/rappytv/glintcolorizer/core/GlintColorizerConfig.java +++ b/core/src/main/java/com/rappytv/glintcolorizer/core/GlintColorizerConfig.java @@ -8,6 +8,7 @@ import net.labymod.api.client.gui.screen.widget.widgets.input.dropdown.DropdownWidget.DropdownSetting; import net.labymod.api.configuration.loader.annotation.SpriteSlot; import net.labymod.api.configuration.loader.annotation.SpriteTexture; +import net.labymod.api.configuration.loader.annotation.VersionCompatibility; import net.labymod.api.configuration.loader.property.ConfigProperty; import net.labymod.api.configuration.settings.annotation.SettingRequires; import net.labymod.api.configuration.settings.annotation.SettingSection; @@ -35,11 +36,13 @@ public class GlintColorizerConfig extends AddonConfig { private final ConfigProperty customItemGlintColor = new ConfigProperty<>(Color.WHITE); @SettingSection("armor") + @VersionCompatibility("1.8<1.20.6") @SpriteSlot(x = 2) @SwitchSetting private final ConfigProperty enableCustomArmorGlintColor = new ConfigProperty<>(true); @SettingRequires("enableCustomArmorGlintColor") + @VersionCompatibility("1.8<1.20.6") @SpriteSlot(size = 32, x = 3) @ColorPickerSetting(chroma = true) private final ConfigProperty customArmorGlintColor = new ConfigProperty<>(NamedTextColor.AQUA.color()); diff --git a/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinHumanoidArmorLayer.java deleted file mode 100644 index 7b5d3dc..0000000 --- a/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/mixins/MixinHumanoidArmorLayer.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.rappytv.glintcolorizer.v1_21.mixins; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.rappytv.glintcolorizer.core.GlintColorizerAddon; -import com.rappytv.glintcolorizer.v1_21.ColoredVertexConsumer; -import net.labymod.api.util.Color; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(HumanoidArmorLayer.class) -public class MixinHumanoidArmorLayer { - - @WrapOperation( - method = "renderGlint", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" - ) - ) - private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing - MultiBufferSource instance, - RenderType renderType, - Operation original - ) { - VertexConsumer buffer = original.call(instance, renderType); - - Color color = GlintColorizerAddon.getArmorGlintColor(); - if (color != null) { - return new ColoredVertexConsumer(buffer, color); - } - - return buffer; - } -} diff --git a/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinHumanoidArmorLayer.java b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinHumanoidArmorLayer.java deleted file mode 100644 index 7de1e99..0000000 --- a/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/mixins/MixinHumanoidArmorLayer.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.rappytv.glintcolorizer.v1_21_1.mixins; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.rappytv.glintcolorizer.core.GlintColorizerAddon; -import com.rappytv.glintcolorizer.v1_21_1.ColoredVertexConsumer; -import net.labymod.api.util.Color; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(HumanoidArmorLayer.class) -public class MixinHumanoidArmorLayer { - - @WrapOperation( - method = "renderGlint", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/renderer/MultiBufferSource;getBuffer(Lnet/minecraft/client/renderer/RenderType;)Lcom/mojang/blaze3d/vertex/VertexConsumer;" - ) - ) - private VertexConsumer redirectFoilBuffer( // TODO: Fix color not changing - MultiBufferSource instance, - RenderType renderType, - Operation original - ) { - VertexConsumer buffer = original.call(instance, renderType); - - Color color = GlintColorizerAddon.getArmorGlintColor(); - if (color != null) { - return new ColoredVertexConsumer(buffer, color); - } - - return buffer; - } -}