Skip to content

AI, Minecraft и Node.js

14/10/2011

Пару месяцев назад я записался на онлайн-курс Artificial Intellingence от Stanford University. И пока курс не начался (он начался только в понедельник 10 октября) пришла ко мне мысль сделать какую нибудь «песочницу» для тестирования разных алгоритмов, которые будут встречаться в курсе. Захотелось сделать такую песочницу из Minecraft.

Вначале я думал о том чтобы просто модифицировать клиент или написать к нему плагин. Но т.к. при модификации пришлось бы работать с декомпилированным (плохо читаемым) Java-кодом, а система плагинов пока оставляет желать лучшего, я переключил своё внимание на сервер. Тут дела были несколько лучше. Для Minecraft есть несколько серверов с открытым исходным кодом на разных языках — C, Java, Python, .NET и т.д. Покопавшись в них, а также покопавшись в nodecraft — заброшенной попытке написать minecraft-сервер на JavaScript, я решил все таки попробовать написать сервер самостоятельно, благо опыт работы с двоичными протоколами после разработки limestone у меня есть, да и во внутренности Minecraft я уже немного забирался (правда с Питоном). Протокол Minecraft описан (пусть даже немного неточно) в Minecraft Coalition wiki.

За первые пару дней я разобрался с последовательностью авторизации клиента и перешёл непосредственно к логину. Для логина сервер должен выслать клиенту местность вокруг места появления и всякие стартовые параметры типа времени сервера, содержимого инвентаря, точки респауна в случае если игрок погибнет и т.д. В IRC на канале #mcdevs меня сразу предупредили что отправка чанков клиенту это довольно сложная часть разработки и многие авторы серверов срезаются именно здесь. В результате двухдневных попыток подбора библиотеки сжатия и экспериментов с порядком пакетов отправить местность всё таки получилось. На следующий день после этого я прикрутил отправку keepalive-пакетов (без этого время пребывания на сервере ограничивалось одной минутой) и добавил респаун мобов и их движение. Теперь осталось только добавить определение столкновений, чтобы делать лабиринты, и можно приступать к заданиям второй главы курса — алгоритмам поиска пути.

Когда доделаю сервер будет видимо отдельный большой пост о протоколе Minecraft, написании сервера и насколько он на самом деле подходит для тестирования AI-алгоритмов. Пока мои наработки можно найти на Github. Сервер я назвал blackstone (на #mcdevs предлагали node-minecraft, но по моему это скорее название для какой нибудь библиотеки утилит).

11 комментариев
  1. Круто! Интересно, насколько node подходит для написания подобного рода серверов — с какими граблями столкнешься

    • Ну из того что вижу пока — работа с модулем сжатия асинхронна, это не слишком удобно (хотя потом всё равно будет скрыто системой событий для пакетов). Из тех граблей что предполагаю впоследствии: работа с очень длинными целыми числами (JS для этого не очень подходит). Но в целом пока получается неплохо.

  2. Хотелось бы как-то подключиться к процессу разработки.

    • На Github можно например.

      • Да не, я знаю как форкать🙂 Фолловлю там тебя и в твиттере уже давно. И на форему ноды вместе сидим🙂
        Хотелось поболтать🙂 Ты все еще планируешь активно продолжать разработку ? Какие туду, приоритеты, насколько рабочая данная версия и т.д.

        • Вообще я планировал его использовать для визуализации алгоритмов поиска пути. Ну и всяких экпериментов вообще. В планах было выделить мобов в нормальные сущности с функциями движения, и разобраться с гравитацией.

  3. hopmaster permalink

    Ой! Уважаемый!🙂 Сердечно прошу поделиться информацией о протоколе minecraft. А то хочется клиент написать своими ручками🙂

    • Само описание есть на Minecraft Coalition wiki, а если имеется в виду русскоязычное, то даже не знаю, у меня сейчас мало времени писать.

      • hopmaster permalink

        Так да, я как раз в нём сейчас и пытаюсь ковыряться и ещё в этом тоже: http://www.minecraftwiki.net/wiki/Classic_server_protocol

        Сейчас начну канючить чтобы написали)))))) Мне бы хотябы примерчик для незарегистрированного пользователя Player что чего и как отправлять и что получать чтобы научиться хотябы просто бродить по пространству карты.

        А писать пытаюсь на actionscript3 чтобы в браузере сразу было. Хотел ещё ваше мнение по поводу такого клиента услышать.

        • Примеров вроде на джитхабе хватает. Такой клиент будет вряд ли очень нужен.
          Лучше делать на канвасах и вебгл + яваскрипт.

        • Вам придется постоянно апдейтить протокол.
          Есть смысл работы с классиком ?

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: