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