use of buildcraft.api.transport.pipe.PipeBehaviour in project BuildCraft by BuildCraft.
the class BCTransportProxy method getServerGuiElement.
@Override
public Object getServerGuiElement(int id, EntityPlayer player, World world, int x, int y, int z) {
BCTransportGuis gui = BCTransportGuis.get(id);
if (gui == null)
return null;
TileEntity tile = world.getTileEntity(new BlockPos(x, y, z));
switch(gui) {
case FILTERED_BUFFER:
{
if (tile instanceof TileFilteredBuffer) {
TileFilteredBuffer filteredBuffer = (TileFilteredBuffer) tile;
return new ContainerFilteredBuffer_BC8(player, filteredBuffer);
}
break;
}
case PIPE_DIAMOND:
{
if (tile instanceof IPipeHolder) {
IPipeHolder holder = (IPipeHolder) tile;
IPipe pipe = holder.getPipe();
if (pipe == null)
return null;
PipeBehaviour behaviour = pipe.getBehaviour();
if (behaviour instanceof PipeBehaviourDiamond) {
PipeBehaviourDiamond diaPipe = (PipeBehaviourDiamond) behaviour;
return new ContainerDiamondPipe(player, diaPipe);
}
}
break;
}
case PIPE_DIAMOND_WOOD:
{
if (tile instanceof IPipeHolder) {
IPipeHolder holder = (IPipeHolder) tile;
IPipe pipe = holder.getPipe();
if (pipe == null)
return null;
PipeBehaviour behaviour = pipe.getBehaviour();
if (behaviour instanceof PipeBehaviourWoodDiamond) {
PipeBehaviourWoodDiamond diaPipe = (PipeBehaviourWoodDiamond) behaviour;
return new ContainerDiamondWoodPipe(player, diaPipe);
}
}
break;
}
case PIPE_EMZULI:
{
if (tile instanceof IPipeHolder) {
IPipeHolder holder = (IPipeHolder) tile;
IPipe pipe = holder.getPipe();
if (pipe == null)
return null;
PipeBehaviour behaviour = pipe.getBehaviour();
if (behaviour instanceof PipeBehaviourEmzuli) {
PipeBehaviourEmzuli emPipe = (PipeBehaviourEmzuli) behaviour;
return new ContainerEmzuliPipe_BC8(player, emPipe);
}
}
break;
}
case GATE:
{
int ry = y >> 3;
EnumFacing gateSide = EnumFacing.getFront(y & 0x7);
tile = world.getTileEntity(new BlockPos(x, ry, z));
if (tile instanceof IPipeHolder) {
IPipeHolder holder = (IPipeHolder) tile;
PipePluggable plug = holder.getPluggable(gateSide);
if (plug instanceof PluggableGate) {
return new ContainerGate(player, ((PluggableGate) plug).logic);
}
}
break;
}
}
return null;
}
use of buildcraft.api.transport.pipe.PipeBehaviour in project BuildCraft by BuildCraft.
the class ItemPluggablePulsar method onPlace.
@Override
public PipePluggable onPlace(@Nonnull ItemStack stack, IPipeHolder holder, EnumFacing side, EntityPlayer player, EnumHand hand) {
IPipe pipe = holder.getPipe();
if (pipe == null) {
return null;
}
PipeBehaviour behaviour = pipe.getBehaviour();
if (behaviour instanceof IMjRedstoneReceiver) {
SoundUtil.playBlockPlace(holder.getPipeWorld(), holder.getPipePos());
return new PluggablePulsar(BCTransportPlugs.pulsar, holder, side);
} else {
return null;
}
}
use of buildcraft.api.transport.pipe.PipeBehaviour in project BuildCraft by BuildCraft.
the class Pipe method updateConnections.
private void updateConnections() {
if (holder.getPipeWorld().isRemote) {
return;
}
updateMarked = false;
EnumMap<EnumFacing, Float> old = connected.clone();
connected.clear();
types.clear();
textures.clear();
for (EnumFacing facing : EnumFacing.VALUES) {
PipePluggable plug = getHolder().getPluggable(facing);
if (plug != null && plug.isBlocking()) {
continue;
}
TileEntity oTile = getHolder().getNeighbourTile(facing);
if (oTile == null) {
continue;
}
IPipe oPipe = getHolder().getNeighbourPipe(facing);
if (oPipe != null) {
PipeBehaviour oBehaviour = oPipe.getBehaviour();
if (oBehaviour == null) {
continue;
}
PipePluggable oPlug = oTile.getCapability(PipeApi.CAP_PLUG, facing.getOpposite());
if (oPlug == null || !oPlug.isBlocking()) {
if (canPipesConnect(facing, this, oPipe)) {
connected.put(facing, DEFAULT_CONNECTION_DISTANCE);
types.put(facing, ConnectedType.PIPE);
textures.put(facing, behaviour.getTextureIndex(facing));
}
continue;
}
}
BlockPos nPos = holder.getPipePos().offset(facing);
IBlockState neighbour = holder.getPipeWorld().getBlockState(nPos);
ICustomPipeConnection cust = PipeConnectionAPI.getCustomConnection(neighbour.getBlock());
if (cust == null) {
cust = DefaultPipeConnection.INSTANCE;
}
float ext = DEFAULT_CONNECTION_DISTANCE + cust.getExtension(holder.getPipeWorld(), nPos, facing.getOpposite(), neighbour);
if (behaviour.canConnect(facing, oTile) & flow.canConnect(facing, oTile)) {
connected.put(facing, ext);
types.put(facing, ConnectedType.TILE);
textures.put(facing, behaviour.getTextureIndex(facing));
}
}
if (!old.equals(connected)) {
for (EnumFacing face : EnumFacing.VALUES) {
boolean o = old.containsKey(face);
boolean n = connected.containsKey(face);
if (o != n) {
IPipe oPipe = getHolder().getNeighbourPipe(face);
if (oPipe != null) {
oPipe.markForUpdate();
}
}
}
}
getHolder().scheduleNetworkUpdate(PipeMessageReceiver.BEHAVIOUR);
}
Aggregations