diff --git a/src/main/java/resonantinduction/mechanical/Mechanical.java b/src/main/java/resonantinduction/mechanical/Mechanical.java index a1afaa35..35d39990 100644 --- a/src/main/java/resonantinduction/mechanical/Mechanical.java +++ b/src/main/java/resonantinduction/mechanical/Mechanical.java @@ -138,6 +138,7 @@ public class Mechanical { // Add recipes GameRegistry.addRecipe(new ShapedOreRecipe(itemGear, "SWS", "W W", "SWS", 'W', "plankWood", 'S', Item.stick)); + GameRegistry.addRecipe(new ShapedOreRecipe(itemGearShaft, "S", "S", "S", 'S', Item.stick)); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(blockConveyorBelt, 4), "III", "GGG", 'I', Item.ingotIron, 'G', itemGear)); GameRegistry.addRecipe(new ShapedOreRecipe(blockManipulator, "SSS", "SRS", "SCS", 'S', Item.ingotIron, 'C', blockConveyorBelt, 'R', Block.blockRedstone)); GameRegistry.addRecipe(new ShapedOreRecipe(blockDetector, "SWS", "SRS", "SWS", 'S', Item.ingotIron, 'W', UniversalRecipe.WIRE.get())); diff --git a/src/main/java/resonantinduction/mechanical/gear/PartGear.java b/src/main/java/resonantinduction/mechanical/gear/PartGear.java index 86e012bd..d8ed4a32 100644 --- a/src/main/java/resonantinduction/mechanical/gear/PartGear.java +++ b/src/main/java/resonantinduction/mechanical/gear/PartGear.java @@ -459,4 +459,10 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock { return FaceMicroClass.aBounds()[0x10 | this.placementSide.ordinal()]; } + + @Override + public boolean inverseRotation(ForgeDirection dir) + { + return dir != placementSide.getOpposite(); + } } \ No newline at end of file diff --git a/src/main/java/resonantinduction/mechanical/gear/PartGearShaft.java b/src/main/java/resonantinduction/mechanical/gear/PartGearShaft.java index 362c8479..09cf9e5b 100644 --- a/src/main/java/resonantinduction/mechanical/gear/PartGearShaft.java +++ b/src/main/java/resonantinduction/mechanical/gear/PartGearShaft.java @@ -149,4 +149,10 @@ public class PartGearShaft extends PartMechanical return new Cuboid6(0.375, 0.375, 0.375, 0.625, 0.625, 0.625); } + @Override + public boolean inverseRotation(ForgeDirection dir) + { + return false; + } + } \ No newline at end of file diff --git a/src/main/java/resonantinduction/mechanical/gear/RenderGearShaft.java b/src/main/java/resonantinduction/mechanical/gear/RenderGearShaft.java index 9f1cd14a..513ed940 100644 --- a/src/main/java/resonantinduction/mechanical/gear/RenderGearShaft.java +++ b/src/main/java/resonantinduction/mechanical/gear/RenderGearShaft.java @@ -1,14 +1,17 @@ package resonantinduction.mechanical.gear; +import static org.lwjgl.opengl.GL11.glRotatef; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraftforge.client.model.AdvancedModelLoader; import net.minecraftforge.client.model.IModelCustom; +import net.minecraftforge.common.ForgeDirection; import org.lwjgl.opengl.GL11; import resonantinduction.core.Reference; import calclavia.lib.render.RenderUtility; +import calclavia.lib.utility.WorldUtility; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -30,10 +33,22 @@ public class RenderGearShaft GL11.glPushMatrix(); // Center the model first. GL11.glTranslatef((float) x + 0.5f, (float) y + 0.5f, (float) z + 0.5f); - GL11.glTranslatef(0, 0.5f, 0); GL11.glPushMatrix(); - RenderUtility.rotateFaceBlockToSide(part.placementSide); + ForgeDirection dir = part.placementSide; + dir = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()); + + switch (dir) + { + default: + break; + case NORTH: + glRotatef(90, 1, 0, 0); + break; + case WEST: + glRotatef(90, 0, 0, 1); + break; + } GL11.glRotatef((float) Math.toDegrees(part.angle), 0, 1, 0); diff --git a/src/main/java/resonantinduction/mechanical/network/IMechanical.java b/src/main/java/resonantinduction/mechanical/network/IMechanical.java index ccbc4378..86d3c7e9 100644 --- a/src/main/java/resonantinduction/mechanical/network/IMechanical.java +++ b/src/main/java/resonantinduction/mechanical/network/IMechanical.java @@ -21,6 +21,8 @@ public interface IMechanical extends IConnector public float getRatio(ForgeDirection dir); + public boolean inverseRotation(ForgeDirection dir); + public IMechanical getInstance(ForgeDirection dir); /** diff --git a/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java b/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java index d3ad5803..e12c1501 100644 --- a/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java +++ b/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java @@ -80,16 +80,19 @@ public class MechanicalNetwork extends Network float ratio = adjacentMech.getRatio(dir) / mechanical.getRatio(dir.getOpposite()); long torque = mechanical.getTorque(); - if (Math.abs(torque - adjacentMech.getTorque() / ratio * ACCELERATION) < Math.abs(adjacentMech.getTorque() / ratio)) + boolean inverseRotation = mechanical.inverseRotation(dir) && adjacentMech.inverseRotation(dir.getOpposite()); + int inversion = inverseRotation ? -1 : 1; + + if (Math.abs(torque + inversion * (adjacentMech.getTorque() / ratio * ACCELERATION)) < Math.abs(adjacentMech.getTorque() / ratio)) { - mechanical.setTorque((long) (torque - (adjacentMech.getTorque() / ratio * ACCELERATION))); + mechanical.setTorque((long) (torque + inversion * ((adjacentMech.getTorque() / ratio * ACCELERATION)))); } float velocity = mechanical.getAngularVelocity(); - if (Math.abs(velocity - adjacentMech.getAngularVelocity() * ratio * ACCELERATION) < Math.abs(adjacentMech.getAngularVelocity() * ratio)) + if (Math.abs(velocity + inversion * (adjacentMech.getAngularVelocity() * ratio * ACCELERATION)) < Math.abs(adjacentMech.getAngularVelocity() * ratio)) { - mechanical.setAngularVelocity(velocity - (adjacentMech.getAngularVelocity() * ratio * ACCELERATION)); + mechanical.setAngularVelocity(velocity + inversion * ((adjacentMech.getAngularVelocity() * ratio * ACCELERATION))); } } } diff --git a/src/main/java/resonantinduction/mechanical/network/TileMechanical.java b/src/main/java/resonantinduction/mechanical/network/TileMechanical.java index 0618c94f..749e0d11 100644 --- a/src/main/java/resonantinduction/mechanical/network/TileMechanical.java +++ b/src/main/java/resonantinduction/mechanical/network/TileMechanical.java @@ -138,4 +138,10 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical { return new Vector3(this); } + + @Override + public boolean inverseRotation(ForgeDirection dir) + { + return true; + } }