Sommaire
Introduction
Dans ce tutoriel nous allons voir comment créer une culture simple.
Pré-requis
Code
La classe principale :
Dans la classe principale nous allons déclarer notre culture, c’est un bloc :
public static Block triticaleCrop;
Et sa graine :
public static Item triticaleSeed;
Le triticale c’est un peu comme du blé et du saigle : https://fr.wikipedia.org/wiki/Triticale
Ensuite on instancie notre bloc :
triticaleCrop = new BlockTriticale();
Et la graine :
triticaleSeed = new ItemSeeds(ModBlocks.triticaleCrop, Blocks.farmland).setUnlocalizedName("triticaleSeed");
La premier argument du constructeur de la classe ItemSeeds est la culture à laquelle la graine est associée et le second argument
est le bloc sur lequelle la graine doit être plantée.
Et on enregistre notre bloc dans le jeu :
GameRegistry.registerBlock(triticaleCrop, "triticaleCrop");
Et on enregistre aussi la graine :
GameRegistry.registerItem(triticaleSeed, "triticaleSeed");
La classe du bloc :
Créez la classe BlockTriticale et étendez-la à la classe BlockCrops
public class BlockTriticale extends BlockCrops
Il n’y a pas besoin de constructeur à cette classe il suffit juste d’override 2 fonctions :
@Override
protected Item getSeed() {
return ModItems.triticaleSeed;
}
@Override
protected Item getCrop() {
return ModItems.triticale;
}
La première retourne la graine qu’il faudra planter pour avoir la culture et la seconde fonction retourne l’item qui est droppé lorsque la culture
est arrivée à maturité.
Ici triticaleSeed est la graine créée au début du tutoriel.
Voilà un shéma, pas très claire que j’ai fait pour bien comprendre qui correspond à quoi :
Le client proxy :
Dans la fonction d’enregistrement des rendus, nous allons enregistrer le rendu du bloc et de l’item :
public class ClientProxy extends CommonProxy {
@Override
public void registerRender()
{
this.registerBlockTexture(ModBlocks.triticaleCrop, "triticaleCrop");
this.registerItemTexture(ModItems.triticaleSeed, "triticaleSeed");
}
@Override
public void registerItemTexture(Item item, int metadata, String name)
{
ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
mesher.register(item, metadata, new ModelResourceLocation(CustomizeMe.MODID + ":" + name, "inventory"));
}
@Override
public void registerItemTexture(Item item, String name)
{
registerItemTexture(item, 0, name);
}
@Override
public void registerBlockTexture(Block block, int metadata, String name)
{
registerItemTexture(Item.getItemFromBlock(block), metadata, name);
}
@Override
public void registerBlockTexture(Block block, String name)
{
registerBlockTexture(block, 0, name);
}
}
Les fichiers JSON
Dans le package assets/modid/blockstates, créez un fichier triticaleCrop.json dans lequel vous mettrez ce code :
{
"variants": {
"age=0": { "model": "modid:triticale_stage0" },
"age=1": { "model": "modid:triticale_stage0" },
"age=2": { "model": "modid:triticale_stage1" },
"age=3": { "model": "modid:triticale_stage1" },
"age=4": { "model": "modid:triticale_stage2" },
"age=5": { "model": "modid:triticale_stage2" },
"age=6": { "model": "modid:triticale_stage3" },
"age=7": { "model": "modid:triticale_stage3" }
}
}
Replacez modid par votre ModID, age est une propriété de la classe BlockCrops, qui va de 0 à 7, ce qui correspond à la croissance de la culture;
Ici on ne change le model de notre culture qu’une fois sur deux comme on peut le voir.
Chaque model est situé dans le package assets/modid/models/block
Je ne vais pas vous donner tout les json parce que c’est répétitif
Voici le fichier triticale_stage0.json
{
"parent": "block/crop",
"textures": {
"crop": "modid:blocks/triticale_stage_0"
}
}
On voit que le model parent est le model crop et que la texture est triticale_stage_0 se trouvant dans le package assets/modid/textures/blocks
Il suffit de faire copier le fichier pour chaque model de la culture en changeant la texture pour chacun.
Je donne un second exemple pour bin comprendre, le fichier triticale_stage1.json
{
"parent": "block/crop",
"textures": {
"crop": "modid:blocks/triticale_stage_1"
}
}
Pour les fichiers JSON de la graine cela fonctionne comme un item basique.