исходный код майнкрафта на java
Исходный код Майнкрафт: как его достать и что с ним можно сделать?
Майнкрафт — это одна из самых знаменитых игр нашего времени. Над ее созданием и поддержкой трудится команда шведских разработчиков Mojang Java Studios. Исходный код в Майнкрафт в целом держится в секрете, не считая тех наработок, что есть в darknet’е. Однако буквально недавно команда разработчиков опубликовала несколько легальных частей кода под свободной лицензией. Чуть позже остановимся на этом подробнее.
Почему считают, что Майнкрафт — для детей?
Нрави тся Майнкрафт детям по нескольким простым причинам:
Код Майнкрафта — это Java?
Сделано это для того, чтобы была возможность объединять все версии с разных платформ:
К сожалению, Java не могла обеспечить работу игры на iOS, поэтому было принято такое решение.
Вот и получается, что код Майнкрафта доступен в двух версиях:
Где найти исходный код Майнкрафта?
Но вот, буквально недавно, были легально опубликованы несколько пакетов кода Java Edition. Найти их можно на GitHub. Они распространяются открыто и со свободной лицензией MIT корпорации Microsoft. В своем составе они представляют две библиотеки Java:
Эти библиотеки открыли возможность разбивки, отправки, обработки пользовательских команд и данных от новых версий игры.
На этом все не остановится. Как говорят разработчики, в дальнейшем они планируют еще о публиковать в открытом доступе другие библиотеки и куски исходного кода Майнкрафт. Это будет делаться для того, чтобы облегчит ь разработку других подобных игр и труд разработчиков модификаций.
Библиотека Brigadier
Данной библиотекой пользоваться довольно просто — нужны минимальные знания.
Библиотека DataFixerUpper
Данная библиотека представляет собой набор инструментов, чтобы можно было собрать, склеить и оптимизировать преобразованные данные, которые нужны будут для добавления их в новые версии игры Майнкрафт.
Полностью Java код Майнкрафта пока открыва ть не будет, хотя у разработчиков были мысли и об этом. Он говорят, что пока исходный код Minecraft будет открываться частями и по запланированному графику.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Часть кода игры Minecraft была передана в Open Source корпорацией Microsoft
Иллюстрация opensource.com
Часть исходного кода игры Minecraft: Java Edition была легально опубликована на GitHub под свободной лицензией корпорацией Microsoft.
Код был открыт под лицензией MIT и представляет собой Java-библиотеки Brigadier и DataFixerUpper. Они позволяют разбирать, отправлять и обрабатывать пользовательские команды, а также обрабатывать данные для новых версий игры.
Раньше основным способом увидеть этот код для энтузиастов была «декомпиляция» — конвертация байт-кода обратно в человеко-читаемый код на Java. Многим хватало и этого, но, конечно, «исходные тексты», полученные таким путем, были несколько труднее для восприятия чем оригинальные исходники.
В дальнейшем планируется «освобождение» других универсальных подсистем Minecraft, которые могут оказаться полезными для разработки других игр и упрощения труда мод-мейкеров. Вероятно, на следующем этапе будут открыты исходные тексты полностью переписанного движка рендеринга Blaze3D, планируемого для релиза в Minecraft версии 1.14.
Brigadier представляет собой инструмент для парсинга и диспетчеризации команд. По словам разработчиков, библиотека использует данные пользовательского ввода в Minecraft, и превращает их в функцию, которую игра будет выполнять. С точки зрения пользователя компонент выглядит как стандартная консоль с подсветкой синтаксиса команд и автодополнением ввода.
DataFixerUpper включает инструменты для инкрементальной сборки, слияния и оптимизации операций преобразования данных, необходимые для переноса существующих игровых данных в новые версии Minecraft.
Делаем свой minecraft на JavaScript
Добро пожаловать в самую запутанную архитектуру проекта. Да я умею писать вступление.
Попробуем сделать небольшую демку minecraft в браузере. Пригодятся знания JS и three.js.
Немного условностей. Я не претендую на звание лучшее приложение столетия. Это всего лишь моя реализация для данной задачи. Также есть видео версия для тех кому лень читать(там тот же смысл, но другими словами).
В конце статьи есть все нужные ссылки. Постараюсь как можно меньше воды в тексте. Объяснять работу каждой строки не буду. Вот теперь можно начать.
Для начала чтобы понимать какой будет итог, то вот демка игры.
Разделим статью на несколько частей:
Структура проекта
Вот так выглядит структура проекта.
index.html — Расположение канваса, немного интерфейса и подключение стилей, скриптов.
style.css — Стили только для внешнего вида. Самое важное это кастомный курсор для игры который располагается в центре экрана.
texture — Здесь лежат текстуры для курсора и блока земли для игры.
core.js — Основной скрипт где происходит инициализация проекта.
perlin.js — Это библиотека для шума Перлина.
PointerLockControls.js — Камера от three.js.
controls.js — Управление камерой и игроком.
generationMap.js — Генерация мира.
three.module.js — Сам three.js в виде модуля.
settings.js — Настройки проекта.
Игровой цикл
В core.js нужно провести инициализацию three.js, настроить его и добавить все нужные модули от игры + обработчики событий… ну и игровой цикл запустить. В учет того, что все настройки стандартные, то объяснять их нет смысла. Поговорить можно про map (он принимает сцену игры для добавления блоков) и contorls т.к. он принимает несколько параметров. Первый это камера от three.js, сцену для добавления блоков и карту чтобы можно было взаимодействовать с ней. update отвечает за обновление камеры, GameLoop — игровой цикл, render- стандарт от three.js для обновления кадра, событие resize также стандарт для работы с канвасом (это реализация адаптива).
Настройки
В настройки можно было вынести и другие параметры, например, настройки three.js, но я сделал без них и сейчас здесь лишь пара параметров отвечающие за размер блоков.
Генерация карты
В классе Map у нас есть несколько свойство которые отвечают за кеш материалов и параметры для шума Перлина. В методе generation мы загружаем текстуры, создаем геометрию и меш. noise.seed отвечает за стартовое зерно для генерации карты. Можно рандом заменить на статичное значение чтобы карты всегда была одинаковая. В цикле по X и Z координатам начинаем расставлять кубы. Y координата генерируется за счет библиотеки pretlin.js. В конечном итоге мы добавляем куб с нужными координатами на сцену через scene.add( cube );
Камера и управление
Я уже говорил, что controls принимает параметры в виде камеры, сцены и карты. Также в конструкторе мы добавляем массив keys для клавиш и movingSpeed для скорости. Для мыши у нас есть 3 метода. onClick определяет какая кнопка нажата, а onRightClick и onLeftClick уже отвечают за действия. Правый клик(удаление блока) происходит через raycast и поиска пересеченных элементов. Если их нет, то прекращаем работу, если есть, то удаляем первый элеент. Левый клик работает по схожей системе. Для начала создаем блок. Запускаем рейкаст и если есть блок который пересек луч, то получаем координаты этого блока. Далее определяем с какой стороны произошел клик. Меняем координаты для созданного куба в соответствии со стороной к которой мы добавляем блок. градация в 5 единиц т.к. это размер блока(да здесь можно было использовать свойство из settings).
Как работает управление камерой?! У нас есть три метода inputKeydown, inputKeyup и update. В inputKeydown мы добавляем кнопку в массив keys. inputKeyup отвечает за очистку кнопок из массива которые отжали. В update идет проверка keys и вызывается moveForward у камеры, параметры которые принимает метод это скорость.
Ссылки
Как и обещал. Весь материал который пригодится.
Если есть желание, то на можете добавить свой функционал к проекту на гитхаб.
Программисты, пора поиграть с внутренним кодом Minecraft!
Мы открыли часть кода игры!
Создавать игры не просто. Конечно, это не сравнить с ракетостроением, нейрохирургией (эти вещи, вероятно, гораздо проще), но всё равно безумно сложно научиться программировать, и вам очень повезёт, если вы сможете приступить к созданию игр. Если бы у вас был доступ к дополнительным ресурсам…
И вот, наши обожаемые друзья из стокгольмской команды Minecraft Java Edition могут вам кое-что предложить, открывая часть кода Minecraft в виде библиотек, которые вы сможете использовать, как только захотите!
Хотите воспользоваться ими для улучшения своих модов Minecraft? Отличная идея! Думаете использовать в своих собственных проектах? Дерзайте, но не забудьте упомянуть о нас! Хотите воспользоваться случаем и помочь улучшить часть кода Minecraft Java Edition? Спасибо, мы очень это ценим!
Подождите, а что такое «библиотеки» для игры?
«Библиотеки — это небольшие кусочки игрового движка» — объясняет разработчик Java-версии Натан Адамс (также известный как Dinnerbone). — «Мы выпускаем часть обособленных библиотек, которые использует Minecraft, в виде исходного кода. Любой сможет взять их и использовать в своей собственной игре.»
Эй, это всеми любимый Minecraft. Но подождите, что это за раскрашенный текст? Ну и чудеса!
Планируется, что разные библиотеки будут открываться постепенно. Они будут выпускаться под лицензией MIT, и это значит, что «практически любой можно взять их и внести свой вклад в улучшение нашего игрового движка» — поясняет Натан.
«Или, если они создают собственную игру, им не придётся переписывать эти небольшие части. Они могут просто воспользоваться нашими, которые хорошо опробованы и отлажены, поскольку наша игра, определённо, очень популярна!»
Это, наверное, самое скучное изображение на нашем сайте, но кто говорит, что программирование должно быть красивым?
Библиотека Brigadier
«Я очень горжусь этим названием!» — говорит Натан. — «Brigadier — это название обработчика команд, который используется в Minecraft». И это первая библиотека, которую мы открываем!
Minecraft сообщает обработчику: «Вот список того, что может делать игрок. Сообщи, когда игрок попытается выполнить что-то подобное». Поэтому, когда игрок набирает /give Dinnerbone stick в чате, это проходит через обработчик. Brigadier разбивает команду на части, проверят на ошибки и пытается быть максимально полезным. Вы ещё получаете красивое всплывающее окно, где в процессе набора текста отображается подсказка».
Надеемся, что это делает ввод команд более удобным!
Начните набирать команду, набрав «/» в чате, и Brigadier предложит вам варианты
Разные части команды обозначены разным цветом. Сама команда (give) — серая, имя игрока (Dinnerbone) — голубое, а предмет (minecraft:stick) — жёлтый!
Полная команда раскрашена как радуга! Ну, почти как радуга
Натан надеется, что сообщество Minecraft, получив доступ к библиотеке Brigadier, однажды сделает её очень удобной для пользователя.
«Некоторые игроки даже не пользуются командами, потому что они немного пугающие, и я понимаю почему.» — говорит Натан. — «И надеюсь, что это изменится».
Brigadier берёт строку, которую вы вводите в игре, и превращает её в функции, которые может выполнить игра (так что вы должны поблагодарить Brigadier за все предметы, которые получили с помощью команд).
«Многие думают, что это очень просто.» — говорит Натан. — «Но в действительности это очень запутанно».
«Мы думаем, что это может быть отличной проверкой системы. Отлично, что люди могут просто взять и использовать их в любом проекте. И это не обязательно должно быть игрой. Я знаю, что некоторые пытаются использовать эту библиотеку в чат-ботах для телеграм, так что вы сможете отправить сообщение, а он выполнит то, что нужно!» Отлично!
(Примечание от fromgate: Между прочим, это он на меня намекает, мы беседовали с ним об этом).
Brigadier в открытом доступе всего неделю, и мы уже видим людей, пытающихся улучшить код и даже сделать удобную документацию Натана немного симпатичнее и удобнее! Стойте, вы что, пишете тексты для Натана бесплатно? Вы хотите лишить меня работы?
Библиотека Data Fixer Upper
«Название настолько глупое, что мы решили его сохранить.» — извиняясь, объясняет Натан. DataFixerUpper делает именно то, что заложено в его названии (обновляет сохранённые данные). И это вторая библиотека, которую мы открываем!
«Проблема, с которой мы столкнулись в Minecraft, и которая, я уверен, есть в любой другой игре, заключается в том, что форматы данных всё время меняются.» — говорит Натан. «Мы добавляем новые вещи в Minecraft, а потом вносим изменения в то, как мы сохраняем файлы и всё, что с этим связано.
Когда мы загружаем любой мир в Minecraft, то там могут быть данные, которые не менялись больше шести лет, если игрок не посещал эти чанки все эти годы. По сути, прежде чем Minecraft загружает чанки, он обращается к библиотеке DataFixerUpper, которая приводит их к текущему формату».
Непонятно? Это действительно так, библиотека DataFixerUpper — не так проста в использовании, как Brigadier. Но это одна из причин, почему мы сделали её доступной всем!
Да, выглядит слишком технично, для такого простака, как я.
Команда Java в будущем будет открывать и другие библиотеки. Одна из библиотек, которая рассматривается, — Blaze3D. Это полностью переписанный движок рендеринга, который предназначен для использования в Minecraft 1.14.
А сейчас, почему бы вам не применить свой опыт программирования к уже доступным библиотекам? Не забудьте отставить отзыв на Github, или обратившись к Натану в твиттере!
Исходники Minecraft#
Мы разрабатываем моды для Minecraft, а значит находимся в очень тесной связи и с ним.
Иногда возникают вопросы вида: * Как сделать портал? * Как отловить правый клик по блоку? * Как добавить описание под названием предмета?
Ответы на подобного вида вопросы ВСЕГДА нужно искать в исходном коде Minecraft. 99% того, что вы хотите создать в своем моде уже было реализовано в Minecraft. Можно просто посмотреть, как (правильно) сделано в игре, и, на основе готового примера, сделать что-то свое.
Для этого нам нужно уметь обращаться к исходным кодам и ассетам (звукам, текстурам, моделям) Minecraft.
В Intellij Idea исходники можно найти, открыв в проводнике слева вкладку External Libraries и найдя файл «forgeSrc-версия Minecraft—версия Forge.jar».
Откройте его и увидите достаточно много папок:
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 осталось записать:
Почти наверняка то, что вы хотите добавить в своем моде уже реализовано в игре в том или ином смысле. Старайтесь найти примеры в исходном коде и используйте их для реализации своих идей.
К тому же, ориентируясь на исходники игры, вы будете лучше понимать их внутреннюю структуру, что сильно облегчает создание модов.