Maintenant que vous savez faire des items basique, nous allons voir comment faire une armure.
Dans la classe principale
Pour commencer, il faut déclarer les quatre items :
public static Item TutorialHelmet, TutorialChestPlate, TutorialLeggings, TutorialBoots;
En dessous, nous allons déclarer le matériel de l’armure :
static EnumArmorMaterial TutorialArmor = EnumHelper.addArmorMaterial("Tutorial", 20, new int[]{2, 8, 4, 2}, 15);
Chaque code correspond à :
EnumHelper.addArmorMaterial(“nom du matériel”, durabilité de l’armure, new int[]{absorption du casque, du plastron, des jambières, des bottes}, facilité d’enchantement)
Faite un ctrl + clic sur EnumArmorMaterial pour ouvrir la classe si vous souhaitez avoir les valeurs des armures de Minecraft.
N’oubliez pas d’importer net.minecraft.item.EnumArmorMaterial et net.minecraftforge.common.EnumHelper
À la suite de vos item, ajoutez les quatre morceaux de l’armure :
TutorialHelmet = new ItemTutorialArmor(12002, TutorialArmor, 0,0).setUnlocalizedName("TutorialHelmet").setTextureName("modtutoriel:HelmetTutorial");
TutorialChestPlate = new ItemTutorialArmor(12003, TutorialArmor, 0, 1).setUnlocalizedName("TutorialChestPlate").setTextureName("modtutoriel:ChestPlateTutorial");
TutorialLeggings = new ItemTutorialArmor(12004, TutorialArmor, 0, 2).setUnlocalizedName("TutorialLeggings").setTextureName("modtutoriel:LeggingsTutorial");
TutorialBoots = new ItemTutorialArmor(12005, TutorialArmor, 0, 3).setUnlocalizedName("TutorialBoots").setTextureName("modtutoriel:BootsTutorial");
Comme vous pouvez le voir, nous allons utiliser une seul classe pour les quatre pièces d’armures. Vous devrez connaître tout le code, puisque c’est le même qu’un item basique sauf pour le constructeur :
ItemTutorialArmor(12002, TutorialArmor, 0,0)
12002 est l’id, TutorialArmor est le nom de l’EnumArmorMaterial que nous avons déclaré au dessus, le premier 0 n’a aucun intérêt pour nous, il n’est que utilisé pour les amures de Minecraft, dans notre cas il sert juste à éviter une erreur dans le constructeur que nous allons créer après dans la classe de l’armure. Laissez 0, si vous mettez un nombre supérieur à 4 vous allez avoir un crash. Le second 0 est correspond à morceau de l’armure, 0 pour un casque, 1 pour le plastron, 2 pour les jambières, et 3 pour les bottes.
Optionnel, enregistrez vos items à la suite (je répète que ce n’est que pour l’itemTracker de FML, ces codes ne sont pas obligatoire) :
GameRegistry.registerItem(TutorialHelmet, "TutorialHelmet", "ModTutoriel");
GameRegistry.registerItem(TutorialChestPlate, "TutorialChestPlate", "ModTutoriel");
GameRegistry.registerItem(TutorialLeggings, "TutorialLeggings", "ModTutoriel");
GameRegistry.registerItem(TutorialBoots, "TutorialBoots", "ModTutoriel");
Il vous reste une erreur sur new ItemTutorialArmor, créez cette classe
La classe de l’armure
Comme d’habitude, ajoutez l’extends et le constructeur. En revanche, à la place de faire un extends Item, faite un extends ItemArmor :
package tutoriel.common;
import net.minecraft.item.ItemArmor;
public class ItemTutorialArmor extends ItemArmor
{
public ItemTutorialArmor(int id, EnumArmorMaterial armorMaterial, int type, int layer)
{
super(id, armorMaterial, type, layer);
}
}
Ensuite, ajoutez la fonction getArmor :
public String getArmorTexture(ItemStack stack, Entity entity, int slot, int layer)
{
if(stack.itemID == ModTutoriel.TutorialLeggings.itemID)
{
return "modtutoriel:textures/models/armor/tutorial_layer_2.png";
}
else
{
return "modtutoriel:textures/models/armor/tutorial_layer_1.png";
}
}
Le code est simple à comprendre, si l’id de l’item est l’id des jambières, il utilise la texture tutorial_layer_2. Sinon, c’est les autres parti de l’armure, donc il utilise la texture tutorial_layer_1
D’ailleurs, nous avons vu avant que le layer des jambières est 2, donc ce code fonctionne aussi :
public String getArmorTexture(ItemStack stack, Entity entity, int slot, int layer)
{
if(layer == 2)
{
return "modtutoriel:textures/models/armor/tutorial_layer_2.png";
}
else
{
return "modtutoriel:textures/models/armor/tutorial_layer_1.png";
}
}
Mais le premier code est plus avantageux, car on peut mettre plusieurs armures dans la même classe, exemple avec deux armures :
public String getArmorTexture(ItemStack stack, Entity entity, int slot, int layer)
{
if(stack.itemID == ModTutoriel.TutorialLeggings.itemID)
{
return "modtutoriel:textures/models/armor/tutorial_layer_2.png"; //armure 1, jambières
}
else if(stack.itemID == ModTutoriel.TutorialHelmet.itemID || stack.itemID == ModTutoriel.TutorialChestPlate.itemID || stack.itemID == ModTutoriel.TutorialBoots.itemID)
{
return "modtutoriel:textures/models/armor/tutorial_layer_1.png"; //armure 1, casque + plastron + bottes
}
else if(stack.itemID == ModTutoriel.TutorialLeggings2.itemID)
{
return "modtutoriel:textures/models/armor/tutorial2_layer_2.png"; //armure 2, jambières
}
else
{
return "modtutoriel:textures/models/armor/tutorial2_layer_2.png"; //armure 2, casque + plastron + bottes
}
}
Pour le chemin de texture, modtutoriel correspond à mon modid sans majuscule, et le reste est le chemin exacte après /assets/modid/
Vous n’êtes pas obligé d’utiliser le même que moi, mais celui-ci est le même que minecraft (Minecraft a les textures d’armures dans assets/minecraft/textures/models/armor/)
Pour rendre votre armure réparable dans une enclume ajoutez ce code dans la classe :
public boolean getIsRepairable(ItemStack stack, ItemStack repairItem)
{
if(stack.getItem().equals(this) && repairItem.getItem().itemID == ModTutoriel.TutorialMetadata.itemID)
return true;
return false;
}
ModTutoriel.TutorialMetadata et l’item avec lequel le l’armure peut être réparé.
Les ressources de l’item (texture + nom)
Pour les textures des items, c’est le même principe qu’un item basique, il faut les mettre dans forge/mcp/src/minecraft/assets/modid/textures/items/
Pour les textures des modèles de l’amure, placez-les dans forge/mcp/src/minecraft/assets/modid/textures/models/armor/
Si vous avez besoin de texture de base pour les modèles :
https://github.com/MCNanotech/ModTutoriel/blob/master/assets/modtutoriel/textures/models/armor/tutorial_layer_1.png
https://github.com/MCNanotech/ModTutoriel/blob/master/assets/modtutoriel/textures/models/armor/tutorial_layer_2.png
Pour les noms, c’est comme un item basique, item.nomnonlocalisé.name=nom localisé
item.TutorialHelmet.name=Tutorial Helmet
item.TutorialChestPlate.name=Tutorial Chestplate
item.TutorialLeggings.name=Tutorial Leggings
item.TutorialBoots.name=Tutorial Boots
Dans mon cas.
Rendu final
Voir les changements sur Github
ho, player911 a un skin !