Oui, les commandes ne fonctionnent pas comme ça. Elles sont très structurées et ne vous permettent pas de remplacer des entiers attendus par des expressions. Vous allez devoir le faire à la dure. Vous voudrez également utiliser la version 1.9 pour la simplicité des blocs de commande, bien que cette solution fonctionnera également en 1.8 avec des horloges bien structurées à 20Hz.
Tout d'abord, nous devons mettre en place un autre objectif de tableau de bord qui représente le nombre d'articles à donner ; appelons-le NumItems
:
/scoreboard objectives add NumItems dummy
Nous avons également besoin d'un objectif de tableau de bord intermédiaire pour éviter les conflits de course dans les étapes ultérieures. Cet objectif est ce qui va multiplier le score DIFF
, nous l'appellerons donc Multiplier
:
/scoreboard objectives add Multiplier dummy
Maintenant, lorsqu'un joueur appuie sur le bouton, son score NumItems
doit être défini sur deux fois son score DIFF
. Nous faisons cela avec les commandes suivantes :
/scoreboard players set @p Multiplier 2
/scoreboard players operation @p Multiplier *= @p DIFF
/scoreboard players operation @p NumItems = @p Multiplier
Super, maintenant nous avons un nombre d'articles à donner, nous devons juste les donner... un par un. Eh bien, nous pouvons être un peu plus efficaces que cela, mais nous ne pouvons pas simplement donner un nombre arbitraire d'articles. Nous allons le diviser en donnant 1 article, 10 articles et une pile de 64 articles. Créez une chaîne de blocs de commande à partir d'un bloc de commande répétitif (ou utilisez une horloge à 20Hz) pour ces commandes, éditées pour répondre à vos besoins spécifiques :
/give @a[score_NumItems_min=64] 64 [...]
/scoreboard players remove @a[score_NumItems_min=64] NumItems 64
/give @a[score_NumItems_min=10] 10 [...]
/scoreboard players remove @a[score_NumItems_min=10] NumItems 10
/give @a[score_NumItems_min=1] 1 [...]
/scoreboard players remove @a[score_NumItems_min=1] NumItems 1
Ce n'est qu'une distribution possible des valeurs de give
et peut facilement être améliorée en choisissant une séquence géométrique comme 2n (1, 2, 4, 8...), ce qui devrait effectuer toutes les opérations de donnée pour des comptages d'articles jusqu'à 128 en 1 ou 2 ticks.
Il devrait être évident pourquoi nous avons besoin de l'objectif Multiplier
, mais au cas où ce ne serait pas le cas, c'est pour éviter de commencer à donner des articles avant que DIFF ait été multiplié par deux. En conséquence, nous ne devrions écrire dans NumItems
qu'une seule fois lorsque le bouton est pressé. Même si la probabilité de rencontrer une erreur de course sans utiliser l'objectif Multiplier
est faible, il est préférable d'éviter complètement le problème.