enchantment.modid.enchantname
) is what appears as the book name.This is an old revision of the document!
Table of Contents
Adding Enchantments
To add enchantments to your mod, you'll need to:
- create a class that extends
Enchantment
or another existing Enchantment (such asDamageEnchantment
) - register your enchantment
- add custom functionality or mechanics if needed
- add translations for your enchantment 1)
Enchantments can either have custom functionality implemented separately (such as smelting ores mined) or can use already existing mechanics (such as DamageEnchantment
), which are applied when appropriate. The base Enchantment
class also has several methods to create functionality, such as an “on enemy hit” method.
Creating Enchantment Class
Our new enchantment is called Frost and slows mobs on hit. The slowness effect, durability, and potency will grow relative to the level of the enchantment.
public class FrostEnchantment extends Enchantment { public FrostEnchantment(Rarity rarity, EnchantmentTarget type, EquipmentSlot[] slots) { super(rarity, type, slots) } }
We will now override a few basic methods for basic functionality:
getMinPower
is related to the minimum level needed to see the enchant in a table, but it is not a 1:1 ratio. Most enchantments return something like 10 * level
, with different scales depending on the max level and rarity of the enchantment. We will return 1 so it is always available.
@Override public int getMinPower(int level) { return 1; }
getMaxLevel
is the number of levels the enchantment has. Sharpness has a max level of 5. 2)
@Override public int getMaxLevel() { return 3; }
Finally, we will implement our slowness effect in the onTargetDamage
method, which is called when you whack an enemy with a tool that has your enchantment.
@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); }
If the entity we are hitting can have status effects (LivingEntity
s can have status effects, but not Entity
), give it the slowness effect. The duration of the effect is 2 seconds per level, and the potency is equivalent to the level.
Registering Enchantment
Registering enchantments follows the same process as usual:
private static Enchantment FROST; @Override public void onInitialize() { FROST = Registry.register( Registry.ENCHANTMENT, new Identifier("tutorial", "frost"), new FrostEnchantment( Enchantment.Weight.VERY_RARE, EnchantmentTarget.WEAPON, new EquipmentSlot[] { EquipmentSlot.MAINHAND } ) ); }
This registers our enchantment under the namespace tutorial:frost
, sets it as a very rare enchantment, and only allows it on main hand tools.
Adding Translations & Testing
You'll need to add a translation to your enchantment as well. Head over to your mod lang file and add a new entry:
{ "enchantment.tutorial.frost": "Frost" }
If you go in-game, you should be able to enchant main hand weapons with your new enchant.