Перейти к основному содержанию

Начнем ваш путь

📄️ Вступление

На заглавной странице документации к движку Inner Core, расширяющему базовую функциональность Майнкрафта на устройствах Android. Задача этого сайта — обучить возможностям в создании изменений для игрового процесса — модификаций, привнести в игру собственную идею и просто изучить что-то новое.

📄️ Методология

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

📄️ Установка движка

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

📄️ Поддерживаемые среды

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

📄️ Двигаемся вперед

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

📄️ Структура мода

Прежде чем использовать один из вариантов создания шаблонов, вероятно, не менее важной частью будет ознакомиться с их содержимым. В первую очередь, мод — это папка с конфигурационным файлом build.config, именно он описывает весь процесс загрузки, сборки и построения вашего мода. Давайте рассмотрим содержимое всей папки, и прежде разберем другие, но не менее важные аспекты.

📄️ Жизненный цикл мода

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

📄️ Сборка скриптов

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

📄️ Внедрение библиотек

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

📄️ Где, что и кто

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

📄️ Калбеки

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

📄️ Обновляемые объекты

Представляют из себя объекты, построенные вокруг функции обновления. Обновления вызываются каждый тик (1/20 секунды), которые как угодно могут взаимодействовать с миром и выполнять долгосрочные операции. Неотъемлемая часть движка, на которой основана большая часть жизненного цикла.

📄️ Структура потоков

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

📄️ Первый предмет

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

📄️ Еда, броня и снежки

Давайте поверхностно рассмотрим основы каждого типа предметов. Синтаксис их реализации в большинстве случаев совпадает со стандартным созданием предмета, однако появляются дополнительные аргументы для каждого из них. Изучите их описание еще раз, если это требуется. Единственное отличие в регистрации сторонних от обычного типа предметов — последний аргумент с параметрами. И конечно же, другие типы обладают уникальными для них свойствами и событиями.

📄️ Рецепты

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

📄️ Первый блок

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

📄️ Изменяем регион

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

📄️ Частицы и излучатели

Частицами называют двухмерные, обычно равноускоренные, тела в игровом пространстве. Они испускаются при взаимодействиях с блоками, от самих блоков во время их работы, разрушения инструментов и прочего, прочего, прочего. Излучатели определяют "источники"; те места, относительно которых частицы будут, например, перемещаться. Излучатели позволяют переопределять линейные ускорения испускаемых частиц, значительно расширяя сферы их применения.

📄️ Обработка существ

Существо представляет из себя мягкое физическое тело, которое "живет" и перемещается по миру. Помимо физической части, существа (или же мобы, энтити) облададают визуальной, она не определяет физическую форму, а лишь позволяет отображать существо в игре. Нередко с существом можно взаимодействовать, к примеру для получения ресурсов или обмена одних на другие. Познакомимся же с возможностями их обработки.

📄️ Первое существо

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

📄️ Исследуем содержимое

Интерфейс в Inner Core построен на основе графической оболочки Android, все элементы которого отрисовываются на едином холсте (канвасе) для каждого окна. Отображение происходит поверх игрового процесса, что не позволяет изменять внутреигровой интерфейс, но расширяет возможности работы с контентом.

📄️ Фоновая компоновка

Образует пространство окна, визуально обозначая его границы и добавляя фоновые объекты по необходимости. Эти компоненты всегда находятся под основными элементами, и также как и любые другие компоненты, отрисовываются на холсте (канвасе) в качестве контента вашего окна.

📄️ Элементы

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

📄️ Сохраняем данные

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

📄️ Тайлы

Один из основных элементов взамодействия с контейнерами это тайлы. Технология TileEntity позволяет связать контейнер с блоками, добавив к нему интерфейс и обновляемый функционал. Это несколько отличается от того, что обычно называют блок-энтити, однако их возможности весьма схожи.