1. Wiki
  2. /Entités
  3. /Filtres

Filtres

Comment fonctionnent les filtres d'entité dans les add-ons Minecraft Bedrock : test, subject, operator, value, all_of, any_of et none_of, plus un tableau des tests les plus utiles.

Un filtre est une question à laquelle on répond par oui ou par non, que le jeu se pose sur une créature. « L'attaquant est-il un joueur ? » « Fait-il jour ? » « Cette créature est-elle dans l'eau ? » Si la réponse est oui, le filtre passe et ce qu'il protège peut se produire.

Les filtres apparaissent partout dans les fichiers d'une créature : dans les événements, dans des composants comme les capteurs de dégâts et le ciblage, et dans les règles d'apparition. Apprends-les une fois et tu pourras t'en servir partout.

Les fichiers

Les filtres n'ont pas de fichier à eux. Ils se trouvent à l'intérieur d'autres fichiers, sous des clés nommées filters (ou biome_filter dans les règles d'apparition).

Où apparaissent les filtres
BP/
  entities/
    ruby_golem.json      <- in events and many components
  spawn_rules/
    ruby_golem.json      <- minecraft:biome_filter

Un seul test

Le plus petit filtre est un seul test :

Un seul test
{ "test": "is_family", "subject": "other", "operator": "==", "value": "player" }

Lis-le comme une phrase : « La famille de l'entité other est-elle égale à player ? »

ChampCe qu'il signifieSi tu l'omets
testQuelle question poser. Voir les tableaux plus bas.Obligatoire
subjectSur qui porte la questionself
operatorComment comparer avec valueequals
valueÀ quoi comparerPour les tests oui/non : true
domainUn détail en plus pour quelques tests, comme un emplacement d'équipement ou un nom de propriétéDépend du test

Grâce aux valeurs par défaut, les filtres courts sont fréquents :

Formes courtes
{ "test": "is_daytime" }
{ "test": "in_water", "value": false }
{ "test": "has_tag", "value": "wiki:tamed" }

Le premier demande « fait-il jour ? ». Le deuxième demande « cette créature n'est-elle pas dans l'eau ? ».

Sujets : qui est testé

SujetDe qui il s'agit
selfLa créature à qui appartient le filtre
otherL'autre entité d'une interaction : celle qui est ciblée, touchée ou avec qui on interagit
playerLe joueur impliqué dans l'interaction
targetLa cible actuelle de la créature
damagerCelui qui a causé les dégâts, dans un capteur de dégâts
parentLe parent de la créature
blockLe bloc concerné, pour les tests de bloc comme is_block

Les sujets qui ont du sens dépendent de l'endroit où se trouve le filtre. Dans un capteur de dégâts, other et damager désignent l'attaquant. Dans un comportement de ciblage, other est la créature envisagée comme cible.

Opérateurs : comment comparer

OpérateurSignifie
==, =, equalsÉgal à (par défaut)
!=, <>, notDifférent de
<Inférieur à
<=Inférieur ou égal à
>Supérieur à
>=Supérieur ou égal à

Les opérateurs supérieur/inférieur n'ont de sens que pour les tests de nombres comme actor_health ou distance_to_nearest_player.

Combiner des tests

Rassemble plusieurs tests dans un groupe :

GroupePasse quand
all_ofTous les tests à l'intérieur passent (ET)
any_ofAu moins un test à l'intérieur passe (OU)
none_ofAucun test à l'intérieur ne passe (NON)

Les groupes peuvent contenir d'autres groupes, donc tu peux construire n'importe quelle règle. Celle-ci passe pour un joueur qui ne s'accroupit pas, la nuit ou pendant un orage :

Un filtre imbriqué
"filters": {
  "all_of": [
    { "test": "is_family", "subject": "other", "value": "player" },
    { "test": "is_sneaking", "subject": "other", "value": false },
    {
      "any_of": [
        { "test": "is_daytime", "value": false },
        { "test": "weather_at_position", "value": "thunderstorm" }
      ]
    }
  ]
}

Une liste nue veut dire all_of

Si tu écris une simple liste de tests sans nom de groupe, chaque test doit passer, exactement comme all_of. Les règles d'apparition vanilla font souvent ça.

Où on utilise les filtres

Capteur de dégâts : réagir à qui t'a frappé

BP/entities/ruby_golem.json (components)
"minecraft:damage_sensor": {
  "triggers": [
    {
      "on_damage": {
        "filters": { "test": "is_family", "subject": "other", "value": "player" },
        "event": "wiki:become_angry"
      }
    }
  ]
}

Seuls les joueurs mettent le golem en colère. Les dégâts des créatures, des chutes ou du feu ne font rien de spécial. Voir minecraft:damage_sensor.

Ciblage : qui attaquer

BP/entities/ruby_golem.json (component_groups)
"minecraft:behavior.nearest_attackable_target": {
  "priority": 2,
  "entity_types": [
    {
      "filters": {
        "all_of": [
          { "test": "is_family", "subject": "other", "value": "monster" },
          { "test": "is_family", "subject": "other", "operator": "not", "value": "creeper" }
        ]
      },
      "max_dist": 16
    }
  ]
}

Le golem chasse les monstres, mais laisse les creepers tranquilles. Voir behavior.nearest_attackable_target.

Capteur d'environnement : réagir au monde

BP/entities/ruby_golem.json (components)
"minecraft:environment_sensor": {
  "triggers": [
    {
      "filters": { "test": "in_water" },
      "event": "wiki:start_rusting"
    }
  ]
}

Le capteur d'environnement vérifie ses filtres en permanence et déclenche l'événement tant qu'ils passent.

Événements et règles d'apparition

Dans les événements, filters décide si une entrée s'exécute (voir Événements d'entité). Dans les règles d'apparition, minecraft:biome_filter utilise les mêmes tests pour choisir les biomes (voir Règles d'apparition).

Les tests les plus utiles

Il existe plus d'une centaine de tests. Voici ceux dont tu te serviras le plus souvent, rangés selon ce qu'ils vérifient.

Qui est-ce ?

TestValeurPasse quand le sujet...
is_familyNom de famille, comme "player"a cette famille dans minecraft:type_family
has_componentID de composant, comme "minecraft:is_baby"a ce composant en ce moment
has_tagNom du taga ce tag venant de /tag
is_babytrue / falseest un bébé
is_tamedtrue / falseest apprivoisé
is_ownertrue / falseest le propriétaire de la créature à qui appartient le filtre
has_nametagtrue / falsea un nom personnalisé
is_variantNombrea ce nombre dans minecraft:variant
is_mark_variantNombrea ce nombre dans minecraft:mark_variant
is_colorNom de couleur, comme "red"a cette couleur

Santé et état

TestValeurPasse quand le sujet...
actor_healthNombrea une santé comparée à la valeur (utilise <, >, etc.)
is_missing_healthtrue / falsen'a pas toute sa santé
has_mob_effectID d'effet, comme "poison"a cet effet. Voir Effets vanilla.
on_firetrue / falseest en feu
on_groundtrue / falseest posé sur le sol
is_sneakingtrue / falseest accroupi
is_sprintingtrue / falsesprinte
is_movingtrue / falseest en mouvement
is_ridingtrue / falsechevauche une autre entité
rider_countNombrea ce nombre de cavaliers
has_targettrue / falsea quelque chose à attaquer
has_damageType de dégâts, comme "fall" ou "fire"subit ce type de dégâts (capteurs de dégâts)

Objets

TestValeurPasse quand le sujet...
has_equipmentID d'objeta cet objet dans l'emplacement indiqué par domain, comme "hand", "head" ou "any"
has_equipment_tagTag d'objeta un objet avec ce tag dans l'emplacement domain
has_ranged_weapontrue / falsetient un arc ou une arbalète

Où il se trouve

TestValeurPasse quand le sujet...
in_watertrue / falseest dans l'eau
is_underwatertrue / falseest complètement sous l'eau
in_water_or_raintrue / falseest dans l'eau ou sous la pluie
in_lavatrue / falseest dans la lave
is_undergroundtrue / falsea des blocs au-dessus de lui
in_nether / in_overworldtrue / falseest dans cette dimension
has_biome_tagTag de biome, comme "desert"est dans un biome avec ce tag. Voir Biomes vanilla.
is_biomeType de biome, comme "ocean" ou "jungle"est dans ce grand type de biome
is_altitudeNombreest à une hauteur comparée à la valeur
is_blockID de bloc(avec "subject": "block") le bloc concerné est ce bloc
is_in_villagetrue / falseest dans un village

has_biome_tag ou is_biome ?

Préfère has_biome_tag. Les tags sont plus précis, et les biomes personnalisés d'autres add-ons peuvent porter les mêmes tags.

Distance

TestValeurPasse quand...
distance_to_nearest_playerNombre de blocsle joueur le plus proche est à cette distance (utilise < ou >)
target_distanceNombre de blocsla cible de la créature est à cette distance
owner_distanceNombre de blocsle propriétaire de la créature est à cette distance
home_distanceNombre de blocsle foyer de la créature est à cette distance

Heure, météo et monde

TestValeurPasse quand...
is_daytimetrue / falseil fait jour
hourly_clock_timeNombre de 0 à 24000l'heure du jour comparée à la valeur
moon_phaseNombre de 0 à 7la lune est dans cette phase
weather_at_positionMétéo, comme "thunderstorm"la météo là où se tient le sujet correspond
is_difficulty"peaceful", "easy", "normal" ou "hard"le jeu est dans cette difficulté
is_game_ruletrue / falsela règle de jeu indiquée dans domain est activée
random_chanceNombreun tirage au hasard réussit : une valeur de 10 passe environ 1 fois sur 10

Propriétés d'entité

Ces tests lisent les propriétés déclarées dans la description de la créature. Le nom de la propriété va dans domain :

TestValeur
bool_propertytrue / false
int_propertyNombre entier
float_propertyNombre décimal
enum_propertyUn des mots de values
has_propertyLe nom de la propriété (dans value, sans domain)
Tester une propriété
{ "test": "enum_property", "domain": "wiki:mood", "value": "angry" }

Quand quelque chose ne va pas

Ce que tu voisCause la plus probable
Le filtre ne passe jamaisMauvais subject. Dans un capteur de dégâts ou un ciblage, tu veux en général other, pas self.
Le filtre passe alors qu'il ne devrait pasIl manque "value": false à un test oui/non là où tu voulais dire « non », ou une clé est mal écrite (comme allof). Regarde le journal de contenu (Content Log).
Un test de famille échoueLa famille n'est pas dans la liste minecraft:type_family de la cible
Un test de propriété échoueLe nom de propriété dans domain ne correspond pas à celui de description.properties
Un test de nombre se comporte bizarrementL'opérateur manque, donc il cherche une égalité exacte

Plus d'aide dans Dépannage.

We use cookies to improve your experience and analyse site traffic. Learn more