Ajouter un onglet au menu créatif


  • Rédacteurs

    Bienvenue sur ce tutoriel à la fin duquel vous saurez tout sur les onglets créatif ou "item group".
    Un onglet créatif, qu'est ce que c'est ?
    La réponse est très simple il s'agit d'une interface disponible en créatif servant à répertorier vos blocs (blocks) et vos objets (items).

    Pour faire simple un onglet créatif c'est ça :

    tab_base.png

    Sommaire

    Pré-requis

    Code

    La Classe principale:

    Pour commencer, vous allez déclarer votre table créative comme ceci :

    public static final ItemGroup MFF_GROUP = new ItemGroup("mff") {
        @OnlyIn(Dist.CLIENT)
        @Override
        public ItemStack createIcon() {
            return new ItemStack(ModTutorialBlocks.BLOCK_TUTORIAL);
        }
    };
    

    Voilà votre table créative est créée mais il n'y a aucun bloc ni item de votre mod.

    Note

    On peut également créer une classe dédiée au groupe d'item pour y mettre ce code. C'est même recommandé si vous prévoyez d'avoir plusieurs groupes d'item dans votre mod.

    Les blocs et les items :

    Pour chacun de vos blocs et items, vous aller devoir appeler la méthode group() afin de définir le groupe d'items dans lequel vous voulez ranger celui-ci lors de l'enregistrement de l'item :

    event.getRegistry().register(new ItemBlock(BLOCK_TUTORIAL, new Item.Properties().group(ModTutorial.MFF_GROUP)).setRegistryName(BLOCK_TUTORIAL.getRegistryName()));
    

    Les Ressources

    Dans le fichier en_us.json, rajoutez ceci :

    {
        "itemGroup.mff": "Minecraft Forge France"
    }
    

    et dans le fichier fr_fr.json, rajoutez ceci :

    {
        "itemGroup.mff": "Minecraft Forge France"
    }
    

    Bonus

    Pour ce tutoriel je vais vous proposer trois bonus, le premier vous montrera comment avoir une texture custom sur votre onglet créatif, le second comment avoir vos blocs ou vos items dans l'ordre que vous le souhaitez et enfin le dernier vous montera comment avoir une barre de recherche sur votre onglet.

    Texture custom :

    Pour avoir une texture custom sur votre onglet, il vous suffira de mettre ce code dans la déclaration :

    public static final ItemGroup MFF_GROUP = new ItemGroup("mff") {
    ...
    }.setBackgroundImageName("votre_nom_de_texture.png");
    

    Attention

    La texture devra se trouver dans ce dossier : assets/minecraft/textures/gui/container/creative_inventory/ et le nom doit obligatoirement commencer par tab_.
    La texture s'appellera finalement : tab_ + votre_nom_de_texture.png

    Si pour une raison ou une autre vous souhaitez faire disparaître le titre de l'onglet, ajoutez setNoTitle à la déclaration :

    public static final ItemGroup MFF_GROUP = new ItemGroup("mff") {
    ....
    }.setNoTitle();
    

    L'avantage est que vous pouvez rendre plus immersif votre mod en proposant une texture dans l'ambiance de votre mod, l’inconvénient est que si le joueur utilise un texture pack qui modifie les textures des onglets créatifs, il y aura une coupure pas très esthétique.

    public static final ItemGroup MFF_GROUP = new ItemGroup("mff") {
    ...
    }.setNoTitle().setBackgroundImageName("votre_nom_de_texture.png");
    

    Une barre de recherche :

    Pour avoir une barre de recherche il vous suffit d'utiliser cette méthode :

    @Override
    public boolean hasSearchBar() {
        return true;
    }
    

    Et voilà, c'est aussi simple que ça, faites néanmoins attention à la longueur du nom de votre onglet qui ne doit pas être trop long.

    Attention

    il faudra manuellement définir la texture de l'onglet afin de voir correctement apparaitre la barre de recherche : .setBackgroundImageName("item_search.png");

    Modifier dynamiquement la liste des items affichés :

    Il est possible de modifier dynamiquement l'affichage des items dans la liste affichée. Pour ce faire nous allons utiliser la méthode public void fill(NonNullList<ItemStack> items) disponible dans ItemGroup.

    Note

    Cette méthode est responsable de l'affichage des items dans l'onglet. Il est donc possible de complètement modifier la liste des items présent dans l'onglet et d'annuler le comportement par défaut, à savoir aller chercher les items avec le groupe défini comme étant celui de l'onglet.

    Afin de laisser le comportement par défaut de l'onglet nous appellerons toujours la méthode super.fill(items); en premier.

    Je vous propose de rajouter dans votre onglet le debug stick si le joueur est opérateur.
    Dans un premier temps il va nous falloir savoir si notre joueur est justement opérateur, pour ce faire nous allons interroger la CommandSource de celui-ci, et vérifier que le joueur dispose du niveau de permission requis.

    Minecraft.getInstance().player.getCommandSource().hasPermissionLevel(4)
    

    Note

    La CommandSource est un objet qui permet à une entité, que ce soit un joueur, un bloc de commande ou le serveur de lancer une commande. Un opérateur a un niveau de permission valant 4.

    Il ne nous reste plus qu'à ajouter notre item en fonction du résultat de cet appel :

    if(Minecraft.getInstance().player.getCommandSource().hasPermissionLevel(4))
        items.add(0, new ItemStack(Items.DEBUG_STICK));
    

    Noté que j'ai pris la décision d'ajouter le debug stick au début de la liste, ainsi il sera le premier item visible dans notre onglet.

    Vous pouvez également effectuer d'autres actions comme un tri sur la liste des items afin de les afficher par ordre alphabétique de leur nom.

    Les livres enchantés :

    Il est également possible d'ajouter des livres enchantés dans ces groupes, pour ce faire nous allons utiliser la méthode setRelevantEnchantmentTypes :

    public static final ItemGroup MFF_GROUP = new ItemGroup("mff") {
    ...
    }.setRelevantEnchantmentTypes(/*Tableau des types d'enchantement*/);
    

    Pour notre exemple nous allons ajouter tous les types d'enchantements.
    Forte heureusement, l'énumération EnumEnchantmentType nous mets à disposition une fonction bien utiles : values()

    public static final ItemGroup MFF_GROUP = new ItemGroup("mff") {
    ...
    }.setRelevantEnchantmentTypes(EnumEnchantmentType.values());
    

    Résultat

    Onglet de base Onglet avec une barre de recherche Affichge conditionné d'un item
    tab_mff.png tab_bg.png tab_debug.png

    Les différentes modifications du code sont retrouvables sur le commit Github suivant : https://github.com/MinecraftForgeFrance/mod-tutorial-1.13.2/commit/bca94599990fdc6be2c702f7ecf84a7fdf1615dc

    Licence et attribution

    Creative Commons

    Ce tutoriel rédigé par @phenix246, corrigé par @robin4002 et publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

    retour Sommaire des tutoriels


Log in to reply