Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -35,11 +36,13 @@ public class GlintColorizerConfig extends AddonConfig {
private final ConfigProperty<Color> customItemGlintColor = new ConfigProperty<>(Color.WHITE);

@SettingSection("armor")
@VersionCompatibility("1.8<1.20.6")
@SpriteSlot(x = 2)
@SwitchSetting
private final ConfigProperty<Boolean> enableCustomArmorGlintColor = new ConfigProperty<>(true);

@SettingRequires("enableCustomArmorGlintColor")
@VersionCompatibility("1.8<1.20.6")
@SpriteSlot(size = 32, x = 3)
@ColorPickerSetting(chroma = true)
private final ConfigProperty<Color> customArmorGlintColor = new ConfigProperty<>(NamedTextColor.AQUA.color());
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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<VertexConsumer> 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;
}
}
Original file line number Diff line number Diff line change
@@ -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<VertexConsumer> 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<VertexConsumer> 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);
}
}

Loading