Un bloc basique


  • Administrateurs

    Nous allons maintenant commencer notre premier bloc.

    Dans la classe principale

    À la suite de la déclaration de votre instance, déclarez votre bloc comme ceci :

        public static Block BlockTutoriel;
    

    Pensez à importer `net.minecraft.block.Block.
    Si vous voulez créer plusieurs blocs, vous pouvez les déclarer à la suite de cette façon :

        public static Block BlockTutoriel, DeuximeBlock, TroixiemeBlock;
    

    Ensuite dans la partie @PreInit (oui, dans mes anciens tutoriels j'avais dit dans Init, c'est ce que j'avais appris dans les tutoriels anglais, mais en regardant les sources de buildcraft, ironchest, ic2, et compact solar, j'ai vu qu'il faut les preinit, d'ailleurs les achievements ne peuvent pas fonctionner si vous ne les mettez pas dans le PreInit), vous allez ajouter ceci :

        BlockTutoriel = new BlockTutoriel(2000).setHardness(2.0F).setResistance(4.0F).setUnlocalizedName("BlockTutoriel");
    

    2000 est l'id du bloc, setHardness correspond à la résistance du bloc par rapport à la pioche (ou à la main) et setResistance est la résistance aux explosions
    Ensuite, enregistrez votre bloc dans la partie @Init :

        GameRegistry.registerBlock(BlockTutoriel, "BlockTutoriel");
    

    Et pour finir, enregistrez le nom en jeu dans la partie @PostInit avec ce code :

        LanguageRegistry.addName(BlockTutoriel, "Block Tutoriel");
    

    Il vous restera une erreur sur "new BlockTutoriel", créez cette classe.

    La classe du bloc

    Vous allez avoir une classe qui ressemble à ça :

    package tutoriel.common;
    
    public class BlockTutoriel
    {
    
    }
    

    Ajoutez extends Block après "public class BlockTutoriel". Importez "net.minecraft.block.Block". Maintenant vous allez avoir une erreur sur "BlockTutoriel", passez la souris dessus et faites "add constructor 'BlockTutoriel(int, Material)'
    Vous allez obtenir un contructeur comme ceci :

        public BlockTutoriel(int par1, Material par2Material)
        {
            super(par1, par2Material);
        }
    

    Nous allons le modifier de cette façon-là :

        public BlockTutoriel(int id)
        {
            super(id, Material.rock);
            this.setCreativeTab(CreativeTabs.tabBlock);
        }
    

    Pensez à changer les paramètres du type par1, par2, par3, etc. par ce qui correspond, on s'y retrouve beaucoup mieux avec des noms corrects.

    Maintenant ajoutez cette fonction :

        public void registerIcons(IconRegister iconregister)
        {
            blockIcon = iconregister.registerIcon("ModTutoriel:BlockTutoriel");
        }
    

    C'est cette fonction qui gère l'enregistrement de l'icône de votre bloc. ModTutoriel est mon modid, vous pouvez mettre autre chose, mais il est recommandé de mettre votre modid (je vais vous expliquer plus bas où vous allez le retrouver), et BlockTutoriel est le nom de mon fichier de texture.

    La texture du bloc

    Nous avons enregistré juste au-dessus l'icône du bloc, mais maintenant il faut savoir où placer la texture du bloc.
    Allez dans votre dossier forge/mcp/src/minecraft.
    Dans ce dossier se trouvent les sources du jeu. Vous devrez normalement y voir un dossier du même nom que votre package, tutoriel dans mon cas. Créez un nouveau dossier et nommez-le mods. À l'intérieur de ce dossier, créez un autre dossier et nommez-le avec votre modid, enfin plus exactement avec le nom que vous avez mit avant le ":", ModTutoriel dans mon cas. À nouveau, dans ce dossier créez un autre dossier nommé textures. Dans le dossier textures, créez le dossier blocks
    Nous avons donc 4 dossiers : mods/ModTutoriel/textures/blocks/
    Maintenant dans le dossier blocks, créez votre fichier .png de 16x16 nommé BlockTutoriel, ce qui correspond à la partie après le ":". (vous pouvez aussi faire des textures plus grandes, mais elles seront plus lourdes à charger).
    Par ailleurs, lorsque vous compilerez votre mod, pensez à placer le dossier mods qui se trouve dans /forge/mcp/src/minecraft dans l'archive de votre mod, sinon les textures seront manquantes.

    Rendu final

    Maintenant votre bloc est terminé, si vous avez eu des problèmes, regardez le résultat final de toutes les classes :
    Bloc Minecraft Forge France

    Classe prinicipale :

    package tutoriel.common;
    
    import net.minecraft.block.Block;
    
    import tutoriel.proxy.TutoCommonProxy;
    
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.Init;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.Mod.PostInit;
    import cpw.mods.fml.common.Mod.PreInit;
    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.network.NetworkMod;
    import cpw.mods.fml.common.registry.GameRegistry;
    import cpw.mods.fml.common.registry.LanguageRegistry;
    
    @Mod(modid = "ModTutoriel", name = "Mod Tutoriel", version = "1.0.0", acceptedMinecraftVersions = "[1.5.2,)")
    @NetworkMod(clientSideRequired = true, serverSideRequired = false)
    
    public class ModTutoriel
    {
        @SidedProxy(clientSide = "tutoriel.proxy.TutoClientProxy", serverSide = "tutoriel.proxy.TutoCommonProxy")
        public static TutoCommonProxy proxy;
        @Instance("ModTutoriel")
        public static ModTutoriel instance;
    
        //Blocks
        public static Block BlockTutoriel, DeuximeBlock, TroixiemeBlock;
    
        @PreInit
        public void preload(FMLPreInitializationEvent event)
        {
            //Configuration
    
            //Blocks
            BlockTutoriel = new BlockTutoriel(2000).setHardness(2.0F).setResistance(4.0F).setUnlocalizedName("BlockTutoriel");
    
            //Items
    
            //Achievements
        }
    
        @Init
        public void load(FMLInitializationEvent event)
        {
            //Registry
            GameRegistry.registerBlock(BlockTutoriel, "BlockTutoriel");
    
            //Mobs
    
            //Render
            proxy.registerRender();
            //NetWork
        }
    
        @PostInit
        public void modloaded(FMLPostInitializationEvent event)
        {
            //Language
            LanguageRegistry.addName(BlockTutoriel, "Block Tutoriel");
    
            //Recipe
        }
    }
    

    Classe du bloc :

    package tutoriel.common;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.client.renderer.texture.IconRegister;
    import net.minecraft.creativetab.CreativeTabs;
    
    public class BlockTutoriel extends Block
    {
        public BlockTutoriel(int id)
        {
            super(id, Material.rock);
            this.setCreativeTab(CreativeTabs.tabBlock);
        }
    
        public void registerIcons(IconRegister iconregister)
        {
            blockIcon = iconregister.registerIcon("ModTutoriel:BlockTutoriel");
        }
    }
    


  • Super tutoriel. 😛
    J'attends la suite avec grand plaisir. 🙂



  • @robin4002:

    Vous devrez normalement y voir un dossier du même que votre package, tutoriel dans mon cas.

    Tu as oublié le mot "nom" ;)___
    @robin4002:

    Créez un nous dossier et nommez-le mods.

    Et tu as écrit "nous" au lieu de "nouveau".


  • Administrateurs

    Et mince, le pire c'est que je me suis relus, je sais pas comment j'ai fais pour le pas le voir, merci



  • De rien ! 😉



  • Sa doit être la fatigue ^^', sa peu arrivai, la perfection n'existe pas en soit :).
    Et merci pour le petit tuto ^^.



  • Merci beaucoup pour ces premiers tuto. J'attend la suite avec impatience car j'ai pas trouvé mieux ailleurs !


  • Administrateurs

    Tutoriel obsolète, à refaire. Il est valable pour minecraft 1.5.1 et 1.5.2



  • @'robin4002':

    Par ailleurs, lorsque vous compilerez votre mods, pensez à placer le dossier mods qui se trouve dans /forge/mcp/src/minecraft dans l'archive de votre mods, sinon les textures seront manquantes.

    Comment compile-t-on notre source ? on met le contenue de notre dossier mods "ModTutoriel" dans une archive ? on le compile avec éclipse ?



  • Quand tu as finit, tu vas dans ton dossier mcp et tu lance le bat recompile.bat puis reobfuscate.bat, ensuite dans le dossier reobf tu as tes sources recompiler et comme a dit rob, n'oublie pas de mettre des textures/sons car le recompile ne prend que en compte les .java.



  • Merci pour cette réponse rapide


Log in to reply