enchantment.modid.enchantname
)が本名として表示されます。Mod にエンチャントを追加するには、次のことを行う必要があります:
Enchantment
または別の既存のエンチャント(DamageEnchantment
など)を拡張するクラスを作成する
エンチャントは、個別に実装されたカスタム機能(鉱石の製錬など)を持つか、適切な場合に適用される既存のメカニズム(DamageEnchantment
など)を使用できます。ベースの Enchantment
クラスには、 “on enemy hit” 〔敵へのヒット〕のメソッドなど、機能を作成するためのいくつかのメソッドもあります。
私たちの新しいエンチャントは Frost と呼ばれ、Mob のヒットを遅くします。 エンチャントのレベルに応じて、減速効果、耐久性、効力が増加します。 エンチャントクラスでは、 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 FrostEnchantment extends Enchantment { public FrostEnchantment() { super(Enchantment.Rarity.UNCOMMON, EnchantmentTarget.WEAPON, new EquipmentSlot[] {EquipmentSlot.MAINHAND}); } @Override public int getMinPower(int level) { return 1; } @Override public int getMaxLevel() { return 3; } if(target instanceof LivingEntity) { ((LivingEntity) target).addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, 20 * 2 * level, level - 1)); } super.onTargetDamaged(user, target, level); } }
エンチャントの登録は、通常と同じプロセスに従います:
public class EnchantingExample implements ModInitializer { public static Enchantment FROST = new FrostEnchantment(); @Override public void onInitialize() { Registry.register(Registries.ENCHANTMENT, new Identifier("tutorial", "frost"), FROST); } }
これにより、名前空間 tutorial:frost
の下にエンチャントが登録されます。宝物以外のすべてのエンチャントは、登録したエンチャントを含め、エンチャントテーブルで利用できます。
エンチャントにも翻訳を追加する必要があります。 Mod の言語ファイル に移動して、新しいエントリを追加します。
{ "enchantment.tutorial.frost": "Frost" }
If you go in-game, you should be able to enchant main hand weapons with your new enchant.