Les metadata d'item
-
Tout comme les blocs, il est possible de faire des metadata avec les items. Si vous maîtrisez les metadata de bloc, ceux des items seront facile pour vous. En effet, le principe est le même.
Une chose à savoir, les metadata correspondent au “damage”. Des items en metadata ne sont donc pas “damageable”. Vous ne pouvez pas faire d’arc, outils, ou autre item qui s’use avec des metadataDans la classe principale
Créé un item comme un item basique, mais ne mettez pas la fonction pour la texture :
public static Item ItemTutorial, ItemWithMetadata;
ItemWithMetadata = new ItemWithMetadata(12001).setUnlocalizedName("ItemWithMetadata");
GameRegistry.registerItem(ItemWithMetadata, "ItemWithMetadata", "ModTutoriel");
Pour la description de ces codes, allez voir le tutoriel sur les items basique.
Créez la classe de l’item
La classe de l’item
Même chose, faite comme si c’était un item basique :
package tutoriel.common; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; public class ItemWithMetadata extends Item { public ItemWithMetadata(int id) { super(id); this.setCreativeTab(CreativeTabs.tabMaterials); } }
Maintenant ajoutez les mêmes méthode que nous avons mit dans l’itembloc (tutoriel sur les metadata de bloc) :
public int getMetadata(int metadata) { return metadata; } public String getUnlocalizedName(ItemStack stack) { int metadata = stack.getItemDamage(); if(metadata > type.length || metadata < 0) { metadata = 0; } return super.getUnlocalizedName() + "." + type[metadata]; }
getMetadata est pour obtenir le bon metadata (si vous mettez pas cette fonction le return sera sur 0 comme dans la classe Item.java)
getUnlocalizedName est la pour obtenir un nom non localisé en fonction du tableau type.
D’ailleurs nous avons pas encore créer le tableau type, donc il y a une erreur sur cette fonction pour l’instant, créez le tableau type et en même temps ajoutez “this.setHasSubtypes(true);” dans le constructeur (sert à signaler que l’item à des metadata, si vous ne le mettez pas les items de metadata différent vont se stacker entre eux) :private String[] type = new String[]{"item1", "item2", "item3", "item4"}; private Icon[] IconArray; public ItemWithMetadata(int id) { super(id); this.setCreativeTab(CreativeTabs.tabMaterials); this.setHasSubtypes(true); }
À l’inverse des metadata de bloc, vous n’êtes pas limité à 16 pour les items. Vous pouvez donc créer beaucoup plus d’item sur un metadata (je ne connais pas la limite)
J’ai également rajouté l’iconArray pour les textures. Les autres méthodes que nous allons ajoutez sont très semblable aux méthode que nous avons utilisés pour les metadata de bloc :public void registerIcons(IconRegister iconregister) { IconArray = new Icon[type.length]; for(int i = 0; i < type.length; i++) { IconArray[i] = iconregister.registerIcon("modtutoriel:" + type[i]); } } @SideOnly(Side.CLIENT) public void getSubItems(int id, CreativeTabs creativeTabs, List list) { for(int metadata = 0; metadata < type.length; metadata++) { list.add(new ItemStack(id, 1, metadata)); } } @SideOnly(Side.CLIENT) public Icon getIconFromDamage(int metadata) { return metadata < type.length && metadata >= 0 ? IconArray[metadata] : IconArray[0]; }
Le fonctionnement est le même que getSubBlocks et getIcon, si vous ne vous souvenez plus de l’utilité de chaque code, retournez voir le tutoriel sur les metadata de bloc
Les ressources du bloc (texture + nom)
Dans votre dossier forge/mcp/src/minecraft/assets/modid/textures/items créez le fichier .png en fonction du nom que vous avez mit dans le tableau “type”.
Pour les noms, c’est le même principe que pour les blocs en metadata :
item.<le nom danssetunlocalizedname(“”)>.<le nom dans le tableau type>.name=le nom localisé
Exemple :item.ItemWithMetadata.item1.name=Item With Medatada 1 item.ItemWithMetadata.item2.name=Item With Medatada 2 item.ItemWithMetadata.item3.name=Item With Medatada 3 item.ItemWithMetadata.item4.name=Item With Medatada 4
(à mettre dans forge/mcp/src/minecraft/assets/votre mod id/lang/en_US.lang)
Rendu final
Voir les changements sur Github
(texture fait en 5 secondes)