1 votes

J'ai besoin d'aide avec une commande testfor spécifique dans minecraft

Je suis en train d'essayer d'utiliser des blocs de commande, des tableaux de bord et de la redstone pour donner à tous mes modérateurs des effets lorsqu'ils en manquent. J'ai déjà le système pour réappliquer les effets si vous êtes dans l'équipe de travail mais maintenant je dois tester à la fois le fait d'être dans l'équipe des modérateurs et de ne pas avoir l'effet dans un seul bloc de commande.

J'ai essayé cela initialement:

/testfor @a {ActiveEffects:[{Id:21b,Amplifier:20b}],Team=Moderators}

Mais j'ai obtenu une erreur dans la sortie du bloc de commande:

[17:45:02] Échec d'analyse de la balise de données : Impossible de localiser le séparateur nom/valeur pour la chaîne : Team=Moderators

Maintenant, veuillez garder à l'esprit que je ne suis pas en version 1.9 sur mon serveur, ce qui signifie que je n'ai pas accès à toutes les commandes liées à cette version. Je crois que ce concept pourrait être utilisé sur d'autres serveurs qui ne veulent pas créer leurs propres plugins pour cela et préféreraient utiliser des blocs de commande comme moi.

3voto

MrLemon Points 17073

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

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X