Condições de Elite Script
As condições permitem que os criadores de scripts façam com que scripts e/ou ações não sejam executados com base em condições específicas.
Conditions com maiúscula ao nível do scriptAo nível do script, a chave distingue maiúsculas de minúsculas. Aí, um conditions: em minúsculas é ignorado, pelo que o script se executa sem quaisquer condições e nada é registado. Dentro de uma ação, a chave é lida com qualquer capitalização, mas uma ação que contenha Conditions: e conditions: ao mesmo tempo faz o EliteMobs ignorar o script inteiro. Use um mapa YAML, não uma lista. As chaves internas (isAlive, conditionType, Target, ...) não distinguem maiúsculas, mas os valores enumerados como BLOCKING e FILTERING devem estar em maiúsculas.
Exemplo
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 uma entidade de boss válida. A ação verifica o bloco 3 blocos acima e só coloca terra se for ar, durante 20 ticks. Cada ação pode ter as suas próprias condições.
Alvo
As condições usam o sistema de Alvos. O seu Target é independente do da ação e assume SELF quando omitido. Use ACTION_TARGET com condições FILTERING de uma ação para verificar individualmente os alvos resolvidos.
As condições do script e as condições BLOCKING de ações resolvem o seu próprio Target. Alvos de entidades como SELF ou NEARBY_PLAYERS fornecem entidades para todas as verificações. LOCATION e LOCATIONS não fornecem entidades: só as verificações de localização se aplicam às suas posições, e a contagem de alvos é 0. ACTION_TARGET não resolve nada neste caminho, pelo que só se aplicam randomChance e as contagens de alvos. LANDING_LOCATION falha nas condições ao nível do script, porque estas são avaliadas antes de existir uma localização de aterragem.
Tipo de condição
| Chave | Detalhes | Valores |
|---|---|---|
conditionType | Define o tipo de condição | BLOCKING / FILTERING |
BLOCKING impede a execução do script inteiro ou da ação específica onde se encontra. Bloquear uma ação não bloqueia as restantes. FILTERING com ACTION_TARGET remove os alvos que não passam nas verificações aplicáveis.
As condições fora das ações são sempre BLOCKING. As condições dentro das ações podem ser BLOCKING ou FILTERING.
Nota: se o alvo for SELF (o boss) e a verificação da condição for isAlive, a verificação é sempre BLOCKING! Isto pode ser colocado dentro de uma condição FILTERING e mesmo assim fará com que esta parte específica se comporte como BLOCKING.
As condições dentro das ações estão definidas como FILTERING por predefinição.
Use ACTION_TARGET com FILTERING para examinar cada alvo resolvido da ação. BLOCKING precisa de um alvo concreto como SELF ou NEARBY_PLAYERS; a sua contagem de entidades não resolve ACTION_TARGET.
randomChance, targetCountLowerThan e targetCountGreaterThan são verificados ao nível do script ou em condições BLOCKING de ações. A filtragem individual não os avalia.
As verificações aplicáveis são combinadas com E: todas devem passar. Uma condição bloqueante exige que todas as entidades e localizações selecionadas passem. Uma seleção vazia não falha por si só; use targetCountGreaterThan: 0 para exigir pelo menos uma entidade. Com um alvo de condição concreto em vez de ACTION_TARGET, a filtragem verifica essa seleção independente e mantém todos os alvos originais da ação ou remove-os todos.
A filtragem depende do que a ação pede: ações sobre entidades verificam validade, etiquetas e a localização dos pés sem deslocamento; ações sobre localizações verificam apenas condições de localização. Etiquetas e isAlive não filtram uma coleção de localizações, exceto na verificação bloqueante especial de validade de SELF descrita acima.
As condições do script são avaliadas antes de iniciar as ações. As condições bloqueantes de uma ação são avaliadas depois de wait e em cada repetição; uma falha cancela as repetições restantes dessa ação. Filtrar todos os alvos não cancela por si só futuras repetições. Uma condição de script falhada impede o início do seu tempo de espera; uma condição de ação falhada não anula o tempo de espera do script.
Posicionamento de blocos de condição
Pode colocar ou aninhar blocos de condição de duas formas:
-
Sob ações individuais – A condição aplica-se apenas a uma ação específica. Se a condição for cumprida, a ação é executada; caso contrário, não.
-
Sob o script inteiro – A condição aplica-se a todas as ações dentro do script. Se a condição não for cumprida, nenhuma das ações será executada.
Abaixo estão exemplos que demonstram como aninhar blocos de condição tanto para ações individuais como para o script inteiro.
Sob ações individuais:
Exemplo
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"
O bloco aos pés do boss e o situado 3 blocos acima devem ambos ser ar para executar SET_WEATHER. As condições bloqueantes verificam a localização da entidade antes da localização deslocada. MESSAGE continua a executar-se porque não tem condições.
Sob o script inteiro:
Exemplo
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"
Tanto o bloco aos pés do boss como o situado 3 blocos acima devem ser ar para permitir as duas ações quando recebe um golpe. Caso contrário, o script é bloqueado, incluindo SET_WEATHER e MESSAGE.
Inverter uma condição com runIf...Is
Todas as condições têm uma chave acompanhante runIf...Is que as inverte. Todas são booleanos e todas têm true por padrão (o que significa "executar quando a condição for verdadeira"). Definir uma delas como false inverte essa condição.
Não existe nenhuma chave genérica runIfConditionIs -- cada condição tem o seu próprio nome exato, e três delas não seguem o padrão óbvio. Uma chave não reconhecida não é ignorada em silêncio: escreve Failed to read key ... for script ... no arranque.
| Condição | Chave acompanhante | Notas |
|---|---|---|
isAlive | runIfAliveIs | ⚠️ Não é runIfIsAliveIs |
hasTags | runIfHasTagIs | ⚠️ Tag no singular |
doesNotHaveTags | runIfDoesNotHaveTagIs | ⚠️ Tag no singular |
locationIsAir | runIfLocationIsAirIs | |
isOnFloor | runIfIsOnFloorIs | |
isStandingOnMaterial | runIfIsStandingOnMaterialIs | |
randomChance | runIfRandomChanceIs | |
targetCountLowerThan | runIfTargetCountLowerThanIs | |
targetCountGreaterThan | runIfTargetCountGreaterThanIs |
Os nomes das chaves de condição não diferenciam maiúsculas de minúsculas, por isso runifaliveis também funciona.
runIfConditionTypeIs não faz nadaO runIfConditionTypeIs é aceite pelo parser sem qualquer aviso, mas nada o lê. Use o conditionType para escolher entre BLOCKING ou FILTERING; não há forma de o inverter.
Por exemplo, locationIsAir: true exige ar. Acrescentar runIfLocationIsAirIs: false inverte a comparação e exige um bloco que não seja ar. A inversão aplica-se à comparação configurada: definir tanto a condição booleana como a chave acompanhante para false volta a inverter o resultado.
Exemplo:
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
Esta ação define trovoada apenas quando o bloco aos pés do boss não é ar, por exemplo se estiver na água. Inverter isAlive verifica a validade Bukkit; não cria um evento de morte, e uma entidade inexistente falha mesmo com inversão.
Condições baseadas em localização
locationIsAir
Verifica se o bloco alvo é ar, incluindo ar de caverna e do vazio. Use false para exigir um bloco que não seja ar.
| Chave | Detalhes | Valores |
|---|---|---|
locationIsAir | Define se deve verificar se a localização é um bloco de ar (ou o oposto). | Booleano |
Exemplo
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"
A ação do clima exige ar tanto aos pés do boss como 3 blocos acima. Para uma ação de localização verificar apenas o seu destino real, use FILTERING com ACTION_TARGET, como no primeiro exemplo.
isOnFloor
Verifica se o bloco na localização não é sólido e o bloco uma unidade abaixo é sólido. Verifica materiais, não o contacto físico da entidade com o chão nem as formas de colisão.
| Chave | Detalhes | Valores |
|---|---|---|
isOnFloor | Define se deve verificar se a localização é uma localização de chão (ou o oposto). | Booleano |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isOnFloor: true
Target:
targetType: SELF
A ação do clima exige um bloco não sólido aos pés do boss e um sólido uma unidade abaixo. Uma falha bloqueia esta ação.
isStandingOnMaterial
Verifica o material exato do bloco uma unidade abaixo da localização alvo.
| Chave | Detalhes | Valores |
|---|---|---|
isStandingOnMaterial | Define qual o tipo de material a ser verificado. | Material |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isStandingOnMaterial: BIRCH_WOOD
Target:
targetType: SELF
A ação do clima exige BIRCH_WOOD uma unidade abaixo dos pés do boss. BIRCH_LOG e BIRCH_PLANKS não correspondem. Uma falha bloqueia esta ação.
Condições baseadas em entidades
isAlive
Verifica o estado Bukkit isValid() da entidade alvo. É uma verificação de validade, não uma comparação direta de vida; uma entidade inexistente falha.
| Chave | Detalhes | Valores |
|---|---|---|
isAlive | Validade esperada da entidade Bukkit. | Booleano |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isAlive: true
Target:
targetType: SELF
A ação do clima só se executa enquanto a entidade Bukkit do boss for válida. Uma falha bloqueia esta ação.
hasTags
Exige todas as etiquetas indicadas no armazenamento EliteMobs de uma elite acompanhada ou de um jogador. São strings que distinguem maiúsculas de minúsculas, definidas por ações como TAG e UNTAG. Não são lidas etiquetas do scoreboard vanilla e os mobs comuns não têm este armazenamento. Sem ele, hasTags falha e doesNotHaveTags passa antes da inversão.
| Chave | Detalhes | Valores |
|---|---|---|
hasTags | Define se deve verificar se a entidade tem uma lista de etiquetas. | Lista de Strings |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
hasTags:
- isCool
- hasANiceBeard
Target:
targetType: SELF
A ação do clima exige tanto isCool como hasANiceBeard no boss. Uma falha bloqueia esta ação.
doesNotHaveTags
Passa quando o alvo não tem todas as etiquetas indicadas. Basta faltar uma; não é necessário que faltem todas.
| Chave | Detalhes | Valores |
|---|---|---|
doesNotHaveTags | Define se deve verificar se a entidade não tem uma lista de etiquetas. | Lista de Strings |
Exemplo
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
doesNotHaveTags:
- isStinky
- isSus
Target:
targetType: SELF
Executa-se salvo se o boss tiver simultaneamente isStinky e isSus. Um boss com apenas uma destas etiquetas passa.
Outras condições
randomChance
Gera um novo número aleatório sempre que as verificações bloqueantes chegam a esta condição. Use um número simples de 0.0 (nunca) a 1.0 (sempre), não um intervalo com ~. runIfRandomChanceIs: false inverte o resultado. Numa ação repetida, uma falha cancela as repetições restantes.
| Chave | Detalhes | Valores |
|---|---|---|
randomChance | Probabilidade de a condição ser válida. | Número entre 0.0 e 1.0 |
Exemplo
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
A ação do clima tem 10% de probabilidade de se executar em cada verificação. Uma falha bloqueia esta ação.
O Target explícito da condição é opcional porque assume SELF por predefinição. Omiti-lo não desativa as outras condições do bloco.
Filtrar NEARBY com etiquetas
Para filtrar NEARBY_MOBS ou NEARBY_PLAYERS com base em etiquetas específicas, use ACTION_TARGET como alvo da condição (se a condição for aplicada a uma ação e não ao próprio script). Isto garante que o script filtra com precisão apenas os mobs/jogadores com as etiquetas especificadas.
Exemplo
eliteScript:
Example:
Actions:
- action: SET_MOB_AI
Target:
targetType: NEARBY_MOBS
range: 40
bValue: false
Conditions:
conditionType: FILTERING
hasTags:
- TurnOff
Target:
targetType: ACTION_TARGET
Desativa a IA das elites acompanhadas com a etiqueta TurnOff numa caixa que se estende 40 blocos em cada eixo, excluindo o boss. Os mobs comuns não têm este armazenamento de etiquetas. O exemplo não tem Events: chame-o a partir de outro script ou acrescente um evento para o ativar.
targetCountLowerThan e targetCountGreaterThan
Compara a contagem de entidades do alvo da condição antes de verificar etiquetas ou outras condições por entidade. Não conta os alvos filtrados da ação. As comparações são estritas: a igualdade não passa.
| Chave | Detalhes | Valores |
|---|---|---|
targetCountLowerThan | Exige uma contagem de entidades estritamente inferior ao limite. | Inteiro |
| Chave | Detalhes | Valores |
|---|---|---|
targetCountGreaterThan | Exige uma contagem de entidades estritamente superior ao limite. | Inteiro |
Exemplo
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
A ação do clima exige mais de 2 entidades vivas que não sejam jogadores, excluindo o boss, numa caixa que se estende 15 blocos em cada eixo.
Defina explicitamente o Target da condição para contar a população pretendida. Se o omitir, conta a seleção predefinida SELF. Use targetCountGreaterThan: 0 para exigir uma seleção não vazia.