1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

[1.4.7&1.5]La classe principale de votre mod

Discussion dans 'Tutoriels' créé par robin4002, 19 Fev 2013.

  1. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Dans ce tutoriel, nous allons voir comment créer la classe principale de votre mod et les proxys.

    Prérequis :
    - Installer les sources de forge et les logiciels de développement

    Sommaire :
    1) Vos deux packages
    2) La classe principale
    3) Les proxys

    Vos deux packages
    La classe principale est la première chose qui va être chargée par FML, d’ailleurs dans cette classe nous allons utiliser un code qui va permettre à FML de reconnaître votre mod.
    La première chose à faire est de créer un "package". Pour ça, clic droit sur src, puis new, et enfin package :

    [​IMG]

    Pour le nom, choisissez simplement <nom_du_mod>.common , ou alors <pseudo>.<nom_du_mod>.common. Dans mon cas je vais prendre "modTutoriel.common" :

    [​IMG]

    Vous pouvez tout de suite créer un deuxième package, "modTutoriel.client" dans mon cas.
    Cette organisation n'est pas obligatoire, mais elle est mieux pour ne pas se perdre dans ses codes.
    En gros, dans le package client, nous allons mettre tout ce qui concerne le client (texture, rendu, son, etc...) et dans common nous allons mettre tout ce qui concerne le client et le serveur.

    La classe principale

    Dans votre package common, créez une première classe. Cette classe sera la classe principale de votre mod.
    Dans cette classe, vous allez mettre :

    Code (java):
    package modTutoriel.common;
     
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.Init;
    import cpw.mods.fml.common.Mod.PostInit;
    import cpw.mods.fml.common.Mod.PreInit;
    import cpw.mods.fml.common.Mod.ServerStarting;
    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.event.FMLServerStartingEvent;
    import cpw.mods.fml.common.network.NetworkMod;
     
    @Mod(modid = "ModTutoriel", name = "Mod tutoriel", version = "1.0.0")
    @NetworkMod(clientSideRequired = true, serverSideRequired = false)
     
    public class ModTutoriel
    {
        @SidedProxy(clientSide = "modTutoriel.client.TutoClientProxy", serverSide = "modTutoriel.common.TutoCommonProxy")
        public static TutoCommonProxy proxy;
     
        /**1**/
        @PreInit
        public void preload(FMLPreInitializationEvent event)
        {
       
        }
     
        /**2**/
        @Init
        public void load(FMLInitializationEvent event)
        {
       
        }
     
        /**3**/
        @PostInit
        public void postload(FMLPostInitializationEvent event)
        {
       
        }
     
        /**4**/
        @ServerStarting
        public void serverStarting(FMLServerStartingEvent event)
        {
       
        }
     
    }
    Il y aura juste une erreur sur "TutoCommonProxy"
    Explication :
    Code (java):
    @Mod(modid = "ModTutoriel", name = "Mod tutoriel", version = "1.0.0")
    @NetworkMod(clientSideRequired = true, serverSideRequired = false)
    modid est l'ID du mod, cela correspond au mod_xxxx pour ceux qui sont habitué à ML. En gros si FML détecte deux mod du même ID, il faut automatiquement stopper le jeu en pensant que vous avez installé deux fois le même mod. Donc évitez d'utiliser le même modid pour tous vos mods.
    name est simplement le nom du mod. Et version est la version du mod, pas de Minecraft.
    "clientSideRequired = true" veut dire qu'un client voulant se connecter sur un serveur possédant ce mod doit avoir le mod installé en solo. "serverSideRequired = true" veut dire qu'un serveur doit avoir le mod pour que le client se connecte dessus. En gros, il faut le laisser en false, sinon quelqu'un qui a installé votre mod ne pourra que se connecter aux serveurs qui ont aussi le mod.
    Code (java):
        @PreInit
        public void preload(FMLPreInitializationEvent event)
        {
       
        }
    Est la première chose que FML va charger, tous les codes qui sont ici sont chargés en premier. On s'en sert en général pour les configurations.
    Code (java):
        /**2**/
        @Init
        public void load(FMLInitializationEvent event)
        {
       
        }
    Est la deuxième chose que FML va charger, on y met les codes pour les blocs, mobs, items, etc ...
    Code (java):
        /**3**/
        @PostInit
        public void postload(FMLPostInitializationEvent event)
        {
       
        }
    Est la dernière chose que FML va charger avant d’arriver dans le menu de Minecraft. On peut y mettre les recettes, car si une recette pour un bloc ou item est déclarée avant l'item ou le bloc en question, ça crash. En mettant les recettes ici vous êtes sûr qu'elles sont chargées en dernier et après les blocs/items.
    Code (java):
        /**4**/
        @ServerStarting
        public void serverStarting(FMLServerStartingEvent event)
        {
       
        }
    Est chargé au moment ou le serveur dédié ou intégré est lancé. Je rappelle que depuis la 1.3.x, les mods solo sont des serveurs intégrés. Il est utilisé pour enregistrer des commandes.

    Les proxys

    Rapidement, explication du code que j'ai déjà mis dans la classe principale.
    Code (java):
        @SidedProxy(clientSide = "modTutoriel.client.TutoClientProxy", serverSide = "modTutoriel.common.TutoCommonProxy")
        public static TutoCommonProxy proxy;
    clientSide définit le chemin de la classe du proxy du client et serverSide définit le chemin de la classe du proxy commun.
    public static TutoCommonProxy proxy; permet de mettre juste proxy.quelquechose lorsque vous allez faire charger quelque chose dans le proxy.
    Passez maintenant la souris sur l'erreur. Créez la classe "TutoCommonProxy"
    Dans cette classe vous allez mettre :
    Code (java):
    package modTutoriel.common;
     
    public class TutoCommonProxy
    {
        public void registerTextures()
        {
       
        }
    }
    Et maintenant dans le package du client, créez la classe "TutoClientProxy". Dedans vous allez mettre :
    Code (java):
    package modTutoriel.client;
     
    import modTutoriel.common.TutoCommonProxy;
     
    public class TutoClientProxy extends TutoCommonProxy
    {
        @Override
        public void registerTextures()
        {
       
        }
     
    }
    Grâce à "@Override", le proxy client va suivre le proxy commun. En gros dans votre classe principale, si vous ajoutez proxy.registerTextures(); le proxy commun ainsi que le client va le faire.
    Justement, dans votre classe principale, ajoutez ce code au début de la partie @Init, nous l'utiliserons pour précharger les textures. Ce qui donne :
    Code (java):
        @Init
        public void load(FMLInitializationEvent event)
        {
            proxy.registerTextures();
        }
    Maintenant les bases faites, vous allez pouvoir faire des choses plus complexes.
     
    • Utile Utile x 5
    • J'aime J'aime x 4

Partager cette page