Игровой режим
Прекрасно! Наш бот умеет подключиться к серверу, проходит аутентификацию и конфигурацию.
_client = new MinecraftClient(new MinecraftClientStartOptions()
{
ConnectTimeout = TimeSpan.FromSeconds(5),
Host = _host,
Port = 25565,
WriteTimeout = TimeSpan.FromSeconds(5),
ReadTimeout = TimeSpan.FromSeconds(5),
Version = (int)_version
});
await _client.ConnectAsync();
await _client.Login("TestBot", _host,25565);
Запустим его.

Однако, после некоторого простоя, бота кикает сервер с ошибкой таймаута.

Чтение игровых пакетов
Дабы бота не кикало, нужно отвечать на пакеты KeepAlive.
private async Task RunReadLoop()
{
await foreach (var packet in
_client.OnAllPackets(PacketState.Play))
{
HandlePlayPacket(packet);
}
}
if (packet is CPlay.KeepAlivePacket keepAlive)
{
await _client.SendPacket(new SPlay.KeepAlivePacket()
{
KeepAliveId = keepAlive.KeepAliveId
});
}
Теперь бот может работать вечно.
Last modified: 14 March 2025