CommandBlock Musique évenementielle

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Salut à tous !
Aujourd'hui, petit tutoriel sur ce que j'appelle la musique événementielle ! :)
Le but de ce tutoriel est de réaliser une musique qui ne se déclenche que dans une certaine zone de votre map, comme un bâtiment, et qui se coupe une fois cette zone quittée !
Pour ce qui est de l'insertion de la musique, je vais passer par un resource pack. :p
Voici un petit exemple en vidéo :


Bon, premièrement, création du resource pack dans lequel on va mettre notre musique à jouer !
Je vous laisse donc créer un dossier dans le dossier adapté (dossier resource pack de votre .minecraft).
Dedans, placez-y un dossier nommé assets et un fichier pack.mcmeta contenant ce genre de texte :

{
"pack": {
"pack_format": 2,
"description": "Description"
}
}

Bref, dans le dossier assets, un dossier minecraft contenant un dossier sounds. Là, vous pouvez créer l'arborescence que vous voulez ! Pour ma part, je vais créer un dossier ambiance dans lequel je vais placer ma musique en format .ogg.

8qLDDS4.png


Retournez en arrière jusqu'à ce que vous soyez dans le dossier minecraft, là, créez-y un fichier nommé sounds.json, ce dernier va vous permettre d'ajouter la musique au jeu sans remplacer celle déjà existante ! ;)

Pour ce qui est du contenu, je vais vous le montrer avec non pas une mais deux musiques pour que vous puissiez voir la structure !

{
"saloon" : {
"category": "music",
"sounds": [
"
ambiance/Saloon"
]
}
,
"space" : {
"category": "music",
"sounds": [
"
ambiance/Space"
]
}
}

Tout d'abord, l'on dit le
nom que portera la musique dans la commande playsound, dans mon cas, la musique se nomme saloon, donc pour lire cette musique, je devrais faire un
Code:
/playsound saloon record @a
La valeur music, signifie le type de son qui sera joué, (blocks, stream...), dans mon cas, j'utilise le paramètre musique ;)
Pour finir, le
chemin d'accès de votre musique à partir du dossier sounds, dans mon cas ambiance/Space.
Si vous voulez plus d'information sur l'ajout de musique, la création de ces fichiers json et la commande playsound, je vous conseil ce magnifique tuto en 6 parties, bien que obsolète pour la syntaxe du playsound, très complet pour ce genre de fichier ;)
Maintenant que le fichier est configuré, je vous conseil de tester votre resource pack avec cette commande :

Code:
/playsound [nom] record @a
Le "record" est pour précisé que ce sont sera joué de la même façon qu'un disque ou qu'un son de noteblock, il sera donc défini sur cette barre sonore et non sur celle de musique ! :p

Votre musique fonctionne ?
Parfait, nous pouvons donc passé à la partie command block !

Tout d'abord, une petite screenshot du système :

ZTr1cQA.png


Le cœur du système ce trouve au centre, soit les trois command blocks, c'est eux qui vont gérer le lancement de la musique lorsque le joueur se trouve dans le bâtiment !

Le système de gauche s'occupe de relancer la musique une fois que cette dernière est fini, le son sera donc joué en boucle !

Le système de droite s'occupe de reset les deux précédents systèmes et d'arrêter de jouer la musique lorsque le joueur quitte la pièce.

Bon, commençons. Créez tout d'abord deux objectifs, un qui va détecter l'entrée dans la pièce, que j'ai appelé "saloon" et l'autre qui va s'occuper de voir où en est la musique (pour la relancer une fois fini) que j'ai appelé timerS. Mes deux objectifs sont en dummy.
Code:
/scoreboard objectives add [nom] dummy

Pour détecter l'entrée du joueur, j'ai posé des blocs de netherrack sous mon entrée :

IRzuhh6.png


Je détecte ainsi lorsque ces blocs se trouvent sous le joueur pour lui attribuer un score de 1 dans "saloon", à condition bien sûr que le joueur n'est pas déjà un score égale ou supérieur à 1 (ce qui voudrait dire que la musique est déjà lancé ou en cours de lancement !) ;)
Code:
/execute @a[score_saloon=0] ~ ~ ~ detect ~ ~-2 ~ netherrack 0 scoreboard players set @a[score_saloon=0,dy=2] saloon 1

Bon, voilà, on a détecté lorsqu'il entre dans notre pièce, on peut donc lui lancer la musique !

Code:
/playsound saloon record @a[score_saloon_min=1,score_saloon=1] X Y Z 50
J'ai déjà expliqué le début de la commande au dessus. On souhaite donc que la musique ne soit lancé que pour un joueur ayant le score égale à 1. On précise ensuite les coordonnées du jeu de la musique et son volume maximum, ici à 50 pour que le son puisse bien être joué dans toute la pièce sans que ce dernier baisse.

Pour pas que la musique se joue plusieurs fois en même temps, on attribue un score de 2 au joueur ayant la musique lancée :
Code:
/scoreboard players set @a[score_saloon=1,score_saloon_min=1] saloon 2

/!\ Vous devrez mettre le score de chaque joueur à 0 dans "saloon" pour que le système fonctionne ! /!\
Bon ! Normalement, votre musique fonctionne quand vous rentrez dans votre zone !
Mais pas quand vous en sortez... Donc, on va faire un petit tour dans le système de reset ! :)

De la même façon que j'ai mis des blocs de netherrack en entrée, je met des blocs d'éponge en sortie pour détecter lorsque je dois stopper la musique :

u5nkd4N.png


La commande associée :
Code:
/execute @a[score_saloon_min=1] ~ ~ ~ detect ~ ~-2 ~ sponge 0 scoreboard players set @a[dy=2] saloon 0
Le score est donc remis à 0, plus qu'à couper la musique !
Code:
/stopsound @a[score_saloon=0] record saloon

Là, tout est bon ! :)
Passons à la dernière étape, le jeu en boucle de la musique !

Pour cela, il faudra faire un peu de maths ! En effet, on va lancer un timer pour chaque joueur afin de savoir quand est-ce que la musique est fini. Sachant que notre timer va s'incrémenter tous les ticks, que une seconde vaut 20 ticks et que ma musique dure 51 secondes : 20*51 = 1020 ticks.
Je préfère tout de même lancer la musique un peu avant pour que la liaison soit plus appréciable, je la lancerai donc à 980 ticks, soit 2 secondes plus tôt. ^^

Bref, maintenant que la théorie est finie, passons à la pratique !
Tout d'abord, on incrémente le score du joueur à partir du moment où la musique se lance !

Code:
/scoreboard players add @a[score_saloon_min=2] timerS 1
(C'est le petit command block violet se trouvant tout seul à droite du système de droite ^^")

Ensuite, plus qu'à détecter lorsque le joueur atteint le nombre de ticks voulus !
Code:
/scoreboard players set @a[score_timerS_min=980] saloon 1
Quand ce nombre est atteint, on remet son score saloon à 1 pour relancer la musique :)
Puis bien sûr, on relance le timer :
Code:
/scoreboard players set @a[score_timerS_min=980] timerS 0
(Ce command block est en conditionel)

On va donc pouvoir maintenant fini le système de reset, en effet, il faut bien couper le timer quand le joueur quitte la pièce !
Code:
/scoreboard players set @a[score_saloon=0] timerS 0

Voilà ! Le système est complet et fonctionnel ! :)

Merci d'avoir lu ce tutoriel et en espérant que cela vous aie plus ! :p
 
Dernière édition: