1.15.2 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'item 😞

    Voici 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 ?


Log in to reply