Détection d'item.


Categorie : Datapacks

Poster le : 2020-04-05 16:04:11 par

Hardel

Bonjour, dans ce guide nous allons voir comment détecter un item, dans l'inventaire, la main ou autre...
Nous verrons aussi comment effectuer une actions lors d'un clique droit.
Et pour finir nous verrons comment compter le nombre d'item dans l'inventaire.


Premièrement, nous allons détecter un simple diamond dans mon inventaire .
Il existe plusieurs méthode pouvant faire cela, mais principalement tous lié au /execute.

Nous allons commencer avec la plus basique des détection d'item; on va tout simplement regarder si le ou les joueurs possède l'item en main.

/execute if data entity @s SelectedItem{id:"minecraft:diamond"} run say Fonctionne !

La commande est très simple on va effectuer une vérification avec "if", puis ont veut vérifier des données donc "data", sur un joueur donc "entity" nous précisons l'entité avec un sélecteur, puis nous regardons la donnée à regarder, ensuite si cette condition renvoie vrai, on lance une commande avec le mot clef "run", puis derrière la commande de votre choix.

Nous ce qui va principalement nous intéresser aujourd'hui c'est les donnée a insérer après le sélecteur.
Ici on va venir regarder la Main, pour cela nous disposons d'une données prévue a cette effet nommée "SelectedItem", nous ouvrons les accolade pour y préciser l'identifiant de l'item.


Continuons avec une détection plus pousser, nous allons regarder si on possède le diamond dans notre inventaire.

/execute if data entity @s Inventory[{id:"minecraft:diamond"}] run say Fonctionne !

Pour regarder l'inventaire, Minecraft met a disposition le NBT nommée "Inventory", ce NBT est une liste, elle nécessite donc des crochets.


Allons plus loin, nous voulons détecter un items unique dans le monde, pour cela nous aurrons besoin de ce "/give" un item unique, nous utiliseront les Custom NBT.

/give @s diamond{Hardel:true,HardelFR:[{Foo:bar},{Test:1},{Lorem:{Impsum:Todo}}]}

Grâce a cette commande j'y ai insérer un tonne de Custom NBT. qui nous servirons dans la suite des test.
Une choses a savoir vous pouvais mettre tous ce que voulait, cependant les deux petits points sont obligatoire.
Pour insérer plusieurs Custom NBT, il faut les séparer par une virgule.


Donc maintenant qu'on possède un item unique, que les joueurs ne survie ne peuvent obtenir naturellement.
On va essayer de le détecter.

/execute if data entity @s Inventory[{id:"minecraft:diamond"}].tag{Hardel:true} run say Fonctionne !
/execute if data entity @s Inventory[{id:"minecraft:diamond",tag:{Hardel:true}}] run say Fonctionne !

Ces deux méthode font la même choses a vous de choisir laquelle vous préférer utiliser.
Ici on va venir regarder si l'item possède un NBT, du diamant, il n'est pas nécessaire de regarder tout les NBT, seulement un suffit.


Nous pouvons aussi détecter un items dans un certain emplacement :

/execute if data entity @s Inventory[{id:"minecraft:diamond",Slot:0b,tag:{Hardel:true}}] run say Fonctionne !

Grâce au mot clef "Slot" puis en indiquant le numéro de l'emplacement nous pouvons effectuer en vérification.
Voici le numéro des différent "Slot".

En regardant cela vous venez de remarquer deux choses :

  • La détection des armures est possible.
  • La détection des items de la seconde main est aussi possible.
/execute if data entity @s Inventory[{id:"minecraft:diamond",Slot:-106b,tag:{Hardel:true}}] run say Fonctionne !
/execute if data entity @s Inventory[{id:"minecraft:diamond_helmet",Slot:103b}] run say Fonctionne !

Ok ,parfait vous commencer a être pas mal.

Maintenant nous allons compter le nombre d'item dans l'inventaire d'un joueurs, et l'afficher dans un scoreboard.
Commencent par créer un socreboard simple.

/scoreboard objectives add HardelFr dummy
/scoreboard objectives setdisplay sidebar HardelFr

La première permet de créer un tableau de score du type "dummy" c'est a dire modifiable que par commandes.
La seconde commande permet de l'afficher a droite de l'écran.
Voici la commande qui permet de compter :

/execute as @a store result score @s HardelFr run clear @s minecraft:diamond{Hardel:true} 0

On va exécuter sur tout les joueurs, un stockage dans le score HardelFr, et la valeur a stocker est le résultat de la commande  "clear", vu qu'on clear 0, aucun item seras supprimer.
Vous pouvez préciser un groupe d'item, avec #.

/execute as @a store result score @s HardelFr run clear @s #minecraft:beds 0

Cette commande va compter tout les lit, peut importe la couleurs, il est aussi possible de créer vos propre groupes, un autre guide porteras sur ce sujet dans le futur.


Bien, vous commencer a être vraiment pas mal, allons encore plus loin essayons de détecter un clique droit, pour effectuer une action.
A noter que cette technique ne fonctionne que pour les "carotte sur un bâton "et  sur les "Warped Funus sur un bâton"

Pour cela y'a pas de NBT prévue a cette effets, cela va donc être plus dur, nous utiliserons un type de score.

/scoreboard objectives add RC minecraft.used:minecraft.carrot_on_a_stick
/scoreboard objectives add RC minecraft.used:minecraft.warped_fangus_on_a_stick

Ces scoreboard vont s'incrémenter a chaque clique droit, sur un de ces deux bâton.
Ensuite en répétition nous ferrons ceci

/execute as @a[scores={RC=1..}] if data entity @s SelectedItem.tag{HardelFr:true} run effect give @s minecraft:instant_health 1 0 true
/scoreboard players set @a[scores={RC=1..}] RC 0

A chaque clique droit sur ce bâton le joueurs reversas un soin.
La première commande va lancer une détection sur tout les joueurs qui ont :

  • Un score RC supérieur ou égal a 1.
  • Si il ont, le bon objets en main.
  • Si cette objets possède une Custom NBT.

Et la seconde commandes remettras le score a 0, pour éviter que la détection se lance en continue.

Il est fortement conseiller d'utiliser un CustomModelData, avec les carotte sur un bâton cela seras plus jolie.



Vous connaissez maintenant les base de la détection d'item, vous savez comment détecter un clique droit, et vous savez aussi comment compter les items dans l'inventaire.

Pour la moindre question n'hésiter pas a demander dans les commentaires.
Merci et a bientôt.


Espace commentaire :