CommandBlock Tutoriel Détecter un clic dans un coffre (sur un item) -1.12-

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
-EDIT : OUI, J'ECRIS DES ENORMES PAVES! J'UTILISE MAINTENANT LES SPOILERS! -

Salut à tous c'est Eglaios et aujourd'hui on se retrouve pour un nouveau tuto minecraft sur les command blocks...

NON.

Ce type de phrase a un nom, mesdames, mesdemoiselles, messieurs, il s'agit d'un "Indicateur d'incompétence créative".
Ne faites JAMAIS (Youpi les couleurs!) de phrases dans ce genre pour commencer un texte ou une vidéo (Très fréquent sur youtube, avec les pseudo-youtubers dans les 10-12 ans qui veulent imiter les pros comme Squeezie, JDG, etc.), c'est la preuve que vous n'avez strictement aucune imagination, que vous ne créez rien par vous même, et accessoirement, que le contenu qui suivra ne sera donc pas intéressant du tout.


Ce premier mini-tuto étant fait, je vais passer dans le sujet principal : la détection d'un clic sur un certain item dans un coffre. Je me suis dit que ça serait intéressant quand je suis tombé sur un vieux post de sixcrocs à ce sujet sans aucune réponse.
Ce système a été réalisé en 1.12.2 mais est certainement réalisable dans des versions plus vieilles.

Pour les impatients, voici directement les screenshots explicatifs :

-L'interface
Ici, trois items personnalisés à détecter, j'aurai pu en mettre plus, mais c'est pour la démonstration.
2019-03-08_13.38.17.png

2019-03-08_13.35.23.png

2019-03-08_13.35.26.png

2019-03-08_13.35.28.png

-La structure
2019-03-08_13.18.46.png

Ce que vous voyez là n'est pas la structure la plus rapide et efficace :
-Les torches de redstone et les répéteurs rendent là tâche plus longue, et il faut attendre une demi-seconde après le clic pour l'exécution.
-J'ai fait un système de base, le plus facile à comprendre (vite fait, aussi). C'est à vous de l'optimiser de la façon avec laquelle vous voulez vous en servir!
-Il est cependant le meilleur réalisable sur un point : Nécessitant des blocs de commande à répétition, ceux-ci ne s'activent que quand le coffre est ouvert (coffre piégé, s'entend), et tous les blocs sont réglés sur "par la redstone". C'est donc le meilleur choix pour réduire l'activité du système au minimum, dans des grosses maps, par exemple (J'ai pas un pc gamer non plus, j'aime quand c'est plus fluide).


-Les commandes (Ouvrez l'image dans une nouvelle fenêtre, ça évitera le spam-scrolling énervant) :
Précision : Ici, le coffre se trouve en 442 6 -800. Ajustez ces coordonnées!
1. Coffre piégé (Précision importante, surtout pour l'activation du système), contient les objets perso.

2. Bloc de commande répétition - [inconditionnel - par la redstone] -> (Tous les blocs le sont)
Fonction : Détecter la présence du lit dans le coffre
Code:
/testforblock 442 6 -800 minecraft:trapped_chest 4 {Items:[{Slot:0b,id:"minecraft:bed",Count:1b,tag:{display:{Lore:["Cliquez pour dormir"],Name:"Dormir"}},Damage:0s}]}

3. Bloc de commande répétition
Fonction : Détecter la présence de la côtelette dans le coffre (personne n'appelle ça comme ça...)
Code:
/testforblock 442 6 -800 minecraft:trapped_chest 4 {Items:[{Slot:1b,id:"minecraft:cooked_porkchop",Count:1b,tag:{display:{Lore:["Cliquez pour manger"],Name:"Manger"}},Damage:0s}]}

4. Bloc de commande répétition
Fonction : Détecter la présence de la barrière dans le coffre
Code:
/testforblock 442 6 -800 minecraft:trapped_chest 4 {Items:[{Slot:26b,id:"minecraft:barrier",Count:1b,tag:{display:{Lore:["Cliquez pour fermer ce menu"],Name:"Quitter"}},Damage:0s}]}

5. Bloc de commande impulsion
Fonction : Clear le coffre (Il est détruit après; les items qui drop, c'est pas classe)
Placé uniquement parce que je suis obligé d'utiliser "destroy" en 1.12 pour remplacer le coffre
Code:
/blockdata 442 6 -800 {Items:{}}

6. Bloc de commande impulsion
Fonction : Replacer un nouveau coffre identique pré-rempli.
Code:
/setblock 442 6 -800 minecraft:trapped_chest 4 destroy {CustomName:"Menu",Items:[{Slot:0b,id:bed,Count:1,tag:{display:{Name:"Dormir",Lore:["Cliquez pour dormir"]}}},{Slot:1b,id:cooked_porkchop,Count:1,tag:{display:{Name:"Manger",Lore:["Cliquez pour manger"]}}},{Slot:26b,id:barrier,Count:1,tag:{display:{Name:"Quitter",Lore:["Cliquez pour fermer ce menu"]}}}]}

7. Bloc de commande impulsion
Fonction : Détruire toutes les entités item (Le coffre ouvert est détruit; le joueur tenait probablement un des objets sur son curseur, il aura donc été droppé à la destruction du coffre. J'ai ajouté un rayon au cas où les items éloignés devraient rester présents)
Code:
kill @e[type=Item,r=20]

8-9-10. Blocs de commande impulsion
Fonction : Clear le joueur des items du coffre, au cas où il aurait utilisé shift+clic (Hé hé :fou: )
Seront activés en même temps que le kill d'items, l'ordre n'a pas d'importance
Code:
/clear @p minecraft:barrier 0 1 {display:{Name:"Quitter",Lore:["Cliquez pour fermer ce menu"]}}
Code:
/clear @p minecraft:bed 0 1 {display:{Name:"Dormir",Lore:["Cliquez pour dormir"]}}
Code:
/clear @p minecraft:cooked_porkchop 0 1 {display:{Name:"Manger",Lore:["Cliquez pour manger"]}}

Les trois blocs non-numérotés seront activés selon l'item cliqué, contenu libre (Vous voulez vraiment savoir ce qu'il y a dedans quand même?
-Celui du haut : /say babu
-Milieu : /say gneuh
-bas : /say fplurt
:hs:

Pour activer le système, il vous suffit d'activer manuellement le bloc numéro 6.


-Fonctionnement du système
Etape 1 : Ouverture
Le coffre ouvert active les trois blocs à répétition, qui détectent chacun la présence d'un item dans l'interface

Etape 2 : Clic
L'un des trois blocs à répétition ne détecte plus son item dans son slot, ce qui va allumer la torche de redstone correspondante au bloc touché, activant la redstone en-dessous ainsi qu'un des trois blocs de commande non-nomérotés
La redstone va d'abord déclencher le clear du coffre, puis, un tick plus tard, son remplacement par un nouveau coffre rempli. Juste après, les items droppés (Celui que le joueur a sélectionné, si pas shift-cliqué) sont supprimés et le joueur subit un clear pour chaque item du coffre si shift-clic.
Ce système est réglé pour éviter les duplications.

Etape 3 : Après l'exécution
Le coffre a été reset, l'interface a été fermé, les objets sont à nouveau dedans au complet, et le premier répéteur aura laissé l'occasion aux blocs à répétition de s'actualiser avec le nouveau coffre, les torches seront donc toutes éteintes. Prêt pour une nouvelle utilisation!


J'avais créé mon post sur "Comment détecter l'heure IRL dans le jeu" juste avant celui-ci et j'avais déjà une bonne idée de comment résoudre ce problème de coffres, m'étant familiarisé avec les possibilités du /testforblock.


J'espère que ce système vous sera utile et que vous trouverez toutes sortes d'alternatives!



Eglaios
 
Dernière édition:
  • J'aime
Reactions: Myuto
Oh ! Très beau tuto !
Par contre il y a un truc qui m’arrache les yeux, c'est la redstone ><
Je suis totalement conscient des lag produit par les commande block repeat, mais utiliser un trap chest limite les positionnement et le placement de ton système. du coup je propose autre chose, au lieu d'avoir 1 CB par item, 1CB par chest. Il aura la même fonctionnalité que ton trap chest, détecter les joueurs dans un rayon de 5 block autour du coffre + est dans l'interface du coffre.
Tu peux aussi utiliser les chain, et même si les repeater montre bien le sens, fait au moins un système avec chain à la fin pour montrer le système terminer, pour montrer l'exemple.
 
du coup je propose autre chose, au lieu d'avoir 1 CB par item, 1CB par chest. Il aura la même fonctionnalité que ton trap chest, détecter les joueurs dans un rayon de 5 block autour du coffre + est dans l'interface du coffre.
Tu peux aussi utiliser les chain, et même si les repeater montre bien le sens, fait au moins un système avec chain à la fin pour montrer le système terminer, pour montrer l'exemple.
Un bloc par coffre? Dans le fond, ça serait pour rajouter une option de sélection de joueurs? Uh, je te dirais franchement, je n'ai pas trop réfléchi sur tous les différentes modifications à apporter :dsl: , c'était plus un genre de tuto pour montrer qu'une telle chose était possible...

Après, si tu saurais faire ce que tu proposes, moi, ça m'intéresserait bien!
Sinon, j'ai repéré qu'un coffre placé au niveau de la tête d'un joueur le rend invisible pour celui-ci... (À part le petit truc gris de devant)

Si on se lâchait carrément, on pourrait faire un genre de truc comme les boussoles de sélection sur les serveurs : Quand on tient un certain item, ça nous met un effet de lenteur max/jump boost pour ne pas bouger, puis ça met le fameux coffre pile à la tête du joueur, et quand le joueur clique sur le coffre "invisible" avec l'item, ça l'ouvre et on utiliserait un système de blocs de commande à répétition avec le concept de ce post...
Ouais, ça va un peu trop loin, je crois...

Enfin j'ai à moitié compris ton commentaire :dsl: mais comme je dis, tout le monde peut balancer des idées, on pourra sûrement en tirer des supers trucs... et améliorations (parce que oui, les comparateurs, torches et tout, c'est la préhistoire)

Enfin aussi, après, je vais pas mettre ça tout cuit dans le bec des gens, ils doivent aussi penser par eux-même! (La flemme? Moi? Jamais :p )
 
Un bloc par coffre? Dans le fond, ça serait pour rajouter une option de sélection de joueurs? Uh, je te dirais franchement, je n'ai pas trop réfléchi sur tous les différentes modifications à apporter :dsl: , c'était plus un genre de tuto pour montrer qu'une telle chose était possible...

Après, si tu saurais faire ce que tu proposes, moi, ça m'intéresserait bien!
Sinon, j'ai repéré qu'un coffre placé au niveau de la tête d'un joueur le rend invisible pour celui-ci... (À part le petit truc gris de devant)

Si on se lâchait carrément, on pourrait faire un genre de truc comme les boussoles de sélection sur les serveurs : Quand on tient un certain item, ça nous met un effet de lenteur max/jump boost pour ne pas bouger, puis ça met le fameux coffre pile à la tête du joueur, et quand le joueur clique sur le coffre "invisible" avec l'item, ça l'ouvre et on utiliserait un système de blocs de commande à répétition avec le concept de ce post...
Ouais, ça va un peu trop loin, je crois...
L'idée est génial! Je voudrais essayer de la reproduire, mais il y a un problème. Comment faire si un joueur est déjà dans le menu de son coffre et qu'un autre joueur ouvre à son tour son coffre de son inventaire (je parle du coffre invisible au dessus de la tête). Vont-ils avoir la même interface et interagir ensemble? Probablement. Et comment faire pour que les deux joueurs puissent interagir individuellement et aient leur propre interface?
 
L'idée est génial! Je voudrais essayer de la reproduire, mais il y a un problème. Comment faire si un joueur est déjà dans le menu de son coffre et qu'un autre joueur ouvre à son tour son coffre de son inventaire (je parle du coffre invisible au dessus de la tête). Vont-ils avoir la même interface et interagir ensemble? Probablement. Et comment faire pour que les deux joueurs puissent interagir individuellement et aient leur propre interface?
Yo, je suis revenu-euh

Ben en fait, ce système est vraiment bancal, vu que c'est fait avec les commandes vanilla, plutôt limitées. Déjà, si tu songes au multijoueur via serveur, les plugins sont à 99% des cas plus performants que les commandes normales. Ce genre de chose est utile uniquement si tu lances la map avec le launcher.

Bref, si tu n'es pas sur serveur, je pense qu'il serait possible de verouiller le coffre piégé au moment où il est ouvert, comme ça, plus personne ne pourra l'ouvrir (déverouillé lorsque refermé).

Attention aussi, les versions plus récentes ont remplacé le /testforblock par le /execute if block

Si ça t'intérèsserait que je teste si c'est possible, dis-le moi...
 
Yo, je suis revenu-euh

Ben en fait, ce système est vraiment bancal, vu que c'est fait avec les commandes vanilla, plutôt limitées. Déjà, si tu songes au multijoueur via serveur, les plugins sont à 99% des cas plus performants que les commandes normales. Ce genre de chose est utile uniquement si tu lances la map avec le launcher.

Bref, si tu n'es pas sur serveur, je pense qu'il serait possible de verouiller le coffre piégé au moment où il est ouvert, comme ça, plus personne ne pourra l'ouvrir (déverouillé lorsque refermé).

Attention aussi, les versions plus récentes ont remplacé le /testforblock par le /execute if block

Si ça t'intérèsserait que je teste si c'est possible, dis-le moi...
Je suis d'accord que les plugins sont plus efficaces, mais je veux que ma map soit téléchargeable et prête à utilisation, avec de datapacks par exemple.

Bien que je serais intéressé par l'idée si tu veux te creuser un peu la tête.

Parce que déjà, avoir un coffre piégé au niveau de la tête du joueur en tout tant ou au moment où il a un certain objet en main, je ne crois pas être capable de le faire.
 
Ben après, pour le multijoueur, je ne pense pas qu'il soit possible de reproduire le système mythique de la boussole comme sur les serveurs tout en préservant une sécurité parfaite...

La seule solution serait de téléporter le joueur dans une salle close lorsqu'il veut interagir avec le coffre, et ça serait vraiment moche, en fait... (et poser des coffres partout aussi, sans parler de si les gens se déconnectent en même temps)


En fait, ça serait pour faire quoi? Si tu veux un système de sélection, c'est pas non plus la diversité qui manque, je pourrais en trouver un plus adapté au vanilla...

Manger un type de nourriture de sa hotbar pour sélectionner un choix, cliquer sur du texte réactif dans un livre, il y a quand même des alternatives...
 
Tant que j'y pense, j'avais imaginé un système qui permettrait de déclencher de la redstone à une certaine heure IRL, ça pourrait aller avec ce à quoi tu penses...
 
Ben après, pour le multijoueur, je ne pense pas qu'il soit possible de reproduire le système mythique de la boussole comme sur les serveurs tout en préservant une sécurité parfaite...

La seule solution serait de téléporter le joueur dans une salle close lorsqu'il veut interagir avec le coffre, et ça serait vraiment moche, en fait... (et poser des coffres partout aussi, sans parler de si les gens se déconnectent en même temps)


En fait, ça serait pour faire quoi? Si tu veux un système de sélection, c'est pas non plus la diversité qui manque, je pourrais en trouver un plus adapté au vanilla...

Manger un type de nourriture de sa hotbar pour sélectionner un choix, cliquer sur du texte réactif dans un livre, il y a quand même des alternatives...
C'est principalement pour utiliser avec des achievements. En gros, une fois que le joueur a fini tel ou tel défi, il obtient un type d'armure qu'il pourra équiper. Mais je ne veux pas que le joueur qui n'a pas encore réussi ce défi puisse lui aussi la sélectionner.

J'ai réfléchi est ce serait peut être possible de le faire avec des shulker boxes ou encore avec un livre avec des liens interactifs.

Par exemple, un défi qui consiste à éliminer 3 joueurs sans mourrir. Une fois que l'achivement est débloqué chez le joueur "x" celui pourra voir dans ces options de customisation une armure en or qu'il pourra équiper d'un seul clic. Le joueur "y" lui verra qu'elle est encore bloqué.
 
Aha, des achievements, tu dis? Ben les packs de données permettent justement de créer des "vrais" achievements avec l'alerte et tout...

Si un livre interactif te convient, c'est pas mal la meilleure façon vanilla de faire un menu.

Donc en gros :
-un livre avec du texte cliquable pour séléctionner l'armure, et si le joueur n'a pas débloqué, ça dirait "conditions non remplies" ou un truc du genre...
-possiblement des nouveaux achievements au jeu selon tes critères si utiliser un pack de données ne t'embête pas