Броня

Версия Minecraft
1.7.10
929
30
66
Всем привет.

Кто может помочь , не разбираюсь в нбт , нужно если ты не владелец , то чужая броня на тебе ломается или нельзя одевать.
Java:
public static class Helmet extends ItemArmor {

      public Helmet(ArmorMaterial armorMaterial, int par3, int par4) {
         super(armorMaterial, par3, par4);
         this.setCreativeTab(bestfoxy.creativeTab);
         this.setUnlocalizedName("Helmet");
         this.setTextureName("bestfoxy:helmet0");
      }

      public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) {
         if(!stack.hasTagCompound()) {
            stack.stackTagCompound = new NBTTagCompound();
         
         if(!world.isRemote && !stack.stackTagCompound.hasKey(owner) && entity instanceof EntityPlayer) {
            EntityPlayer player = (EntityPlayer)entity;
            stack.stackTagCompound.setString(owner, player.getDisplayName());
         }

    }
 
Последнее редактирование:
7,099
324
1,510
Java:
if(entity instanceof EntityPlayer){
    EntityPlayer player = (EntityPlayer)entity;
    if(!world.isRemote && !stack.stackTagCompound.getString(owner).equals(player.getDisplayName())) {
           stack.setItemDamage(stack.getItemDamage()+1)
    }
}
 

Eifel

Модератор
1,624
79
609
В onUpdate надо делать проверку есть ли у брони владелец, и если его нету то записывать в нбт. А в onArmorTick надо проверять владельца и если он не тот, то ломать броню. Весь код есть, надо только сложить правильно)
 

Eifel

Модератор
1,624
79
609
Попробуй так:
Java:
//в onUpdate
if(!stack.hasTagCompound()) {
     stack.stackTagCompound = new NBTTagCompound();
}

if(!world.isRemote && !stack.stackTagCompound.hasKey(owner) && entity instanceof EntityPlayer) {
       EntityPlayer player = (EntityPlayer)entity;
      stack.stackTagCompound.setString(owner, player.getDisplayName());
}
//в onArmorTick как написал hohserg1
if(entity instanceof EntityPlayer){
    EntityPlayer player = (EntityPlayer)entity;
    if(!world.isRemote && !stack.stackTagCompound.getString(owner).equals(player.getDisplayName())) {
           stack.setItemDamage(stack.getItemDamage() + 1);
    }
}

Не помню список параметров у onArmorTick , но вроде бы должно работать. Возможно там параметры другие, то надо изменить чуть
 
929
30
66
Java:
public static class Helmet extends ItemArmor {

     
      public Helmet(ArmorMaterial armorMaterial, int par3, int par4) {
         super(armorMaterial, par3, par4);
         this.setCreativeTab(bestfoxy.creativeTab);
         this.setUnlocalizedName("Helmet");
         this.setTextureName("bestfoxy:h0");
      }

      public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) {
          if(!stack.hasTagCompound()) {
                 stack.stackTagCompound = new NBTTagCompound();
            }

     }
      public void onArmorTick(ItemStack stack, World world, Entity entity, int par4, boolean par5) {
            if(entity instanceof EntityPlayer){
                EntityPlayer player = (EntityPlayer)entity;
                if(!world.isRemote && !stack.stackTagCompound.getString(owner).equals(player.getDisplayName())) {
                       stack.setItemDamage(stack.getItemDamage() + 1);
                }
            }
      }
 
Последнее редактирование:

timaxa007

Модератор
5,831
409
672
@BestFoxy, не нужно просто менять название метода с onUpdate на onArmorTick и после этого ожидать, то что у тебя всё заработает.
Java:
    /**
     * Called to tick armor in the armor slot. Override to do something
     *
     * @param world
     * @param player
     * @param itemStack
     */
    public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack)
    {

    }
 
929
30
66
@timaxa007 , вот так получилось, опять же не работает
Java:
public void onArmorTick(World world, EntityPlayer players, ItemStack itemstack, Entity entity)
      {
        if(entity instanceof EntityPlayer){
                EntityPlayer player = (EntityPlayer)entity;
                if(!world.isRemote && !itemstack.stackTagCompound.getString(owner).equals(player.getDisplayName())) {
                    itemstack.setItemDamage(itemstack.getItemDamage() + 1);
                }
                
          }
      }
 

timaxa007

Модератор
5,831
409
672
-_-
Я же тебе скинул, какой метод рабочий, а ты опять пытаешься делать не правильно:
Java:
@Override
public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) {

                if(!world.isRemote && !itemStack.stackTagCompound.getString(owner).equals(player.getDisplayName())) {
                    itemStack.setItemDamage(itemStack.getItemDamage() + 1);
                }
               
}
 
Последнее редактирование:
Сверху