Ajouter un onglet au menu créatif
-
Bienvenue sur ce tutoriel à la fin duquel vous saurez tout sur les onglets créatifs aussi appelés “item groups”.
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 :
Sommaire
Pré-requis
Code
La classe principale:
Pour commencer, vous allez déclarer votre onglet créatif 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 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 montrera 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 partab_
.
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, 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 apparaître 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));
Notez 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.
Fort heureusement, l’énumération EnumEnchantmentType nous met à disposition une fonction bien utile : 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 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
Ce tutoriel rédigé par @phenix246, corrigé par @robin4002 et @DiabolicaTrix 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
-
-
-