From 548145ae02f44e2c44c02442355f763258219760 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Mon, 16 Feb 2015 17:24:51 -0500 Subject: [PATCH] Revert "Revert "Fix some transmitter issues."" This reverts commit e9ef6c186665d60e855dd02b69799041df5c93d2. --- .../api/transmitters/DynamicNetwork.java | 2 +- .../common/multipart/PartSidedPipe.java | 3 + .../common/multipart/PartTransmitter.java | 75 +++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) diff --git a/src/main/java/mekanism/api/transmitters/DynamicNetwork.java b/src/main/java/mekanism/api/transmitters/DynamicNetwork.java index 4ded1fc21..a239d6435 100644 --- a/src/main/java/mekanism/api/transmitters/DynamicNetwork.java +++ b/src/main/java/mekanism/api/transmitters/DynamicNetwork.java @@ -355,7 +355,7 @@ public abstract class DynamicNetwork> implemen { TileEntity connectedBlockA = connectedBlocks[count]; - if(TransmissionType.checkTransmissionType(connectedBlockA, getTransmissionType()) && !dealtWith[count]) + if(TransmissionType.checkTransmissionType(connectedBlockA, getTransmissionType()) && !dealtWith[count] && transmitters.contains(connectedBlockA)) { NetworkFinder finder = new NetworkFinder(((TileEntity)splitPoint).getWorldObj(), getTransmissionType(), Coord4D.get(connectedBlockA), Coord4D.get((TileEntity)splitPoint)); List partNetwork = finder.exploreNetwork(); diff --git a/src/main/java/mekanism/common/multipart/PartSidedPipe.java b/src/main/java/mekanism/common/multipart/PartSidedPipe.java index 0a3255871..e083210a5 100644 --- a/src/main/java/mekanism/common/multipart/PartSidedPipe.java +++ b/src/main/java/mekanism/common/multipart/PartSidedPipe.java @@ -511,6 +511,7 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, if(nowPowered != redstonePowered) { refreshConnections(); + redstonePowered = nowPowered; } } @@ -564,6 +565,7 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, public void onAdded() { super.onAdded(); + redstonePowered = redstoneReactive && world().isBlockIndirectlyGettingPowered(x(), y(), z()); refreshConnections(); } @@ -571,6 +573,7 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, public void onChunkLoad() { super.onChunkLoad(); + redstonePowered = redstoneReactive && world().isBlockIndirectlyGettingPowered(x(), y(), z()); refreshConnections(); } diff --git a/src/main/java/mekanism/common/multipart/PartTransmitter.java b/src/main/java/mekanism/common/multipart/PartTransmitter.java index 1b5b3823f..ad101ac54 100644 --- a/src/main/java/mekanism/common/multipart/PartTransmitter.java +++ b/src/main/java/mekanism/common/multipart/PartTransmitter.java @@ -16,12 +16,17 @@ import mekanism.common.network.PacketTransmitterUpdate.TransmitterUpdateMessage; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; +import codechicken.lib.data.MCDataInput; +import codechicken.lib.data.MCDataOutput; +import codechicken.multipart.TMultiPart; import codechicken.multipart.TileMultipart; public abstract class PartTransmitter> extends PartSidedPipe implements IGridTransmitter { public N theNetwork; + public byte newSidesMerged; + @Override public void bind(TileMultipart t) { @@ -63,6 +68,50 @@ public abstract class PartTransmitter> extends Pa getTransmitterNetwork(); } + @Override + public void onPartChanged(TMultiPart part) + { + byte transmitterConnections = currentTransmitterConnections; + super.onPartChanged(part); + byte addedSides = (byte)(0b00111111 & (currentTransmitterConnections & ~transmitterConnections)); + mergeNewSideNets(addedSides); + } + + public void mergeNewSideNets(byte sides) + { + if(theNetwork != null) + { + HashSet connectedNets = new HashSet(); + + for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) + { + if(connectionMapContainsSide(sides, side)) + { + TileEntity cable = Coord4D.get(tile()).getFromSide(side).getTileEntity(world()); + + if(TransmissionType.checkTransmissionType(cable, getTransmissionType()) && ((IGridTransmitter)cable).getTransmitterNetwork(false) != null) + { + connectedNets.add(((IGridTransmitter)cable).getTransmitterNetwork()); + } + } + } + + if(connectedNets.size() == 0) + { + newSidesMerged = 0x00; + return; + } + else { + connectedNets.add(theNetwork); + theNetwork = createNetworkByMergingSet(connectedNets); + theNetwork.fullRefresh(); + theNetwork.updateCapacity(); + newSidesMerged = sides; + sendDesc = true; + } + } + } + @Override public void setTransmitterNetwork(N network) { @@ -222,4 +271,30 @@ public abstract class PartTransmitter> extends Pa @Override public void chunkLoad() {} + + @Override + public void readDesc(MCDataInput packet) + { + super.readDesc(packet); + if(packet.readBoolean()) + { + mergeNewSideNets(packet.readByte()); + } + } + + @Override + public void writeDesc(MCDataOutput packet) + { + super.writeDesc(packet); + if(newSidesMerged != 0x00) + { + packet.writeBoolean(true); + packet.writeByte(newSidesMerged); + newSidesMerged = 0x00; + } + else + { + packet.writeBoolean(false); + } + } }