예제 #1
0
  /** @return How much oxygen this network needs. */
  @Override
  public float getRequest(TileEntity... ignoreTiles) {
    List<Float> requests = new ArrayList<Float>();

    if (this.oxygenTiles.isEmpty()) this.refreshOxygenTiles();

    List<TileEntity> ignoreTilesList = Arrays.asList(ignoreTiles);
    for (TileEntity tileEntity : new HashSet<TileEntity>(this.oxygenTiles.keySet())) {
      if (ignoreTilesList.contains(tileEntity)) {
        continue;
      }

      if (tileEntity instanceof IOxygenReceiver
          && ((IOxygenReceiver) tileEntity).shouldPullOxygen()) {
        if (!tileEntity.isInvalid()) {
          if (tileEntity
                  .getWorldObj()
                  .getTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord)
              == tileEntity) {
            for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
              BlockVec3 tileVec = new BlockVec3(tileEntity);
              TileEntity tile =
                  tileVec
                      .modifyPositionFromSide(direction, 1)
                      .getTileEntity(tileEntity.getWorldObj());

              if (((IOxygenReceiver) tileEntity).canConnect(direction, NetworkType.OXYGEN)
                  && this.pipes.contains(tile)) {
                requests.add(((IOxygenReceiver) tileEntity).getOxygenRequest(direction));
              }
            }
          }
        }
      }
    }

    float total = 0.0F;

    for (Float f : requests) {
      total += f;
    }

    return total;
  }