6 votes

Donner aux joueurs une flèche toutes les deux secondes, éventuellement avec /replaceitem

J'ai donc besoin de donner aux joueurs une flèche toutes les deux secondes, mais avec un maximum de deux flèches dans l'inventaire. Pour ce faire, j'ai essayé d'ajouter un objectif de tableau de bord appelé ArrowN et en fixant le score à 1 si le joueur a une flèche et à 2 si le joueur a deux flèches. Ensuite, toutes les deux secondes, on remplace par deux flèches si le joueur a une flèche. ArrowN score de 1 et de ne pas le remplacer s'il a un score de 2. Maintenant, je n'ai pas pu obtenir comment mettre un score de 0 pour un joueur qui n'a pas de flèches, pour le remplacer une flèche. Quelque chose comme ça fonctionne juste pour une moitié :

scoreboard objectives set @a[score_ArrowN=!1,score_ArrowN=!2] ArrowN 0

Je pense que l'opération pourrait être utile, mais je ne peux pas utiliser cette commande.

Note : il doit être multijoueur

Edit:utiliser /give est probablement plus facile mais je n'aime pas avoir des flèches qui apparaissent sur ton visage toutes les deux secondes

2voto

Monroecheeseman Points 825

Une partie de la solution consiste à utiliser le /stats pour compter le nombre de flèches dans l'inventaire d'un joueur en utilisant la commande /clear et définissez ce résultat comme un objectif du tableau d'affichage pour le joueur. Ensuite, il est assez simple de donner des flèches quand c'est nécessaire, et de les retirer. Voyons comment j'ai fait.

Tout d'abord, je fais ceci en 1.9, mais les commandes fonctionneront parfaitement en 1.8, avec un petit ajustement et une horloge de remplissage de 20Hz.

Nous avons besoin de 2 objectifs pour le tableau de bord : le nombre de flèches (que vous avez nommé ArrowN, je vais donc le garder dans mon exemple), et une variable de temporisation.

/scoreboard objectives add ArrowN dummy
/scoreboard objectives add Timer dummy

Ensuite, nous avons besoin d'une chaîne de blocs de commande, en commençant par un bloc de commande répétitif, suivi de plusieurs blocs de commande en chaîne. Réglez le bloc de commande répétitif sur "Needs Redstone", au moins pour le moment, et le reste sur "Always Activate". Les deux premières commandes, dans l'ordre, sont :

/scoreboard players remove #Timer Timer 1
/clear @a minecraft:arrow -1 0

#Timer est un joueur fictif qui n'apparaîtra jamais sur le tableau d'affichage des scores, et il gardera la trace du moment où il faut distribuer les flèches. Il peut être judicieux de définir initialement son paramètre Timer à 40, mais ce n'est pas strictement nécessaire. La deuxième commande comptera toutes les flèches qu'une personne a dans son inventaire, indépendamment du nombre de piles. Malheureusement, cela ne sert pas à grand-chose tant que ce compte n'est pas entré dans le tableau des scores. Pour ce faire, placez-vous sur le bloc de commande et entrez la commande suivante (via le chat) :

/stats block ~ ~-1 ~ set QueryResult @a ArrowN

Ainsi, chaque fois que le clear est exécutée, le compte qu'elle trouve sera placé dans ce joueur. ArrowN score.

Les trois commandes suivantes gèrent la minuterie de 2 secondes et distribuent les flèches. En 1.9, la première est inconditionnelle, tandis que les 2 autres sont conditionnelles. En 1.8, vous pouvez utiliser des comparateurs de chaque côté du premier bloc de commandes, mais c'est un peu inélégant.

/scoreboard players test #Timer Timer * 0
/scoreboard players set #Timer Timer 40
/give @a[score_ArrowN=1] minecraft:arrow

La première commande vérifie si le compteur a atteint 0 et, si c'est le cas, le remet à zéro (deuxième commande) et donne une flèche à tous les joueurs s'ils ont déjà au maximum une flèche (troisième commande).

Maintenant, il suffit de retirer les flèches aux personnes qui en ont trop. Ces commandes sont toutes inconditionnelles, de sorte qu'elles s'exécutent à chaque tick de jeu :

/clear @a[score_ArrowN_min=3] minecraft:arrow -1 1
/clear @a[score_ArrowN_min=12] minecraft:arrow -1 9
/clear @a[score_ArrowN_min=66] minecraft:arrow -1 54

Ces trois commandes retireront un total de 1 flèche si le joueur a entre 3 et 10, 10 flèches s'il a entre 12 et 66, et une pile entière s'il a 66 ou plus. Vous pouvez développer cette commande (et ajouter des intervalles plus fins) si vous trouvez que les flèches ne sont pas retirées assez rapidement, mais cela devrait prendre moins d'une seconde dans la plupart des cas.

0voto

Silentvenom7 Points 1014

Une façon de le faire serait de mettre en place un bloc de commande pour donner à chacun une flèche toutes les 2 secondes, puis dans un bloc de commande répétitif mettre :
/scoreboard players set @a Arrows 1 {Inventory:[{id:minecraft:arrow,Count:3b}]}
et ensuite :
clear @a[score_Arrows_min=1] minecraft:arrow
give @a[score_Arrows_min=1] minecraft:arrow 2
/scoreboard players set @a[score_Arrows_min=1] Arrows 0
dans les blocs de commande d'une horloge de remplissage afin qu'ils se déclenchent tous au même tick, dans cet ordre. (si vous êtes sur les snapshots de la 1.9, vous pouvez remplacer une fill clock par une chaîne de commande et le score Arrows par un tag)
Ce n'est pas idéal, et si un joueur obtient plus de 3 flèches d'une manière ou d'une autre, il continuera à recevoir des flèches pour toujours, mais sans la possibilité de vérifier les NBT annulés, comme par exemple {Inventory:[{Count:!2b}]} je pense que c'est votre meilleure chance.

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