AI, Minecraft и Node.js
Пару месяцев назад я записался на онлайн-курс 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, но по моему это скорее название для какой нибудь библиотеки утилит).

Круто! Интересно, насколько node подходит для написания подобного рода серверов – с какими граблями столкнешься
Ну из того что вижу пока — работа с модулем сжатия асинхронна, это не слишком удобно (хотя потом всё равно будет скрыто системой событий для пакетов). Из тех граблей что предполагаю впоследствии: работа с очень длинными целыми числами (JS для этого не очень подходит). Но в целом пока получается неплохо.
Хотелось бы как-то подключиться к процессу разработки.
На [URL=https://github.com/kurokikaze/BlackStone]Github[/URL] можно например.
Да не, я знаю как форкать
Фолловлю там тебя и в твиттере уже давно. И на форему ноды вместе сидим 
Ты все еще планируешь активно продолжать разработку ? Какие туду, приоритеты, насколько рабочая данная версия и т.д.
Хотелось поболтать
Вообще я планировал его использовать для визуализации алгоритмов поиска пути. Ну и всяких экпериментов вообще. В планах было выделить мобов в нормальные сущности с функциями движения, и разобраться с гравитацией.