Aller au contenu principal
Version: 1.20.x

Propriétés de modèle

Disponibles depuis la 1.9, les propriétés de modèle (anciennement appelées models predicates) permettent de changer le modèle d'un item dynamiquement.

Enregistrer l'item comme ayant un modèle variable

Le rendu des items se faisant côté client, nous aurons besoin d'exécuter le code suivant dans la fonction client de la classe principale (celle-ci doit avoir un paramètre de type FMLClientSetupEvent) :

ItemProperties.register(Items.TEST_SIMPLE_ITEM_ONE.get(), new ResourceLocation("modid", example_property"), (stack, level, livingEntity, id) -> {
return stack.getOrCreateTag().getBoolean("tag") ? 1.0f : 0.0f;
});

Ici dans cet exemple, l'item (premier paramètre) qui comportera un modèle variable sera un item de test (mais il est possible de changer celui-ci par l'item de votre choix). En second, nous avons l'identifiant de la propriété qui sera utilisé dans le fichier modèle de l'item. Le troisième quant à lui permet de retourner une valeur flottante (généralement comprise entre 0 et 1) qui sera utilisé après dans le modèle de l'item (en ayant accès à certaines variables comme l'item, le monde, l'entité tenant l'item, etc...).

Dans ce cas précis, notre propriété se nomme modid:example_property et sa valeur varie entre 0 et 1 selon si l'item en question possède un tag tag de valeur true ou non, si c'est le cas la propriété tag aura pour valeur 1, sinon 0.

Modèle

{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "modid:item/example_item"
},
"overrides": [
{
"predicate": {
"modid:example_property": 1.0
},
"model": "modid:item/example_item_with_property"
}
]
}

Ici, nous nous intéresserons au champ overrides (les champs au-dessus sont à connaitre, car ils servent à définir le modèle d'un item de base) qui dans notre cas contient un seul élément (mais il peut y en avoir plusieurs). Celui-ci vérifie si la propriété modid:example_property (que nous avons enregistré tout à l’heure) a pour valeur 1 (donc si l’item que nous tenons possède le tag tag et si celui-ci à pour valeur true), si c’est le cas alors le modèle de l’item deviendra modid:item/example_item_with_property sinon son modèle restera modid:item/example_item.