Tu peux utiliser un /execute detect pour détecter quand un joueur est sur un bloc, puis réaliser une action (je pense notamment à invoquer un ArmorStand qui te permet ensuite au bout d'un temps de faire tomber le bloc, puis le replacer, puis killer le stand).
Il te faudra de toute façon des clocks pour ces actions mais probablement beaucoup moins qu'actuellement (et surtout une seule pour tous les blocs).
Code (cpp):
/ execute @a ~ ~ ~ detect ~ ~- 1 ~ < Nom_du_bloc> < Damage_Value> summon ArmorStand ~ ~ ~ { Marker: true ,NoGravity: true }
/ scoreboard players add @e[ type= ArmorStand] System 1
Le score augmente de 10 par seconde, donc pour que le bloc tombe au bout de 1 seconde et se replace après au bout de 5 tu dois mettre les commandes suivantes.
Code (cpp):
/ execute @e[ type= ArmorStand,score_System_min= 10 ,score_System= 10 ] ~ ~ ~ setblock ~ ~- 1 ~ minecraft: air
/ execute @e[ type= ArmorStand,score_System_min= 10 ,score_System= 10 ] ~ ~ ~ summon FallingSand ~ ~- 1 ~
/ execute @e[ type= ArmorStand,score_System_min= 60 ,score_System= 60 ] ~ ~ ~ setblock ~ ~- 1 ~ < Nom_du_bloc>
/ kill @e[ type= ArmorStand,score_System_min= 60 ]
Tu peux bien sur rajouter un NBT tag à ton FallingSand pour le transforme en le bloc de ton choix.
Si tu as plusieurs types de blocs sur le parcours il va te falloir un moyen de différencier les ArmorStand, tu peux utiliser un autre scoreboard mais je te conseille plutôt de faire plusieurs fois le premier execute avec des Nom_de_bloc différents et invoquant des Stand avec un CustomName dépendant du bloc, tu as ensuite juste à refaire les quatre commandes ci-dessus avec un selecteur de nom et des Nom_de_bloc et FallingSand différents.
Il reste toujours le problème de "l'accumulation", cela va probablement surcharger le scoreboard car un score est créé à chaque bloc, ce qui n'est pas très grave mais qui peut te gêner si tu veux identifier par la suite un problème.
Pour remédier à cela tu peux remplacer la dernière commande /kill par ces commandes.
Cela rajoute quelques commandes et donc quelques clocks donc c'est optionnel.
Code (cpp):
/ execute @e[ type= ArmorStand,score_System_min= 60 ] ~ ~ ~ summon ArmorStand ~ ~ ~ { Marker: true ,NoGravity: true ,CustomName: "Kill" }
/ execute @e[ type= ArmorStand,name= Kill] ~ ~ ~ scoreboard players reset @e[ type= ArmorStand,r= 2 ] System
/ execute @e[ type= ArmorStand,name= Kill] ~ ~ ~ kill @e[ type= ArmorStand,r= 2 ]
Ici j'invoque un Stand avec un CustomName pour le différencier (comme je t'ai proposé plus haut), il reset le score des Stand sur lui puis les kill (et se kill lui-même au passage).
Toutes ces commandes doivent bien sur s'activer dans l'ordre dans lequel je les ai cités (et les commandes optionnelles à la suite des autres), sinon le système va faire n'importe quoi et ton monde pourrait se remplir très vite de Stand.
Cliquez pour agrandir...