コード例 #1
0
  @Override
  public void update() {
    if (!world().isRemote) {
      if (cacheFluid != null) {
        if (getTransmitterNetwork().fluidStored == null) {
          getTransmitterNetwork().fluidStored = cacheFluid;
        } else {
          getTransmitterNetwork().fluidStored.amount += cacheFluid.amount;
        }

        cacheFluid = null;
      }

      if (getTransmitterNetwork(false) != null && getTransmitterNetwork(false).getSize() > 0) {
        int last = lastWrite != null ? lastWrite.amount : 0;

        if (last != getSaveShare()) {
          MekanismUtils.saveChunk(tile());
        }
      }

      IFluidHandler[] connectedAcceptors = PipeUtils.getConnectedAcceptors(tile());

      for (ForgeDirection side : getConnections(ConnectionType.PULL)) {
        if (connectedAcceptors[side.ordinal()] != null) {
          IFluidHandler container = connectedAcceptors[side.ordinal()];

          if (container != null) {
            FluidStack received = container.drain(side.getOpposite(), 100, false);

            if (received != null && received.amount != 0) {
              container.drain(
                  side.getOpposite(), getTransmitterNetwork().emit(received, true), true);
            }
          }
        }
      }
    }

    super.update();
  }
コード例 #2
0
ファイル: FluidNetwork.java プロジェクト: joserobjr/Mekanism
  @Override
  public synchronized void refresh() {
    Set<IGridTransmitter<FluidNetwork>> iterPipes =
        (Set<IGridTransmitter<FluidNetwork>>) transmitters.clone();
    Iterator it = iterPipes.iterator();

    possibleAcceptors.clear();
    acceptorDirections.clear();

    while (it.hasNext()) {
      IGridTransmitter<FluidNetwork> conductor = (IGridTransmitter<FluidNetwork>) it.next();

      if (conductor == null || ((TileEntity) conductor).isInvalid()) {
        it.remove();
        transmitters.remove(conductor);
      } else {
        conductor.setTransmitterNetwork(this);
      }
    }

    for (IGridTransmitter<FluidNetwork> transmitter : iterPipes) {
      IFluidHandler[] acceptors = PipeUtils.getConnectedAcceptors((TileEntity) transmitter);

      for (IFluidHandler acceptor : acceptors) {
        ForgeDirection side =
            ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor));

        if (side != null
            && acceptor != null
            && !(acceptor instanceof IGridTransmitter)
            && transmitter.canConnectToAcceptor(side, true)) {
          possibleAcceptors.add(acceptor);
          acceptorDirections.put(
              acceptor, ForgeDirection.getOrientation(Arrays.asList(acceptors).indexOf(acceptor)));
        }
      }
    }
  }