Mtl loader

This commit is contained in:
2026-03-03 04:05:14 +01:00
parent d9e5153452
commit 5b9807c5d3
3 changed files with 56 additions and 27 deletions
@@ -1,13 +1,9 @@
package org.saturnclient.cosmetics.hat;
import java.io.IOException;
import java.util.Map;
import org.saturnclient.cosmetics.obj.MtlLoader;
import org.saturnclient.cosmetics.obj.ObjModel;
import org.saturnclient.cosmetics.obj.ObjRenderer;
import org.saturnclient.saturnclient.client.player.SaturnPlayer;
import de.javagl.obj.Mtl;
import net.minecraft.client.render.OverlayTexture;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.entity.feature.FeatureRenderer;
@@ -19,16 +15,8 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.Identifier;
public class HatFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState, PlayerEntityModel> {
static Identifier BLACK_MTL = Identifier.of("saturnclient", "models/cosmetic/black.mtl");
Map<String, Mtl> mtl;
public HatFeatureRenderer(FeatureRendererContext<PlayerEntityRenderState, PlayerEntityModel> context) {
super(context);
try {
this.mtl = ObjRenderer.loadMtl(BLACK_MTL);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
@@ -46,7 +34,7 @@ public class HatFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState,
this.getContextModel().head.rotate(matrices);
ObjModel.of(Identifier.of("saturnclient", "models/cosmetic/" + player.hat.split("_")[0] + "/model")).render(
this.mtl,
MtlLoader.cosmetic(player.hat),
matrices, vertexConsumers, light, OverlayTexture.DEFAULT_UV);
matrices.pop();
@@ -0,0 +1,54 @@
package org.saturnclient.cosmetics.obj;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import de.javagl.obj.*;
import net.minecraft.client.MinecraftClient;
import net.minecraft.util.Identifier;
public class MtlLoader {
static Map<Identifier, Map<String, Mtl>> loadedMtls = new HashMap<>();
static Map<String, Mtl> loadMtl(Identifier mtlId) throws IOException {
try (InputStream is = MinecraftClient.getInstance().getResourceManager()
.getResource(mtlId).get().getInputStream()) {
List<Mtl> mtlList = MtlReader.read(is);
Map<String, Mtl> mtlMap = new java.util.LinkedHashMap<>();
for (Mtl mtl : mtlList) {
mtlMap.put(mtl.getName(), mtl);
}
return mtlMap;
}
}
public static Map<String, Mtl> of(Identifier mtlId) {
if (loadedMtls.containsKey(mtlId))
return loadedMtls.get(mtlId);
try {
Map<String, Mtl> mtl = loadMtl(mtlId);
loadedMtls.put(mtlId, mtl);
return mtl;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static Map<String, Mtl> cosmetic(String cosmeticId) {
String input = "halo_black";
int index = input.indexOf('_');
String mtlId = (index == -1) ? "" : input.substring(index + 1);
return of(Identifier.of("saturnclient", "models/cosmetic/" + mtlId + ".mtl"));
}
}
@@ -2,7 +2,6 @@ package org.saturnclient.cosmetics.obj;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import de.javagl.obj.*;
@@ -22,18 +21,6 @@ public class ObjRenderer {
}
}
public static Map<String, Mtl> loadMtl(Identifier mtlId) throws IOException {
try (InputStream is = MinecraftClient.getInstance().getResourceManager()
.getResource(mtlId).get().getInputStream()) {
List<Mtl> mtlList = MtlReader.read(is);
Map<String, Mtl> mtlMap = new java.util.LinkedHashMap<>();
for (Mtl mtl : mtlList) {
mtlMap.put(mtl.getName(), mtl);
}
return mtlMap;
}
}
public static void renderObj(Obj obj, Map<String, Mtl> mtlMap, MatrixStack matrices,
VertexConsumerProvider vertexConsumers, int light, int overlay) {
MatrixStack.Entry entry = matrices.peek();