diff --git a/settings.json b/settings.json index f483c2a..d420e69 100644 --- a/settings.json +++ b/settings.json @@ -22,6 +22,7 @@ "1.20.4-fabric", "1.20.6-forge", "1.20.6-neoforge", - "1.20.6-fabric" + "1.20.6-fabric", + "1.21-fabric" ] } diff --git a/src/main/java/dev/tr7zw/skinlayers/api/Mesh.java b/src/main/java/dev/tr7zw/skinlayers/api/Mesh.java index 32db474..cc1fb11 100644 --- a/src/main/java/dev/tr7zw/skinlayers/api/Mesh.java +++ b/src/main/java/dev/tr7zw/skinlayers/api/Mesh.java @@ -28,7 +28,7 @@ public void setPosition(float x, float y, float z) { @Override public void render(ModelPart vanillaModel, PoseStack poseStack, VertexConsumer vertexConsumer, int light, - int overlay, float red, float green, float blue, float alpha) { + int overlay, int color) { } @Override @@ -52,11 +52,14 @@ public void copyFrom(ModelPart modelPart) { }; public default void render(PoseStack poseStack, VertexConsumer vertexConsumer, int light, int overlay) { - render(null, poseStack, vertexConsumer, light, overlay, 1.0F, 1.0F, 1.0F, 1.0F); + render(null, poseStack, vertexConsumer, light, overlay, 0xFFFFFFFF); } + /** + * @param color The color, in ARGB format + */ public void render(ModelPart vanillaModel, PoseStack poseStack, VertexConsumer vertexConsumer, int light, - int overlay, float red, float green, float blue, float alpha); + int overlay, int color); public void setPosition(float x, float y, float z); diff --git a/src/main/java/dev/tr7zw/skinlayers/config/ConfigScreenProvider.java b/src/main/java/dev/tr7zw/skinlayers/config/ConfigScreenProvider.java index 40d2465..995643f 100644 --- a/src/main/java/dev/tr7zw/skinlayers/config/ConfigScreenProvider.java +++ b/src/main/java/dev/tr7zw/skinlayers/config/ConfigScreenProvider.java @@ -28,6 +28,10 @@ public class ConfigScreenProvider { public static Screen createConfigScreen(Screen parent) { return new CustomConfigScreen(parent, "text.skinlayers.title") { + @Override + protected void addOptions() { + } + @Override public void initialize() { Config config = SkinLayersModBase.config; diff --git a/src/main/java/dev/tr7zw/skinlayers/render/CustomizableModelPart.java b/src/main/java/dev/tr7zw/skinlayers/render/CustomizableModelPart.java index bec2675..dada624 100644 --- a/src/main/java/dev/tr7zw/skinlayers/render/CustomizableModelPart.java +++ b/src/main/java/dev/tr7zw/skinlayers/render/CustomizableModelPart.java @@ -76,15 +76,34 @@ public void render(PoseStack poseStack, VertexConsumer vertexConsumer, int i, in render(null, poseStack, vertexConsumer, i, j, 1.0F, 1.0F, 1.0F, 1.0F); } + private int convertFloatColorToInteger(float color) { + return color > 1F ? 255 : Math.round(color * 255F); + } + + /** + * Kept for some mod (like ETF) shadowing the old render method to call + */ + @Deprecated(forRemoval = true) public void render(ModelPart vanillaModel, PoseStack poseStack, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) { + var color = (convertFloatColorToInteger(alpha) & 0xFF) << 24| (convertFloatColorToInteger(red) & 0xFF) << 16 + | (convertFloatColorToInteger(green) & 0xFF) << 8 | convertFloatColorToInteger(blue) & 0xFF; + + render(vanillaModel, poseStack, vertexConsumer, light, overlay, color); + } + + /** + * @param color Color, in ARGB format + */ + public void render(ModelPart vanillaModel, PoseStack poseStack, VertexConsumer vertexConsumer, int light, + int overlay, int color) { if (!this.visible) return; poseStack.pushPose(); translateAndRotate(poseStack); - compile(vanillaModel, poseStack.last(), vertexConsumer, light, overlay, red, green, blue, alpha); + compile(vanillaModel, poseStack.last(), vertexConsumer, light, overlay, color); for (ModelPart modelPart : this.children.values()) - modelPart.render(poseStack, vertexConsumer, light, overlay, red, green, blue, alpha); + modelPart.render(poseStack, vertexConsumer, light, overlay, color); poseStack.popPose(); } @@ -109,7 +128,7 @@ public void translateAndRotate(PoseStack poseStack) { private Vector4f vector4f[] = new Vector4f[] { new Vector4f(), new Vector4f(), new Vector4f(), new Vector4f() }; private void compile(ModelPart vanillaModel, PoseStack.Pose pose, VertexConsumer vertexConsumer, int light, - int overlay, float red, float green, float blue, float alpha) { + int overlay, int color) { MeshTransformer transformer = SkinLayersAPI.getMeshTransformerProvider().prepareTransformer(vanillaModel); // compacted Cubes Matrix4f matrix4f = pose.pose(); @@ -134,9 +153,12 @@ private void compile(ModelPart vanillaModel, PoseStack.Pose pose, VertexConsumer //$$ vector4f[o].transform(matrix4f); //#endif //spotless:on - vertexConsumer.vertex(vector4f[o].x(), vector4f[o].y(), vector4f[o].z(), red, green, blue, alpha, - polygonData[id + 3 + (o * 5) + 3], polygonData[id + 3 + (o * 5) + 4], overlay, light, - vector3f.x(), vector3f.y(), vector3f.z()); + vertexConsumer.addVertex(vector4f[o].x(), vector4f[o].y(), vector4f[o].z()); + vertexConsumer.setColor(color); + vertexConsumer.setUv(polygonData[id + 3 + (o * 5) + 3], polygonData[id + 3 + (o * 5) + 4]); + vertexConsumer.setOverlay(overlay); + vertexConsumer.setLight(light); + vertexConsumer.setNormal(vector3f.x(), vector3f.y(), vector3f.z()); } } @@ -145,7 +167,7 @@ private void compile(ModelPart vanillaModel, PoseStack.Pose pose, VertexConsumer transformer.transform(cube); // spotless:off //#if MC >= 11700 - cube.compile(pose, vertexConsumer, light, overlay, red, green, blue, alpha); + cube.compile(pose, vertexConsumer, light, overlay, color); //#else //$$ for (ModelPart.Polygon polygon : cube.polygons) { //$$ Vector3f vector3f = polygon.normal.copy(); diff --git a/src/main/java/dev/tr7zw/skinlayers/renderlayers/CustomLayerFeatureRenderer.java b/src/main/java/dev/tr7zw/skinlayers/renderlayers/CustomLayerFeatureRenderer.java index b850a38..1fe4e29 100644 --- a/src/main/java/dev/tr7zw/skinlayers/renderlayers/CustomLayerFeatureRenderer.java +++ b/src/main/java/dev/tr7zw/skinlayers/renderlayers/CustomLayerFeatureRenderer.java @@ -137,7 +137,7 @@ public void renderLayers(AbstractClientPlayer abstractClientPlayer, PlayerSettin mesh.setPosition(x, y, 0); - mesh.render(layer.vanillaGetter.get(), matrixStack, vertices, light, overlay, 1.0f, 1.0f, 1.0f, 1.0f); + mesh.render(layer.vanillaGetter.get(), matrixStack, vertices, light, overlay, 0xFFFFFFFF); matrixStack.popPose(); } } diff --git a/versions/mainProject b/versions/mainProject index 304eaac..dfdd511 100644 --- a/versions/mainProject +++ b/versions/mainProject @@ -1 +1 @@ -1.20.6-fabric \ No newline at end of file +1.21-fabric \ No newline at end of file