Hat renderer
This commit is contained in:
+2
@@ -291,6 +291,8 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
|
|||||||
|
|
||||||
SaturnPlayer player = state.getData(SaturnRenderState.saturnDataKey);
|
SaturnPlayer player = state.getData(SaturnRenderState.saturnDataKey);
|
||||||
|
|
||||||
|
player = null;
|
||||||
|
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-14
@@ -4,9 +4,9 @@ import org.joml.Quaternionf;
|
|||||||
import org.saturnclient.client.player.SaturnPlayer;
|
import org.saturnclient.client.player.SaturnPlayer;
|
||||||
import org.saturnclient.impl.cosmetics.obj.MtlLoader;
|
import org.saturnclient.impl.cosmetics.obj.MtlLoader;
|
||||||
import org.saturnclient.impl.cosmetics.obj.ObjModel;
|
import org.saturnclient.impl.cosmetics.obj.ObjModel;
|
||||||
|
import org.saturnclient.saturnclient.SaturnRenderState;
|
||||||
|
|
||||||
import net.minecraft.client.render.OverlayTexture;
|
import net.minecraft.client.render.OverlayTexture;
|
||||||
import net.minecraft.client.render.VertexConsumerProvider;
|
|
||||||
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
|
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
|
||||||
import net.minecraft.client.render.entity.feature.FeatureRenderer;
|
import net.minecraft.client.render.entity.feature.FeatureRenderer;
|
||||||
import net.minecraft.client.render.entity.feature.FeatureRendererContext;
|
import net.minecraft.client.render.entity.feature.FeatureRendererContext;
|
||||||
@@ -20,13 +20,10 @@ public class HatFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState,
|
|||||||
super(context);
|
super(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
@Override
|
||||||
public void render(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light,
|
public void render(MatrixStack matrices, OrderedRenderCommandQueue queue, int light, PlayerEntityRenderState state,
|
||||||
PlayerEntityRenderState state, float limbAngle, float limbDistance) {
|
float limbAngle, float limbDistance) {
|
||||||
if (state.playerName == null)
|
SaturnPlayer player = state.getData(SaturnRenderState.saturnDataKey);
|
||||||
return;
|
|
||||||
|
|
||||||
SaturnPlayer player = SaturnPlayer.get(state.playerName.getString());
|
|
||||||
|
|
||||||
if (state.invisible || player == null || player.hat.isEmpty()) {
|
if (state.invisible || player == null || player.hat.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
@@ -38,14 +35,9 @@ public class HatFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState,
|
|||||||
matrices.multiply(new Quaternionf().rotationZYX(head.roll, head.yaw, head.pitch));
|
matrices.multiply(new Quaternionf().rotationZYX(head.roll, head.yaw, head.pitch));
|
||||||
|
|
||||||
ObjModel.cosmetic("hat", player.hat).render(MtlLoader.cosmetic(player.hat),
|
ObjModel.cosmetic("hat", player.hat).render(MtlLoader.cosmetic(player.hat),
|
||||||
matrices, vertexConsumers, light,
|
matrices, queue, light,
|
||||||
OverlayTexture.DEFAULT_UV);
|
OverlayTexture.DEFAULT_UV);
|
||||||
|
|
||||||
matrices.pop();
|
matrices.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void render(MatrixStack matrices, OrderedRenderCommandQueue queue, int light, PlayerEntityRenderState state,
|
|
||||||
float limbAngle, float limbDistance) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||||||
import de.javagl.obj.Mtl;
|
import de.javagl.obj.Mtl;
|
||||||
import de.javagl.obj.Obj;
|
import de.javagl.obj.Obj;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.render.VertexConsumerProvider;
|
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.resource.Resource;
|
import net.minecraft.resource.Resource;
|
||||||
import net.minecraft.resource.ResourceManager;
|
import net.minecraft.resource.ResourceManager;
|
||||||
@@ -78,7 +78,7 @@ public class ObjModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(Map<String, Mtl> mtlMap, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light,
|
public void render(Map<String, Mtl> mtlMap, MatrixStack matrices, OrderedRenderCommandQueue queue, int light,
|
||||||
int overlay) {
|
int overlay) {
|
||||||
matrices.push();
|
matrices.push();
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ public class ObjModel {
|
|||||||
matrices.multiply(net.minecraft.util.math.RotationAxis.POSITIVE_Z.rotationDegrees(config.rotation.z));
|
matrices.multiply(net.minecraft.util.math.RotationAxis.POSITIVE_Z.rotationDegrees(config.rotation.z));
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjRenderer.renderObj(this.obj, mtlMap, matrices, vertexConsumers, light, overlay);
|
ObjRenderer.renderObj(this.obj, mtlMap, matrices, queue, light, overlay);
|
||||||
|
|
||||||
matrices.pop();
|
matrices.pop();
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-14
@@ -10,8 +10,9 @@ import org.saturnclient.impl.cosmetics.utils.ShaderUtils;
|
|||||||
import de.javagl.obj.*;
|
import de.javagl.obj.*;
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
import net.minecraft.client.render.VertexConsumer;
|
import net.minecraft.client.render.VertexConsumer;
|
||||||
import net.minecraft.client.render.VertexConsumerProvider;
|
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
|
||||||
import net.minecraft.client.util.math.MatrixStack;
|
import net.minecraft.client.util.math.MatrixStack;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
@@ -24,9 +25,12 @@ public class ObjRenderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void renderObj(Obj obj, Map<String, Mtl> mtlMap, MatrixStack matrices,
|
public static void renderObj(Obj obj,
|
||||||
VertexConsumerProvider vertexConsumers, int light, int overlay) {
|
Map<String, Mtl> mtlMap,
|
||||||
MatrixStack.Entry entry = matrices.peek();
|
MatrixStack matrices,
|
||||||
|
OrderedRenderCommandQueue queue,
|
||||||
|
int light,
|
||||||
|
int overlay) {
|
||||||
|
|
||||||
Map<String, Obj> materialGroups = ObjSplitting.splitByMaterialGroups(obj);
|
Map<String, Obj> materialGroups = ObjSplitting.splitByMaterialGroups(obj);
|
||||||
|
|
||||||
@@ -36,19 +40,15 @@ public class ObjRenderer {
|
|||||||
|
|
||||||
Mtl mtl = mtlMap != null ? mtlMap.get(materialName) : null;
|
Mtl mtl = mtlMap != null ? mtlMap.get(materialName) : null;
|
||||||
|
|
||||||
// Resolve texture identifier using same logic as ObjUnbakedModelModel
|
|
||||||
IdentifierRef texture = IdentifierRef.ofVanilla("textures/misc/white.png");
|
IdentifierRef texture = IdentifierRef.ofVanilla("textures/misc/white.png");
|
||||||
|
|
||||||
if (mtl != null) {
|
if (mtl != null) {
|
||||||
String mapKd = mtl.getMapKd();
|
String mapKd = mtl.getMapKd();
|
||||||
if (mapKd != null) {
|
if (mapKd != null && !mapKd.startsWith("#")) {
|
||||||
if (!mapKd.startsWith("#")) {
|
|
||||||
texture = IdentifierRef.of(mapKd);
|
texture = IdentifierRef.of(mapKd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Diffuse color (Kd)
|
|
||||||
float r = 1f, g = 1f, b = 1f;
|
float r = 1f, g = 1f, b = 1f;
|
||||||
if (mtl != null) {
|
if (mtl != null) {
|
||||||
FloatTuple kd = mtl.getKd();
|
FloatTuple kd = mtl.getKd();
|
||||||
@@ -59,20 +59,24 @@ public class ObjRenderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VertexConsumer consumer = vertexConsumers.getBuffer(ShaderUtils.getRenderLayer(texture));
|
RenderLayer layer = ShaderUtils.getRenderLayer(texture);
|
||||||
|
|
||||||
int faces = groupObj.getNumFaces();
|
|
||||||
final float fr = r, fg = g, fb = b;
|
final float fr = r, fg = g, fb = b;
|
||||||
|
final Obj finalObj = groupObj;
|
||||||
|
|
||||||
|
queue.submitCustom(matrices, layer, (e, vertexConsumer) -> {
|
||||||
|
|
||||||
|
int faces = finalObj.getNumFaces();
|
||||||
|
|
||||||
for (int f = 0; f < faces; f++) {
|
for (int f = 0; f < faces; f++) {
|
||||||
ObjFace face = groupObj.getFace(f);
|
ObjFace face = finalObj.getFace(f);
|
||||||
int verts = face.getNumVertices();
|
int verts = face.getNumVertices();
|
||||||
|
|
||||||
// Your original winding order logic, untouched
|
|
||||||
for (int i = verts - 1; i >= 0; i--) {
|
for (int i = verts - 1; i >= 0; i--) {
|
||||||
writeVertex(groupObj, face, i, consumer, entry, light, overlay, fr, fg, fb);
|
writeVertex(finalObj, face, i, vertexConsumer, e, light, overlay, fr, fg, fb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@ public class ShaderUtils {
|
|||||||
return RenderLayers.entityAlpha((Identifier) (Object) GifUtils.get(texture));
|
return RenderLayers.entityAlpha((Identifier) (Object) GifUtils.get(texture));
|
||||||
} else if (path.endsWith("end.png")) {
|
} else if (path.endsWith("end.png")) {
|
||||||
// return END_GATEWAY;
|
// return END_GATEWAY;
|
||||||
return null;
|
return RenderLayers.endGateway();
|
||||||
} else {
|
} else {
|
||||||
return RenderLayers.entityAlpha((Identifier) (Object) texture);
|
return RenderLayers.entityAlpha((Identifier) (Object) texture);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user