Revert "Revert "Fix some transmitter issues.""

This reverts commit e9ef6c1866.
This commit is contained in:
Aidan C. Brady 2015-02-16 17:24:51 -05:00
parent e9ef6c1866
commit 548145ae02
3 changed files with 79 additions and 1 deletions

View file

@ -355,7 +355,7 @@ public abstract class DynamicNetwork<A, N extends DynamicNetwork<A, N>> 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<Coord4D> partNetwork = finder.exploreNetwork();

View file

@ -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();
}

View file

@ -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<N extends DynamicNetwork<?, N>> extends PartSidedPipe implements IGridTransmitter<N>
{
public N theNetwork;
public byte newSidesMerged;
@Override
public void bind(TileMultipart t)
{
@ -63,6 +68,50 @@ public abstract class PartTransmitter<N extends DynamicNetwork<?, N>> 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<N> connectedNets = new HashSet<N>();
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<N>)cable).getTransmitterNetwork(false) != null)
{
connectedNets.add(((IGridTransmitter<N>)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<N extends DynamicNetwork<?, N>> 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);
}
}
}