"Души" или "Как использовать NBT?"

Крч, я использовал свою старую систему (которую, кстати, мне "подсказали" (вернее, вообще-то показали полностью)) для сбора тогда ДНК, но теперь для, например, душ. Разницы тут никакой нет, как назову, там и назову, но суть в том, что все работает, по клику предметом по мобу (или игроку, но по игроку не пробовал еще) предмет забирается и появляется новый с названием моба в описании (или игрока). Но: все так выходить лишь если я буду держать и кликать предметом этим в первом слоте. Во втором слоте и в третьем и т.д. он не забирается и не дается предмет с именем моба. Но частицы (которые должны появиться при удачном сборе ДНК или души) появляются. В чем дело?
[merge_posts_bbcode]Добавлено: 26.05.2016 11:47:57[/merge_posts_bbcode]

Код:
public class Soulstone extends Item
{
    public static NBTTagCompound nbt;
    public int s = 0;

    public Soulstone(int par1)
    {
        this.maxStackSize = 1;
        this.setCreativeTab(VoMBase.TabSouls);
        this.setTextureName(VoMBase.MODID + ":Soulstone");
    }

    @Override
    public void registerIcons(IIconRegister par1IconRegister)
    {
        this.itemIcon = par1IconRegister.registerIcon(VoMBase.MODID + ":Soulstone" + "_" + s);
    }

    @Override
    public boolean onLeftClickEntity(ItemStack is, EntityPlayer player, Entity entity)
    {
        if (entity instanceof EntityLivingBase)
        {
            EntityLivingBase entity_base = (EntityLivingBase) entity;

            if (player.worldObj.rand.nextInt(2) == 0)
            {
                //entity.playSound("random.explode", 1.0F, 1.0F);
                entity_base.addPotionEffect(new PotionEffect(Potion.confusion.id, 0, 5));
                //player.inventory.consumeInventoryItem(AlchemyBase.Needle);
                //player.inventory.addItemStackToInventory(new ItemStack(AlchemyBase.NeedleWithBlood, 1));

                for (int i = 0; i < 10; i++)
                {
                    entity.worldObj.spawnParticle("witchMagic", entity.posX, entity.posY + 0.5, entity.posZ, 0.0D, 0.1D, 0.0D);
                }

                s = 1;
                ItemStack is_new = is.copy();
                is_new = addNBT(is_new, entity_base);
                player.inventory.addItemStackToInventory(is_new);
                player.inventory.consumeInventoryItem(is.getItem());
            }
        }
        return true;
    }

    @Override
    public String getUnlocalizedName(ItemStack is)
    {
        NBTTagCompound nbt = is.getTagCompound();
        if (nbt != null)
        {
            if (nbt.hasKey("SP", Constants.NBT.TAG_STRING))
            {
                return "SoulstoneWithSoulOfPlayer";
            }
            if (nbt.hasKey("SE", Constants.NBT.TAG_STRING))
            {
                return "SoulstoneWithSoulOfEntity";
            }
        } else return "Soulstone";
        return super.getUnlocalizedName();
    }

    @Override
    public void addInformation(ItemStack is, EntityPlayer player, List list, boolean flag)
    {
        NBTTagCompound nbt = is.getTagCompound();
        if (nbt != null)
        {
            if (nbt.hasKey("SP", Constants.NBT.TAG_STRING))
            {
                list.add(nbt.getString("SP"));
            }
            if (nbt.hasKey("SE", Constants.NBT.TAG_STRING))
            {
                list.add(StatCollector.translateToLocal(nbt.getString("SE")));
            }
        }
    }

    @SideOnly(Side.CLIENT)
    public void getSubItems(Item item, CreativeTabs table, List list)
    {
        list.add(addNBT(new ItemStack(item), null));
    }

    private static ItemStack addNBT(ItemStack is, EntityLivingBase entity)
    {
        nbt = is.getTagCompound();
        if (nbt == null) nbt = new NBTTagCompound();
        if (entity != null)
        {
            nbt.setString("S" + (entity instanceof EntityPlayer ? "P" : "E"), entity.getCommandSenderName());
        }
        is.setTagCompound(nbt);
        return is;
    }
}

[merge_posts_bbcode]Добавлено: 26.05.2016 11:48:43[/merge_posts_bbcode]

Кстати, текстура тоже не меняется, когда душа удачно собрана...
 
Ты смотрел в custom NPC?Там такая штуковина тоже есть.
 
Magitrop, это возможно из-за рандома, на клиентской стороне условия рандома true, а серверной стороне условия рандома false.
 
Назад
Сверху