Créer un onglet créatif
-
Sommaire
Introduction
Bienvenue sur ce tutoriel à la fin duquel vous saurez tout sur les onglets créatif ou “creative tabs”.
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 :
Pré-requis
Code
La Classe principale:
Pour commencer, vous allez déclarer votre table créative comme ceci :
public static CreativeTabs tutorialCreativeTabs = new TutorialCreativeTabs("tutorial_creative_tabs");
Ensuite vous avez deux possibilités, la première créer une classe extends “CreativeTabs” et la deuxième consiste à mettre le code à la suite de la déclaration, je vais vous proposer les deux méthodes.
La Classe de l’onglet :
Nous allons voir la première méthode : créez (si ce n’est pas déjà fait) une classe “TutorialCreativeTabs” extends “CreativeTabs”.
Vous devriez obtenir ceci :package tutoriel.common; import net.minecraft.creativetab.CreativeTabs; public class TutorialCreativeTabs extends CreativeTabs { public TutorialCreativeTabs(String label) { super(label); } }
Rajoutez ceci :
@Override public Item getTabIconItem() { return Item.getItemFromBlock(ModTutoriel.BlockTutorial); }
N’oubliez pas d’importer ce qui manque
Remplacez ModTutoriel par votre classe principale et BlockTutorial par la classe du bloc ou de l’item que vous voulez.
Si vous souhaitez pouvoir avoir un damage value sur votre item il faudra ajouter cette méthode :@SideOnly(Side.CLIENT) public int func_151243_f() { return 0; // mettez ici votre metadata }
Nous allons voir maintenant la seconde méthode pour créer votre creative tab, reprenons le code vu plus haut :
public static CreativeTabs tutorialCreativeTabs = new TutorialCreativeTabs("tutorial_creative_tabs");
modifiez le code afin qu’il ressemble à ceci :
public static CreativeTabs tutorialCreativeTabs = new CreativeTabs("tutorial_creative_tabs") { };
Ajoutez maintenant les méthodes vues précédemment afin d’avoir votre icône. Vous devriez obtenir ceci :
public static CreativeTabs tutorialCreativeTabs = new CreativeTabs("tutorial_creative_tabs") { @Override public Item getTabIconItem() { return Item.getItemFromBlock(ModTutoriel.BlockTutorial); } @SideOnly(Side.CLIENT) public int func_151243_f() { return 0; // mettez ici votre metadata } };
Personnellement je préfère utiliser la deuxième méthode car elle évite d’avoir quinze classes juste pour les creative tabs.
Voilà votre table créative est créée mais il n’y a aucun bloc ni item de votre mod.Les blocs et les items :
Pour chacun de vos blocs et items, vous devez rajouter dans le constructeur de la classe :
this.setCreativeTab(ModTutorie.tutorielCreativeTab);
Les Ressources
Dans le fichier en_US.lang, rajoutez ceci:
#CreativeTabs itemGroup.tutorial_creative_tabs=Tutorial Creative Tab
et dans le fichier fr_FR.lang, rajoutez ceci :
#CreativeTabs itemGroup.tutorial_creative_tabs=Tutoriel Table Créatif
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 le constructeur :
this.setBackgroundImageName("votre_nom_de_texture.png");
/!\ 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 au final : «tab_» + «votre_nom_de_texture.png»
Si pour une raison ou une autre vous souhaitez faire disparaître le titre de l’onglet, utilisez ce code :
this.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.
Si vous utilisez la seconde méthode :
Il faut mettre le code avant le dernier “;” :
public static CreativeTabs tutorialCreativeTabs = new CreativeTabs("tutorial_creative_tabs") { }.setNoTitle();
par exemple, ou
public static CreativeTabs tutorialCreativeTabs = new CreativeTabs("tutorial_creative_tabs") { }.setBackgroundImageName("votre_nom_de_texture.png");
L’ordre des blocs et items :
Nous allons utiliser cette méthode afin de définir l’ordre d’affichage des items :
@Override public void displayAllReleventItems(List list) { }
Je vais pour cela utiliser deux méthodes qui vont rendre plus facile l’ajout des items :
private void addItem(Item item) { item.getSubItems(item, this, list); } private void addBlock(Block block) { block.getSubBlocks(Item.getItemFromBlock(block), this, list); }
Ces deux méthodes appellent juste la méthode “getSubItems” pour les items et “getSubBlocks” pour les blocs, méthodes que vous utilisez pour savoir quel “metadata” ou “damage value” allait être présent dans la table.
Il vous suffit ensuite d’ajouter une variable “list” accessible dans toute la classe comme ceci afin d’utiliser les méthodes :
List list;
et de la lier avec le paramètre “list” de la méthode :
this.list = list;
Il ne vous reste plus qu’à appeler les méthodes dans l’ordre où vous voulez vos items, par exemple :
@Override public void displayAllReleventItems(List list) { this.list = list; addBlock(Blocks.stone); addItem(Items.apple); addBlock(Blocks.wool); }
L’inconvénient de cette méthode est qu’il faut ajouter manuellement tout les items que vous voulez mettre.
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.
Résultat
Crédits
Rédaction :
Correction :
Ce tutoriel de 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 -
Bon tutoriel
J’aime bien les bonus je savais même pas qu’on pouvais faire cela ^^ -
vous avez oublier une chose dans les crédits.
-
Voilà ce que l’on obtient quand on fouille dans certaine classe de Minecraft, des trucs vraiment sympa
-
Effectivement c’est intéressant comme fonction
-
Bonjour,
Malheureusement j’ai 2 problemes avec ma creative tab:- La texture de l’onglet ne s’affiche pas
- J’ai tous les livres d’enchantement qui y sont classés
Ma classe main:
package com.gmail.archerux.technicalenergy.common; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Items; import net.minecraft.item.Item; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.GameRegistry; @Mod(modid = TechnicalEnergy.MODID, name = "TechnicalEnergy", version = "1.0.0") public class TechnicalEnergy { public static final String MODID = "TechnicalEnergy"; @Instance(MODID) public static TechnicalEnergy instance; @SidedProxy(clientSide = "com.gmail.archerux.technicalenergy.client.ClientProxy", serverSide = "com.gmail.archerux.technicalenergy.common.CommonProxy") public static CommonProxy proxy; public static CreativeTabs TechnicalEnergyCreativeTabs = new TechnicalEnergyCreativeTabs("TechnicalEnergy"); @EventHandler public void preInit(FMLPreInitializationEvent event) { } @EventHandler public void init(FMLInitializationEvent event) { proxy.registerRender(); } @EventHandler public void postInit(FMLPostInitializationEvent event) { } }
Ma classe creative tabs:
package com.gmail.archerux.technicalenergy.common; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; import net.minecraft.item.Item; public class TechnicalEnergyCreativeTabs extends CreativeTabs { public TechnicalEnergyCreativeTabs(String label) { super(label); this.setNoTitle(); this.setBackgroundImageName("TechnicalEnergy_CreativeTabs.png"); } @Override public boolean hasSearchBar() { return true; } @Override public Item getTabIconItem() { return Item.getItemFromBlock(Blocks.bedrock); } }
ma texture est dans :
assets.TechnicalEnergy.textures.gui.container.creative_inventory
Ps: Les textures de mes blocs/items ne s’affichent pas donc je demande si le problème vient de là
En espérant ne pas trop vous embêter avec mes problèmes,
Cordialement -
la texture doit s’appelé : «tab_TechnicalEnergy_CreativeTabs»
J’ai oublié ce petit détail dans le tuto je le rajoute de ce pas
Pour les livre il suffit de regarder dans la classe CreativeTabs, il y a une méthode pour tous les obtenir je crois
-
Bonsoir,
Pour la texture le problème persiste toujours* Mais pour les livres ils s’enlèvent si j’enlève sa @Override public boolean hasSearchBar() { return true; }
Sauf que je voudrai la barre de recherche.
(je sais pas si on c’est mal compris mais je NE veut PAS les livres) -
pour la texture envoie le retour de la console et pour les livres essaie de mettre un item dans ta table car je n’ai pas ce problème chez moi
-
la console dit sa:
[15:49:50] [main/INFO] [GradleStart]: username: Archerux [15:49:50] [main/INFO] [GradleStart]: Extra: [] [15:49:50] [main/INFO] [GradleStart]: Running with arguments: [–userProperties, {}, --assetsDir, C:/Users/Dylan/.gradle/caches/minecraft/assets, --assetIndex, 1.7.10, --accessToken, {REDACTED}, --version, 1.7.10, --tweakClass, cpw.mods.fml.common.launcher.FMLTweaker, --username, Archerux] [15:49:50] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker [15:49:50] [main/INFO] [LaunchWrapper]: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker [15:49:50] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker [15:49:50] [main/INFO] [FML]: Forge Mod Loader version 7.10.18.1180 for Minecraft 1.7.10 loading [15:49:50] [main/INFO] [FML]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_05, running on Windows 7:amd64:6.1, installed at C:\Program Files\Java\jre8 [15:49:50] [main/INFO] [FML]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation [15:49:50] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [15:49:50] [main/INFO] [LaunchWrapper]: Loading tweak class name cpw.mods.fml.common.launcher.FMLDeobfTweaker [15:49:50] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [15:49:50] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker [15:49:50] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [15:49:51] [main/ERROR] [FML]: The binary patch set is missing. Either you are in a development environment, or things are not going to work! [15:49:56] [main/ERROR] [FML]: The minecraft jar file:/C:/Users/Dylan/.gradle/caches/minecraft/net/minecraftforge/forge/1.7.10-10.13.0.1180/forgeSrc-1.7.10-10.13.0.1180.jar!/net/minecraft/client/ClientBrandRetriever.class appears to be corrupt! There has been CRITICAL TAMPERING WITH MINECRAFT, it is highly unlikely minecraft will work! STOP NOW, get a clean copy and try again! [15:49:56] [main/ERROR] [FML]: FML has been ordered to ignore the invalid or missing minecraft certificate. This is very likely to cause a problem! [15:49:56] [main/ERROR] [FML]: Technical information: ClientBrandRetriever was at jar:file:/C:/Users/Dylan/.gradle/caches/minecraft/net/minecraftforge/forge/1.7.10-10.13.0.1180/forgeSrc-1.7.10-10.13.0.1180.jar!/net/minecraft/client/ClientBrandRetriever.class, there were 0 certificates for it [15:49:56] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing [15:49:56] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper [15:49:56] [main/INFO] [LaunchWrapper]: Calling tweak class cpw.mods.fml.common.launcher.FMLDeobfTweaker [15:49:57] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main} [15:49:59] [main/INFO]: Setting user: Archerux [15:50:02] [Client thread/INFO]: LWJGL Version: 2.9.1 [15:50:04] [Client thread/INFO] [MinecraftForge]: Attempting early MinecraftForge initialization [15:50:04] [Client thread/INFO] [FML]: MinecraftForge v10.13.0.1180 Initialized [15:50:04] [Client thread/INFO] [FML]: Replaced 182 ore recipies [15:50:04] [Client thread/INFO] [MinecraftForge]: Completed early MinecraftForge initialization [15:50:04] [Client thread/INFO] [FML]: Searching C:\Users\Dylan\Downloads\Minecraft\Modding\forge-1.7.10-10.13.0.1180-src\eclipse\mods for mods [15:50:06] [Client thread/ERROR] [FML]: FML has detected a mod that is using a package name based on 'net.minecraft.src' : net.minecraft.src.FMLRenderAccessLibrary. This is generally a severe programming error. There should be no mod code in the minecraft namespace. MOVE YOUR MOD! If you're in eclipse, select your source code and 'refactor' it into a new package. Go on. DO IT NOW! [15:50:10] [Client thread/INFO] [FML]: Forge Mod Loader has identified 4 mods to load [15:50:11] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Technical Energy, Ressource pack Archerux.zip [15:50:11] [Client thread/INFO] [FML]: Processing ObjectHolder annotations [15:50:11] [Client thread/INFO] [FML]: Found 341 ObjectHolder annotations [15:50:11] [Client thread/INFO] [FML]: Configured a dormant chunk cache size of 0 [15:50:11] [Client thread/INFO] [FML]: Applying holder lookups [15:50:11] [Client thread/INFO] [FML]: Holder lookups applied Starting up SoundSystem… Initializing LWJGL OpenAL (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) OpenAL initialized. [15:50:12] [Sound Library Loader/INFO]: Sound engine started [15:50:18] [Client thread/INFO]: Created: 1024x512 textures/blocks-atlas [15:50:18] [Client thread/INFO]: Created: 512x512 textures/items-atlas méthode côté client [15:50:19] [Client thread/INFO] [FML]: Forge Mod Loader has successfully loaded 4 mods [15:50:19] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Technical Energy, Ressource pack Archerux.zip [15:50:20] [Client thread/INFO]: Created: 1024x512 textures/blocks-atlas [15:50:20] [Client thread/INFO]: Created: 512x512 textures/items-atlas SoundSystem shutting down… Author: Paul Lamb, www.paulscode.com Starting up SoundSystem... Initializing LWJGL OpenAL (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org) OpenAL initialized. [15:50:21] [Sound Library Loader/INFO]: Sound engine started [15:50:28] [Server thread/INFO]: Starting integrated minecraft server version 1.7.10 [15:50:28] [Server thread/INFO]: Generating keypair [15:50:29] [Server thread/INFO] [FML]: Injecting existing block and item data into this server instance [15:50:29] [Server thread/INFO] [FML]: Applying holder lookups [15:50:29] [Server thread/INFO] [FML]: Holder lookups applied [15:50:29] [Server thread/INFO] [FML]: Loading dimension 0 (New World) (net.minecraft.server.integrated.IntegratedServer@78484549) [15:50:29] [Server thread/INFO] [FML]: Loading dimension 1 (New World) (net.minecraft.server.integrated.IntegratedServer@78484549) [15:50:29] [Server thread/INFO] [FML]: Loading dimension -1 (New World) (net.minecraft.server.integrated.IntegratedServer@78484549) [15:50:29] [Server thread/INFO]: Preparing start region for level 0 [15:50:30] [Server thread/INFO]: Preparing spawn area: 20% [15:50:31] [Server thread/INFO]: Preparing spawn area: 87% [15:50:32] [Server thread/INFO]: Changing view distance to 12, from 10 [15:50:33] [Netty Client IO #0/INFO] [FML]: Server protocol version 1 [15:50:33] [Netty IO #1/INFO] [FML]: Client protocol version 1 [15:50:33] [Netty IO #1/INFO] [FML]: Client attempting to join with 4 mods : FML@7.10.18.1180,Forge@10.13.0.1180,mcp@9.05,technicalenergy@1.0.0 [15:50:33] [Netty IO #1/INFO] [FML]: Attempting connection with missing mods [] at CLIENT [15:50:33] [Netty Client IO #0/INFO] [FML]: Attempting connection with missing mods [] at SERVER [15:50:33] [Server thread/INFO] [FML]: [Server thread] Server side modded connection established [15:50:33] [Client thread/INFO] [FML]: [Client thread] Client side modded connection established [15:50:33] [Server thread/INFO]: Archerux[local:E:5c225814] logged in with entity id 188 at (328.69953495118534, 68.0, 491.356836082073) [15:50:33] [Server thread/INFO]: Archerux joined the game [15:50:35] [Server thread/WARN]: Can't keep up! Did the system time change, or is the server overloaded? Running 2539ms behind, skipping 50 tick(s) [15:50:39 [Client thread/WARN]: Failed to load texture: minecraft:textures/gui/container/creative_inventory/tab_TechnicalEnergy_CreativeTabs java.io.FileNotFoundException: minecraft:textures/gui/container/creative_inventory/tab_TechnicalEnergy_CreativeTabs] at net.minecraft.client.resources.FallbackResourceManager.getResource(FallbackResourceManager.java:65) ~[FallbackResourceManager.class:?] at net.minecraft.client.resources.SimpleReloadableResourceManager.getResource(SimpleReloadableResourceManager.java:67) ~[SimpleReloadableResourceManager.class:?] at net.minecraft.client.renderer.texture.SimpleTexture.loadTexture(SimpleTexture.java:35) ~[SimpleTexture.class:?] at net.minecraft.client.renderer.texture.TextureManager.loadTexture(TextureManager.java:89) [TextureManager.class:?] at net.minecraft.client.renderer.texture.TextureManager.bindTexture(TextureManager.java:45) [TextureManager.class:?] at net.minecraft.client.gui.inventory.GuiContainerCreative.drawGuiContainerBackgroundLayer(GuiContainerCreative.java:810) [GuiContainerCreative.class:?] at net.minecraft.client.gui.inventory.GuiContainer.drawScreen(GuiContainer.java:93) [GuiContainer.class:?] at net.minecraft.client.renderer.InventoryEffectRenderer.drawScreen(InventoryEffectRenderer.java:44) [InventoryEffectRenderer.class:?] at net.minecraft.client.gui.inventory.GuiContainerCreative.drawScreen(GuiContainerCreative.java:670) [GuiContainerCreative.class:?] at net.minecraft.client.renderer.EntityRenderer.updateCameraAndRender(EntityRenderer.java:1137) [EntityRenderer.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1056) [Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:951) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:164) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_05] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_05] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_05] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_05] at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_05] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_05] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_05] at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_05] at GradleStart.bounce(GradleStart.java:107) [start/:?] at GradleStart.startClient(GradleStart.java:100) [start/:?] at GradleStart.main(GradleStart.java:65) [start/:?]
Le block/item s’ajoute à la CrativeTab normal avec les livres qui ne bougent toujours pas
-
tu essaie de load la texture depuis les ressource de minecraft, change ton getTexture.
Failed to load texture: minecraft:textures/gui/container/creative_inventory/tab_TechnicalEnergy_CreativeTabs
-
J’ai pas de getTexture mais sa marcherait si je met (“TechnicalEnergy:tab_TechnicalEnergy_CreativeTabs”)?
-
technicalenergy plutôt. Il faut toujours mettre en minuscule.
Sinon mets dans le dossier
assets/minecraft/textures/gui/container/creative_inventory/tab_TechnicalEnergy_CreativeTabs.png -
Il ne trouve pas ta texture : minecraft:textures/gui/container/creative_inventory/tab_TechnicalEnergy_CreativeTabs
es-tu sûr de l’avoir mis au bon endroit ?
-
Le dossier :
minecraft:textures/gui/container/creative_inventory/tab_TechnicalEnergy_CreativeTabs
Doit se trouver ou?- dans le dossier assets : ça marche pas
- Dans le dossier …/creative inventory de mon ressource pack : ça marche pas
et pour les livres vous pourriez montrer le code entier de la class CreativeTabs voir ce qui joue pas?probleme avec le mauvais import?
Je me demande si c’est pas beuggé
-
c’est le dossier de test ressources, la base est la même que pour tes textures :assets/modid/…
-
C’est bon merci la texture marche.
Mais vous avez une idée pour les livres? -
Comment mettre une texture pour l’onglet Creative Tabs ?
-
C’est normal que chez moi aucun onglet créatif supplémentaire ne se crée?
public static CreativeTabs BetterCoalFactoryTab = new CreativeTabs("Better_Coal_Factory") { @Override public Item getTabIconItem() { return Item.getItemFromBlock(BetterCoalFactory.SuperCoalOre); } @SideOnly(Side.CLIENT) public int func_151243_f() { return 0; } };
-
Salut,
Non ce n’est pas normal.
Tu peux envoyer ton code complet ? Tu utilises quelle version de Forge ?