User Tools

Site Tools


fr:tutoriel:objets

Ajouter un objet

Introduction

Ajout un objet de base est l'une des premières étapes du modding. Vous allez devoir créer un objet Item, l'enregistrer, et lui donner une texture. Pour ajouter un comportement supplémentaire à l'objet, vous aurez besoin d'une classe d'objet personnalisée. Dans ce tutoriel et tous ceux à venir, l'espace de noms tutorial est utilisé comme un espace de noms générique. Si vous avez un ID de mod différent, n'hésitez pas à l'utiliser à la place.

Enregistrer un objet

Premièrement, créez une instance de Item. Nous allons la stocker en haut de notre classe d'initialisation. Le constructeur contient un objet Item.Settings, qui est utilisé pour définir les propriétés de l'objet telles que la catégorie d'inventaire, la durabilité et le nombre d'objets par stack.

  1. public class ExampleMod implements ModInitializer
  2. {
  3. // une instance de notre nouvel objet
  4. public static final Item FABRIC_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC));
  5. [...]
  6. }

Vous allez utiliser le système de registre vanilla pour enregistrer du nouveau contenu. La syntaxe de base est Registry#register(type de registre, identifiant, contenu). Les types de registre sont stockés sous forme de champs statiques dans l'objet Registry, et l'identifiant est ce qui nomme votre contenu. Le contenu est une instance de ce que vous ajoutez. Cette instance peut être appelée n'importe où tant que cela se produit pendant l'initialisation.

  1. public class ExampleMod implements ModInitializer
  2. {
  3. // une instance de notre nouvel objet
  4. public static final Item FABRIC_ITEM = new Item(new Item.Settings().group(ItemGroup.MISC));
  5.  
  6. @Override
  7. public void onInitialize()
  8. {
  9. Registry.register(Registry.ITEM, new Identifier("tutorial", "fabric_item"), FABRIC_ITEM);
  10. }
  11. }

Votre nouvel objet a désormais été ajouté à Minecraft. Exécutez la tâche Gradle runClient pour le voir en jeu.

Ajouter une texture d'objet

Enregistrer une texture pour un objet nécessite un fichier .json de modèle d'objet et une image de texture. Vous aurez besoin de les ajouter dans votre répertoire resources. Le chemin direct de chacun est :

  Modèle de l'objet : .../resources/assets/tutorial/models/item/fabric_item.json
  Texture de l'objet : .../resources/assets/tutorial/textures/item/fabric_item.png

Notre exemple de texture peut être trouvé ici.

Si vous avez enregistré votre objet correctement lors de la première étape, votre jeu se plaindra d'un fichier de texture manquant d'une manière semblable à celle-ci :

  [Server-Worker-1/WARN]: Unable to load model: 'tutorial:fabric_item#inventory' referenced from: tutorial:fabric_item#inventory: java.io.FileNotFoundException: tutorial:models/item/fabric_item.json

Il vous indique simplement à quel endroit il s'attend à trouver votre fichier – en cas de doute, consultez le journal.

Voici un exemple de modèle d'objet de base :

{
  "parent": "item/generated",
  "textures": {
    "layer0": "tutorial:item/fabric_item"
  }
}

Le parent de votre objet change la façon dont il est rendu dans la main et est utile pour des choses telles que les blocs dans l'inventaire. item/handheld est utilisé pour les outils qui sont tenus par la partie en bas à gauche de la texture. textures/layer0 est l'emplacement de votre fichier de texture.

Résultat final avec la texture :

Créer une classe d'objet

Pour ajouter un comportement supplémentaire à l'objet, vous devrez créer une classe d'objet. Le constructeur par défaut nécessite un objet Item.Settings.

  1. public class FabricItem extends Item
  2. {
  3. public FabricItem(Settings settings)
  4. {
  5. super(settings);
  6. }
  7. }

Un cas d'utilisation pratique pour une classe d'objet personnalisée serait de jouer un son lorsque vous cliquez avec l'objet :

  1. public class FabricItem extends Item
  2. {
  3. public FabricItem(Settings settings)
  4. {
  5. super(settings);
  6. }
  7.  
  8. @Override
  9. public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand)
  10. {
  11. playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F);
  12. return new TypedActionResult<>(ActionResult.SUCCESS, playerEntity.getStackInHand(hand));
  13. }
  14. }

Remplacez l'ancien objet Item par une instance de votre nouvelle classe d'objet :

  1. public class ExampleMod implements ModInitializer
  2. {
  3. // une instance de notre nouvel objet
  4. public static final FabricItem FABRIC_ITEM = new FabricItem(new Item.Settings().group(ItemGroup.MISC));
  5. [...]
  6. }

Si vous avez tout fait correctement, utiliser l'objet devrait maintenant jouer un son.

Et si je veux changer la taille du stack de mon objet ?

Pour cela, vous devez utiliser maxCount(int taille) dans les paramètres de l'objet pour spécifier la taille maximale du stack. Notez que si votre objet est endommageable, vous ne pouvez pas spécifier une taille de stack maximale, ou le jeu enverra une RuntimeException.

  1. public class ExampleMod implements ModInitializer
  2. {
  3. // une instance de notre nouvel objet, où la taille de stack maximale est 16
  4. public static final FabricItem FABRIC_ITEM = new FabricItem(new Item.Settings().group(ItemGroup.MISC).maxCount(16));
  5. [...]
  6. }

Étapes suivantes

fr/tutoriel/objets.txt · Last modified: 2019/08/22 13:14 by yanis48