tutorial:enchantments
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tutorial:enchantments [2019/07/02 20:13] – finished class creation section draylar | tutorial:enchantments [2023/01/04 13:52] (current) – [Registering Enchantment] In Sample Code: pass FROST variable to the 3rd param of Registry#register(). datsuns | ||
---|---|---|---|
Line 7: | Line 7: | ||
* add translations for your enchantment ((When you register enchantments, | * add translations for your enchantment ((When you register enchantments, | ||
- | Enchantments can either have custom functionality implemented separately (such as smelting ores mined) or can use already existing mechanics (such as '' | + | Enchantments can either have custom functionality implemented separately (such as smelting ores mined) or can use already existing mechanics (such as '' |
==== Creating Enchantment Class ==== | ==== Creating Enchantment Class ==== | ||
- | We'll be creating an enchantment called //Wrath//, which adds an extra 1.5 points of damage, per level, to a melee weapon. The easiest way to do this is by creating a class that extends | + | Our new enchantment |
<code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
- | public class WrathEnchantment | + | public class FrostEnchantment |
- | { | + | public |
- | public | + | super(Enchantment.Rarity.UNCOMMON, EnchantmentTarget.WEAPON, new EquipmentSlot[] |
- | | + | |
- | super(weight, typeIndex, slots) | + | |
- | } | + | |
- | + | ||
- | @Override | + | |
- | public float getAttackDamage(int level, EntityGroup group) | + | |
- | { | + | |
- | // .... | + | |
- | } | + | |
- | + | ||
- | @Override | + | |
- | public int getMinimumPower(int int_1) | + | |
- | | + | |
- | // .... | + | |
- | | + | |
- | + | ||
- | @Override | + | |
- | public int getMaximumLevel() | + | |
- | { | + | |
- | // .... | + | |
- | } | + | |
- | + | ||
- | @Override | + | |
- | public boolean differs(Enchantment enchantment) | + | |
- | { | + | |
- | // .... | + | |
} | } | ||
} | } | ||
</ | </ | ||
- | '' | + | We will now override a few basic methods for basic functionality: |
+ | |||
+ | '' | ||
<code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
@Override | @Override | ||
- | public | + | public |
- | { | + | return 1; |
- | return | + | |
} | } | ||
</ | </ | ||
- | '' | + | '' |
<code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
@Override | @Override | ||
- | public int getMinimumPower(int int_1) | + | public int getMaxLevel() { |
- | { | + | return |
- | return | + | |
} | } | ||
</ | </ | ||
- | '' | + | Finally, we will implement our slowness effect in the '' |
<code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
@Override | @Override | ||
- | public | + | public |
- | { | + | |
- | | + | ((LivingEntity) target).addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, |
+ | | ||
+ | |||
+ | super.onTargetDamaged(user, | ||
} | } | ||
</ | </ | ||
+ | If the entity we are hitting can have status effects ('' | ||
- | Finally, '' | + | The final enchantment file should look like this. |
+ | <code java [enable_line_numbers=" | ||
+ | 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; | ||
+ | } | ||
+ | |||
+ | public void onTargetDamaged(LivingEntity user, Entity target, int level) { | ||
+ | if(target instanceof LivingEntity) { | ||
+ | ((LivingEntity) target).addStatusEffect(new StatusEffectInstance(StatusEffects.SLOWNESS, | ||
+ | } | ||
+ | |||
+ | super.onTargetDamaged(user, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Registering Enchantment ==== | ||
+ | Registering enchantments follows the same process as usual: | ||
<code java [enable_line_numbers=" | <code java [enable_line_numbers=" | ||
- | @Override | + | public class EnchantingExample implements ModInitializer { |
- | public | + | public static Enchantment FROST = new FrostEnchantment(); |
+ | |||
+ | | ||
+ | public | ||
+ | Registry.register(Registries.ENCHANTMENT, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | This registers our enchantment under the namespace '' | ||
+ | |||
+ | ==== Adding Translations & Testing ==== | ||
+ | You'll need to add a translation to your enchantment as well. Head over to your [[tutorial: | ||
+ | |||
+ | <code json [enable_line_numbers=" | ||
{ | { | ||
- | | + | |
} | } | ||
</ | </ | ||
+ | |||
+ | If you go in-game, [[https:// | ||
+ | |||
+ | |||
tutorial/enchantments.1562098398.txt.gz · Last modified: 2019/07/02 20:13 by draylar