Table of Contents

添加附魔

自 1.21 版本之后添加附魔

从 1.21 开始,附魔都是数据驱动的,这意味着你需要在数据包中定义,而不是在代码中。详情请见 Minecraft Wiki 相关页面

要在代码中使用这些附魔,只需要存在附魔的 RegistryKey 对象:

TutorialEnchantments
public final class TutorialEnchantments {
  public static final RegistryKey<Enchantment> FROST = of("frost");
 
  private static RegistryKey<Enchantment> of(String name) {
    return RegistryKey.of(RegistryKeys.ENCHANTMENT, Identifier.of("tutorial", name));
  }
 
  public static void initialize() {
  }
}

记得在你的 ModInitializer 中引用 initialize 方法。

ExampleMod
public class ExampleMod implements ModInitializer {
  // [...]
 
  @Override
  public void onInitialize() {
    // [...]
    TutorialEnchantments.initialize();
  }
}

要为附魔添加翻译的名称,请看本教程底部。

在 1.21 版本之前添加附魔

:!: 此部分教程仅适用于旧的 Minecraft 版本。

如果你想添加属于你的模组的附魔,你需要做以下事情:

附魔可以实现属于他自己的功能 (比如挖掘矿石后直接使其成为金属锭) 也可以使用现有的机制 (比如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 {
    public static Enchantment FROST = new FrostEnchantment();
 
    @Override
    public void onInitialize() {
        Registry.register(Registries.ENCHANTMENT, new Identifier("tutorial", "frost"))
    }
}

这会在命名空间 tutorial:frost 下注册我们的附魔。所有非宝藏附魔都可以在附魔台中获得,包括你注册的附魔。

添加翻译

=) 此部分在 1.21 之后和之前的版本都有效。

你还是需要像往常一样添加翻译。回到模组语言文件一节并且添加内容:

resources/data/tutorial/lang/en_us.json
{
    "enchantment.tutorial.frost": "Frost"
}
resources/data/tutorial/lang/zh_cn.json
{
    "enchantment.tutorial.frost": "霜"
}

当你在游戏内,你的主手装备应当能被附魔并且可用。

1)
当你注册你的附魔的时候,你的附魔的所有等级的附魔书都会被自动添加到游戏当中。 附魔的翻译 (enchantment.modid.enchantname) 将会成为附魔书的名字。
2)
具有多个级别的附魔将在名称后使用罗马数字来显示级别。如果附魔只有一个级别,则不会添加任何内容。