Détecter quand le joueur attaque un autre joueur

Je voudrais détecter quand un joueur attaque / frappe / fait mal à un autre joueur ou entité. J'ai essayé d'utiliser la balise AttackTime , mais cela ne fonctionne pas. Voici ce que j'ai essayé (sur une horloge de 20 heures):

Premier bloc de commande:

 scoreboard players set @a Attack 0 {AttackTime:0s} 

Deuxième bloc de commande:

 scoreboard players set @a Attack 1 {AttackTime:1s} 

Troisième bloc de commande:

 tellraw @a[score_Attack_min=1] "Nice shot!" 

2 Solutions collect form web for “Détecter quand le joueur attaque un autre joueur”

J'ai compris comment faire cela. J'utilise l'objectif du tableau de bord de stat.damageDealt . D'abord, je lance la commande suivante une fois :

 /scoreboard objectives add hit stat.damageDealt 

Ensuite, sur l' horloge 20Hz, je fais ce qui suit:

  • Premier bloc de commande:

    /tellraw @a[score_hit_min=1] "Nice Hit!"

  • Deuxième bloc de commande:

    /scoreboard players reset @a[score_hit_min=1] hit

La façon dont cela fonctionne est que les points sont ajoutés à l'objectif stat.damageDealt chaque fois qu'ils frappent / attaquent / blessent une entité ou un joueur. Ensuite, il exécute la commande sur chaque joueur qui a blessé une autre entité ou joueur. Lorsque cette commande est terminée, l'objectif est réinitialisé.

Comment j'ai trouvé que c'est sur le menu des statistiques du menu de pause, il y a une statistique appelée Damage Dealt .

MODIFIER:

Dans Minecraft 1.9, utilisez le bloc de commande répétitif au lieu d'une horloge de 20Hz .

Cette réponse est basée sur la réponse de @ CommandFox et sur ma propre idée (totalement horrible) pour une solution. Cependant, j'ai constaté que la combinaison des deux ajoute une limitation possible pour blesser des entités spécifiques.

D'abord, créez deux objectifs: didDamage et hurtTime

 scoreboard objectives add didDamage stat.damageDealt scoreboard objectives add hurtTime dummy 

Ensuite, créez une horloge de remplissage et exécutez les commandes suivantes:

 scoreboard players add @e hurtTime 1 scoreboard players set @e hurtTime 0 {HurtTime:0s} execute @e[score_hurtTime_min=1,score_hurtTime=1] ~ ~ ~ tellraw @a[score_didDamage=1] "Nice hit!" scoreboard player set @a didDamage 0 

Jusqu'à présent, nous n'avons gagné rien en utilisant l'objectif de hurtTime . Le principal avantage est que cela peut être limité en utilisant son sélecteur cible. Par exemple, en utilisant

 scoreboard players add @e[type=Zombie] hurtTime 1 scoreboard players set @e[type=Zombie] hurtTime 0 {HurtTime:0s} 

Fait que le message n'apparaît que lorsque vous frappez un zombie. L'utilisation de multiples de cette paire de blocs de commandes permet de sélectionner plusieurs entités.

  • Syntaxe pour ajouter plusieurs commandes à un bloc de commande unique
  • Comment trouver les meilleurs résultats d'un objectif?
  • Existe-t-il un moyen de créer une barre de santé visible pour les mobs autres que les dragons et les mûres ender?
  • Comment je teste pour un élément qu'un joueur tient?
  • MCPE donne des composants de commande
  • Comment puis-je utiliser les blocs de commandes pour empêcher les joueurs de placer des blocs sur un serveur vanilla?
  • Élimination des éléments avec les balises NBT
  • Comment puis-je détecter si un joueur porte une armure spécifique?
  • Random spawn pour le serveur multijoueur Minecraft
  • Comment faire une chaîne de blocs de commandes?
  • Shulker Shells Drop