Résolu Nbt
-
Bonjour,
Je n’arrive pas à créer un item qui quand un zombie me tape avec une épée qui a un certain enchantement, il y ai le pseudo de la personne tapée dans le tooltip ; avec ce que j’ai trouvé, j’ai essayé de faire quelque chose mais il me give pas l’itemVoici ma classe de l’item :
public class ItemPersonalGem extends Item { public static String owner; public ItemPersonalGem() { super(new Properties().group(Group.MOD)); setRegistryName("personal_gem"); } @Override public void addInformation(ItemStack stack, @Nullable World world, List<ITextComponent> tooltip, ITooltipFlag flag) { tooltip.add(new StringTextComponent(ChatFormatting.GRAY + "Contains part of the soul of " + NBT(new ItemStack(this)))); } public static String NBT(ItemStack stack) { if (owner == null) { owner = "No Owner"; } CompoundNBT nbt = new CompoundNBT(); nbt.putString("owner", owner); stack.setTag(nbt); return stack.getTag().getString("owner"); } }
et celle de mon enchant :
public class EnchantmentPersonalDamage extends Enchantment { protected EnchantmentPersonalDamage() { super(Rarity.RARE, EnchantmentType.WEAPON, EquipmentSlotType.values()); setRegistryName("personal_damage"); } @Override public void onEntityDamaged(LivingEntity user, Entity target, int level) { ItemPersonalGem.owner = target.getDisplayName().getString(); if (target instanceof PlayerEntity) { ((PlayerEntity) target).inventory.addItemStackToInventory(new ItemStack(Items.PERSONAL_GEM)); } } }
PS : Au fait, “contains part of the soul of”, c’est bon ou il y a une erreur ?
-
J’ai réussi à régler mon problème, pour ceux qu’ils veulent savoir c’est :
Class de l’item :
public class ItemPersonalGem extends Item { public ItemPersonalGem() { super(new Properties().group(Group.MOD)); setRegistryName("personal_gem"); } @Override public void addInformation(ItemStack stack, @Nullable World world, List<ITextComponent> tooltip, ITooltipFlag flag) { if (stack.hasTag()) { tooltip.add(new StringTextComponent(ChatFormatting.GRAY + "Contains part of the soul of " + stack.getTag().getString("Owner"))); } } }
et celle de mon enchant :
public class EnchantmentPersonalDamage extends Enchantment { public EnchantmentPersonalDamage() { super(Rarity.RARE, EnchantmentType.WEAPON, EquipmentSlotType.values()); setRegistryName("personal_damage"); } @Override public void onEntityDamaged(LivingEntity user, Entity target, int level) { ItemStack stack = new ItemStack(Items.PERSONAL_GEM); stack.getOrCreateTag().putString("Owner", target.getDisplayName().getString()); if (!target.world.isRemote && target instanceof PlayerEntity) { ((PlayerEntity) target).inventory.addItemStackToInventory(stack); } } }
par contre de cette façon il me give 2 items, comment le régler ?
-
J’ai réussi à régler mon problème, pour ceux qu’ils veulent savoir c’est :
Class de l’item :
public class ItemPersonalGem extends Item { public ItemPersonalGem() { super(new Properties().group(Group.MOD)); setRegistryName("personal_gem"); } @Override public void addInformation(ItemStack stack, @Nullable World world, List<ITextComponent> tooltip, ITooltipFlag flag) { if (stack.hasTag()) { tooltip.add(new StringTextComponent(ChatFormatting.GRAY + "Contains part of the soul of " + stack.getTag().getString("Owner"))); } } }
et celle de mon enchant :
public class EnchantmentPersonalDamage extends Enchantment { public EnchantmentPersonalDamage() { super(Rarity.RARE, EnchantmentType.WEAPON, EquipmentSlotType.values()); setRegistryName("personal_damage"); } @Override public void onEntityDamaged(LivingEntity user, Entity target, int level) { ItemStack stack = new ItemStack(Items.PERSONAL_GEM); stack.getOrCreateTag().putString("Owner", target.getDisplayName().getString()); if (!target.world.isRemote && target instanceof PlayerEntity) { ((PlayerEntity) target).inventory.addItemStackToInventory(stack); } } }
par contre de cette façon il me give 2 items, comment le régler ?