Стив пишет заклинания на Python. Обучение детей программированию в Minecraft
Я не имею в виду создание и использование модов, это слишком высокий уровень входа. Первые попытки были после знакомства с первым изданием книги Minecraft. Программируй свой мир и удачной настройки сервера Bukkit на домашней машине. На данный момент (начало 2021 г.) есть второе издание, ссылка как раз на него а также несколько похожих книг других авторов. Второе издание хорошо тем, что в нем исправлены ошибки в коде, которые были в первом, а также используется Python3 и более новая версия сервера. Вот тут на Хабре обзор первого издания от издательства Питер.
На странице издательства Wiley есть несколько видео для упрощения, самое первое как раз об установке и настройке сервера Bukkit, отдельно установка Python (не Anaconda, из простого дистрибутива), тьюториал подключения к запущенному серверу и запуска в нем HelloWorld из питоновского IDLE.
Библиотека mcpi была изначально написана для запуска python-скриптов в Майнрафте на Raspberry Pi. Версия Minecraft для Raspberry Pi распространяется бесплатно. Сейчас mcpi работает под Windows. Качать отдельно ее не надо, все входит в состав Bukkit-сервера.

Программируем в мире Minecraft
Хабр, привет! Пока все обсуждают ИИ в мире Pacman, мы начнем делать свой ИИ в Minecraft с фреймворком Malmo от Microsoft Research. Pacman у нас тоже появится. Если вы любите кубический мир, или вам хотелось бы начать изучать искусственный интеллект, или у вас есть дети, с которыми вы не можете найти общие увлечения, или же вас просто заинтересовала тема – прошу под кат.

В этой статье я постараюсь затронуть несколько тем:
Minecraft: моя предыстория
Я познакомилась с игрушкой, будучи уже студенткой. Это не помешало мне в тот же день отложить все свои личные, рабочие и академические цели, и целиком уйти в кубическую вселенную. Отпустило меня тогда только через месяц, но до сих пор я с радостью захожу иногда побегать часок по любимому миру.
Для меня Minecraft стал продолжением любимой игрушки детства – Lego, исправив ее главный недостаток: постоянную нехватку деталей. Аналог Lego с безлимитными деталями, что может быть лучше.
Изучая сабж, я случайно узнала, что мир Minecraft не ограничивается игрой, мерчем, летсплеями и фан артами. В игре снимают целые сериалы, и – неожиданно – они являются довольно популярными. На мой взгляд, это забавно.
Меня очень обрадовала новость о наличии open source фреймворка для программирования в мире Minecraft. Я твердо уверена, что в будущем в подавляющем числе профессий могут понадобиться базовые навыки программирования. Фреймворк на базе любимой игрушки, на мой взгляд, отличный способ показать ребенку захватывающий мир программирования.
Malmo: основная идея
Фреймворк Malmo был создан совместными усилиями нескольких исследователей, главной целью которых было адаптировать интересный мир к экспериментам в области искусственного интеллекта. Алгоритмов ИИ по-прежнему относительно мало, и все они имеют огромный потенциал для более детального изучения и усовершенствования. Мне очень нравится, что Microsoft создает дополнительную мотивацию к изучению неизведанного.
Технические моменты
Установка
Несмотря на четкое следование инструкции, вы можете столкнуться с целым рядом проблем в процессе установки. Мои проблемы в основном были связаны с тем, что некоторые компоненты у меня уже были поставлены, но версия отличалась. Все проблемы лечатся с помощью всем известного сайта.
Поддержка ОС и языков программирования
Несмотря на смелое заявление о поддержке всех трех популярных ОС, мне показалось, что тестирование было как следует проведено лишь для ОС Windows. Победив проблемы с установкой, ваша головная боль на ОС Windows обещает закончиться. На Linux проблемы, скорее всего, продолжатся, так как поднятый сервер периодически падает, не сообщая причин. Если вы продолжите мои эксперименты – обязательно пишите в комментарях о вашем опыте.
Авторы постарались поддержать большое число популярных языков и сделали обвязки для C#, C++, Lua, Python2 и Java. Я выбрала Python.
Как играть программировать в Malmo
Логику для каждого из человечков вы можете реализовать в коде, а также можно управлять персонажем самостоятельно всем знакомыми клавишами AWSD.
Кроме сервака с клиентом и файла с логикой, мы также имеем xml файл с описанием начального состояния мира. Авторы не настаивают на его существовании, и в своих примерах они часто кладут его в строку и хранят в коде, но, на мой взгляд, удобнее сразу сделать его отдельным файлом, добавляя нужные куски по мере необходимости.
Авторы позаботились о нас и сделали внушительное число примеров, добавив к ним описание.
Мой совет: не пытайтесь начинать с нуля, возьмите за базу первый пример. В нем ничего не происходит, мы просто создаем самый простой плоский мир и присоединяемся к персонажу. В цикле while в конце вы можете по своему усмотрению добавить экшена в происходящее. Например, напишите там:
В xml файле вы можете задать режим игры:
Задайте начальное время, позицию персонажа, кастомизируйте мир: сделайте его плоским или приближенным к реальности.
Вот этот код нарисует вам Пакмана, который поедает шарики и уходит в радужный кратер:
Наконец, в xml можно добавить необходимые координаты для добавления обзора персонажу:
По умолчанию у нас нет возможности осмотреться и получить информацию о ближайших блоках. Тем не менее, мы можем сказать, что хотим знать, что находится вокруг нас. Учтите, что в этом случае нам нужно использовать относительные координаты, отсчитываемые от кубика с ногами героя. В результате выполнения подобной строчки:
Мы получим массив со строками. Каждая строка – это текстовое представление типа одного из кубиков.
Таким образом можно создать ИИ, который исследует мир, ищет что-либо и не умирает по глупым причинам. Простейший вариант без использования машинного обучения я реализовала тут.
Фичи для ИИ
Конечно же, первое, что мне захотелось увидеть для реализации алгоритмов ИИ в malmo – это возможность двигаться дискретно. В вопросе ИИ и так хватает сложностей, и не хочется добавлять ко всему прочему постоянную корректировку направления и скорости движения.
Включаем нужное в xml так:
К сожалению, этого будет недостаточно. Чтобы двигаться дискретно, ваше начальное положение должно быть строго в центре кубика:
Целые координаты поставят вас в пересечение кубов, персонаж откажется двигаться с места, никаких предупреждений и ошибок вы не увидите. В туториале об этом также не предупреждают. Я потратила около 4 часов, чтобы осознать суть проблемы и сделать координаты x и z половинчатыми. (y отвечает за высоту и не играет роли в данной истории).
Кроме этого, исследователи добавили несколько приятных фич для решения задачи обучения с подкреплением (Reinforcement Learning). Алгоритмы этого типа подразумевают постоянное награждение или наказание искусственного интеллекта за те или иные действия. Разработчики продумали этот момент и добавили возможность прописать эти действия/события в xml, избавив код от постоянных одинаковых проверок. Вы также можете задать окончание игры по наступлению некоторого события:
Например, тут мы постоянно чуть-чуть наказываем персонажа за каждый шаг, не увенчавшийся победой; сильно награждаем за победу и наказываем за смерть; наконец, завершаем раунд в случае смерти или выигрыша.
Malmo: вывод
Авторы фреймворка подарили нам потрясающую возможность погрузиться в любимый мир с другой стороны. Malmo пока что находится в бете, во многих ситуациях он… заставляет совершенствовать свои навыки в troubleshooting. Тем не менее, его плюсы перевешивают все его минусы, а тот факт того, что исходники лежат в открытом доступе на github, позволяет нам самостоятельно доделать нужное место или создать issue для исправления критических багов.
Авторы проекта по понятным для меня причинам не упоминают ни в одной из статей возможность обучать детей на основе фреймворка: ребенок вряд ли справится с борьбой с мелкими, но частыми багами. Тем не менее, я уверена, что если родитель поможет своему ребенку и будет программировать вместе с ним, это даст отличные результаты и позволит вам провести время с пользой.
Malmo Challenge: история и результаты
Кроме самого фреймворка, Microsoft также проводил соревнование на базе платформы, названной Malmo Challenge. Оно было призвано побудить ученых и исследователей к работе над коллаборативными алгоритмами. Конкурс стартовал примерно полгода назад, а результаты появились 5 июня.
Суть челленджа в следующем: у нас есть плоский мир, забор сложной формы, внутри загона бегает хрюшка и ходит 2 человека. Наша задача – создать ИИ для одного из персонажей, которых сможет взаимодействовать со вторым, чтобы вместе они загнали хрюшку в замкнутое пространство. Второй персонаж может вести себя рандомно, может управляться человеком, другим ИИ, это может быть даже второй экземпляр вашего собственного ИИ.
При этом, вы можете получить максимальное число очков, поймав хрюшку, или же получить небольшое число очков, прыгнув в лужу сбоку. Вы не получите ничего, если ваш напарник решит прыгнуть в лужу, отказавшись от взаимодействия с вами.
Эта задача в общем виде называется Охота на оленя. Она была сформулирована еще в 18 веке Жан Жаком Руссо. Несмотря на внушительный возраст проблемы, до сих пор неясно, какой алгоритм наиболее эффективно решает поставленную задачу.
Я рада поделиться с вами результатами соревнования. Меня очень удивило распределение мест в турнирной таблице.
Первое место занял проект команды из Великобритании. Авторы трезво оценили сильный недостаток времени, поняли, что они вряд ли успеют адаптировать для задачи сложные существующие алгоритмы. Они выбрали Байесовский вывод для определения типа напарника, а также Марковские цепи для непосредственного игрового процесса. И победили.
Участники, занявшие второе место, решили взять самые сложные из существующих решений, они использовали DNN, Reinforcement learning, DQN, A3C model… И это все не помогло им обойти Байеса и Марковские цепи.
Подытожим статью мыслью о том, что нужно быть проще.
Если вам хочется также попробовать создать свой ИИ, присоединяйтесь к нашему русскоязычному чату про нейронные сети в Telegram. Там вы можете задать интересующие вас вопросы, а также поделиться вашими достижениями.
Видео с моим рассказом о Malmo на встрече Петербургского Python митапа уже появилось на моем канале на Youtube. Там также есть записи других моих лекций и прочая болтовня про IT.
Mojang API
This page documents the Mojang Minecraft API. You should note that all public APIs are rate limited so you are expected to cache the results. This is currently set at 600 requests per 10 minutes but this may change. For some parts of the API, demo accounts are sometimes included, sometimes not. Mojang keeps changing this. Authenticated API endpoints require authentication with a bearer token in the request headers. For information about the authentication API, see Authentication.
Contents
API Status (Removed)
Returns status of various Mojang services. Possible values are green (no issues), yellow (some issues), red (service unavailable).
Response
Username to UUID

This will return the UUID of the name at the timestamp provided.
?at=0 can be used to get the UUID of the original user of that username, however, it only works if the name was changed at least once, or if the account is legacy.
Response
If there is no player with the given username an HTTP status code 204 (No Content) is sent without any HTTP body.
If the timestamp is not a number, too big or too small the HTTP status code 400 (Bad Request) is sent with an error message looking like this:
Usernames to UUIDs
This will return player UUIDs and some extras.
Payload
Headers
Response
UUID to Name History
Returns all the usernames this user has used in the past and the one they are using currently. The UUID must be given either without, or correctly formatted hyphens.
Response
The changedToAt field is a unix timestamp in milliseconds.
UUID to Profile and Skin/Cape
This will return the player’s username plus any additional information about them (e.g. skins). Example: https://sessionserver.mojang.com/session/minecraft/profile/4566e69fc90748ee8d71d7ba5aa00d20
This has no ratelimit.
Response
The «value» base64 string for the «textures» object decoded:
Blocked Servers
Returns a list of SHA1 hashes used to check server addresses against when the client tries to connect.
This check is done by the bootstrap class in netty. The default netty class is overridden by one in the com.mojang:netty dependency loaded by the launcher. This allows it to affect any version that used netty (1.7+)
Response
A line-separated list of all SHA1 hashes. Some of the current
2200 hashes have been cracked.
| Known cracked hashes |
|---|
A quite large list of known hashes is available at: https://github.com/Reecepbcups/FollowTheEULA/blob/master/blockedServersList.txt
Some hashes on there might not be in the current hashes list anymore.
Statistics
Get statistics on the sales of Minecraft.
Payload
The payload is a JSON list of options under the metricKeys key. You will receive a single object corresponding to the sum of sales of the requested type(s). You must request at least one type of sale. Below is the default list used by https://minecraft.net/en/stats/
Headers
Response
A JSON object is returned with the total amount of copies sold, the number of copies sold in the last 24 hours and how many sales there are per second.
Profile Information
This API endpoint fetches information about the current account including UUID, username, skins, and capes.
Headers
Response
Profile Name Change Information
This API endpoint fetches information about the profile name such as the date the name was changed and the date the account was created.
Headers
Response
Check Product Voucher
This API endpoint checks if the gift card is valid.
Headers
Error Response
| Status Codes | Responses |
| 404 | Product Voucher is invalid. (Either claimed or not activated) |
| 200/204 | Success (Product voucher is valid) |
Name Availability
This API endpoint checks if the given name is available.
Headers
Response
Change Name
This will set the name for the account that the access token in the Authorization header belongs to.
Payload
Headers
Success Response
Error Response
Upon error, the server will send back a JSON with the error.
| Status Codes | Responses |
| 400 | Name is invalid, longer than 16 characters or contains characters other than (a-zA-Z0-9_) |
| 403 | Name is unavailable (Either taken or has not become available) |
| 401 | Unauthorized (Bearer token expired or is not correct) |
| 429 | Too many requests sent |
| 500 | Timed out (API lagged out and could not respond) |
| 200 | Success (Name changed) |
Change Skin
This will set the skin for the selected profile, but Mojang’s servers will fetch the skin from a URL.
Payload
The payload for this API consists of a JSON object containing the URL and variant
variant is either «classic» or «slim»
Headers
Response
Upon error, the server will send back a JSON with the error. (Success is a blank payload)
Example
Upload Skin
This uploads a skin to Mojang’s servers. It also sets the user’s skin. This works on legacy accounts as well.
Payload
The payload for this API consists of multipart form data. There are two parts (order does not matter b/c of boundary):
| variant | Either «classic» for normal models or «slim» for slim models. |
| file | Raw image file data |
Headers
Response
No response unless an error occurred.
Example
Reset Skin
Resets the user’s skin to the default one.
Headers
Response
No response unless an error occurred.
Example
Hide Cape
Prevents the current cape from being shown on the account.
Что такое api minecraft
Это руководство призвано объяснить и показать некоторые вещи, которые вы сможете использовать при разработке модов. Чтобы создавать моды для Minecraft, вам часто придётся сталкиваться с написанием необычного кода, который поймёт Minecraft Так как изменения в Minecraft превносятся достаточно быстро, он, по своей сути, не предназначен для модификаций.
В отличии от других библиотек для создания модов, Fabric не является надстройкой над игрой, чтобы дать разработчикам больше функций. Вместо этого, код встроен с помощьюбиблиотеку Mixin.
Эта статья расскажет о способах взаимодействия с Minecraft, в порядке предпочтительности.
UUID to Profile and Skin/Cape
This has no ratelimit.
Response
The «value» base64 string for the «textures» object decoded:
Usernames to UUIDs
This will return player UUIDs and some extras.
Payload
Headers
Response
Что такое api minecraft
title: Создание модов для Minecraft description: Подробный и понятный учебник по созданию своего мода для Minecraft. Научитесь создавать все: от блока до целого измерения!
Хотите создать мод для Minecraft? Добавить в игру что-то свое: блок, моба, целое измерение?
На этом сайте вы найдете интересный, понятный и подробный учебник по созданию собственных модов для Minecraft.
Вы думаете это сложно? На самом деле нет (с помощью этого учебника 🙂
Первый и абсолютно необходимый навык для создания модов — знание основ программирование и Java.
Переменная, объект, класс, метод — все эти слова должны быть вам достаточно хорошо знакомы. Если вы не знаете, что это, то вам необходимо пройти самые основы языка Java. Сделать это можно, например, по этим урокам.
Теперь поговорим об API.
API — набор инструментов для упрощения работы с программой (в нашем случае, с Minecraft).
К сожалению, никакого встроенного API для создания модов у Minecraft нет.
Minecraft не поддерживает моды!
Однако, исходный код игры можно получить, и многие разработчики стали разрабатывать свои неофициальные API: Forge, Sponge и так далее. О Forge вы наверняка не раз слышали. Это самое популярное на сегодня API для создания модов.
Поэтому у вас есть выбор.
Писать моды с помощью API
Это будет проще. Но запускаться ваши моды смогут только на клиенте с заранее установленным API. Моды, написанные с помощью Forge пойдут только на Minecraft, где предварительно установлен Forge.
Большинство всех Minecraft модов написаны при помощи Forge API.
Писать моды без помощи API
Это несколько сложнее, так как потребует от вас глубокого понимания внутреннего устройства работы Minecraft. При написании модов без использования API вы напрямую редактируете исходный код игры. Получается, что вы словно пишете свой собственный Minecraft (или новую его версию), и никакие другие моды работать вместе с вашим скорее всего не будут.
В большинстве случаев рекомендуется писать моды при помощи Forge API. Он сейчас наиболее популярен и является практически стандартом.
Большинство модов и уроков по их созданию написанно с помощью этого API. Forge настолько распространен, что частенько под созданием модов для Minecraft понимается именно их создание с помощью Forge API.
У меня вопрос/проблема!
Если что-то не работает, но должно, или (что еще хуже), что-то работает, но не должно, смело обращайтесь на форум за помощью.
Кстати, там можно не только просить о помощи, но еще и общаться с другими создателями модов, обмениваться опытом и рекламировать свои моды!
Как поделиться с другом?
Вы можете просто скинуть ссылку на статью. Однако, статьи на данном сайте порой достигают внушительных размеров. В таком случае, можно поделиться ссылкой на конкретный раздел статьи.
Разделы статьи разделяются заголовками. Наведите на заголовок курсор мышки. Справа от него появится значок ссылки. Нажмите на него правой кнопкой и выберите пункт «Копировать адрес ссылки».
Вы можете вносить правки в существующие статьи, добавлять свои собственные, а также предлагать идеи для новых статей. Сделать это очень просто. Весь процесс полностью автоматизирован. Подробные инструкции вы можете найти на вики по работе с сайтом.
На просторах интернета достаточно много штучных учебников под какие-то конкретные Minecraft версии. Получается, что нет единого источника информации, который поддерживается сообществом, а не единственным автором.
Здесь мы реализуем другой подход.
Сайт является работает на статическом генераторе MkDocs с темой Material. Такой подход позволяет не возиться с исходниками сайта, а писать статьи в удобной markdown разметке, которая автоматически собирается в готовый и красивый сайт.
UUID to Name History
Returns all the usernames this user has used in the past and the one they are using currently. The UUID must be given either without, or correctly formatted hyphens.
Response
The changedToAt field is a unix timestamp in milliseconds.
Minecraft Wiki
Из-за новой политики Microsoft в отношении сторонних ресурсов, Minecraft Wiki больше не является официальной. В связи с этим были внесены некоторые изменения, в том числе и обновлён логотип вики-проекта. Подробности на нашем Discord-сервере.
Change Name
This will set the name for the account that the access token in the Authorization header belongs to.
Payload
Headers
Success Response
Error Response
Upon error, the server will send back a JSON with the error.
| Status Codes | Responses |
| 400 | Name is invalid, longer than 16 characters or contains characters other than (a-zA-Z0-9_) |
| 403 | Name is unavailable (Either taken or has not become available) |
| 401 | Unauthorized (Bearer token expired or is not correct) |
| 429 | Too many requests sent |
| 500 | Timed out (API lagged out and could not respond) |
| 200 | Success (Name changed) |
Native Minecraft APIs
Если Minecraft уже позволяет вам что-то делать, не изобретайте заново колесо. Хорошим примером этого является класс “Registry”, который позволяет добавлять блоки и элементы без каких-либо изменений в код Minecraft.
Plugin API
Statistics
Get statistics on the sales of Minecraft.
Payload
Headers
Response
A JSON object is returned with the total amount of copies sold, the number of copies sold in the last 24 hours and how many sales there are per second.
Username to UUID
This will return the UUID of the name at the timestamp provided.
?at=0 can be used to get the UUID of the original user of that username, however, it only works if the name was changed at least once, or if the account is legacy.
Response
Name Availability
This API endpoint checks if the given name is available.
Headers
Response
Profile Name Change Information
This API endpoint fetches information about the profile name such as the date the name was changed and the date the account was created.
Headers
Response
Contents
Mojang API
This page documents the Mojang Minecraft API. You should note that all public APIs are rate limited so you are expected to cache the results. This is currently set at 600 requests per 10 minutes but this may change. For some parts of the API, demo accounts are sometimes included, sometimes not. Mojang keeps changing this. Authenticated API endpoints require authentication with a bearer token in the request headers. For information about the authentication API, see Authentication.
Check Product Voucher
This API endpoint checks if the gift card is valid.
Headers
Error Response
| Status Codes | Responses |
| 404 | Product Voucher is invalid. (Either claimed or not activated) |
| 200/204 | Success (Product voucher is valid) |
Change Skin
This will set the skin for the selected profile, but Mojang’s servers will fetch the skin from a URL.
Payload
The payload for this API consists of a JSON object containing the URL and variant
variant is either «classic» or «slim»
Headers
Response
Upon error, the server will send back a JSON with the error. (Success is a blank payload)
Example
API Status
Returns status of various Mojang services. Possible values are green (no issues), yellow (some issues), red (service unavailable).
Response
Blocked Servers
Returns a list of SHA1 hashes used to check server addresses against when the client tries to connect.
This check is done by the bootstrap class in netty. The default netty class is overridden by one in the com.mojang:netty dependency loaded by the launcher. This allows it to affect any version that used netty (1.7+)
Response
A line-separated list of all SHA1 hashes. Some of the current
2200 hashes have been cracked.
Upload Skin
This uploads a skin to Mojang’s servers. It also sets the user’s skin. This works on legacy accounts as well.
Payload
The payload for this API consists of multipart form data. There are two parts (order does not matter b/c of boundary):
Profile Information
This API endpoint fetches information about the current account including UUID, username, skins, and capes.
Headers
Response
Особенности [ ]
Следующие возможности планируются как часть Plugin API:
Пакеты ресурсов, добавленные в 1.6, автоматическое обновление лаунчера к новой версии, делают возможным введение Plugin API. Тем не менее, пакеты ресурсов не будут использоваться для добавления плагинов, так как они направлены на изменение внешнего вида игры, в то время как плагины направлены на изменение игровых функций.





