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énementSonTexteParticules
0Bloc CommuneSon du bloc (neige, miel, laine selon le monde)+1 petit, gris3 particules du bloc
1RareCloche de note block+6 blanc8 particules bleues
2ÉpiqueCloche, plus haute+35 violet8 particules violettes
3LégendaireCarillonSUCRE LUMINEUX doré, ×1,5Sphère dorée + flash
4DiabétiqueTotem étouffé, annonce serveurPÉPITE D'URANIUM rose, ×2Anneau rose de 40 particules
5Niveau d'outilLevel-up vanillaTitre bas d'écran-
6Échelon d'outilEnclume + level-upTitreParticules du monde
7RangToast + fanfareTitre plein écran couleur du rangExplosion, couleur du rang
8Cran de jarreCarillon d'améthysteMessage à tousColonne sur la jarre
9ÉvénementGrondement graveTitre + bossbarAura autour des joueurs
10PrestigeCloche + silence + fanfareTitre + message globalFeu 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 veutD'où ça vient
Le son au cassageblock_sounds de Nexo, plus notre propre juice.yml
Les éclats à la bonne textureParticle.BLOCK, qui lit le modèle du bloc
La pioche comme bon outilLe datapack, tag #mineable/pickaxe
La vitesseL'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.

ÉconomieLe mini-jeu du site