Создание модификаций с помощью Forge/1.12+
В этой статье описывается создание модификаций на основе Minecraft Forge с использованием Eclipse для версий Minecraft с 1.12.
Содержание
Установка Forge Gradle [ ]
Не забудьте! Далее, все связанное с Java кодом мы будем делать в каталоге src\main\java, а остальное в src\main\resources.
Примечание! Для установки потребуется компьютер с минимальным объёмом ОЗУ от 4Гб! Если у вас недостаточно ОЗУ, добавьте необходимый объём из файла подкачки, но такой метод работает лишь на 64-битных системах.
Создание модификации [ ]
build.gradle [ ]
Это файл, который задает свойства проекта и его нужно немного подправить:
Если вы используете IntelliJ IDEA, то в конец build.gradle дополнительно добавьте это:
pack.mcmeta [ ]
Этот файл нужен для корректной работы игры с ресурсами модификации, такими как локализации, модели, рецепты, таблицы добычи и так далее. Заполняется следующим образом:
mcmod.info [ ]
Этот файл задаёт более подробную информацию о модификации и заполняется следующим образом:
Класс модификации [ ]
Данный класс создается в патче и является главным файлом, благодаря которому игра видит нашу модификацию. Заполняется следующим образом:
Класс блока [ ]
Для создания блока создайте класс с названием блока в стиле TutorialBlock в пакете патч.blocks и заполните его следующим образом:
Примечание регистрируемое имя и ключ локализации указывать только в нижнем регистре, используя при надобности нижнее подчёркивание!
Модель [ ]
Модель (которую, например, можно создать здесь) решает то, как наш блок будет выглядеть. Важно знать, что для блоков используется две модели. Одна задает вид блока, поставленного в мире, а вторая, его иконку в инвентаре. Это дает нам возможность сделать блоку отдельную иконку для инвентаря. Сами же модели для блока подключаются к нему как состояния, normal для блока в мире и inventory для его иконки в инвентаре. Поэтому для начала создадим файл идентификатор_блока.json в пакете assets.идентификатор_мода.blockstates, который и подключит наши модели.
Теперь подключим модели. Для этого создайте файл регистрируемое_имя.json в пакете assets.идентификатор_мода.models.block со следующим содержимым:
Теперь зададим иконку блока в инвентаре в пакете assets.идентификатор_модификации.models.block с именем идентификатор_блока.json со следующим содержанием:
Регистрация [ ]
Наш блок имеет текстуры и свойства, но его нужно зарегистрировать в игре. Создадим в пакете домен.автор.мод.init класс BlocksInit :
Предмет [ ]
Основное [ ]
Класс предмета [ ]
Для создания предмета создадим класс с именем TutorialItem:
Регистрация [ ]
Для регистрации предмета создадим класс ItemsRegister:
Модель [ ]
Примечание: название файла модели должно совпадать с RegistryName предмета
Создание модификаций с помощью Forge
В этой статье описывается процесс создания модификаций для Minecraft с использованием API Forge и Eclipse. Для создания даже простых модификаций требуется знание основ Java. Если во время создания модификаций возникнут вопросы или проблемы, не описанные здесь, опишите их на странице обсуждения.
| Таблица готовности | ||||||
|---|---|---|---|---|---|---|
| Урок | 1.6+ | 1.7+ | 1.9+ | 1.10+ | 1.12+ | 1.14+ |
| Блок | Готов | Готов | Готов | Готов | Готов | Не планируется |
| Предмет | Готов | Готов | Готов | Готов | Приостановлено | Не планируется |
| Крафт | Готов | Готов | Готов | Готов | Приостановлено | Не планируется |
| Компиляция | Готов | Готов | Готов | Готов | Приостановлено | Не планируется |
| Генерация | Возможно | Готов | Готов | Не планируется | Приостановлено | Не планируется |
| Прокси и инстанция | Не планируется | Готов | Не планируется | Не планируется | Приостановлено | Не планируется |
| Моб | Возможно | Готов | Не планируется | Не планируется | Не планируется | Не планируется |
| Блоки с моделью | Возможно | Возможно | Не планируется | Не планируется | Приостановлено | Не планируется |
| Доп. Уроки | Всего: 3 | Всего: 12 | Всего: 10 | Всего: 0 | Всего:0 | Всего:0 |
Общие сведения [ ]
Для создания модификаций в любом случае нужны JDK и Eclipse. Первая — это комплект разработчика Java и отличается от обычной Java тем, что имеет средства для компиляции/декомпиляции, несколько дополнительных библиотек и документацию. С 2019-го года ввиду изменений в лицензировании для загрузки JDK потребуется учётная запись Oracle. Также важно то, что Minecraft 1.12 не поддерживает Java ниже 7-й и выше 9-й включительно, тогда как 1.14 поддерживает практически все версии Java выше 8-го выпуска. Eclipse — это среда разработки, которая имеет поддержку синтаксиса нужного языка программирования, а также в ней был написан сам Minecraft.
Создание модификаций с помощью Forge/1.10+
В этой статье описывается создание модификаций на основе Minecraft Forge с использованием Eclipse для версий с 1.10.
Содержание
Подготовка среды [ ]
Уроки [ ]
Новая модификация [ ]
В левой части экрана располагается меню Package Explorer (если его там нет, в верхнем меню выберите Window/Show View/Package Explorer), в котором находится папка MDKExample. В этой папке присутствуют две основных папки:
Щёлкните ПКМ по папке src/main/java и выберите New/Package. Укажите название каталога в таком формате:
В качестве домена можно использовать любое доменное имя (com, net, ru и т. д.). Например, если ваш никнейм — SomeGuy, а название модификации — SampleMod, полное имя каталога может быть таким:
Это имя будет использоваться в дальнейших уроках.
Создание классов [ ]
Над названием класса добавьте строку:
Обратите внимание, что маркер @Mod выделен красным цветом. Это значит, что для него отсутствует библиотека, в которой он объявлен. Чтобы это исправить, наведите на него курсор и выберите Import ‘Mod’ (net.minecraftforge.fml.common) :
Дважды щёлкните по классу ServerProxy и создайте следующие функции в теле класса:
Если названия типов в скобках выделены красным цветом, по аналогии с предыдущим случаем наводите курсор и нажимайте Import во всех местах.
Теперь перейдите к классу ClientProxy и унаследуйте его от ServerProxy:
Добавьте те же самые функции с маркером @Override :
Снова перейдите к классу SampleMod и напишите в теле класса:
Если ваша модификация имеет иное название, напишите его вместо samplemod в обоих местах.
Добавьте уже знакомые вам функции в таком виде:
Мета-информация [ ]
После этого ваша модификация будет отображаться в списке.
Для запуска игрового клиента нажмите зелёную кнопку на верхней панели ( ). После загрузки вы можете найти модификацию в списке Mods.
Вкладка в творческом режиме [ ]
Добавьте функцию preInit :
Перейдите к классу SampleMod и в самом начале функции preInit напишите следующее:
Теперь вы можете добавлять новые вкладки в творческом режиме.
Простая вкладка [ ]
Снова выберите класс SampleModTab и напишите эту строку в начале:
Дополните функцию preInit данной строкой:
Вы можете указать в качестве предмета, например, яблоко, таким образом:
Создание нескольких вкладок [ ]
Если вам необходимо более одной вкладки, добавьте их по аналогии с первой, инициализируя в функции preInit:
Оформление [ ]
Создайте файл en_us.lang и напишите следующую строку:
Теперь ваша вкладка имеет название при выбранном английском языке в настройках.
Предмет [ ]
Перейдите к классу SampleMod и добавьте данную строку в функцию preInit:
В классе ClientProxy добавьте строку в функцию init:
Теперь вы можете добавить в игру любой предмет за несколько шагов.
Простой предмет [ ]
Создайте переменную в классе SampleModItem, представляющую предмет, который вы хотите добавить. К примеру, для предмета с названием «Test Item» напишите в начале класса:
В функции preInit перед вызовом функции addItems добавьте следующую строку:
Вместо SAMPLE_MOD вы можете установить любую другую вкладку в творческом режиме, обращаясь к ней через SampleModTab или CreativeTabs.
Дополните функцию addItems этой строкой:
Добавьте ещё одну строку в функцию addRenders:
Оформление [ ]
Добавьте в файл en_us.lang и другие файлы локализации следующую строку:
В этой же папке создайте каталог assets.samplemod.textures.items и разместите в нём вашу текстуру. Пример текстуры: 
Перейдите к классу SampleMod и добавьте данную строку в функцию preInit:
В классе ClientProxy добавьте строку в функцию init:
Теперь вы можете добавить в игру любой блок за несколько шагов.
Простой блок [ ]
Создайте переменную в классе SampleModBlock, представляющую блок, который вы хотите добавить. К примеру, для блока с названием «Test Block» напишите в начале класса:
В каталоге com.someguy.samplemod.block создайте класс BlockTestBlock и унаследуйте его от класса Block :
Добавьте конструктор в таком виде:
Функция setHardness устанавливает прочность, а setResistance — взрывоустойчивость блока.
Вернитесь к классу SampleModBlock и добавьте строку в функцию preInit перед функцией addBlocks:
Дополните функцию addBlocks этой строкой:
Добавьте ещё одну строку в функцию addRenders:
Сыпучий блок [ ]
Если вам необходимо сделать блок сыпучим, перейдите к его классу и просто унаследуйте его от BlockFalling :
При необходимости вы можете изменить звучание блока, делая его схожим с песком или другим материалом. Для этого добавьте в конструктор следующую строку:
Оформление [ ]
Добавьте в файл en_us.lang и другие файлы локализации следующую строку:
В каталоге assets.samplemod.models.item также создайте файл test_block.json следующего содержания:
Создайте каталог assets.samplemod.blockstates и добавьте в него файл с таким же названием. Скопируйте данный текст в этот файл:
В этой же папке создайте каталог assets.samplemod.textures.blocks и разместите в нём вашу текстуру.
Рецепт [ ]
Щёлкните ПКМ по каталогу com.someguy.samplemod и создайте каталог com.someguy.samplemod.recipe. Создайте в этом каталоге класс SampleModRecipe :
По аналогии с предыдущими классами, добавьте строку в функцию preInit класса SampleMod:
Рецепт крафта [ ]
Добавьте в функцию preInit класса SampleModRecipe следующий код:
Эта строка добавляет в игру такой рецепт:
| Ингредиенты | Рецепты крафта | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Глиняный блок + Коренная порода |
| ForgeGradle | Forge | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| — | 959 Свой материал для инструмента [ ] Допустим вы хотите, чтобы ваш инструмент обладал свойствами не железной/алмазной кирок из майнкрафта, а собственными. Тогда где-нибудь(вы можете где угодно написать эту строку, главное, чтоб можно было вызвать.), например в главном классе вне каких либо методов (то есть можно перед последней фигурной скобкой) напишите: Не забудьте про импорт. Давайте разберемся: static означает, что переменная NEWMAT типа ToolMaterial доступна из других классов. Затем приравнивается значению, которое и даст вашей кирке определённые свойства. Теперь об аргументах, перечисленных через запятую: Теперь можно придать какому-нибудь инструменту эти свойства, для этого в инструменте (например в нашей кирке) измените super(ToolMaterial.EMERALD); на super(BaseMyBestMod.NEWMAT); В таком случае вы отправляете в супер-класс инструмента информацию о том, что свойства описаны переменной NEWMAT типа ToolMaterial, которая описана в классе BaseMyBestMod (или любой другой класс, где она написана). Вот и всё, свойства инструмента изменены. Создание брони [ ]Создание брони немного отличается от создания обычных предметов, точнее имеет свои особенности. Приступим. Мы не будем создавать для каждого предмета свой отдельный класс, а создадим один универсальный, который опишет сразу шлем, нагрудник, штаны и ботинки. Начнём с регистрации переменных. Шлем, нагрудник, штаны и ботинки соответственно. Теперь описываем эти переменные с помощью универсального класса. Естественно внутри метода preLoad() Здесь, вроде, всё знакомо, мы даём нелокализированное имя каждому из предметов, а также текстуру. Но здесь мы посылаем ещё и две цифры в метод BestArmor. Вторая цифра отвечает за тип брони (0 — шлем, 3 — ботинки), назначение первой неясно, но в данном случае она роли не играет. Далее тоже ничего нового, просто зарегистрируем эти предметы в Forge. Сделать это нужно после описания переменных. С главным классом работа окончена. Теперь щелкаем по одной из ошибок и создаём новый класс BestArmor. Теперь «продолжаем» класс ItemArmor, то есть пишем extends ItemArmor после названия класса. Теперь в тело класса вставляем следующее: Что ж, давайте разбираться. Первая переменная, просто обозначает начало пути к текстуре брони. Все нужные текстуры можно спокойно извлечь из майнкрафта и отредактировать по желанию. Вот мои отредактированные текстуры:
Текстуры предметов помещаются туда же, где и текстура кирки. А вот две текстуры самой брони нужно поместить в другую папку. Поэтому создайте её: нажмите ПКМ по src/main/resources и выберите New — Package и назовите его assets.mybestmod.textures.model.armor и уже туда перетащите две оставшиеся текстуры. Давайте дальше разбираться с кодом: следующим идёт метод BestArmor(), в который мы посылаем из главного класса параметры id и armorType. Напомню: от armorType зависит, какая это часть брони. В нём мы посылаем информацию о том, какой материал брони. Я написал, что броня будет аналогична алмазной, но можно создать свой материал для брони и вписать его. Далее мы настраиваем вкладку в креативе. Потом мы ограничиваем максимальное количество данного предмета в одной стопке до одного, чтобы броня не «стакалась». В конце концов мы вызываем созданный нами метод setTextureName() В этом нашем собственном методе происходит проверка, какая часть брони вызвала этот класс. И, если это был шлем, нагрудник или ботинки, то используется первая текстура, а если поножи, то вторая. Мы прибавляем к изначальному пути брони нужное окончание, чтобы в определённом случае грузилась одна текстура, а в другом — вторая. Последний же метод перезаписывает метод супер-класса и указывает Майнкрафту, что должна грузиться текстура по пути texturePath, который предварительно был отредактирован во втором методе. Теперь можно запускать игру и убивать мобов в новых блестящих доспехах! Свой материал для брони [ ]Почти не отличается от создания собственного материала для инструмента. В главном классе в любом месте, но вне каких-либо методов пишем: Затем импортируем ArmorMaterial. Теперь разберём: Вот и все. Теперь можно использовать этот материал для брони, например заменив ArmorMaterial.DIAMOND на BaseMyBestMod.BESTMAT Генерация предметов в контейнерах натуральных структур [ ]Итак, вы можете сделать так, чтобы ваш, или любой другой предмет/блок генерировался в сундуках сокровищницы. Для этого в методе preLoad() в главном классе вставьте следующее: Разберемся в параметрах: Атрибуты для моба [ ]Если вы уже проверили моба, то заметили, что он двигается очень медленно. Чтобы исправить это и изменить атрибуты для моба, добавьте в его класс следующий код:
Интеллект для моба [ ]Теперь моб будет просто двигаться, но ничего не делать. Для того, чтобы добавить ему интеллект создайте в класс моба следующий код: Теперь в конструктор класса добавьте следующий код: Первый аргумент метода «addTask» — приоритет назначения интеллекта, второй — сам интеллект. В примере используются следующие интеллекты: «Swimming», «AttackOnCollid», «Wander», «WatchClosest», «LookIdle», «HurtByTarget» и «NearestAttackableTarget». Разъяснение:
Свой скин при моддинге [ ]Внимание! Этот способ работает только на лицензионной версии Minecraft. Чтобы при создании мода вы видели свой скин, вместо стандартного скина Steve, нужно прописать 2 строчки в аргументы запуска. После этого, при заходе в игру вы будете видеть свой скин. |










.jpg)
