Pular para o conteúdo principal

Scripting Lua: Boss e Entidades

webapp_banner.jpg

Esta página cobre tudo sobre wrappers de boss e entidade nos poderes Lua do EliteMobs: context.boss, context.player, context.players, context.entities, e as tabelas wrapper de entidade que eles retornam. Se você é novo nos poderes Lua, comece pelo Getting Started primeiro.


Wrappers de Entidade

Quando você acessa entidades através da API Lua -- seja de context.boss, context.player, resultados de query como context.players:nearby_players(), ou campos de evento -- você sempre recebe tabelas wrapper. Esses não são objetos Bukkit puros. Cada wrapper fornece um conjunto de campos (valores de snapshot capturados no momento da criação) e métodos (chamadas em tempo real que acessam o servidor).

Duas regras para lembrar:

  • Campos como health, current_location, e maximum_health são snapshots. Eles refletem o estado no momento em que o wrapper foi criado e não atualizam automaticamente.
  • Métodos como get_location(), get_health(), e is_alive() realizam uma verificação em tempo real toda vez que você os chama.

Campos Comuns de Entidade

Todo wrapper de entidade viva inclui esses campos.

CampoTipoObservações
entity.namestringNome de exibição
entity.uuidstringUUID como texto
entity.entity_typestringNome do EntityType do Bukkit (ex.: "ZOMBIE", "PLAYER")
entity.is_playerbooleantrue para jogadores
entity.is_elitebooleantrue se o EliteMobs o rastreia como um elite
entity.is_custom_bossbooleantrue se a entidade é um Custom Boss (regional, instanciado, etc.)
entity.is_significant_bossbooleantrue para Custom Bosses com um multiplicador de vida acima de 1 (ou seja, grandes bosses, não pequenos reforços)
entity.is_monsterbooleantrue para entidades do tipo monstro
entity.is_validbooleanFlag de validade do snapshot
entity.healthnumberVida atual (snapshot)
entity.maximum_healthnumberVida máxima (snapshot)
entity.current_locationtabela de localizaçãoPosição no momento em que o wrapper foi criado
entity.elitetabela ou nilSubtabela só para elites; presente apenas quando entity.is_elite é true e o EliteMobs tem dados de elite para a entidade. Veja Subtabela de Elite abaixo.

Subtabela de Elite

Quando uma entidade é um elite do EliteMobs, o wrapper tem uma tabela adicional entity.elite com campos e métodos específicos de elite. Em não-elites esse campo está ausente (nil).

Campo / MétodoTipoObservações
entity.elite.levelnumberO nível do elite
entity.elite.namestring ou nilO nome de exibição configurado do elite
entity.elite.healthnumberSnapshot da vida atual (mesmo valor de entity.health)
entity.elite.max_healthnumberSnapshot da vida máxima (mesmo valor de entity.maximum_health)
entity.elite.is_custom_bossbooleanSe o elite é um Custom Boss
entity.elite.health_multipliernumberMultiplicador de vida configurado no Custom Boss (1.0 para elites comuns)
entity.elite.damage_multipliernumberMultiplicador de dano configurado no Custom Boss (1.0 para elites comuns)
entity.elite:remove()métodoRemove o elite (usando o motivo de remoção OTHER). Use isso para despawns limpos a partir de scripts.
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
if context.boss.elite ~= nil then
context.log:info("Boss level: " .. context.boss.elite.level)
context.log:info("Health x" .. context.boss.elite.health_multiplier)
end
end
}
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
local target = context.players:current_target()
if target ~= nil then
context.log:info("Target: " .. target.name .. " HP: " .. target.health)
end
end
}

Métodos Comuns de Entidade

Todo wrapper de entidade viva suporta esses métodos. Cada método realiza uma chamada em tempo real ao servidor.


entity:is_alive()

Retorna true se a entidade ainda é válida e não está morta.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if context.player:is_alive() then
context.player:send_message("&aYou're still standing!")
end
end
}

entity:get_location()

Retorna a localização atual em tempo real como uma tabela de localização.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
local loc = context.player:get_location()
context.world:play_sound_at_location(loc, "entity.experience_orb.pickup")
end
}

entity:get_eye_location()

Retorna a localização ao nível dos olhos como uma tabela de localização.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
local eye = context.player:get_eye_location()
context.world:spawn_particle_at_location(eye, "FLAME")
end
}

entity:get_health() / entity:get_maximum_health()

Retorna a vida atual ou máxima em tempo real.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
local pct = context.player:get_health() / context.player:get_maximum_health()
if pct < 0.25 then
context.player:send_message("&cYou're running low!")
end
end
}

entity:get_velocity()

Retorna a velocidade atual da entidade como uma tabela de vetor.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
local vel = context.player:get_velocity()
context.log:info("Player speed Y: " .. vel.y)
end
}

entity:send_message(text)

Envia uma mensagem de chat para a entidade. Suporta formatação de cor do EliteMobs.

ParâmetroTipoObservações
textstringMensagem com códigos de cor
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:send_message("&6[Boss] &fPrepare yourself!")
end
}

entity:show_action_bar(message)

Envia uma mensagem na action bar para a entidade.

ParâmetroTipoObservações
messagestringTexto da action bar com códigos de cor
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:show_action_bar("&c&lDANGER ZONE")
end
}

entity:show_title(title[, subtitle][, fadeIn][, stay][, fadeOut])

Envia um título e subtítulo opcional para a entidade.

ParâmetroTipoPadrãoObservações
titlestringTexto do título
subtitlestring""Texto do subtítulo
fadeInnumber10Ticks de fade-in
staynumber40Ticks de permanência
fadeOutnumber10Ticks de fade-out
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
local nearby = context.players:nearby_players(20)
for _, p in ipairs(nearby) do
p:show_title("&4PHASE 2", "&7The boss is enraged!", 10, 40, 10)
end
end
}

entity:show_boss_bar(title[, color][, style][, duration])

Mostra uma boss bar temporária para a entidade.

ParâmetroTipoPadrãoObservações
titlestringTexto do título da barra
colorstring"WHITE"Valor de BarColor
stylestring"SOLID"Valor de BarStyle
durationnumber40Duração em ticks
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
local nearby = context.players:nearby_players(20)
for _, p in ipairs(nearby) do
p:show_boss_bar("&cIncoming Attack!", "RED", "SOLID", 100)
end
end
}

entity:teleport_to_location(location)

Teleporta a entidade para uma localização.

ParâmetroTipoObservações
locationtabela de localizaçãoDestino
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("teleport_pull", 200) then return end
context.player:teleport_to_location(context.boss:get_location())
context.player:send_message("&cThe boss pulls you in!")
end
}

entity:set_velocity_vector(vector)

Define a velocidade da entidade imediatamente.

ParâmetroTipoObservações
vectortabela de vetor{ x, y, z } ou { x = 0, y = 1, z = 0 }
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("launch", 100) then return end
context.player:set_velocity_vector({ x = 0, y = 1.5, z = 0 })
context.player:send_message("&cYou are launched into the air!")
end
}

entity:apply_push_vector(vector[, additive][, delay])

Aplica um empurrão de velocidade após um pequeno atraso (padrão 1 tick). Útil para sobrescrever knockback.

ParâmetroTipoPadrãoObservações
vectortabela de vetorDireção e força
additivebooleanfalseAdicionar à velocidade existente em vez de substituí-la
delaynumber1Atraso em ticks antes de aplicar
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("push_up", 100) then return end
context.player:apply_push_vector({ x = 0, y = 2.0, z = 0 })
context.player:send_message("&cUpward blast!")
end
}

entity:face_direction_or_location(directionOrLocation)

Faz a entidade olhar em direção a um vetor de direção ou uma localização.

ParâmetroTipoObservações
directionOrLocationtabela de vetor ou localizaçãoAlvo para olhar
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:face_direction_or_location(context.boss:get_location())
context.player:send_message("&cThe boss forces you to look at it!")
end
}

entity:set_fire_ticks(ticks)

Coloca a entidade em chamas pela duração dada.

ParâmetroTipoObservações
ticksnumberDuração do fogo em ticks (20 ticks = 1 segundo)
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("ignite", 100) then return end
context.player:set_fire_ticks(60)
context.player:send_message("&cYou catch fire!")
end
}

entity:add_visual_freeze_ticks([ticks])

Adiciona ticks de freeze visual à entidade (o efeito de sobreposição azul).

ParâmetroTipoPadrãoObservações
ticksnumber1Quantidade de ticks de freeze
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("freeze", 200) then return end
context.player:add_visual_freeze_ticks(100)
context.player:send_message("&bYou feel a chilling frost!")
end
}

entity:apply_potion_effect(effect, duration[, amplifier])

Aplica um efeito de poção à entidade.

ParâmetroTipoPadrãoObservações
effectstringNome do PotionEffectType
durationnumberDuração em ticks
amplifiernumber0Nível do efeito (0 = nível I)
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("slow", 200) then return end
context.player:apply_potion_effect("SLOWNESS", 60, 1)
context.player:send_message("&7You feel sluggish...")
end
}

cuidado

remove_potion_effect(effect) não está disponível nos poderes Lua do EliteMobs. Ele existe apenas no Magmacore/FMM. Use apply_potion_effect com uma duração de 0 como workaround, ou projete seu poder sem precisar remover efeitos.


entity:deal_damage(amount) / entity:deal_custom_damage(amount) / entity:deal_damage_from_boss(amount)

Causa dano à entidade. Três variantes estão disponíveis.

MétodoObservações
deal_damage(amount)Fonte de dano genérica
deal_custom_damage(amount)Usa BossCustomAttackDamage do boss
deal_damage_from_boss(amount)A entidade do boss é definida como o causador do dano
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
local nearby = context.players:nearby_players(10)
for _, p in ipairs(nearby) do
p:deal_custom_damage(10)
p:send_message("&cThe boss unleashes a shockwave!")
end
end
}

entity:restore_health(amount)

Cura a entidade até sua vida máxima.

ParâmetroTipoObservações
amountnumberQuantidade a curar
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
-- Heal the player slightly when they hit the boss
context.player:restore_health(5)
context.player:send_message("&aYou drain life from the boss!")
end
}

entity:set_invulnerable(enabled[, duration])

Alterna invulnerabilidade na entidade. Opcionalmente reverte após uma duração.

ParâmetroTipoPadrãoObservações
enabledbooleantrue para habilitar invulnerabilidade
durationnumbernilAuto-reverter após esses ticks
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("shield", 200) then return end
context.player:set_invulnerable(true, 40)
context.player:send_message("&6A brief shield protects you!")
end
}

entity:set_ai_enabled(enabled[, duration])

Alterna a IA na entidade. Opcionalmente reverte após uma duração.

ParâmetroTipoPadrãoObservações
enabledbooleantrue para habilitar a IA
durationnumbernilAuto-reverter após esses ticks
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
-- Disable boss AI for 3 seconds at combat start
context.boss:set_ai_enabled(false, 60)
context.boss:send_message("&7The boss is stunned!")
end
}

entity:add_tag(tag[, duration]) / entity:remove_tag(tag) / entity:has_tag(tag)

Gerencia tags na entidade. As tags são rastreadas pelo EliteMobs e persistem durante a vida da entidade.

MétodoParâmetroObservações
add_tag(tag[, duration])string, number opcionalAdiciona tag, opcionalmente removendo automaticamente após ticks
remove_tag(tag)stringRemove a tag
has_tag(tag)stringRetorna true se a tag estiver presente
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.player:has_tag("marked") then
context.player:add_tag("marked", 200)
context.player:send_message("&cYou have been marked!")
end
end
}

entity:run_command(command)

Faz a entidade executar um comando. Para jogadores, isso roda como o jogador; use o texto do comando sem uma / no início.

ParâmetroTipoObservações
commandstringTexto do comando sem / no início
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("curse_cmd", 200) then return end
context.player:run_command("say I have been cursed!")
end
}

entity:set_scale(scale[, duration])

Define o atributo generic_scale da entidade. Opcionalmente reverte para 1.0 após uma duração.

ParâmetroTipoPadrãoObservações
scalenumberMultiplicador de escala
durationnumbernilAuto-reverter após esses ticks
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
-- Boss grows to double size for 5 seconds
context.boss:set_scale(2.0, 100)
context.boss:send_message("&4The boss grows in size!")
end
}

entity:set_gravity(enabled)

Alterna a gravidade na entidade.

ParâmetroTipoObservações
enabledbooleantrue para gravidade normal
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("levitate", 200) then return end
-- Disable player gravity briefly and re-enable after 3 seconds
context.player:set_gravity(false)
context.player:send_message("&dYou begin to float!")
context.scheduler:run_after(60, function()
if context.player ~= nil and context.player:is_alive() then
context.player:set_gravity(true)
end
end)
end
}

entity:play_sound_at_entity(sound[, volume][, pitch])

Toca um som na localização da entidade.

ParâmetroTipoPadrãoObservações
soundstringNome do Sound do Bukkit
volumenumber1.0Volume
pitchnumber1.0Pitch
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:play_sound_at_entity("entity.ender_dragon.growl", 1.0, 0.5)
end
}

entity:play_sound_at_self(sound[, volume][, pitch])

Alias para play_sound_at_entity. Toca um som na localização da entidade. Ambos os nomes funcionam de maneira idêntica.


entity:spawn_particle_at_self(particleOrSpec[, count])

Spawna partículas na localização da entidade.

ParâmetroTipoPadrãoObservações
particleOrSpecstring ou tabelaNome da partícula ou tabela de especificação
countnumber1Número de partículas
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:spawn_particle_at_self("HEART", 5)
end
}

entity:spawn_particles_at_location(location, particle[, count])

Spawna partículas em uma localização específica.

ParâmetroTipoPadrãoObservações
locationtabela de localizaçãoLocalização alvo
particlestringNome do tipo de partícula
countnumber1Número de partículas
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
local loc = context.player:get_location()
context.player:spawn_particles_at_location(loc, "FLAME", 10)
end
}

entity:play_model_animation(name)

Toca uma animação de modelo customizado se a entidade tiver um modelo customizado que suporte isso.

ParâmetroTipoObservações
namestringNome da animação
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:play_model_animation("attack_swing")
end
}

entity:push_relative_to(source[, strength][, xOffset][, yOffset][, zOffset])

Empurra a entidade para longe de uma localização de origem ou wrapper de entidade.

ParâmetroTipoPadrãoObservações
sourcelocalização ou wrapperOrigem do empurrão
strengthnumber1.0Multiplicador de força do empurrão
xOffsetnumber0Offset extra em X
yOffsetnumber0Offset extra em Y
zOffsetnumber0Offset extra em Z
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("knockback", 60) then return end
context.player:push_relative_to(context.boss:get_location(), 2.0, 0, 0.5, 0)
context.player:send_message("&cThe boss knocks you back!")
end
}

entity:set_custom_name(name) / entity:reset_custom_name()

Define ou reseta o nome de exibição customizado da entidade. Suporta códigos de cor.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("mark", 200) then return end
context.player:set_custom_name("&c&lMarked Target")
context.player:send_message("&cYou have been marked!")
-- Reset after 5 seconds
context.scheduler:run_after(100, function()
if context.player ~= nil and context.player:is_alive() then
context.player:reset_custom_name()
end
end)
end
}

entity:place_temporary_block(material[, duration][, requireAir])

Coloca um bloco temporário na localização atual da entidade.

ParâmetroTipoPadrãoObservações
materialstringNome do material do bloco
durationnumber0Ticks antes da remoção
requireAirbooleanfalseColocar apenas se o bloco for ar no momento
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("ice_trap", 200) then return end
context.player:place_temporary_block("ICE", 60, true)
context.player:send_message("&bIce forms at your feet!")
end
}

entity:get_height()

Retorna a altura da entidade em blocos.


entity:is_on_ground()

Retorna true se a entidade está em pé sobre solo sólido no momento.


entity:is_frozen()

Retorna true se a entidade (quando rastreada como custom boss) tem a flag de congelado definida.


entity:set_awareness_enabled(aware[, duration])

Alterna a awareness do mob. Afeta apenas entidades do tipo mob. Opcionalmente reverte após uma duração.

ParâmetroTipoPadrãoObservações
awarebooleantrue para habilitar a awareness
durationnumbernilAuto-reverter após esses ticks

entity:is_healing() / entity:set_healing(enabled)

Verifica ou alterna o estado de cura em uma entidade elite.


entity:overlaps_box_at_location(center[, halfX][, halfY][, halfZ])

Retorna true se a bounding box da entidade se sobrepõe a uma caixa alinhada com os eixos na localização dada.

ParâmetroTipoPadrãoObservações
centertabela de localizaçãoCentro da caixa de teste
halfXnumber0.5Meia-largura no eixo X
halfYnumberigual ao halfXMeia-altura no eixo Y
halfZnumberigual ao halfXMeia-largura no eixo Z

entity:remove_elite()

Remove a entidade elite do rastreamento do EliteMobs. Se a entidade é um elite, isso a despawna corretamente através do EliteMobs.


entity:set_custom_name_visible(visible)

Define se o nome customizado da entidade está sempre visível ou apenas quando olhado.

ParâmetroTipoObservações
visiblebooleantrue para sempre visível

entity:set_equipment(slot, material[, options])

Define equipamento na entidade.

ParâmetroTipoPadrãoObservações
slotstringSlot de equipamento: "HEAD", "CHEST", "LEGS", "FEET", "HAND", "OFF_HAND"
materialstringNome do material (ex.: "DIAMOND_SWORD", "IRON_HELMET")
optionstabela{}Configurações opcionais (veja abaixo)

Tabela de opções:

ChaveTipoPadrãoObservações
enchantmentsarray de tabelasnilCada entrada: { type = "SHARPNESS", level = 2 }
unbreakablebooleanfalseSe o item é inquebrável
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
-- Give the boss a glowing diamond sword
context.boss:set_equipment("HAND", "DIAMOND_SWORD", {
unbreakable = true,
enchantments = {
{ type = "SHARPNESS", level = 5 }
}
})
end
}

entity.is_ai_enabled

Um método que retorna true se a entidade atualmente tem a IA habilitada.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.boss:is_ai_enabled() then
context.log:info("Boss AI is active")
else
context.log:info("Boss AI is disabled (stunned?)")
end
end
}

Wrappers de Referência de Entidade Não-Viva

Quando uma entidade spawnada não é uma LivingEntity -- por exemplo, um bloco caindo, projétil ou fireball -- você recebe um wrapper de referência mais leve. Eles são retornados por métodos como context.world:spawn_falling_block_at_location() ou context.boss:summon_projectile().

Campos: name, uuid, entity_type, is_player, is_elite, current_location

Métodos:

MétodoObservações
is_valid()Verificação de validade em tempo real
get_location()Localização atual em tempo real
get_velocity()Vetor de velocidade atual
is_on_ground()Se está no chão
teleport_to_location(location)Teleporta a entidade
set_velocity_vector(vector)Define a velocidade
set_direction_vector(vector)Define a direção (apenas Fireball)
set_yield(value)Define o yield da explosão (apenas Fireball)
set_gravity(enabled)Alterna a gravidade
detonate()Detona entidades de firework
remove()Remove a entidade do mundo
unregister([reason])Remove do rastreador de entidades
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("fireball", 100) then return end
local fb = context.boss:summon_projectile("FIREBALL",
context.boss:get_eye_location(),
context.player:get_location(),
1.5
)
-- fb is a non-living reference wrapper; remove it after 5 seconds if still alive
context.scheduler:run_after(100, function()
if fb:is_valid() then
fb:remove()
end
end)
end
}

context.player

Disponível em hooks onde um jogador está diretamente envolvido (on_boss_damaged_by_player, on_player_damaged_by_boss, etc.). Wrappers de jogador incluem todos os campos e métodos comuns de entidade listados acima, mais os extras abaixo.

cuidado

context.player é nil em hooks que não têm um jogador associado, como on_spawn, callbacks agendados e hooks de timer. Sempre verifique se é nil antes de usar.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:send_message("&cHello!")
end
}

Campos Exclusivos de Jogador

CampoTipoObservações
game_modestringNome do modo de jogo atual (ex.: "SURVIVAL")

Métodos Exclusivos de Jogador

MétodoObservações
send_message(message)Mensagem de chat com formatação de cor do EliteMobs
show_action_bar(message)Texto da action bar
show_title(title[, subtitle][, fadeIn][, stay][, fadeOut])Sobreposição na tela de título
show_boss_bar(title[, color][, style][, duration])Boss bar temporária
run_command(command)Executa um comando como o jogador (sem / no início)
Exemplo
return {
api_version = 1,
on_player_damaged_by_boss = function(context)
if context.player == nil then return end
local hp_pct = context.player:get_health() / context.player:get_maximum_health()
if hp_pct < 0.3 then
context.player:show_title("&4LOW HEALTH", "&7Find cover!", 5, 30, 10)
context.player:show_boss_bar("&cBoss Enrage Incoming", "RED", "SEGMENTED_6", 80)
end
end
}

context.boss

O wrapper de boss para o elite mob que possui esse poder Lua. Sempre disponível em todo hook.

dica

O wrapper de boss herda todos os métodos comuns de entidade listados acima (ex.: push_relative_to, apply_push_vector, set_gravity, set_scale, set_invulnerable, spawn_particle_at_self, overlaps_box_at_location, etc.). Os métodos documentados nesta seção são específicos de boss ou têm comportamento diferente através da camada EliteEntity.

Campos do Boss

CampoTipoObservações
boss.namestringNome de exibição
boss.uuidstringUUID do elite do boss
boss.entity_typestringNome do EntityType do Bukkit
boss.is_monsterbooleantrue se a entidade subjacente é um Monstro
boss.levelnumberNível do elite
boss.healthnumberVida atual (snapshot)
boss.maximum_healthnumberVida máxima (snapshot)
boss.damager_countnumberNúmero de causadores de dano (snapshot)
boss.is_in_combatbooleanEstado de combate
boss.existsbooleanSe o elite ainda existe
boss.current_locationtabela de localizaçãoPosição na criação do wrapper (snapshot)
Exemplo
return {
api_version = 1,
on_spawn = function(context)
context.log:info(context.boss.name .. " level " .. context.boss.level)
end
}

Métodos do Boss


boss:is_alive()

Retorna true se a entidade do boss for válida, não estiver morta e o elite ainda existir. Use isso em vez do campo exists para verificações em tempo real.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if not context.boss:is_alive() then return end
context.boss:send_message("&cI still live!")
end
}

boss:get_location()

Retorna a localização atual em tempo real do boss como uma tabela de localização.

Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
local loc = context.boss:get_location()
context.world:spawn_particle_at_location(loc, "FLAME")
end
}

boss:get_eye_location()

Retorna a localização ao nível dos olhos do boss.

Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
local eye = context.boss:get_eye_location()
context.world:spawn_particle_at_location(eye, "SMOKE")
end
}

boss:set_ai_enabled(enabled[, duration])

Alterna a IA no boss. Opcionalmente reverte após uma duração.

ParâmetroTipoPadrãoObservações
enabledbooleantrue para habilitar a IA
durationnumbernilAuto-reverter após esses ticks
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if not context.cooldowns:check_local("stun", 200) then return end
context.boss:set_ai_enabled(false, 60)
context.boss:send_message("&7The boss is stunned for 3 seconds!")
end
}

boss:teleport_to_location(location)

Teleporta o boss para uma localização.

ParâmetroTipoObservações
locationtabela de localizaçãoDestino
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if not context.cooldowns:check_local("retreat", 300) then return end
local spawn = context.entities:get_boss_spawn_location()
context.boss:teleport_to_location(spawn)
context.boss:send_message("&7The boss retreats to its lair!")
end
}

boss:set_velocity_vector(vector)

Define a velocidade do boss imediatamente.

ParâmetroTipoObservações
vectortabela de vetor{ x, y, z } ou { x = 0, y = 1, z = 0 }
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
-- Boss leaps into the air at combat start
context.boss:set_velocity_vector({ x = 0, y = 2.0, z = 0 })
context.boss:send_message("&cThe boss leaps!")
end
}

boss:restore_health(amount)

Cura o boss até sua vida máxima.

ParâmetroTipoObservações
amountnumberQuantidade a curar
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if not context.cooldowns:check_local("heal", 200) then return end
context.boss:restore_health(20)
context.boss:send_message("&aThe boss regenerates!")
context.boss:spawn_particle_at_self("HEART")
end
}

boss:play_sound_at_self(sound[, volume][, pitch])

Toca um som na localização do boss.

ParâmetroTipoPadrãoObservações
soundstringNome do Sound do Bukkit
volumenumber1.0Volume
pitchnumber1.0Pitch
Exemplo
return {
api_version = 1,
on_spawn = function(context)
context.boss:play_sound_at_self("entity.wither.spawn", 1.0, 0.8)
end
}

boss:spawn_particle_at_self(particleOrSpec[, count])

Spawna partículas na localização do boss.

ParâmetroTipoPadrãoObservações
particleOrSpecstring ou tabelaNome da partícula ou tabela de especificação
countnumber1Número de partículas
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:spawn_particle_at_self("SMOKE", 20)
context.boss:send_message("&8Smoke billows from the boss!")
end
}

boss:play_model_animation(name)

Toca uma animação de modelo customizado no boss, se disponível.

ParâmetroTipoObservações
namestringNome da animação
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:play_model_animation("slam")
end
}

boss:face_direction_or_location(vectorOrLocation)

Faz o boss olhar para uma direção ou localização.

ParâmetroTipoObservações
vectorOrLocationtabela de vetor ou localizaçãoDireção para olhar
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.boss:face_direction_or_location(context.player:get_location())
end
}

boss:navigate_to_location(location[, speed][, follow][, timeout])

Usa pathfinding para fazer o boss caminhar até uma localização.

ParâmetroTipoPadrãoObservações
locationtabela de localizaçãoDestino
speednumber1.0Multiplicador de velocidade de movimento
followbooleanfalseSeguir o alvo continuamente
timeoutnumbernilCancelar a navegação após esses ticks
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("charge", 200) then return end
context.boss:navigate_to_location(context.player:get_location(), 1.5)
context.boss:send_message("&cThe boss charges at you!")
end
}

boss:add_tag(tag[, duration]) / boss:remove_tag(tag) / boss:has_tag(tag)

Gerencia tags no boss.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
local pct = context.boss:get_health() / context.boss:get_maximum_health()
if pct < 0.5 and not context.boss:has_tag("phase2") then
context.boss:add_tag("phase2")
context.boss:send_message("&4Entering Phase 2!")
end
end
}

boss:send_message(message[, range])

Envia uma mensagem de chat para todos os jogadores próximos.

ParâmetroTipoPadrãoObservações
messagestringTexto da mensagem com códigos de cor
rangenumber20Raio em blocos
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:send_message("&4You dare challenge me?!")
end
}

boss:summon_projectile(entityType, origin, destination[, speed][, options])

Lança uma entidade do tipo projétil a partir do boss.

ParâmetroTipoPadrãoObservações
entityTypestringTipo de entidade (ex.: "FIREBALL", "ARROW")
origintabela de localizaçãoPosição de lançamento
destinationtabela de localizaçãoPosição alvo
speednumber1.0Velocidade do projétil
optionstabela{}Veja as opções abaixo

Tabela de opções:

ChaveTipoObservações
durationnumberAuto-remover após ticks
max_ticksnumberMáximo de ticks para monitorar o pouso
custom_damagenumberDano no impacto
detonation_powerstringPoder da explosão no impacto
yieldnumberYield da explosão (Fireball)
persistentbooleanSe o projétil persiste (padrão true)
effectstringNome do EntityEffect a tocar no spawn
incendiarybooleanSe a explosão é incendiária
gravitybooleanSe o projétil tem gravidade
glowingbooleanEfeito de brilho
invulnerablebooleanSe o projétil é invulnerável
trackbooleanSe deve rastrear o alvo
spawn_at_originbooleanSpawnar na origem em vez de offset
direction_onlybooleanUsar apenas a direção, ignorar o alvo
on_landfunctionCallback (landing_location, spawned_entity)
Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("fireball", 100) then return end
context.boss:summon_projectile(
"FIREBALL",
context.boss:get_eye_location(),
context.player:get_location(),
1.5,
{
custom_damage = 10,
on_land = function(loc, entity)
context.world:spawn_particle_at_location(loc, "EXPLOSION")
end
}
)
end
}

boss:summon_reinforcement(filename, zoneOrLocation[, duration])

Invoca um boss de reforço a partir de um arquivo de configuração.

ParâmetroTipoObservações
filenamestringNome do arquivo de configuração do boss
zoneOrLocationtabela de localização ou zonaLocalização de spawn ou definição de zona
durationnumberDespawn automático opcional após ticks
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:summon_reinforcement("my_minion.yml", context.boss:get_location(), 200)
context.boss:send_message("&cMinions, come to my aid!")
end
}

boss:despawn()

Remove o boss do mundo.

Exemplo
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
local pct = context.boss:get_health() / context.boss:get_maximum_health()
if pct < 0.1 then
context.boss:send_message("&7The boss vanishes into thin air!")
context.boss:despawn()
end
end
}

boss:get_nearby_players(range)

Retorna um array de wrappers de jogador dentro do alcance do boss.

ParâmetroTipoObservações
rangenumberRaio em blocos
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
local players = context.boss:get_nearby_players(30)
for _, p in ipairs(players) do
p:show_action_bar("&cThe boss sees you!")
end
end
}

boss:get_damager_count()

Retorna o número em tempo real de jogadores que causaram dano a esse boss. Diferente do campo damager_count, este realiza uma verificação em tempo real.


boss:get_target_player()

Retorna o alvo atual do mob do boss como um wrapper de jogador, ou nil se o alvo não for um jogador ou não estiver definido.


Métodos de Zona e Partícula

Esses métodos combinam zonas com efeitos de partícula. Eles exigem uma tabela de zona como entrada.


boss:get_nearby_players_in_zone(zone)

Retorna um array de wrappers de jogador para todos os jogadores atualmente dentro da zona dada.

ParâmetroTipoObservações
zonetabela de zonaUma definição de forma de zona

boss:spawn_particles_in_zone(zone, particle, ..., coverage?)

Preenche o interior de uma zona com partículas.

ParâmetroTipoObservações
zonetabela de zonaForma da zona a preencher
particlestringNome do tipo de partícula
...Parâmetros adicionais de partícula
coveragenumber (opcional)Fator de cobertura de densidade de partícula

boss:spawn_particles_in_zone_border(zone, particle, ..., coverage?)

Desenha a borda de uma zona com partículas.

ParâmetroTipoObservações
zonetabela de zonaForma da zona a delimitar
particlestringNome do tipo de partícula
...Parâmetros adicionais de partícula
coveragenumber (opcional)Fator de cobertura de densidade de partícula

boss:get_particles_from_self_toward_zone(zone, particle, speed?)

Spawna partículas direcionais que viajam do boss em direção a uma zona.

ParâmetroTipoPadrãoObservações
zonetabela de zonaZona alvo
particlestringNome do tipo de partícula
speednumbernilVelocidade de viagem da partícula

boss:get_particles_toward_self(zone, particle, speed?)

Spawna partículas direcionais que viajam de uma zona em direção ao boss.

ParâmetroTipoPadrãoObservações
zonetabela de zonaZona de origem
particlestringNome do tipo de partícula
speednumbernilVelocidade de viagem da partícula

boss:spawn_particles_with_vector(particles)

Spawna um array de partículas direcionais, cada uma com sua própria posição e vetor de velocidade.

ParâmetroTipoObservações
particlesarray de tabelasCada entrada define uma partícula com posição e direção

Métodos do Ender Dragon

Esses métodos só se aplicam quando a entidade do boss é um Ender Dragon.


boss:get_ender_dragon_phase()

Retorna o nome da fase atual EnderDragon.Phase como uma string, ou nil se o boss não for um Ender Dragon.


boss:set_ender_dragon_phase(phase)

Define a fase do Ender Dragon.

ParâmetroTipoObservações
phasestringNome do EnderDragon.Phase (ex.: "CIRCLING", "CHARGE_PLAYER")

Métodos de Suporte a Poderes Especiais

Esses métodos suportam mecânicas de poder embutidas do EliteMobs a partir de scripts Lua.


boss:start_tracking_fireball_system(speed?)

Inicia o sistema de IA de fireball de rastreamento no boss. O boss lançará periodicamente fireballs que rastreiam seu alvo.

ParâmetroTipoPadrãoObservações
speednumber0.5Velocidade do fireball

boss:handle_spirit_walk_damage(cause)

Lida com o comportamento de spirit walk para a causa de dano dada. O spirit walk torna o boss imune a certos tipos de dano e o teleporta atrás do atacante.

ParâmetroTipoObservações
causestringNome do DamageCause do Bukkit (ex.: "ENTITY_ATTACK", "PROJECTILE")

boss:shield_wall_is_active()

Retorna true se o boss atualmente tem uma shield wall ativa.


boss:initialize_shield_wall(charges?)

Ativa uma shield wall no boss que pode absorver dano recebido.

ParâmetroTipoPadrãoObservações
chargesnumber1Número de golpes que o escudo pode absorver

boss:shield_wall_absorb_damage(player, damage)

Tenta absorver dano com a shield wall. Retorna true se o dano foi absorvido, false se o escudo está inativo ou esgotado.

ParâmetroTipoObservações
playerwrapper de jogadorO jogador atacante
damagenumberQuantidade de dano a absorver

boss:deactivate_shield_wall()

Desativa a shield wall do boss, removendo quaisquer cargas restantes.


boss:start_zombie_necronomicon(target, file)

Inicia o poder zombie necronomicon em um alvo, spawnando reforços mortos-vivos a partir de um arquivo de configuração.

ParâmetroTipoObservações
targetwrapper de entidadeEntidade alvo para o necronomicon
filestringNome do arquivo de configuração do boss para os mortos-vivos invocados

context.players

Helpers de query de jogadores centrados ao redor do boss. Use-os para encontrar jogadores sem precisar de um jogador específico do evento.

MétodoRetornaObservações
players:current_target()wrapper de jogador ou nilO jogador do evento ou alvo do mob do boss se for um jogador
players:nearby_players(radius)array de wrappers de jogadorTodos os jogadores dentro do raio do boss
players:all_players_in_world()array de wrappers de jogadorTodos os jogadores no mundo do boss
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
local nearby = context.players:nearby_players(20)
for _, player in ipairs(nearby) do
player:send_message("&cThe boss is enraged!")
player:apply_potion_effect("GLOWING", 60, 0)
end
end
}
Exemplo
return {
api_version = 1,
on_spawn = function(context)
-- Warn everyone in the world
local everyone = context.players:all_players_in_world()
for _, p in ipairs(everyone) do
p:show_title("&4WARNING", "&7A world boss has spawned!", 10, 60, 20)
end
end
}

context.entities

Helpers gerais de query de entidades centrados ao redor do boss.

MétodoRetornaObservações
entities:get_nearby_entities(radius[, filter])array de wrappers de entidadeEntidades próximas ao boss
entities:get_entities_in_box(center, halfX, halfY, halfZ[, filter])array de wrappers de entidadeEntidades dentro de uma caixa alinhada aos eixos
entities:get_all_entities([filter])array de wrappers de entidadeTodas as entidades correspondentes no mundo do boss
entities:get_direct_target_entity()wrapper de entidade ou nilAlvo direto para o evento atual
entities:get_boss_spawn_location()tabela de localizaçãoA localização original de spawn do boss

Filtros válidos: living (padrão), player / players, elite / elites, mob / mobs, all / entities

Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
-- Damage all nearby elites
local elites = context.entities:get_nearby_entities(10, "elites")
for _, elite in ipairs(elites) do
elite:deal_damage(5)
end
end
}
Exemplo
return {
api_version = 1,
on_enter_combat = function(context)
-- Find players in a box area
local center = context.boss:get_location()
local players = context.entities:get_entities_in_box(center, 10, 5, 10, "players")
for _, p in ipairs(players) do
p:send_message("&eYou are in the danger zone!")
end
end
}

Próximos Passos