Добавление полёта при полном сете брони

Версия Minecraft
1.12.2
API
Forge
8
0
Всем привет, решил сделать броню бога, чтобы на ней можно было летать при полном сете, как сделать так, чтобы при полном сете этой брони, выполнялось какое-то действие?(Полёт и желательно сообщение в чат)
Java:
package com.azaz.test.items;

import com.azaz.test.init.InitItems;
import com.azaz.test.main.Main;
import com.azaz.test.utils.interfaces.IHasModel;
import net.minecraft.item.Item;

    public class ItemRingOfMaster extends Item implements IHasModel
    {
    public ItemRingOfMaster(String name)
    {
        setRegistryName(name);
        setUnlocalizedName(name);
        setCreativeTab(Main.BIO_TECH);
        setMaxStackSize(1);

        InitItems.ITEMS.add(this);
    }
    @Override
    public void registerModels()
    {
        Main.proxy.registerItemRenderer(this, 0, "inventory");
    }

}
 

sk9zist :l

Исправился
981
18
157
КлассТвоейБрони.java:
@Override
public void onArmorTick(final World world, EntityPlayer player, final ItemStack itemStack) {
    if(player.inventory.armorInventory[0] == ItemReg.Predmet && player.inventory.armorInventory[1] == ItemReg.Predmet && player.inventory.armorInventory[2] == ItemReg.Predmet && player.inventory.armorInventory[3] == ItemReg.Predmet)
    {
        player.capabilities.allowFlying = true;
    } else {
        player.fallDistance = 0.0F;
        player.capabilities.allowFlying = false;
    }
}
 
Последнее редактирование:
7,099
324
1,510

sk9zist :l

Исправился
981
18
157
А, ты через предмет делаешь.. Тогда вот:
Java:
@Override
public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5)
    {
        super.onUpdate(par1ItemStack, par2World, par3Entity, par4, par5);

        if (par3Entity instanceof EntityPlayer)
        {
            EntityPlayer pl = (EntityPlayer) par3Entity;
            if(pl.inventory.armorInventory[0] == ItemReg.Predmet && pl.inventory.armorInventory[1] == ItemReg.Predmet && pl.inventory.armorInventory[2] == ItemReg.Predmet && pl.inventory.armorInventory[3] == ItemReg.Predmet)
            {
                pl.capabilities.allowFlying = true;
            } else {
                pl.fallDistance = 0.0F;
                pl.capabilities.allowFlying = false;
            }
        }
    }

Этот код по сути можно куда угодно запихать, хоть в LivingUpdateEvent.
Выводить сообщение: player.sendMessage(new TextComponentString("True Flying!"));
~~~
Не забудь заменить ItemReg.Predmet на свой предмет и класс предмета соответственно.
 
Последнее редактирование:
8
0
@Sk9zist У меня всё равно ошибки остались, я импортировал всё, и заменил ItemReg.Predmetname на свои названия.
Java:
@Override
    public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5)
        {
            super.onUpdate(par1ItemStack, par2World, par3Entity, par4, par5);

            if (par3Entity instanceof EntityPlayer)
            {
                EntityPlayer pl = (EntityPlayer) par3Entity;
                if(pl.inventory.armorInventory[0] == InitItems.ARMOR_GOD && pl.inventory.armorInventory[1] ==
                InitItems.ARMOR_GOD && pl.inventory.armorInventory[2] == InitItems.ARMOR_GOD && pl.inventory.armorInventory[3] //Ругается на pl.inventory.armorInventory
                == InitItems.ARMOR_GOD)
                {
                    pl.capabilities.allowFlying = true;
                } else {
                    pl.fallDistance = 0.0F;
                    pl.capabilities.allowFlying = false;
                }
            }
        }
 

sk9zist :l

Исправился
981
18
157
Ругается на pl.inventory.armorInventory
Только на один из них? (Я так понимаю что на все)

Я составил этот код по темам из поиска мсмоддинга на телефоне. Извини, не смогу протестировать работоспособность так как у меня в эклипс ошибка. Но, по идее должно работать.
Только замени pl.inventory.armorInventory[N] на:
КлассТвоегоПредмета:
@Override
public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5){
    super.onUpdate(par1ItemStack, par2World, par3Entity, par4, par5);

    if (par3Entity instanceof EntityPlayer)
    {
        EntityPlayer pl = (EntityPlayer) par3Entity;
        if(pl.inventory.armorInventory.get(0).getItem() == InitItems.ARMOR_GOD && pl.inventory.armorInventory.get(1).getItem() == InitItems.ARMOR_GOD && pl.inventory.armorInventory.get(2).getItem() == InitItems.ARMOR_GOD && pl.inventory.armorInventory.get(3).getItem() == InitItems.ARMOR_GOD)
        {
            pl.capabilities.allowFlying = true;
        } else {
            pl.fallDistance = 0.0F;
            pl.capabilities.allowFlying = false;
        }
    }
}
 

sk9zist :l

Исправился
981
18
157
@Azaz ну как, робит?
 
Последнее редактирование:

sk9zist :l

Исправился
981
18
157
во всей длинной строчки ошибка
Странно. Я щас прописал у себя - ошибок нет.
Попробуй так, возможно у тебя что-то с предметом (InitItems) т.е. он может быть ItemStack, а не Item:
Java:
if(pl.inventory.armorInventory.get(0) == InitItems.ARMOR_GOD && pl.inventory.armorInventory.get(1) == InitItems.ARMOR_GOD && pl.inventory.armorInventory.get(2) == InitItems.ARMOR_GOD && pl.inventory.armorInventory.get(3) == InitItems.ARMOR_GOD)

А что в ошибке то пишет? (Наведи на неё и посмотри)
~~~
Ещё вот так можешь попробовать:
Java:
if(pl.inventory.armorInventory.get(0).getItem().equals(InitItems.ARMOR_GOD) && pl.inventory.armorInventory.get(1).getItem().equals(InitItems.ARMOR_GOD) && pl.inventory.armorInventory.get(2).getItem().equals(InitItems.ARMOR_GOD) && pl.inventory.armorInventory.get(3).getItem().equals(InitItems.ARMOR_GOD))
@Azaz
 
Последнее редактирование:
8
0
@Sk9zist Я попробовал вторым способом, ошибки пропали, (кроме InitItems.ArmorGod, но она на краш не повлияла в ней было написано "Unlikely argument type for equals(): ItemArmor.ArmorMaterial seems to be unrelated to Item"), я попробовал, и полёта на броне не было. А ещё пропала модель брони на персонаже.
 

sk9zist :l

Исправился
981
18
157
for equals(): ItemArmor.ArmorMaterial
Эммммм....
Ты зачем вместо итема написал материал брони? Неудивительно что ошибка. Скинь мне твой класс InitItems, чтоб не мучаться. Я тебе потом сразу код пришлю, правильный.
 
8
0
Java:
 public static final List<Item> ITEMS = new ArrayList<Item>();
        //Materials
        public static final ToolMaterial BONE = EnumHelper.addToolMaterial("bone", 2, 256, 50.0F, 2.0F, 12);       
        public static final ToolMaterial MATERIAL_GOD = EnumHelper.addToolMaterial("god", 10, 999999999, 97000.0F, 996.0F, 18);       
        public static final ArmorMaterial ARMOR_BONE = EnumHelper.addArmorMaterial("tm:armor_bone", "tm:armor_bone",
        9, new int[]{2, 4, 6, 3}, 7, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 2.0F);       
        public static final ArmorMaterial ARMOR_GOD = EnumHelper.addArmorMaterial("tm:armor_god", "tm:armor_god",
                999, new int[]{25, 40, 67, 38}, 70, SoundEvents.ITEM_ARMOR_EQUIP_IRON, 965.0F);
      
        //Items   
        public static final Item START_BOOK = new ItemStartBook ("start_book");       
        public static final Item COPPER_INGOT = new ItemCopperIngot ("copper_ingot");
        public static final Item RING_OF_MASTER = new ItemRingOfMaster ("ring_of_master");
        public static final Item FIREBALL = new Fireball ("fireball");
        //Sword
        public static final ItemSword BONE_SWORD = new ItemBoneSword ("bone_sword", BONE);     
        
        public static final ItemSword GOD_SWORD = new ItemGodSword ("god_sword", MATERIAL_GOD);
        
        //Armor
        public static final Item
        BOOTS = new Bonegg("bone_boots", ARMOR_BONE, 1, EntityEquipmentSlot.FEET),
        LEGGS = new Bonegg("bone_leggs", ARMOR_BONE, 2, EntityEquipmentSlot.LEGS),
        CHESTPLATE = new Bonegg("bone_chestplate", ARMOR_BONE, 1, EntityEquipmentSlot.CHEST),
        HEAD = new Bonegg("bone_helmet", ARMOR_BONE, 1, EntityEquipmentSlot.HEAD);
        
        public static final Item
        BOOTS1 = new Bonegg("god_boots", ARMOR_GOD, 1, EntityEquipmentSlot.FEET),
        LEGGS1 = new Bonegg("god_leggs", ARMOR_GOD, 2, EntityEquipmentSlot.LEGS),
        CHESTPLATE1 = new Bonegg("god_chestplate", ARMOR_GOD, 1, EntityEquipmentSlot.CHEST),
        HEAD1 = new Bonegg("god_helmet", ARMOR_GOD, 1, EntityEquipmentSlot.HEAD);
        //food
        public static final Item FORBIDDEN_FIG = new FoodBase("forbidden_fig", 20, 22.4f, false);
 
88
4
6
88
4
6
Сверху