исходный код игры майнкрафт

Часть кода игры Minecraft была передана в Open Source корпорацией Microsoft

исходный код игры майнкрафт. image loader. исходный код игры майнкрафт фото. исходный код игры майнкрафт-image loader. картинка исходный код игры майнкрафт. картинка image loader. Иллюстрация opensource.com
Иллюстрация opensource.com

Часть исходного кода игры Minecraft: Java Edition была легально опубликована на GitHub под свободной лицензией корпорацией Microsoft.

Код был открыт под лицензией MIT и представляет собой Java-библиотеки Brigadier и DataFixerUpper. Они позволяют разбирать, отправлять и обрабатывать пользовательские команды, а также обрабатывать данные для новых версий игры.

Раньше основным способом увидеть этот код для энтузиастов была «декомпиляция» — конвертация байт-кода обратно в человеко-читаемый код на Java. Многим хватало и этого, но, конечно, «исходные тексты», полученные таким путем, были несколько труднее для восприятия чем оригинальные исходники.

В дальнейшем планируется «освобождение» других универсальных подсистем Minecraft, которые могут оказаться полезными для разработки других игр и упрощения труда мод-мейкеров. Вероятно, на следующем этапе будут открыты исходные тексты полностью переписанного движка рендеринга Blaze3D, планируемого для релиза в Minecraft версии 1.14.

исходный код игры майнкрафт. b880724e7f3246f19ffa036c1f000231. исходный код игры майнкрафт фото. исходный код игры майнкрафт-b880724e7f3246f19ffa036c1f000231. картинка исходный код игры майнкрафт. картинка b880724e7f3246f19ffa036c1f000231. Иллюстрация opensource.com

Brigadier представляет собой инструмент для парсинга и диспетчеризации команд. По словам разработчиков, библиотека использует данные пользовательского ввода в Minecraft, и превращает их в функцию, которую игра будет выполнять. С точки зрения пользователя компонент выглядит как стандартная консоль с подсветкой синтаксиса команд и автодополнением ввода.

исходный код игры майнкрафт. a5fc070dd2d185c722e8415360104349. исходный код игры майнкрафт фото. исходный код игры майнкрафт-a5fc070dd2d185c722e8415360104349. картинка исходный код игры майнкрафт. картинка a5fc070dd2d185c722e8415360104349. Иллюстрация opensource.com

DataFixerUpper включает инструменты для инкрементальной сборки, слияния и оптимизации операций преобразования данных, необходимые для переноса существующих игровых данных в новые версии Minecraft.

Источник

Создание Minecraft за одну неделю на C++ и Vulkan

Я поставил перед собой задачу воссоздания с нуля Minecraft за одну неделю с помощью собственного движка на C++ и Vulkan. Меня вдохновил на это Hopson, который сделал то же самое при помощи C++ и OpenGL. В свою очередь, его вдохновил Шейн Бек, которого вдохновила Minecraft, источником вдохновения для которой была Infiniminer, при создании которой, предположительно, вдохновлялись реальными горными промыслами.

исходный код игры майнкрафт. image loader. исходный код игры майнкрафт фото. исходный код игры майнкрафт-image loader. картинка исходный код игры майнкрафт. картинка image loader. Иллюстрация opensource.com

Репозиторий GitHub этого проекта находится здесь. У каждого дня есть своя git-метка.

Разумеется, я не планировал в буквальном смысле воссоздавать Minecraft. Этот проект должен был стать обучающим. Я хотел изучить использование Vulkan в чём-то более сложном, чем vulkan-tutorial.com или демо Саши Виллема. Поэтому основной упор сделан на проектирование Vulkan-движка, а не на дизайн игры.

Задачи

Разработка на Vulkan намного медленнее, чем на OpenGL, поэтому я не смог включить в игру многие функции настоящей Minecraft. Нет ни мобов, ни крафта, ни красного камня, ни физики блоков, и т.п. С самого начала цели проекта были следующими:

Библиотеки

Разумеется, я не собирался писать Vulkan-приложение с нуля. Для ускорения процесса разработки я по возможности буду использовать готовые библиотеки. А именно:

День 1

В первый день я подготовил бойлерплейт Vulkan и скелет движка. Большая часть кода была бойлерплейтом и я смог просто скопипастить его с vulkan-tutorial.com. В него вошёл и трюк с хранением данных вершин как части вершинного шейдера. Это означало, что мне даже не придётся настраивать распределение памяти. Всего лишь простой конвейер, который способен делать только одно: отрисовывать треугольник.

Движок достаточно прост, чтобы поддерживать рендерер треугольников. Он имеет одно окно и игровой цикл, к которому можно подключать системы. GUI ограничен частотой кадров, выводимой в заголовок окна.

исходный код игры майнкрафт. image loader. исходный код игры майнкрафт фото. исходный код игры майнкрафт-image loader. картинка исходный код игры майнкрафт. картинка image loader. Иллюстрация opensource.com

День 2

Я интегрировал библиотеку Vulkan Memory Allocator. Эта библиотека берёт на себя большую часть бойлерплейта, связанного с распределением памяти Vulkan: типы памяти, кучи памяти устройств и вторичное распределение.

Теперь, когда у меня было распределение памяти, я создал классы для мешей и буферов вершин. Я изменил рендерер треугольников так, чтобы он использовал класс мешей, а не встроенные в шейдер массивы. На данный момент передача данных мешей в GPU выполняется рендерером треугольников вручную.

исходный код игры майнкрафт. image loader. исходный код игры майнкрафт фото. исходный код игры майнкрафт-image loader. картинка исходный код игры майнкрафт. картинка image loader. Иллюстрация opensource.com

День 3

Я добавил систему графов рендеринга. Для создания этого класса взят за основу данный пост, но класс очень сильно упрощён. Мой граф рендеринга содержит только самое необходимое для обработки синхронизации с Vulkan.

Граф рендеринга позволяет мне задавать узлы и рёбра. Узлы представляют собой выполняемую GPU работу. Рёбра — это зависимости данных между узлами. Каждый узел получает собственный буфер команд, в который выполняет запись. Граф занимается двойной буферизацией буферов команд и синхронизацией их с предыдущими кадрами. Рёбра используются для автоматической вставки барьеров конвейера перед и после того, как узел выполняет запись в каждый буфер команд. Барьеры конвейера синхронизируют использование всех ресурсов и переносят принадлежность между очередями. Кроме того, рёбра вставляют семафоры между узлами.

Узлы и рёбра образуют ориентированный ациклический граф. Затем граф рендеринга выполняет топологическую сортировку узлов, что приводит к созданию плоского списка узлов, отсортированных таким образом, что каждый узел идёт после всех узлов, от которых он зависит.

Движок имеет три типа узлов. AcquireNode получает образ из цепочки буферов (swapchain), TransferNode передаёт данные от CPU к GPU, а PresentNode предоставляет изображение цепочки буферов, которое нужно отобразить.

исходный код игры майнкрафт. image loader. исходный код игры майнкрафт фото. исходный код игры майнкрафт-image loader. картинка исходный код игры майнкрафт. картинка image loader. Иллюстрация opensource.com

Клянусь, внутри движок поменялся

День 4

Я создал камеру и систему 3D-рендеринга. Пока камера получает собственный постоянный буфер и пул дескрипторов.

Если мы переворачиваем ось Y, то нужно перевернуть и данные вершин, потому что до этого отрицательное направление оси Y указывало вверх.

исходный код игры майнкрафт. image loader. исходный код игры майнкрафт фото. исходный код игры майнкрафт-image loader. картинка исходный код игры майнкрафт. картинка image loader. Иллюстрация opensource.com

День 5

Я добавил ввод пользователя и возможность перемещения камеры при помощи мыши. Система ввода слишком переусложнена, но она устраняет странности ввода GLFW. В частности, у меня возникала проблема изменения позиции мыши при её блокировании.

Просто для сравнения — примерно то же самое Hopson сделал в день 1 своего проекта.

День 6

Я начал добавлять код для генерации и рендеринга блоков вокселей. Писать код мешинга было просто, потому что я делал это раньше и знал абстракции, позволяющие совершать меньше ошибок.

У меня есть несколько статических массивов, задающих смещения, которые обычно используются в игре. Например, Neighbors6 задаёт 6 соседей, с которыми куб имеет общие грани.

Neighbors26 — это все соседи, с которыми у куба общая грань, ребро или вершина. То есть это сетка 3x3x3 без центрального куба. Также есть подобные массивы для других наборов соседей и для 2D-наборов соседей.

Благодаря этому код создания мешей очень прост. Он просто обходит данные блоков и добавляет грань, когда блок сплошной, а его сосед — нет. Код просто проверяет каждую грань каждого куба в блоке. Это аналогично «наивному» методу, описанному здесь.

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

Все команды, зависящие от цепочки буферов (а сейчас это все команды отрисовки), должны завершить выполнение перед уничтожением старой цепочки буферов. Это означает, что весь GPU будет простаивать.

Нужно изменить графический конвейер, чтобы обеспечить динамическое окно обзора и изменение размеров.

Цепочку буферов невозможно создать, если размер окна равен 0 по оси X или Y. В том числе, когда окно свёрнуто. То есть когда такое происходит, вся игра ставится на паузу и продолжается, только когда окно разворачивается.

Сейчас меш является простой трёхмерной шахматной доской. Цвета RGB меша устанавливаются в соответствии с его позицией по XYZ, умноженной на 16.

День 7

Я отрефакторил меш, чтобы его данные можно было обновлять после его создания. Это позволит мне обновлять меш блока в будущем, когда я добавлю возможность добавления и удаления кубов.

При добавлении или удалении куба количество вершин в меше потенциально может увеличиваться или уменьшаться. Ранее выделенный буфер вершин можно использовать, только если новый меш того же размера или меньше. Но если меш больше, то необходимо создать новые буферы вершин.

Теперь меш блока регенерируется в каждом кадре.

Источник

Исходники Minecraft#

Мы разрабатываем моды для Minecraft, а значит находимся в очень тесной связи и с ним.

Иногда возникают вопросы вида: * Как сделать портал? * Как отловить правый клик по блоку? * Как добавить описание под названием предмета?

Ответы на подобного вида вопросы ВСЕГДА нужно искать в исходном коде Minecraft. 99% того, что вы хотите создать в своем моде уже было реализовано в Minecraft. Можно просто посмотреть, как (правильно) сделано в игре, и, на основе готового примера, сделать что-то свое.

Для этого нам нужно уметь обращаться к исходным кодам и ассетам (звукам, текстурам, моделям) Minecraft.

В Intellij Idea исходники можно найти, открыв в проводнике слева вкладку External Libraries и найдя файл «forgeSrc-версия Minecraftверсия Forge.jar».

Откройте его и увидите достаточно много папок:

исходный код игры майнкрафт. sources location. исходный код игры майнкрафт фото. исходный код игры майнкрафт-sources location. картинка исходный код игры майнкрафт. картинка sources location. Иллюстрация opensource.com

Eclipse#

Пояснение#

В пакете assets/minecraft находятся все ресурсы Minecraft: текстуры, JSON описания моделей, файлы локализации и так далее.

В пакете net.minecraft находится исходный код игры. Файлов там очень много и именно там находятся ответы на 90% всех ваших вопросов.

Пример#

Там есть следующий кусок кода:

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

Внутри него видим следующий метод:

Строчка this.world.createExplosion(this, this.posX, this.posY + (double)(this.height / 16.0F), this.posZ, 4.0F, true); как раз то, что нам нужно!

В нашем блоке BlockTest.java осталось записать:

Почти наверняка то, что вы хотите добавить в своем моде уже реализовано в игре в том или ином смысле. Старайтесь найти примеры в исходном коде и используйте их для реализации своих идей.

К тому же, ориентируясь на исходники игры, вы будете лучше понимать их внутреннюю структуру, что сильно облегчает создание модов.

Источник

Программисты, пора поиграть с внутренним кодом Minecraft!

Мы открыли часть кода игры!

Создавать игры не просто. Конечно, это не сравнить с ракетостроением, нейрохирургией (эти вещи, вероятно, гораздо проще), но всё равно безумно сложно научиться программировать, и вам очень повезёт, если вы сможете приступить к созданию игр. Если бы у вас был доступ к дополнительным ресурсам…

И вот, наши обожаемые друзья из стокгольмской команды Minecraft Java Edition могут вам кое-что предложить, открывая часть кода Minecraft в виде библиотек, которые вы сможете использовать, как только захотите!

Хотите воспользоваться ими для улучшения своих модов Minecraft? Отличная идея! Думаете использовать в своих собственных проектах? Дерзайте, но не забудьте упомянуть о нас! Хотите воспользоваться случаем и помочь улучшить часть кода Minecraft Java Edition? Спасибо, мы очень это ценим!

Подождите, а что такое «библиотеки» для игры?

«Библиотеки — это небольшие кусочки игрового движка» — объясняет разработчик Java-версии Натан Адамс (также известный как Dinnerbone). — «Мы выпускаем часть обособленных библиотек, которые использует Minecraft, в виде исходного кода. Любой сможет взять их и использовать в своей собственной игре.»

исходный код игры майнкрафт. minecraft opensource libs 1. исходный код игры майнкрафт фото. исходный код игры майнкрафт-minecraft opensource libs 1. картинка исходный код игры майнкрафт. картинка minecraft opensource libs 1. Иллюстрация opensource.com

Эй, это всеми любимый Minecraft. Но подождите, что это за раскрашенный текст? Ну и чудеса!

Планируется, что разные библиотеки будут открываться постепенно. Они будут выпускаться под лицензией MIT, и это значит, что «практически любой можно взять их и внести свой вклад в улучшение нашего игрового движка» — поясняет Натан.

«Или, если они создают собственную игру, им не придётся переписывать эти небольшие части. Они могут просто воспользоваться нашими, которые хорошо опробованы и отлажены, поскольку наша игра, определённо, очень популярна!»

исходный код игры майнкрафт. minecraft opensource libs 2. исходный код игры майнкрафт фото. исходный код игры майнкрафт-minecraft opensource libs 2. картинка исходный код игры майнкрафт. картинка minecraft opensource libs 2. Иллюстрация opensource.com

Это, наверное, самое скучное изображение на нашем сайте, но кто говорит, что программирование должно быть красивым?

Библиотека Brigadier

«Я очень горжусь этим названием!» — говорит Натан. — «Brigadier — это название обработчика команд, который используется в Minecraft». И это первая библиотека, которую мы открываем!

Minecraft сообщает обработчику: «Вот список того, что может делать игрок. Сообщи, когда игрок попытается выполнить что-то подобное». Поэтому, когда игрок набирает /give Dinnerbone stick в чате, это проходит через обработчик. Brigadier разбивает команду на части, проверят на ошибки и пытается быть максимально полезным. Вы ещё получаете красивое всплывающее окно, где в процессе набора текста отображается подсказка».

Надеемся, что это делает ввод команд более удобным!

исходный код игры майнкрафт. minecraft opensource libs 3. исходный код игры майнкрафт фото. исходный код игры майнкрафт-minecraft opensource libs 3. картинка исходный код игры майнкрафт. картинка minecraft opensource libs 3. Иллюстрация opensource.com

Начните набирать команду, набрав «/» в чате, и Brigadier предложит вам варианты

исходный код игры майнкрафт. minecraft opensource libs 4. исходный код игры майнкрафт фото. исходный код игры майнкрафт-minecraft opensource libs 4. картинка исходный код игры майнкрафт. картинка minecraft opensource libs 4. Иллюстрация opensource.com

Разные части команды обозначены разным цветом. Сама команда (give) — серая, имя игрока (Dinnerbone) — голубое, а предмет (minecraft:stick) — жёлтый!

исходный код игры майнкрафт. minecraft opensource libs 5. исходный код игры майнкрафт фото. исходный код игры майнкрафт-minecraft opensource libs 5. картинка исходный код игры майнкрафт. картинка minecraft opensource libs 5. Иллюстрация opensource.com

Полная команда раскрашена как радуга! Ну, почти как радуга

Натан надеется, что сообщество Minecraft, получив доступ к библиотеке Brigadier, однажды сделает её очень удобной для пользователя.

«Некоторые игроки даже не пользуются командами, потому что они немного пугающие, и я понимаю почему.» — говорит Натан. — «И надеюсь, что это изменится».

Brigadier берёт строку, которую вы вводите в игре, и превращает её в функции, которые может выполнить игра (так что вы должны поблагодарить Brigadier за все предметы, которые получили с помощью команд).

«Многие думают, что это очень просто.» — говорит Натан. — «Но в действительности это очень запутанно».

«Мы думаем, что это может быть отличной проверкой системы. Отлично, что люди могут просто взять и использовать их в любом проекте. И это не обязательно должно быть игрой. Я знаю, что некоторые пытаются использовать эту библиотеку в чат-ботах для телеграм, так что вы сможете отправить сообщение, а он выполнит то, что нужно!» Отлично!
(Примечание от fromgate: Между прочим, это он на меня намекает, мы беседовали с ним об этом).

Brigadier в открытом доступе всего неделю, и мы уже видим людей, пытающихся улучшить код и даже сделать удобную документацию Натана немного симпатичнее и удобнее! Стойте, вы что, пишете тексты для Натана бесплатно? Вы хотите лишить меня работы?

Библиотека Data Fixer Upper

«Название настолько глупое, что мы решили его сохранить.» — извиняясь, объясняет Натан. DataFixerUpper делает именно то, что заложено в его названии (обновляет сохранённые данные). И это вторая библиотека, которую мы открываем!

«Проблема, с которой мы столкнулись в Minecraft, и которая, я уверен, есть в любой другой игре, заключается в том, что форматы данных всё время меняются.» — говорит Натан. «Мы добавляем новые вещи в Minecraft, а потом вносим изменения в то, как мы сохраняем файлы и всё, что с этим связано.

Когда мы загружаем любой мир в Minecraft, то там могут быть данные, которые не менялись больше шести лет, если игрок не посещал эти чанки все эти годы. По сути, прежде чем Minecraft загружает чанки, он обращается к библиотеке DataFixerUpper, которая приводит их к текущему формату».

Непонятно? Это действительно так, библиотека DataFixerUpper — не так проста в использовании, как Brigadier. Но это одна из причин, почему мы сделали её доступной всем!

исходный код игры майнкрафт. data fixer upper. исходный код игры майнкрафт фото. исходный код игры майнкрафт-data fixer upper. картинка исходный код игры майнкрафт. картинка data fixer upper. Иллюстрация opensource.com

Да, выглядит слишком технично, для такого простака, как я.

Команда Java в будущем будет открывать и другие библиотеки. Одна из библиотек, которая рассматривается, — Blaze3D. Это полностью переписанный движок рендеринга, который предназначен для использования в Minecraft 1.14.

А сейчас, почему бы вам не применить свой опыт программирования к уже доступным библиотекам? Не забудьте отставить отзыв на Github, или обратившись к Натану в твиттере!

Источник

Исходный код Майнкрафт: как его достать и что с ним можно сделать?

исходный код игры майнкрафт. 2b5fe5f8b95428f0ed7e85163863909d.f9f96f11c01a9a66ba4ced1e3a0910e7. исходный код игры майнкрафт фото. исходный код игры майнкрафт-2b5fe5f8b95428f0ed7e85163863909d.f9f96f11c01a9a66ba4ced1e3a0910e7. картинка исходный код игры майнкрафт. картинка 2b5fe5f8b95428f0ed7e85163863909d.f9f96f11c01a9a66ba4ced1e3a0910e7. Иллюстрация opensource.com

Майнкрафт — это одна из самых знаменитых игр нашего времени. Над ее созданием и поддержкой трудится команда шведских разработчиков Mojang Java Studios. Исходный код в Майнкрафт в целом держится в секрете, не считая тех наработок, что есть в darknet’е. Однако буквально недавно команда разработчиков опубликовала несколько легальных частей кода под свободной лицензией. Чуть позже остановимся на этом подробнее.

Почему считают, что Майнкрафт — для детей?

Нрави тся Майнкрафт детям по нескольким простым причинам:

Код Майнкрафта — это Java?

Сделано это для того, чтобы была возможность объединять все версии с разных платформ:

К сожалению, Java не могла обеспечить работу игры на iOS, поэтому было принято такое решение.

Вот и получается, что код Майнкрафта доступен в двух версиях:

Где найти исходный код Майнкрафта?

Но вот, буквально недавно, были легально опубликованы несколько пакетов кода Java Edition. Найти их можно на GitHub. Они распространяются открыто и со свободной лицензией MIT корпорации Microsoft. В своем составе они представляют две библиотеки Java:

Эти библиотеки открыли возможность разбивки, отправки, обработки пользовательских команд и данных от новых версий игры.

На этом все не остановится. Как говорят разработчики, в дальнейшем они планируют еще о публиковать в открытом доступе другие библиотеки и куски исходного кода Майнкрафт. Это будет делаться для того, чтобы облегчит ь разработку других подобных игр и труд разработчиков модификаций.

Библиотека Brigadier

Данной библиотекой пользоваться довольно просто — нужны минимальные знания.

Библиотека DataFixerUpper

Данная библиотека представляет собой набор инструментов, чтобы можно было собрать, склеить и оптимизировать преобразованные данные, которые нужны будут для добавления их в новые версии игры Майнкрафт.

Полностью Java код Майнкрафта пока открыва ть не будет, хотя у разработчиков были мысли и об этом. Он говорят, что пока исходный код Minecraft будет открываться частями и по запланированному графику.

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *