Juice : sons et feedback
Principe
La satisfaction vient du feedback à chaque action, pas du chiffre qui monte. C'est le levier le plus rentable du projet.
La seule règle : le feedback est proportionnel à la rareté. Son, taille du texte, particules, durée : tout croît avec la valeur de l'événement.
Hiérarchie des événements
| Niveau | Événement | Son | Texte | Particules |
|---|---|---|---|---|
| 0 | Bloc Commune | Son du bloc (neige, miel, laine selon le monde) | +1 petit, gris | 3 particules du bloc |
| 1 | Rare | Cloche de note block | +6 blanc | 8 particules bleues |
| 2 | Épique | Cloche, plus haute | +35 violet | 8 particules violettes |
| 3 | Légendaire | Carillon | SUCRE LUMINEUX doré, ×1,5 | Sphère dorée + flash |
| 4 | Diabétique | Totem étouffé, annonce serveur | PÉPITE D'URANIUM rose, ×2 | Anneau rose de 40 particules |
| 5 | Niveau d'outil | Level-up vanilla | Titre bas d'écran | - |
| 6 | Échelon d'outil | Enclume + level-up | Titre | Particules du monde |
| 7 | Rang | Toast + fanfare | Titre plein écran couleur du rang | Explosion, couleur du rang |
| 8 | Cran de jarre | Carillon d'améthyste | Message à tous | Colonne sur la jarre |
| 9 | Événement | Grondement grave | Titre + bossbar | Aura autour des joueurs |
| 10 | Prestige | Cloche + silence + fanfare | Titre + message global | Feu d'artifice réel |
Un seul feedback par coup d'outil, celui du niveau le plus haut atteint, même avec le Rayon : on affiche la somme, pas 18 chiffres.
Le combo sonore
Chaque bloc cassé joue une note. Si le joueur enchaîne sans pause de plus de 1,5 s, la note suivante monte d'un demi-ton, jusqu'à une octave, puis reste en haut. Aucun effet sur les gains : purement du ressenti.
Le chiffre qui saute
Un TextDisplay au-dessus du bloc, qui monte, s'estompe et disparaît en 30 ticks. Un seul par coup. Jamais d'accumulation.
Rythme
Quelque chose doit arriver toutes les 10 à 30 secondes : une Rare, un niveau, un cran de jarre, un événement. Si un testeur passe 2 minutes sans feedback de niveau 1 ou plus, la courbe est trop plate.
La table des sons et des particules, avec les identifiants exacts, est dans le Design system.
Le son et les éclats d'un bloc cassé, 2026-09-05
Casser un bloc ne donnait ni son ni image. Il y avait quatre causes, dont une qui rendait les trois autres invisibles.
Aucun son n'avait jamais été joué
juice.yml nomme ses sons avec un point : break.common, tool.level, ui.open. Or Bukkit lit le point comme un séparateur de chemin : break.common n'est pas une clé, c'est la section break puis la clé common. Le chargeur parcourait les clés à plat et ne voyait donc que break, tool, ui, reveal... des sections sans champ sound, qui retombaient sur un son par défaut jamais demandé.
Résultat : aucun son de juice.yml n'a jamais été joué, sauf les rares identifiants sans point. Ni le cassage, ni la montée de niveau, ni les menus. Le chargeur parcourt maintenant l'arbre entier et retient chaque noeud qui déclare un son.
Le son est aussi joué au bloc et non à la tête du joueur : il est positionnel, et les autres l'entendent.
Le son était de la neige, à moitié volume
break.common valait block.snow.break à 0,6 : un froissement, pas un coup de pioche. Il vaut block.stone.break à 1,0.
Un bloc commun ne faisait aucune particule
particles.COMMON valait 0, donc rien sur l'immense majorité des blocs du monde. Il vaut 6, et ces particules sont maintenant le bloc lui-même (Particle.BLOCK), qui prend sa vraie texture : du chocolat qui vole, pas un nuage coloré. Le nuage reste disponible pour une ressource qui le demande.
Nos blocs n'avaient aucun outil correct
Un note block n'est dans aucun tag mineable en 26.2 - ni pioche, ni hache. Pour Minecraft, aucun outil n'était le bon : vitesse de base 1,0 quoi qu'on tienne, et l'Efficacité jamais comptée.
Un datapack, dans spawn/datapacks/minecake/, ajoute minecraft:note_block à #minecraft:mineable/pickaxe :
{ "replace": false, "values": ["minecraft:note_block"] }
Les tags de blocs sont envoyés au client, donc sa prédiction suit. La pioche devient le bon outil sur nos blocs : vitesse de base 9 au lieu de 1, Efficacité enfin comptée, et le comportement de récolte d'un bloc de pierre. Le modificateur break-speed reste en filet de sécurité.
Pourquoi pas simplement des blocs vanilla
Remettre la masse en pierre vanilla pour retrouver ses sons se tient, mais coûte cher : on perdrait la texture custom, et on sacrifierait un bloc vanilla par monde, ce qu'on a justement quitté en passant à Nexo.
Il n'y en a pas besoin. Un bloc custom peut prendre tout le comportement de la pierre sans être de la pierre :
| Ce qu'on veut | D'où ça vient |
|---|---|
| Le son au cassage | block_sounds de Nexo, plus notre propre juice.yml |
| Les éclats à la bonne texture | Particle.BLOCK, qui lit le modèle du bloc |
| La pioche comme bon outil | Le datapack, tag #mineable/pickaxe |
| La vitesse | L'Efficacité de la pioche, plus break-speed |
Rien de tout ça ne touche à la pierre vanilla, et le bloc garde son modèle et sa texture.
La cloche retirée (2026-09-07)
Les blocs Rares et Épiques sonnaient block.note_block.bell. À vingt blocs par seconde, la sonnette revenait sans arrêt et devenait pénible. Ils prennent maintenant le même son de pierre que la masse, monté d'un demi-ton puis d'un ton : la différence s'entend, sans jamais sonner.
Les Légendaires et les Diabétiques gardent leur son distinctif, block.note_block.chime et item.totem.use. Ils sont assez rares pour rester un moment, pas un bruit de fond : un Légendaire du Chocolat, c'est un bloc sur un million.