package mekanism.common.multipart;
import java.util.Collection;
import mekanism.api.Coord4D;
import mekanism.api.transmitters.DynamicNetwork;
import mekanism.api.transmitters.IGridTransmitter;
import mekanism.api.transmitters.ITransmitterTile;
import mekanism.api.transmitters.TransmissionType;
import mekanism.common.transmitters.Transmitter;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MultipartTransmitter<A, N extends DynamicNetwork<A,N>> extends Transmitter<A, N>
{
public PartTransmitter<A, N> containingPart;
public MultipartTransmitter(PartTransmitter<A, N> multiPart)
{
setPart(multiPart);
}
@Override
public int getCapacity()
{
return getPart().getCapacity();
}
@Override
public World world()
{
return getPart().world();
}
@Override
public Coord4D coord()
{
return new Coord4D(getPart().x(), getPart().y(), getPart().z(), getPart().world().provider.dimensionId);
}
@Override
public Coord4D getAdjacentConnectableTransmitterCoord(ForgeDirection side)
{
Coord4D sideCoord = coord().getFromSide(side);
TileEntity potentialTransmitterTile = sideCoord.getTileEntity(world());
if(!containingPart.canConnectMutual(side))
{
return null;
}
if(potentialTransmitterTile instanceof ITransmitterTile)
{
IGridTransmitter transmitter = ((ITransmitterTile)potentialTransmitterTile).getTransmitter();
if(TransmissionType.checkTransmissionType(transmitter, getTransmissionType()))
{
return sideCoord;
}
}
return null;
}
@Override
public A getAcceptor(ForgeDirection side)
{
return getPart().getCachedAcceptor(side);
}
@Override
public boolean isValid()
{
return !(getPart().tile() == null || getPart().tile().isInvalid()) && coord().exists(world());
}
@Override
public N createEmptyNetwork()
{
return getPart().createNewNetwork();
}
@Override
public N getExternalNetwork(Coord4D from)
{
TileEntity tile = from.getTileEntity(world());
if(tile instanceof ITransmitterTile)
{
IGridTransmitter transmitter = ((ITransmitterTile)tile).getTransmitter();
if(TransmissionType.checkTransmissionType(transmitter, getTransmissionType()));
{
return ((IGridTransmitter<A, N>)transmitter).getTransmitterNetwork();
}
}
return null;
}
@Override
public void takeShare()
{
containingPart.takeShare();
}
@Override
public Object getBuffer()
{
return getPart().getBuffer();
}
@Override
public N mergeNetworks(Collection<N> toMerge)
{
return getPart().createNetworkByMerging(toMerge);
}
@Override
public TransmissionType getTransmissionType()
{
return getPart().getTransmissionType();
}
public PartTransmitter<A, N> getPart()
{
return containingPart;
}
public void setPart(PartTransmitter<A, N> containingPart)
{
this.containingPart = containingPart;
}
}