CommandBlock Faire spawn des blocks aléatoirement dans une zone

ςlє๓๏z๏เг

Un kikoo qui se crois ingénieur
5 Décembre 2016
11
0
2
22
Bonjours, alors je voulait présenter ma petite astuce que j'ai inventé qui consiste à faire apparaitre un ou plusieurs types de blocks de votre choix dans une zone prédéfinie. En gros c'est un peut comme la commande /spreadplayers mais pour des blocs ! Cette commande pourrait servir dans les mini-jeux.
Ps : C'est normal que je n'ait pas utilisé l'outil <code> car sinon il n'y aurait pas la couleur.
Bref allons-y !

Légende :
En bleu : Les coordonnées en rapport avec le système (où vous voulez à l'intérieur du système)
En vert : Les coordonnées en rapport à l'endroit où vont spawn les blocs (bien sûr au choix)
En jaune : Valeur au choix
En rouge : ID et noms aux choix
Souligné : Nouveau

Alors on va faire par étape en prenant compte que le système s'active par un bouton et un fil de redstone :

1) Placer un command block sur le fil de départ :
/setblock <x au choix> <y au choix> <z au choix> redstone_block

2) À coté des coordonnées où va apparaitre le bloc de redstone, placer un fil et un command block en répétition :
/summon ArmorStand <x au choix> <y au choix> <z au choix> {Invisible : 1b}

3) Revenons près du bouton de départ, nouveau command block :
/scoreboard objectives add typeblock dummy
*Je rappelle que ce qui est en rouge sont les ID et noms au choix, personnellement j'utilise "typeblock" mais vous pouvez prendre n'importe quel mot pour votre scoreboard.

4) On se refixe près du bloc de redstone : nouveau command block en répétition :
/scoreboad players add @e[type=ArmorStand,x=[COLOR=#0000ff]<x des ArmorStand de l'étape 2>[/COLOR],y=<y des ArmorStand de l'étape 2>,z=<z des ArmorStand de l'étape 2>, r=0] typeblock 1

Donc pour l'instant, quand on appuie sur le bouton, des centaines d'ArmorStand apparaissent et chacune a un numéro différent, explication : Le premier ArmorStand apparait, on lui donne +1 sur le score "typeblock", il a donc 1 en ce scoreboard, ensuite le n°2 apparait et on donne +1 à chaque ArmorStand, donc le n°1 s'actualise à 2 et le n°2 qui vient d'apparaitre en est seulement à 1, la répétition continue, le troisième apparait et on donne +1 aux 3 ce qui fera un score de 3 au n°1, 2 au n°2 et 1 au n°3 ! En bref c'est le plus vieux qui a le plus grand nombre, c'est une sorte d'âge" de l'entité.
Vous avez compris ? Cette méthode permet de donner une identité différente à chaque ArmorStand qui apparaît, vous verrez à quoi cela sert plus tard. Bien sûr pensez vite à casser le bloc de redstone car la répétition est très rapide et ne s'arrête pas !
N'ayez pas peur de poser d'autres ArmorStand dans le reste de votre map, les ArmorStands concernés son uniquement ceux de votre système.


5) Placez où vous voulez un command block en répétition et toujours actif :

/testfor @e[score_typeblock_min=100]
Le nombre en jaune sera pour plus tard le nombre de blocs à faire apparaître.
*Inutile de vérifier aussi les coordonnées ou le type car les entités appartenant à typeblock son uniquement les ArmorStand dans la coordonnée de l'étape 2.

6) À la sortie du command block précédent, placer un comparateur et un repeater, puis un command block :

/setblock <x du block de redstone> <y du block de redstone> <z du block de redstone> air
Un repeater à la sortie de celui-ci, puis un autre command Block :
/kill @e[score_typeblock_min=101]
Pour l'instant, cela sert à stopper la répétition au 100e ArmorStand et de tuer ceux qui auraient été créés (si vous avez des lags) au-dessus de ce nombre.
Non, je n'ai pas souligné "101" car il doit être le même nombre que le précédent mais en additionnant +1, ce ne peut donc pas être inventé.

7) Maintenant nous allons passer dans la deuxième partie du système, celle qui sert à créer les blocks !
Déjà, choisissez les coordonnées du centre de la zone où vous voulez que vos blocs apparaissent, la distance minimale entre les blocks qui vont apparaitre (perso je choisis 2) et le rayon de la zone en partant du centre (perso je choisis 50 et attention, on est dans Minecraft, le rayon est pour une zone carrée !).

Commencer par placer un repeater réglé sur 2, puis un command block :

/spreadplayers <x centre> <y centre> <z centre> 2 50 @e[score_typeblock_min=1]

Pour l'instant, les ArmorStand sont créés et téléportés avec pour chacun un numéro différent dans la zone configurée et placés aléatoirement. Vous voyez où je veut en venir ?

8) À la sortie de ce block, placer un comparateur réglé sur 2, puis préparez un long fil où tout les commands blocks permettant d'invoquer les blocs seront placés.
Nous allons utiliser la commande /execute pour forcer tout les ArmorStands déjà téléportés dans la zone à invoquer un bloc ! Mais comment invoquer plusieurs types de blocs différents ? C'est là que les numéros vont être importants.
Exemple : Je veut qu'il y ait 25 blocs de fer, 50 blocs de charbon, 15 blocks d'or, 5 blocs de diamant et 5 blocs de redstone, 5 types de blocs différents.
Pour exécuter la commande "faire apparaitre 50 blocs de charbon" à uniquement 50 blocs sur 100, on va utiliser les intevalles dans le sélecteur, c'est à dire que l'on va sélectionner uniquement les ArmorStand qui ont une valeur entre 1 et 50 pour appliquer cette commande. De même pour les autres, au final, ça donne :
/execute @e[score_typeblock_min=1,score_typeblock=50] ~ ~ ~ setblock ~ ~ ~ coal_block

et
/execute @e[score_typeblock_min=51,score_typeblock=75] ~ ~ ~ setblock ~ ~ ~ iron_block
et
/execute @e[score_typeblock_min=76,score_typeblock=90] ~ ~ ~ setblock ~ ~ ~ gold_block

et
/execute @e[score_typeblock_min=91,score_typeblock=95] ~ ~ ~ setblock ~ ~ ~ diamond_block
et enfin
/execute @e[score_typeblock_min=96,score_typeblock=100] ~ ~ ~ setblock ~ ~ ~ emerald_block

Vous pouvez mettre autant de type de blocs que vous voulez, si vous voulez rajouter 15 blocs d'obsidienne, changez le nombre de l'étape 5 de 100 à 110, et celui de l'étape 6 de 101, à 111, puis placez un autre command block :
/execute @e[score_typeblock_min=101,score_typeblock=110] ~ ~ ~ setblock ~ ~ ~ obsidian


9) N'oubliez pas de supprimer les ArmorStand à la fin, après avoir placé tout les commands blocks permettant de faire apparaitre les blocs, placer un repeater réglé sur 4, puis le dernier command block :
/kill @e[score_typeblock_min=1]

Le système est fini !

Attention : Trop d'ArmorStand peuvent faire sévèrement lagger votre map !

Remarque :
Le but n'est pas forcément de créer des blocs, vous pouvez exécuter n'importe quelle commande à vos ArmorStands, voici quelques exemple de possibilités :
- Faire apparaitre pleint de monstres différents dans une arène
- Faire tomber la foudre a des endroits différents toutes les secondes (executer la commande pour faire tomber la foudre sur 10 endroits, puis la seconde d'après la faire tomber sur 10 autres en executant les commandes petit à petit) ou des explosions

- Cloner des structures pour générer des bâtiments aléatoires dans le monde
- Faire un superbe feu d'artifice !
- Find The button automatisé !

Voilà ! C'était tout ! J'espère que vous aurez tout compris, le tutoriel en vidéo que j'ai réalisé aussi :






 
Dernière édition:

ςlє๓๏z๏เг

Un kikoo qui se crois ingénieur
5 Décembre 2016
11
0
2
22
Il serait plus simple d'invoquer des falling_bloc , non ?
Tu as raison, mais il faudrait être extrêmement précis de à quel moment couper l'alimentation des commands blocks en répétition pour que le nombre d'entités soient exactement celui qu'on veut. Et de plus cela risque de faire atrocement lagger 200 blocs en chute :/
Et comme je l'ai dit à la fin, cette méthode peut permettre aussi de générer des structures aléatoire avec un execute clone.
Mais c'est vrai que utiliser des FallingBlock pour un nombre faible de blocs peut remplacer ce système complexe