protected void collectBlockSelection(AddressRange range, List<ByteBlockRange> result) {
		// TODO: These blocks really ought to be indexed by start address
		//   Use a NavigableMap
		//     I'll wait to assess speed before worrying about tree indexing
		//   Use entries that groups the relevant objects instead of co-indexed arrays
		//     Though a nicety, it becomes necessary if indexing/sorting by start address
		for (int i = 0; i < blocks.length; i++) {
			Address blockStart = memBlocks[i].getStart();
			Address blockEnd = memBlocks[i].getEnd();
			AddressRange intersection =
				range.intersect(new AddressRangeImpl(blockStart, blockEnd));
			if (intersection != null) {
				ByteBlockInfo startInfo = getByteBlockInfo(intersection.getMinAddress());
				ByteBlockInfo endInfo = getByteBlockInfo(intersection.getMaxAddress());
				ByteBlockRange br = new ByteBlockRange(startInfo.getBlock(),
					startInfo.getOffset(), endInfo.getOffset());
				result.add(br);
			}
		}
	}
Get a plugin event for the given block and offset.

@param source source to use in the event
@param block block to use to generate the event
@param offset offset into the block
@param column the column within the UI byte field
Ghidra/Features/ByteViewer/src/main/java/ghidra/app/plugin/core/byteviewer/ProgramByteBlockSet.java