Item à metadata en 1.7 ?



  • Bonsoir ! Voilà, je me retrouve ici pour savoir si il était encore possible de créer des items à metadata en 1.7 car les ID ne marchent plus ..
    Si oui pouvez vous me donner la solution, si non y a t'il un autre moyen ?

    Merci d'avance à tous et bonne soirée 🙂


  • Rédacteurs

    Même principe que pour les blocs : ```java
    private String[] type = new String[]{"item1", "item2", "item3", "item4"};

    
    Bien Sûr les .blockID ont disparus, même ça ne change rien au système (le changement du système de metadata c'est en 1.8)


  • @'Phenix246':

    Même principe que pour les blocs :

    private String[] type = new String[]{"item1", "item2", "item3", "item4"};
    

    Bien Sûr les .blockID ont disparus, même ça ne change rien au système (le changement du système de metadata c'est en 1.8)

    Merci je vais tester tous ça ! 🙂
    Je reviens ici si j'ai un autre problème, merci encore !



  • @'Phenix246':

    Même principe que pour les blocs :

    private String[] type = new String[]{"item1", "item2", "item3", "item4"};
    

    Bien Sûr les .blockID ont disparus, même ça ne change rien au système (le changement du système de metadata c'est en 1.8)

    De retour, après avoir placé le tableau et essayer plusieurs fois plusieurs choses pour éviter de revenir ici et d'encore embêter je n'y arrive pas, je ne sais pas comment il faut faire, n'aurais tu pas un tutoriel ou autre ?

    Merci pour ta patience 🙂


  • Rédacteurs

    envoie ton code je vais te l'arranger



  • @'Phenix246':

    envoie ton code je vais te l'arranger

        public static Item itemObsidian;
    
    @EventHandler
    
        public void preInit(FMLPreInitializationEvent event)
        {
    
            //Obsidian ITEMS
            itemObsidian = new itemObsidianMetadata().setUnlocalizedName("itemobsidian");
            GameRegistry.registerItem(itemObsidian, "itemObsidian", "ObsidianPlus");
    

    Ici j'ai essayer d'utiliser le code de la 1.6 ..

    Ensuite ma classe :

    
    package com.google.bidibusteam.obsidianplus.common;
    
    import javax.swing.Icon;
    
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    public class itemObsidianMetadata extends Item
    {
    
        public int getMetadata(int metadata)
        {
            return metadata;
        }
    
        public String getUnlocalizedName(ItemStack stack)
        {
            int metadata = stack.getItemDamage();
            if(metadata > type.length || metadata < 0)
            {
                metadata = 0;
            }
            return super.getUnlocalizedName() + "." + type[metadata];
        }
    
        private String[] type = new String[]{"item1", "item2", "item3", "item4"};
        private Icon[] IconArray;
        public itemObsidianMetadata(int id)
        {
            super();
            this.setCreativeTab(CreativeTabs.tabMaterials);
            this.setHasSubtypes(true);
        }
    
        public void registerIcons(IconRegister iconregister)
        {
            IconArray = new Icon[type.length];
            for(int i = 0; i < type.length; i++)
            {
                IconArray* = iconregister.registerIcon("modtutoriel:" + type*);
            }
        }
    
        @SideOnly(Side.CLIENT)
        public void getSubItems(int id, CreativeTabs creativeTabs, List list)
        {
            for(int metadata = 0; metadata < type.length; metadata++)
            {
                list.add(new ItemStack(id, 1, metadata));
            }
        }
    
        @SideOnly(Side.CLIENT)
        public Icon getIconFromDamage(int metadata)
        {
            return metadata < type.length && metadata >= 0 ? IconArray[metadata] : IconArray[0];
        }
    
    }
    
    

    Ici pareil, un peu de 1.6 mais plein d’erreur car le code et faux en lui même je pense et non finis ..


  • Rédacteurs

    package com.google.bidibusteam.obsidianplus.common;
    
    import net.minecraft.util.IIcon;
    
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    public class itemObsidianMetadata extends Item
    {
       private String[] type = new String[]{"item1", "item2", "item3", "item4"};
       private IIcon[] iconArray;
    
       public itemObsidianMetadata()
       {
           super();
           this.setCreativeTab(CreativeTabs.tabMaterials);
           this.setHasSubtypes(true);
       }
    
       public int getMetadata(int metadata)
       {
           return metadata;
       }
    
       public String getUnlocalizedName(ItemStack stack)
       {
           int metadata = stack.getItemDamage();
           if(metadata > type.length || metadata < 0)
           {
               metadata = 0;
           }
           return super.getUnlocalizedName() + "." + type[metadata];
       }
    
       public void registerIcons(IIconRegister iconregister)
       {
           iconArray = new Icon[type.length];
           for(int i = 0; i < type.length; i++)
           {
               iconArray* = iconregister.registerIcon("modtutoriel:" + type*);
           }
       }
    
    @SideOnly(Side.CLIENT)
    public void getSubItems(Item Item, CreativeTabs creativeTabs, List list)
    {
    for(int metadata = 0; metadata < type.length; metadata++)
    list.add(new ItemStack(Item, 1, metadata));
    }
    
       @SideOnly(Side.CLIENT)
       public IIcon getIconFromDamage(int metadata)
       {
           return metadata < type.length && metadata >= 0 ? iconArray[metadata] : iconArray[0];
       }
    }
    

    Normalement là c'est bon ,oublie pas par contre d'utiliser la balise [java], ça rend le code plus facile à lire



  • @'Phenix246':

    package com.google.bidibusteam.obsidianplus.common;
    
    import javax.swing.Icon;
    
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    public class itemObsidianMetadata extends Item
    {
       private String[] type = new String[]{"item1", "item2", "item3", "item4"};
       private Icon[] iconArray;
    
       public itemObsidianMetadata()
       {
           super();
           this.setCreativeTab(CreativeTabs.tabMaterials);
           this.setHasSubtypes(true);
       }
    
       public int getMetadata(int metadata)
       {
           return metadata;
       }
    
       public String getUnlocalizedName(ItemStack stack)
       {
           int metadata = stack.getItemDamage();
           if(metadata > type.length || metadata < 0)
           {
               metadata = 0;
           }
           return super.getUnlocalizedName() + "." + type[metadata];
       }
    
       public void registerIcons(IconRegister iconregister)
       {
           iconArray = new Icon[type.length];
           for(int i = 0; i < type.length; i++)
           {
               iconArray* = iconregister.registerIcon("modtutoriel:" + type*);
           }
       }
    
    @SideOnly(Side.CLIENT)
    public void getSubItems(Item Item, CreativeTabs creativeTabs, List list)
    {
    for(int metadata = 0; metadata < type.length; metadata++)
    list.add(new ItemStack(Item, 1, metadata));
    }
    
       @SideOnly(Side.CLIENT)
       public Icon getIconFromDamage(int metadata)
       {
           return metadata < type.length && metadata >= 0 ? iconArray[metadata] : iconArray[0];
       }
    }
    

    Normalement là c'est bon ,oublie pas par contre d'utiliser la balise

    , ça rend le code plus facile à lire
    
    
    Oui oui pas de problème !
    Un grand merci à toi !
    Au niveau de ma classe principale par contre j'utilise quel code ?
    
    

  • Rédacteurs

    normalement le tien est bon



  • @'Phenix246':

    normalement le tien est bon

    Par contre j'ai quelques erreurs ici :

        @SideOnly(Side.CLIENT)
    
        public Icon getIconFromDamage(int metadata)
        {
            return metadata < type.length && metadata >= 0 ? iconArray[metadata] : iconArray[0];
        }
    

    Au Icon et ici aussi :

        public void registerIcons(IconRegister iconregister)
    
        {
            iconArray = new Icon[type.length];
            for(int i = 0; i < type.length; i++)
            {
                iconArray* = iconregister.registerIcon("modtutoriel:" + type*);
            }
        }
    

    Au niveau du IconRegister, peut être que le code à changer en 1.7 ?


  • Rédacteurs

    en 1.7 Icon devient IIcon



  • @'Phenix246':

    en 1.7 Icon devient IIcon

    Oui mais du coup ici en changeant Icon par IIcon tout le code devient faux 😞 :

    ​iconArray* = iconregister.registerIcon("obsidianplus:" + type*);
    

    Idem en bas :

    ​ return metadata < type.length && metadata >= 0 ? iconArray[metadata] : iconArray[0];
    

  • Administrateurs

    Il faut remplacer seulement les références  à l'objet Icon, pas tout ce qui contient Icon …
    Tu devrais apprendre le java, ça va t'aider à comprendre ce que tu fais.



  • @'robin4002':

    Il faut remplacer seulement les références  à l'objet Icon, pas tout ce qui contient Icon …
    Tu devrais apprendre le java, ça va t'aider à comprendre ce que tu fais.

    Okay, merci 😉
    Yeap c'est ce que je comptais faire 🙂