Search in sources :

Example 6 with IBufferTransmitter

use of micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter in project Galacticraft by micdoodle8.

the class FluidNetwork method split.

@Override
public void split(IBufferTransmitter<FluidStack> splitPoint) {
    if (splitPoint instanceof TileEntity) {
        this.pipes.remove(splitPoint);
        /**
         * Loop through the connected blocks and attempt to see if there are
         * connections between the two points elsewhere.
         */
        TileEntity[] connectedBlocks = splitPoint.getAdjacentConnections();
        for (TileEntity connectedBlockA : connectedBlocks) {
            if (connectedBlockA instanceof INetworkConnection) {
                for (final TileEntity connectedBlockB : connectedBlocks) {
                    if (connectedBlockA != connectedBlockB && connectedBlockB instanceof INetworkConnection) {
                        Pathfinder finder = new PathfinderChecker(((TileEntity) splitPoint).getWorld(), (INetworkConnection) connectedBlockB, NetworkType.FLUID, splitPoint);
                        finder.init(new BlockVec3(connectedBlockA));
                        if (finder.results.size() > 0) {
                            for (BlockVec3 node : finder.closedSet) {
                                TileEntity nodeTile = node.getTileEntity(((TileEntity) splitPoint).getWorld());
                                if (nodeTile instanceof INetworkProvider) {
                                    if (nodeTile != splitPoint) {
                                        ((INetworkProvider) nodeTile).setNetwork(this);
                                    }
                                }
                            }
                        } else {
                            /**
                             * The connections A and B are not connected
                             * anymore. Give both of them a new network.
                             */
                            FluidNetwork newNetwork = new FluidNetwork();
                            for (BlockVec3 node : finder.closedSet) {
                                TileEntity nodeTile = node.getTileEntity(((TileEntity) splitPoint).getWorld());
                                if (nodeTile instanceof IBufferTransmitter) {
                                    if (nodeTile != splitPoint) {
                                        newNetwork.pipes.add((IBufferTransmitter<FluidStack>) nodeTile);
                                        newNetwork.pipesAdded.add((IBufferTransmitter<FluidStack>) nodeTile);
                                        newNetwork.onTransmitterAdded((IBufferTransmitter<FluidStack>) nodeTile);
                                        this.pipes.remove(nodeTile);
                                    }
                                }
                            }
                            newNetwork.refresh();
                            newNetwork.register();
                        }
                    }
                }
            }
        }
        if (this.pipes.isEmpty()) {
            this.unregister();
        } else {
            this.updateCapacity();
        }
    }
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) Pathfinder(micdoodle8.mods.galacticraft.api.transmission.grid.Pathfinder) INetworkConnection(micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection) FluidStack(net.minecraftforge.fluids.FluidStack) IBufferTransmitter(micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter) INetworkProvider(micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider) PathfinderChecker(micdoodle8.mods.galacticraft.api.transmission.grid.PathfinderChecker) BlockVec3(micdoodle8.mods.galacticraft.api.vector.BlockVec3)

Example 7 with IBufferTransmitter

use of micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter in project Galacticraft by micdoodle8.

the class TileEntityFluidTransmitter method update.

@Override
public void update() {
    if (!this.worldObj.isRemote) {
        if (!this.validated) {
            TickHandlerServer.oxygenTransmitterUpdates.add(this);
            this.validated = true;
        }
        Block blockType = this.getBlockType();
        if (blockType instanceof BlockFluidPipe && ((BlockFluidPipe) blockType).getMode() == BlockFluidPipe.EnumPipeMode.PULL) {
            TileEntity[] tiles = OxygenUtil.getAdjacentFluidConnections(this);
            for (EnumFacing side : EnumFacing.VALUES) {
                TileEntity sideTile = tiles[side.ordinal()];
                if (sideTile != null && !(sideTile instanceof IBufferTransmitter) && sideTile instanceof IFluidHandler) {
                    IFluidHandler handler = (IFluidHandler) sideTile;
                    FluidStack received = handler.drain(side.getOpposite(), this.pullAmount, false);
                    if (received != null && received.amount != 0) {
                        handler.drain(side.getOpposite(), this.fill(EnumFacing.DOWN, received, true), true);
                    }
                }
            }
        }
    }
    super.update();
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) FluidStack(net.minecraftforge.fluids.FluidStack) EnumFacing(net.minecraft.util.EnumFacing) IBufferTransmitter(micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter) Block(net.minecraft.block.Block) BlockFluidPipe(micdoodle8.mods.galacticraft.core.blocks.BlockFluidPipe) IFluidHandler(net.minecraftforge.fluids.IFluidHandler)

Aggregations

IBufferTransmitter (micdoodle8.mods.galacticraft.api.transmission.tile.IBufferTransmitter)7 TileEntity (net.minecraft.tileentity.TileEntity)7 FluidStack (net.minecraftforge.fluids.FluidStack)4 EnumFacing (net.minecraft.util.EnumFacing)3 FluidNetwork (micdoodle8.mods.galacticraft.core.fluid.FluidNetwork)2 BlockPos (net.minecraft.util.BlockPos)2 IFluidHandler (net.minecraftforge.fluids.IFluidHandler)2 Pathfinder (micdoodle8.mods.galacticraft.api.transmission.grid.Pathfinder)1 PathfinderChecker (micdoodle8.mods.galacticraft.api.transmission.grid.PathfinderChecker)1 INetworkConnection (micdoodle8.mods.galacticraft.api.transmission.tile.INetworkConnection)1 INetworkProvider (micdoodle8.mods.galacticraft.api.transmission.tile.INetworkProvider)1 ITransmitter (micdoodle8.mods.galacticraft.api.transmission.tile.ITransmitter)1 BlockVec3 (micdoodle8.mods.galacticraft.api.vector.BlockVec3)1 BlockFluidPipe (micdoodle8.mods.galacticraft.core.blocks.BlockFluidPipe)1 TileEntityFluidTank (micdoodle8.mods.galacticraft.core.tile.TileEntityFluidTank)1 Block (net.minecraft.block.Block)1 Fluid (net.minecraftforge.fluids.Fluid)1