diff options
Diffstat (limited to 'src/main/java/goodgenerator/blocks/tileEntity')
-rw-r--r-- | src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java | 3 | ||||
-rw-r--r-- | src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java | 56 |
2 files changed, 48 insertions, 11 deletions
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java index b078a499a7..f019f8f7cd 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/AntimatterForge.java @@ -906,7 +906,8 @@ public class AntimatterForge extends MTEExtendedPowerMultiBlockBase<AntimatterFo TileAntimatter render = getAntimatterRender(); if (render == null) return; render.setProtomatterRender(flag); - render.setRotationFields(getRotation(), getDirection()); + if (!flag) return; + render.setRotationFields(getDirection(), getRotation()); } public TileAntimatter getAntimatterRender() { diff --git a/src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java b/src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java index 13494f9234..80b36ab01b 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java @@ -9,6 +9,9 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; +import org.joml.AxisAngle4f; +import org.joml.Matrix4f; + import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; public class TileAntimatter extends TileEntity { @@ -97,6 +100,7 @@ public class TileAntimatter extends TileEntity { } public void setProtomatterRender(boolean flag) { + if (protomatterRender == flag) return; protomatterRender = flag; worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } @@ -114,16 +118,48 @@ public class TileAntimatter extends TileEntity { worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } - public void setRotationFields(Rotation rotation, ForgeDirection direction) { - switch (rotation) { - case NORMAL -> rotationAngle = 0; - case CLOCKWISE -> rotationAngle = 90; - case COUNTER_CLOCKWISE -> rotationAngle = -90; - case UPSIDE_DOWN -> rotationAngle = 180; - } - rotX = direction.offsetX; - rotY = direction.offsetY; - rotZ = direction.offsetZ; + public void setRotationFields(ForgeDirection direction, Rotation rotation) { + Matrix4f rotationMatrix = new Matrix4f().identity(); + + float localAngle = switch (rotation) { + case NORMAL -> 0; + case CLOCKWISE -> 90; + case COUNTER_CLOCKWISE -> -90; + case UPSIDE_DOWN -> 180; + }; + localAngle = (float) Math.toRadians(localAngle); + rotationMatrix.rotate(localAngle, direction.offsetX, direction.offsetY, direction.offsetZ); + + float x = 0, y = 0; + float angle = switch (direction) { + case DOWN -> { + x = 1; + yield 90; + } + case UP -> { + x = 1; + yield -90; + } + case EAST, SOUTH -> { + y = 1; + yield 90; + } + case WEST, NORTH -> { + y = 1; + yield -90; + } + case UNKNOWN -> 0.0F; + }; + angle = (float) Math.toRadians(angle); + rotationMatrix.rotate(angle, x, y, 0); + + AxisAngle4f rotationVector = new AxisAngle4f(); + rotationMatrix.getRotation(rotationVector); + + rotationAngle = rotationVector.angle / (float) Math.PI * 180; + rotX = rotationVector.x; + rotY = rotationVector.y; + rotZ = rotationVector.z; worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); } |