Réparation de votre commande
Votre problème ici est que vous mélangez les arguments de sélecteur de cible avec les étiquettes de données, et puis quelques erreurs mineures.
Les arguments de sélecteur de cible, tels que team=Moderators
(en minuscule!) sont placés entre crochets carrés ([]
) directement avec le sélecteur de cible, comme @a
ou @p
. Ils sont sous la forme clé=valeur
, avec un ensemble prédéfini de clés valides.
En revanche, la correspondance d'étiquettes de données regarde directement les données NBT d'une entité, telle que ActiveEffects
. Elles sont placées entre accolades ({}
) et sont sous la forme de clé:valeur
. Seul un sous-ensemble assez petit de commandes est capable d'utiliser des étiquettes de données.
Votre commande dans ce cas devrait être
/testfor @a[team=Moderators] {ActiveEffects:[{Id:21b,Amplifier:20b}]}
Réparation de votre configuration
Cependant, toute votre idée est nulle, si je puis être aussi direct. On dirait que vous testez s'il y a des modérateurs avec Health Boost 20, puis inversez le signal et réappliquez le health boost. Le premier problème est qu'aucun modérateur n'obtient un health boost à moins que aucun des modérateurs n'ait actuellement un health boost. En fait, nier la correspondance d'étiquettes de données nécessite d'attribuer des valeurs de scoreboard basées sur l'étiquette de données.
Pour la plupart des effets, réappliquer l'effet tout le temps fonctionne très bien, par exemple exécuter
/effect @a[team=Moderators] 1 true
sur un clock rapide (setblock/fill clock!) fonctionne très bien, et est en fait beaucoup moins gourmand en ressources qu'une machine de lag redstone avec des torches, des comparateurs et autre chose.
Cependant, il y a un problème avec la réapplication de Health Boost car cela réinitialisera votre santé actuelle à 10 coeurs tout le temps. Si vous souhaitez réappliquer l'effet uniquement lorsque nécessaire, l'utilisation de /testfor
, de comparateurs et de redstone n'est toujours pas une bonne idée. Au lieu de cela, vous devriez traduire l'étiquette de données en une valeur de scoreboard qui peut être utilisée dans un sélecteur de cible. Pour ce faire, commencez par créer un objectif de scoreboard:
/scoreboard objectives add hasEffect dummy
Créez un clock fill/setblock et mettez les commandes suivantes dans l'ordre:
/scoreboard players set @a[team=Moderators] hasEffect 0
/scoreboard players set @a[team=Moderators] hasEffect 1 {ActiveEffects:[{Id:21b,Amplifier:20b}]}
/effect @a[team=Moderators,score_hasEffects=0] minecraft:health_boost 9999 20 true