I have added an enchantment to my mod and it has some problem when running the mod.
The feature of the enchantment should be:
When the feet slot have this enchantment, the player get a speed 3 effect
The player will hurt 1/40 of the probability for every 20 blocks movement
The register file:
public static final DeferredRegister<Enchantment> ENCHANTMENTS = DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, Technology.MOD_ID);
private static final EquipmentSlotType[] LEGS = new EquipmentSlotType[]{EquipmentSlotType.FEET};
public static final RegistryObject<Enchantment> VOID_SPEED = ENCHANTMENTS.register("void_speed", () -> new VoidSpeedEnchantment(Enchantment.Rarity.VERY_RARE, EnchantmentType.ARMOR_FEET, LEGS));
The enchantment file:
public class VoidSpeedEnchantment extends Enchantment {
public VoidSpeedEnchantment(Rarity rarity, EnchantmentType type, EquipmentSlotType[] slots) {
super(rarity, EnchantmentType.ARMOR_FEET, slots);
}
@Override
public int getMaxLevel() { return 4; }
@Override
public int getMinEnchantability(int enchantmentLevel) { return enchantmentLevel * 20; }
@Override
public int getMaxEnchantability(int enchantmentLevel) { return this.getMinEnchantability(enchantmentLevel) + 15; }
@Override
public boolean isAllowedOnBooks() {
return true;
}
@Override
public boolean canVillagerTrade() {
return false;
}
@Override
public boolean isTreasureEnchantment() {
return true;
}
}
The event file:
@Mod.EventBusSubscriber(modid = Technology.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
public class ModClientEvents {
@SubscribeEvent
public static void onFeetWithVoidSpeedEnchantment(PlayerEvent event){
PlayerEntity player = event.getPlayer();
World world = event.getPlayer().getEntityWorld();
double move = event.getPlayer().getDistance(player);
if (EnchantmentHelper.getMaxEnchantmentLevel(RegistryHandler.VOID_SPEED.get(), player) > 0){ // Problem shows on this line when debugging
player.addPotionEffect(new EffectInstance(Effects.SPEED, 5, 3));
if (move >= 20){
move = 0;
Random random = new Random();
int d1 = random.nextInt(40);
if (d1 == 1){
d1 = 0;
player.addPotionEffect(new EffectInstance(Effects.INSTANT_DAMAGE));
player.sendStatusMessage(new StringTextComponent(TextFormatting.RED + "Hurt by the void"), true);
}
}
}
}
}