diff --git a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java index b1461724..b22d46bd 100644 --- a/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java +++ b/common/src/main/java/org/embeddedt/modernfix/dynamicresources/ModelBakeryHelpers.java @@ -5,6 +5,7 @@ import com.google.common.base.Stopwatch; import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import com.google.gson.*; +import com.google.gson.stream.JsonReader; import com.mojang.datafixers.util.Pair; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; @@ -55,6 +56,13 @@ public class ModelBakeryHelpers { */ public static final int MAX_MODEL_LIFETIME_SECS = 300; + private static JsonElement parseStream(InputStream stream) { + JsonParser parser = new JsonParser(); + JsonReader jsonReader = new JsonReader(new InputStreamReader(stream, StandardCharsets.UTF_8)); + jsonReader.setLenient(true); + return parser.parse(jsonReader); + } + private static void gatherAdditionalViaManualScan(List untrustedPacks, Set knownLocations, Collection uncertainLocations, String filePrefix) { if(untrustedPacks.size() > 0) { @@ -166,9 +174,8 @@ public class ModelBakeryHelpers { blockStateData.add(CompletableFuture.runAsync(() -> { try { for(Resource resource : resources) { - JsonParser parser = new JsonParser(); try { - blockStateLoadedFiles.add(Pair.of(blockstate, parser.parse(new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8)))); + blockStateLoadedFiles.add(Pair.of(blockstate, parseStream(resource.getInputStream()))); } catch(JsonParseException e) { logOrSuppressError(blockstateErrors, "blockstate", blockstate, e); } finally { @@ -257,8 +264,7 @@ public class ModelBakeryHelpers { ResourceLocation fileLocation = new ResourceLocation(model.getNamespace(), "models/" + model.getPath() + ".json"); modelBytes.add(CompletableFuture.supplyAsync(() -> { try(Resource resource = manager.getResource(fileLocation)) { - JsonParser parser = new JsonParser(); - return Pair.of(model, parser.parse(new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8))); + return Pair.of(model, parseStream(resource.getInputStream())); } catch(IOException | JsonParseException e) { logOrSuppressError(blockstateErrors, "model", fileLocation, e); return Pair.of(fileLocation, null);