Male C. Pig a.k.a. Svinopolist (piggymouse) wrote,
Male C. Pig a.k.a. Svinopolist
piggymouse

Minecraft Modding for Dummies

Есть такая игра Minecraft.

Евгений Дмитриевич, когда только начинал играть в неё, загорелся идеей написать свою собственную версию, с элементами, причиняющими вред здоровью и развитию. Посколько хорошо в тот момент он знал только Python, то писать стал на нём, да на OpenGL. Получалось так себе, в основном в плане performance — как я уже писал, сам питон такой небыстрый, а между ним и железом столько слоёв thunking'а, что, даже при использовании массовых OpenGL-ных операций, на мирах содержательного размера выше единиц fps Жека не поднимался.

Параллельно Жека прошёл оригинальный Майнкрафт до конца, оценил усилия и осознал, что сам он такой функционал будет реализовывать года два. На этом у него кончилась мотивация писать свою игру целиком, а началась мотивация писать для Майнкрафта расширения, так называемые моды. Моды эти добавляют в игру новые фичи — блэкджек там, шлюх, новые типы предметов, новое поведение старых предметов, &c &c. Само собой, вокруг моддинга Майнкрафта существует vibrant global community.

Никакого особого перевооружения не понадобилось — в том же самом Eclipse ребёнок стал пользоваться командой New Java Project вместо New PyDev Project (ну только JDK пришлось поставить, да).

Я сначала как-то особо не парился. Мои познания в расширении Майнкрафта ограничивались известным видео, в котором майнкрафтовский сервер интегрируется с Джирой. Ну чо там, думал я, наверное, есть в этом Майнкрафте какой-нибудь plugin API. Женька про него tutorial'ы почитает, дальше я ему помогу правильно проект в Эклипсе засетапить, а потом — просто собирай да деплой jar'чики.

The reality was very different.

Собственно, именно на этом примере я осознал, насколько сильно игры подсаживают на себя людей.

В Майнкрафте нет plugin API. Более того, в Майнкрафте нет вообще никаких штатных способов расширения. Клиент и сервер Майнкрафта это две огромные и совершенно монолитные Java-аппликухи. Ну то есть производитель обещает plugin API — но в каком-то совершенно неопределённом будущем.

Как же его расширяют? Да-да, именно так, как вы подумали.

  • Берётся т.н. Minecraft Coder Pack, этакий developer's workbench.
  • Берётся minecraft.jar из рабочей версии клиента (ну и minecraft-server.jar, но Женька сервер не гоняет).
  • Взятый jar декомпилируется и — да, вы знали это — деобфусцируется в соответствии с маппингами, которые какие-то добрые люди подготовили вручную.
  • Разработчик мода создаёт свои классы и правит классы самого Майнкрафта!
  • Для отладки и тестирования в MCP есть специальный запускач, позволяющий собирать и исполнять необфусцированный codebase.
  • Для дистрибуции мода нужно в специальном конфиге указать классы, которые ты добавил или поправил. MCP по этому конфигу перекомпилит нужные классы, а потом заобфусцирует и завернёт в отдельный my-mod.jar.
  • Update: Ах да, совсем забыл — конечные пользователи устанавливают мод путём подмены классов в своей копии minecraft.jar (ну и удаления от греха подальше заводской метаинформации).

Вариант процесса описан здесь. Отвечая на очевидные замечания — да, сообщество также сделало мета-мод, называемый ModLoader, для того, чтобы несколько модов можно было ставить одновременно.

Меня во всём этом умиляет то, что находятся в мире люди, которые тратят личное время на создание MCP и ModLoader'а и, самое главное, их поддержку — для каждой новой версии Майнкрафта многие вещи (особенно obfuscation mappings) надо обновлять чуть менее чем полностью.

Сия история вновь напоминает нам о бесконечности и изумительности способностей человека.

Tags: fcuk, kids, software
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 20 comments