public Request getNextBlock(){
		if(complete){return null;}
		Iterator<SubPiece> itor = data.iterator();
		SubPiece last=null;
		int max = idealSize;
		if(max > finalPiece.length){
			max = finalPiece.length;
		}
		//TODO: reduces i think?
		while(itor.hasNext()){
			if(last==null){
				last=itor.next();
			}else{
				SubPiece curr =itor.next();
				if(curr.begin>last.begin+last.data.length){//plzz dont be off by one kay thx
					//Our next piece falls between two pieces
					int m=curr.begin-(last.begin+last.data.length);//delta aka between blocks
					m=m>max?m:max;
					return new Request(pieceIndex,last.begin+last.data.length,m);
				}
				last = curr;
			}
		}
		
		
		if(last==null){//First request for this piece ^.^
			return new Request(pieceIndex,0,max);
		}else{//At the end? Maybe?
			int m = finalPiece.length-(last.begin+last.data.length)>max?max:finalPiece.length-last.begin+last.data.length;
			if(m!=0){//if not complete.
				return new Request(pieceIndex,last.begin+last.data.length,max);
			}
		}
		return null;//its actually complete.
	}