Aller au contenu principal

Scripting Lua : Boss et Entités

webapp_banner.jpg

Cette page couvre tout ce qui concerne les wrappers de boss et d'entités dans les pouvoirs Lua EliteMobs : context.boss, context.player, context.players, context.entities, et les tables wrapper d'entité qu'ils retournent. Si vous êtes nouveau aux pouvoirs Lua, commencez d'abord par Démarrage.


Wrappers d'entité

Lorsque vous accédez aux entités via l'API Lua -- que ce soit depuis context.boss, context.player, des résultats de requête comme context.players:nearby_players(), ou des champs d'événement -- vous recevez toujours des tables wrapper. Ce ne sont pas des objets Bukkit bruts. Chaque wrapper fournit un ensemble de champs (valeurs de snapshot capturées au moment de la création) et de méthodes (appels en direct qui atteignent le serveur).

Deux règles à retenir :

  • Les champs comme health, current_location, et maximum_health sont des snapshots. Ils reflètent l'état au moment où le wrapper a été créé et ne se mettent pas à jour automatiquement.
  • Les méthodes comme get_location(), get_health(), et is_alive() effectuent une vérification en direct à chaque appel.

Champs d'entité communs

Chaque wrapper d'entité vivante inclut ces champs.

ChampTypeNotes
entity.namestringNom d'affichage
entity.uuidstringUUID sous forme de texte
entity.entity_typestringNom Bukkit EntityType (ex. "ZOMBIE", "PLAYER")
entity.is_playerbooleantrue pour les joueurs
entity.is_elitebooleantrue si EliteMobs le suit en tant qu'elite
entity.is_custom_bossbooleantrue si l'entité est un Boss personnalisé (régional, instancié, etc.)
entity.is_significant_bossbooleantrue pour les Boss personnalisés avec un multiplicateur de santé supérieur à 1 (c.-à-d. les boss majeurs, pas les renforts mineurs)
entity.is_monsterbooleantrue pour les entités de type monstre
entity.is_validbooleanFlag de validité du snapshot
entity.healthnumberSanté actuelle (snapshot)
entity.maximum_healthnumberSanté max (snapshot)
entity.current_locationlocation tablePosition au moment où le wrapper a été créé
entity.elitetable ou nilSous-table réservée aux elites ; présente uniquement quand entity.is_elite vaut true et qu'EliteMobs dispose de données d'elite pour l'entité. Voir Sous-table Elite ci-dessous.

Sous-table Elite

Lorsqu'une entité est un elite EliteMobs, le wrapper possède une table supplémentaire entity.elite avec des champs et méthodes spécifiques aux elites. Sur les non-elites, ce champ est absent (nil).

Champ / MéthodeTypeNotes
entity.elite.levelnumberLe niveau de l'elite
entity.elite.namestring ou nilLe nom d'affichage configuré de l'elite
entity.elite.healthnumberSnapshot de la santé actuelle (même valeur que entity.health)
entity.elite.max_healthnumberSnapshot de la santé max (même valeur que entity.maximum_health)
entity.elite.is_custom_bossbooleanSi l'elite est un Boss personnalisé
entity.elite.health_multipliernumberMultiplicateur de santé configuré sur le Boss personnalisé (1.0 pour les elites normaux)
entity.elite.damage_multipliernumberMultiplicateur de dégâts configuré sur le Boss personnalisé (1.0 pour les elites normaux)
entity.elite:remove()méthodeSupprime l'elite (en utilisant la raison de suppression OTHER). Utilisez ceci pour des despawns propres depuis les scripts.
Exemple
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
}
Exemple
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éthodes d'entité communes

Chaque wrapper d'entité vivante prend en charge ces méthodes. Chaque méthode effectue un appel en direct au serveur.


entity:is_alive()

Retourne true si l'entité est toujours valide et non morte.

Exemple
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()

Retourne l'emplacement actuel en direct sous forme de location table.

Exemple
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()

Retourne l'emplacement au niveau des yeux sous forme de location table.

Exemple
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()

Retourne la santé actuelle ou maximale en direct.

Exemple
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()

Retourne la vélocité actuelle de l'entité sous forme de table vecteur.

Exemple
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)

Envoie un message dans le chat à l'entité. Prend en charge le formatage couleur EliteMobs.

ParamètreTypeNotes
textstringMessage avec codes couleur
Exemple
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)

Envoie un message d'action bar à l'entité.

ParamètreTypeNotes
messagestringTexte de l'action bar avec codes couleur
Exemple
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])

Envoie un titre et un sous-titre optionnel à l'entité.

ParamètreTypeDéfautNotes
titlestringTexte du titre
subtitlestring""Texte du sous-titre
fadeInnumber10Ticks de fondu entrant
staynumber40Ticks d'affichage
fadeOutnumber10Ticks de fondu sortant
Exemple
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])

Affiche une boss bar temporaire à l'entité.

ParamètreTypeDéfautNotes
titlestringTexte du titre de la barre
colorstring"WHITE"Valeur BarColor
stylestring"SOLID"Valeur BarStyle
durationnumber40Durée en ticks
Exemple
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)

Téléporte l'entité vers un emplacement.

ParamètreTypeNotes
locationlocation tableDestination
Exemple
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)

Définit immédiatement la vélocité de l'entité.

ParamètreTypeNotes
vectortable vecteur{ x, y, z } ou { x = 0, y = 1, z = 0 }
Exemple
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])

Applique une poussée de vélocité après un court délai (par défaut 1 tick). Utile pour passer outre le knockback.

ParamètreTypeDéfautNotes
vectortable vecteurDirection et puissance
additivebooleanfalseAjoute à la vélocité existante au lieu de la remplacer
delaynumber1Délai en ticks avant application
Exemple
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)

Oriente l'entité vers un vecteur de direction ou un emplacement.

ParamètreTypeNotes
directionOrLocationtable vecteur ou locationCible à orienter
Exemple
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)

Met l'entité en feu pour la durée donnée.

ParamètreTypeNotes
ticksnumberDurée du feu en ticks (20 ticks = 1 seconde)
Exemple
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])

Ajoute des ticks de gel visuel à l'entité (l'effet de superposition bleue).

ParamètreTypeDéfautNotes
ticksnumber1Quantité de ticks de gel
Exemple
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])

Applique un effet de potion à l'entité.

ParamètreTypeDéfautNotes
effectstringNom PotionEffectType
durationnumberDurée en ticks
amplifiernumber0Niveau d'effet (0 = niveau I)
Exemple
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
}

attention

remove_potion_effect(effect) n'est pas disponible dans les pouvoirs Lua EliteMobs. Il n'existe que dans Magmacore/FMM. Utilisez apply_potion_effect avec une durée de 0 comme solution de contournement, ou concevez votre pouvoir sans avoir besoin de retirer les effets.


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

Inflige des dégâts à l'entité. Trois variantes sont disponibles.

MéthodeNotes
deal_damage(amount)Source de dégâts générique
deal_custom_damage(amount)Utilise BossCustomAttackDamage du boss
deal_damage_from_boss(amount)L'entité boss est définie comme l'attaquant
Exemple
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)

Soigne l'entité jusqu'à sa santé maximale.

ParamètreTypeNotes
amountnumberQuantité à soigner
Exemple
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])

Active/désactive l'invulnérabilité sur l'entité. Restaure éventuellement après une durée.

ParamètreTypeDéfautNotes
enabledbooleantrue pour activer l'invulnérabilité
durationnumbernilRestauration automatique après ce nombre de ticks
Exemple
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])

Active/désactive l'IA sur l'entité. Restaure éventuellement après une durée.

ParamètreTypeDéfautNotes
enabledbooleantrue pour activer l'IA
durationnumbernilRestauration automatique après ce nombre de ticks
Exemple
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)

Gère les tags sur l'entité. Les tags sont suivis par EliteMobs et persistent pendant la durée de vie de l'entité.

MéthodeParamètreNotes
add_tag(tag[, duration])string, number optionnelAjoute le tag, retire automatiquement après ticks
remove_tag(tag)stringRetire le tag
has_tag(tag)stringRetourne true si le tag est présent
Exemple
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)

Fait exécuter une commande à l'entité. Pour les joueurs, cela s'exécute en tant que joueur ; utilisez le texte de la commande sans / initial.

ParamètreTypeNotes
commandstringTexte de la commande sans / initial
Exemple
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])

Définit l'attribut generic_scale de l'entité. Restaure éventuellement à 1.0 après une durée.

ParamètreTypeDéfautNotes
scalenumberMultiplicateur d'échelle
durationnumbernilRestauration automatique après ce nombre de ticks
Exemple
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)

Active/désactive la gravité sur l'entité.

ParamètreTypeNotes
enabledbooleantrue pour gravité normale
Exemple
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])

Joue un son à l'emplacement de l'entité.

ParamètreTypeDéfautNotes
soundstringNom Bukkit Sound
volumenumber1.0Volume
pitchnumber1.0Hauteur
Exemple
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 pour play_sound_at_entity. Joue un son à l'emplacement de l'entité. Les deux noms fonctionnent de manière identique.


entity:spawn_particle_at_self(particleOrSpec[, count])

Fait apparaître des particules à l'emplacement de l'entité.

ParamètreTypeDéfautNotes
particleOrSpecstring ou tableNom de particule ou table spec
countnumber1Nombre de particules
Exemple
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])

Fait apparaître des particules à un emplacement spécifique.

ParamètreTypeDéfautNotes
locationlocation tableEmplacement cible
particlestringNom du type de particule
countnumber1Nombre de particules
Exemple
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)

Joue une animation de modèle personnalisé si l'entité a un modèle personnalisé qui la prend en charge.

ParamètreTypeNotes
namestringNom de l'animation
Exemple
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])

Pousse l'entité loin d'un emplacement source ou d'un wrapper d'entité.

ParamètreTypeDéfautNotes
sourcelocation ou wrapperOrigine de la poussée
strengthnumber1.0Multiplicateur de puissance de poussée
xOffsetnumber0Décalage X supplémentaire
yOffsetnumber0Décalage Y supplémentaire
zOffsetnumber0Décalage Z supplémentaire
Exemple
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()

Définit ou réinitialise le nom d'affichage personnalisé de l'entité. Prend en charge les codes couleur.

Exemple
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])

Place un bloc temporaire à l'emplacement actuel de l'entité.

ParamètreTypeDéfautNotes
materialstringNom du matériau de bloc
durationnumber0Ticks avant suppression
requireAirbooleanfalsePlace uniquement si le bloc est actuellement de l'air
Exemple
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()

Retourne la hauteur de l'entité en blocs.


entity:is_on_ground()

Retourne true si l'entité est actuellement debout sur un sol solide.


entity:is_frozen()

Retourne true si l'entité (lorsqu'elle est suivie en tant que boss personnalisé) a le flag frozen défini.


entity:set_awareness_enabled(aware[, duration])

Active/désactive la conscience du mob. N'affecte que les entités de type mob. Restaure éventuellement après une durée.

ParamètreTypeDéfautNotes
awarebooleantrue pour activer la conscience
durationnumbernilRestauration automatique après ce nombre de ticks

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

Vérifie ou bascule l'état healing sur une entité elite.


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

Retourne true si la bounding box de l'entité chevauche une boîte alignée sur les axes à l'emplacement donné.

ParamètreTypeDéfautNotes
centerlocation tableCentre de la boîte de test
halfXnumber0.5Demi-largeur sur l'axe X
halfYnumberidentique à halfXDemi-hauteur sur l'axe Y
halfZnumberidentique à halfXDemi-largeur sur l'axe Z

entity:remove_elite()

Supprime l'entité elite du suivi EliteMobs. Si l'entité est un elite, cela la fait disparaître correctement via EliteMobs.


entity:set_custom_name_visible(visible)

Définit si le nom personnalisé de l'entité est toujours visible ou seulement lorsqu'on la regarde.

ParamètreTypeNotes
visiblebooleantrue pour toujours visible

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

Définit l'équipement sur l'entité.

ParamètreTypeDéfautNotes
slotstringSlot d'équipement : "HEAD", "CHEST", "LEGS", "FEET", "HAND", "OFF_HAND"
materialstringNom du matériau (ex. "DIAMOND_SWORD", "IRON_HELMET")
optionstable{}Paramètres optionnels (voir ci-dessous)

Table options :

CléTypeDéfautNotes
enchantmentstableau de tablesnilChaque entrée : { type = "SHARPNESS", level = 2 }
unbreakablebooleanfalseSi l'objet est incassable
Exemple
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

Une méthode qui retourne true si l'entité a actuellement l'IA activée.

Exemple
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 référence d'entités non-vivantes

Lorsqu'une entité apparue n'est pas une LivingEntity -- par exemple un bloc tombant, projectile, ou boule de feu -- vous recevez un wrapper de référence plus léger. Ceux-ci sont retournés par des méthodes comme context.world:spawn_falling_block_at_location() ou context.boss:summon_projectile().

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

Méthodes :

MéthodeNotes
is_valid()Vérification de validité en direct
get_location()Emplacement actuel en direct
get_velocity()Vecteur de vélocité actuel
is_on_ground()Si elle est au sol
teleport_to_location(location)Téléporte l'entité
set_velocity_vector(vector)Définit la vélocité
set_direction_vector(vector)Définit la direction (Fireball uniquement)
set_yield(value)Définit le yield d'explosion (Fireball uniquement)
set_gravity(enabled)Active/désactive la gravité
detonate()Fait détoner les entités firework
remove()Retire l'entité du monde
unregister([reason])Désenregistre du tracker d'entités
Exemple
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

Disponible dans les hooks où un joueur est directement impliqué (on_boss_damaged_by_player, on_player_damaged_by_boss, etc.). Les wrappers de joueur incluent tous les champs et méthodes d'entité communs listés ci-dessus, plus les extras ci-dessous.

attention

context.player vaut nil dans les hooks qui n'ont pas de joueur associé, tels que on_spawn, les callbacks planifiés et les hooks de minuterie. Vérifiez toujours nil avant utilisation.

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

Champs propres aux joueurs

ChampTypeNotes
game_modestringNom du mode de jeu actuel (ex. "SURVIVAL")

Méthodes propres aux joueurs

MéthodeNotes
send_message(message)Message de chat avec formatage couleur EliteMobs
show_action_bar(message)Texte d'action bar
show_title(title[, subtitle][, fadeIn][, stay][, fadeOut])Superposition d'écran de titre
show_boss_bar(title[, color][, style][, duration])Boss bar temporaire
run_command(command)Exécute une commande en tant que joueur (sans / initial)
Exemple
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

Le wrapper du boss pour l'elite mob qui possède ce pouvoir Lua. Toujours disponible dans chaque hook.

astuce

Le wrapper boss hérite de chaque méthode d'entité commune listée ci-dessus (ex. push_relative_to, apply_push_vector, set_gravity, set_scale, set_invulnerable, spawn_particle_at_self, overlaps_box_at_location, etc.). Les méthodes documentées dans cette section sont soit spécifiques au boss, soit ont un comportement différent via la couche EliteEntity.

Champs du boss

ChampTypeNotes
boss.namestringNom d'affichage
boss.uuidstringUUID de l'elite boss
boss.entity_typestringNom Bukkit EntityType
boss.is_monsterbooleantrue si l'entité sous-jacente est un Monster
boss.levelnumberNiveau de l'elite
boss.healthnumberSanté actuelle (snapshot)
boss.maximum_healthnumberSanté max (snapshot)
boss.damager_countnumberNombre d'attaquants (snapshot)
boss.is_in_combatbooleanÉtat de combat
boss.existsbooleanSi l'elite existe encore
boss.current_locationlocation tablePosition au moment de la création du wrapper (snapshot)
Exemple
return {
api_version = 1,
on_spawn = function(context)
context.log:info(context.boss.name .. " level " .. context.boss.level)
end
}

Méthodes du boss


boss:is_alive()

Retourne true si l'entité boss est valide, non morte, et que l'elite existe encore. Utilisez ceci au lieu du champ exists pour des vérifications en direct.

Exemple
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()

Retourne l'emplacement actuel en direct du boss sous forme de location table.

Exemple
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()

Retourne l'emplacement au niveau des yeux du boss.

Exemple
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])

Active/désactive l'IA sur le boss. Restaure éventuellement après une durée.

ParamètreTypeDéfautNotes
enabledbooleantrue pour activer l'IA
durationnumbernilRestauration automatique après ce nombre de ticks
Exemple
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)

Téléporte le boss vers un emplacement.

ParamètreTypeNotes
locationlocation tableDestination
Exemple
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)

Définit immédiatement la vélocité du boss.

ParamètreTypeNotes
vectortable vecteur{ x, y, z } ou { x = 0, y = 1, z = 0 }
Exemple
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)

Soigne le boss jusqu'à sa santé maximale.

ParamètreTypeNotes
amountnumberQuantité à soigner
Exemple
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])

Joue un son à l'emplacement du boss.

ParamètreTypeDéfautNotes
soundstringNom Bukkit Sound
volumenumber1.0Volume
pitchnumber1.0Hauteur
Exemple
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])

Fait apparaître des particules à l'emplacement du boss.

ParamètreTypeDéfautNotes
particleOrSpecstring ou tableNom de particule ou table spec
countnumber1Nombre de particules
Exemple
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)

Joue une animation de modèle personnalisé sur le boss si disponible.

ParamètreTypeNotes
namestringNom de l'animation
Exemple
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:play_model_animation("slam")
end
}

boss:face_direction_or_location(vectorOrLocation)

Oriente le boss vers une direction ou un emplacement.

ParamètreTypeNotes
vectorOrLocationtable vecteur ou locationDirection à orienter
Exemple
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])

Utilise le pathfinding pour faire marcher le boss vers un emplacement.

ParamètreTypeDéfautNotes
locationlocation tableDestination
speednumber1.0Multiplicateur de vitesse de mouvement
followbooleanfalseSuit continuellement la cible
timeoutnumbernilAnnule la navigation après ce nombre de ticks
Exemple
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)

Gère les tags sur le boss.

Exemple
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])

Envoie un message dans le chat à tous les joueurs à proximité.

ParamètreTypeDéfautNotes
messagestringTexte du message avec codes couleur
rangenumber20Rayon en blocs
Exemple
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])

Lance une entité de type projectile depuis le boss.

ParamètreTypeDéfautNotes
entityTypestringType d'entité (ex. "FIREBALL", "ARROW")
originlocation tablePosition de lancement
destinationlocation tablePosition cible
speednumber1.0Vitesse du projectile
optionstable{}Voir les options ci-dessous

Table options :

CléTypeNotes
durationnumberSuppression automatique après ticks
max_ticksnumberTicks max à surveiller pour l'atterrissage
custom_damagenumberDégâts à l'impact
detonation_powerstringPuissance d'explosion à l'impact
yieldnumberYield d'explosion (Fireball)
persistentbooleanSi le projectile persiste (défaut true)
effectstringNom EntityEffect à jouer à l'apparition
incendiarybooleanSi l'explosion est incendiaire
gravitybooleanSi le projectile a la gravité
glowingbooleanEffet de brillance
invulnerablebooleanSi le projectile est invulnérable
trackbooleanS'il suit la cible
spawn_at_originbooleanApparition à l'origine au lieu du décalage
direction_onlybooleanUtilise uniquement la direction, ignore la cible
on_landfunctionCallback (landing_location, spawned_entity)
Exemple
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])

Invoque un boss de renfort depuis un fichier de configuration.

ParamètreTypeNotes
filenamestringNom de fichier de configuration du boss
zoneOrLocationlocation table ou zoneEmplacement d'apparition ou définition de zone
durationnumberDespawn automatique optionnel après ticks
Exemple
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()

Retire le boss du monde.

Exemple
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)

Retourne un tableau de wrappers de joueurs à portée du boss.

ParamètreTypeNotes
rangenumberRayon en blocs
Exemple
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()

Retourne le nombre en direct de joueurs qui ont infligé des dégâts à ce boss. Contrairement au champ damager_count, cela effectue une vérification en direct.


boss:get_target_player()

Retourne la cible mob actuelle du boss en tant que wrapper de joueur, ou nil si la cible n'est pas un joueur ou n'est pas définie.


Méthodes de zone et de particules

Ces méthodes combinent les zones avec les effets de particules. Elles nécessitent une table de zone en entrée.


boss:get_nearby_players_in_zone(zone)

Retourne un tableau de wrappers de joueurs pour tous les joueurs actuellement à l'intérieur de la zone donnée.

ParamètreTypeNotes
zonetable zoneUne définition de forme de zone

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

Remplit l'intérieur d'une zone avec des particules.

ParamètreTypeNotes
zonetable zoneForme de zone à remplir
particlestringNom du type de particule
...Paramètres de particule supplémentaires
coveragenumber (optionnel)Facteur de couverture de densité des particules

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

Trace le contour d'une zone avec des particules.

ParamètreTypeNotes
zonetable zoneForme de zone à tracer
particlestringNom du type de particule
...Paramètres de particule supplémentaires
coveragenumber (optionnel)Facteur de couverture de densité des particules

boss:get_particles_from_self_toward_zone(zone, particle, speed?)

Fait apparaître des particules directionnelles qui voyagent depuis le boss vers une zone.

ParamètreTypeDéfautNotes
zonetable zoneZone cible
particlestringNom du type de particule
speednumbernilVitesse de déplacement des particules

boss:get_particles_toward_self(zone, particle, speed?)

Fait apparaître des particules directionnelles qui voyagent depuis une zone vers le boss.

ParamètreTypeDéfautNotes
zonetable zoneZone source
particlestringNom du type de particule
speednumbernilVitesse de déplacement des particules

boss:spawn_particles_with_vector(particles)

Fait apparaître un tableau de particules directionnelles, chacune avec sa propre position et son vecteur de vélocité.

ParamètreTypeNotes
particlestableau de tablesChaque entrée définit une particule avec position et direction

Méthodes Ender Dragon

Ces méthodes ne s'appliquent que lorsque l'entité boss est un Ender Dragon.


boss:get_ender_dragon_phase()

Retourne le nom actuel de EnderDragon.Phase sous forme de string, ou nil si le boss n'est pas un Ender Dragon.


boss:set_ender_dragon_phase(phase)

Définit la phase de l'Ender Dragon.

ParamètreTypeNotes
phasestringNom EnderDragon.Phase (ex. "CIRCLING", "CHARGE_PLAYER")

Méthodes de support de pouvoirs spéciaux

Ces méthodes prennent en charge des mécaniques de pouvoirs intégrés à EliteMobs depuis des scripts Lua.


boss:start_tracking_fireball_system(speed?)

Démarre le système IA de boules de feu traquantes sur le boss. Le boss lancera périodiquement des boules de feu qui suivent sa cible.

ParamètreTypeDéfautNotes
speednumber0.5Vitesse de la boule de feu

boss:handle_spirit_walk_damage(cause)

Gère le comportement spirit walk pour la cause de dégâts donnée. Spirit walk rend le boss immunisé à certains types de dégâts et le téléporte derrière l'attaquant.

ParamètreTypeNotes
causestringNom Bukkit DamageCause (ex. "ENTITY_ATTACK", "PROJECTILE")

boss:shield_wall_is_active()

Retourne true si le boss a actuellement un mur de bouclier actif.


boss:initialize_shield_wall(charges?)

Active un mur de bouclier sur le boss qui peut absorber les dégâts entrants.

ParamètreTypeDéfautNotes
chargesnumber1Nombre de coups que le bouclier peut absorber

boss:shield_wall_absorb_damage(player, damage)

Tente d'absorber les dégâts avec le mur de bouclier. Retourne true si les dégâts ont été absorbés, false si le bouclier est inactif ou épuisé.

ParamètreTypeNotes
playerwrapper de joueurLe joueur attaquant
damagenumberQuantité de dégâts à absorber

boss:deactivate_shield_wall()

Désactive le mur de bouclier du boss, retirant toutes les charges restantes.


boss:start_zombie_necronomicon(target, file)

Démarre le pouvoir zombie necronomicon sur une cible, faisant apparaître des renforts morts-vivants depuis un fichier de configuration.

ParamètreTypeNotes
targetwrapper d'entitéEntité cible pour le necronomicon
filestringNom de fichier de configuration du boss pour les morts-vivants invoqués

context.players

Helpers de requête de joueurs centrés sur le boss. Utilisez ceux-ci pour trouver des joueurs sans avoir besoin d'un joueur spécifique de l'événement.

MéthodeRetourneNotes
players:current_target()wrapper de joueur ou nilLe joueur de l'événement ou la cible mob du boss s'il s'agit d'un joueur
players:nearby_players(radius)tableau de wrappers de joueursTous les joueurs dans le rayon autour du boss
players:all_players_in_world()tableau de wrappers de joueursTous les joueurs dans le monde du boss
Exemple
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
}
Exemple
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 de requête d'entités générales centrés sur le boss.

MéthodeRetourneNotes
entities:get_nearby_entities(radius[, filter])tableau de wrappers d'entitésEntités à proximité autour du boss
entities:get_entities_in_box(center, halfX, halfY, halfZ[, filter])tableau de wrappers d'entitésEntités dans une boîte alignée sur les axes
entities:get_all_entities([filter])tableau de wrappers d'entitésToutes les entités correspondantes dans le monde du boss
entities:get_direct_target_entity()wrapper d'entité ou nilCible directe de l'événement actuel
entities:get_boss_spawn_location()location tableL'emplacement d'apparition d'origine du boss

Filtres valides : living (défaut), player / players, elite / elites, mob / mobs, all / entities

Exemple
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
}
Exemple
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
}

Étapes suivantes