Сеть вокруг соединения
Эти инструменты лежат в клее McProtoNet — рядом с MinecraftClient, а не в отдельной библиотеке.
SRV Lookup
SrvResolver спрашивает у системного резолвера запись _minecraft._tcp.<host> — так же, как это делает ванильный клиент. Записи нет — это null, а не исключение. Исключение только на реальный отказ DNS.
MinecraftClient.ConnectAsync делает этот запрос сам, если порт остался стандартным (25565) и в Host стоит имя, а не IP. Отключается через MinecraftClientOptions.UseSrv.
Все записи сразу, если выбор нужен свой, — SrvResolver.ResolveAllAsync.
LanServerDetector
Ищет миры, открытые в локальную сеть: они шлют [MOTD]…[/MOTD][AD]…[/AD] на multicast-группу 224.0.2.60:4445 примерно раз в полторы секунды. Подробнее по ссылке.
Разовый поиск в течение окна, каждый мир один раз:
Непрерывный поток объявлений, как они приходят (повторы не убираются — это сырая лента):
Порт 4445 занимает сам LanServerDetector, а не перечислитель: await using отдаёт порт всегда — и по отмене, и по break, и если перечислитель бросили с недочитанной датаграммой. Токен обязателен: слушание бесконечное, и это единственный способ его остановить. Одновременно слушать одним детектором нельзя — второй ListenAsync бросит InvalidOperationException.