diff --git a/fabric/1.16.5-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/fabric/1.16.5-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index 7eddcf9e..8fcc84fa 100644 --- a/fabric/1.16.5-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/fabric/1.16.5-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -2,11 +2,13 @@ import org.mtr.mapping.annotation.MappedMethod; import org.mtr.mapping.holder.Identifier; +import org.mtr.mapping.render.model.RawMesh; import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.function.Function; @@ -42,6 +44,11 @@ public void addCube(ModelPartExtension modelPart, double x, double y, double z, } public static final class ObjModel { + + @MappedMethod + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV){ + return new HashMap<>(); + } @MappedMethod public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { diff --git a/fabric/1.17.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/fabric/1.17.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index 596ee49f..1af21c49 100644 --- a/fabric/1.17.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/fabric/1.17.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -76,7 +76,7 @@ public OptimizedModel(OptimizedModel... optimizedModels) { uploadedParts.addAll(optimizedModel.uploadedParts); } } - + @MappedMethod public void close() { uploadedParts.forEach(VertexArray::close); @@ -133,13 +133,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -161,6 +157,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { @@ -237,6 +242,7 @@ public float getMaxY() { public float getMaxZ() { return maxZ; } + private static void prepareRawMeshes(List rawMeshes, boolean flipTextureV) { rawMeshes.forEach(rawMesh -> { rawMesh.applyRotation(new Vector3f(1, 0, 0), 180); diff --git a/fabric/1.17.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/fabric/1.17.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index b552f693..ee869d64 100644 --- a/fabric/1.17.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/fabric/1.17.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/fabric/1.18.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/fabric/1.18.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index 596ee49f..fca6910e 100644 --- a/fabric/1.18.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/fabric/1.18.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -133,13 +133,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -161,6 +157,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { diff --git a/fabric/1.18.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/fabric/1.18.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index b552f693..ee869d64 100644 --- a/fabric/1.18.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/fabric/1.18.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/fabric/1.19.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/fabric/1.19.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index 596ee49f..fca6910e 100644 --- a/fabric/1.19.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/fabric/1.19.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -133,13 +133,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -161,6 +157,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { diff --git a/fabric/1.19.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/fabric/1.19.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index b552f693..ee869d64 100644 --- a/fabric/1.19.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/fabric/1.19.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/fabric/1.19.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/fabric/1.19.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index abb5d601..89482ab9 100644 --- a/fabric/1.19.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/fabric/1.19.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -133,13 +133,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -161,6 +157,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { diff --git a/fabric/1.19.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/fabric/1.19.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index b552f693..ee869d64 100644 --- a/fabric/1.19.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/fabric/1.19.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/fabric/1.20.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/fabric/1.20.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index abb5d601..89482ab9 100644 --- a/fabric/1.20.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/fabric/1.20.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -133,13 +133,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -161,6 +157,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { diff --git a/fabric/1.20.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/fabric/1.20.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index b552f693..ee869d64 100644 --- a/fabric/1.20.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/fabric/1.20.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/fabric/1.20.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/fabric/1.20.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index 7e5b89f5..89482ab9 100644 --- a/fabric/1.20.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/fabric/1.20.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -133,13 +133,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -161,6 +157,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { @@ -237,7 +242,6 @@ public float getMaxY() { public float getMaxZ() { return maxZ; } - private static void prepareRawMeshes(List rawMeshes, boolean flipTextureV) { rawMeshes.forEach(rawMesh -> { rawMesh.applyRotation(new Vector3f(1, 0, 0), 180); @@ -246,6 +250,7 @@ private static void prepareRawMeshes(List rawMeshes, boolean flipTextur } }); } + } public enum ShaderType { diff --git a/fabric/1.20.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/fabric/1.20.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index 54432045..b4f57174 100644 --- a/fabric/1.20.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/fabric/1.20.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/forge/1.16.5-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/forge/1.16.5-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index 166ce549..8fcc84fa 100644 --- a/forge/1.16.5-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/forge/1.16.5-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -2,11 +2,13 @@ import org.mtr.mapping.annotation.MappedMethod; import org.mtr.mapping.holder.Identifier; +import org.mtr.mapping.render.model.RawMesh; import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.function.Function; @@ -42,9 +44,14 @@ public void addCube(ModelPartExtension modelPart, double x, double y, double z, } public static final class ObjModel { + + @MappedMethod + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV){ + return new HashMap<>(); + } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, FunctiontextureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { return new HashMap<>(); } diff --git a/forge/1.17.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/forge/1.17.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index fd06732c..be2319c3 100644 --- a/forge/1.17.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/forge/1.17.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -132,13 +132,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -160,6 +156,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { diff --git a/forge/1.17.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/forge/1.17.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index b552f693..ee869d64 100644 --- a/forge/1.17.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/forge/1.17.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/forge/1.18.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/forge/1.18.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index fd06732c..be2319c3 100644 --- a/forge/1.18.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/forge/1.18.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -132,13 +132,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -160,6 +156,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { diff --git a/forge/1.18.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/forge/1.18.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index b552f693..ee869d64 100644 --- a/forge/1.18.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/forge/1.18.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/forge/1.19.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/forge/1.19.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index fd06732c..be2319c3 100644 --- a/forge/1.19.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/forge/1.19.2-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -132,13 +132,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -160,6 +156,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { diff --git a/forge/1.19.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/forge/1.19.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index b552f693..ee869d64 100644 --- a/forge/1.19.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/forge/1.19.2-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/forge/1.19.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/forge/1.19.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index cc3dde1f..4dafeee8 100644 --- a/forge/1.19.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/forge/1.19.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -133,13 +133,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -161,6 +157,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { diff --git a/forge/1.19.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/forge/1.19.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index b552f693..ee869d64 100644 --- a/forge/1.19.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/forge/1.19.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/forge/1.20.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/forge/1.20.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index cc3dde1f..4dafeee8 100644 --- a/forge/1.20.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/forge/1.20.1-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -133,13 +133,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -161,6 +157,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { diff --git a/forge/1.20.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/forge/1.20.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index b552f693..ee869d64 100644 --- a/forge/1.20.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/forge/1.20.1-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); } diff --git a/forge/1.20.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java b/forge/1.20.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java index cc3dde1f..4dafeee8 100644 --- a/forge/1.20.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java +++ b/forge/1.20.4-mapping/src/main/java/org/mtr/mapping/mapper/OptimizedModel.java @@ -133,13 +133,9 @@ private ObjModel( } @MappedMethod - public static Map loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { - if (atlasIndex != null) { - ATLAS_MANAGER.load(atlasIndex); - } - + public static Map createObjModel(Map> rawMeshesMap, boolean flipTextureV) { final Map objModels = new HashMap<>(); - ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel).forEach((key, rawMeshes) -> { + rawMeshesMap.forEach((key, rawMeshes) -> { prepareRawMeshes(rawMeshes, flipTextureV); final float[] bounds = {Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE, -Float.MAX_VALUE}; rawMeshes.forEach(rawMesh -> { @@ -161,6 +157,15 @@ public static Map loadModel(String objString, Function loadModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { + if (atlasIndex != null) { + ATLAS_MANAGER.load(atlasIndex); + } + + return createObjModel(ObjModelLoader.loadModel(objString, mtlResolver, textureResolver, ATLAS_MANAGER, splitModel), flipTextureV); + } + @MappedMethod public static Map> loadRawModel(String objString, Function mtlResolver, Function textureResolver, @Nullable Identifier atlasIndex, boolean splitModel, boolean flipTextureV) { if (atlasIndex != null) { diff --git a/forge/1.20.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java b/forge/1.20.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java index 54432045..b4f57174 100644 --- a/forge/1.20.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java +++ b/forge/1.20.4-mapping/src/main/java/org/mtr/mapping/render/obj/ObjModelLoader.java @@ -13,6 +13,7 @@ import org.mtr.mapping.tool.DummyClass; import javax.annotation.Nullable; +import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.nio.file.FileSystems; import java.util.*; @@ -24,12 +25,12 @@ public static Map> loadModel(String objString, Function> result = new HashMap<>(); try { - final Obj sourceObj = ObjReader.read(IOUtils.toInputStream(objString, StandardCharsets.UTF_8)); + final Obj sourceObj = ObjReader.read(new InputStreamReader(IOUtils.toInputStream(objString, StandardCharsets.UTF_8), StandardCharsets.UTF_8)); final Map materials = new HashMap<>(); sourceObj.getMtlFileNames().forEach(mtlFileName -> { try { - MtlReader.read(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); + MtlReader.read(new InputStreamReader(IOUtils.toInputStream(mtlResolver.apply(mtlFileName.replace("\\\\", "/").replace("\\", "/")), StandardCharsets.UTF_8), StandardCharsets.UTF_8)).forEach(mtl -> materials.put(mtl.getName(), mtl)); } catch (Exception e) { DummyClass.logException(e); }