diff --git a/build.gradle.kts b/build.gradle.kts index 67fc6de..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,12 +16,15 @@ 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() } minecraft { registerVersion(versions.toTypedArray()) { + + accessWidener.set(file("./game-runner/src/${this.sourceSetName}/resources/glintcolorizer-${versionId}.accesswidener")) + runs { getByName("client") { devLogin = true 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_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..b992788 --- /dev/null +++ b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/ColoredVertexConsumer.java @@ -0,0 +1,59 @@ +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) { + 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(); + } +} \ 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..517df25 --- /dev/null +++ b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/CustomRenderTypes.java @@ -0,0 +1,115 @@ +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..629df1f --- /dev/null +++ b/game-runner/src/v1_16_5/java/com/rappytv/glintcolorizer/v1_16_5/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +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); + } +} + 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..080b6ef --- /dev/null +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/ColoredVertexConsumer.java @@ -0,0 +1,69 @@ +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) { + 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_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..a812739 --- /dev/null +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/CustomRenderTypes.java @@ -0,0 +1,119 @@ +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 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, + 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..abeb595 --- /dev/null +++ b/game-runner/src/v1_17_1/java/com/rappytv/glintcolorizer/v1_17_1/mixins/MixinItemRenderer.java @@ -0,0 +1,115 @@ +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); + } +} + 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 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..45a638f --- /dev/null +++ b/game-runner/src/v1_18_2/java/com/rappytv/glintcolorizer/v1_18_2/ColoredVertexConsumer.java @@ -0,0 +1,69 @@ +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) { + 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_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 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..d132cb2 --- /dev/null +++ b/game-runner/src/v1_19_2/java/com/rappytv/glintcolorizer/v1_19_2/ColoredVertexConsumer.java @@ -0,0 +1,69 @@ +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) { + 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_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 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..71480dd --- /dev/null +++ b/game-runner/src/v1_19_3/java/com/rappytv/glintcolorizer/v1_19_3/ColoredVertexConsumer.java @@ -0,0 +1,69 @@ +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) { + 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_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 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..239773d --- /dev/null +++ b/game-runner/src/v1_19_4/java/com/rappytv/glintcolorizer/v1_19_4/ColoredVertexConsumer.java @@ -0,0 +1,69 @@ +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) { + 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_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 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..97b224c --- /dev/null +++ b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/ColoredVertexConsumer.java @@ -0,0 +1,69 @@ +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) { + 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_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..fbfd18d --- /dev/null +++ b/game-runner/src/v1_20_1/java/com/rappytv/glintcolorizer/v1_20_1/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,47 @@ +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.systems.RenderSystem; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +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( + 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); + + if (color != null) { + // 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_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 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..faf53ff --- /dev/null +++ b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/ColoredVertexConsumer.java @@ -0,0 +1,69 @@ +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) { + 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_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..b046874 --- /dev/null +++ b/game-runner/src/v1_20_2/java/com/rappytv/glintcolorizer/v1_20_2/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,47 @@ +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.systems.RenderSystem; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +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( + 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); + + if (color != null) { + // 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/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 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..066bc27 --- /dev/null +++ b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/ColoredVertexConsumer.java @@ -0,0 +1,69 @@ +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) { + 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_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..4772533 --- /dev/null +++ b/game-runner/src/v1_20_4/java/com/rappytv/glintcolorizer/v1_20_4/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,47 @@ +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.systems.RenderSystem; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +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( + 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); + + if (color != null) { + // 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/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 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..1001b4d --- /dev/null +++ b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/ColoredVertexConsumer.java @@ -0,0 +1,69 @@ +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) { + 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_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..98af175 --- /dev/null +++ b/game-runner/src/v1_20_5/java/com/rappytv/glintcolorizer/v1_20_5/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,47 @@ +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.systems.RenderSystem; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +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( + 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); + + if (color != null) { + // 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/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 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..b2e3b3f --- /dev/null +++ b/game-runner/src/v1_20_6/java/com/rappytv/glintcolorizer/v1_20_6/mixins/MixinHumanoidArmorLayer.java @@ -0,0 +1,47 @@ +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.systems.RenderSystem; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.rappytv.glintcolorizer.core.GlintColorizerAddon; +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( + 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); + + if (color != null) { + // 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/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 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..8012887 --- /dev/null +++ b/game-runner/src/v1_21/java/com/rappytv/glintcolorizer/v1_21/ColoredVertexConsumer.java @@ -0,0 +1,55 @@ +package com.rappytv.glintcolorizer.v1_21; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; +import org.jetbrains.annotations.NotNull; + +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 @NotNull VertexConsumer addVertex(float x, float y, float z) { + return this.delegate.addVertex(x, y, z); + } + + @Override + public @NotNull 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 @NotNull VertexConsumer setUv(float v, float v1) { + return this.delegate.setUv(v, v1); + } + + @Override + public @NotNull VertexConsumer setUv1(int i, int i1) { + return this.delegate.setUv1(i, i1); + } + + @Override + public @NotNull VertexConsumer setUv2(int i, int i1) { + return this.delegate.setUv2(i, i1); + } + + @Override + 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/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/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 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..b9cad9e --- /dev/null +++ b/game-runner/src/v1_21_1/java/com/rappytv/glintcolorizer/v1_21_1/ColoredVertexConsumer.java @@ -0,0 +1,55 @@ +package com.rappytv.glintcolorizer.v1_21_1; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; +import org.jetbrains.annotations.NotNull; + +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 @NotNull VertexConsumer addVertex(float x, float y, float z) { + return this.delegate.addVertex(x, y, z); + } + + @Override + public @NotNull 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 @NotNull VertexConsumer setUv(float v, float v1) { + return this.delegate.setUv(v, v1); + } + + @Override + public @NotNull VertexConsumer setUv1(int i, int i1) { + return this.delegate.setUv1(i, i1); + } + + @Override + public @NotNull VertexConsumer setUv2(int i, int i1) { + return this.delegate.setUv2(i, i1); + } + + @Override + 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/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/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 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..1cb0092 --- /dev/null +++ b/game-runner/src/v1_21_3/java/com/rappytv/glintcolorizer/v1_21_3/ColoredVertexConsumer.java @@ -0,0 +1,55 @@ +package com.rappytv.glintcolorizer.v1_21_3; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; +import org.jetbrains.annotations.NotNull; + +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 @NotNull VertexConsumer addVertex(float x, float y, float z) { + return this.delegate.addVertex(x, y, z); + } + + @Override + public @NotNull 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 @NotNull VertexConsumer setUv(float v, float v1) { + return this.delegate.setUv(v, v1); + } + + @Override + public @NotNull VertexConsumer setUv1(int i, int i1) { + return this.delegate.setUv1(i, i1); + } + + @Override + public @NotNull VertexConsumer setUv2(int i, int i1) { + return this.delegate.setUv2(i, i1); + } + + @Override + 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/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 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..ad3827b --- /dev/null +++ b/game-runner/src/v1_21_4/java/com/rappytv/glintcolorizer/v1_21_4/ColoredVertexConsumer.java @@ -0,0 +1,55 @@ +package com.rappytv.glintcolorizer.v1_21_4; + +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.labymod.api.util.Color; +import org.jetbrains.annotations.NotNull; + +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 @NotNull VertexConsumer addVertex(float x, float y, float z) { + return this.delegate.addVertex(x, y, z); + } + + @Override + public @NotNull 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 @NotNull VertexConsumer setUv(float v, float v1) { + return this.delegate.setUv(v, v1); + } + + @Override + public @NotNull VertexConsumer setUv1(int i, int i1) { + return this.delegate.setUv1(i, i1); + } + + @Override + public @NotNull VertexConsumer setUv2(int i, int i1) { + return this.delegate.setUv2(i, i1); + } + + @Override + 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/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 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