Aller au contenu principal

Conditions des Elite Scripts

Les conditions permettent aux scripteurs d'empêcher l'exécution de scripts et / ou d'actions selon des conditions précises.

Mettez une majuscule à Conditions au niveau du script

Au niveau du script, la clé distingue les majuscules des minuscules. Un conditions: en minuscules y est ignoré : le script s'exécute alors sans aucune condition et rien n'est enregistré. Sous une action, la clé est lue quelle que soit sa casse, mais une action contenant à la fois Conditions: et conditions: fait ignorer tout le script par EliteMobs. Utilisez une table YAML, pas une liste. Les clés internes (isAlive, conditionType, Target, ...) sont insensibles à la casse, mais les valeurs d'énumération telles que BLOCKING et FILTERING doivent être en majuscules.

Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Conditions:
isAlive: true
conditionType: BLOCKING
Target:
targetType: SELF
Actions:
- action: PLACE_BLOCK
Target:
targetType: SELF
offset: 0,3,0
duration: 20
material: DIRT
Conditions:
locationIsAir: true
conditionType: FILTERING
Target:
targetType: ACTION_TARGET
Cooldowns:
local: 60
global: 20

Example exige une entité de boss valide. L'action vérifie le bloc situé 3 blocs au-dessus et n'y place de terre que s'il s'agit d'air, pour une durée de 20 ticks. Chaque action peut avoir ses propres conditions.

Target​

Les conditions utilisent le système de Targets. Leur Target est indépendant de celui de l'action et vaut SELF par défaut. Utilisez ACTION_TARGET avec les conditions FILTERING d'une action pour vérifier individuellement ses cibles résolues.

Les conditions du script et les conditions d'action BLOCKING résolvent leur propre Target. Les cibles d'entités comme SELF ou NEARBY_PLAYERS fournissent des entités pour chaque vérification. LOCATION et LOCATIONS ne fournissent aucune entité : seules les vérifications d'emplacement s'appliquent à leurs positions, et le nombre de cibles vaut 0. ACTION_TARGET ne résout rien dans ce cas : seuls randomChance et les nombres de cibles s'appliquent. LANDING_LOCATION échoue dans les conditions de niveau script, car elles s'exécutent avant qu'un point d'atterrissage n'existe.


Type de condition​

CléDétailsValeurs
conditionTypeDéfinit le type de conditionBLOCKING / FILTERING

BLOCKING bloque le script entier ou l'action dans laquelle la condition se trouve. Bloquer une action ne bloque pas les autres. FILTERING avec ACTION_TARGET retire les cibles qui échouent aux vérifications applicables.

Les conditions situées en dehors des actions sont toujours BLOCKING. Les conditions situées à l'intérieur des actions peuvent être BLOCKING ou FILTERING.

Remarque : si la cible est SELF (le boss) et que la vérification de condition est isAlive, la vérification est toujours BLOCKING ! Ceci peut être placé à l'intérieur d'une condition FILTERING et fera tout de même se comporter cette partie spécifique comme BLOCKING.

Les conditions à l'intérieur des actions sont définies sur FILTERING par défaut.

Utilisez ACTION_TARGET avec FILTERING pour examiner chaque cible résolue de l'action. BLOCKING nécessite une cible concrète, telle que SELF ou NEARBY_PLAYERS : son calcul du nombre d'entités ne résout pas ACTION_TARGET.

randomChance, targetCountLowerThan et targetCountGreaterThan sont évalués au niveau du script ou dans les conditions d'action BLOCKING. Le filtrage individuel ne les évalue pas.

Les vérifications applicables se combinent par ET. Une condition bloquante exige que toutes les entités et positions sélectionnées réussissent. Une sélection vide ne provoque pas à elle seule un échec ; utilisez targetCountGreaterThan: 0 pour exiger au moins une entité. Avec une cible de condition concrète au lieu d'ACTION_TARGET, le filtrage vérifie cette sélection indépendante, puis conserve toutes les cibles initiales de l'action ou les retire toutes.

Le filtrage suit ce que demande l'action : les actions sur des entités vérifient leur validité, leurs tags et la position de leurs pieds sans décalage ; les actions sur des positions ne vérifient que les conditions de position. Les tags et isAlive ne filtrent pas une collection de positions, sauf pour la vérification bloquante spéciale de validité de SELF décrite ci-dessus.

Les conditions du script sont évaluées avant le lancement des actions. Les conditions bloquantes d'une action sont évaluées après wait et à chaque répétition ; un échec annule les répétitions restantes de cette action. Éliminer toutes les cibles par filtrage n'annule pas à lui seul les répétitions futures. L'échec d'une condition du script empêche son délai de recharge de démarrer ; celui d'une condition d'action n'annule pas le délai du script.


Placement des blocs de condition​

Vous pouvez placer ou imbriquer les blocs de condition de deux façons :

  1. Sous des actions individuelles – La condition s'appliquera uniquement à une action précise. Si la condition est remplie, l'action s'exécute ; sinon, elle ne s'exécute pas.

  2. Sous l'ensemble du script – La condition s'applique à toutes les actions du script. Si la condition n'est pas remplie, aucune des actions ne s'exécutera.

Vous trouverez ci-dessous des exemples illustrant comment imbriquer les blocs de condition pour les actions individuelles et pour l'ensemble du script.

Sous des actions individuelles :

Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 10
sValue: "&2Hello World!"
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"

Le bloc aux pieds du boss et celui situé 3 blocs au-dessus doivent tous deux être de l'air pour exécuter SET_WEATHER. Les conditions bloquantes vérifient la position de l'entité avant la position décalée. MESSAGE s'exécute quand même, car cette action n'a pas de condition.

Sous l'ensemble du script :

Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 10
sValue: "&2Hello World!"
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"

Le bloc aux pieds du boss et celui situé 3 blocs au-dessus doivent tous deux être de l'air pour autoriser les deux actions lorsqu'il est touché. Sinon, le script est bloqué, y compris SET_WEATHER et MESSAGE.


Inverser une condition avec runIf...Is​

Chaque condition possède une clé compagne runIf...Is qui l'inverse. Ce sont toutes des booléens et toutes valent true par défaut (ce qui signifie « exécuter lorsque la condition est vraie »). Définir l'une d'elles à false inverse cette condition.

Il n'existe pas de clé générique runIfConditionIs — chaque condition a son propre nom exact, et trois d'entre elles ne suivent pas le schéma attendu. Une clé non reconnue n'est pas silencieusement ignorée : elle journalise Failed to read key ... for script ... au démarrage.

ConditionClé compagneNotes
isAliverunIfAliveIs⚠️ Pas runIfIsAliveIs
hasTagsrunIfHasTagIs⚠️ Tag au singulier
doesNotHaveTagsrunIfDoesNotHaveTagIs⚠️ Tag au singulier
locationIsAirrunIfLocationIsAirIs
isOnFloorrunIfIsOnFloorIs
isStandingOnMaterialrunIfIsStandingOnMaterialIs
randomChancerunIfRandomChanceIs
targetCountLowerThanrunIfTargetCountLowerThanIs
targetCountGreaterThanrunIfTargetCountGreaterThanIs

Les noms de clés de condition sont insensibles à la casse, runifaliveis fonctionne donc aussi.

runIfConditionTypeIs ne fait rien

runIfConditionTypeIs est accepté par l'analyseur sans avertissement, mais rien ne le lit. Utilisez conditionType pour choisir BLOCKING ou FILTERING ; il n'existe aucun moyen de l'inverser.

Par exemple, locationIsAir: true exige de l'air. Ajouter runIfLocationIsAirIs: false inverse la comparaison et exige un bloc autre que de l'air. L'inversion porte sur la comparaison configurée : définir la condition booléenne et sa clé compagne à false inverse de nouveau le résultat.

Exemple :

eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
runIfLocationIsAirIs: false
Target:
targetType: SELF

Cette action déclenche un orage uniquement si le bloc aux pieds du boss n'est pas de l'air, par exemple lorsqu'il est dans l'eau. Inverser isAlive teste la validité Bukkit ; cela ne crée pas de déclencheur de mort. Une entité absente échoue même avec l'inversion.


Conditions basées sur l'emplacement​

locationIsAir​

Vérifie si le bloc ciblé est de l'air, y compris l'air des cavernes et du vide. Utilisez false pour exiger un bloc autre que de l'air.

CléDétailsValeurs
locationIsAirVérifie si l'emplacement est un bloc d'air (ou l'inverse).Boolean
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"

L'action météo exige de l'air aux pieds du boss et 3 blocs au-dessus. Pour vérifier uniquement la destination réelle d'une action sur des positions, utilisez FILTERING avec ACTION_TARGET, comme dans le premier exemple.


isOnFloor​

Vérifie que le bloc à la position n'est pas solide et que celui situé une unité plus bas l'est. Il s'agit d'un contrôle des matériaux, pas du contact physique de l'entité avec le sol ni de la forme des collisions.

CléDétailsValeurs
isOnFloorVérifie si l'emplacement est un emplacement au sol (ou l'inverse).Boolean
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isOnFloor: true
Target:
targetType: SELF

L'action météo exige un bloc non solide aux pieds du boss et un bloc solide une unité plus bas. Un échec bloque cette action.


isStandingOnMaterial​

Vérifie le matériau exact du bloc situé une unité sous la position cible.

CléDétailsValeurs
isStandingOnMaterialDéfinit quel type de matériau doit être vérifié.Material
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isStandingOnMaterial: BIRCH_WOOD
Target:
targetType: SELF

L'action météo exige BIRCH_WOOD une unité sous les pieds du boss. BIRCH_LOG et BIRCH_PLANKS ne correspondent pas. Un échec bloque cette action.

Conditions basées sur les entités​

isAlive​

Vérifie l'état Bukkit isValid() de l'entité cible. C'est un contrôle de validité, pas une comparaison directe de santé ; une entité absente échoue.

CléDétailsValeurs
isAliveValidité attendue de l'entité Bukkit.Boolean
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isAlive: true
Target:
targetType: SELF

L'action météo s'exécute uniquement tant que l'entité Bukkit du boss est valide. Un échec bloque cette action.


hasTags​

Exige tous les tags indiqués dans le stockage EliteMobs d'une élite suivie ou d'un joueur. Ces chaînes distinguent les majuscules des minuscules et se définissent avec des actions telles que TAG et UNTAG. Les tags du scoreboard vanilla ne sont pas lus ; les mobs ordinaires n'ont pas ce stockage. Sans ce stockage, hasTags échoue et doesNotHaveTags réussit avant inversion.

CléDétailsValeurs
hasTagsVérifie si l'entité possède une liste de tags.String List
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
hasTags:
- isCool
- hasANiceBeard
Target:
targetType: SELF

L'action météo exige à la fois isCool et hasANiceBeard sur le boss. Un échec bloque cette action.


doesNotHaveTags​

Réussit lorsque la cible ne possède pas tous les tags indiqués. Un seul tag manquant suffit ; il n'est pas nécessaire qu'ils soient tous absents.

CléDétailsValeurs
doesNotHaveTagsVérifie si l'entité ne possède pas une liste de tags.String List
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
doesNotHaveTags:
- isStinky
- isSus
Target:
targetType: SELF

L'action s'exécute sauf si le boss possède à la fois isStinky et isSus. Un boss qui n'en possède qu'un seul satisfait la condition.

Autres conditions​

randomChance​

Effectue un nouveau tirage chaque fois que les vérifications bloquantes atteignent cette condition. Utilisez un nombre simple de 0.0 (jamais) à 1.0 (toujours), pas une plage avec ~. runIfRandomChanceIs: false inverse le résultat. Pour une action répétée, un échec annule les répétitions restantes.

CléDétailsValeurs
randomChanceProbabilité que la condition soit valide.Nombre entre 0.0 et 1.0
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
randomChance: 0.1
Target: # Not required
targetType: SELF # Not required

L'action météo a 10 % de chances de s'exécuter à chaque vérification. Un échec bloque cette action.

Le Target explicite de la condition est facultatif, car il vaut SELF par défaut. L'omettre ne désactive pas les autres conditions du bloc.

Filtrer NEARBY avec des tags​

Pour filtrer NEARBY_MOBS ou NEARBY_PLAYERS selon des tags spécifiques, utilisez ACTION_TARGET comme cible de la condition (si la condition est appliquée à une action et non au script lui-même). Cela garantit que le script filtre précisément uniquement les mobs/joueurs portant les tags spécifiés.

Exemple
eliteScript:
Example:
Actions:
- action: SET_MOB_AI
Target:
targetType: NEARBY_MOBS
range: 40
bValue: false
Conditions:
conditionType: FILTERING
hasTags:
- TurnOff
Target:
targetType: ACTION_TARGET

Ce script désactive l'IA des élites suivies portant TurnOff dans une boîte s'étendant sur 40 blocs le long de chaque axe, à l'exclusion du boss. Les mobs ordinaires n'ont pas ce stockage de tags. L'exemple n'a pas d'Events : appelez-le depuis un autre script ou ajoutez un événement pour le déclencher.

targetCountLowerThan et targetCountGreaterThan​

Compare le nombre d'entités de la cible de condition avant les vérifications de tags ou les autres contrôles par entité. Ce n'est pas le nombre de cibles filtrées de l'action. Les comparaisons sont strictes : l'égalité échoue.

CléDétailsValeurs
targetCountLowerThanExige un nombre d'entités strictement inférieur au seuil.Entier
CléDétailsValeurs
targetCountGreaterThanExige un nombre d'entités strictement supérieur au seuil.Entier
Exemple
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
targetCountGreaterThan: 2
Target:
targetType: NEARBY_MOBS
range: 15

L'action météo exige plus de 2 entités vivantes autres que des joueurs, boss exclu, dans une boîte s'étendant sur 15 blocs le long de chaque axe.

Définissez explicitement le Target de la condition pour compter la population souhaitée. Sans lui, c'est la sélection SELF par défaut qui est comptée. Utilisez targetCountGreaterThan: 0 pour exiger une sélection non vide.