diff --git a/src/main/java/org/saturnclient/cosmetics/hat/HatFeatureRenderer.java b/src/main/java/org/saturnclient/cosmetics/hat/HatFeatureRenderer.java index 96daa52..5f9d4ec 100644 --- a/src/main/java/org/saturnclient/cosmetics/hat/HatFeatureRenderer.java +++ b/src/main/java/org/saturnclient/cosmetics/hat/HatFeatureRenderer.java @@ -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 { - static Identifier BLACK_MTL = Identifier.of("saturnclient", "models/cosmetic/black.mtl"); - Map mtl; - public HatFeatureRenderer(FeatureRendererContext 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> loadedMtls = new HashMap<>(); + + static Map loadMtl(Identifier mtlId) throws IOException { + try (InputStream is = MinecraftClient.getInstance().getResourceManager() + .getResource(mtlId).get().getInputStream()) { + List mtlList = MtlReader.read(is); + Map mtlMap = new java.util.LinkedHashMap<>(); + for (Mtl mtl : mtlList) { + mtlMap.put(mtl.getName(), mtl); + } + return mtlMap; + } + } + + public static Map of(Identifier mtlId) { + if (loadedMtls.containsKey(mtlId)) + return loadedMtls.get(mtlId); + + try { + Map mtl = loadMtl(mtlId); + loadedMtls.put(mtlId, mtl); + + return mtl; + } catch (IOException e) { + e.printStackTrace(); + + return null; + } + + } + + public static Map 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")); + } +} diff --git a/src/main/java/org/saturnclient/cosmetics/obj/ObjRenderer.java b/src/main/java/org/saturnclient/cosmetics/obj/ObjRenderer.java index 6f59fe6..498e4f0 100644 --- a/src/main/java/org/saturnclient/cosmetics/obj/ObjRenderer.java +++ b/src/main/java/org/saturnclient/cosmetics/obj/ObjRenderer.java @@ -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 loadMtl(Identifier mtlId) throws IOException { - try (InputStream is = MinecraftClient.getInstance().getResourceManager() - .getResource(mtlId).get().getInputStream()) { - List mtlList = MtlReader.read(is); - Map mtlMap = new java.util.LinkedHashMap<>(); - for (Mtl mtl : mtlList) { - mtlMap.put(mtl.getName(), mtl); - } - return mtlMap; - } - } - public static void renderObj(Obj obj, Map mtlMap, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { MatrixStack.Entry entry = matrices.peek();