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(); */ }