enchantment.modid.enchantname
) 将会成为附魔书的名字。从 1.21 开始,附魔都是数据驱动的,这意味着你需要在数据包中定义,而不是在代码中。详情请见 Minecraft Wiki 相关页面。
要在代码中使用这些附魔,只需要存在附魔的 RegistryKey
对象:
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
方法。
public class ExampleMod implements ModInitializer { // [...] @Override public void onInitialize() { // [...] TutorialEnchantments.initialize(); } }
要为附魔添加翻译的名称,请看本教程底部。
此部分教程仅适用于旧的 Minecraft 版本。
如果你想添加属于你的模组的附魔,你需要做以下事情:
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 { public static Enchantment FROST = new FrostEnchantment(); @Override public void onInitialize() { Registry.register(Registries.ENCHANTMENT, new Identifier("tutorial", "frost")) } }
这会在命名空间 tutorial:frost
下注册我们的附魔。所有非宝藏附魔都可以在附魔台中获得,包括你注册的附魔。
此部分在 1.21 之后和之前的版本都有效。
你还是需要像往常一样添加翻译。回到模组语言文件一节并且添加内容:
{ "enchantment.tutorial.frost": "Frost" }
{ "enchantment.tutorial.frost": "霜" }
当你在游戏内,你的主手装备应当能被附魔并且可用。