RingoWay Developer

RingoWay Developer 

Разработчик майнкрафт модов

70subscribers

44posts

goals1
6 of 100 paid subscribers
Лекции по NeoForge 1.21.10

Forge Моддинг 1.20.1 — Лекция 2: Структура пакетов (папок)

Приветствую, друзья!
Предыдущая лекция:
Forge Моддинг 1.20.1 — Лекция 1: Настройка проекта
Цель лекции
В этой короткой лекции я расскажу о структуре пакетов (папок) в своём проекте Forge для Minecraft 1.20.1. Эта структура помогает организовать код так, чтобы в будущем расширение и сопровождение проекта проходили максимально удобно и логично. Если вам неинтересны архитектурные нюансы, можете сразу перейти к следующей лекции (Лекция 3: Создание предметов) и просто следовать инструкциям, не вдаваясь в подробности назначения тех или иных папок. Хотел бы отметить, что это теоретическая лекция и в ней мы ничего делать не будем.
На данный момент в моём проекте используются 5 основных папок:
• client
• common
• core
• integration
• mixin
Далее я расскажу подробнее, что означает каждая из них и для чего они нужны.
1. Папка client
Назначение:
Папка client содержит весь код, который выполняется только на стороне клиента. Именно здесь размещается всё, что связано с пользовательским интерфейсом, частицами, рендерингом и модели Geckolib
Что содержит:
Экран (Screen): Логика отрисовки и работы с пользовательским интерфейсом, например, GUI, кнопки, анимации.
Рендеринг: Код для визуализации блоков, сущностей, частиц и других графических элементов.
Пример папки:
Ключевой момент:
Вся логика, которая не нужна серверу (например, анимация, обработка кликов мыши), должна оставаться в client. Это обеспечивает разграничение обязанностей и предотвращает ненужное дублирование кода.
2. Папка common
Назначение:
Содержит основную игровую логику мода, которая используется как на клиенте, так и на сервере. Здесь размещены классы, отвечающие за поведение блоков, предметов, эффектов, сетевых взаимодействий и кастомные Feature генерации мира.
Что содержит:
Игровая логика: Описание поведения блоков, предметов, сущностей и эффектов.
Механики игровых элементов: Рецепты, эффекты и другие элементы, необходимые для работы мода. Например в этом пакете, мы можем создать папку item в которой будет предмет, с определенной логикой (с помощью палки заменять камень на золото) и т.д.
Утилиты и инструменты: Общие инструменты, методы и классы, которые используются в разных частях проекта.
Пример папки:
Ключевой момент:
Код в common не должен содержать зависимостей от клиентских библиотек, таких как рендеринг или обработка пользовательского ввода, чтобы его можно было безопасно использовать на сервере. В common нет кода, связанного с регистрацией (registry находится в core). Здесь только внутриигровая логика, а регистрация компонентов происходит централизованно в core/registry, что делает код более структурированным.
3. Папка core
Назначение:
Папка core является «сердцем» мода. Здесь располагается базовая логика инициализации, регистрации и настройки всех основных компонентов проекта.
Что содержит:
Инициализация мода: Точка входа, загрузка и настройка модификации.
Регистрация компонентов: Регистрируются блоки, предметы, эффекты, события и другие элементы.
Генерация данных: Код для датагена (data generation), который автоматически создаёт необходимые файлы или данные. (биомы, размещение, конфигурация, чанки, теги, рецепты
Вспомогательные утилиты: Классы и методы, помогающие координировать работу различных частей мода.
Пример папки:
Ключевой момент:
Core отвечает за то, чтобы все части мода корректно взаимодействовали друг с другом. Этот модуль задаёт основу для работы всего проекта.
4. Папка integration
Назначение:
Папка integration предназначена для кода, который обеспечивает интеграцию с внешними модами или сторонними библиотеками.
Что содержит:
Интеграционные модули: Например, код для взаимодействия с модами вроде JEI (Just Enough Items)
Взаимодействие с API: Специфичные классы, реализующие поддержку API сторонних модов, позволяющие модификации корректно обмениваться данными с другими проектами. Конкретно у себя я реализовал только интеграцию с JEI, если буду осуществлять поддержку других модов, к примеру механики или рецепты, то буду делать в этом классе.
Пример использования:
Ключевой момент:
Изолируя интеграционный код в отдельную папку, мы поддерживаем основной код мода чистым и независимым. Это упрощает обновление и поддержку, позволяя легко модифицировать или отключать внешние моды при необходимости. К примеру если решили изменить, дополнить или убрать то или иное взаимодействие с другим модом, это можно делать тут.
5. Папка mixin
Назначение:
Папка mixin содержит классы, написанные с использованием библиотеки Mixin, предназначенные для модификации поведения стандартного кода Minecraft.
Что содержит:
Mixin-классы: Код, который внедряется в базовые классы Minecraft, чтобы изменить или расширить их функциональность.
Логика изменения поведения: Позволяет изменять или дополнять функциональность игры без прямого изменения исходников.
Пример использования:
Конкретно тут я создал accessor (поговорим позже), чтобы получить доступ к "закрытым" методам классов майнкрафта, а так же mixin - OreVeinifier чтобы изменить генерацию жил в майнкрафте. То есть мы меняем логику ванильного майнкрафта миксинами.
Ключевой момент:
Вынос миксинов в отдельную папку помогает изолировать изменения, внесённые в стандартное поведение игры. Это упрощает отладку, тестирование и поддержку модификаций.
Заключение
Структурированное разделение кода по папкам client, common, core, integration и mixin позволяет:
Обеспечить модульность: Каждый модуль имеет чётко определённую область ответственности.
Упростить поддержку: Легче найти и обновить нужную часть кода, когда проект растёт.
Избежать дублирования: Код, используемый на обеих сторонах, находится в common, а специфичная логика отделена в client или mixin.
В следующей лекции я сразу создам нужные папки для работы с предметами. Удачи!
Следующая лекция:
Forge Моддинг 1.20.1 — Лекция 3: Создание предмета
Subscription levels4

🌱Junior Dev

$3.7 per month
Начало пути в моддинге

Включено:
✅ Базовые лекции по моддингу
✅ Шаблоны и примеры кода (Github)
✅ Приватный Telegram-чат "Сообщество мододелов"
✅ Роль "🌱Junior Dev" в Discord
+ chat

🛠️Middle Dev

$5.4 per month
Практикующий моддер

Включено:
✅ Всё из уровня «Junior Dev»
✅ Продвинутые лекции по моддингу
✅ Роль "🛠️Middle Dev" в Discord
+ chat

🎓Senior Dev

$7.7 per month
Опытный разработчик

Включено:
✅ Всё из уровня «Middle Dev»
✅ Большая благодарность!
✅ В будущем будут расширенные лекции 
✅ Роль "🎓Senior Dev" в Discord
+ chat

🎓Architect Dev

$13.4 per month
Опытный разработчик

Включено:
✅ Всё из уровня «Senior Dev»
✅ Огромная благодарность!
✅ В будущем будут расширенные лекции 
✅ Роль "🎓Architect Dev" в Discord
+ chat
Go up