package matteroverdrive.data.transport; import matteroverdrive.util.FluidNetworkHelper; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.IFluidHandler; import java.util.Collection; import java.util.HashSet; import java.util.Set; /** * Created by Simeon on 12/28/2015. */ public class FluidPipeNetwork extends AbstractPipeNetwork<IFluidPipe> { Set<IFluidPipe> fluidPipes; Set<IFluidPipe> fluidHandlers; public FluidPipeNetwork() { fluidHandlers = new HashSet<>(); fluidPipes = new HashSet<>(); } @Override public void invalidateNetwork() { super.invalidateNetwork(); FluidNetworkHelper.addFluidPipeToPool(this); } @Override public void addPipe(IFluidPipe pipe) { super.addPipe(pipe); manageFluidHandlersAdding(pipe); } public void manageFluidHandlersAdding(IFluidPipe fluidPipe) { for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { TileEntity tileEntity = fluidPipe.getTile().getWorldObj().getTileEntity(fluidPipe.getTile().xCoord+direction.offsetX,fluidPipe.getTile().yCoord+direction.offsetY,fluidPipe.getTile().zCoord+direction.offsetZ); if (tileEntity instanceof IFluidHandler && !(tileEntity instanceof IFluidPipe) && !fluidHandlers.contains(tileEntity)) { fluidHandlers.add(fluidPipe); return; } } } @Override public void removePipe(IFluidPipe pipe) { super.removePipe(pipe); for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { TileEntity tileEntity = pipe.getTile().getWorldObj().getTileEntity(pipe.getTile().xCoord+direction.offsetX,pipe.getTile().yCoord+direction.offsetY,pipe.getTile().zCoord+direction.offsetZ); if (tileEntity instanceof IFluidHandler && !(tileEntity instanceof IFluidPipe)) { fluidHandlers.remove(pipe); } } } @Override public void networkUpdate(IFluidPipe fluidPipe) { boolean stillAHandler = false; for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { TileEntity tileEntity = fluidPipe.getTile().getWorldObj().getTileEntity(fluidPipe.getTile().xCoord+direction.offsetX,fluidPipe.getTile().yCoord+direction.offsetY,fluidPipe.getTile().zCoord+direction.offsetZ); if (tileEntity instanceof IFluidHandler && !(tileEntity instanceof IFluidPipe)) { stillAHandler = true; break; } } if (!stillAHandler) { fluidHandlers.remove(fluidPipe); } manageFluidHandlersAdding(fluidPipe); } public Collection<IFluidPipe> getFluidHandlers(){return fluidHandlers;} @Override public Collection<IFluidPipe> getNetworkPipes() { return fluidPipes; } }