blob: c9998facfab814a9f64796cb3e9a5f1c1b4c3224 [file] [log] [blame] [raw]
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.TransmissionType;
import mekanism.common.capabilities.Capabilities;
import mekanism.common.transmitters.Transmitter;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraft.util.EnumFacing;
import mcmultipart.multipart.IMultipartContainer;
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().getWorld();
}
@Override
public Coord4D coord()
{
return new Coord4D(getPart().getPos(), getPart().getWorld());
}
@Override
public Coord4D getAdjacentConnectableTransmitterCoord(EnumFacing side)
{
Coord4D sideCoord = coord().offset(side);
TileEntity potentialTransmitterTile = sideCoord.getTileEntity(world());
if(!containingPart.canConnectMutual(side))
{
return null;
}
if(potentialTransmitterTile.hasCapability(Capabilities.GRID_TRANSMITTER_CAPABILITY, side.getOpposite()))
{
IGridTransmitter transmitter = potentialTransmitterTile.getCapability(Capabilities.GRID_TRANSMITTER_CAPABILITY, side.getOpposite());
if(TransmissionType.checkTransmissionType(transmitter, getTransmissionType()))
{
return sideCoord;
}
}
return null;
}
@Override
public A getAcceptor(EnumFacing side)
{
return getPart().getCachedAcceptor(side);
}
@Override
public boolean isValid()
{
IMultipartContainer cont = getPart().getContainer();
if(cont == null)
return false;
if(cont instanceof TileEntity && ((TileEntity)cont).isInvalid())
{
return false;
}
return !getPart().unloaded && coord().exists(world());
}
@Override
public N createEmptyNetwork()
{
return getPart().createNewNetwork();
}
@Override
public N getExternalNetwork(Coord4D from)
{
TileEntity tile = from.getTileEntity(world());
if(tile.hasCapability(Capabilities.GRID_TRANSMITTER_CAPABILITY, null))
{
IGridTransmitter transmitter = tile.getCapability(Capabilities.GRID_TRANSMITTER_CAPABILITY, null);
if(TransmissionType.checkTransmissionType(transmitter, getTransmissionType()));
{
return ((IGridTransmitter<A, N>)transmitter).getTransmitterNetwork();
}
}
return null;
}
@Override
public void takeShare()
{
containingPart.takeShare();
}
@Override
public void updateShare()
{
containingPart.updateShare();
}
@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;
}
}