• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Créer une classe générique pour les items

    Archives
    1.7.10
    3
    5
    2125
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • S
      Shadt dernière édition par

      Bonjour à tous, dans ce petit message, je vais vous apprendre à gérer les objets en quelques lignes seulement ! (fonctionne principalement pour les items de base).

      Le but de ce petit tuto est tout simplement de ne pas avoir à s’emm…bêter avec les différentes déclarations de base des textures, des tabs, de un peu tout en fait. On aura juste à fournir un petit “this.setUnlocalizedName(“nomItem”)”. L’intérêt est tout simplement que si votre mod est un mod par exemple basé sur les armures ou sur les items d’une manière générale (ou sur les mobs), on aura juste à fournir un nom et l’item sera prêt avec son appel de Textures, son appel de Tab etc.
      Sans plus attendre, lançons nous dans le code !

      Alors pour commencer, créons tout simplement une classe que l’on appellera “TutorielItem”

      ​[size=smallpackage ]fr.shadcanard.tutoriel.item%(#cc7832)[;
      ]
      import net.minecraft.item.Item%(#cc7832)[;
      ]
      public class TutorielItem extends Item
      {
      public TutorielItem()
      {
      super()%(#cc7832)[;
      ] }
      }
      
      

      Cette classe va être reliée directement à Item, c’est normal, ne vous en faites pas. En fait on va créer une classe-fille nommée “TutorielItem” à notre classe-mère “Item”. Vu que c’est une classe “fille” (puisqu’elle étend la classe Item) elle va obtenir toutes les différentes fonctions de Item. Et c’est là qu’on intervient !

      à la fin de ce super et de son crochet ( } ) on va placer quelques méthodes :

      ​[size=small @Override
      ] public String getUnlocalizedName()
      {
      return String.*format*("item.%s%s", Tutoriel.*MOD_ID*.toLowerCase() + ":", getUnwrappedUnlocalizedName(super.getUnlocalizedName()))%(#cc7832)[;
      ] }
      %(#bbb529)[@Override
      ] public String getUnlocalizedName(ItemStack itemStack)
      {
      return String.*format*("item.%s%s", Tutoriel.*MOD_ID*.toLowerCase() + ":", getUnwrappedUnlocalizedName(super.getUnlocalizedName()))%(#cc7832)[;
      ] }
      %(#bbb529)[@Override
      ] @SideOnly(Side.*CLIENT*)
      public void registerIcons(IIconRegister iconRegister)
      {
      itemIcon = iconRegister.registerIcon(this.getUnlocalizedName().substring(this.getUnlocalizedName().indexOf(".") + 1))%(#cc7832)[;
      ] }
      protected String getUnwrappedUnlocalizedName(String unlocalizedName)
      {
      return unlocalizedName.substring(unlocalizedName.indexOf(".") + 1)%(#cc7832)[;
      ] }
      }
      

      à quoi vont nous servir ces méthodes ? C’est assez simple :
      Les deux premières vont nous permettre de nommer notre item de façon plus “personnelle”. En fait, quand on crée un item, son nom unlocalized va être “item.nom_de_l’item.name”. Ce qu’on fait avec ces deux méthodes, c’est qu’en gros, on va lui dire d’écraser la méthode toute moche de Minecraft et mettre la notre, qui sera qu’un item sera nommé “item.tutoriel:nomItem.name”
      L’avantage de direz-vous ? Eh bien déjà, on voit le nom du mod automatiquement quand on regarde le nom non-localisé. L’autre avantage, c’est que dans notre classe d’item, on aura juste à rentrer un setUnlocalizedName(“itemTutoriel”); pour que l’item se nomme “item.tutoriel:itemTutoriel.name”.

      Le second avantage vient avec la troisième méthode, “registerIcons”. Que fait cette méthode ? En gros, elle va nous permettre (sans rentrer dans de l’explication longue et hasardeuse) de déclarer l’emplacement de notre texture selon le nom localisé de l’objet. Autrement dit, si vous avez déclaré dans votre classe d’item que son nom c’est “itemTutoriel”, alors automatiquement, la texture de l’item sera “itemTutoriel.png”.

      La dernière méthode est utilisée pour créer la première, je vous avouerai que j’y comprend pas grand chose, mais au moins ça a le mérite de fonctionner tout seul !

      Regardons maintenant dans notre classe “itemTutoriel”.

      ​[size=smallpackage ]fr.shadcanard.tutoriel.item%(#cc7832)[;
      ]
      import fr.shadcanard.tutoriel.item.TutorielItem%(#cc7832)[;
      ]
      public class ItemBattleAxe extends TutorielItem {
      public ItemQuelconque()
      {
      super()%(#cc7832)[;
      ] this.setUnlocalizedName("itemQuelconque")%(#cc7832)[;
      ] }
      }
      
      

      Voilà ce qui doit être dans notre classe. En gros, au lieu d’étendre les fonctions de Item avec tout les trucs, on les remplit déjà dans un truc commun et on fait un extends de cette classe-fille afin “d’importer” nos modifications.
      De la même façon en faisant notre item dans la classe principale, on pourrait simplement avoir à mettre par exemple

      ​public static TutorielItem itemQuelconque;
      
      itemQuelconque = new Itemquelconque().setUnlocalizedName("itemQuelconque");
      

      Et c’est tout. Un coup de registerItem derrière et votre item est tout prêt à être lancé dans le monde, avec sa petite texture auto-déclarée et étant dans " textures/items/itemQuelconque " !

      Un avantage, c’est que par exemple, si on veut tout enregistrer d’un coup et automatiquement dans un onglet créatif, il suffit d’entrer cette ligne en dessous du super(); de notre classe TutorielItem :

      ​this.setCreativeTab(CreativeTab.misc);
      

      ou bien de renvoyer comme vous le feriez à votre Tab créatif avant. Du coup, à chaque fois qu’un item sera créé, il sera ajouté automatiquement à la tab créative, du moment que vous faites un extends sur “TutorielItem” et pas sur “Item”.

      Pour ce qui est des blocs, il suffit théoriquement de remplacer “extends Item” dans notre classe “TutorielItem” par un “extends Block” (Et par là même pouvoir dire de quel matériel est fait le bloc aussi, de façon automatique, si vous voulez que tout vos blocs aient le même son en marchant dessus)

      Voilà, si il y a d’autres questions, n’hésitez pas, j’essaierai de vous aider du mieux que je peux !
      ShadCanard

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        Coucou shadt ^^
        C’est gentil du partage, mais en fait ton tutoriel est un peu inutile x)
        En fait il suffit de faire un .setTextureName(“modid:texture”).setUnlocalizedName(“nom”) et on peut utiliser la même classe pour tous les items ^^

        1 réponse Dernière réponse Répondre Citer 0
        • sosoh
          sosoh dernière édition par

          Très bon tuto ! Pratique pour faire des item de base !

          Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

          1 réponse Dernière réponse Répondre Citer 0
          • S
            Shadt dernière édition par

            Bah c’est surtout que c’est une méthode de fainéant pour éviter de taper 50 fois ton .setTextureName(“modid:texture”) et ton .setCreativeTab() (et tout ce que tu peux rentrer comme paramètres qui sont communs à tout tes items/blocs ou presque)

            1 réponse Dernière réponse Répondre Citer 0
            • sosoh
              sosoh dernière édition par

              Beh pour faire des items sans utilités comme ceux que j’ai créé par nécessité c’est utile ,.

              Developpeur d'Hogsmod, un mod implémentant le Monde d'Harry Potter dans Minecraft!

              1 réponse Dernière réponse Répondre Citer 0
              • 1 / 1
              • Premier message
                Dernier message
              Design by Woryk
              Contact / Mentions Légales

              MINECRAFT FORGE FRANCE © 2018

              Powered by NodeBB