5 mars 2014, 00:49

youtubeCe tutoriel est également disponible en vidéo.

Sommaire

Introduction

Dans ce tutoriel, nous allons créer notre premier bloc. Un bloc est comme un item mais qui peut aussi être placé dans le monde. En fait, un bloc possède un item, il s’agit d’un ItemBlock. Son existence n’est pas à négliger, elle nous sera utile plus tard pour personnaliser notre bloc et pour les metadatas.

Pré-requis

Code

La classe principale :

Pour commencer, en dessous de vos items ou de votre proxy, déclarez le bloc :

    public static Block blockTutoriel;

Pensez à importer net.minecraft.block.Block (ctrl + shift + o).
Ensuite, il faut initialiser le bloc. Dans la fonction preInit ajoutez :

        blockTutoriel = new BlockTutoriel(Material.rock).setBlockName("tutoriel").setBlockTextureName("modtutoriel:block_tutoriel");

BlockTutoriel correspond au nom de la classe de mon bloc, dans le constructeur, j’ai mis un matériel. Il existe de nombreux matériaux, faîtes simplement un ctrl + clic sur Material, la classe Material.java va s’ouvrir, les matériaux ayant :

  • setBurning : peuvent brûler.
  • setRequiresTool : ne peuvent que droper avec un outil spécifique (pioche pour la plupart, pelle pour la neige).
  • setTranslucent : sont en général des matériaux transparent.
  • setNoPushMobility : ne peuvent pas être déplacé par un piston.
  • setBlockName définit le nom non localisé. Celui-ci sera complété par le préfixe “tile.” et le suffixe “.name”. Il sera utiliser dans le fichier de lang.
  • setBlockTextureName définit le nom de la texture. Vous pouvez remplacer “modtutoriel:block_tutoriel” par MODID + “:block_tutoriel” si vous avez fait une constante MODID comme dans le tutoriel sur un item basique. modtutoriel correspond à mon modid et block_tutoriel au nom de la texture.

Il ne reste plus qu’à enregistrer le bloc. Toujours dans la fonction preInit ajoutez :

        GameRegistry.registerBlock(blockTutoriel, "block_tutoriel");

blockTutoriel étant le nom de la variable du bloc et block_tutoriel le nom dans le game data (utilisé pour le /give, et les donnés de la map). De préférence, ne mettez pas d’espace (utilisez des tirets du bas), pas de caractères spéciaux (accent, etc…) et pas de majuscule.

La classe du bloc :

Depuis tout à l’heure, vous avez une erreur sur BlockTutoriel, créez cette classe, et en “super class” mettez net.minecraft.block.Block (ou ajoutez le extends Block une fois la classe créée).
Le nom de votre classe sera souligné en rouge, il suffit juste de passer la souris dessus et de faire “add constructor ‘NomDeVotreClasse(Material)’”. Vous devrez avoir quelques chose comme ceci maintenant :

package fr.minecraftforgefrance.tutoriel.common;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;

public class BlockTutoriel extends Block
{
    protected BlockTutoriel(Material p_i45394_1_)
    {
        super(p_i45394_1_);
    }
}

p_i45394_1_ n’étant pas trop significatif, nous allons changer le nom de ce paramètre pour avoir quelque chose qui a un sens :

package fr.minecraftforgefrance.tutoriel.common;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;

public class BlockTutoriel extends Block
{
    protected BlockTutoriel(Material material)
    {
        super(material);
    }
}

Et voila !

La texture et le nom :

Il faut maintenant s’occuper des ressources. Allez dans le dossier forge/src/main/resources/assets/modid/
Commençons d’abord par le dossier lang, ouvrez le fichier en_US.lang et ajoutez :

tile.le nom non localisé de votre bloc.name=Le nom en jeu en anglais

Dans mon cas :

tile.tutoriel.name=Bloc Tutoriel

Même chose avec les autres langages.
Ensuite retournez dans le dossier de votre mod, et ouvrez le dossier “textures”. Créez un nouveau dossier nommé “blocks”. Dans ce dossier, ajoutez votre texture (format .png, 16x16 ou 32x32 ou 64x64, etc …) portant le nom que nous avons mit dans le .setBlockTextureName du bloc.

Ajouter le bloc dans un onglet créatif :

Dans l’initialisation de votre bloc, il suffit d’ajouter :

.setCreativeTab(CreativeTabs.tabBlock)

Ce qui donne donc :

        blockTutoriel = new BlockTutoriel(Material.rock).setBlockName("tutoriel").setBlockTextureName("modtutoriel:block_tutoriel").setCreativeTab(CreativeTabs.tabBlock);

Vous pouvez aussi définir la table créatif dans le constructeur du bloc :

    protected BlockTutoriel(Material material)
    {
        super(material);
                this.setCreativeTab(CreativeTabs.tabBlock);
    }

Résultat

Voir le commit sur github
Le commit sur github montre clairement où ont été placés les fichiers, ainsi que ce qui a été ajouté et retiré dans le fichier.

Crédits

Rédaction :

Correction :

Creative Commons
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

retourRetour vers le sommaire des tutoriels