Hello,
I'm making a mod that gives the player an effecet when wears the full set, but it doesn't work while Minecraft is running.
I've tried writting onArmorTick method in my ModArmorMaterial but nothing happens, also IntelliJ doesn't allow me use @Override
package com.TitanKnight.dragonCrystals.util;
import com.TitanKnight.dragonCrystals.DragonCristalsMod;
import com.TitanKnight.dragonCrystals.armor.ModArmorMaterial;
import com.TitanKnight.dragonCrystals.blocks.*;
import com.TitanKnight.dragonCrystals.items.ItemBase;
import com.TitanKnight.dragonCrystals.tools.ModItemTier;
import net.minecraft.block.Block;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.ArmorItem;
import net.minecraft.item.Item;
import net.minecraftforge.fml.RegistryObject;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
public class RegistryHandler {
public static final DeferredRegister<Item> ITEMS= new DeferredRegister<>(ForgeRegistries.ITEMS, DragonCrystalsMod.MOD_ID);
public static final DeferredRegister<Block> BLOCKS = new DeferredRegister<>(ForgeRegistries.BLOCKS, DragonCrystalsMod.MOD_ID);
public static void init(){
ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus());
BLOCKS.register(FMLJavaModLoadingContext.get().getModEventBus());
}
//Items
public static final RegistryObject<Item> AQUAMARINE = ITEMS.register("aquamarine", ItemBase::new);
//Armor
public static final RegistryObject<Item>AQUAMARINE_HELMET = ITEMS.register( "aquamarine_helmet", () ->
new ArmorItem(ModArmorMaterial.AQUAMARINE, EquipmentSlotType.HEAD, new Item.Properties().group(DragonCrystalsMod.TAB)));
public static final RegistryObject<Item>AQUAMARINE_CHESTPLATE = ITEMS.register( "aquamarine_chestplate", () ->
new ArmorItem(ModArmorMaterial.AQUAMARINE, EquipmentSlotType.CHEST, new Item.Properties().group(DragonCrystalsMod.TAB)));
public static final RegistryObject<Item>AQUAMARINE_LEGGINGS = ITEMS.register( "aquamarine_leggings", () ->
new ArmorItem(ModArmorMaterial.AQUAMARINE, EquipmentSlotType.LEGS, new Item.Properties().group(DragonCrystalsMod.TAB)));
public static final RegistryObject<Item>AQUAMARINE_BOOTS = ITEMS.register( "aquamarine_boots", () ->
new ArmorItem(ModArmorMaterial.AQUAMARINE, EquipmentSlotType.FEET, new Item.Properties().group(DragonCrystalsMod.TAB)));
//Blocks
public static final RegistryObject<Block> AQUAMARINE_ORE = BLOCKS.register("aquamarine_ore", AquamarineOre::new);
//Blocks Items
public static final RegistryObject<Item> AQUAMARINE_ORE_ITEM = ITEMS.register("aquamarine_ore", ()->new BlockItemBase(AQUAMARINE_ORE.get()));
}
This is my RegistryHandler class where I register items an blocks
package com.TitanKnight.dragonCrystals.armor;
import com.TitanKnight.dragonCrystals.DragonCrystalsMod;
import com.TitanKnight.dragonCrystals.util.RegistryHandler;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.EquipmentSlotType;
import net.minecraft.item.IArmorMaterial;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.Effects;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import java.util.function.Supplier;
public enum ModArmorMaterial implements IArmorMaterial {
AQUAMARINE(DragonCrystalsMod.MOD_ID + ":aquamarine_armor", 25, new int[]{2, 5, 6, 2}, 18,
SoundEvents.ITEM_ARMOR_EQUIP_GENERIC, 0.0F, () -> {
return Ingredient.fromItems(RegistryHandler.AQUAMARINE.get());
});
private static final int[] MAX_DAMAGE_ARRAY = new int[]{11, 16, 15, 13};
private final String name;
private final int maxDamageFactor;
private final int[] damageReductionAmountArray;
private final int enchantability;
private final SoundEvent soundEvent;
private final float toughness;
private final Supplier<Ingredient> repairMaterial;
ModArmorMaterial(String name, int maxDamageFactor, int[] damageReductionAmountArray, int enchantability,
SoundEvent soundEvent, float toughness, Supplier<Ingredient> repairMaterial) {
this.name = name;
this.maxDamageFactor = maxDamageFactor;
this.damageReductionAmountArray = damageReductionAmountArray;
this.enchantability = enchantability;
this.soundEvent = soundEvent;
this.toughness = toughness;
this.repairMaterial = repairMaterial;
}
@Override
public int getDurability(EquipmentSlotType slotIn) {
return MAX_DAMAGE_ARRAY[slotIn.getIndex()] * this.maxDamageFactor;
}
@Override
public int getDamageReductionAmount(EquipmentSlotType slotIn) {
return this.damageReductionAmountArray[slotIn.getIndex()];
}
@Override
public int getEnchantability() {
return this.enchantability;
}
@Override
public SoundEvent getSoundEvent() {
return this.soundEvent;
}
@Override
public Ingredient getRepairMaterial() {
return this.repairMaterial.get();
}
@OnlyIn(Dist.CLIENT)
@Override
public String getName() {
return this.name;
}
@Override
public float getToughness() {
return this.toughness;
}
}
This is myModArmorMaterial
public void onArmorTick(ItemStack stack, World world, PlayerEntity player) {
if (player.getItemStackFromSlot(EquipmentSlotType.HEAD).getItem() == RegistryHandler.AQUAMARINE_HELMET.get()
&& player.getItemStackFromSlot(EquipmentSlotType.CHEST).getItem() == RegistryHandler.AQUAMARINE_CHESTPLATE.get() &&
player.getItemStackFromSlot(EquipmentSlotType.LEGS).getItem() == RegistryHandler.AQUAMARINE_LEGGINGS.get() &&
player.getItemStackFromSlot(EquipmentSlotType.FEET).getItem() == RegistryHandler.AQUAMARINE_BOOTS.get()
) {
player.addPotionEffect(new EffectInstance(Effects.SPEED));
}
}
onArmorTick