Эффект с бронёй.

34
0
Здравствуйте, что не так в моём коде по плану при одетой броне должен накладываться эффект "Jump", что делать в моём случае?
(Код файла брони)
Код:
package com.fuzik.fuzikmod.armor;

import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;

import com.fuzik.fuzikmod.FUZIKMod;

public class boneArmor extends ItemArmor {
    
        public boneArmor(ArmorMaterial material, int id,
                int slot) {
            super(material, id, slot);
            this.setCreativeTab(FUZIKMod.FUZIKModTab);

            if(slot == 0) {
                this.setTextureName(FUZIKMod.MODID + ":Bone0");
            }else if (slot == 1) {
                this.setTextureName(FUZIKMod.MODID + ":Bone1");
            }else if (slot == 2) {
                this.setTextureName(FUZIKMod.MODID + ":Bone2");
            }else if (slot == 3) {
                this.setTextureName(FUZIKMod.MODID + ":Bone3");
            }    
        }
        public String getArmorTexture(ItemStack itemstack, Entity entity, int slot, String type) {
            if (itemstack.getItem() == FUZIKMod.armorBoneH || itemstack.getItem() == FUZIKMod.armorBoneC || itemstack.getItem() == FUZIKMod.armorBoneB) {  
                    return FUZIKMod.MODID + ":textures/model/armor/armorBone1.png";
            }else if (itemstack.getItem() == FUZIKMod.armorBoneL) {
                return FUZIKMod.MODID + ":textures/model/armor/armorBone2.png";
            }else{
                return null;
    
            }
        }
        
        @Override
        public void onArmorTick(World world, EntityPlayer player, ItemStack stack)
        {
            if (player.getCurrentArmor(0) != null && player.getCurrentArmor(0).getItem().equals(FUZIKMod.armorBoneH) 
                    && player.getCurrentArmor(1) != null && player.getCurrentArmor(1).getItem().equals(FUZIKMod.armorBoneC) 
                    && player.getCurrentArmor(2) != null && player.getCurrentArmor(2).getItem().equals(FUZIKMod.armorBoneB) 
                    && player.getCurrentArmor(3) != null && player.getCurrentArmor(3).getItem().equals(FUZIKMod.armorBoneH))
            {
                player.addPotionEffect(new PotionEffect(Potion.jump.id, 20*1));
            }
        }
}
Заранее спасибо!
 
Код:
if (player.getCurrentArmor(0) != null && player.getCurrentArmor(0).getItem() == FUZIKMod.armorBoneH
&& player.getCurrentArmor(1) != null && player.getCurrentArmor(1).getItem() == FUZIKMod.armorBoneC) 
&& player.getCurrentArmor(2) != null && player.getCurrentArmor(2).getItem() == FUZIKMod.armorBoneB) 
&& player.getCurrentArmor(3) != null && player.getCurrentArmor(3).getItem() == FUZIKMod.armorBoneH)) {
if (!world.isRemote)
player.addPotionEffect(new PotionEffect(Potion.jump.id, 20*1));
}
Пробовал так?
FUZIKMod.armorBoneH - это ботинки или шлем (он у тебя в 0 и 3 слоте)?
 
timaxa007 написал(а):
Код:
if (player.getCurrentArmor(0) != null && player.getCurrentArmor(0).getItem() == FUZIKMod.armorBoneH
&& player.getCurrentArmor(1) != null && player.getCurrentArmor(1).getItem() == FUZIKMod.armorBoneC) 
&& player.getCurrentArmor(2) != null && player.getCurrentArmor(2).getItem() == FUZIKMod.armorBoneB) 
&& player.getCurrentArmor(3) != null && player.getCurrentArmor(3).getItem() == FUZIKMod.armorBoneH)) {
if (!world.isRemote)
player.addPotionEffect(new PotionEffect(Potion.jump.id, 20*1));
}
Пробовал так?
FUZIKMod.armorBoneH - это ботинки или шлем (он у тебя в 0 и 3 слоте)?
Свой косяк исправил, спасибо что сказал самбы не заметил! А по вопросу и так тоже не работает.
 
А тик работает? В смысле, принтл высвечивает?
А вообще, это надо делать в ивенте, т.к. апдейт идёт от всех итемов, а это в 4 раза расточительнее.
 
FUZIK написал(а):
Свой косяк исправил, спасибо что сказал самбы не заметил! А по вопросу и так тоже не работает.
Попробуй не по-возрастанию, а по-убыванию номера слотов:
Код:
if (player.getCurrentArmor(3) != null && player.getCurrentArmor(3).getItem() == FUZIKMod.armorBoneH
&& player.getCurrentArmor(2) != null && player.getCurrentArmor(2).getItem() == FUZIKMod.armorBoneC) 
&& player.getCurrentArmor(1) != null && player.getCurrentArmor(1).getItem() == FUZIKMod.armorBoneB) 
&& player.getCurrentArmor(0) != null && player.getCurrentArmor(0).getItem() == FUZIKMod.armorBoneH)) {
if (!world.isRemote)
player.addPotionEffect(new PotionEffect(Potion.jump.id, 20*1));
}
Я не знаю как у тебя там перемеренные итемов называются, но думаю суть ясна.
 
Код:
0: Tool in Hand; 1-4: Armor
 - getEquipmentInSlot(int i)
Предмет в руке и броня на игроке.
Код:
returns a player armor item (as itemstack) contained in specified armor slot.
 - getCurrentArmor(int i)
Броня на игроке.
Код:
Returns the currently being used item by the player.
 - getCurrentEquippedItem()
Предмет в руке.
 
Благодарю всех за помощь!Вот так теперь выглядит код.
Код:
package com.fuzik.fuzikmod.armor;

import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;

import com.fuzik.fuzikmod.FUZIKMod;

public class armorBone extends ItemArmor 
{    
    public armorBone(ArmorMaterial material, int id,int slot) {
        super(material, id, slot);
        this.setCreativeTab(FUZIKMod.FUZIKModTab);
    }
        public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type)
        {
            if (stack.getItem() == FUZIKMod.armorBoneH || stack.getItem() == FUZIKMod.armorBoneP || stack.getItem() == FUZIKMod.armorBoneB)
            {
                return FUZIKMod.MODID + ":models/armor/Bone1.png";
            }
            else if (stack.getItem() == FUZIKMod.armorBoneL)
            {
                return FUZIKMod.MODID + ":models/armor/Bone2.png";
            }
            else
            {
                return null;
            }
        }
        @Override
        public void onArmorTick(World world, EntityPlayer player, ItemStack stack){
            if(stack.getItem() == FUZIKMod.armorBoneH){
                if(stack.getItem() == FUZIKMod.armorBoneP)
                    if(stack.getItem() == FUZIKMod.armorBoneB)
                        if(stack.getItem() == FUZIKMod.armorBoneL);
                    player.addPotionEffect(new PotionEffect(Potion.moveSpeed.getId(), 50, - 1));
            }
        }
Оцените по возможности, может что подправить требуется=)
 
Спрессовать if
Зачем такая упоротая система текстуры?
 
Назад
Сверху