Table of Contents

Добавление зачарований

Чтобы добавить чары в свой мод, вам нужно будет:

Зачарования могут либо иметь пользовательские функции, реализованные отдельно (например, плавка добытой руды), либо могут использовать уже существующую механику (например, DamageEnchantment), которые применяются при необходимости. Базовый класс Enchantment также имеет несколько методов для создания функциональности, таких как метод “при попадании во врага”.

Создание класса зачарования

Наше новое заклинание называется Заморозка (Frost) и замедляет мобов при попадании. Эффект замедления, долговечность и мощь будут расти относительно уровня заклинания. В нашем классе зачарования мы пропускаем UNCOMMON как редкость зачарования, WEAPON как цель зачарования и MAINHAND как единственный допустимый тип инструмента для нашего зачарования.

  1. public class FrostEnchantment extends Enchantment {
  2.  
  3. public FrostEnchantment() {
  4. super(Enchantment.Rarity.UNCOMMON, EnchantmentTarget.WEAPON, new EquipmentSlot[] {EquipmentSlot.MAINHAND});
  5. }
  6. }

Теперь мы переопределим несколько основных методов для базовой функциональности:

getMinPower относится к минимальному уровню, необходимому для отображения заклинания в таблице, но это не соотношение 1:1. Большинство заклинаний возвращают что-то вроде 10 * level, с разными шкалами в зависимости от максимального уровня и редкости зачарования. Мы вернем 1, чтобы он всегда был доступен. Обратите внимание, что максимальная сила зачарования по умолчанию установлена на min(level) + 5, что означает, что это зачарование будет появляться только на очень низких уровнях. Вам придется самостоятельно настроить свои свойства зачарования и посмотреть на аналогичные значения зачарования, чтобы найти подходящее место.

@Override
public int getMinPower(int level) {
    return 1;
}

getMaxLevel - это количество уровней, которые имеет заклинание. Острота имеет максимальный уровень 5. 2)

@Override
public int getMaxLevel() {
    return 3;
}

Наконец, мы реализуем наш эффект замедления в методе onTargetDamage, который вызывается, когда вы наносите удар врагу инструментом, обладающим вашими чарами.

@Override
public void onTargetDamaged(LivingEntity user, Entity target, int level) {
    if(target instanceof LivingEntity) {
        ((LivingEntity) target).addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 20 * 2 * level, level - 1));
    }
 
    super.onTargetDamaged(user, target, level);
}

Если объект, к которому мы обращаемся, может иметь статусные эффекты (LivingEntity могут иметь статусные эффекты, но не Entity), дадим ему эффект замедления. Продолжительность эффекта составляет 2 секунды на уровень, а эффективность эквивалентна уровню.

Регистрация зачарования

Регистрация заклинаний проходит по тому же процессу, что и обычно:

public class EnchantingExample implements ModInitializer {
 
    private static Enchantment FROST = Registry.register(
            Registry.ENCHANTMENT,
            new Identifier("tutorial", "frost"),
            new FrostEnchantment()
    );
 
    @Override
    public void onInitialize() {
 
    }
}

Это регистрирует наше заклинание в пространстве имен tutorial:frost. Все заклинания, не связанные с сокровищами, доступны в таблице зачарований, включая те, которые вы регистрируете.

Добавление перевода & Тестирование

Вам также нужно будет добавить перевод к вашему зачарованию. Перейдите к своему файлу локализации мода и добавьте новую запись:

{
    "enchantment.tutorial.frost": "Заморозка"
}

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

1)
Когда вы регистрируете заклинания, книги автоматически добавляются в игру для каждого уровня. Переведенное название заклинания (enchantment.modid.enchantname) - это то, что отображается как название книги.
2)
Чары с более чем одним уровнем будут иметь римские цифры после названия, чтобы показать уровень. Если заклинание имеет только один уровень, ничего не добавляется.