From 2ab2ced589d3ab9f801ce795f60e94e57c1cf6fc Mon Sep 17 00:00:00 2001 From: Dennis C Date: Fri, 12 May 2023 20:20:01 +0200 Subject: [PATCH] Fix root transform matrix format, allow using all four root transform formats (#9496) --- .../client/model/ExtendedBlockModelDeserializer.java | 2 +- .../minecraftforge/common/util/TransformationHelper.java | 4 +++- .../models/block/composite_block.json | 9 +++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraftforge/client/model/ExtendedBlockModelDeserializer.java b/src/main/java/net/minecraftforge/client/model/ExtendedBlockModelDeserializer.java index 34209bf156..6b93e67e33 100644 --- a/src/main/java/net/minecraftforge/client/model/ExtendedBlockModelDeserializer.java +++ b/src/main/java/net/minecraftforge/client/model/ExtendedBlockModelDeserializer.java @@ -63,7 +63,7 @@ public class ExtendedBlockModelDeserializer extends BlockModel.Deserializer if (jsonobject.has("transform")) { - JsonObject transform = GsonHelper.getAsJsonObject(jsonobject, "transform"); + JsonElement transform = jsonobject.get("transform"); model.customData.setRootTransform(deserializationContext.deserialize(transform, Transformation.class)); } diff --git a/src/main/java/net/minecraftforge/common/util/TransformationHelper.java b/src/main/java/net/minecraftforge/common/util/TransformationHelper.java index 7dc69361e8..08a18c6cc4 100644 --- a/src/main/java/net/minecraftforge/common/util/TransformationHelper.java +++ b/src/main/java/net/minecraftforge/common/util/TransformationHelper.java @@ -250,7 +250,7 @@ public final class TransformationHelper if (!e.isJsonArray()) throw new JsonParseException("Matrix: expected an array, got: " + e); JsonArray m = e.getAsJsonArray(); if (m.size() != 3) throw new JsonParseException("Matrix: expected an array of length 3, got: " + m.size()); - Matrix4f matrix = new Matrix4f().zero(); + Matrix4f matrix = new Matrix4f(); for (int rowIdx = 0; rowIdx < 3; rowIdx++) { if (!m.get(rowIdx).isJsonArray()) throw new JsonParseException("Matrix row: expected an array, got: " + m.get(rowIdx)); @@ -268,6 +268,8 @@ public final class TransformationHelper } } } + // JOML's unsafe matrix component setter does not recalculate these properties, so the matrix would stay marked as identity + matrix.determineProperties(); return matrix; } diff --git a/src/test/resources/assets/composite_model_test/models/block/composite_block.json b/src/test/resources/assets/composite_model_test/models/block/composite_block.json index f5c515a583..0ee89e46a9 100644 --- a/src/test/resources/assets/composite_model_test/models/block/composite_block.json +++ b/src/test/resources/assets/composite_model_test/models/block/composite_block.json @@ -81,6 +81,15 @@ "scale": [0.3, 0.3, 0.3], "origin": "center" } + }, + "matrix_test_emerald_hovering_above": { + "_comment": "Translated up 1 block, rotated 45 degrees around the y axis, scaled to 1/3, over center origin", + "parent": "minecraft:block/emerald_block", + "transform": [ + [ 0.2121, 0, 0.2121, 0.2879 ], + [ 0, 0.3, 0, 1.35 ], + [ -0.2121, 0, 0.2121, 0.5 ] + ] } } }