Question:
Comment sélectionner tous les types d'entités sauf deux dans Minecraft avec le sélecteur de type?
Codingale
2014-05-04 01:53:18 UTC
view on stackexchange narkive permalink

J'ai posé cette question à un développeur de Minecraft et j'ai pensé que je la poserais ici aussi car il pourrait ne pas voir la question.

Comment sélectionner tous les types d'entités sauf deux dans Minecraft ?

Par exemple, quelque chose comme: / say @e [type =! [Player, Item], r = 50] (pour clarifier, j'ai aussi essayé type = Item, Player , type = Item, type = Player etc)

Devrait sélectionner toute entité qui ne correspond pas aux joueurs ou aux éléments, donc des choses comme Creepers, Ghasts, XPOrbs, PrimedTNT et ainsi de suite dans un rayon de 50 blocs et les imprimer dans le chat.

Au lieu de cela, il ignore l'un des drapeaux et fonctionne avec l'autre à la place.

Je ne pense pas que vous puissiez, malheureusement.
J'ai demandé à Dinnerbone à ce sujet, mais il faudra un certain temps avant qu'il ne réponde, je suis sûr qu'il le fait même.Mais si quelqu'un d'autre peut trouver un moyen de le faire, merci de le partager.
@MBraedley ça l'est, la réponse d'idtownie semble que ça marcherait mais je ne l'ai pas testé.
@Codingale La modification de la question que vous avez faite il y a quelques jours a complètement changé la nature de la question et invalidé la plupart des réponses.Ce n'est généralement pas une bonne idée.
@pppery J'ai annulé l'édition car cela a du sens pour tous ceux qui recherchent cet échantillon exact, l'ancien moi était fatigué et n'y pensait pas invalider les réponses existantes et peut-être dérouter les futurs lecteurs lorsque les réponses précédentes ne fonctionnent pas comme prévu. Merci pour l'information.
Huit réponses:
idtownie
2014-08-01 16:37:09 UTC
view on stackexchange narkive permalink

Commencez par créer un objectif de tableau de bord factice:

/ objectifs du tableau de bord ajoutez le mannequin selectMe

Ensuite, sur une horloge redstone rapide, donnez à toutes les entités selectMe score de 1:

/ scoreboard players set @e selectMe 1

Donnez à tous les joueurs et objets un score selectMe de 0 avec ces deux blocs de commande:

/ scoreboard players set @e [type = Player] selectMe 0

/ scoreboard players set @e [type = Item] selectMe 0

Maintenant, vous pouvez les sélectionner en ciblant toutes les entités dans un rayon de 50 blocs qui ont un score selectMe de 1:

/ say @e [score_selectMe_min = 1, r = 50]

J'espère que cela vous a aidé! :)

Des choses comme celles-ci me donnent VRAIMENT envie d'en savoir plus sur les tableaux de bord.
Je n'y ai pas pensé.C'est incroyable, mais j'ai toujours l'impression qu'ils devraient ajouter un moyen de pomper dans un tableau aux sélecteurs.
Ou ajoutez simplement une virgule Exemple./ say @e [type =! Player,! Item, r = 50]
@user97203 Cela fonctionne-t-il réellement?L'avez-vous testé?
Ce n'est pas le cas, il suit le premier drapeau mais il ignore celui de `! Item`.J'ai essayé plusieurs façons, jusqu'à présent, la réponse fournie fonctionne.
@Codingale c'est parce que, comme écrit, Minecraft voit cela comme un autre argument de sélection de cible (car il est séparé par des virgules).Puisque `! Item` n'est évidemment pas un argument valide, il est complètement ignoré.
Comme je l'ai dit @MrLemon, j'ai essayé de nombreuses permutations et il n'y a pas de moyen.J'ai pensé qu'un tableau tel que `[Item, Player]` etc fonctionnerait mais non.
MrLemon
2016-04-07 17:07:07 UTC
view on stackexchange narkive permalink

À partir de Minecraft 1.9, les balises de tableau de bord conviennent mieux pour cela que de définir un objectif et d'attribuer un score.

C'est aussi simple que de configurer des blocs de commande de répétition (ou une ligne de répétition / chaîne) et de mettre:

  / scoreboard players tag @e [type = Player] add playerOrItem
/ scoreboard players tag @e [type = Item] add playerOrItem
 

Vous pouvez ensuite utiliser @e [tag = playerOrItem] et @e [tag =! playerOrItem] pour sélectionner chaque entité qui est et n'est ni un joueur ni un élément, respectivement.


Les avantages de l'utilisation de balises par rapport aux objectifs du tableau de bord sont:

  1. Pas besoin de définir un objectif.
  2. Ils sont initialisés comme vides par défaut.C'est à dire. @a [tag =! banana] fonctionne sur tous les joueurs par défaut, contrairement à @a [score_banana = 0] .Cela signifie que vous devez uniquement affecter les cibles que vous souhaitez réellement affecter.
  3. Les balises sont également stockées dans les données des entités NBT, dans la balise Tags .
Codingale
2019-07-05 01:40:17 UTC
view on stackexchange narkive permalink

Depuis Minecraft 1.13 (Java Edition), vous pouvez désormais utiliser plusieurs sélecteurs pour cibler des entités.

Depuis le Wiki Minecraft:

tag = foo, tag = bar, tag =! baz correspond à quelqu'un avec foo, bar et pas baz.

type =! cow, type =! chicken correspond à quelque chose qui n'est ni une vache ni un poulet.

type = cow, type = chicken n'est pas autorisé, car quelque chose ne peut pas être à la fois une vache et un poulet.

For versions antérieures à 1.13

Vous pouvez utiliser idtownie ou this from user113642, ce dernier n'ayant pas été testé.

J'aime particulièrement le commentaire de Dinnerbone sur le fait d'être à la fois [une vache et un poulet] (https://gist.github.com/Dinnerbone/943fbcd763c19be188ed6b72a12d7e65/a7ecc4cfb1d12b66aeb6d4e7f643bec227f0d4f7#entity-selectors)
mineguy1009
2015-07-30 15:38:32 UTC
view on stackexchange narkive permalink

Le moyen le plus efficace de sélectionner deux entités spécifiques à la fois avec l'argument "type" est de placer deux arguments "type" l'un à côté de l'autre.

Ex.

@ e [type = Player, type = Villager]

Cible uniquement les joueurs et les villageois.

Ex.

@r [type = Player, type = Villager]

Cible uniquement les joueurs et les villageois. Cependant, ce sélecteur de cible choisit une entité aléatoire dans les paramètres spécifiés de l'argument, alors que le sélecteur précédent a choisi chaque entité qui répondait aux paramètres de l'argument.

Cela peut durer indéfiniment jusqu'à ce que vous ayez sélectionné chaque type d'entité dans Minecraft (Cependant, ce serait une perte de temps totale car la même action peut être effectuée avec @e).

Veuillez corriger toutes les erreurs que j'ai pu faire.

Pour en savoir plus Pour plus d'informations sur les arguments du sélecteur de cible, veuillez consulter cet article du forum Minecraft.

http://www.minecraftforum.net/forums/minecraft-discussion/redstone-discussion-and/command-blocks/2477949 -minecraft-pc-target-selectors-and-their-arguments

[Cela n'a pas fonctionné pour moi] (http://i.imgur.com/XRuSOkN.png), la réponse précédente sélectionnée répond mieux à cela.Je crois que j'avais déjà testé toutes (ou presque toutes) les permutations avant de publier, y compris `[type = Item, Player]` `[type = Item, type = Player]` `[type = [Item, Player]` et je distinctementsouvenez-vous d'un qui m'a écrasé et aucun d'eux ne fonctionne.
Cela ne marche pas.En raison de la simple analyse des arguments que Minecraft utilise, `@e [type = Player, type = Villager]` est fonctionnellement identique à `@e [type = Villager]`.Le deuxième argument remplace simplement le premier.
user113642
2016-08-11 02:18:25 UTC
view on stackexchange narkive permalink

Dans Minecraft 1.9, il existe un moyen simple de le faire sans tableaux de bord en utilisant des blocs de commande en chaîne. Pour démonstration, je tuerai toutes les entités qui ne sont pas des joueurs ou des objets.

Premier bloc de commande: exécutez @e ~ ~ ~ invoquer ArmorStand ~ ~ ~ {Invisible: 1, NoGravity: 1}

Cela fait qu'une armure se tient au même endroit que chaque entité. Le premier bloc de commande doit faire face au second bloc de commande.

Deuxième bloc de commande: exécutez @e [type = Player] ~ ~ ~ kill @e [type = ArmorStand, c = 1]

Cela oblige tous les joueurs à tuer les supports d'armures qui sont sur le point de faire quelque chose.

Troisième bloc de commande: exécutez @e [type = Item] ~ ~ ~ kill @e [type = ArmorStand, c = 1]

Idem que ci-dessus sauf avec les joueurs. Vous pouvez le faire autant de fois que vous le souhaitez.

Dernier bloc de commande: exécute @e [type = ArmorStand] ~ ~ ~ kill @e [c = 2] ~ ~ ~

Cela oblige tous les supports d'armures à se tuer eux-mêmes et l'entité qu'ils représentaient.

Les avantages:

  • Utilise des supports d'armure. Pourquoi pas?
  • Ne nécessite pas de tableaux de résultats

Les inconvénients:

  • Si une entité meurt / se téléporte vers un endroit éloigné après l'invocation du support d'armure mais avant que les supports d'armure exécutent leurs commandes, une entité qui n'est pas censée être tuée sera tuée

Si vous souhaitez que toutes les entités non-élément non-joueur exécutent une commande, utilisez simplement ceci:

Dernier bloc de commande: exécute @e [type = ArmorStand] ~ ~ ~ exécute @e [r = 1, c = -1] ~ ~ ~ <command>

Inconvénients de ceci:

  • Si une entité meurt / se téléporte / quitte la portée en moins de 1 ms, le support d'armure exécutera la commande lui-même
ThatGuy124816
2017-11-12 23:23:20 UTC
view on stackexchange narkive permalink

À partir de la version 1.12, vous pouvez faire @e [type =! Player, type =! Sheep, r = 10] .Cela fonctionne car il vérifie d'abord un mob non-joueur, puis il vérifie un mob non-mouton.Le rayon vérifie les deux paramètres dans le rayon.La syntaxe est correcte car la virgule sépare les datatags et juste ! Player ou ! Sheep ne fonctionnerait pas.

N'est-ce pas un changement de 1.13?
Non, je l'ai utilisé avec succès dans mes travaux de commande.Lorsque j'appelle deux fois pour un contrôle de type mob, il agit comme un opérateur logique AND.Ce ne doit pas être un joueur ET pas un mouton
Cela ne fonctionne ** pas ** dans la version 1.12.Vous obtenez de faux positifs.Avant la version 1.13, les paramètres de sélecteur sont un tableau associatif de base, où les noms de clé doivent être uniques.Le second «type» écrase complètement le premier «type».Votre commande en 1.12 ne ciblera que tout ce qui n'est pas un mouton.
FOODFREAK28
2015-11-29 01:36:50 UTC
view on stackexchange narkive permalink

Un moyen beaucoup plus simple de faire cela est d'utiliser cette commande:

/ kill @e [type =! Player, r = 20].Le point d'exclamation signifie tout tuer sauf le type d'entité ciblé.Vous pouvez mettre cela sur une horloge Redstone et cela fonctionne très bien.J'espère que cela vous a aidé!:) P.S.vous pouvez mettre autant d'entités que vous le souhaitez dans la commande.Faites juste ceci: / kill @e [type =! Player,! Sheep, r = 20]

Cela ne répond pas vraiment à la question, et la dernière partie est tout simplement fausse.`/ kill @e [type =! Player,! Sheep, r = 20]` * tuera * tous les moutons dans les 20 blocs, car ce n'est certainement pas ainsi que fonctionnent les arguments du sélecteur de cible.
Ouais, comme ils l'ont dit.Ce n'est pas correct, et cela a été soulevé dans la question initiale et les commentaires d'autres réponses.
Egor Hans
2016-06-14 18:58:22 UTC
view on stackexchange narkive permalink

Comme d'autres me l'ont expliqué plus tard, la vraie raison est que les restrictions du même genre s'écrivent mutuellement. Désolée, je ne peux pas m'empêcher d'essayer d'utiliser la logique pour répondre à des questions auxquelles je ne connais pas la réponse, perdant de vue que les choses ne sont généralement pas aussi logiques que je le pense.


Orponse originale:

Je ne cible pas fréquemment les entités, mais suite à l'échec de la réponse de mineguy1009, je vois ce qui suit:

La réponse échoue très probablement car elle est analysée comme [type = Player AND type = Villager] , ce qui entraîne bien sûr des absurdités (ce n'est pas exactement un non-sens en soi, en fait c'est une approche assez la virgule suggère que ce serait [type = Player OR type = Villager] ).

Cependant, comme vous niez, c'est exactement ce dont vous avez besoin: [type =! Player, type =! Item] doit être analysé comme [type! = Player AND type! = Élément] . Si vous voulez que les entités appartiennent à l'une ou l'autre des catégories d'un groupe, intuitivement, ce devrait être [! [Type =! <type1>, type =! <type2>, ...], <otherconditions>] . Si cela ne fonctionne pas, vous pouvez toujours opter pour des groupes inversés, ce qui serait cependant terriblement long (car vous devez littéralement lister toutes les entités qui ne seront pas dans votre groupe).

Si cette réponse échoue également, le ciblage par entité est, oui, wat.

Sauf que c'est complètement faux.Lors de l'analyse de «[type = Player, type = Villager]», le jeu oublie simplement «Player», la variable de type est juste écrasée.De plus, pas égal est `=!` Dans Minecraft en raison de l'analyse de `argument = valeur`, où le signe égal est fixe et la valeur est annulée par le!.
@MrLemon J'ai utilisé l'opérateur différent pour clarifier son pseudo code.Si Villager écrit Player, alors, bien sûr, wat.
Cela m'intéresserait, au fait, pour tous ceux qui cliquent sur le lien: avez-vous observé ce niveau d'absurdités dans des trucs de MineCraft?Parce que bien sûr, la gestion des restrictions n'est pas logique, mais pas au degré extrême des exemples de la vidéo.
Les paramètres du sélecteur @EgorHans sont mappés sous la forme d'un [tableau associatif] de base (https://en.wikipedia.org/wiki/Associative_array), où les noms de clé doivent être uniques.Ce serait la même chose que d'essayer de déclarer le tableau `[" key1 "=>" a "," key1 "=>" b "]` dans ce que "key1" a été dupliqué et donc écrasé.
@Skylinerw Cela a du sens jusqu'à un certain point.Cependant, il est assez évident que l'implémenter comme ça n'est pas vraiment une bonne idée.Si vous avez plusieurs occurrences d'une clé, vous vous attendez à ce que les deux aient un certain impact.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...