From ef4322338ee0b50d958ab7f967d6c89c359ce0ad Mon Sep 17 00:00:00 2001 From: Calclavia Date: Tue, 28 Jan 2014 14:29:48 +0800 Subject: [PATCH] Fixed gear shaft external connections --- .../mechanical/gear/PartGear.java | 6 +++--- .../mechanical/gear/PartGearShaft.java | 21 ++++++++++++------- .../mechanical/gear/RenderGearShaft.java | 1 - .../mechanical/network/MechanicalNetwork.java | 1 + .../mechanical/trait/TraitMechanical.java | 20 +++++++++--------- 5 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/main/java/resonantinduction/mechanical/gear/PartGear.java b/src/main/java/resonantinduction/mechanical/gear/PartGear.java index d8ed4a32..58ae3bc6 100644 --- a/src/main/java/resonantinduction/mechanical/gear/PartGear.java +++ b/src/main/java/resonantinduction/mechanical/gear/PartGear.java @@ -155,7 +155,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock { IMechanical instance = ((IMechanical) tileBehind).getInstance(placementSide.getOpposite()); - if (instance != null && instance.canConnect(placementSide, this)) + if (instance != null && instance != this && instance.canConnect(placementSide, this)) { connections[placementSide.getOpposite().ordinal()] = instance; getNetwork().merge(instance.getNetwork()); @@ -178,7 +178,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock IMechanical instance = ((IMechanical) tile()).getInstance(checkDir == placementSide.getOpposite() ? ForgeDirection.UNKNOWN : checkDir); - if (connections[checkDir.ordinal()] == null && checkDir != placementSide && instance != null && instance.canConnect(checkDir.getOpposite(), this)) + if (connections[checkDir.ordinal()] == null && instance != this && checkDir != placementSide && instance != null && instance.canConnect(checkDir.getOpposite(), this)) { connections[checkDir.ordinal()] = instance; getNetwork().merge(instance.getNetwork()); @@ -203,7 +203,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock { IMechanical instance = (IMechanical) ((IMechanical) checkTile).getInstance(placementSide); - if (instance != null && instance.canConnect(checkDir.getOpposite(), this)) + if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this)) { connections[checkDir.ordinal()] = instance; getNetwork().merge(instance.getNetwork()); diff --git a/src/main/java/resonantinduction/mechanical/gear/PartGearShaft.java b/src/main/java/resonantinduction/mechanical/gear/PartGearShaft.java index 09cf9e5b..613bfc41 100644 --- a/src/main/java/resonantinduction/mechanical/gear/PartGearShaft.java +++ b/src/main/java/resonantinduction/mechanical/gear/PartGearShaft.java @@ -37,6 +37,12 @@ public class PartGearShaft extends PartMechanical sides[6] = new IndexedCuboid6(6, new Cuboid6(0.36, 0.36, 0.36, 0.64, 0.64, 0.64)); } + public void preparePlacement(int side, int itemDamage) + { + ForgeDirection dir = ForgeDirection.getOrientation((byte) (side ^ 1)); + this.placementSide = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()); + } + @Override public void update() { @@ -65,9 +71,8 @@ public class PartGearShaft extends PartMechanical if (checkDir == placementSide || checkDir == placementSide.getOpposite()) { IMechanical instance = ((IMechanical) tile()).getInstance(checkDir); - System.out.println("FOUND POSSIBLE CHECK"+instance); - if (instance != null && instance.canConnect(checkDir.getOpposite(), this)) + if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this)) { connections[checkDir.ordinal()] = instance; getNetwork().merge(instance.getNetwork()); @@ -76,19 +81,19 @@ public class PartGearShaft extends PartMechanical } /** Look for connections outside this block space, the relative FRONT and BACK */ - for (int i = 0; i < 4; i++) + for (int i = 0; i < 6; i++) { - ForgeDirection checkDir = ForgeDirection.getOrientation(Rotation.rotateSide(this.placementSide.ordinal(), i)); - + ForgeDirection checkDir = ForgeDirection.getOrientation(i); + if (connections[checkDir.ordinal()] == null && (checkDir == placementSide || checkDir == placementSide.getOpposite())) { TileEntity checkTile = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir).getTileEntity(world()); if (checkTile instanceof IMechanical) { - IMechanical instance = (IMechanical) ((IMechanical) checkTile).getInstance(placementSide); + IMechanical instance = (IMechanical) ((IMechanical) checkTile).getInstance(checkDir.getOpposite()); - if (instance != null && instance.canConnect(checkDir.getOpposite(), this)) + if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this)) { connections[checkDir.ordinal()] = instance; getNetwork().merge(instance.getNetwork()); @@ -152,7 +157,7 @@ public class PartGearShaft extends PartMechanical @Override public boolean inverseRotation(ForgeDirection dir) { - return false; + return dir == placementSide; } } \ 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 513ed940..125205a2 100644 --- a/src/main/java/resonantinduction/mechanical/gear/RenderGearShaft.java +++ b/src/main/java/resonantinduction/mechanical/gear/RenderGearShaft.java @@ -36,7 +36,6 @@ public class RenderGearShaft GL11.glPushMatrix(); ForgeDirection dir = part.placementSide; - dir = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()); switch (dir) { diff --git a/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java b/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java index e12c1501..46994b97 100644 --- a/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java +++ b/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java @@ -81,6 +81,7 @@ public class MechanicalNetwork extends Network long torque = mechanical.getTorque(); 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)) diff --git a/src/main/java/resonantinduction/mechanical/trait/TraitMechanical.java b/src/main/java/resonantinduction/mechanical/trait/TraitMechanical.java index 83e42637..a29dc6db 100644 --- a/src/main/java/resonantinduction/mechanical/trait/TraitMechanical.java +++ b/src/main/java/resonantinduction/mechanical/trait/TraitMechanical.java @@ -58,16 +58,6 @@ public class TraitMechanical extends TileMultipart implements IMechanical @Override public boolean canConnect(ForgeDirection from) { - TMultiPart part = this.partMap(from.ordinal()); - - if (part != null) - { - if (this.mechanicalInterfaces.contains(part)) - { - return ((IMechanical) part).canConnect(from); - } - } - return false; } @@ -88,6 +78,11 @@ public class TraitMechanical extends TileMultipart implements IMechanical { TMultiPart part = this.partMap(from.ordinal()); + if (part == null) + { + part = partMap(PartMap.CENTER.ordinal()); + } + if (part != null) { if (part instanceof IMechanical) @@ -148,4 +143,9 @@ public class TraitMechanical extends TileMultipart implements IMechanical return null; } + @Override + public boolean inverseRotation(ForgeDirection dir) + { + return false; + } }