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 :
Pour le nom, choisissez simplement <nom_du_mod>.common , ou alors <pseudo>.<nom_du_mod>.common. Dans mon cas je vais prendre "modTutoriel.common" :
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.