30 sept. 2015, 20:39

Les proxy :

Déjà, il vous faudra avoir vu le tutoriel sur les blocs basiques. Ensuite, libre à vous de mettre l’enregistrement des rendus dans la phase init de votre classe principale ou dans une fonction dans la classe de votre proxy qui sera appelée au moment de l’init. Pour la classe principale :

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateEnum), "tuto:tuto_block_enum_variant_1", "tuto:tuto_block_enum_variant_2");
       proxy.registerBlockTexture(Tuto.tutoStateEnum, 0, "tuto_block_enum_variant_1");
       proxy.registerBlockTexture(Tuto.tutoStateEnum, 1, "tuto_block_enum_variant_2");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateBool1), "tuto:tuto_block_bool1_false", "tuto:tuto_block_bool1_true");
       proxy.registerBlockTexture(Tuto.tutoStateBool1, 8, "tuto_block_bool1_true");
       proxy.registerBlockTexture(Tuto.tutoStateBool1, 0, "tuto_block_bool1_false");

       proxy.registerBlockTexture(Tuto.tutoStateBool, "tuto_block_bool");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateInteger), "tuto:tuto_block_integer_0", "tuto:tuto_block_integer_1", "tuto:tuto_block_integer_2", "tuto:tuto_block_integer_3");
       proxy.registerBlockTexture(Tuto.tutoStateInteger, 0, "tuto_block_integer_0");
       proxy.registerBlockTexture(Tuto.tutoStateInteger, 1, "tuto_block_integer_1");
       proxy.registerBlockTexture(Tuto.tutoStateInteger, 2, "tuto_block_integer_2");
       proxy.registerBlockTexture(Tuto.tutoStateInteger, 3, "tuto_block_integer_3");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateBoolEnum), "tuto:tuto_block_boolenum_false_var1", "tuto:tuto_block_boolenum_false_var2", "tuto:tuto_block_boolenum_true_var1", "tuto:tuto_block_boolenum_true_var2");
       proxy.registerBlockTexture(Tuto.tutoStateBoolEnum, 0, "tuto_block_boolenum_false_var1");
       proxy.registerBlockTexture(Tuto.tutoStateBoolEnum, 1, "tuto_block_boolenum_false_var2");
       proxy.registerBlockTexture(Tuto.tutoStateBoolEnum, 8, "tuto_block_boolenum_true_var1");
       proxy.registerBlockTexture(Tuto.tutoStateBoolEnum, 9, "tuto_block_boolenum_true_var2");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateBoolInteger), "tuto:tuto_block_boolinteger_0", "tuto:tuto_block_boolinteger_1", "tuto:tuto_block_boolinteger_2", "tuto:tuto_block_boolinteger_3");
       proxy.registerBlockTexture(Tuto.tutoStateBoolInteger, 0, "tuto_block_boolinteger_0");
       proxy.registerBlockTexture(Tuto.tutoStateBoolInteger, 1, "tuto_block_boolinteger_1");
       proxy.registerBlockTexture(Tuto.tutoStateBoolInteger, 2, "tuto_block_boolinteger_2");
       proxy.registerBlockTexture(Tuto.tutoStateBoolInteger, 3, "tuto_block_boolinteger_3");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateDirection), "tuto:tuto_block_direction_west", "tuto:tuto_block_direction_east", "tuto:tuto_block_direction_north", "tuto:tuto_block_direction_south");
       proxy.registerBlockTexture(Tuto.tutoStateDirection, 0, "tuto_block_direction_west");
       proxy.registerBlockTexture(Tuto.tutoStateDirection, 1, "tuto_block_direction_east");
       proxy.registerBlockTexture(Tuto.tutoStateDirection, 2, "tuto_block_direction_north");
       proxy.registerBlockTexture(Tuto.tutoStateDirection, 3, "tuto_block_direction_south");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateAxis), "tuto:tuto_block_axis_x", "tuto:tuto_block_axis_y", "tuto:tuto_block_axis_z", "tuto:tuto_block_axis_none");
       proxy.registerBlockTexture(Tuto.tutoStateAxis, 0, "tuto_block_axis_x");
       proxy.registerBlockTexture(Tuto.tutoStateAxis, 1, "tuto_block_axis_y");
       proxy.registerBlockTexture(Tuto.tutoStateAxis, 2, "tuto_block_axis_z");
       proxy.registerBlockTexture(Tuto.tutoStateAxis, 3, "tuto_block_axis_none");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateMulti), "tuto:tuto_block_multi_black_0_false", "tuto:tuto_block_multi_black_1_false", "tuto:tuto_block_multi_black_2_false", "tuto:tuto_block_multi_black_3_false", "tuto:tuto_block_multi_white_0_false", "tuto:tuto_block_multi_white_1_false", "tuto:tuto_block_multi_white_2_false", "tuto:tuto_block_multi_white_3_false", "tuto:tuto_block_multi_black_0_true", "tuto:tuto_block_multi_black_1_true", "tuto:tuto_block_multi_black_2_true", "tuto:tuto_block_multi_black_3_true", "tuto:tuto_block_multi_white_0_true", "tuto:tuto_block_multi_white_1_true", "tuto:tuto_block_multi_white_2_true", "tuto:tuto_block_multi_white_3_true");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 0, "tuto_block_multi_black_0_false");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 1, "tuto_block_multi_black_1_false");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 2, "tuto_block_multi_black_2_false");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 3, "tuto_block_multi_black_3_false");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 4, "tuto_block_multi_black_0_true");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 5, "tuto_block_multi_black_1_true");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 6, "tuto_block_multi_black_2_true");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 7, "tuto_block_multi_black_3_true");      
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 8, "tuto_block_multi_white_0_false");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 9, "tuto_block_multi_white_1_false");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 10, "tuto_block_multi_white_2_false");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 11, "tuto_block_multi_white_3_false");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 12, "tuto_block_multi_white_0_true");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 13, "tuto_block_multi_white_1_true");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 14, "tuto_block_multi_white_2_true");
       proxy.registerBlockTexture(Tuto.tutoStateMulti, 15, "tuto_block_multi_white_3_true");

Ou dans le proxy (client) :

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateEnum), "tuto:tuto_block_enum_variant_1", "tuto:tuto_block_enum_variant_2");
       registerBlockTexture(Tuto.tutoStateEnum, 0, "tuto_block_enum_variant_1");
       registerBlockTexture(Tuto.tutoStateEnum, 1, "tuto_block_enum_variant_2");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateBool1), "tuto:tuto_block_bool1_false", "tuto:tuto_block_bool1_true");
       registerBlockTexture(Tuto.tutoStateBool1, 8, "tuto_block_bool1_true");
       registerBlockTexture(Tuto.tutoStateBool1, 0, "tuto_block_bool1_false");

       registerBlockTexture(Tuto.tutoStateBool, "tuto_block_bool");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateInteger), "tuto:tuto_block_integer_0", "tuto:tuto_block_integer_1", "tuto:tuto_block_integer_2", "tuto:tuto_block_integer_3");
       registerBlockTexture(Tuto.tutoStateInteger, 0, "tuto_block_integer_0");
       registerBlockTexture(Tuto.tutoStateInteger, 1, "tuto_block_integer_1");
       registerBlockTexture(Tuto.tutoStateInteger, 2, "tuto_block_integer_2");
       registerBlockTexture(Tuto.tutoStateInteger, 3, "tuto_block_integer_3");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateBoolEnum), "tuto:tuto_block_boolenum_false_var1", "tuto:tuto_block_boolenum_false_var2", "tuto:tuto_block_boolenum_true_var1", "tuto:tuto_block_boolenum_true_var2");
       registerBlockTexture(Tuto.tutoStateBoolEnum, 0, "tuto_block_boolenum_false_var1");
       registerBlockTexture(Tuto.tutoStateBoolEnum, 1, "tuto_block_boolenum_false_var2");
       registerBlockTexture(Tuto.tutoStateBoolEnum, 8, "tuto_block_boolenum_true_var1");
       registerBlockTexture(Tuto.tutoStateBoolEnum, 9, "tuto_block_boolenum_true_var2");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateBoolInteger), "tuto:tuto_block_boolinteger_0", "tuto:tuto_block_boolinteger_1", "tuto:tuto_block_boolinteger_2", "tuto:tuto_block_boolinteger_3");
       registerBlockTexture(Tuto.tutoStateBoolInteger, 0, "tuto_block_boolinteger_0");
       registerBlockTexture(Tuto.tutoStateBoolInteger, 1, "tuto_block_boolinteger_1");
       registerBlockTexture(Tuto.tutoStateBoolInteger, 2, "tuto_block_boolinteger_2");
       registerBlockTexture(Tuto.tutoStateBoolInteger, 3, "tuto_block_boolinteger_3");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateDirection), "tuto:tuto_block_direction_west", "tuto:tuto_block_direction_east", "tuto:tuto_block_direction_north", "tuto:tuto_block_direction_south");
       registerBlockTexture(Tuto.tutoStateDirection, 0, "tuto_block_direction_west");
       registerBlockTexture(Tuto.tutoStateDirection, 1, "tuto_block_direction_east");
       registerBlockTexture(Tuto.tutoStateDirection, 2, "tuto_block_direction_north");
       registerBlockTexture(Tuto.tutoStateDirection, 3, "tuto_block_direction_south");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateAxis), "tuto:tuto_block_axis_x", "tuto:tuto_block_axis_y", "tuto:tuto_block_axis_z", "tuto:tuto_block_axis_none");
       registerBlockTexture(Tuto.tutoStateAxis, 0, "tuto_block_axis_x");
       registerBlockTexture(Tuto.tutoStateAxis, 1, "tuto_block_axis_y");
       registerBlockTexture(Tuto.tutoStateAxis, 2, "tuto_block_axis_z");
       registerBlockTexture(Tuto.tutoStateAxis, 3, "tuto_block_axis_none");

       ModelBakery.addVariantName(Item.getItemFromBlock(Tuto.tutoStateMulti), "tuto:tuto_block_multi_black_0_false", "tuto:tuto_block_multi_black_1_false", "tuto:tuto_block_multi_black_2_false", "tuto:tuto_block_multi_black_3_false", "tuto:tuto_block_multi_white_0_false", "tuto:tuto_block_multi_white_1_false", "tuto:tuto_block_multi_white_2_false", "tuto:tuto_block_multi_white_3_false", "tuto:tuto_block_multi_black_0_true", "tuto:tuto_block_multi_black_1_true", "tuto:tuto_block_multi_black_2_true", "tuto:tuto_block_multi_black_3_true", "tuto:tuto_block_multi_white_0_true", "tuto:tuto_block_multi_white_1_true", "tuto:tuto_block_multi_white_2_true", "tuto:tuto_block_multi_white_3_true");
       registerBlockTexture(Tuto.tutoStateMulti, 0, "tuto_block_multi_black_0_false");
       registerBlockTexture(Tuto.tutoStateMulti, 1, "tuto_block_multi_black_1_false");
       registerBlockTexture(Tuto.tutoStateMulti, 2, "tuto_block_multi_black_2_false");
       registerBlockTexture(Tuto.tutoStateMulti, 3, "tuto_block_multi_black_3_false");
       registerBlockTexture(Tuto.tutoStateMulti, 4, "tuto_block_multi_black_0_true");
       registerBlockTexture(Tuto.tutoStateMulti, 5, "tuto_block_multi_black_1_true");
       registerBlockTexture(Tuto.tutoStateMulti, 6, "tuto_block_multi_black_2_true");
       registerBlockTexture(Tuto.tutoStateMulti, 7, "tuto_block_multi_black_3_true");      
       registerBlockTexture(Tuto.tutoStateMulti, 8, "tuto_block_multi_white_0_false");
       registerBlockTexture(Tuto.tutoStateMulti, 9, "tuto_block_multi_white_1_false");
       registerBlockTexture(Tuto.tutoStateMulti, 10, "tuto_block_multi_white_2_false");
       registerBlockTexture(Tuto.tutoStateMulti, 11, "tuto_block_multi_white_3_false");
       registerBlockTexture(Tuto.tutoStateMulti, 12, "tuto_block_multi_white_0_true");
       registerBlockTexture(Tuto.tutoStateMulti, 13, "tuto_block_multi_white_1_true");
       registerBlockTexture(Tuto.tutoStateMulti, 14, "tuto_block_multi_white_2_true");
       registerBlockTexture(Tuto.tutoStateMulti, 15, "tuto_block_multi_white_3_true");

Grâce à ceci, on enregistre le model de notre bloc en fonction de la metadata.

Les noms et les textures :

Pour les noms, c’est très simple. Les blocs où l’on voudra qu’ils aient un nom différent entre chaque state possèdent la fonction : “getUnlocalizedName(int metadata)”. Dans cette fonction allez voir le return. Ensuite, dans votre fichier lang. Dans le fichier lang mettez :

tile.

Juste après le tile. il vous suffira de mettre le nom de chaque metadata. Pour mon bloc TutoStateEnum, le String qui est retourné par la fonction est :

super.getUnlocalizedName() + "." + EnumType.getStateFromMeta(metadata).getName();

Décomposez c’est donc le nom du bloc (par le setUnlocalizedName(name)), suivi d’un “.” et du nom par raport à la metadata. Soit : “tuto_block_enum.variant_1” pour la metadata de la variant_1 et “tuto_block_enum.variant_2” pour la seconde variante. Enfin, après ceci ajoutez :

.name=

Et juste après le “=” le nom que vous voulez. Vous pouvez, en cas d’erreur, regarder le nom du bloc en jeu, car on a le nom brute qui vient du getUnlocalizedName() (donc vous pouvez mettre le nom que vous avez en jeu suivi de “=” puis le vrai nom). Pour mon bloc des enum :

tile.tuto_block_enum.variant_2.name=Tuto Block Enum Var1
tile.tuto_block_enum.variant_2.name=Tuto Block Enum Var2

Donc en jeu mes noms seront “Tuto Block Enum Var1” et “Tuto Block Enum Var2”. N’oubliez pas qu’on fait ceci uniquement pour les blocs qui auront des noms différents en fonction de leur metadata. Sinon c’est la même méthode que d’habitude (Pour savoir ceux qui sont normaux, c’est ceux qui n’ont pas la fonction getUnlocalizedName(metadata) et que nous n’avons pas enregistré avec le ItemBlock). Voici le contenu de mon .lang pour tous mes blocs (à titre d’exemple pour vous aider):
:::

tile.tuto_block_enum.variant_1.name=Tuto Block Enum Var1
tile.tuto_block_enum.variant_2.name=Tuto Block Enum Var2

tile.tuto_block_bool1.true.name=Tuto Block Bool1 True
tile.tuto_block_bool1.false.name=Tuto Block Bool1 False

tile.tuto_block_bool.name=Tuto Block Bool

tile.tuto_block_integer.0.name=Tuto Block Integer 0
tile.tuto_block_integer.1.name=Tuto Block Integer 1
tile.tuto_block_integer.2.name=Tuto Block Integer 2
tile.tuto_block_integer.3.name=Tuto Block Integer 3

tile.tuto_block_boolenum.variant_1.true.name=Tuto Block BoolEnum Var1 True
tile.tuto_block_boolenum.variant_1.false.name=Tuto Block BoolEnum Var1 False
tile.tuto_block_boolenum.variant_2.true.name=Tuto Block BoolEnum Var2 True
tile.tuto_block_boolenum.variant_2.false.name=Tuto Block BoolEnum Var2 False

tile.tuto_block_boolinteger.0.true.name=Tuto Block BoolInteger 0 True
tile.tuto_block_boolinteger.0.false.name=Tuto Block BoolInteger 0 False
tile.tuto_block_boolinteger.1.true.name=Tuto Block BoolInteger 1 True
tile.tuto_block_boolinteger.1.false.name=Tuto Block BoolInteger 1 False
tile.tuto_block_boolinteger.2.true.name=Tuto Block BoolInteger 2 True
tile.tuto_block_boolinteger.2.false.name=Tuto Block BoolInteger 2 False
tile.tuto_block_boolinteger.3.true.name=Tuto Block BoolInteger 3 True
tile.tuto_block_boolinteger.3.false.name=Tuto Block BoolInteger 3 False

tile.tuto_block_direction.name=Tuto Block Direction

tile.tuto_block_axis.name=Tuto Block Axis

tile.tuto_block_multi.black.name=Tuto Block Multi Black
tile.tuto_block_multi.white.name=Tuto Block Multi White

:::
Maintenant, nous avons nos noms qui sont enregistrés. Cependant, nos blocs ne possèdent pas de texture. Nous allons leur en donner une. Nous allons voir qu’il y a 3 .json à créer en plus de notre texture. Je vais donc vous montrer le fonctionnement de ces .json. Je ne les ferai pas tous avec vous car j’en ai environ 100 (pour ce tutoriel). Commencez par créer un dossier “blockstates” dans le dossier “assets/modid”, dans le répertoire “assets/modid”, créez un autre dossier “models” avec dedans deux sous-dossiers: “block” et “item”. Dans le dossier des assets toujours, créez un dossier : “textures/blocks”. Maintenant, pour créer les textures d’un bloc, créez un .json dans le dossier blockstates avec pour nom le paramètre String (name) du register de votre bloc (GameRegistry.registerBlock(tutoStateEnum, ItemBlockTutoState.class, “tuto_block_enum”);) Dès lors que votre bloc aura des states, l’organisation du .json sera pareil pour tous.

{
   "variants": {
       "variant=variant_1": {"model": "tuto:tuto_block_enum_variant_1" },
       "variant=variant_2": {"model": "tuto:tuto_block_enum_variant_2" }
   }
}

Donc, ceci est le contenu du .json, dans les variants, vous aurez à mettre, le nom de votre property suivi de “=” + votre valeur ici : “variant=variant_1”. Ensuite dans les accolades, le “model” sert à définir quel est le model du bloc, dans les guillemets, le chemin du model. Pour l’accès du model oubliez pas le : “modid:” + leNomDeVotreJson.

À titre d’exemple voici le json du multistate :

{
   "variants": {

       "color=0,dark=black,powered=true": {"model": "tuto:tuto_block_multi_black_0_true" },
       "color=1,dark=black,powered=true": {"model": "tuto:tuto_block_multi_black_1_true" },
       "color=2,dark=black,powered=true": {"model": "tuto:tuto_block_multi_black_2_true" },
       "color=3,dark=black,powered=true": {"model": "tuto:tuto_block_multi_black_3_true" },
       "color=0,dark=black,powered=false": {"model": "tuto:tuto_block_multi_black_0_false" },
       "color=1,dark=black,powered=false": {"model": "tuto:tuto_block_multi_black_1_false" },
       "color=2,dark=black,powered=false": {"model": "tuto:tuto_block_multi_black_2_false" },
       "color=3,dark=black,powered=false": {"model": "tuto:tuto_block_multi_black_3_false" },
       "color=0,dark=white,powered=false": {"model": "tuto:tuto_block_multi_white_0_false" },
       "color=1,dark=white,powered=false": {"model": "tuto:tuto_block_multi_white_1_false" },
       "color=2,dark=white,powered=false": {"model": "tuto:tuto_block_multi_white_2_false" },
       "color=3,dark=white,powered=false": {"model": "tuto:tuto_block_multi_white_3_false" },
       "color=0,dark=white,powered=true": {"model": "tuto:tuto_block_multi_white_0_true" },
       "color=1,dark=white,powered=true": {"model": "tuto:tuto_block_multi_white_1_true" },
       "color=2,dark=white,powered=true": {"model": "tuto:tuto_block_multi_white_2_true" },
       "color=3,dark=white,powered=true": {"model": "tuto:tuto_block_multi_white_3_true" }
   }
}

Maintenant allez créer un json dans le dossier “models/block” puis créez un fichier avec pour nom, le nom d’accès dans le fichier json du dossier blockstate. (il faut le faire pour toutes les states). Pour la variant_1 de mon bloc des enum, mon fichier se nommera “tuto_block_enum_variant_1”. Dans ce fichier nous allons mettre :

{
   "parent": "block/cube_all",
   "textures": {
           "all": "tuto:blocks/block_enum_var1"
   }
}

La ligne parent sera sur quoi le model du bloc se base, pour celui-ci ce sera le model “cube_all” de minecraft (le “blocks/” car le dossier pris en compte est “models/”, donc ça permet de signifier qu’on se trouve dans le dossier “blocks”). Ensuite, dans le bloc texture nous définissons la texture, la ligne “all” permet de mettre la texture pour toutes les faces. Notre texture se trouvera dans le répertoire : “textures/blocks/NomDeLaTexture”, n’oubliez pas de mettre “modid:” pour dire qu’on se trouve dans vos assets. Pour ce bloc la texture sera nommée “block_enum_Dvar1”, notez qu’il ne faut pas mettre les extensions “.png” dans les json. Après cela, dans le répertoire “models/item” mettez un json du même nom que le json du dossier “models/block” (regardez aussi quel est le nom que vous avez mis dans l’enregistrement des textures et modifiez le s’il doit l’être). Dans ce json ajoutez :

{
   "parent": "tuto:block/tuto_block_enum_variant_1",
   "display": {
       "thirdperson": {
           "rotation": [ 10, -45, 170 ],
           "translation": [ 0, 1.5, -2.75 ],
           "scale": [ 0.375, 0.375, 0.375 ]
       }
   }
}

Déjà, “parent”, tout comme au-dessus, signifie la base du model. Ensuite, dans le bloc display on trouve toutes les options de l’affichage. Pour plus de détails allez voir sur des tutoriels à propos du sujet. Allez dans votre dossier des textures et créez la texture (.png) avec pour nom celui que vous avez mis dans le bloc texture du json. Sachez que pour que minecraft lise la texture il faut qu’elle soit à un format d’une base de deux (22, 44, 88, 1616, 32*32…). Maintenant, lancez votre jeu et admirez votre bloc.

Avant de passer à la suite nous allons faire un petit bilan :

Bonus

Nous voilà au bonus ! Normalement si vous êtes là c’est que vous n’avez pas rencontré de problème. Venons en au sujet principal qui répondra aussi à la question : “Qu’allons-nous faire ?”, j’y répondrai assez simplement, on va alléger notre code. Vous avez dû remarquer à quel point il est pénible de faire les ItemBlock (non on n’allègera pas les json, mais sachez qu’il existe des logiciels pour ça). Pour se faire, créez une interface :

public interface ITutoBlockState
{

}

ajoutez :

public String getUnlocalizedName(int metadata);

Maintenant, dans toutes les classes des blocs qui sont enregistrées avec l’ItemBlockCustom implementez cette interface. Vous ne devriez pas avoir de problème car les blocs qui utilisent un ItemBlockCustom possèdent la fonction getUnlocalizedName(meta).

implements ITutoBlockState

Nous allons maintenant créer un ItemBlock à nous et qui sera utilisé pour tous vos blocs. Je ne remontre pas les bases.

private ITutoBlockState blockState;

Une fois que vous avez déclaré votre variable, créez la fonction :

   @Override
   public String getUnlocalizedName(ItemStack stack)
   {
       blockState = (ITutoBlockState)this.block;
       return blockState.getUnlocalizedName(stack.getMetadata());
   }

Maintenant, vous avez un seul ItemBlock et vous n’avez plus à vous embêter.

Résultat



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

retourSommaire des tutoriels