Skip to content

Commit e8a40c3

Browse files
authored
Merge pull request #2 from RappyLabyAddons/feat/more-version-support
feat: Support newer versions
2 parents 3d77143 + 8c34ee6 commit e8a40c3

File tree

73 files changed

+4831
-3
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+4831
-3
lines changed

build.gradle.kts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66
val versions = providers.gradleProperty("net.labymod.minecraft-versions").get().split(";")
77

88
group = "org.example"
9-
version = providers.environmentVariable("VERSION").getOrElse("1.0.0")
9+
version = providers.environmentVariable("VERSION").getOrElse("1.0.1-pre1")
1010

1111
labyMod {
1212
defaultPackageName = "com.rappytv.glintcolorizer"
@@ -16,12 +16,15 @@ labyMod {
1616
displayName = "GlintColorizer"
1717
author = "RappyTV"
1818
description = "Lets you adjust the color of enchanted items and armor."
19-
minecraftVersion = "1.8.9,1.12.2"
19+
minecraftVersion = "1.8.9<1.21.4"
2020
version = rootProject.version.toString()
2121
}
2222

2323
minecraft {
2424
registerVersion(versions.toTypedArray()) {
25+
26+
accessWidener.set(file("./game-runner/src/${this.sourceSetName}/resources/glintcolorizer-${versionId}.accesswidener"))
27+
2528
runs {
2629
getByName("client") {
2730
devLogin = true

core/src/main/java/com/rappytv/glintcolorizer/core/GlintColorizerConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import net.labymod.api.client.gui.screen.widget.widgets.input.dropdown.DropdownWidget.DropdownSetting;
99
import net.labymod.api.configuration.loader.annotation.SpriteSlot;
1010
import net.labymod.api.configuration.loader.annotation.SpriteTexture;
11+
import net.labymod.api.configuration.loader.annotation.VersionCompatibility;
1112
import net.labymod.api.configuration.loader.property.ConfigProperty;
1213
import net.labymod.api.configuration.settings.annotation.SettingRequires;
1314
import net.labymod.api.configuration.settings.annotation.SettingSection;
@@ -35,11 +36,13 @@ public class GlintColorizerConfig extends AddonConfig {
3536
private final ConfigProperty<Color> customItemGlintColor = new ConfigProperty<>(Color.WHITE);
3637

3738
@SettingSection("armor")
39+
@VersionCompatibility("1.8<1.20.6")
3840
@SpriteSlot(x = 2)
3941
@SwitchSetting
4042
private final ConfigProperty<Boolean> enableCustomArmorGlintColor = new ConfigProperty<>(true);
4143

4244
@SettingRequires("enableCustomArmorGlintColor")
45+
@VersionCompatibility("1.8<1.20.6")
4346
@SpriteSlot(size = 32, x = 3)
4447
@ColorPickerSetting(chroma = true)
4548
private final ConfigProperty<Color> customArmorGlintColor = new ConfigProperty<>(NamedTextColor.AQUA.color());
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.rappytv.glintcolorizer.v1_16_5;
2+
3+
import com.mojang.blaze3d.vertex.VertexConsumer;
4+
import net.labymod.api.util.Color;
5+
6+
public class ColoredVertexConsumer implements VertexConsumer {
7+
8+
private final VertexConsumer delegate;
9+
private final float red;
10+
private final float green;
11+
private final float blue;
12+
13+
public ColoredVertexConsumer(VertexConsumer delegate, Color color) {
14+
this.delegate = delegate;
15+
this.red = color.getRed() / 255f;
16+
this.green = color.getGreen() / 255f;
17+
this.blue = color.getBlue() / 255f;
18+
}
19+
20+
@Override
21+
public VertexConsumer vertex(double x, double y, double z) {
22+
return this.delegate.vertex(x, y, z);
23+
}
24+
25+
@Override
26+
public VertexConsumer color(int red, int green, int blue, int alpha) {
27+
return this.delegate.color(
28+
(int) (red * this.red),
29+
(int) (green * this.green),
30+
(int) (blue * this.blue),
31+
alpha
32+
);
33+
}
34+
35+
@Override
36+
public VertexConsumer uv(float u, float v) {
37+
return this.delegate.uv(u, v);
38+
}
39+
40+
@Override
41+
public VertexConsumer overlayCoords(int u, int v) {
42+
return this.delegate.overlayCoords(u, v);
43+
}
44+
45+
@Override
46+
public VertexConsumer uv2(int u, int v) {
47+
return this.delegate.uv2(u, v);
48+
}
49+
50+
@Override
51+
public VertexConsumer normal(float x, float y, float z) {
52+
return this.delegate.normal(x, y, z);
53+
}
54+
55+
@Override
56+
public void endVertex() {
57+
this.delegate.endVertex();
58+
}
59+
}
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package com.rappytv.glintcolorizer.v1_16_5;
2+
3+
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
4+
import com.mojang.blaze3d.vertex.VertexFormat;
5+
import net.minecraft.client.renderer.RenderStateShard;
6+
import net.minecraft.client.renderer.RenderType;
7+
import net.minecraft.client.renderer.entity.ItemRenderer;
8+
9+
public class CustomRenderTypes extends RenderType {
10+
11+
private static final RenderType GLOW_GLINT = create(
12+
"glint_glow",
13+
DefaultVertexFormat.POSITION_TEX,
14+
7,
15+
256,
16+
RenderType.CompositeState.builder()
17+
.setTextureState(new RenderStateShard.TextureStateShard(
18+
ItemRenderer.ENCHANT_GLINT_LOCATION,
19+
true,
20+
false
21+
))
22+
.setWriteMaskState(COLOR_WRITE)
23+
.setCullState(NO_CULL)
24+
.setDepthTestState(NO_DEPTH_TEST)
25+
.setTransparencyState(GLINT_TRANSPARENCY)
26+
.setTexturingState(GLINT_TEXTURING)
27+
.createCompositeState(false)
28+
);
29+
30+
private static final RenderType GLOW_ENTITY_GLINT = create(
31+
"entity_glint_glow",
32+
DefaultVertexFormat.POSITION_TEX,
33+
7,
34+
256,
35+
RenderType.CompositeState.builder()
36+
.setTextureState(new RenderStateShard.TextureStateShard(
37+
ItemRenderer.ENCHANT_GLINT_LOCATION,
38+
true,
39+
false
40+
))
41+
.setWriteMaskState(COLOR_WRITE)
42+
.setCullState(NO_CULL)
43+
.setDepthTestState(NO_DEPTH_TEST)
44+
.setTransparencyState(GLINT_TRANSPARENCY)
45+
.setTexturingState(ENTITY_GLINT_TEXTURING)
46+
.createCompositeState(false)
47+
);
48+
49+
private static final RenderType GLOW_GLINT_DIRECT = create(
50+
"glint_direct_glow",
51+
DefaultVertexFormat.POSITION_TEX,
52+
7,
53+
256,
54+
RenderType.CompositeState.builder()
55+
.setTextureState(new RenderStateShard.TextureStateShard(
56+
ItemRenderer.ENCHANT_GLINT_LOCATION,
57+
true,
58+
false
59+
))
60+
.setWriteMaskState(COLOR_WRITE)
61+
.setCullState(NO_CULL)
62+
.setDepthTestState(NO_DEPTH_TEST)
63+
.setTransparencyState(GLINT_TRANSPARENCY)
64+
.setTexturingState(GLINT_TEXTURING)
65+
.createCompositeState(false)
66+
);
67+
68+
private static final RenderType GLOW_ENTITY_GLINT_DIRECT = create(
69+
"entity_glint_direct_glow",
70+
DefaultVertexFormat.POSITION_TEX,
71+
7,
72+
256,
73+
RenderType.CompositeState.builder()
74+
.setTextureState(new RenderStateShard.TextureStateShard(
75+
ItemRenderer.ENCHANT_GLINT_LOCATION,
76+
true,
77+
false
78+
))
79+
.setWriteMaskState(COLOR_WRITE)
80+
.setCullState(NO_CULL)
81+
.setDepthTestState(NO_DEPTH_TEST)
82+
.setTransparencyState(GLINT_TRANSPARENCY)
83+
.setTexturingState(ENTITY_GLINT_TEXTURING)
84+
.createCompositeState(false)
85+
);
86+
87+
private CustomRenderTypes(
88+
String name,
89+
VertexFormat format,
90+
int mode,
91+
int bufferSize,
92+
boolean affectsCrumbling,
93+
boolean sortOnUpload,
94+
Runnable setupState,
95+
Runnable clearState
96+
) {
97+
super(name, format, mode, bufferSize, affectsCrumbling, sortOnUpload, setupState, clearState);
98+
}
99+
100+
public static RenderType getGlowGlint() {
101+
return GLOW_GLINT;
102+
}
103+
104+
public static RenderType getGlowEntityGlint() {
105+
return GLOW_ENTITY_GLINT;
106+
}
107+
108+
public static RenderType getGlowGlintDirect() {
109+
return GLOW_GLINT_DIRECT;
110+
}
111+
112+
public static RenderType getGlowEntityGlintDirect() {
113+
return GLOW_ENTITY_GLINT_DIRECT;
114+
}
115+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.rappytv.glintcolorizer.v1_16_5.mixins;
2+
3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import com.mojang.blaze3d.vertex.VertexConsumer;
6+
import com.rappytv.glintcolorizer.core.GlintColorizerAddon;
7+
import com.rappytv.glintcolorizer.v1_16_5.ColoredVertexConsumer;
8+
import net.labymod.api.util.Color;
9+
import net.minecraft.client.renderer.MultiBufferSource;
10+
import net.minecraft.client.renderer.RenderType;
11+
import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer;
12+
import org.spongepowered.asm.mixin.Mixin;
13+
import org.spongepowered.asm.mixin.injection.At;
14+
15+
@Mixin(HumanoidArmorLayer.class)
16+
public class MixinHumanoidArmorLayer {
17+
18+
@WrapOperation(
19+
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",
20+
at = @At(
21+
value = "INVOKE",
22+
target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getArmorFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;"
23+
)
24+
)
25+
private VertexConsumer redirectFoilBuffer(
26+
MultiBufferSource source,
27+
RenderType type,
28+
boolean noEntity,
29+
boolean hasGlint,
30+
Operation<VertexConsumer> original
31+
) {
32+
VertexConsumer buffer = original.call(source, type, noEntity, hasGlint);
33+
34+
if (hasGlint) {
35+
Color color = GlintColorizerAddon.getArmorGlintColor();
36+
if (color != null) {
37+
return new ColoredVertexConsumer(buffer, color);
38+
}
39+
}
40+
41+
return buffer;
42+
}
43+
}
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package com.rappytv.glintcolorizer.v1_16_5.mixins;
2+
3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import com.mojang.blaze3d.vertex.VertexConsumer;
6+
import com.mojang.blaze3d.vertex.VertexMultiConsumer;
7+
import com.rappytv.glintcolorizer.api.ItemEffect;
8+
import com.rappytv.glintcolorizer.core.GlintColorizerAddon;
9+
import com.rappytv.glintcolorizer.v1_16_5.ColoredVertexConsumer;
10+
import com.rappytv.glintcolorizer.v1_16_5.CustomRenderTypes;
11+
import net.labymod.api.util.Color;
12+
import net.minecraft.client.renderer.MultiBufferSource;
13+
import net.minecraft.client.renderer.RenderType;
14+
import net.minecraft.client.renderer.entity.ItemRenderer;
15+
import org.spongepowered.asm.mixin.Mixin;
16+
import org.spongepowered.asm.mixin.injection.At;
17+
18+
@Mixin(ItemRenderer.class)
19+
public class MixinItemRenderer {
20+
21+
@WrapOperation(
22+
method = "render",
23+
at = @At(
24+
value = "INVOKE",
25+
target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBuffer(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;"
26+
)
27+
)
28+
private VertexConsumer modifyFoilBuffer(
29+
MultiBufferSource buffer,
30+
RenderType renderType,
31+
boolean isItem,
32+
boolean hasFoil,
33+
Operation<VertexConsumer> original
34+
) {
35+
if (!hasFoil) {
36+
return ItemRenderer.getFoilBuffer(buffer, renderType, isItem, false);
37+
}
38+
39+
ItemEffect effect = GlintColorizerAddon.getItemEffect();
40+
if (effect == ItemEffect.NONE) {
41+
return buffer.getBuffer(renderType);
42+
}
43+
44+
Color color = GlintColorizerAddon.getItemGlintColor();
45+
46+
RenderType glintType;
47+
if (effect == ItemEffect.GLOW) {
48+
glintType = isItem
49+
? CustomRenderTypes.getGlowGlint()
50+
: CustomRenderTypes.getGlowEntityGlint();
51+
} else {
52+
glintType = isItem ? RenderType.glint() : RenderType.entityGlint();
53+
}
54+
55+
VertexConsumer baseBuffer = buffer.getBuffer(renderType);
56+
VertexConsumer glintBuffer = buffer.getBuffer(glintType);
57+
58+
if (color != null) {
59+
return new ColoredVertexConsumer(
60+
VertexMultiConsumer.create(glintBuffer, baseBuffer),
61+
color
62+
);
63+
}
64+
65+
return VertexMultiConsumer.create(glintBuffer, baseBuffer);
66+
}
67+
68+
@WrapOperation(
69+
method = "render",
70+
at = @At(
71+
value = "INVOKE",
72+
target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;getFoilBufferDirect(Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/renderer/RenderType;ZZ)Lcom/mojang/blaze3d/vertex/VertexConsumer;"
73+
)
74+
)
75+
private VertexConsumer modifyFoilBufferDirect(
76+
MultiBufferSource buffer,
77+
RenderType renderType,
78+
boolean isItem,
79+
boolean hasFoil,
80+
Operation<VertexConsumer> original
81+
) {
82+
if (!hasFoil) {
83+
return ItemRenderer.getFoilBufferDirect(buffer, renderType, isItem, false);
84+
}
85+
86+
ItemEffect effect = GlintColorizerAddon.getItemEffect();
87+
if (effect == ItemEffect.NONE) {
88+
return buffer.getBuffer(renderType);
89+
}
90+
91+
Color color = GlintColorizerAddon.getItemGlintColor();
92+
93+
RenderType glintType;
94+
if (effect == ItemEffect.GLOW) {
95+
glintType = isItem
96+
? CustomRenderTypes.getGlowGlintDirect()
97+
: CustomRenderTypes.getGlowEntityGlintDirect();
98+
} else {
99+
glintType = isItem ? RenderType.glintDirect() : RenderType.entityGlintDirect();
100+
}
101+
102+
VertexConsumer baseBuffer = buffer.getBuffer(renderType);
103+
VertexConsumer glintBuffer = buffer.getBuffer(glintType);
104+
105+
if (color != null) {
106+
return new ColoredVertexConsumer(
107+
VertexMultiConsumer.create(glintBuffer, baseBuffer),
108+
color
109+
);
110+
}
111+
112+
return VertexMultiConsumer.create(glintBuffer, baseBuffer);
113+
}
114+
}
115+

0 commit comments

Comments
 (0)