Пример #1
0
  public void tick(TickType type, Object... data) {
    for (int dim : flows.keySet()) {
      Collection<CrystalFlow> c = flows.get(dim);
      Iterator<CrystalFlow> it = c.iterator();
      while (it.hasNext()) {
        CrystalFlow p = it.next();

        if (toBreak.contains(p)) {
          p.receiver.onPathBroken(p, FlowFail.SIGHT); // sight
          p.resetTiles();
          it.remove();
        } else {
          if (p.transmitter.canConduct() && p.canTransmit()) {
            int amt = p.drain();
            if (amt > 0) {
              int add = p.receiver.receiveElement(p.element, amt);
              p.transmitter.drain(p.element, amt);
              if (p.isComplete()) {
                p.resetTiles();
                it.remove();
                CrystalNetworkLogger.logFlowSatisfy(p);
                p.receiver.onPathCompleted(p);
              } else if (add <= 0) {
                CrystalNetworkLogger.logFlowBreak(p, FlowFail.FULL);
                // p.receiver.onPathBroken(p.element);
                p.resetTiles();
                it.remove();
              }
            }
          } else {
            CrystalNetworkLogger.logFlowBreak(p, FlowFail.ENERGY);
            p.receiver.onPathBroken(p, FlowFail.ENERGY);
            p.resetTiles();
            it.remove();
          }
        }
      }
    }
    toBreak.clear();
    /*
    for (ChunkRequest cr : pathfindingChunkRequests) {
    	Chunk c = cr.chunk.load();
    	cr.pathfinder.receiveChunk(c);
    }
    pathfindingChunkRequests.clear();
     */
  }