From bf65cc4edb79d387ffa992b1cff4ee1392c0053c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 29 Oct 2015 21:02:10 +0100 Subject: [PATCH] Made Laser Relay not output to the same block it got the energy from /cc Didi --- .../misc/LaserRelayConnectionHandler.java | 27 ++++++++++--------- .../tile/TileEntityLaserRelay.java | 7 ++--- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/main/java/ellpeck/actuallyadditions/misc/LaserRelayConnectionHandler.java b/src/main/java/ellpeck/actuallyadditions/misc/LaserRelayConnectionHandler.java index b718a61e8..198488b7a 100644 --- a/src/main/java/ellpeck/actuallyadditions/misc/LaserRelayConnectionHandler.java +++ b/src/main/java/ellpeck/actuallyadditions/misc/LaserRelayConnectionHandler.java @@ -160,7 +160,7 @@ public class LaserRelayConnectionHandler{ System.out.println("Merged Two Networks!"); } - public int transferEnergyToReceiverInNeed(Network network, int maxTransfer, boolean simulate){ + public int transferEnergyToReceiverInNeed(WorldPos energyGottenFrom, Network network, int maxTransfer, boolean simulate){ int transmitted = 0; //Go through all of the connections in the network for(ConnectionPair pair : network.connections){ @@ -171,18 +171,21 @@ public class LaserRelayConnectionHandler{ //Get every side of the relay for(int i = 0; i <= 5; i++){ ForgeDirection side = ForgeDirection.getOrientation(i); - //Get the TileEntity at the side - TileEntity tile = WorldUtil.getTileEntityFromSide(side, relay.getWorld(), relay.getX(), relay.getY(), relay.getZ()); - if(tile instanceof IEnergyReceiver && !(tile instanceof TileEntityLaserRelay)){ - IEnergyReceiver receiver = (IEnergyReceiver)tile; - if(receiver.canConnectEnergy(side.getOpposite())){ - //Transfer the energy (with the energy loss!) - int theoreticalReceived = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), maxTransfer-transmitted, true); - //The amount of energy lost during a transfer - int deduct = (int)(theoreticalReceived*((double)ConfigIntValues.LASER_RELAY_LOSS.getValue()/100)); + //Get the Position at the side + WorldPos pos = WorldUtil.getCoordsFromSide(side, relay.getWorld(), relay.getX(), relay.getY(), relay.getZ(), 0); + if(!pos.isEqual(energyGottenFrom)){ + TileEntity tile = pos.getTileEntity(); + if(tile instanceof IEnergyReceiver && !(tile instanceof TileEntityLaserRelay)){ + IEnergyReceiver receiver = (IEnergyReceiver)tile; + if(receiver.canConnectEnergy(side.getOpposite())){ + //Transfer the energy (with the energy loss!) + int theoreticalReceived = ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), maxTransfer-transmitted, true); + //The amount of energy lost during a transfer + int deduct = (int)(theoreticalReceived*((double)ConfigIntValues.LASER_RELAY_LOSS.getValue()/100)); - transmitted += ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), theoreticalReceived-deduct, simulate); - transmitted += deduct; + transmitted += ((IEnergyReceiver)tile).receiveEnergy(side.getOpposite(), theoreticalReceived-deduct, simulate); + transmitted += deduct; + } } } } diff --git a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityLaserRelay.java b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityLaserRelay.java index 0c0740780..5069060d4 100644 --- a/src/main/java/ellpeck/actuallyadditions/tile/TileEntityLaserRelay.java +++ b/src/main/java/ellpeck/actuallyadditions/tile/TileEntityLaserRelay.java @@ -16,6 +16,7 @@ import cpw.mods.fml.relauncher.SideOnly; import ellpeck.actuallyadditions.config.values.ConfigBoolValues; import ellpeck.actuallyadditions.misc.LaserRelayConnectionHandler; import ellpeck.actuallyadditions.util.WorldPos; +import ellpeck.actuallyadditions.util.WorldUtil; import io.netty.util.internal.ConcurrentSet; import net.minecraft.client.Minecraft; import net.minecraft.client.particle.EntityReddustFX; @@ -98,7 +99,7 @@ public class TileEntityLaserRelay extends TileEntityBase implements IEnergyRecei @Override public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate){ - return this.transmitEnergy(maxReceive, simulate); + return this.transmitEnergy(WorldUtil.getCoordsFromSide(from, worldObj, xCoord, yCoord, zCoord, 0), maxReceive, simulate); } @Override @@ -111,12 +112,12 @@ public class TileEntityLaserRelay extends TileEntityBase implements IEnergyRecei return 0; } - public int transmitEnergy(int maxTransmit, boolean simulate){ + public int transmitEnergy(WorldPos blockFrom, int maxTransmit, boolean simulate){ int transmitted = 0; if(maxTransmit > 0){ LaserRelayConnectionHandler.Network network = LaserRelayConnectionHandler.getInstance().getNetworkFor(new WorldPos(this.worldObj, this.xCoord, this.yCoord, this.zCoord)); if(network != null){ - transmitted = LaserRelayConnectionHandler.getInstance().transferEnergyToReceiverInNeed(network, maxTransmit, simulate); + transmitted = LaserRelayConnectionHandler.getInstance().transferEnergyToReceiverInNeed(blockFrom, network, maxTransmit, simulate); } } return transmitted;