Détecter si un Porte armure est oui ou non sur un zombie.

Cinahcem

Bucheron
18 Février 2018
21
3
16
Bonjour,
j'aimerais savoir comment détecter si un porte armure chevauche un zombie. Je créer une map où il y a des mobs qui spawn, ces mobs en question sont des bébés zombies avec un porte armure sur eux, ce porte armure a le tag "MOB" pour le différencier des autres de la map, j'aimerais que lorsque le joueur tue le porte armure, celui ci disparaisse. J'ai pensé à quelque chose, mettre le tag "riding" à tous les porte armures qui sont sur les zombies, seulement ça ne fonctionne avec ancune de ces commandes
/execute at @e[tag=MOB,nbt={RootVehicle:{Entity:{id:"minecraft:zombie"}}}] run tag @s add riding
/tag @e[tag=MOB,nbt={RootVehicle:{Entity:{id:"zombie"}}}] add riding
/tag @e[tag=MOB,nbt={RootVehicle:{}}] add riding
le jeu me dit "No entity was found"
Si quelqu'un a une solution je suis preneur
Merci d'avance
 

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
Le tag RootVehicle correspond au joueur. Malheureusement, pour les autres entités, le tag de passager a été changé il y a quelque temps, passant de Riding à Passengers.

Le truc, c'est que seule l'entité chevauchée a un tag de passager (Passengers:[{id:#}]). Il est donc impossible de détecter directement si un porte-armure chevauche un zombie (note que c'est faisable, par exemple en simulant un système d'UUIDs jumeaux zombie/porte-armure)


Seulement, tu pourrais expliquer plus ce que tu veux que les zombies évoqués fassent? À part pour leur hitbox ou leur capacité à porter des objets, les porte-armures ne sont jamais la meilleure solution...
On pourrait simplement trouver un meilleur moyen...
 

Cinahcem

Bucheron
18 Février 2018
21
3
16
Le tag RootVehicle correspond au joueur. Malheureusement, pour les autres entités, le tag de passager a été changé il y a quelque temps, passant de Riding à Passengers.

Le truc, c'est que seule l'entité chevauchée a un tag de passager (Passengers:[{id:#}]). Il est donc impossible de détecter directement si un porte-armure chevauche un zombie (note que c'est faisable, par exemple en simulant un système d'UUIDs jumeaux zombie/porte-armure)


Seulement, tu pourrais expliquer plus ce que tu veux que les zombies évoqués fassent? À part pour leur hitbox ou leur capacité à porter des objets, les porte-armures ne sont jamais la meilleure solution...
On pourrait simplement trouver un meilleur moyen...
Ah dommage...
En fait j'ai mi un item sur la tête du porte armure pour ensuite que cet objet est une texture 3D qui s'affiche aux pied du zombie, ensuite les deux entités sont invisibles et on ne voit que la textures qui se déplace lorsque le bébé zombie focus le joueur (le problème c'est que le zombie ne bouge que lorsque le joueur est là car sinon c'est le porte armure qui le contrôle, mais comme il ne bouge pas...), je ne voulais pas mettre l'item directement sur le zombie car sa tête bouge et du coup le bloc aussi...
 

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
Ah donc en gros tu veux faire un "bloc attaquant" et tu veux que le zombie prenne les dégâts infligés au bloc?

Ben ça serait possible de faire disparaître le porte-armures en même temps... mais c'est pas le seul problème.

Tu as prévu quoi pour la hitbox du porte-armures? Vu que c'est un bébé zombie, le joueur risque de frapper le porte-armure plutôt que le zombie, le rendant partiellement invincible...
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Comme le dit @Eglaios, le plus simple et plus pratique est sans doute de passer par un système de UID.
Dans l'idée,
  • Tu invoques ton zombie et ton armor-stand avec un tag particulier (genre Tmp pour les deux).
  • Dans le même tick, tu appelles un générateur de nombre pseudo-aléatoire (il en existe des simples sur Internet) et tu associes ce nombre à toute entité qui a le tag Tmp.
  • Tu removes le tag Tmp des entités.

Chaque tick, tu exécutes sur chaque zombie (et/ou armor-stand) un test d'égalité des scores (avec le if score du execute) et tu regardes combien d'entité correspondent au score. Si le nombre est égal à deux (ou que l'une des entités qui match est un armor-stand dans le cas de l'exécution sur un zombie), alors c'est bon, sinon, tu kill.
 

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
Je dis "UUID", mais c'est vrai que si c'est deux entités aux mêmes IDs, ça peut pas être un Universal Unique Identifier... :(


Ben pour le système d'UID, je pensais plus à un score qui augmente de 1 à chaque entité, genre :

-Créer un objectif dummy "ID" et deux dummy players : "$Storage" auquel on met un score "ID" de 0 et "$Num1" auquel on met un score "ID" de 1, avant de lancer le système
-Pour chaque nouveau duo zombie/porte-armure :
1. Summon des deux entités avec tag Tmp
2. Ajouter 1 au score "ID" du dummy "$Storage" (operation $Storage ID += $Num1 ID)
3. Copier le score "ID" actuel de "$Storage" sur les entités taguées Tmp (operation @e[tag=Tmp] ID = $Storage ID)
4. Enlever le tag Tmp des entités ciblées


Je pense que c'est mieux que le random, qui a quand même une chance infime de ressortir le même nombre... ce dernier est plus pratique dans les UIDs comme ceux de minecraft qui mélangent chiffres et lettres mais par commande, c'est beaucoup plus simple de se servir uniquement des chiffres...
C'est sûr que si tu prévois invoquer plus de 2^31 (2.1 milliards) d'entités en tout, ça dépassera la limite de score et ça sera foutu... À moins que tu ne trouves un moment où tous les zombies disparaissent pour te permettre de remettre le score à 0...

Au fait, si on commence le score à -(2^31), ça pourrait contenir 2^32 IDs?


Après, y a aussi le point de la hitbox du porte-armures qu'il faut voir...
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
En effet, on peut faire un simple incrémenteur pour le score mais le soucis est que c'est borné ^^
Si l'on part sur le principe que les entités vont tous dépop au bout d'un certain moment, alors le système d'UID par random à au moins l'avantage de réattribuer des scores l'ayant déjà été, même si en effet, il y a possibilité de doublons ! Une solution intermédiaire est dans ce cas de vérifier lors de l'attribution si le score n'est pas déjà attribué, et si c'est le cas, alors de refaire un tirage.
Pour la hitbox, il vaut mieux se baser sur celle du mob que sur celle de l'armor-stand (qui peut se voir désactiver sa hitbox).
 

Eglaios

Crétin de la commu
14 Avril 2018
310
42
89
25
Ah ben oui, si on fait un random+check, je confirme, c'est mieux... J'ai vu que pour ça, c'est courant d'invoquer une entité et de transférer son UUID en score en jouant avec la scale et le modulo

Pour le porte-armures, avec le tag "Marker:1" (pour désactiver la hitbox), je pensais que ça marcherait pas mais oui, c'est bon...
Ça consiste à réduire la hitbox du porte-armure au maximum, je crois, vu que le customname s'affiche plus bas
 
Dernière édition:
  • J'aime
Reactions: Oromis