From f4012d4968e07edee051df3f679fd144c1e37ad6 Mon Sep 17 00:00:00 2001 From: mica-alex <83238954+mica-alex@users.noreply.github.com> Date: Mon, 13 Apr 2026 15:52:16 -0400 Subject: [PATCH 1/2] Fix dead-end insulator bounding box orientation Dead-end insulator TEs were using SIDE_MOUNT geometry (Y:0-0.6875) but dead-end models sit at elevated Y positions. Created DEAD_END geometry preset with proper bounds and added BoundsUtil (inspired by CSM RotationUtils) for clean facing-based rotation of bounds and offsets. Refactored InsulatorGeometry to use dynamic rotation instead of pre-computed NS/EW bound pairs. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../blocks/insulators/InsulatorGeometry.java | 80 +++++++++---------- .../TileEntityMacLeanDEI1BellNew.java | 2 +- .../TileEntityMacLeanDEI1BellOld.java | 2 +- .../TileEntityMacLeanDEI2BellNew.java | 2 +- .../TileEntityMacLeanDEI2BellOld.java | 2 +- .../TileEntityMacLeanDEI3BellNew.java | 2 +- .../TileEntityMacLeanDEI3BellOld.java | 2 +- .../insulators/TileEntityMacLeanDEI3Core.java | 2 +- .../insulators/TileEntityMacLeanDEI4Core.java | 2 +- .../TileEntityMacLeanDEI4Core2.java | 2 +- .../insulators/TileEntityMacLeanDEI6Core.java | 3 +- .../insulators/TileEntityMacLeanDEI7Core.java | 2 +- .../TileEntityMacLeanDEI7Core2.java | 2 +- .../TileEntityMacLeanDEI7Core3.java | 2 +- .../insulators/TileEntityMacLeanDEI8Core.java | 2 +- .../insulators/TileEntityMacLeanDEI9Core.java | 2 +- .../realgrid/util/BoundsUtil.java | 59 ++++++++++++++ 17 files changed, 112 insertions(+), 58 deletions(-) create mode 100644 src/main/java/com/micatechnologies/realgrid/util/BoundsUtil.java diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/InsulatorGeometry.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/InsulatorGeometry.java index fa24662..e5e3404 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/InsulatorGeometry.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/InsulatorGeometry.java @@ -1,5 +1,6 @@ package com.micatechnologies.realgrid.blocks.insulators; +import com.micatechnologies.realgrid.util.BoundsUtil; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.Vec3d; @@ -8,68 +9,50 @@ * {@link TileEntityInsulatorBase} so every leaf TE is just a * constructor-param wrapper instead of a bespoke subclass. * - * Four presets cover all current insulators: + *

Top-mount presets use a fixed bounding box and offset (no rotation). + * Rotatable presets store NORTH-facing bounds and offset, then rotate + * dynamically via {@link BoundsUtil}. + * + *

Five presets cover all current insulators: * VISE_TOP - Hendrix compact top-mount * F_NECK - Locke and MacLean PTI tall top-mount * POST_TOP - MacLean PI full top-mount * SIDE_MOUNT - every direction-dependent side-mount variant + * DEAD_END - dead-end insulators (elevated, direction-dependent) */ public final class InsulatorGeometry { - private final boolean sideMount; - private final Vec3d topOffset; - private final float[] topBounds; - private final double sideY; - private final float[] sideBoundsNS; - private final float[] sideBoundsEW; - - private InsulatorGeometry(Vec3d topOffset, float[] topBounds) - { - this.sideMount = false; - this.topOffset = topOffset; - this.topBounds = topBounds; - this.sideY = 0; - this.sideBoundsNS = null; - this.sideBoundsEW = null; - } + private final boolean usesRotation; + private final Vec3d northOffset; + private final float[] northBounds; - private InsulatorGeometry(double sideY, float[] nsBounds, float[] ewBounds) + private InsulatorGeometry(boolean usesRotation, Vec3d northOffset, float[] northBounds) { - this.sideMount = true; - this.topOffset = null; - this.topBounds = null; - this.sideY = sideY; - this.sideBoundsNS = nsBounds; - this.sideBoundsEW = ewBounds; + this.usesRotation = usesRotation; + this.northOffset = northOffset; + this.northBounds = northBounds; } + /** Creates a top-mount geometry with fixed (non-rotating) bounds and offset. */ public static InsulatorGeometry top(Vec3d offset, float[] bounds) { - return new InsulatorGeometry(offset, bounds); + return new InsulatorGeometry(false, offset, bounds); } - public static InsulatorGeometry side(double y, float[] nsBounds, float[] ewBounds) + /** Creates a direction-dependent geometry that rotates bounds/offset by facing. */ + public static InsulatorGeometry rotatable(Vec3d northOffset, float[] northBounds) { - return new InsulatorGeometry(y, nsBounds, ewBounds); + return new InsulatorGeometry(true, northOffset, northBounds); } public Vec3d connectionOffset(EnumFacing facing) { - if (!sideMount) return topOffset; - double dx = 0.5, dz = 0.5; - if (facing == EnumFacing.NORTH) dz = 0.125; - else if (facing == EnumFacing.SOUTH) dz = 0.875; - else if (facing == EnumFacing.WEST) dx = 0.125; - else if (facing == EnumFacing.EAST) dx = 0.875; - return new Vec3d(dx, sideY, dz); + return usesRotation ? BoundsUtil.rotateOffset(northOffset, facing) : northOffset; } public float[] blockBounds(EnumFacing facing) { - if (!sideMount) return topBounds; - return (facing == EnumFacing.NORTH || facing == EnumFacing.SOUTH) - ? sideBoundsNS - : sideBoundsEW; + return usesRotation ? BoundsUtil.rotateBounds(northBounds, facing) : northBounds; } // === Presets === @@ -92,10 +75,21 @@ public float[] blockBounds(EnumFacing facing) new float[]{0.25f, 0.0f, 0.25f, 0.75f, 0.9375f, 0.75f} ); - /** Every direction-dependent side-mount insulator. */ - public static final InsulatorGeometry SIDE_MOUNT = side( - 0.5625, - new float[]{0.3125f, 0.0f, 0.0625f, 0.6875f, 0.6875f, 0.9375f}, - new float[]{0.0625f, 0.0f, 0.3125f, 0.9375f, 0.6875f, 0.6875f} + /** + * Every direction-dependent side-mount insulator. + * NORTH-facing bounds: narrow in X, extends along Z toward the facing direction. + */ + public static final InsulatorGeometry SIDE_MOUNT = rotatable( + new Vec3d(0.5, 0.5625, 0.125), + new float[]{0.3125f, 0.0f, 0.0625f, 0.6875f, 0.6875f, 0.9375f} + ); + + /** + * Dead-end insulators: elevated models that extend along the facing direction. + * Bounds are raised on Y to match the actual model position. + */ + public static final InsulatorGeometry DEAD_END = rotatable( + new Vec3d(0.5, 0.6875, 0.125), + new float[]{0.25f, 0.375f, 0.0f, 0.75f, 0.8125f, 1.0f} ); } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI1BellNew.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI1BellNew.java index 6ac1edc..ef8ba44 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI1BellNew.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI1BellNew.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI1BellNew extends TileEntityInsulatorBase { public TileEntityMacLeanDEI1BellNew() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI1BellOld.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI1BellOld.java index 3b7131d..8d5450d 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI1BellOld.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI1BellOld.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI1BellOld extends TileEntityInsulatorBase { public TileEntityMacLeanDEI1BellOld() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI2BellNew.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI2BellNew.java index b1d501b..663e477 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI2BellNew.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI2BellNew.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI2BellNew extends TileEntityInsulatorBase { public TileEntityMacLeanDEI2BellNew() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI2BellOld.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI2BellOld.java index 0d8c61d..e725b73 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI2BellOld.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI2BellOld.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI2BellOld extends TileEntityInsulatorBase { public TileEntityMacLeanDEI2BellOld() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3BellNew.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3BellNew.java index bea24ec..cfe58b1 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3BellNew.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3BellNew.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI3BellNew extends TileEntityInsulatorBase { public TileEntityMacLeanDEI3BellNew() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3BellOld.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3BellOld.java index 25fa124..ada6ac8 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3BellOld.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3BellOld.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI3BellOld extends TileEntityInsulatorBase { public TileEntityMacLeanDEI3BellOld() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3Core.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3Core.java index 51f46e7..5b68418 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3Core.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI3Core.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI3Core extends TileEntityInsulatorBase { public TileEntityMacLeanDEI3Core() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI4Core.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI4Core.java index 97b156d..4155845 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI4Core.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI4Core.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI4Core extends TileEntityInsulatorBase { public TileEntityMacLeanDEI4Core() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI4Core2.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI4Core2.java index 03af7b8..a6d5a2a 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI4Core2.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI4Core2.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI4Core2 extends TileEntityInsulatorBase { public TileEntityMacLeanDEI4Core2() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI6Core.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI6Core.java index 1975597..ec47597 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI6Core.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI6Core.java @@ -1,9 +1,10 @@ package com.micatechnologies.realgrid.blocks.insulators; + public class TileEntityMacLeanDEI6Core extends TileEntityInsulatorBase { public TileEntityMacLeanDEI6Core() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core.java index 6969277..e86886d 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI7Core extends TileEntityInsulatorBase { public TileEntityMacLeanDEI7Core() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core2.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core2.java index 982d3d1..bdeaeb5 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core2.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core2.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI7Core2 extends TileEntityInsulatorBase { public TileEntityMacLeanDEI7Core2() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core3.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core3.java index 3d4d751..5c5073b 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core3.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI7Core3.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI7Core3 extends TileEntityInsulatorBase { public TileEntityMacLeanDEI7Core3() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI8Core.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI8Core.java index 0ba4dd3..aacebca 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI8Core.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI8Core.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI8Core extends TileEntityInsulatorBase { public TileEntityMacLeanDEI8Core() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI9Core.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI9Core.java index aac36d1..4071e30 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI9Core.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityMacLeanDEI9Core.java @@ -4,6 +4,6 @@ public class TileEntityMacLeanDEI9Core extends TileEntityInsulatorBase { public TileEntityMacLeanDEI9Core() { - super(InsulatorGeometry.SIDE_MOUNT); + super(InsulatorGeometry.DEAD_END); } } diff --git a/src/main/java/com/micatechnologies/realgrid/util/BoundsUtil.java b/src/main/java/com/micatechnologies/realgrid/util/BoundsUtil.java new file mode 100644 index 0000000..3b51cbc --- /dev/null +++ b/src/main/java/com/micatechnologies/realgrid/util/BoundsUtil.java @@ -0,0 +1,59 @@ +package com.micatechnologies.realgrid.util; + +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.Vec3d; + +/** + * Utility for rotating bounding boxes and connection offsets by horizontal + * {@link EnumFacing}. All inputs are assumed to describe the NORTH-facing + * orientation; the utility rotates them clockwise around the block centre. + * + *

Adapted from CSM's {@code RotationUtils} for the {@code float[]} format + * used by IE's {@code IBlockBounds} interface. + */ +public final class BoundsUtil +{ + private BoundsUtil() {} + + /** + * Rotates a NORTH-facing bounding box ({@code [minX, minY, minZ, maxX, maxY, maxZ]}) + * to align with the given horizontal facing. + */ + public static float[] rotateBounds(float[] northBounds, EnumFacing facing) + { + float minX = northBounds[0], minY = northBounds[1], minZ = northBounds[2]; + float maxX = northBounds[3], maxY = northBounds[4], maxZ = northBounds[5]; + + switch (facing) + { + case SOUTH: + return new float[]{ 1f - maxX, minY, 1f - maxZ, 1f - minX, maxY, 1f - minZ }; + case EAST: + return new float[]{ 1f - maxZ, minY, minX, 1f - minZ, maxY, maxX }; + case WEST: + return new float[]{ minZ, minY, 1f - maxX, maxZ, maxY, 1f - minX }; + default: // NORTH or unexpected + return northBounds; + } + } + + /** + * Rotates a NORTH-facing connection offset to align with the given + * horizontal facing. + */ + public static Vec3d rotateOffset(Vec3d northOffset, EnumFacing facing) + { + double x = northOffset.x, y = northOffset.y, z = northOffset.z; + switch (facing) + { + case SOUTH: + return new Vec3d(1.0 - x, y, 1.0 - z); + case EAST: + return new Vec3d(1.0 - z, y, x); + case WEST: + return new Vec3d(z, y, 1.0 - x); + default: // NORTH or unexpected + return northOffset; + } + } +} From 7dc81a9963f57d5d3030469639955da2628f3b19 Mon Sep 17 00:00:00 2001 From: mica-alex <83238954+mica-alex@users.noreply.github.com> Date: Mon, 13 Apr 2026 15:53:39 -0400 Subject: [PATCH 2/2] Guard against vertical facing on NBT load EnumFacing.byIndex(0) returns DOWN when the NBT key is missing or corrupt. Since all blocks only use horizontal facings, this caused bounding boxes and connection offsets to use wrong orientations on world rejoin. Added safety fallback to NORTH in all three TE base classes. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../realgrid/blocks/cutoffs/TileEntityCutoffSwitch.java | 3 ++- .../realgrid/blocks/insulators/TileEntityInsulatorBase.java | 3 ++- .../blocks/transformers/TileEntityRealTransformer.java | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/cutoffs/TileEntityCutoffSwitch.java b/src/main/java/com/micatechnologies/realgrid/blocks/cutoffs/TileEntityCutoffSwitch.java index 29606f3..f387d31 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/cutoffs/TileEntityCutoffSwitch.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/cutoffs/TileEntityCutoffSwitch.java @@ -388,7 +388,8 @@ public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket) { @Override public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) { super.readCustomNBT(nbt, descPacket); - facing = EnumFacing.byIndex(nbt.getInteger("facing")); + EnumFacing loaded = EnumFacing.byIndex(nbt.getInteger("facing")); + facing = loaded.getAxis() != EnumFacing.Axis.Y ? loaded : EnumFacing.NORTH; wires = nbt.getInteger("wires"); active = nbt.getBoolean("active"); inverted = nbt.getBoolean("inverted"); diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityInsulatorBase.java b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityInsulatorBase.java index 71dfa69..8731c18 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityInsulatorBase.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/insulators/TileEntityInsulatorBase.java @@ -59,7 +59,8 @@ public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket) public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) { super.readCustomNBT(nbt, descPacket); - facing = EnumFacing.byIndex(nbt.getInteger("facing")); + EnumFacing loaded = EnumFacing.byIndex(nbt.getInteger("facing")); + facing = loaded.getAxis() != EnumFacing.Axis.Y ? loaded : EnumFacing.NORTH; wireCount = nbt.getInteger("wireCount"); colorVariant = nbt.getInteger("colorVariant"); } diff --git a/src/main/java/com/micatechnologies/realgrid/blocks/transformers/TileEntityRealTransformer.java b/src/main/java/com/micatechnologies/realgrid/blocks/transformers/TileEntityRealTransformer.java index 3605baf..4e9bd2a 100644 --- a/src/main/java/com/micatechnologies/realgrid/blocks/transformers/TileEntityRealTransformer.java +++ b/src/main/java/com/micatechnologies/realgrid/blocks/transformers/TileEntityRealTransformer.java @@ -114,7 +114,8 @@ public void writeCustomNBT(NBTTagCompound nbt, boolean descPacket) public void readCustomNBT(NBTTagCompound nbt, boolean descPacket) { super.readCustomNBT(nbt, descPacket); - facing = EnumFacing.byIndex(nbt.getInteger("facing")); + EnumFacing loaded = EnumFacing.byIndex(nbt.getInteger("facing")); + facing = loaded.getAxis() != EnumFacing.Axis.Y ? loaded : EnumFacing.NORTH; dummy = nbt.getInteger("dummy"); hvCable1 = nbt.hasKey("hvCable1") ? ApiUtils.getWireTypeFromNBT(nbt, "hvCable1") : null; hvCable2 = nbt.hasKey("hvCable2") ? ApiUtils.getWireTypeFromNBT(nbt, "hvCable2") : null;