From be722cc5867a8c13f45a3d5f71af4a9164db839f Mon Sep 17 00:00:00 2001 From: Calclavia Date: Tue, 21 Jan 2014 19:52:14 +0800 Subject: [PATCH] Improved grinder direction --- .../electrical/generator/TileGenerator.java | 4 +- .../mechanical/belt/TileConveyorBelt.java | 11 +++-- .../mechanical/network/MechanicalNetwork.java | 5 ++- .../mechanical/process/BlockGrinderWheel.java | 45 ++----------------- .../mechanical/process/TileGrinderWheel.java | 2 +- 5 files changed, 18 insertions(+), 49 deletions(-) diff --git a/src/main/java/resonantinduction/electrical/generator/TileGenerator.java b/src/main/java/resonantinduction/electrical/generator/TileGenerator.java index 1f931713..54a2467f 100644 --- a/src/main/java/resonantinduction/electrical/generator/TileGenerator.java +++ b/src/main/java/resonantinduction/electrical/generator/TileGenerator.java @@ -35,7 +35,7 @@ public class TileGenerator extends TileElectrical implements IMechanical, IRotat public float toggleRatio() { - return torqueRatio = (torqueRatio + 1000) % energy.getMaxExtract(); + return torqueRatio = (torqueRatio + 1000) % energy.getMaxExtract() + 1000; } @Override @@ -85,7 +85,7 @@ public class TileGenerator extends TileElectrical implements IMechanical, IRotat { EnumSet dirs = EnumSet.allOf(ForgeDirection.class); dirs.remove(this.getDirection()); - dirs.remove(this.getDirection().ordinal()); + dirs.remove(this.getDirection().getOpposite()); return dirs; } diff --git a/src/main/java/resonantinduction/mechanical/belt/TileConveyorBelt.java b/src/main/java/resonantinduction/mechanical/belt/TileConveyorBelt.java index cfd386a4..3e67a540 100644 --- a/src/main/java/resonantinduction/mechanical/belt/TileConveyorBelt.java +++ b/src/main/java/resonantinduction/mechanical/belt/TileConveyorBelt.java @@ -226,7 +226,7 @@ public class TileConveyorBelt extends TileMechanical implements IBelt, IRotatabl for (int i = 2; i < 6; i++) { ForgeDirection dir = ForgeDirection.getOrientation(i); - Vector3 pos = new Vector3(this).modifyPositionFromSide(dir); + Vector3 pos = new Vector3(this).translate(dir); TileEntity tile = pos.getTileEntity(this.worldObj); if (dir == this.getDirection() || dir == this.getDirection().getOpposite()) @@ -265,8 +265,13 @@ public class TileConveyorBelt extends TileMechanical implements IBelt, IRotatabl } else if (tile instanceof IMechanical) { - // TODO: Fix split connection in network. - // connections[dir.ordinal()] = tile; + IMechanical mechanical = (IMechanical) ((IMechanical) tile).getInstance(dir.getOpposite()); + + if (mechanical != null) + { + connections[dir.ordinal()] = mechanical; + getNetwork().merge(mechanical.getNetwork()); + } } } diff --git a/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java b/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java index f196a4c8..8ffa5eb2 100644 --- a/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java +++ b/src/main/java/resonantinduction/mechanical/network/MechanicalNetwork.java @@ -75,7 +75,7 @@ public class MechanicalNetwork extends Network * Calculation rotations of all generators. */ if (!(prevGenerators.equals(generators)) && generators.size() > 0) - {System.out.println("UPDA PATH"); + { Set closedSet = new LinkedHashSet(); for (IMechanical generatorNode : generators) @@ -90,9 +90,10 @@ public class MechanicalNetwork extends Network } prevGenerators = new LinkedHashSet<>(generators); - generators.clear(); } + generators.clear(); + /** * Calculate load */ diff --git a/src/main/java/resonantinduction/mechanical/process/BlockGrinderWheel.java b/src/main/java/resonantinduction/mechanical/process/BlockGrinderWheel.java index bfe6b615..c924ef2a 100644 --- a/src/main/java/resonantinduction/mechanical/process/BlockGrinderWheel.java +++ b/src/main/java/resonantinduction/mechanical/process/BlockGrinderWheel.java @@ -33,43 +33,6 @@ public class BlockGrinderWheel extends BlockRIRotatable implements ITileEntityPr return RIBlockRenderingHandler.ID; } - @Override - public void onBlockAdded(World world, int x, int y, int z) - { - this.checkConflicts(world, x, y, z); - } - - @Override - public void onNeighborBlockChange(World world, int x, int y, int z, int par5) - { - this.checkConflicts(world, x, y, z); - } - - /** - * Checks for any conflicting directions with other grinders. - */ - private void checkConflicts(World world, int x, int y, int z) - { - ForgeDirection facing = this.getDirection(world, x, y, z); - for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) - { - if (dir == facing || dir == facing.getOpposite()) - { - VectorWorld checkPos = (VectorWorld) new VectorWorld(world, x, y, z).modifyPositionFromSide(dir); - TileEntity tileEntity = checkPos.getTileEntity(); - - if (tileEntity instanceof TileGrinderWheel) - { - if (this.getDirection(world, checkPos.intX(), checkPos.intY(), checkPos.intZ()) == facing) - { - this.dropBlockAsItem(world, x, y, z, 0, 0); - world.setBlockToAir(x, y, z); - } - } - } - } - } - @Override public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { @@ -111,10 +74,10 @@ public class BlockGrinderWheel extends BlockRIRotatable implements ITileEntityPr { // Move entity based on the direction of the block. ForgeDirection dir = this.getDirection(world, x, y, z); - entity.motionX += dir.offsetX * tile.getNetwork().getAngularVelocity() / 20; - entity.motionZ += dir.offsetZ * tile.getNetwork().getAngularVelocity() / 20; - entity.motionY += Math.random() * tile.getNetwork().getAngularVelocity() / 20; - entity.isAirBorne = true; + dir = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()); + int inversion = tile.isClockwise() ? -1 : 1; + float speed = tile.getNetwork().getAngularVelocity() / 20; + entity.addVelocity(inversion * dir.offsetX * speed, inversion * dir.offsetZ * speed, Math.random() * speed); } } } diff --git a/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java b/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java index 8a74b848..cf2f004e 100644 --- a/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java +++ b/src/main/java/resonantinduction/mechanical/process/TileGrinderWheel.java @@ -136,7 +136,7 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable { if (!this.worldObj.isRemote) { - EntityItem entityItem = new EntityItem(this.worldObj, entity.posX, entity.posY, entity.posZ, ((ItemStackResource) resource).itemStack.copy()); + EntityItem entityItem = new EntityItem(this.worldObj, entity.posX, entity.posY - 1.2, entity.posZ, ((ItemStackResource) resource).itemStack.copy()); entityItem.delayBeforeCanPickup = 20; entityItem.motionX = 0; entityItem.motionY = 0;