1 added
1 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>31 окт 2025</li>
2
<ul><li>31 окт 2025</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Добавляем кастомный меч и разбираемся с кодом на Java.</p>
4
</ul><p>Добавляем кастомный меч и разбираемся с кодом на Java.</p>
5
<p>Иллюстрация: Оля Ежак для SKillbox Media</p>
5
<p>Иллюстрация: Оля Ежак для SKillbox Media</p>
6
<p>Автор статей о программировании, технологиях и гаджетах. Пишет код на JavaScript и Python. Любит веб-технологии, модные приложения и магию Apple.</p>
6
<p>Автор статей о программировании, технологиях и гаджетах. Пишет код на JavaScript и Python. Любит веб-технологии, модные приложения и магию Apple.</p>
7
<p>Minecraft - игра-песочница, в которой можно исследовать мир, выживать, сражаться с монстрами, вести дела на ферме, приручать животных или просто бесцельно бродить по бесконечным ландшафтам.</p>
7
<p>Minecraft - игра-песочница, в которой можно исследовать мир, выживать, сражаться с монстрами, вести дела на ферме, приручать животных или просто бесцельно бродить по бесконечным ландшафтам.</p>
8
<p>Контента в игре на сотни часов, но если этого окажется мало, то с помощью модов Minecraft можно изменить до неузнаваемости. Например, добавить новые виды оружия, транспорт, героев или полностью переписать сюжет. Готовые моды есть в интернете, но интереснее самостоятельно запрограммировать собственный мод.</p>
8
<p>Контента в игре на сотни часов, но если этого окажется мало, то с помощью модов Minecraft можно изменить до неузнаваемости. Например, добавить новые виды оружия, транспорт, героев или полностью переписать сюжет. Готовые моды есть в интернете, но интереснее самостоятельно запрограммировать собственный мод.</p>
9
<p>В статье мы расскажем, как создать мод, какие программы для этого понадобятся, и попробуем добавить в Minecraft собственный меч.</p>
9
<p>В статье мы расскажем, как создать мод, какие программы для этого понадобятся, и попробуем добавить в Minecraft собственный меч.</p>
10
<p><strong>Содержание</strong></p>
10
<p><strong>Содержание</strong></p>
11
<ul><li><a>Устанавливаем JDK</a></li>
11
<ul><li><a>Устанавливаем JDK</a></li>
12
<li><a>Выбираем редактор кода</a></li>
12
<li><a>Выбираем редактор кода</a></li>
13
<li><a>Скачиваем шаблон кода</a></li>
13
<li><a>Скачиваем шаблон кода</a></li>
14
<li><a>Пишем код мода</a></li>
14
<li><a>Пишем код мода</a></li>
15
<li><a>Создаём рецепт крафта</a></li>
15
<li><a>Создаём рецепт крафта</a></li>
16
<li><a>Локализируем мод</a></li>
16
<li><a>Локализируем мод</a></li>
17
<li><a>Добавляем текстуры</a></li>
17
<li><a>Добавляем текстуры</a></li>
18
<li><a>Тестируем мод</a></li>
18
<li><a>Тестируем мод</a></li>
19
</ul><p>Мы будем создавать моды для Java-версии Minecraft, поэтому нужно установить Java Development Kit (JDK) - набор инструментов для работы с кодом на Java. Для этого перейдите на <a>официальный сайт Oracle</a>, откройте раздел Java Archive и скачайте JDK версии 17 или выше:</p>
19
</ul><p>Мы будем создавать моды для Java-версии Minecraft, поэтому нужно установить Java Development Kit (JDK) - набор инструментов для работы с кодом на Java. Для этого перейдите на <a>официальный сайт Oracle</a>, откройте раздел Java Archive и скачайте JDK версии 17 или выше:</p>
20
<em>Скриншот:<a>Oracle</a>/ Skillbox Media</em><p>Для работы из списка выберем Java SE 17 (версию 17.0.13):</p>
20
<em>Скриншот:<a>Oracle</a>/ Skillbox Media</em><p>Для работы из списка выберем Java SE 17 (версию 17.0.13):</p>
21
<em>Скриншот:<a>Oracle</a>/ Skillbox Media</em><p>В открывшейся таблице найдите пакет для вашей операционной системы. Убедитесь, что в названии есть слово Installer (для Windows и macOS) или Package (для Linux). После этого скачайте файл, дважды кликните по нему для запуска и следуйте подсказкам установщика.</p>
21
<em>Скриншот:<a>Oracle</a>/ Skillbox Media</em><p>В открывшейся таблице найдите пакет для вашей операционной системы. Убедитесь, что в названии есть слово Installer (для Windows и macOS) или Package (для Linux). После этого скачайте файл, дважды кликните по нему для запуска и следуйте подсказкам установщика.</p>
22
<em>Скриншот:<a>Oracle</a>/ Skillbox Media</em><p>Чтобы проверить установку, запустите в терминале команду java --version. Если всё правильно, в выводе должна появиться версия JDK. В случае проблем попробуйте <a>альтернативный способ установки Java</a>.</p>
22
<em>Скриншот:<a>Oracle</a>/ Skillbox Media</em><p>Чтобы проверить установку, запустите в терминале команду java --version. Если всё правильно, в выводе должна появиться версия JDK. В случае проблем попробуйте <a>альтернативный способ установки Java</a>.</p>
23
<p>Если вы ищете вариант попроще - попробуйте программу <a>MCreator</a>. Это бесплатный инструмент с графическим интерфейсом, который позволяет создавать моды без глубоких знаний Java. В нём есть визуальный язык программирования на основе блоков - его проще освоить новичкам. Программа также включает встроенный редактор текстур, интерфейсов и сценариев для сюжетных модов, так что другие приложения для создания графики или моделей вам не понадобятся.</p>
23
<p>Если вы ищете вариант попроще - попробуйте программу <a>MCreator</a>. Это бесплатный инструмент с графическим интерфейсом, который позволяет создавать моды без глубоких знаний Java. В нём есть визуальный язык программирования на основе блоков - его проще освоить новичкам. Программа также включает встроенный редактор текстур, интерфейсов и сценариев для сюжетных модов, так что другие приложения для создания графики или моделей вам не понадобятся.</p>
24
<p>Вариант с Java Development Kit подойдёт тем, кто хочет глубже разобраться в программировании, получить больше контроля над кодом и научиться создавать более сложные и функциональные моды.</p>
24
<p>Вариант с Java Development Kit подойдёт тем, кто хочет глубже разобраться в программировании, получить больше контроля над кодом и научиться создавать более сложные и функциональные моды.</p>
25
<p>Код мода можно писать в любом текстовом редакторе, но удобнее использовать специальные среды разработки для программистов. Так как мы будем работать с Java, подойдут любые IDE для этого языка программирования. Рассмотрим несколько популярных вариантов.</p>
25
<p>Код мода можно писать в любом текстовом редакторе, но удобнее использовать специальные среды разработки для программистов. Так как мы будем работать с Java, подойдут любые IDE для этого языка программирования. Рассмотрим несколько популярных вариантов.</p>
26
<p><a><strong>IntelliJ IDEA</strong></a><strong>.</strong>Среда разработки от компании JetBrains, в которой есть всё необходимое для редактирования, сборки и отладки кода на Java. Версия Community бесплатная, и её хватит для моддинга Minecraft.</p>
26
<p><a><strong>IntelliJ IDEA</strong></a><strong>.</strong>Среда разработки от компании JetBrains, в которой есть всё необходимое для редактирования, сборки и отладки кода на Java. Версия Community бесплатная, и её хватит для моддинга Minecraft.</p>
27
<p><a><strong>Eclipse</strong></a><strong>.</strong>Ещё одна IDE для Java. Она менее популярна, чем IntelliJ IDEA, но также включает все необходимые инструменты. Интерфейс Eclipse может показаться сложным для новичков, поэтому выбирайте эту среду, если у вас уже есть опыт и вы сможете разобраться с настройками.</p>
27
<p><a><strong>Eclipse</strong></a><strong>.</strong>Ещё одна IDE для Java. Она менее популярна, чем IntelliJ IDEA, но также включает все необходимые инструменты. Интерфейс Eclipse может показаться сложным для новичков, поэтому выбирайте эту среду, если у вас уже есть опыт и вы сможете разобраться с настройками.</p>
28
<p><a><strong>Visual Studio Code</strong></a><strong>.</strong>Это универсальный редактор кода для любых языков программирования. Для работы с Java установите плагин <a>Extension Pack for Java</a>. В VS Code нет встроенных инструментов и систем сборки, поэтому их нужно добавить отдельно. Этот редактор подойдёт тем, кто знаком с Java и умеет настраивать окружение.</p>
28
<p><a><strong>Visual Studio Code</strong></a><strong>.</strong>Это универсальный редактор кода для любых языков программирования. Для работы с Java установите плагин <a>Extension Pack for Java</a>. В VS Code нет встроенных инструментов и систем сборки, поэтому их нужно добавить отдельно. Этот редактор подойдёт тем, кто знаком с Java и умеет настраивать окружение.</p>
29
<p>Мы будем разрабатывать мод с помощью <a>Forge</a> - платформы для модификации Minecraft, которая предоставляет интерфейс для доступа к внутренним функциям игры. С её помощью вы можете менять игровую механику и добавлять собственный контент: новые предметы и инструменты, мобов, биомы, блоки, рецепты крафта и многое другое.</p>
29
<p>Мы будем разрабатывать мод с помощью <a>Forge</a> - платформы для модификации Minecraft, которая предоставляет интерфейс для доступа к внутренним функциям игры. С её помощью вы можете менять игровую механику и добавлять собственный контент: новые предметы и инструменты, мобов, биомы, блоки, рецепты крафта и многое другое.</p>
30
<p>Вместо Forge можно использовать <a>Fabric</a> - ещё одну платформу для модификации Minecraft, которая обновляется чаще и работает быстрее. Но преимущество Forge - в огромном сообществе и обилии гайдов.</p>
30
<p>Вместо Forge можно использовать <a>Fabric</a> - ещё одну платформу для модификации Minecraft, которая обновляется чаще и работает быстрее. Но преимущество Forge - в огромном сообществе и обилии гайдов.</p>
31
<p>Чтобы начать работу над модом, скачайте Forge MDK (Mod Development Kit - набор для разработки модов). Это шаблон проекта со всеми необходимыми файлами, базовыми функциями и заготовками кода.</p>
31
<p>Чтобы начать работу над модом, скачайте Forge MDK (Mod Development Kit - набор для разработки модов). Это шаблон проекта со всеми необходимыми файлами, базовыми функциями и заготовками кода.</p>
32
<p>Перейдите на <a>официальный сайт Forge</a>и в левом углу выберите версию Minecraft, которую будете модифицировать. У нас будет версия 1.19.</p>
32
<p>Перейдите на <a>официальный сайт Forge</a>и в левом углу выберите версию Minecraft, которую будете модифицировать. У нас будет версия 1.19.</p>
33
<em>Скриншот: <a>Forge</a>/ Skillbox Media</em><p>Нажмите на кнопку<strong>MDK</strong>:</p>
33
<em>Скриншот: <a>Forge</a>/ Skillbox Media</em><p>Нажмите на кнопку<strong>MDK</strong>:</p>
34
<em>Скриншот: <a>Forge</a>/ Skillbox Media</em><p>На открывшейся странице нажмите на кнопку<strong>Skip</strong>, дождитесь завершения загрузки и распакуйте скачанный архив:</p>
34
<em>Скриншот: <a>Forge</a>/ Skillbox Media</em><p>На открывшейся странице нажмите на кнопку<strong>Skip</strong>, дождитесь завершения загрузки и распакуйте скачанный архив:</p>
35
<em>Скриншот: <a>Forge</a>/ Skillbox Media</em><p>Распакованную папку лучше сразу переименовать, чтобы не потерять. Среди содержимого архива много файлов, но нам понадобится только директория src. В ней две папки: java и resources. В первой хранится основной код мода, а во второй - прочие файлы: тексты локализаций для разных языков, текстуры блоков, 3D-модели и рецепты для крафта.</p>
35
<em>Скриншот: <a>Forge</a>/ Skillbox Media</em><p>Распакованную папку лучше сразу переименовать, чтобы не потерять. Среди содержимого архива много файлов, но нам понадобится только директория src. В ней две папки: java и resources. В первой хранится основной код мода, а во второй - прочие файлы: тексты локализаций для разных языков, текстуры блоков, 3D-модели и рецепты для крафта.</p>
36
<em>Скриншот: macOS / Skillbox Media</em><p>Перейдём к программированию мода. Мы будем показывать всё на примере IntelliJ IDEA от JetBrains. Если вы используете другой редактор кода, то процесс будет похожим, но интерфейс может отличаться.</p>
36
<em>Скриншот: macOS / Skillbox Media</em><p>Перейдём к программированию мода. Мы будем показывать всё на примере IntelliJ IDEA от JetBrains. Если вы используете другой редактор кода, то процесс будет похожим, но интерфейс может отличаться.</p>
37
<p>Запустите IntelliJ IDEA и в открывшемся меню нажмите на кнопку<strong>Open</strong>:</p>
37
<p>Запустите IntelliJ IDEA и в открывшемся меню нажмите на кнопку<strong>Open</strong>:</p>
38
<em>Скриншот: <a>IntelliJ IDEA</a>/ Skillbox Media</em><p>В файловом менеджере выберите папку с модом, которую мы скачали и распаковали на предыдущем шаге. После загрузки проекта слева от редактора появится панель с деревом проекта: в ней отображаются все папки и файлы мода, включая директории src, java и resources.</p>
38
<em>Скриншот: <a>IntelliJ IDEA</a>/ Skillbox Media</em><p>В файловом менеджере выберите папку с модом, которую мы скачали и распаковали на предыдущем шаге. После загрузки проекта слева от редактора появится панель с деревом проекта: в ней отображаются все папки и файлы мода, включая директории src, java и resources.</p>
39
<em>Скриншот: <a>IntelliJ IDEA</a>/ Skillbox Media</em><p>Перейдите по пути src/main/java/com/example/examplemod и удалите файл Config.java. Затем полностью очистите ExampleMod.java. Это файлы-заглушки, вместо которых мы напишем собственную логику.</p>
39
<em>Скриншот: <a>IntelliJ IDEA</a>/ Skillbox Media</em><p>Перейдите по пути src/main/java/com/example/examplemod и удалите файл Config.java. Затем полностью очистите ExampleMod.java. Это файлы-заглушки, вместо которых мы напишем собственную логику.</p>
40
<p>Начнём с добавления следующих строк:</p>
40
<p>Начнём с добавления следующих строк:</p>
41
package com.example.examplemod; // Импорт библиотек Minecraft, которые мы используем import com.mojang.logging.LogUtils; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import org.slf4j.Logger;<p>Это импорты библиотек и модулей, которые мы будем использовать в моде. Например, import net.minecraft.world.item.SwordItem предоставляет доступ к функциям мечей. Поскольку мы создаём собственный меч, нам нужны базовые функции этого типа оружия.</p>
41
package com.example.examplemod; // Импорт библиотек Minecraft, которые мы используем import com.mojang.logging.LogUtils; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import org.slf4j.Logger;<p>Это импорты библиотек и модулей, которые мы будем использовать в моде. Например, import net.minecraft.world.item.SwordItem предоставляет доступ к функциям мечей. Поскольку мы создаём собственный меч, нам нужны базовые функции этого типа оружия.</p>
42
<p>Теперь напишем главный класс мода. В нём мы обработаем логику нового меча и настроим его параметры. Аннотация @Mod в начале класса сообщает Forge, что следующий код относится к моду:</p>
42
<p>Теперь напишем главный класс мода. В нём мы обработаем логику нового меча и настроим его параметры. Аннотация @Mod в начале класса сообщает Forge, что следующий код относится к моду:</p>
43
@Mod(ExampleMod.MODID) public class ExampleMod<p>Далее настроим служебные функции: зададим идентификатор мода, создадим контейнер для новых предметов и запустим логгер - он будет выводить в консоль все действия пользователя и ошибки. Вот наш код:</p>
43
@Mod(ExampleMod.MODID) public class ExampleMod<p>Далее настроим служебные функции: зададим идентификатор мода, создадим контейнер для новых предметов и запустим логгер - он будет выводить в консоль все действия пользователя и ошибки. Вот наш код:</p>
44
-
public static final String MODID = "examplemod"; // Логгер - это инструмент для выво��а сообщений в консоль private static final Logger LOGGER = LogUtils.getLogger(); // ====================================== // РЕГИСТРАЦИЯ ПРЕДМЕТОВ // ====================================== // DeferredRegister - это специальная "коробка", в которую мы складываем все наши предметы // Forge потом автоматически добавит их в игру public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID);<p>Приступаем к созданию меча:</p>
44
+
public static final String MODID = "examplemod"; // Логгер - это инструмент для вывода сообщений в консоль private static final Logger LOGGER = LogUtils.getLogger(); // ====================================== // РЕГИСТРАЦИЯ ПРЕДМЕТОВ // ====================================== // DeferredRegister - это специальная "коробка", в которую мы складываем все наши предметы // Forge потом автоматически добавит их в игру public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID);<p>Приступаем к созданию меча:</p>
45
// ====================================== // НАШ КАСТОМНЫЙ МЕЧ // ====================================== // Создаём собственный меч с именем "custom_sword" public static final RegistryObject<Item> CUSTOM_SWORD = ITEMS.register("custom_sword", () -> new SwordItem( Tiers.DIAMOND, // Материал 5, // Урон -2.4F, // Скорость атаки new Item.Properties() .tab(CreativeModeTab.TAB_COMBAT) // Помещаем меч во вкладку с оружием<p>Когда вы создаёте новые инструменты, им нужно задать три свойства: материал (Tier), урон (Attack Damage) и скорость атаки (Attack Speed).</p>
45
// ====================================== // НАШ КАСТОМНЫЙ МЕЧ // ====================================== // Создаём собственный меч с именем "custom_sword" public static final RegistryObject<Item> CUSTOM_SWORD = ITEMS.register("custom_sword", () -> new SwordItem( Tiers.DIAMOND, // Материал 5, // Урон -2.4F, // Скорость атаки new Item.Properties() .tab(CreativeModeTab.TAB_COMBAT) // Помещаем меч во вкладку с оружием<p>Когда вы создаёте новые инструменты, им нужно задать три свойства: материал (Tier), урон (Attack Damage) и скорость атаки (Attack Speed).</p>
46
<p><strong>Материал</strong>(Tier) определяет прочность предмета и количество использований до поломки. Незеритовые инструменты - самые прочные, деревянные - самые слабые. Мы выбрали для своего меча алмаз, однако вы можете использовать любые другие материалы:</p>
46
<p><strong>Материал</strong>(Tier) определяет прочность предмета и количество использований до поломки. Незеритовые инструменты - самые прочные, деревянные - самые слабые. Мы выбрали для своего меча алмаз, однако вы можете использовать любые другие материалы:</p>
47
<ul><li>Tiers.WOOD - дерево;</li>
47
<ul><li>Tiers.WOOD - дерево;</li>
48
<li>Tiers.STONE - камень;</li>
48
<li>Tiers.STONE - камень;</li>
49
<li>Tiers.IRON - железо;</li>
49
<li>Tiers.IRON - железо;</li>
50
<li>Tiers.GOLD - золото;</li>
50
<li>Tiers.GOLD - золото;</li>
51
<li>Tiers.DIAMOND - алмаз;</li>
51
<li>Tiers.DIAMOND - алмаз;</li>
52
<li>Tiers.NETHERITE - незерит.</li>
52
<li>Tiers.NETHERITE - незерит.</li>
53
</ul><p><strong>Урон</strong>(Attack Damage) - количество здоровья, которое враг потеряет от удара. Мы указали значение 5, которое добавляется к базовому урону всех мечей (+4). Итого наш меч наносит 9 единиц урона за удар.</p>
53
</ul><p><strong>Урон</strong>(Attack Damage) - количество здоровья, которое враг потеряет от удара. Мы указали значение 5, которое добавляется к базовому урону всех мечей (+4). Итого наш меч наносит 9 единиц урона за удар.</p>
54
<p><strong>Скорость атаки</strong>(Attack Speed) показывает, как быстро можно наносить удары. Базовое значение для мечей - -2.4F. Чем ниже число, тем медленнее атака, и наоборот. Поэтому, чтобы увеличить скорость атаки, вам необходимо использовать значение ближе к нулю, например -1.0F. Чтобы замедлить - укажите более низкое значение, например -3.0F.</p>
54
<p><strong>Скорость атаки</strong>(Attack Speed) показывает, как быстро можно наносить удары. Базовое значение для мечей - -2.4F. Чем ниже число, тем медленнее атака, и наоборот. Поэтому, чтобы увеличить скорость атаки, вам необходимо использовать значение ближе к нулю, например -1.0F. Чтобы замедлить - укажите более низкое значение, например -3.0F.</p>
55
<p>У нас почти всё готово. Теперь добавим в код несколько служебных функций, которые будут отвечать за загрузку игрового мира, регистрацию предметов и вывод отладочных сообщений:</p>
55
<p>У нас почти всё готово. Теперь добавим в код несколько служебных функций, которые будут отвечать за загрузку игрового мира, регистрацию предметов и вывод отладочных сообщений:</p>
56
// ====================================== // КОНСТРУКТОР - код, который запускается при загрузке мода // ====================================== public ExampleMod() { // Получаем шину событий Forge IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); // Просим Forge запустить метод commonSetup, когда мод загрузится modEventBus.addListener(this::commonSetup); // Регистрируем наши предметы в Forge // Без этой строчки меч не появится в игре! ITEMS.register(modEventBus); // Регистрируем наш мод для получения игровых событий MinecraftForge.EVENT_BUS.register(this); } // ====================================== // ОБЩАЯ НАСТРОЙКА - запускается один раз при загрузке // ====================================== private void commonSetup(final FMLCommonSetupEvent event) { // Выводим в консоль сообщение о том, что наш мод загрузился LOGGER.info("Кастомный меч успешно загружен!"); } // ====================================== // СОБЫТИЕ ЗАПУСКА МИРА // ====================================== // Этот метод запускается когда МИР начинает работу @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { // Выводим сообщение LOGGER.info("Мир запущен с модом кастомного меча!"); }<p>Полный код файла ExampleMod.java</p>
56
// ====================================== // КОНСТРУКТОР - код, который запускается при загрузке мода // ====================================== public ExampleMod() { // Получаем шину событий Forge IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); // Просим Forge запустить метод commonSetup, когда мод загрузится modEventBus.addListener(this::commonSetup); // Регистрируем наши предметы в Forge // Без этой строчки меч не появится в игре! ITEMS.register(modEventBus); // Регистрируем наш мод для получения игровых событий MinecraftForge.EVENT_BUS.register(this); } // ====================================== // ОБЩАЯ НАСТРОЙКА - запускается один раз при загрузке // ====================================== private void commonSetup(final FMLCommonSetupEvent event) { // Выводим в консоль сообщение о том, что наш мод загрузился LOGGER.info("Кастомный меч успешно загружен!"); } // ====================================== // СОБЫТИЕ ЗАПУСКА МИРА // ====================================== // Этот метод запускается когда МИР начинает работу @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { // Выводим сообщение LOGGER.info("Мир запущен с модом кастомного меча!"); }<p>Полный код файла ExampleMod.java</p>
57
package com.example.examplemod; import com.mojang.logging.LogUtils; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import org.slf4j.Logger; @Mod(ExampleMod.MODID) public class ExampleMod { public static final String MODID = "examplemod"; private static final Logger LOGGER = LogUtils.getLogger(); public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); public static final RegistryObject<Item> CUSTOM_SWORD = ITEMS.register("custom_sword", () -> new SwordItem( Tiers.DIAMOND, 5, -2.4F, new Item.Properties() .tab(CreativeModeTab.TAB_COMBAT) ) ); public ExampleMod() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::commonSetup); ITEMS.register(modEventBus); MinecraftForge.EVENT_BUS.register(this); } private void commonSetup(final FMLCommonSetupEvent event) { LOGGER.info("Кастомный меч успешно загружен!"); } @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { LOGGER.info("Мир запущен с модом кастомного меча!"); } }<p>Чтобы получить предмет в Minecraft, его нужно скрафтить. Рецепт крафта - это схема, которая определяет, какие ресурсы и в каком порядке разместить на верстаке для создания нужного предмета.</p>
57
package com.example.examplemod; import com.mojang.logging.LogUtils; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.SwordItem; import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import org.slf4j.Logger; @Mod(ExampleMod.MODID) public class ExampleMod { public static final String MODID = "examplemod"; private static final Logger LOGGER = LogUtils.getLogger(); public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); public static final RegistryObject<Item> CUSTOM_SWORD = ITEMS.register("custom_sword", () -> new SwordItem( Tiers.DIAMOND, 5, -2.4F, new Item.Properties() .tab(CreativeModeTab.TAB_COMBAT) ) ); public ExampleMod() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::commonSetup); ITEMS.register(modEventBus); MinecraftForge.EVENT_BUS.register(this); } private void commonSetup(final FMLCommonSetupEvent event) { LOGGER.info("Кастомный меч успешно загружен!"); } @SubscribeEvent public void onServerStarting(ServerStartingEvent event) { LOGGER.info("Мир запущен с модом кастомного меча!"); } }<p>Чтобы получить предмет в Minecraft, его нужно скрафтить. Рецепт крафта - это схема, которая определяет, какие ресурсы и в каком порядке разместить на верстаке для создания нужного предмета.</p>
58
<p>Для нашего меча создадим рецепт из алмаза, слитка железа и палки. Игроки смогут получить меч с характеристиками алмазного, но с меньшими затратами ресурсов. Вот как это выглядит на верстаке:</p>
58
<p>Для нашего меча создадим рецепт из алмаза, слитка железа и палки. Игроки смогут получить меч с характеристиками алмазного, но с меньшими затратами ресурсов. Вот как это выглядит на верстаке:</p>
59
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Чтобы это запрограммировать, создайте файл custom_sword.json в папке src/main/resources/data/examplemod/recipes и добавьте код:</p>
59
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Чтобы это запрограммировать, создайте файл custom_sword.json в папке src/main/resources/data/examplemod/recipes и добавьте код:</p>
60
{ "type": "minecraft:crafting_shaped", "pattern": [ " D ", " I ", " S " ], "key": { "D": { "item": "minecraft:diamond" }, "I": { "item": "minecraft:iron_ingot" }, "S": { "item": "minecraft:stick" } }, "result": { "item": "examplemod:custom_sword", "count": 1 } }<p>Что означают элементы кода:</p>
60
{ "type": "minecraft:crafting_shaped", "pattern": [ " D ", " I ", " S " ], "key": { "D": { "item": "minecraft:diamond" }, "I": { "item": "minecraft:iron_ingot" }, "S": { "item": "minecraft:stick" } }, "result": { "item": "examplemod:custom_sword", "count": 1 } }<p>Что означают элементы кода:</p>
61
<ul><li>"type": "minecraft: crafting_shaped" - тип крафта, где важно расположение ресурсов на верстаке;</li>
61
<ul><li>"type": "minecraft: crafting_shaped" - тип крафта, где важно расположение ресурсов на верстаке;</li>
62
<li>"pattern": [" D " , " I ", " S "] - схема расположения ресурсов;</li>
62
<li>"pattern": [" D " , " I ", " S "] - схема расположения ресурсов;</li>
63
<li>"D": {"item": "minecraft: diamond"}, "I": {"item": "minecraft: iron_ingot"}, "S": {"item": "minecraft: stick"} - расшифровка символов: D - алмаз, I - слиток железа, S - палка;</li>
63
<li>"D": {"item": "minecraft: diamond"}, "I": {"item": "minecraft: iron_ingot"}, "S": {"item": "minecraft: stick"} - расшифровка символов: D - алмаз, I - слиток железа, S - палка;</li>
64
<li>"result": {"item": "examplemod: custom_sword", "count": 1} - результат крафта и его количество.</li>
64
<li>"result": {"item": "examplemod: custom_sword", "count": 1} - результат крафта и его количество.</li>
65
</ul><p>Нашим модом могут пользоваться игроки из разных стран. Чтобы всем было удобно, добавим переводы на русский и английский. Создайте папку src/main/resources/assets/examplemod/lang и поместите в неё два файла: en_us.json и ru_ru.json. В первом файле укажите следующее:</p>
65
</ul><p>Нашим модом могут пользоваться игроки из разных стран. Чтобы всем было удобно, добавим переводы на русский и английский. Создайте папку src/main/resources/assets/examplemod/lang и поместите в неё два файла: en_us.json и ru_ru.json. В первом файле укажите следующее:</p>
66
{ "item.examplemod.custom_sword": "Custom Sword" }<p>Вот запись для второго файла:</p>
66
{ "item.examplemod.custom_sword": "Custom Sword" }<p>Вот запись для второго файла:</p>
67
{ "item.examplemod.custom_sword": "Кастомный Меч" }<p>Если у игрока установлена русскоязычная версия Minecraft, он увидит название "Кастомный Меч". Если англоязычная - Custom Sword.</p>
67
{ "item.examplemod.custom_sword": "Кастомный Меч" }<p>Если у игрока установлена русскоязычная версия Minecraft, он увидит название "Кастомный Меч". Если англоязычная - Custom Sword.</p>
68
<p>Ещё нашему моду нужна конфигурация с описанием - игроки увидят её в меню установленных модов. Для этого отредактируйте файл mods.toml в папке src/main/resources/META-INF и укажите следующее:</p>
68
<p>Ещё нашему моду нужна конфигурация с описанием - игроки увидят её в меню установленных модов. Для этого отредактируйте файл mods.toml в папке src/main/resources/META-INF и укажите следующее:</p>
69
modLoader="javafml" loaderVersion="[41,)" license="All rights reserved" [[mods]] modId="examplemod" version="${file.jarVersion}" # Название мода (это видят игроки) displayName="Мод с Кастомным Мечом" # Описание мода description=''' Простой мод для Minecraft 1.19, который добавляет кастомный меч. ''' # Авторы мода authors="Начинающий моддер" # Благодарности credits="Спасибо Forge и сообществу Minecraft!" # Эти моды и библиотеки нужны для работы нашего мода # Зависимость от Forge [[dependencies.examplemod]] modId="forge" mandatory=true versionRange="[41,)" ordering="NONE" side="BOTH" # Зависимость от Minecraft [[dependencies.examplemod]] modId="minecraft" mandatory=true versionRange="[1.19,1.20)" ordering="NONE" side="BOTH"<p>В меню установленных модов описание отображается так:</p>
69
modLoader="javafml" loaderVersion="[41,)" license="All rights reserved" [[mods]] modId="examplemod" version="${file.jarVersion}" # Название мода (это видят игроки) displayName="Мод с Кастомным Мечом" # Описание мода description=''' Простой мод для Minecraft 1.19, который добавляет кастомный меч. ''' # Авторы мода authors="Начинающий моддер" # Благодарности credits="Спасибо Forge и сообществу Minecraft!" # Эти моды и библиотеки нужны для работы нашего мода # Зависимость от Forge [[dependencies.examplemod]] modId="forge" mandatory=true versionRange="[41,)" ordering="NONE" side="BOTH" # Зависимость от Minecraft [[dependencies.examplemod]] modId="minecraft" mandatory=true versionRange="[1.19,1.20)" ordering="NONE" side="BOTH"<p>В меню установленных модов описание отображается так:</p>
70
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Ещё в папке src/main/resources должен находиться файл pack.mcmeta - в нём хранятся метаданные ресурспака, без которых мод не запустится. Если файла нет, создайте его и добавьте следующий код:</p>
70
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Ещё в папке src/main/resources должен находиться файл pack.mcmeta - в нём хранятся метаданные ресурспака, без которых мод не запустится. Если файла нет, создайте его и добавьте следующий код:</p>
71
{ "pack": { "description": "examplemod resources", "pack_format": 9, "forge:resource_pack_format": 9, "forge:data_pack_format": 10 } }<p>Наш меч может наносить урон, и его можно скрафтить, но в игре он выглядит как странный фиолетово-чёрный набор пикселей. Это стандартная заглушка Minecraft для отсутствующих текстур:</p>
71
{ "pack": { "description": "examplemod resources", "pack_format": 9, "forge:resource_pack_format": 9, "forge:data_pack_format": 10 } }<p>Наш меч может наносить урон, и его можно скрафтить, но в игре он выглядит как странный фиолетово-чёрный набор пикселей. Это стандартная заглушка Minecraft для отсутствующих текстур:</p>
72
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Вот как он выглядит в инвентаре:</p>
72
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Вот как он выглядит в инвентаре:</p>
73
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Чтобы исправить ситуацию, нам нужно добавить текстуру. Можно нарисовать её самому или найти готовую. Размер файла текстуры должен быть 16 × 16 пикселей; формат - PNG. Редактировать дизайн предметов для Minecraft удобнее всего в программах Pinta и Photoshop.</p>
73
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Чтобы исправить ситуацию, нам нужно добавить текстуру. Можно нарисовать её самому или найти готовую. Размер файла текстуры должен быть 16 × 16 пикселей; формат - PNG. Редактировать дизайн предметов для Minecraft удобнее всего в программах Pinta и Photoshop.</p>
74
<p>Для примера возьмём готовый меч из текстурпака<a>Squid Game Pack</a>:</p>
74
<p>Для примера возьмём готовый меч из текстурпака<a>Squid Game Pack</a>:</p>
75
<em>Скриншот:<a>Forge</a>/ Skillbox Media</em><p>Сохраните файл с текстурой меча под именем custom_sword.png и переместите его в папку src/main/resources/assets/examplemod/textures/item. Название файла должно совпадать с ID предмета в коде (custom_sword), иначе игра не сможет связать текстуру с предметом и будет отображать заглушку.</p>
75
<em>Скриншот:<a>Forge</a>/ Skillbox Media</em><p>Сохраните файл с текстурой меча под именем custom_sword.png и переместите его в папку src/main/resources/assets/examplemod/textures/item. Название файла должно совпадать с ID предмета в коде (custom_sword), иначе игра не сможет связать текстуру с предметом и будет отображать заглушку.</p>
76
<p>Теперь нужно описать текстуру, чтобы игровой движок понимал, как её использовать. Создайте файл custom_sword.json в папке src/main/resources/assets/examplemod/models/item и добавьте код:</p>
76
<p>Теперь нужно описать текстуру, чтобы игровой движок понимал, как её использовать. Создайте файл custom_sword.json в папке src/main/resources/assets/examplemod/models/item и добавьте код:</p>
77
{ "parent": "item/handheld", "textures": { "layer0": "examplemod:item/custom_sword" } }<p>В этом фрагменте строка "parent": "item/handheld" сообщает, что для предмета используется стандартная модель инструмента: так персонаж сможет держать его в руке. Эту модель используют для всех мечей, лопат и кирок в Minecraft. Параметр "layer0": "examplemod:item/custom_sword" указывает путь к текстуре предмета, которую мы добавили ранее.</p>
77
{ "parent": "item/handheld", "textures": { "layer0": "examplemod:item/custom_sword" } }<p>В этом фрагменте строка "parent": "item/handheld" сообщает, что для предмета используется стандартная модель инструмента: так персонаж сможет держать его в руке. Эту модель используют для всех мечей, лопат и кирок в Minecraft. Параметр "layer0": "examplemod:item/custom_sword" указывает путь к текстуре предмета, которую мы добавили ранее.</p>
78
<p>Если запустить игру после внесения изменений, то вот так наш меч будет выглядеть в инвентаре:</p>
78
<p>Если запустить игру после внесения изменений, то вот так наш меч будет выглядеть в инвентаре:</p>
79
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>А вот как он выглядит в руках персонажа:</p>
79
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>А вот как он выглядит в руках персонажа:</p>
80
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Если вы используете IntelliJ IDEA, откройте встроенный терминал и выполните команду gradlew.bat runClient для Windows или ./gradlew runClient для Linux и macOS. Сборщик проектов Gradle скомпилирует код и запустит Minecraft с вашим модом в режиме разработки:</p>
80
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Если вы используете IntelliJ IDEA, откройте встроенный терминал и выполните команду gradlew.bat runClient для Windows или ./gradlew runClient для Linux и macOS. Сборщик проектов Gradle скомпилирует код и запустит Minecraft с вашим модом в режиме разработки:</p>
81
<em>Скриншот:<a>IntelliJ IDEA</a>/ Skillbox Media</em><p>Перейдите в главное меню, откройте раздел Mods и убедитесь, что ваш мод отображается в списке установленных модификаций. После этого выберите режим Game Mode: Creative и запустите новый мир:</p>
81
<em>Скриншот:<a>IntelliJ IDEA</a>/ Skillbox Media</em><p>Перейдите в главное меню, откройте раздел Mods и убедитесь, что ваш мод отображается в списке установленных модификаций. После этого выберите режим Game Mode: Creative и запустите новый мир:</p>
82
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Нажмите клавишу<strong>E</strong>, чтобы открыть инвентарь. Далее переместитесь на вкладку с оружием и найдите новый меч внизу списка:</p>
82
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Нажмите клавишу<strong>E</strong>, чтобы открыть инвентарь. Далее переместитесь на вкладку с оружием и найдите новый меч внизу списка:</p>
83
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Чтобы поделиться модом с друзьями, его нужно собрать. Для этого выполните в терминале IntelliJ IDEA команду gradlew.bat build для Windows или ./gradlew build для Linux и macOS. Дождитесь завершения сборки и перейдите в папку build/libs. Там вы найдёте файл modid-1.0.jar - это ваш мод. Чтобы установить его в игру, найдите директорию minecraft и скопируйте файл в папку mods.</p>
83
<em>Скриншот: игра Minecraft / Mojang Studios, Xbox Game Studios</em><p>Чтобы поделиться модом с друзьями, его нужно собрать. Для этого выполните в терминале IntelliJ IDEA команду gradlew.bat build для Windows или ./gradlew build для Linux и macOS. Дождитесь завершения сборки и перейдите в папку build/libs. Там вы найдёте файл modid-1.0.jar - это ваш мод. Чтобы установить его в игру, найдите директорию minecraft и скопируйте файл в папку mods.</p>
84
<em>Скриншот: Mac OS / Skillbox Media</em><p>Если на каком-то этапе у вас возникли трудности, вы можете<a>скачать готовый мод</a>с нашего диска и протестировать JAR-файл на своём компьютере. Но для корректной работы мода нужен Minecraft 1.19 с установленным Forge. В других версиях игры мод может не запускаться или работать с ошибками из-за несовместимости API.</p>
84
<em>Скриншот: Mac OS / Skillbox Media</em><p>Если на каком-то этапе у вас возникли трудности, вы можете<a>скачать готовый мод</a>с нашего диска и протестировать JAR-файл на своём компьютере. Но для корректной работы мода нужен Minecraft 1.19 с установленным Forge. В других версиях игры мод может не запускаться или работать с ошибками из-за несовместимости API.</p>
85
<p>Чтобы глубже разобраться в теме, рекомендуем следующие ресурсы:</p>
85
<p>Чтобы глубже разобраться в теме, рекомендуем следующие ресурсы:</p>
86
<ul><li><a>Официальная документация Forge</a> - сайт с описанием всех функций платформы. Здесь вы можете научиться добавлять новые предметы, мобов, биомы и даже менять механику игры.</li>
86
<ul><li><a>Официальная документация Forge</a> - сайт с описанием всех функций платформы. Здесь вы можете научиться добавлять новые предметы, мобов, биомы и даже менять механику игры.</li>
87
<li><a>Forge Modding Tutorials</a> - плейлист на YouTube с гайдами по работе с Forge. В нём более 60 видео, которые научат создавать моды любой сложности. Минус - видео на английском языке.</li>
87
<li><a>Forge Modding Tutorials</a> - плейлист на YouTube с гайдами по работе с Forge. В нём более 60 видео, которые научат создавать моды любой сложности. Минус - видео на английском языке.</li>
88
<li><a>Учебник по созданию модов на русском языке</a> - сборник руководств по работе со старыми версиями Minecraft. Эти материалы помогут вам освоить базовые концепции моддинга: события, регистрацию предметов и работу с API. После вы сможете перейти к программированию для новых версий игры.</li>
88
<li><a>Учебник по созданию модов на русском языке</a> - сборник руководств по работе со старыми версиями Minecraft. Эти материалы помогут вам освоить базовые концепции моддинга: события, регистрацию предметов и работу с API. После вы сможете перейти к программированию для новых версий игры.</li>
89
</ul><a><b>IT-курсы для детей от 7 до 17 лет в Skillbox Kids</b>Программирование, разработка игр, дизайн и нейросети. Бесплатный подбор курса по увлечениям ребёнка. Записаться</a>
89
</ul><a><b>IT-курсы для детей от 7 до 17 лет в Skillbox Kids</b>Программирование, разработка игр, дизайн и нейросети. Бесплатный подбор курса по увлечениям ребёнка. Записаться</a>