CommandBlock Résolu /fill pour detruire un block après un /tp en Bedrock sur Switch

MrYoshi

Nouveau
9 Mai 2020
6
1
3
34
Bonjour, j'espère poster ma question dans la bonne section et que je ne crée pas un topic doublon, sinon je vous prie de pardonner mon erreur (ainsi que mes fautes d'orthographe ^^).

J'ai créé des CB (CommandBlock) qui permettent de se tp d'un joueur a l'autre quand on grimpe sur un bloc de béton d'une certaine couleur.

Code:
/execute @a ~ ~ ~ detect ~ ~-1~ concrete 14 tp @p Notch

Ça fonctionne très bien, aucun soucis, le truc c'est qu'en plus je voudrais que le bloc en question se détruise après la tp, j'ai donc fais un autre CB avec une commande /fill.

Code:
/execute @a ~ ~ ~ detect ~ ~-1~ concrete 14 fill ~ ~-1~ air 0 replace concrete 14

Et c'est la que ça coince, dans le CB ça me dis erreur de syntaxe au niveau du mot "air", j'ai donc essayé avec d'autres type de block, avec seulement "replace..." sans "air 0", mais rien de fonctionne. Je ne sais même pas si ce que je demande est possible en fait ^^ (je n'ai aucune notion de code ou de langage informatique, j'ai découvert les commandes et les CB la semaine dernière XD).

Si quelqu'un a l'amabilité et les connaissances pour me venir en aide, ce serait fort urbain de sa part. Merci de votre attention. Aurevoir ! (*Se lève et sort)
 
Dernière édition:

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 380
2
1 063
297
22
Bretagne
Hey !
Normal, le fill permet de changer les blocs d'une zone, il demande donc deux triplets de coordonnées pour en définir les deux extrémités ;)
Si tu veux changer juste un bloc, je te recommande donc plutôt le setblock !
Code:
/execute @a ~ ~ ~ detect ~ ~-1~ concrete 14 setblock ~ ~-1~ air 0 replace
 
  • J'aime
Reactions: MrYoshi

MrYoshi

Nouveau
9 Mai 2020
6
1
3
34
Merci pour ton astuce. Le jeu continuais de me dire qu'il y avait une erreur de syntaxe, j'ai donc mis cette commande :

Code:
/execute @a ~ ~ ~ detect ~ ~-1~ concrete 0 setblock ~ ~-1~ air 0

J'ai simplement enlever le "replace concrete 14" et la ça me casse bien le bloc, mais par contre ça ne me tp plus. J'ai essayer de mettre les 2 commandes en chaines dans un sens et dans l'autre mais ça n'exécute toujours que le premier CB de la chaine (logique, si je me tp d'abord je n'ai plus de béton sous mes pieds a casser, si je casse d'abord le bloc il ne le détecte plus pour me tp). J'ai donc mis les deux CB séparés mais ça continue soit de me tp soit de casser le bloc. J'imagine qu'il doit y avoir un conflit entre les deux commandes. Ce que je ne comprend pas c'est que j'ai normalement un troisième CB avec :

Code:
/execute @a ~ ~ ~ detect ~ ~-1~ concrete 14 gamemode s @p

Et lui fonctionne avec la tp si je le met sur un CB indépendant, mais pas avec le setblock, alors que le jeu devrait exécuter les trois commandes d'un coup.

Je fais les testes sans le troisième CB pour ne pas a avoir a me remettre en créatif chaque fois du coup.


Je lis ton co-tuto (dans ta signature, un grand merci pour nous avoir pondu ce joli manuel d'utilisation d'ailleurs) en même temps. Je me demande, est-il possible de faire une commande qui nous tp si un bloc de beton particulier est remplacé par de l'air ? Du genre :

Code:
/execute @a ~ ~ ~ tp @p Notch if setblock ~ ~-1~ air 0

Ou

Code:
/execute @a ~ ~ ~ tp @p Notch if /execute @a ~ ~ ~ setblock ~ ~-1~ air 0
 
Dernière édition:

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 380
2
1 063
297
22
Bretagne
Re !

Donc, déjà, il faut que tu saches un petit point sur les command-blocks ! La simultanéité n'existe pas ! Même dans le cas d'une chaîne donc, le command-block à la base de la chaîne sera toujours exécuté avant ceux qui suivent ;)
Pour ce qui est du cas où les command-blocks sont séparés, alors celui qui a les coordonnées les plus négatives sera exécuté en premier.

Pour en revenir à ton soucis, en effet, tu as un soucis de "compatibilité". Si le joueur est TP, alors il n'a plus le bloc voulu en dessous, mais si tu retires le bloc en premier, alors tu ne peux plus le TP...
Mais pas de soucis, il y a tout de même une solution simple pour résoudre cela ^^
Au lieu de téléporté ton joueur et de retirer ton bloc lorsque celui-ci marche sur tel bloc, donne-lui plutôt un tag :
Code:
execute @a ~ ~ ~ detect ~ ~-1~ concrete 0 tag @s add OnBlock
Pour expliquer un peu la commande, il faut savoir que le execute, en plus de sa baser sur la position de(s) entité(s) spécifiée(s), exécute aussi la commande qui suit en tant que l'entité en question ! C'est à dire qu'ici, il ne s'agit non pas de ton command-block qui exécute la commande tag mais de tous les joueurs sélectionnés par le @a individuellement (chacun exécute la commande sur lui-même donc). D'où le fait que je puisse utiliser le @s qui spécifie bien le joueur qui exécute la commande (s comme self, sois-même).
L'idée ici est donc de retenir l'information que le joueur est sur le bloc, on lui donne un tag qui existera encore après le setblock.
Ensuite, tu fais ta première commande qu'est le setblock vu qu'elle est relatif à la position de ton entité :
Code:
execute @a[tag=OnBlock] ~ ~ ~ setblock ~ ~-1~ air 0
Ici donc, j'exécute la commande non pas sur tous les joeuurs qui sont sur le bloc, mais sur tous les joueurs qui ont le tag (et donc implicitement qui sont sur le bloc).
Ensuite, plus besoin de la position du joueur, tu peux donc TP !
Code:
/execute @a[tag=OnBlock] ~ ~ ~ concrete 14 tp @s Notch
Il manque un dernier command block pour le reset. En effet, vu que ton joueur a le tag OnBlock, il y risque d'y avoir un bug la prochaine fois qu'il marchera sur ton bloc, il faut donc lui retirer le tag :
[/code]/tag @a[tag=OnBlock] remove OnBlock[/code]
Je retire donc le tag à tout ceux qui l'ont !
Bien entendu, il faut que tout ça soit en chaîne (avec le premier en repeat), dans l'ordre que j'ai spécifié ;)

Je lis ton co-tuto (dans ta signature, un grand merci pour nous avoir pondu ce joli manuel d'utilisation d'ailleurs) en même temps.
Avec plaisir si cela t'aide ! Malheureusement, celui-ci concerne principalement la version Java du jeu, et ne fonctionnera pas réellement sur Bedrock qui est encore sur l'ancien système de commandes (bien que ça devrait, je l'espère, changer à l'avenir) :/
 
  • J'aime
Reactions: MrYoshi

MrYoshi

Nouveau
9 Mai 2020
6
1
3
34
MERCI. Ça fonctionne. Enfin, j'ai apporté quelques modifs à la troisième et quatrième lignes que tu m'as passé en me basant sur ce que tu m'as enseigné. En fait le tp avec "@s" ne fonctionnant pas je l'ai tout simplement changer pour "@a[tag=OnBlock]" et mis le "/execute..." devant la commande de désactivation du coup ça marche et ça donne ça :

Code:
/execute @a ~ ~ ~ detect ~ ~-1~ concrete 0 tag @s add OnBlock

Code:
/execute @a[tag=OnBlock] ~ ~ ~ setblock ~ ~-1~ air 0

Code:
/execute @a[tag=OnBlock] ~ ~ ~ tp @a[tag=OnBlock] Notch

Code:
/execute @a[tag=OnBlock] ~ ~ ~ tag @a[tag=OnBlock] remove OnBlock

Je ne suis pas sur de saisir comment la dernière ligne fonctionne mais ça fonctionne, c'est le principale.

Je vais voir pour rajouter un CB qui désactive le créatif en plus et c'est parfait. Tu crois que je peux rajouter en plus une commande de particule (pour plus de swag au moment du tp) où ça risquerait de faire planter le bordel ?

En tout cas encore merci pour le temps dédié et l'enseignement prodigué.
 
  • J'aime
Reactions: Oromis

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 380
2
1 063
297
22
Bretagne
Tant que c'est avant la TP, tu peux ajouter, oui !
Pour la dernière commande, le execute n'est techniquement pas obligatoire ;)