Pour l’exemple, nous allons mettre en place un vendeur de fruits décoratifs. Il s’agit en fait de têtes personnalisées.
Invocation
Commençons par créer la fonction d’invocation du Villageois. Dans le dossier des fonctions de la boutique, je créé un dossier villagers. Il contiendra les fonctions pour invoquer les vendeurs. Je créé ensuite la fonction fruits, pour un vendeur de fruits.
La commande d’invocation est assez simple :
summon villager ~ ~1 ~
Nous invoquons simplement un villageois à l’endroit où est lancée la fonction avec la commande :
/function mangarmor:shop/villagers/fruits
Personnalisations maintenant le villageois. Nous pouvons continuer la commande avec des données de villageois. Celles-ci peuvent définir sa profession, son niveau de métier ainsi que son biome. Pour aider à choisir, on peut consulter la liste des vêtements sur le wiki Minecraft.
summon villager ~ ~1 ~ {VillagerData:{profession:farmer, level:5, type:plains}}
Pour simplifier la génération de la commande, on peut utiliser des sites comme DigMinecraft ou Minecraft Command Science.
Décoration : la pomme
J’utilise DigMinecraft pour générer la commande. Minecraft Command Science propose d’autres options mais la commande générée n’est pas compatible avec Minecraft 1.16.
J’indique donc une offre pour échanger 5 émeraudes contre une tête de joueur. Nous indiquerons plus tard la texture pour obtenir une pomme. Voici la commande générée :
summon villager ~ ~1 ~ {VillagerData: profession:farmer, level:5, type:plains}, Invulnerable:1, PersistenceRequired:1, CustomName:"Fruits", Offers:{Recipes:[{buy:{id:emerald,Count:5}, sell:{id:player_head,Count:1,tag:{display:{Name:"\"Pomme\""}}}, rewardExp:0b, maxUses:9999999}]}}
Il est temps de chercher une tête en forme de pomme. Pour cela, j’utilise le site Minecraft Heads. Voici le code indiqué pour Minecraft 1.16 :
/give @p minecraft:player_head{display:{Name:"{\"text\":\"Apple\"}"}, SkullOwner:{Id:[I;1773962895,-939242600,-1676573066,1848849180], Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTIxMTI3ZDIyNjc1YzVjNzY5YTBjMDhiNTcyMDE4ZDI5OWM4MzA0NmY4ZTFmOTQzZWQ5ZDUxYmUwM2IwNyJ9fX0="}]}}} 1
Ce qui nous intéresse ici, c’est la partie SkullOwner. Elle comporte un id et surtout les textures de la tête. Nous allons copier toute la partie SkullOwner dans la commande d’invocation du vendeur, dans la partie tag, juste après le display.
summon villager ~ ~1 ~ {VillagerData:{profession:farmer, level:5, type:plains}, Invulnerable:1, PersistenceRequired:1, CustomName:"Fruits", Offers:{Recipes:[{buy:{id:emerald,Count:5}, sell:{id:player_head,Count:1,tag:{display:{Name:"{\"text\":\"Pomme\"}"}, SkullOwner:{Id:[I;1773962895,-939242600,-1676573066,1848849180], Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTIxMTI3ZDIyNjc1YzVjNzY5YTBjMDhiNTcyMDE4ZDI5OWM4MzA0NmY4ZTFmOTQzZWQ5ZDUxYmUwM2IwNyJ9fX0="}]}}}},rewardExp:0b,maxUses:9999999}]}}
Décoration : la pêche
Comme pour la pomme, nous allons ajouter une offre. Pour cela, je copie l’offre de la pomme. Je change le nom en pêche et modifie l’id et les textures par ceux trouvés sur Minecraft Heads. J’ajoute donc ce bloc de code dans les offres :
{buy:{id:emerald,Count:5}, sell:{id:player_head,Count:1,tag:{display:{Name:"{\"text\":\"Pêche\"}"}, SkullOwner:{Id:[I;436418374,257114978,-1779699401,1303019964], Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg0MDRjZmU3YWQxMTY2ODFiNDg1MGI4OTk5OGFjZjAzY2ViZTQ2ODVjYzc2NjM4OTMwNjUyZGM0YWZjMzc2MiJ9fX0="}]}}}},rewardExp:0b,maxUses:9999999}
Persistance et immobilité
Comme tu as pu le remarquer, le villageois est invulnérable et ne peut pas disparaître. Toutefois, il court partout. Pour l’empêcher de bouger, on peut cocher la case NoAI du générateur. Cela ajoutera le paramètre NoAI:1 à la commande. Le villageois sera incapable de bouger mais ne sera pas soumis à la gravité.
Une autre solution est de rendre nulle la vitesse de déplacement du villageois. Pour cela, on passe l’attribut movement_speed à 0 en ajoutant cette petite ligne :
Attributes:[{Name:"generic.movement_speed",Base:"0f"}]
Voici donc le code complet de mon vendeur :
summon villager ~ ~1 ~ {VillagerData:{profession:farmer,level:5,type:plains}, Invulnerable:1, PersistenceRequired:1, Attributes:[{Name:"generic.movement_speed",Base:"0f"}], CustomName:"Fruits", Offers:{Recipes:[{buy:{id:emerald,Count:5}, sell:{id:player_head,Count:1,tag:{display:{Name:"{\"text\":\"Pomme\"}"}, SkullOwner:{Id:[I;1773962895,-939242600,-1676573066,1848849180],Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTIxMTI3ZDIyNjc1YzVjNzY5YTBjMDhiNTcyMDE4ZDI5OWM4MzA0NmY4ZTFmOTQzZWQ5ZDUxYmUwM2IwNyJ9fX0="}]}}}},rewardExp:0b,maxUses:9999999}, {buy:{id:emerald,Count:5}, sell:{id:player_head,Count:1,tag:{display:{Name:"{\"text\":\"Pêche\"}"}, SkullOwner:{Id:[I;436418374,257114978,-1779699401,1303019964], Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzg0MDRjZmU3YWQxMTY2ODFiNDg1MGI4OTk5OGFjZjAzY2ViZTQ2ODVjYzc2NjM4OTMwNjUyZGM0YWZjMzc2MiJ9fX0="}]}}}},rewardExp:0b,maxUses:9999999}]}}
Il ne me reste plus qu’à créer d’autres vendeurs avec de nouvelles fonctions. Pour ajouter le vendeur dans ma boutique, j’utilise la commande indiquée en début d’article :
/function mangarmor:shop/villagers/fruits
Téléchargement
Le datapack est disponible au téléchargement. Il contient un deuxième vendeur qui échange également un objet contre des émeraudes.
2 réponses
Salut 🙂
Merci pour ces tutos. Je me suis lancé récemment dedans et ils m’aident pas mal.
Serait-il possible d’en avoir un concernant le vendeur itinérant?
Ses ventes sont toujours a chier et je voudrais personnaliser un peu le truc.
Merci
Bonjour,
Je suis heureux que mes articles te soient utiles. J’avais effectivement prévu un sujet sur le Wandered trader mais j’ai préféré traiter des progrès et de la génération de terrain avant. J’ai fais une pause dans la rédaction des articles manquant d’idées de sujets. Je note donc ça pour le prochain article qui devrait paraître le mercredi 7 octobre.