Перейти к содержимому

Better Enchanted

Fabric-мод для MC 1.20.4, который добавляет ванильные зачарования еде и зельям.

Fabric
Загрузчики
Fabric
Скачиваний на Modrinth
67
Подписчиков на Modrinth
0
версий
6
Обновлён
25 августа 202625 авг.
Опубликован
в 2026

Коротко о моде

Работает на Fabric
Для Minecraft 1.20.1–1.20.6
Нужен и в игре, и на сервере
Последняя версия — 1.1.1+mc1.20.1 от 25 августа 2026
Нужен Fabric API
Лицензия MIT — бесплатно
Где нужен
В игреобязателенНа сервереобязателен

Нужен и в игре, и на сервере

Версии игры1.20.1–1.20.6
Описание переведено автоматическиПоказать оригинал (EN)

Better Enchanted

Мод для Fabric | Minecraft 1.20.4 | Java 17 Переносит эффекты ванильных зачарований на еду и зелья — пусть у них тоже будут способности зачарований.

Введение

Better Enchanted — это мод для Minecraft на Fabric, основной геймплей которого строится вокруг творческого применения эффектов ванильных зачарований для оружия, лука, арбалета и трезубца к еде и метательным зельям. Зачарования еды срабатывают на съевшем при употреблении, а зачарования зелий — на целях при попадании. Все формулы урона максимально приближены к ванильной механике зачарований MC 1.20.4 ради баланса и единообразия.

0. Механизм получения зачарований

По умолчанию ванильный стол зачарований и наковальня отклоняют еду и зелья. Этот мод через Mixins подключает весь конвейер зачарований, чтобы еду и зелья можно было зачаровывать как оружие:

  • Стол зачарований:

    • FoodPotionEnchantableMixin заставляет Item.isEnchantable() возвращать true для еды и зелий и задаёт разумные значения зачаровываемости (обычная еда 10, зелья 15, супер/абсолютное золотое яблоко 22).
    • EnchantingTableMixin внедряется в EnchantmentHelper.getPossibleEntries(), чтобы возвращать пользовательский список доступных зачарований для еды и зелий.
  • Наковальня (зачарованные книги):

    • EnchantmentAcceptItemMixin внедряется в Enchantment.isAcceptableItem(), чтобы подходящие зачарованные книги можно было применять к еде и зельям.
  • Область зачаровывания:

    • Еда: Sharpness, Knockback, Fire Aspect, Efficiency, Frost Walker, Unbreaking
    • Зелья: Sharpness, Power, Punch, Flame, Infinity, Unbreaking, Multishot, Quick Charge, Piercing, Channeling, Loyalty, Swift Throw
    • Супер/абсолютное зачарованное золотое яблоко: поддерживает полный набор зачарований еды и зелий

I. Зачарования еды

Зачарования еды применяются ко всем съедобным предметам и также совместимы с блоками торта (торты используют отдельную систему хранения зачарований для блоков).

1.1 Sharpness

  • Эффект: Наносит урон съевшему при употреблении
  • Формула: урон = 0.5 × уровень + 0.5

    • Sharpness I = 1.0 урона, II = 1.5, III = 2.0, IV = 2.5, V = 3.0
  • Собственный источник урона: Имеет уникальное сообщение о смерти («XXX перерезали горло острой едой»)
  • Поддержка торта: Считывает уровень sharpness из CakeEnchantmentStorage в позиции торта

1.2 Knockback

  • Эффект: Применяет отбрасывание к съевшему при употреблении
  • Направление: Случайное направление (случайный угол 360°), имитирующее «отброс» от еды
  • Формула силы:

    • По горизонтали: сила = 0.5 × уровень
    • По вертикали: Если на земле, даёт небольшой толчок вверх (макс. 0.4)
  • Основа: Адаптировано из логики отбрасывания PlayerEntity.attack() в MC 1.20.4

1.3 Fire Aspect

  • Эффект: Поджигает съевшего при употреблении
  • Длительность: уровень × 4 секунды

    • Fire Aspect I = 4с, Fire Aspect II = 8с
  • Основа: Идентично ванильной логике Fire Aspect в MC 1.20.4 (target.setOnFireFor(level * 4))

1.4 Efficiency

  • Эффект: Ускоряет поедание
  • Формула: Каждый уровень сокращает время поедания на 10%

    • Efficiency I = на 10% быстрее, Efficiency V = на 50% быстрее
  • Реализация: Mixin в Item.getMaxUseTime() для сокращения количества тиков поедания

1.5 Frost Walker

  • Эффект: Даёт эффект Frost Walker после еды
  • Длительность: Базово 20 секунд + 10 секунд за уровень

    • Frost Walker I = 30с, II = 40с, III = 50с
  • Образование льда: Вода под игроком замерзает в морозный лёд во время действия эффекта
  • Периодический урон: Наносит 1 урон от мороза каждые 4 секунды, интервал сокращается на 0.5с за уровень

    • Frost Walker I = каждые 3.5с, II = каждые 3с
  • Визуальный эффект: Полоса здоровья отображается в синем замороженном стиле
  • Настраиваемо: Логирование Frost Walker можно включить через меню отладки

1.6 Unbreaking

  • Эффект: Шанс не потратить еду после употребления
  • Формула вероятности: Основана на ванильной формуле Unbreaking в MC 1.20.4

    • Вероятность расхода = 1 / (уровень + 1)
    • Вероятность не потратить = уровень / (уровень + 1)
    • Unbreaking I = 50% не потратить, II = 66.7%, III = 75%
  • Особая обработка торта: При срабатывании восстанавливает один укус торта (BITES - 1); если торт только что был съеден полностью, восстанавливает его до состояния последнего укуса

II. Зачарования зелий — категория оружия/лука

Зачарования зелий срабатывают, когда метательные зелья (взрывные/длительные) брошены и во что-то попали. Весь урон/эффекты применяются в полную силу к напрямую поражённым сущностям и с затуханием по расстоянию к сущностям в радиусе разбрызгивания (4 блока).

2.1 Sharpness [Зелье]

  • Эффект: Брошенное зелье наносит урон поражённым сущностям
  • Формула: урон = 0.5 × уровень + 0.5 (как у Sharpness для еды)
  • Разбрызгивание: Урон с затуханием по расстоянию в пределах 4 блоков (урон × (1 - расстояние/4))
  • Сложение: Складывается аддитивно с уроном от зачарования Power
  • Собственный источник урона: Уникальное сообщение о смерти («XXX разнесло вдребезги острым зельем»)

2.2 Power [Зелье]

  • Эффект: Брошенное зелье наносит урон поражённым сущностям
  • Формула: Основана на зачаровании Power для лука в MC 1.20.4

    • урон = уровень + 1 (имитация бонуса Power при базовом уроне стрелы = 2)
    • Power I = 2.0, II = 3.0, III = 4.0, IV = 5.0, V = 6.0
  • Сложение: Прибавляется напрямую к урону Sharpness
  • Источник урона: Когда урон Power ≥ урона Sharpness, используется особое сообщение о смерти для Power («XXX уничтожило мощное зелье»)

2.3 Punch [Зелье]

  • Эффект: Брошенное зелье применяет отбрасывание к поражённым сущностям
  • Формула: Основана на зачаровании Punch для лука в MC 1.20.4 (AbstractArrowEntity.onHit)

    • сила отбрасывания = уровень punch × 0.6
  • Направление:

    • Прямое попадание: Вдоль направления полёта зелья (нормализованные горизонтальные компоненты)
    • Радиус разбрызгивания: От точки попадания к сущности, сила затухает по расстоянию

2.4 Flame [Зелье]

  • Эффект: Брошенное зелье поджигает цели при попадании
  • Прямое попадание: 5 секунд горения (100 тиков), соответствует правилам Flame для лука в MC 1.20.4
  • Радиус разбрызгивания: Длительность горения затухает по расстоянию (ceil(5 × (1 - расстояние/4)) секунд)
  • Уровень: Только уровень I (соответствует ванили)

2.5 Channeling [Potion]

  • Эффект: правила Channeling для трезубца из MC 1.20.4 адаптированы как AOE-версия
  • Условия:

    1. Должна быть гроза (world.isThundering())
    2. Позиция цели должна иметь видимость неба (isSkyVisible)
  • Радиус: все живые сущности в пределах 4 блоков от точки попадания зелья
  • Результат: у каждой подходящей сущности в её позиции призывается молния
  • Привязка молнии: источник молнии устанавливается на метателя (влияет на дроп и опыт)
  • Уровень: только I (как в ванилле)

III. Зачарования зелий — категория арбалета

3.1 Multishot [Potion]

  • Эффект: один бросок создаёт несколько зелий с разбросом конусом
  • Формула количества: всего снарядов = 2 + уровень

    • Multishot I = 3, II = 4, III = 5
  • Правила распределения:

    • Первое зелье (основное) летит прямо по направлению прицела (центр конуса)
    • Первые 8 дополнительных снарядов равномерно распределяются по окружности конуса в 10°
    • Свыше 8 дополнительных: случайно распределяются внутри конуса (0°–10°, с использованием sqrt для равномерного распределения по площади)
  • Расход: расходуется только 1 зелье
  • Совместимость: полностью совместимо со всеми режимами Swift Throw (физика/рейкаст)

3.2 Quick Charge [Potion]

  • Эффект: уменьшает время перезарядки зачарования Infinity
  • Формула: каждый уровень уменьшает перезарядку на 20% (базовые 30 секунд)

    • Ур. I = 24с, Ур. II = 18с, Ур. III = 12с, Ур. IV = 6с, Ур. V = 0с (без перезарядки)
  • Требование: должно использоваться вместе с зачарованием Infinity; само по себе не действует

3.3 Piercing [Potion]

  • Эффект: ссылается на правила Piercing для арбалета из MC 1.20.4
  • Механика:

    • Зелье может пройти через уровень сущностей (попадая в уровень + 1 всего)
    • Применяет эффекты зачарований (Sharpness/Power/Punch/Flame) к каждой пробитой сущности
    • Уже пробитые сущности не будут задеты снова
    • Обычно разрушается и вызывает эффекты всплеска при попадании в блок или достижении лимита пробития

IV. Зачарования зелий — категория трезубца

4.1 Loyalty [Potion]

  • Эффект: адаптировано из правил Loyalty для трезубца MC 1.20.4
  • Механика:

    • Зелье автоматически возвращается к метателю через 2 секунды после броска
    • Скорость возврата = 0.5 × уровень блоков/тик
    • Ур. I = 10 блоков/с, Ур. II = 20 блоков/с, Ур. III = 30 блоков/с
    • Если оно попадает в сущность или блок во время полёта/возврата, оно расходуется как обычно (не вернётся)
    • Успешный возврат отдаёт предмет зелья обратно игроку
  • Логика расхода: зелье расходуется сразу при броске (сама сущность несёт логику возврата)

V. Универсальные зачарования зелий

5.1 Infinity [Potion]

  • Эффект: бросок зелья не расходует его
  • Система перезарядки:

    • Пользовательская система перезарядки на основе NBT-тега (InfinityMarked)
    • Влияет только на предметы с зачарованием Infinity, а не на другие одинаковые предметы
    • Базовая перезарядка: 30 секунд (уменьшается Quick Charge)
  • Взаимодействие с Unbreaking:

    • С Unbreaking: выполняется проверка прочности — успех → без перезарядки, провал → перезарядка
    • Без Unbreaking: всегда входит в перезарядку
  • Отображение на клиенте: серый полупрозрачный оверлей перезарядки, синхронизируемый по сети
  • Блокировка перезарядкой: нельзя использовать предмет снова, пока идёт перезарядка

5.2 Unbreaking [Potion]

  • Эффект: шанс не израсходовать зелье после броска
  • Формула: как у Unbreaking для еды (вероятность расхода = 1/(уровень+1))
  • Взаимодействие с Infinity: результат проверки определяет, сработает ли перезарядка (см. выше)

VI. Пользовательские зачарования

6.1 Swift Throw

  • Эффект: увеличивает скорость броска зелья и выравнивает траекторию
  • Максимальный уровень на столе зачарований: 10 (только книги; нельзя применить напрямую к зельям/предметам)
  • Максимальный допустимый уровень на наковальне: 19 (нельзя достичь режима рейкаста >20, сохраняя редкость Swift Throw 25 у супер золотого яблока)
  • Формула скорости: фактическая скорость = базовая скорость (0.5) × (1 + 0.5 × уровень)
  • Формула угла: угол смещения вверх y = 80 / (4 + уровень) градусов

    • Чем выше уровень, тем более плоская траектория
    • Когда угол смещения < 1°, устанавливается 0 (идеально плоский бросок)
  • Два режима:

    • Уровень 1–20 (режим физики): обычный физический бросок со скоростью и направлением, рассчитанными по формуле, подвержен гравитации
    • Уровень >20 (режим рейкаста): мгновенное попадание через потиковую телепортацию рейкастом; сущность зелья невидима и не подвержена гравитации; частицы крита появляются каждые 0.5 блока вдоль направления выстрела (до 64 блоков)
  • Совместимость: полностью совместимо с Multishot — дополнительные снаряды также используют тот же режим Swift Throw

VII. Супер зачарованное золотое яблоко

7.1 Обзор предмета

СвойствоОписание
ID предметаhello-mod:super_enchanted_golden_apple
Цвет текстаСветло-фиолетовый (LIGHT_PURPLE)
Встроенное зачарованиеSwift Throw 25
ПолучениеВерстак 3×3 (Золотые блоки ×4 + Взрывные зелья ×2 + Туманные зелья ×2 + Золотое яблоко ×1)

7.2 Переключение режимов

  • ЛКМ, удерживая предмет, переключает между режимом еды/броска, 5 игровых тиков перезарядки
  • Динамическое название: "Супер зачарованное золотое яблоко" в режиме еды, "Метаемое супер зачарованное золотое яблоко" в режиме броска

7.3 Режим еды

  • Время поедания 32 тика (1.6с), ускоряется зачарованием Efficiency
  • Эффекты еды = Базовые эффекты + эффекты взрывного зелья + эффекты туманного зелья (100% длительности)
  • Базовые эффекты: Regeneration V (30с) + Absorption IV (2мин) + Resistance I (5мин) + Fire Resistance I (5мин)

7.4 Режим броска

  • Встроенный Swift Throw 25 (рейкаст с мгновенным попаданием)
  • При попадании: сначала срабатывают эффекты всплеска (базовые баффы + эффекты взрывного зелья, с затуханием по расстоянию), затем создаётся облако эффекта (базовые баффы + эффекты туманного зелья)
  • Дополнительные эффекты зачарований (Sharpness/Power/Punch/Flame/Channeling/Multishot) все работают

7.5 Хранение эффектов зелий

  • При создании считывает эффекты зелий из взрывных/туманных зелий в рецепте, объединяет по правилам и сохраняет в NBT
  • Подсказка отображает полную информацию об эффектах всплеска и облака

7.6 Совместимость с наковальней

  • Обходит ограничение «Слишком дорого» в 39 уровней: суперзачарованное золотое яблоко игнорирует ванильный лимит стоимости в 39 уровней опыта при работе с наковальней, поэтому его всегда можно зачаровать
  • RepairCost зафиксирован на 10, чтобы предотвратить экспоненциальный рост штрафа
  • Дополнительные зачарования можно накладывать через наковальню (Sharpness/Power/Punch/Flame/Infinity/Unbreaking/Quick Charge/Channeling/Multishot/Piercing/Loyalty)

VIII. Абсолютное зачарованное золотое яблоко

8.1 Обзор предмета

СвойствоОписание
ID предметаhello-mod:ultimate_enchanted_golden_apple
Цвет текстаЯрко-золотой (GOLD)
Встроенные зачарованияEfficiency 9, Unbreaking 10, Swift Throw 25, Infinity 1
ПолучениеНаграда за кастомное достижение (суперзачарованное золотое яблоко со всеми 14 допустимыми зачарованиями на максимальном уровне)

8.2 Переключение режимов

  • ЛКМ, пока предмет в руке, переключает между режимами еды/броска, кулдаун 2 игровых тика (быстрее, чем у супер-версии)
  • Динамическое изменение названия: «Абсолютное зачарованное золотое яблоко» в режиме еды, «Метательное абсолютное зачарованное золотое яблоко» в режиме броска

8.3 Режим еды

  • Efficiency 9 сокращает время поедания до ~3 тиков (почти мгновенно)
  • Фиксированные эффекты (без NBT зелий):

    ЭффектУровеньДлительность
    RegenerationV60с
    ResistanceIII60с
    StrengthV60с
  • Расход: проверка Unbreaking 10 проходит (шанс 91%) → не расходуется + кулдаун использования 3с; не проходит (9%) → расходуется, без кулдауна

8.4 Режим броска

  • Swift Throw 25 (>20) → режим мгновенного попадания по лучу
  • Обнаружение в радиусе 4 блоков при попадании:

    • Враждебные мобы: 100 истинного урона (игнорирует броню) + безусловный удар молнии
    • Дружественные мобы/игроки: Regeneration V (60с)
  • Дополнительные эффекты зачарований (Sharpness/Power/Punch/Flame/Channeling) применяются ко всем сущностям в радиусе
  • Расход: встроенные Infinity + Unbreaking 10; при броске не расходуется, входит в кулдаун 30с (сокращается Quick Charge); проверка Unbreaking пройдена = без кулдауна

8.5 Совместимость с наковальней

  • Использует тот же механизм наковальни, что и супер-версия: обходит ограничение «Слишком дорого» в 39 уровней, RepairCost зафиксирован на 10
  • Дополнительные зачарования можно накладывать через наковальню (тот же список зачарований, что и у супер-версии)

8.6 Требования достижения

  • Все 14 допустимых зачарований на суперзачарованном золотом яблоке на их законном максимальном уровне:

    • Swift Throw 25, Sharpness V, Power V, Punch II, Flame I, Channeling I, Multishot 10, Infinity I, Unbreaking III, Quick Charge III, Knockback II, Fire Aspect II, Efficiency V, Frost Walker II
  • Момент срабатывания: когда игрок достаёт подходящее суперзачарованное золотое яблоко из наковальни, SuperAppleAnvilMixin обнаруживает это и выдаёт достижение
  • После выполнения AdvancementRewardMixin выдаёт награду: 1 абсолютное зачарованное золотое яблоко (с 4 встроенными зачарованиями) + 1000 уровней опыта
  • Если инвентарь игрока полон, предмет-награда выпадает на землю

IX. Утилитарные функции

9.1 HUD здоровья сущностей

  • Отображает текущее HP / максимальное HP цели на экране, когда прицел наведён на сущность
  • Дистанция обнаружения настраивается (по умолчанию 128 блоков)
  • Можно независимо включать/выключать через меню отладки

9.2 HUD предмета в руке

  • Отображает название и количество предмета в основной руке в левом верхнем углу
  • Расширенный режим: дополнительно показывает прочность предмета и полные данные NBT-тегов
  • Можно независимо включать/выключать через меню отладки

9.3 Меню отладки

  • Открывается через кастомную привязку клавиш (по умолчанию не назначена, настраивается в настройках клавиш)
  • Предоставляет подменю:

    • Настройки отображения здоровья сущностей (переключатель + ползунок дистанции обнаружения)
    • Настройки отображения предмета в руке (переключатель + переключатель расширенного режима)
    • Переключатели отладочного лога (независимое управление 10 модулями логов: cake/place/food/potion/damage/swift throw/client/frost walker/infinity cooldown/player behavior)

9.4 Постоянная конфигурация

  • Файл конфигурации находится по пути config/hello-mod.json
  • Все изменения настроек автосохраняются; автозагрузка при запуске
  • Читаемый формат JSON, поддерживает ручное редактирование

X. Техническая архитектура

10.1 Основной технологический стек

КомпонентТехнология
Фреймворк модаFabric Loader 0.15.3 + Fabric API 0.97.1
Версия игрыMinecraft 1.20.4
Версия JavaJava 17
Инструмент сборкиGradle + Fabric Loom 1.7
Модификация кодаИнъекция Mixin
МаппингиYarn 1.20.4+build.3:v2

10.2 Точки инъекции Mixin

Класс MixinЦельНазначение
FoodPotionEnchantableMixinItem.isEnchantable() / Item.getEnchantability()Сделать еду/зелья зачаровываемыми в столе и задать значения зачаровываемости
EnchantingTableMixinEnchantmentHelper.getPossibleEntries()Возвращать кастомный список зачарований для еды/зелий в столе зачарований
EnchantmentAcceptItemMixinEnchantment.isAcceptableItem()Позволить зачаровывать еду/зелья через зачарованные книги на наковальне
PlayerEatFoodMixinPlayerEntity.eatFood()Срабатывания зачарований еды (Sharpness/Knockback/Fire/Frost)
CakeBlockMixinCakeBlock.tryEat()Срабатывания зачарований торта
CakePlaceMixinCakeBlock.onPlaced()Сохранение данных зачарований при установке торта
EfficientEatingMixinItem.getMaxUseTime()Ускорение поедания от Efficiency
UnbreakingFoodMixinPlayerEntity.eatFood() RETURNПроверка Unbreaking для еды
PotionItemMixinThrowablePotionItem.use()Логика броска зелий (Infinity/Unbreaking/Multishot/расход)
PotionEntityMixinPotionEntity.onCollision()Эффекты попадания зелий (Sharpness/Power/Punch/Flame/Channeling)
SwiftThrowTickMixinPotionEntity.tick()Режим луча Swift Throw
MultishotEnchantmentMixin—Помощник Multishot
PiercingPotionMixinколлизия PotionEntityЛогика Piercing
LoyaltyPotionMixinPotionEntity.tick()Логика возврата Loyalty
LoyaltyCollisionMixinколлизия PotionEntityОбработка коллизии возврата Loyalty

| LivingEntityDamageCooldownMixin | LivingEntity.damage() | Сбрасывает кадры неуязвимости при уроне от зелий/молний | | SuperAppleCraftingMixin | CraftingScreenHandler.updateResult | Добавляет данные Swift Throw + зелья при крафте супер золотого яблока | | SuperAppleAnvilMixin | AnvilScreenHandler.updateResult | Обходит лимит в 39 уровней + фиксирует RepairCost + триггер достижения | | AdvancementRewardMixin | PlayerAdvancementTracker.grantCriterion() | Награда за достижение с ультимативным золотым яблоком | | PlayerBehaviorLogMixin | Поведение PlayerEntity | Логирование поведения игрока (атака/взаимодействие/урон/смерть/выброс/прыжок и т.д.) | | PlayerBlockInteractLogMixin | Взаимодействие с блоками | Логирование установки/разрушения/взаимодействия с блоками | | client/DrawContextCooldownMixin | DrawContext.drawItemInSlot() | Отрисовка оверлея бесконечного кулдауна | | client/SwiftThrowRenderMixin | Клиент | Скрывает сущность зелья в режиме рейкаста | | client/SuperAppleAttackMixin | MinecraftClient.doAttack() | Переключение режима золотого яблока по левому клику | | client/BehaviorLogClientMixin | Тик клиента | Логирование поведения клиента (события тика) | | client/BehaviorLogKeyboardMixin | Клавиатура клиента | Логирование поведения клиента (ввод с клавиатуры) | | client/BehaviorLogMouseMixin | Мышь клиента | Логирование поведения клиента (клики мышью) |

10.3 Структура пакетов

com.example.hellomod
├── HelloMod.java                    # Главная точка входа, регистрирует события и системы
├── advancement/                     # Проверки достижений
│   └── UltimateAppleChecker.java    # Проверка зачарования ультимативного золотого яблока
├── block/                           # Хранилище зачарований торта, блок-сущности
│   ├── CakeEnchantmentStorage.java  # Управление данными зачарований торта в памяти
│   ├── EnchantedCakeBlockEntity.java
│   └── HelloModBlockEntities.java
├── client/                          # Клиентские функции
│   ├── HelloModClient.java          # Клиентская точка входа
│   ├── EmptyEntityRenderer.java     # Пустой рендерер (брошенная сущность невидима, избегает визуального бага на высокой скорости)
│   ├── EntityHealthHud.java         # HUD здоровья сущностей
│   ├── InfinityCooldownClientState.java # Клиентская синхронизация бесконечного кулдауна
│   ├── DebugMenuScreen.java         # UI меню отладки
│   ├── DebugLogSettingScreen.java   # UI переключения логов
│   ├── HealthHudSettingScreen.java  # UI настроек HUD здоровья
│   └── ItemHudSettingScreen.java    # UI настроек HUD предметов
├── config/                          # Сохранение конфигурации
│   └── ModConfig.java
├── damage/                          # Пользовательские источники урона
│   ├── ModDamageTypes.java
│   ├── SharpFoodDamageSource.java
│   ├── SharpPotionDamageSource.java
│   ├── PowerPotionDamageSource.java
│   └── UltimateAppleDamageSource.java
├── debug/                           # Управление отладочными логами
│   └── DebugLogConfig.java
├── effect/                          # Пользовательские эффекты
│   └── FrostWalkerFoodEffect.java   # Эффект еды Frost Walker (событие тика)
├── enchantment/                     # Система зачарований
│   ├── ModEnchantments.java         # Регистрация пользовательских зачарований
│   ├── SwiftThrowEnchantment.java   # Определение зачарования Swift Throw
│   ├── InfinityCooldownManager.java # Серверное управление бесконечным кулдауном
│   └── InfinityCooldownSync.java    # Сетевая синхронизация состояния кулдауна
├── entity/                          # Пользовательские сущности
│   ├── ModEntities.java             # Регистрация сущностей
│   ├── SuperGoldenAppleEntity.java  # Брошенная сущность супер золотого яблока
│   └── UltimateGoldenAppleEntity.java # Брошенная сущность ультимативного золотого яблока
├── item/                            # Пользовательские предметы
│   ├── ModItems.java                # Регистрация предметов
│   ├── SuperEnchantedGoldenAppleItem.java  # Супер зачарованное золотое яблоко
│   ├── UltimateEnchantedGoldenAppleItem.java # Ультимативное зачарованное золотое яблоко
│   ├── SuperAppleCraftingHandler.java      # Помощник крафта (устаревший, для совместимости)
│   └── SuperApplePotionMerger.java         # Помощник объединения эффектов зелий
├── network/                         # Сетевое взаимодействие
│   ├── SuperAppleModeSwitchC2SPacket.java  # Синхронизация переключения режима золотого яблока
│   ├── EntityNbtRequestC2SPacket.java      # Запрос NBT сущности (C2S)
│   ├── EntityNbtResponseS2CPacket.java     # Ответ с NBT сущности (S2C)
│   └── EntityNbtCache.java                 # Клиентский кэш NBT (истекает через 500 мс)
└── mixin/                           # Все классы внедрения Mixin
    ├── client/                      # Клиентские Mixin
    └── ...                          # См. таблицу выше

10.4 Ключевые проектные решения

  1. Особая обработка торта: Торты — это блоки, а не предметы, поэтому NBT ItemStack нельзя прочитать напрямую. Используется CakeEnchantmentStorage для привязки данных зачарования к координатам блока — записывается при установке, очищается при полном съедании.
  2. Передача данных зачарований зелий: Зачарования хранятся в NBT ItemStack зелья. При броске полный ItemStack передаётся сущности снаряда через potionEntity.setItem(stack). При попадании EnchantmentHelper.getLevel() читает из стека сущности.
  3. Система бесконечного кулдауна: Не использует ванильный ItemCooldownManager (который влияет на все предметы одного типа). Вместо этого используется пользовательский менеджер кулдауна с ключом по UUID игрока + тегу NBT (InfinityMarked), влияющий только на специально помеченные предметы.
  4. Рейкаст Swift Throw: На высоких уровнях Swift Throw (>20) физическая скорость броска слишком высока, что вызывает прохождение сквозь стены и сбои обнаружения столкновений. Переключается на потиковую телепортацию с рейкастом для обеспечения корректного обнаружения столкновений.
  5. Наковальня обходит лимит «Слишком дорого»: Ванильная наковальня отказывается работать, когда стоимость опыта превышает 39 уровней. SuperAppleAnvilMixin обходит эту проверку, временно помечая игрока как в креативном режиме в начале updateResult, затем восстанавливая исходное состояние, что гарантирует возможность всегда работать с супер/ультимативными золотыми яблоками на наковальне.

  6. Пустой рендеринг для брошенных сущностей: брошенные сущности супер/ультра золотого яблока используют EmptyEntityRenderer (shouldRender() возвращает false), потому что в режиме рейкаста Swift Throw 25 сущность движется чрезвычайно быстро, и рендеринг текстуры создаёт визуальные артефакты. Игроки видят траекторию из частиц крита вместо летящей сущности предмета.
  7. Удаление кадров неуязвимости для урона зельями/молниями: LivingEntityDamageCooldownMixin проверяет источник урона в начале damage(). Если это sharp_potion, power_potion или lightning_bolt, он сбрасывает timeUntilRegen и hurtTime в 0, обеспечивая корректное суммирование урона от нескольких зачарований зелий и урона Channeling в одном тике.
  8. Изменение предела уровня Multishot: MultishotEnchantmentMixin внедряется в Enchantment.getMaxLevel(), чтобы поднять ванильный максимальный уровень зачарования Multishot с 1 до 10, поддерживая больший разброс брошенных снарядов.
  9. Сетевая синхронизация NBT сущностей: HUD с деталями сущности должен отображать полные NBT-данные сервера (включая эффекты зелий). Это достигается через взаимодействие EntityNbtRequestC2SPacket (запрос клиента) → EntityNbtResponseS2CPacket (ответ сервера) → EntityNbtCache (кэш клиента, истекает через 500 мс) для кросс-сторонней синхронизации данных.

XI. Обзорная таблица зачарований

ЗачарованиеЕдаЗельеМакс. уровеньПримечания
Sharpness✅✅VЕда наносит урон едоку, зелье наносит урон цели
Knockback✅—IIСлучайное направление
Fire Aspect✅—II4 с за уровень
Efficiency✅—V-10% времени поедания за уровень
Frost Walker✅—IIIЛёд + непрерывный урон
Unbreaking✅✅IIIШанс не потратить
Power—✅VСуммируется с Sharpness
Punch—✅IIОтбрасывание вдоль направления полёта
Flame—✅I5 с огня
Infinity—✅IБез расхода + перезарядка
Channeling—✅IAOE-молния во время грозы
Multishot—✅10Конусный разброс (ванильный предел — 1, поднят до 10 через Mixin)
Quick Charge—✅VСокращает перезарядку Infinity
Piercing—✅IVПробивает несколько сущностей
Loyalty—✅IIIВозвращается через 2 с
Swift Throw—✅∞ (легальный макс. 19)Пользовательское зачарование; макс. на столе 10 (только книги), легальный макс. на наковальне 19

XII. Среда выполнения и зависимости

  • Minecraft: 1.20.4
  • Fabric Loader: ≥ 0.15.0
  • Fabric API: любая совместимая версия
  • Java: ≥ 17
  • Лицензия: MIT

Частые вопросы

Как установить Better Enchanted?

Установите Fabric под свою версию Minecraft, скачайте Better Enchanted под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть Better Enchanted?

У Better Enchanted есть сборки для Minecraft 1.20.1–1.20.6.

Нужен ли Better Enchanted на сервере?

Нужен и в игре, и на сервере

Лицензия и источник
MIT Licenseможно свободно использовать и распространять с указанием автора
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее