1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

Résolu Testfor items et joueurs

Discussion dans 'Commands blocks & Redstone' créé par atomisateur57, 27 Fev 2016.

  1. atomisateur57

    atomisateur57 Explorateur

    Inscrit:
    12 Jan 2013
    Messages:
    52
    Points:
    53
    Sexe:
    Homme
    Bonjour,

    Je réalise un laboratoire sous terrain sur un serveur, et je me sers d'un command block pour ouvrir une porte.
    Pour se faire, j'utilise la commande "/testfor @p[r=4] {Inventory:[{tag:{display:{Name:"Carte d'accès de niveau 5"}}}]}". En effet, j'aimerais utiliser plusieurs niveaux de cartes allant de 1 à 5. C'est là que se pose mon problème.
    J'aimerais pouvoir, avec un seul command block, faire en sorte de pouvoir tester les 5 niveaux de cartes, mais je n'y arrive pas.

    Quelqu'un pourrait-il m'aider ?

    Merci d'avance
     
  2. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Tu ne peux pas, enfin si mais pas faire la distinction entre 5 objets complétement différents.

    Je te recommande fortement de passer par un scoreboard au lieu d'un testfor ce qui te permettra en 5 blocs de commandes de tester les cartes en les enregistrant cependant dans le même score si c'est ce que tu veux.
    Code (cpp):
    /scoreboard players set <Joueur> <Objectif> <Valeur> [NBT Tag]
    Le testfor n'est ni obligatoire, ni pratique ici, je te laisse lire le tutoriel de Mlakuss à ce sujet qui devrait t'aider : http://forum.minecraft-france.fr/threads/le-testfor-À-quoi-ça-sert.23777/
     
  3. atomisateur57

    atomisateur57 Explorateur

    Inscrit:
    12 Jan 2013
    Messages:
    52
    Points:
    53
    Sexe:
    Homme
    Bonsoir,

    Merci de votre réponse. A vrai dire, je n'ai pas vraiment compris comment fonctionne le scoreboard, et encore moins comment il fonctionne ici. Auriez-vous un peu de temps à m'accorder pour m'aider à développer un système correct ?

    Merci d'avance
     
  4. Freeze'

    Freeze' Bûcheron

    Inscrit:
    25 Juil 2015
    Messages:
    271
    Points:
    78
    Sexe:
    Homme
    Alors, disons que tu as un scoreboard appelé Carte (tu peux l'ajouter avec cette commande:
    Code (cpp):
    /scoreboard objectives add Carte dummy
    )

    Ensuite, il faut donner une valeur allant de 1 à 5 ici pour les personnes ayant ou non une carte. Mais il faut en premier lieu reset le score à chaque personne pour éviter que quelqu'un qui avait une carte et qui ne l'a plus garde le droit d'accès.(commandes à mettre dans cet ordre)

    Code (cpp):
    /scoreboard players reset @a Carte
    Code (cpp):
    /scoreboard players set @a Carte 1 {Inventory:[{tag:{display:{Name:"Carte d'accès de niveau 1"}}}]}
    Code (cpp):
    /scoreboard players set @a Carte 2 {Inventory:[{tag:{display:{Name:"Carte d'accès de niveau 2"}}}]}
    Code (cpp):
    /scoreboard players set @a Carte 3 {Inventory:[{tag:{display:{Name:"Carte d'accès de niveau 3"}}}]}
    Code (cpp):
    /scoreboard players set @a Carte 4 {Inventory:[{tag:{display:{Name:"Carte d'accès de niveau 4"}}}]}
    Code (cpp):
    /scoreboard players set @a Carte 5 {Inventory:[{tag:{display:{Name:"Carte d'accès de niveau 5"}}}]}
    Ensuite, il faudra exécuter une commande en fonction du score de la personne. (Toujours après les commandes précédentes)

    Code (cpp):
    /execute @a[score_Carte_min=1,score_Carte=1] ~ ~ ~ La Commande A Executer
    Remplacer les 1 par la valeur désirée.
    Ou, pour le joueur le plus proche du command block:
    Code (cpp):
    /execute @p[score_Carte_min=1,score_Carte=1] ~ ~ ~ La Commande A Executer
     
  5. atomisateur57

    atomisateur57 Explorateur

    Inscrit:
    12 Jan 2013
    Messages:
    52
    Points:
    53
    Sexe:
    Homme
    Bonjour,

    J'ai entré toutes les commandes dans une série de command blocks, et les 5 derniers portent tous la commande "/execute @p[score_Carte_min=1,score_Carte=1] ~ ~ ~ La Commande A Executer" mais avec les chiffres modifiés. Ça fonctionne. J'aimerais juste savoir s'il est possible de faire en sorte que ça détecte les objets dont le nom est coloré (j'ai essayé de le faire détecter, mais sans succès).

    Merci d'avance !
     
  6. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Logiquement c'est censé marcher.

    Montres nous ta commande et le nom précis donné à l'objet avec les formatages.
     
  7. atomisateur57

    atomisateur57 Explorateur

    Inscrit:
    12 Jan 2013
    Messages:
    52
    Points:
    53
    Sexe:
    Homme
    La commande pour le command block de la détection de la carte 1 est :
    Code (cpp):
    /scoreboard players set @a Carte 1 {Inventory:[{tag:{display:{Name:"Carte d'accès de niveau 1"}}}]}
    Pour ce qui est de l'action a exécuter pour la carte 1, c'est :
    Code (cpp):
    /execute @p[score_Carte_min=1,score_Carte=1] ~ ~ ~ setblock x y z minecraft:redstone_block
    Suivi de :
    Code (cpp):
    /execute @p[score_Carte_min=1,score_Carte=1] ~ ~ ~ setblock x y z minecraft:stone
    Pour me give la carte colorée, je fais :
    Code (cpp):
    /give @p map 1 name:&9Carte_d'accès_de_niveau_1
    J'ai essayé de rentrer les underscores dans la commande de détection, sans succès
     
  8. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Ta commande de give est déjà fausse, dans un minecraft vanilla elle devrait être ainsi :
    Code (cpp):
    /give @p minecraft:map 1 0 {display:{Name:"§9Carte d'accès de niveau 1§r"}}
    (le §r à la fin est préférable à titre de prévention)

    Il faut également ajouter le formatage utilisé dans le scoreboard dans la mesure où il fait partie du nom :
    Code (cpp):
    /scoreboard players set @a Carte 1 {Inventory:[{tag:{display:{Name:"§9Carte d'accès de niveau 1§r"}}}]}
     
  9. atomisateur57

    atomisateur57 Explorateur

    Inscrit:
    12 Jan 2013
    Messages:
    52
    Points:
    53
    Sexe:
    Homme
    Le § ne fonctionne pas. Je suis sur un serveur. C'est pour ça que j'ai mis &9
     
  10. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    Il fonctionne si tu utilises une class modifiée du jeu évitant que son utilisation ne soit bloquée par le jeu.

    Quelle version utilises-tu ?
     
  11. atomisateur57

    atomisateur57 Explorateur

    Inscrit:
    12 Jan 2013
    Messages:
    52
    Points:
    53
    Sexe:
    Homme
    J'utilise la version 1.8 de spigot (idem pour minecraft)
     
  12. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    1.8.0 ou autre ? Il me faut le numéro précis pour te donner le bon fichier à changer sur ton client de jeu.
     
  13. atomisateur57

    atomisateur57 Explorateur

    Inscrit:
    12 Jan 2013
    Messages:
    52
    Points:
    53
    Sexe:
    Homme
    C'est le Spigot 1.8.6. Je rappelle que je fais le système sur un serveur ;)
     
  14. Calambiel

    Calambiel Résident de l'End

    Inscrit:
    5 Août 2014
    Messages:
    6 595
    Points:
    229
    C'est la version de ton client qui m'intéresse ^^
    Le serveur accepte l'utilisation du § dans les blocs de commandes sans que la class lui soit installée, contrairement aux messages en chat etc...
     
  15. atomisateur57

    atomisateur57 Explorateur

    Inscrit:
    12 Jan 2013
    Messages:
    52
    Points:
    53
    Sexe:
    Homme
    J'utilise minecraft 1.8.9
     

Partager cette page