Les recettes


  • Rédacteurs

    youtubeCe tutoriel est également disponible en vidéo.

    Sommaire

    Introduction

    Bonjour à tous, dans ce nouveau tutoriel je vais vous apprendre à faire des recettes.
    En effet, dans Minecraft il y a quatre manières d'obtenir un bloc (block) ou un objet (item) :
    La première est de le trouver en jeu, par exemple : trouver dans un coffre, la seconde est de le dropper en tuant une entité (mob), c'est le cas de la nether star, la troisième est de se le donner par une commande ou par l'intermédiaire de l'inventaire créatif. Enfin la dernière façon de l'obtenir est de le « créer ».

    Pré-requis

    Code

    Vous avez plusieurs manières de créer un objet, à l'aide d'une table de craft, d'un four ou d'une enclume.
    Pour les crafts, à l'aide d'une table de craft, il faut différencier deux cas :
    Le cas où les composants de la recette sont à la même position les uns par rapport aux autres (statique), et le cas où juste leur présence dans la matrix de craft compte (dynamique).

    Initialiser des recettes se fait généralement dans la méthode «init(FMLInitializationEvent event)» après l'initialisation des blocs et des objets, sauf si vous avez besoin d'un autre mod pour votre recette alors il faut initialiser les recettes dans la méthode «postInit(FMLPostInitializationEvent event)».

    Les recettes de craft avec un positionnement statique :

        GameRegistry.addRecipe(new ItemStack(blockTutoriel), new Object[]{
        "XXX",
        "ZYZ",
        "XXX",
        'X', Blocks.blockLapis,
        'Y', new ItemStack(Items.dyePowder, 1, 15),
        'Z', new ItemStack(Items.dyePowder, 1, 6)});
    

    On a comme paramètre un ItemStack blockTutoriel, c'est la sortie, et ensuite un tableau d'objet qui sont l'entrée. Il y a 3 String qui se suivent : la ligne du haut, celle du milieu, puis celle du bas. Ensuite on définit chaque caractère.
    Le caractère 'X' correspond au bloc Block.blockLapis, 'Y' correspond à un ItemStack(Item.dyePowder, 1, 15).
    Vous pouvez faire correspondre un caractère à un bloc, item ou à un itemstack.
    Pour utiliser les metadatas vous devez créer un itemstack, comme je l'ai fait pour les colorants : «new ItemStack(item ou bloc, quantité, metadata)».

    Note :
    GameRegistry.addRecipe revient au même que GameRegistry.addShapedRecipe.

    Ce qui nous donne :
    Exemple de recette

    Vous pouvez également ainsi "forcer" le craft d'un bloc dans un coin de la matrix de craft, ce qui donne :

        GameRegistry.addRecipe(new ItemStack(blockTutoriel), new Object[]{"XXX", "XXX", 'X', Block.dirt});
    

    Exemple de recette
    Autre exemple de recette

    Même principe pour les lignes de gauche à droite, vous pouvez faire : "XX", "XX", "YY", ...; le craft fonctionnera soit à droite, soit à gauche de la table de craft.

    Les recettes de craft avec un positionnement dynamique :

        GameRegistry.addShapelessRecipe(new ItemStack(ItemTutorial, 2), new Object[]{ new ItemStack(Item.dyePowder, 1, 15), new ItemStack(Item.dyePowder, 1, 6)});
    

    Vous avez juste à préciser les items, blocs ou les ItemStacks que vous souhaitez avoir dans votre recette, vous n'avez plus besoin de mettre leur position.
    Ainsi dès que les deux colorants sont dans la matrix de craft, le résultat de la recette est disponible dans la sortie, dans le slot du résultat.

    Exemple de recette avec positionnement dynamique
    Exemple de recette avec positionnement dynamique

    Les recettes de cuissons :

    Vous pouvez également créer des recettes via le four, il vous suffit d'utiliser ce code :

        GameRegistry.addSmelting(input, output, experience);
    

    L'input peut être un bloc, un objet ou un ItemStack.
    L'output est obligatoirement un ItemStack de la forme ItemStack(objet, nombre, damage).
    Enfin l'expérience est une variable flottante du type 1.0F ou 5.3F.

    L'OreDictionary :

    • Enregistrer un item dans L'OreDictionary
      Pour rajouter vous propre item à L'OreDictionary il faut juste faire cela :

          OreDictionary.registerOre("ingotIron", ItemTutorial);
      
    • Réaliser un craft en ignorant la durabilité
      Dans certaines situations nous avons besoin de réaliser un craft en ignorant la durabilité de l'objet utilisé. Pour cela l'OreDictionary dispose d'une constante très utile : WILDCARD_VALUE
      Préciser cette valeur à la place du damage de l'itemStack et tous les damages de celui-ci pourront être utilisés.

        GameRegistry.addRecipe(new ItemStack(blockTutoriel), new Object[]{"XXX", "XXX", 'X', new ItemStack(Blocks.wool,1,OreDictionary.WILDCARD_VALUE});
      
    • Craft avec un nom
      L'OreDictionary enregistre certains objets avec un nom dans le but que certaines recettes soient possibles avec d'autres objets enregistrés avec le même nom; ce qui est très pratique lorsque l'on joue avec beaucoup de mods. En effet si un mod rajoute un bloc de stone qui comme la version vanilla drop l'équivalent de la cobblestone et que cette cobblestone est enregistrée avec le même nom que celui de la cobblestone, nous pouvons par exemple fabriquer les outils en pierre à partir de cette pierre.
      Pour utiliser cette fonctionnalité il va nous falloir ajouter un IRecipe un peu particulier :

        GameRegistry.addRecipe(new ShapedOreRecipe(Items.bucket, new Object[]{"F F", 'F', "ingotIron"}));
      

      Exemple de recette via l'ore directionary
      L'objet ShapedOreRecipe se comporte comme une recette normal à positionnement statique, si vous voulez utiliser la version avec le positionnement dynamique prenez l'objet ShapelessOreRecipe.

    Bonus

    Retirer une recette

    Il peut s'avérer utile de retirer la recette d'un objet ou d'un bloc; voici comment il faut s'y prendre :
    nous allons utiliser cette méthode :

        public static void removeRecipe(ItemStack stack)
        {
            List <irecipe>recipes = CraftingManager.getInstance().getRecipeList();
            Iterator <irecipe>iterator = recipes.iterator();
            while(iterator.hasNext())
            {
                ItemStack is = iterator.next().getRecipeOutput();
                if(is != null && is == stack)
                    iterator.remove();
            }
        }
    

    Cette méthode va rechercher dans la liste des recettes si l'une d'entre elles donne pour résultat l'ItemStack que l'on a précisé en paramètre, une fois trouvée on supprime simplement la recette de la liste.

    Vous pouvez modifier la méthode afin d'avoir en argument un bloc ou un objet, vous obtenez ainsi ces méthodes :

        public static void removeRecipe(Item item)
        {
            List <irecipe>recipes = CraftingManager.getInstance().getRecipeList();
            Iterator <irecipe>iterator = recipes.iterator();
            while(iterator.hasNext())
            {
            ItemStack is = iterator.next().getRecipeOutput();
            if(is != null && is.getItem() == item)
                iterator.remove();
            }
        }
    
        public static void removeRecipe(Block block)
        {
            List <irecipe>recipes = CraftingManager.getInstance().getRecipeList();
            Iterator <irecipe>iterator = recipes.iterator();
            while(iterator.hasNext())
            {
                ItemStack is = iterator.next().getRecipeOutput();
                if(is != null && is.getItem() == Item.getItemFromBlock(block))
                    iterator.remove();
            }
        }
    

    Récupérer un objet lors du craft

    Vous avez la possibilité de récupérer un objet différent du résultat de la recette lorsque celle-ci est réalisée :

    Il faut pour cela préciser dans la classe de l'objet qu'il doit retourner comme ceci :

        this.setContainerItem(<l'item que="" vous="" voulez="" retourner="">)
    

    Par exemple le seau de lait utilisé dans la recette du gâteau retourne un sceau vide :

        this.setContainerItem(bucket)
    

    Vous pouvez également retourner un ItemStack en fonction de celui qui vient d'être utilisé, ici on endommage l'objet :

        public ItemStack getContainerItem(ItemStack itemStack) {
               return new ItemStack(this, 1, itemStack.getItemDamage() + 1);
           }
    

    En vidéo

    Youtube Video

    Crédits

    Rédaction :

    Correction :

    cc
    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

    Retour vers le sommaire des tutoriels



  • Pourrais tu m'expliquer comment désactiver la recette de craft ?
    Oui j'ai pas compris…. effectivement c'est certainement simple pour vous mais pour un blaireau comme moi qui connais pas java c'est dur x)


  • Administrateurs

    Il suffit de mettre dans la fonction init de ta classe principale :
    removeRecipe(item);
    Et de copier la méthode

    public static void removeRecipe(Item item)
    {
        List <irecipe>recipes = CraftingManager.getInstance().getRecipeList();
        Iterator <irecipe>iterator = recipes.iterator();
        while(iterator.hasNext())
        {
            ItemStack is = iterator.next().getRecipeOutput();
            if(is != null && is.getItem() == item)
                iterator.remove();
        }
    }
    

    Dans ta classe principale
    Pour retirer la recette d'un autre mod :
    removeRecipe(GameRegistry.findItem("modid", "nom"));</irecipe></irecipe>



  • D'accord merci ! C'est du rapide pour la réponse !



  • Je ne comprend pas pourquoi Eclipse me dit qu'il y'a des erreurs :


    Pourtant j'ai fait exactement ce que tu m'a dit.</irecipe></irecipe>


  • Administrateurs

    Parce que tu as deux fermetures d'accolade qui ne devrait pas exister (une dans la fonction postInit et une après removeRecipe)



  • Oui mais cela n'élimine pas toute les erreurs.
    Je pense d’ailleurs stopper de faire ça je demanderais aux autres sur mon serveur de ne pas crafter les items/blocks en question je pense que ce sera plus simple que de faire ce "mod"


  • Administrateurs

    Ah oui aussi :
           RemoveRecipe(GameRegistry.findBlock("BuildCraft:Core", "blockEngine");
    ->
           removeRecipe(Item.getItemFromBlock(GameRegistry.findBlock("BuildCraft:Core", "blockEngine"));

    et

       public static void removeRecipe(block blockEngine)
    

    ->

       public static void removeRecipe(Item blockEngine)
    


  • Merci pour l'aide y'a une dernière erreur , je vais essayer de chercher tout seul pour voir

    [Edit] J'y arrive pas je comprend pas j'ai beau rechercher mon erreur je trouve pas…


    Voila la c'est la dernière fois que demande de l'aide puisque après j'aurai fini ce que je voulais faire  :P</irecipe>



  • Regarde si l'item est trouvé déjà



  • Nope , il est pas trouvé et je pense que le problème viens de la ! Mais de toute façon j'ai trouvé un autre moyen 😃



  • Juste une question : Avant d'initialiser mes recettes, mon Minecraft se lançait mais depuis, il ne se lance plus. A quoi est-ce dû?

    Ma console :

    [19:14:35] [main/INFO]: username: Raphmaster6
    [19:14:35] [main/INFO]: Extra: []
    [19:14:35] [main/INFO]: Running with arguments: [–userProperties, {}, --username, Raphmaster6, --accessToken, {REDACTED}, --assetIndex, 1.7.10, --assetsDir, C:/Users/Raphm/.gradle/caches/minecraft/assets, --version, 1.7.10, --tweakClass, cpw.mods.fml.common.launcher.FMLTweaker, --tweakClass, net.minecraftforge.gradle.tweakers.CoremodTweaker]
    [19:14:35] [main/INFO]: Loading tweak class name cpw.mods.fml.common.launcher.FMLTweaker
    [19:14:35] [main/INFO]: Using primary tweak class name cpw.mods.fml.common.launcher.FMLTweaker
    [19:14:35] [main/INFO]: Loading tweak class name net.minecraftforge.gradle.tweakers.CoremodTweaker
    [19:14:35] [main/INFO]: Calling tweak class cpw.mods.fml.common.launcher.FMLTweaker
    [19:14:35] [main/INFO]: Forge Mod Loader version 7.99.40.1614 for Minecraft 1.7.10 loading
    [19:14:36] [main/INFO]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.7.0_80, running on Windows 8.1:amd64:6.3, installed at C:\Program Files\Java\jre7
    [19:14:36] [main/INFO]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
    [19:14:36] [main/INFO]: Calling tweak class net.minecraftforge.gradle.tweakers.CoremodTweaker
    [19:14:36] [main/INFO]: Injecting location in coremod cpw.mods.fml.relauncher.FMLCorePlugin
    [19:14:36] [main/INFO]: Injecting location in coremod net.minecraftforge.classloading.FMLForgePlugin
    [19:14:36] [main/INFO]: Loading tweak class name cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
    [19:14:36] [main/INFO]: Loading tweak class name cpw.mods.fml.common.launcher.FMLDeobfTweaker
    [19:14:36] [main/INFO]: Loading tweak class name net.minecraftforge.gradle.tweakers.AccessTransformerTweaker
    [19:14:36] [main/INFO]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
    [19:14:36] [main/INFO]: Calling tweak class cpw.mods.fml.common.launcher.FMLInjectionAndSortingTweaker
    [19:14:36] [main/INFO]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
    [19:14:36] [main/ERROR]: The binary patch set is missing. Either you are in a development environment, or things are not going to work!
    [19:14:41] [main/ERROR]: FML appears to be missing any signature data. This is not a good thing
    [19:14:41] [main/INFO]: Calling tweak class cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper
    [19:14:41] [main/INFO]: Calling tweak class cpw.mods.fml.common.launcher.FMLDeobfTweaker
    [19:14:43] [main/INFO]: Calling tweak class net.minecraftforge.gradle.tweakers.AccessTransformerTweaker
    [19:14:43] [main/INFO]: Loading tweak class name cpw.mods.fml.common.launcher.TerminalTweaker
    [19:14:43] [main/INFO]: Calling tweak class cpw.mods.fml.common.launcher.TerminalTweaker
    [19:14:43] [main/INFO]: Launching wrapped minecraft {net.minecraft.client.main.Main}
    [19:14:47] [main/INFO]: Setting user: Raphmaster6
    [19:14:51] [Client thread/INFO]: LWJGL Version: 2.9.1
    [19:14:53] [Client thread/INFO]: [cpw.mods.fml.client.SplashProgress:start:188]: –-- Minecraft Crash Report ----
    // You're mean.
    
    Time: 25/06/16 19:14
    Description: Loading screen debug info
    
    This is just a prompt for computer specs to be printed. THIS IS NOT A ERROR
    
    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------
    
    -- System Details --
    Details:
    Minecraft Version: 1.7.10
    Operating System: Windows 8.1 (amd64) version 6.3
    Java Version: 1.7.0_80, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 808542328 bytes (771 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
    JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
    AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
    FML:
    GL info: ' Vendor: 'ATI Technologies Inc.' Version: '4.5.13399 Compatibility Profile Context 15.201.1101.0' Renderer: 'AMD Radeon(TM) R4 Graphics'
    [19:14:53] [Client thread/INFO]: Attempting early MinecraftForge initialization
    [19:14:53] [Client thread/INFO]: MinecraftForge v10.13.4.1614 Initialized
    [19:14:53] [Client thread/INFO]: Replaced 183 ore recipies
    [19:14:54] [Client thread/INFO]: Completed early MinecraftForge initialization
    [19:14:54] [Client thread/INFO]: Found 0 mods from the command line. Injecting into mod discoverer
    [19:14:54] [Client thread/INFO]: Searching C:\Users\Raphm\Desktop\Modding\forge-1.7.10-10.13.4.1614-1.7.10-src\eclipse\mods for mods
    [19:15:10] [Client thread/INFO]: Forge Mod Loader has identified 4 mods to load
    [19:15:11] [Client thread/INFO]: Attempting connection with missing mods [mcp, FML, Forge, testmod] at CLIENT
    [19:15:11] [Client thread/INFO]: Attempting connection with missing mods [mcp, FML, Forge, testmod] at SERVER
    [19:15:13] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:ModTest
    [19:15:14] [Client thread/INFO]: Processing ObjectHolder annotations
    [19:15:14] [Client thread/INFO]: Found 341 ObjectHolder annotations
    [19:15:14] [Client thread/INFO]: Identifying ItemStackHolder annotations
    [19:15:14] [Client thread/INFO]: Found 0 ItemStackHolder annotations
    [19:15:14] [Client thread/INFO]: Configured a dormant chunk cache size of 0
    [19:15:14] [Client thread/INFO]: Applying holder lookups
    [19:15:14] [Client thread/INFO]: Holder lookups applied
    [19:15:14] [Client thread/INFO]: Injecting itemstacks
    [19:15:14] [Client thread/INFO]: Itemstack injection complete
    [19:15:15] [Sound Library Loader/INFO]: [paulscode.sound.SoundSystemLogger:message:69]:
    [19:15:15] [Sound Library Loader/INFO]: [paulscode.sound.SoundSystemLogger:message:69]: Starting up SoundSystem…
    [19:15:15] [Thread-8/INFO]: [paulscode.sound.SoundSystemLogger:message:69]: Initializing LWJGL OpenAL
    [19:15:15] [Thread-8/INFO]: [paulscode.sound.SoundSystemLogger:message:69]:     (The LWJGL binding of OpenAL.  For more information, see http://www.lwjgl.org)
    [19:15:15] [Thread-8/INFO]: [paulscode.sound.SoundSystemLogger:message:69]: OpenAL initialized.
    [19:15:15] [Sound Library Loader/INFO]: [paulscode.sound.SoundSystemLogger:message:69]:
    [19:15:15] [Sound Library Loader/INFO]: Sound engine started
    [19:15:21] [Client thread/INFO]: Created: 16x16 textures/blocks-atlas
    [19:15:21] [Client thread/INFO]: Created: 16x16 textures/items-atlas
    [19:15:21] [Client thread/INFO]: [fr.Raphmaster6.TestMod.client.ClientProxy:registerRender:9]: méthode côté client
    [19:15:21] [Client thread/ERROR]: Fatal errors were detected during the transition from INITIALIZATION to POSTINITIALIZATION. Loading cannot continue
    [19:15:21] [Client thread/ERROR]:
    States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
    UCHI mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
    UCHI FML{7.10.99.99} [Forge Mod Loader] (forgeBin-1.7.10-10.13.4.1614-1.7.10.jar)
    UCHI Forge{10.13.4.1614} [Minecraft Forge] (forgeBin-1.7.10-10.13.4.1614-1.7.10.jar)
    UCHE testmod{0.0.0-Test Phase} [ModTest] (bin)
    [19:15:21] [Client thread/ERROR]: The following problems were captured during this phase
    [19:15:21] [Client thread/ERROR]: Caught exception from testmod
    java.lang.ClassCastException: net.minecraft.item.Item cannot be cast to java.lang.Character
    at net.minecraft.item.crafting.CraftingManager.addRecipe(CraftingManager.java:203) ~[forgeBin-1.7.10-10.13.4.1614-1.7.10.jar:?]
    at cpw.mods.fml.common.registry.GameRegistry.addShapedRecipe(GameRegistry.java:250) ~[forgeBin-1.7.10-10.13.4.1614-1.7.10.jar:?]
    at cpw.mods.fml.common.registry.GameRegistry.addRecipe(GameRegistry.java:245) ~[forgeBin-1.7.10-10.13.4.1614-1.7.10.jar:?]
    at fr.Raphmaster6.TestMod.common.TestMod.init(TestMod.java:54) ~[bin/:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_80]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_80]
    at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:532) ~[forgeBin-1.7.10-10.13.4.1614-1.7.10.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_80]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_80]
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?]
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?]
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?]
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?]
    at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?]
    at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212) ~[forgeBin-1.7.10-10.13.4.1614-1.7.10.jar:?]
    at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190) ~[forgeBin-1.7.10-10.13.4.1614-1.7.10.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_80]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_80]
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) ~[guava-17.0.jar:?]
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) ~[guava-17.0.jar:?]
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) ~[guava-17.0.jar:?]
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) ~[guava-17.0.jar:?]
    at com.google.common.eventbus.EventBus.post(EventBus.java:275) ~[guava-17.0.jar:?]
    at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119) [LoadController.class:?]
    at cpw.mods.fml.common.Loader.initializeMods(Loader.java:737) [Loader.class:?]
    at cpw.mods.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:311) [FMLClientHandler.class:?]
    at net.minecraft.client.Minecraft.startGame(Minecraft.java:552) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:878) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(SourceFile:148) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_80]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_80]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_80]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source) [start/:?]
    at GradleStart.main(Unknown Source) [start/:?]
    [19:15:21] [Client thread/INFO]: [net.minecraft.client.Minecraft:displayCrashReport:349]: –-- Minecraft Crash Report ----
    // Daisy, daisy...
    
    Time: 25/06/16 19:15
    Description: Initializing game
    
    java.lang.ClassCastException: net.minecraft.item.Item cannot be cast to java.lang.Character
    at net.minecraft.item.crafting.CraftingManager.addRecipe(CraftingManager.java:203)
    at cpw.mods.fml.common.registry.GameRegistry.addShapedRecipe(GameRegistry.java:250)
    at cpw.mods.fml.common.registry.GameRegistry.addRecipe(GameRegistry.java:245)
    at fr.Raphmaster6.TestMod.common.TestMod.init(TestMod.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:532)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)
    at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)
    at cpw.mods.fml.common.Loader.initializeMods(Loader.java:737)
    at cpw.mods.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:311)
    at net.minecraft.client.Minecraft.startGame(Minecraft.java:552)
    at net.minecraft.client.Minecraft.run(Minecraft.java:878)
    at net.minecraft.client.main.Main.main(SourceFile:148)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
    at GradleStart.main(Unknown Source)
    
    A detailed walkthrough of the error, its code path and all known details is as follows:
    ---------------------------------------------------------------------------------------
    
    -- Head --
    Stacktrace:
    at net.minecraft.item.crafting.CraftingManager.addRecipe(CraftingManager.java:203)
    at cpw.mods.fml.common.registry.GameRegistry.addShapedRecipe(GameRegistry.java:250)
    at cpw.mods.fml.common.registry.GameRegistry.addRecipe(GameRegistry.java:245)
    at fr.Raphmaster6.TestMod.common.TestMod.init(TestMod.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:532)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:212)
    at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:190)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
    at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
    at com.google.common.eventbus.EventBus.post(EventBus.java:275)
    at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:119)
    at cpw.mods.fml.common.Loader.initializeMods(Loader.java:737)
    at cpw.mods.fml.client.FMLClientHandler.finishMinecraftLoading(FMLClientHandler.java:311)
    at net.minecraft.client.Minecraft.startGame(Minecraft.java:552)
    
    -- Initialization --
    Details:
    Stacktrace:
    at net.minecraft.client.Minecraft.run(Minecraft.java:878)
    at net.minecraft.client.main.Main.main(SourceFile:148)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
    at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
    at GradleStart.main(Unknown Source)
    
    -- System Details --
    Details:
    Minecraft Version: 1.7.10
    Operating System: Windows 8.1 (amd64) version 6.3
    Java Version: 1.7.0_80, Oracle Corporation
    Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
    Memory: 733765744 bytes (699 MB) / 1038876672 bytes (990 MB) up to 1038876672 bytes (990 MB)
    JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
    AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0
    FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1614 4 mods loaded, 4 mods active
    States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
    UCHI mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
    UCHI FML{7.10.99.99} [Forge Mod Loader] (forgeBin-1.7.10-10.13.4.1614-1.7.10.jar)
    UCHI Forge{10.13.4.1614} [Minecraft Forge] (forgeBin-1.7.10-10.13.4.1614-1.7.10.jar)
    UCHE testmod{0.0.0-Test Phase} [ModTest] (bin)
    GL info: ' Vendor: 'ATI Technologies Inc.' Version: '4.5.13399 Compatibility Profile Context 15.201.1101.0' Renderer: 'AMD Radeon(TM) R4 Graphics'
    Launched Version: 1.7.10
    LWJGL: 2.9.1
    OpenGL: AMD Radeon(TM) R4 Graphics GL version 4.5.13399 Compatibility Profile Context 15.201.1101.0, ATI Technologies Inc.
    GL Caps: Using GL 1.3 multitexturing.
    Using framebuffer objects because OpenGL 3.0 is supported and separate blending is supported.
    Anisotropic filtering is supported and maximum anisotropy is 16.
    Shaders are available because OpenGL 2.1 is supported.
    
    Is Modded: Definitely; Client brand changed to 'fml,forge'
    Type: Client (map_client.txt)
    Resource Packs: []
    Current Language: English (US)
    Profiler Position: N/A (disabled)
    Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
    Anisotropic Filtering: Off (1)
    [19:15:21] [Client thread/INFO]: [net.minecraft.client.Minecraft:displayCrashReport:359]: #@!@# Game crashed! Crash report saved to: #@!@# C:\Users\Raphm\Desktop\Modding\forge-1.7.10-10.13.4.1614-1.7.10-src\eclipse\.\crash-reports\crash-2016-06-25_19.15.21-client.txt
    AL lib: (EE) alc_cleanup: 1 device not closed
    
    

    Et ma classe principale :

    package fr.Raphmaster6.TestMod.common;
    
    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;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    @Mod(modid = "testmod", name = "ModTest", version = "0.0.0-Test Phase")
    
    public class TestMod {
    
    public static final String MODID = "testmod";
    public static final String NAME = "ModTest";
    public static Item TestItem;
    public static Item TestItemRecipeHint;
    
    @Instance("testmod")
    public static TestMod instance;
    
    @SidedProxy(clientSide = "fr.Raphmaster6.TestMod.client.ClientProxy", serverSide = "fr.Raphmaster6.TestMod.common.CommonProxy")
    
    public static CommonProxy proxy;
    
    @EventHandler
    
    public void preInit(FMLPreInitializationEvent event)
    
    {
    TestItem = new TestItem().setUnlocalizedName("itemTest").setTextureName(TestMod.MODID + ":itemTest").setCreativeTab(CreativeTabs.tabMaterials);
    GameRegistry.registerItem(TestItem, "test_item");
    TestItemRecipeHint = new TestItemRecipeHint().setUnlocalizedName("itemTestRecipe").setTextureName(TestMod.MODID + ":itemTestRecipe").setCreativeTab(CreativeTabs.tabMaterials);
    GameRegistry.registerItem(TestItemRecipeHint, "test_item_recipe");
    
    }
    
    @EventHandler
    
    public void init(FMLInitializationEvent event)
    
    {
    
    proxy.registerRender();
    GameRegistry.addRecipe(new  ItemStack(TestItem), new Object[]{
    "XXX",
    "XIX",
    "XXX",
    "X", Items.diamond,
    "I", TestMod.TestItemRecipeHint,
    
    });
    GameRegistry.addRecipe(new ItemStack(TestItemRecipeHint), new Object[]{
    "",
    " X ",
    "",
    "X", Items.diamond,
    });
    
    }
    
    @EventHandler
    
    public void postinit(FMLPostInitializationEvent event)
    
    {
    
    }
    
    }
    
    

    Merci d'avance



  • Tu dois utiliser des guillemets simples (apostrophes) pour entourer les lettres seules



  • Merci