diff --git a/src/main/java/resonantinduction/electrical/levitator/TileLevitator.java b/src/main/java/resonantinduction/electrical/levitator/TileLevitator.java index 760e6199..76bc8a48 100644 --- a/src/main/java/resonantinduction/electrical/levitator/TileLevitator.java +++ b/src/main/java/resonantinduction/electrical/levitator/TileLevitator.java @@ -402,6 +402,7 @@ public class TileLevitator extends TileAdvanced implements IPacketReceiver, IPac public void updateBounds() { + //TODO: Raytrace for block collision switch (getDirection()) { case DOWN: diff --git a/src/main/java/resonantinduction/mechanical/gear/PartGear.java b/src/main/java/resonantinduction/mechanical/gear/PartGear.java index d127c6de..3cd5a12b 100644 --- a/src/main/java/resonantinduction/mechanical/gear/PartGear.java +++ b/src/main/java/resonantinduction/mechanical/gear/PartGear.java @@ -394,14 +394,23 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock } @Override - public float getRatio(ForgeDirection dir) + public float getRatio(ForgeDirection dir, Object source) { - if (dir == placementSide) + if (source instanceof IMechanical) { - return super.getRatio(dir); + universalelectricity.api.vector.Vector3 deltaPos = ((IMechanical) source).getPosition().subtract(getPosition()); + + boolean caseX = placementSide.offsetX != 0 && deltaPos.y == 0 && deltaPos.z == 0; + boolean caseY = placementSide.offsetY != 0 && deltaPos.x == 0 && deltaPos.z == 0; + boolean caseZ = placementSide.offsetZ != 0 && deltaPos.x == 0 && deltaPos.y == 0; + + if (caseX || caseY || caseZ) + { + return super.getRatio(dir, source); + } } - return getMultiBlock().isConstructed() ? 1.5f : super.getRatio(dir); + return getMultiBlock().isConstructed() ? 1.5f : super.getRatio(dir, source); } @Override @@ -431,7 +440,6 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock * Check for flat connections (gear face on gear face) to make sure it's actually on * this gear block. */ - System.out.println(getPosition() + ":" + from + " vs " + placementSide); if (from == placementSide.getOpposite()) { if (source instanceof PartGear || source instanceof PartGearShaft) @@ -449,14 +457,16 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock if (((PartGear) source).placementSide != placementSide) { - /** - * Case when we connect gears via edges internally. Large gear attempt - * to connect to small gear. - */ + TMultiPart part = tile().partMap(((PartGear) source).placementSide.ordinal()); if (part instanceof PartGear) { + /** + * Case when we connect gears via edges internally. Large gear + * attempt + * to connect to small gear. + */ PartGear sourceGear = (PartGear) part; if (sourceGear.isCenterMultiBlock() && !sourceGear.getMultiBlock().isPrimary()) @@ -465,6 +475,22 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock return true; } } + else + { + /** + * Small gear attempting to connect to large gear. + */ + if (getMultiBlock().isConstructed()) + { + TMultiPart checkPart = ((PartGear) source).tile().partMap(placementSide.ordinal()); + + if (checkPart instanceof PartGear) + { + ForgeDirection requiredDirection = ((PartGear) checkPart).getPosition().subtract(getPosition()).toForgeDirection(); + return ((PartGear) checkPart).isCenterMultiBlock() && ((PartGear) source).placementSide == requiredDirection; + } + } + } } } } diff --git a/src/main/java/resonantinduction/mechanical/network/IMechanical.java b/src/main/java/resonantinduction/mechanical/network/IMechanical.java index 0f75c062..5f4a42da 100644 --- a/src/main/java/resonantinduction/mechanical/network/IMechanical.java +++ b/src/main/java/resonantinduction/mechanical/network/IMechanical.java @@ -19,7 +19,7 @@ public interface IMechanical extends IConnector public void setTorque(long torque); - public float getRatio(ForgeDirection dir); + public float getRatio(ForgeDirection dir, Object source); public boolean inverseRotation(ForgeDirection dir, IMechanical with); diff --git a/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java b/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java index 4945712e..c6db2247 100644 --- a/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java +++ b/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java @@ -77,7 +77,7 @@ public class MechanicalNetwork extends Network if (adjacentMech != null && adjacent != mechanical) { - float ratio = adjacentMech.getRatio(dir.getOpposite()) / mechanical.getRatio(dir); + float ratio = adjacentMech.getRatio(dir.getOpposite(), mechanical) / mechanical.getRatio(dir, adjacentMech); long torque = mechanical.getTorque(); boolean inverseRotation = mechanical.inverseRotation(dir, adjacentMech) && adjacentMech.inverseRotation(dir.getOpposite(), mechanical); diff --git a/src/main/java/resonantinduction/mechanical/network/PartMechanical.java b/src/main/java/resonantinduction/mechanical/network/PartMechanical.java index 944d5cf4..12f04a4d 100644 --- a/src/main/java/resonantinduction/mechanical/network/PartMechanical.java +++ b/src/main/java/resonantinduction/mechanical/network/PartMechanical.java @@ -278,7 +278,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu } @Override - public float getRatio(ForgeDirection dir) + public float getRatio(ForgeDirection dir, Object source) { return 0.5f; } diff --git a/src/main/java/resonantinduction/mechanical/network/TileMechanical.java b/src/main/java/resonantinduction/mechanical/network/TileMechanical.java index e0b9a36a..6147623b 100644 --- a/src/main/java/resonantinduction/mechanical/network/TileMechanical.java +++ b/src/main/java/resonantinduction/mechanical/network/TileMechanical.java @@ -160,7 +160,7 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical } @Override - public float getRatio(ForgeDirection dir) + public float getRatio(ForgeDirection dir, Object source) { return 0.5f; } diff --git a/src/main/java/resonantinduction/mechanical/trait/TraitMechanical.java b/src/main/java/resonantinduction/mechanical/trait/TraitMechanical.java index ec26529f..b459b2f4 100644 --- a/src/main/java/resonantinduction/mechanical/trait/TraitMechanical.java +++ b/src/main/java/resonantinduction/mechanical/trait/TraitMechanical.java @@ -126,7 +126,7 @@ public class TraitMechanical extends TileMultipart implements IMechanical } @Override - public float getRatio(ForgeDirection dir) + public float getRatio(ForgeDirection dir, Object source) { return 0; } diff --git a/src/main/java/resonantinduction/mechanical/turbine/TileWaterTurbine.java b/src/main/java/resonantinduction/mechanical/turbine/TileWaterTurbine.java index b72bae0a..4263e438 100644 --- a/src/main/java/resonantinduction/mechanical/turbine/TileWaterTurbine.java +++ b/src/main/java/resonantinduction/mechanical/turbine/TileWaterTurbine.java @@ -185,7 +185,7 @@ public class TileWaterTurbine extends TileTurbine implements IMechanical } @Override - public float getRatio(ForgeDirection dir) + public float getRatio(ForgeDirection dir, Object source) { return getMultiBlock().isConstructed() ? 1.5f : 0.5f; } diff --git a/src/main/java/resonantinduction/mechanical/turbine/TileWindTurbine.java b/src/main/java/resonantinduction/mechanical/turbine/TileWindTurbine.java index d5aa4960..1b688417 100644 --- a/src/main/java/resonantinduction/mechanical/turbine/TileWindTurbine.java +++ b/src/main/java/resonantinduction/mechanical/turbine/TileWindTurbine.java @@ -134,7 +134,7 @@ public class TileWindTurbine extends TileTurbine implements IMechanical } @Override - public float getRatio(ForgeDirection dir) + public float getRatio(ForgeDirection dir, Object source) { return 0.5f; }