From 7a0c58828fbd71c924c286981d43873779093e1c Mon Sep 17 00:00:00 2001 From: Eclipse Date: Mon, 28 Jul 2025 13:03:03 +0000 Subject: [PATCH] Some 3D model mapping fixes --- .../rainbow/mapping/geometry/GeometryMapper.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/geysermc/rainbow/mapping/geometry/GeometryMapper.java b/src/main/java/org/geysermc/rainbow/mapping/geometry/GeometryMapper.java index 27fa5f0..58eed4f 100644 --- a/src/main/java/org/geysermc/rainbow/mapping/geometry/GeometryMapper.java +++ b/src/main/java/org/geysermc/rainbow/mapping/geometry/GeometryMapper.java @@ -19,9 +19,9 @@ public class GeometryMapper { public static BedrockGeometryContext mapGeometry(String identifier, String boneName, ResolvedModel model, ResourceLocation texture) { BedrockGeometry.Builder builder = BedrockGeometry.builder(identifier); - // Blockbench seems to always use these values - builder.withVisibleBoundsWidth(2.0F); - builder.withVisibleBoundsHeight(2.5F); + // Blockbench seems to always use these values TODO that's wrong + builder.withVisibleBoundsWidth(4.0F); + builder.withVisibleBoundsHeight(4.0F); builder.withVisibleBoundsOffset(new Vector3f(0.0F, 0.75F, 0.0F)); // TODO proper texture size @@ -35,6 +35,7 @@ public class GeometryMapper { SimpleUnbakedGeometry geometry = (SimpleUnbakedGeometry) model.getTopGeometry(); for (BlockElement element : geometry.elements()) { + // TODO the origin here is wrong, some models seem to be mirrored weirdly in blockbench BedrockGeometry.Cube cube = mapBlockElement(element).build(); bone.withCube(cube); min.min(cube.origin()); @@ -81,7 +82,8 @@ public class GeometryMapper { BlockElementRotation rotation = element.rotation(); if (rotation != null) { - builder.withPivot(rotation.origin().sub(CENTRE_OFFSET, new Vector3f())); + // MC multiplies model origin by 0.0625 when loading rotation origin + builder.withPivot(rotation.origin().div(0.0625F, new Vector3f()).sub(CENTRE_OFFSET)); Vector3f bedrockRotation = switch (rotation.axis()) { case X -> new Vector3f(rotation.angle(), 0.0F, 0.0F);