enchantment.modid.enchantname
) - это то, что отображается как название книги.Чтобы добавить чары в свой мод, вам нужно будет:
Enchantment
ли другое существующее зачарование (например, DamageEnchantment
)
Зачарования могут либо иметь пользовательские функции, реализованные отдельно (например, плавка добытой руды), либо могут использовать уже существующую механику (например, DamageEnchantment
), которые применяются при необходимости. Базовый класс Enchantment
также имеет несколько методов для создания функциональности, таких как метод “при попадании во врага”.
Наше новое заклинание называется Заморозка (Frost) и замедляет мобов при попадании. Эффект замедления, долговечность и мощь будут расти относительно уровня заклинания. В нашем классе зачарования мы пропускаем UNCOMMON
как редкость зачарования, WEAPON
как цель зачарования и MAINHAND
как единственный допустимый тип инструмента для нашего зачарования.
public class FrostEnchantment extends Enchantment { public FrostEnchantment() { super(Enchantment.Rarity.UNCOMMON, EnchantmentTarget.WEAPON, new EquipmentSlot[] {EquipmentSlot.MAINHAND}); } }
Теперь мы переопределим несколько основных методов для базовой функциональности:
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": "Заморозка" }
Если вы войдете в игру, вы сможете зачаровать оружие с помощью вашего нового заклинания.
enchantment.modid.enchantname
) - это то, что отображается как название книги.