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_mountbooleantrue si ce wrapper représente une monture de boss
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éé

Pour lire des données spécifiques aux elites comme le niveau du boss, utilisez les champs et méthodes de context.boss décrits dans la section context.boss ci-dessous. Pour faire disparaître un elite depuis un script, appelez la méthode entity:remove_elite().

Exemple
return {
api_version = 1,
on_enter_combat = function(context)
context.log:info("Boss level: " .. context.boss.level)
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()

Renvoie true si l'entité est toujours valide et n'est pas 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()

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

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

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

Renvoie la vélocité actuelle de l'entité sous forme de vector table.

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 de chat à l'entité. Prend en charge le formatage de couleur d'EliteMobs.

ParamètreTypeNotes
textstringMessage avec codes de 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 dans la barre d'action de l'entité.

ParamètreTypeNotes
messagestringTexte de la barre d'action avec codes de 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 d'apparition
staynumber40Ticks de maintien
fadeOutnumber10Ticks de disparition
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 barre de boss 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
vectorvector table{ 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 (1 tick par défaut). Utile pour remplacer le knockback.

ParamètreTypeDéfautNotes
vectorvector tableDirection 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)

Fait en sorte que l'entité se tourne vers un vecteur de direction ou un emplacement.

ParamètreTypeNotes
directionOrLocationvector ou location tableCible vers laquelle se tourner
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 de l'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 des 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 ou désactive l'invulnérabilité sur l'entité. Rétablit éventuellement l'état après une durée.

ParamètreTypeDéfautNotes
enabledbooleantrue pour activer l'invulnérabilité
durationnumbernilRétablissement 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 ou désactive l'IA de l'entité. Rétablit éventuellement l'état après une durée.

ParamètreTypeDéfautNotes
enabledbooleantrue pour activer l'IA
durationnumbernilRétablissement 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 de l'entité. Les tags sont suivis par EliteMobs et persistent pendant toute la durée de vie de l'entité.

MéthodeParamètreNotes
add_tag(tag[, duration])string, number optionnelAjoute le tag, le retire éventuellement automatiquement après des ticks
remove_tag(tag)stringRetire le tag
has_tag(tag)stringRenvoie 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 par l'entité. Pour les joueurs, elle s'exécute en tant que joueur ; utilisez le texte de la commande sans / au début.

ParamètreTypeNotes
commandstringTexte de la commande sans / au début
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é. Rétablit éventuellement à 1.0 après une durée.

ParamètreTypeDéfautNotes
scalenumberMultiplicateur d'échelle
durationnumbernilRétablissement 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 ou désactive la gravité de l'entité.

ParamètreTypeNotes
enabledbooleantrue pour une 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
local player = context.player
player:set_gravity(false)
player:send_message("&dYou begin to float!")
context.scheduler:run_after(60, function()
if player:is_alive() then
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
soundstringClé de son Minecraft (par exemple, "entity.ender_dragon.growl")
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 de play_sound_at_entity. Joue un son à l'emplacement de l'entité.


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 de spécification
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é possède 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
}

Méthodes de véhicule et de passager

Les wrappers d'entité vivante exposent également des helpers de véhicule/passager Bukkit. Ils sont utiles pour les montures scriptées, les effets de monte temporaire et pour vérifier si une entité est déjà attachée à une autre entité.

MéthodeRenvoieNotes
entity:is_inside_vehicle()booleanVrai si l'entité monte une autre entité.
entity:has_vehicle()booleanVrai si l'entité a actuellement un véhicule.
entity:get_vehicle()wrapper d'entité ou nilRenvoie le wrapper du véhicule actuel.
entity:set_vehicle(vehicle)booleanFait monter cette entité sur vehicle.
entity:leave_vehicle()booleanFait quitter à cette entité son véhicule actuel.
entity:has_passengers()booleanVrai si cette entité a des passagers.
entity:get_passenger_count()numberNombre de passagers.
entity:get_passengers()tableTableau de wrappers de passagers.
entity:add_passenger(passenger)booleanAjoute un passager à cette entité.
entity:remove_passenger(passenger)booleanRetire un passager de cette entité.
entity:eject_passengers()booleanÉjecte tous les passagers.
Exemple
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if context.player:has_vehicle() then
context.player:leave_vehicle()
end
end
}

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

Pousse l'entité à l'écart 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 de 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
local player = context.player
player:set_custom_name("&c&lMarked Target")
player:send_message("&cYou have been marked!")
-- Reset after 5 seconds
context.scheduler:run_after(100, function()
if player:is_alive() then
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 du bloc
durationnumber0Ticks avant suppression
requireAirbooleanfalseNe place que 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()

Renvoie la hauteur de l'entité en blocs.


entity:is_on_ground()

Renvoie true si l'entité se tient actuellement sur un sol solide.


entity:is_frozen()

Renvoie true si l'entité (lorsqu'elle est suivie comme un boss personnalisé) a le flag « gelé » défini.


entity:set_awareness_enabled(aware[, duration])

Active ou désactive la conscience du mob. N'affecte que les entités de type mob. Rétablit éventuellement l'état après une durée.

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

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

Vérifie ou active/désactive l'état de soin sur une entité elite.


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

Renvoie true si la boîte englobante 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()

Retire l'entité elite du suivi d'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 le regarde.

ParamètreTypeNotes
visiblebooleantrue pour toujours visible

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

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

ParamètreTypeDéfautNotes
slotstringEmplacement 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 d'options :

CléTypeDéfautNotes
enchantmentstableau de tablesnilChaque entrée : { type = "SHARPNESS", level = 2 }
unbreakablebooleanfalseIndique si l'item 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 renvoie 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é non vivante

Lorsqu'une entité apparue n'est pas une LivingEntity -- par exemple un bloc qui tombe, un projectile ou une boule de feu -- vous recevez un wrapper de référence plus léger. Ils sont renvoyé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()Indique si l'entité 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 la puissance d'explosion (Fireball uniquement)
set_gravity(enabled)Active ou désactive la gravité
detonate()Fait détoner les entités feu d'artifice
remove()Retire l'entité du monde
unregister([reason])Désinscrit 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 minuteur. Vérifiez toujours qu'il n'est pas 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 réservés aux joueurs

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

Méthodes réservées aux joueurs

MéthodeNotes
send_message(message)Message de chat avec formatage de couleur d'EliteMobs
show_action_bar(message)Texte de la barre d'action
show_title(title[, subtitle][, fadeIn][, stay][, fadeOut])Superposition d'écran de titre
show_boss_bar(title[, color][, style][, duration])Barre de boss temporaire
run_command(command)Exécute une commande en tant que joueur (sans / au début)
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 propriétaire de ce pouvoir Lua. Toujours disponible dans chaque hook.

astuce

Le wrapper du boss hérite de toutes les méthodes d'entité communes listées 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.existsbooleanIndique si l'elite existe encore
boss.current_locationlocation tablePosition à 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()

Renvoie true si l'entité boss est valide, n'est pas morte et que l'elite existe encore. Utilisez ceci au lieu du champ exists pour les 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()

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

Renvoie 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 ou désactive l'IA du boss. Rétablit éventuellement l'état après une durée.

ParamètreTypeDéfautNotes
enabledbooleantrue pour activer l'IA
durationnumbernilRétablissement 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
vectorvector table{ 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
soundstringClé de son Minecraft (par exemple, "entity.wither.spawn")
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 de spécification
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 elle est 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:has_mount() / boss:get_mount()

Vérifie ou renvoie l'entité que ce boss monte actuellement. boss:get_mount() renvoie nil si le boss n'a pas de monture. Lorsqu'une monture est renvoyée, son wrapper a is_mount = true.

Exemple
return {
api_version = 1,
on_enter_combat = function(context)
local mount = context.boss:get_mount()
if mount ~= nil then
context.log:info("Boss is mounted on " .. mount.entity_type)
end
end
}

boss:set_mount(entity) / boss:clear_mount() / boss:dismount()

Monte ou démonte le boss. boss:set_mount(entity) fait monter le boss sur le wrapper d'entité fourni et renvoie true si Bukkit a accepté le changement de passager. boss:clear_mount() et boss:dismount() font tous deux quitter au boss son véhicule actuel.

Exemple
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if not context.cooldowns:check_local("mount_check", 100) then return end
if context.boss:has_mount() then
context.boss:dismount()
end
end
}

boss:face_direction_or_location(vectorOrLocation)

Fait en sorte que le boss se tourne vers une direction ou un emplacement.

ParamètreTypeNotes
vectorOrLocationvector ou location tableDirection vers laquelle se tourner
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 déplacement
followbooleanfalseSuit en continu 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 du 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 de chat à tous les joueurs à proximité.

ParamètreTypeDéfautNotes
messagestringTexte du message avec codes de 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 d'options :

CléTypeNotes
durationnumberSuppression automatique après des ticks
max_ticksnumberTicks max à surveiller pour l'atterrissage
custom_damagenumberDégâts à l'impact
detonation_powerstringPuissance d'explosion à l'impact
yieldnumberPuissance d'explosion (Fireball)
persistentbooleanIndique si le projectile persiste (true par défaut)
effectstringNom EntityEffect à jouer à l'apparition
incendiarybooleanIndique si l'explosion est incendiaire
gravitybooleanIndique si le projectile a de la gravité
glowingbooleanEffet brillant
invulnerablebooleanIndique si le projectile est invulnérable
trackbooleanIndique s'il faut suivre la cible
spawn_at_originbooleanApparaît à l'origine au lieu d'un 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][, level])

Invoque un boss de renfort à partir d'un fichier de configuration.

ParamètreTypeNotes
filenamestringNom de fichier de config du boss
zoneOrLocationlocation table ou zoneEmplacement d'apparition ou définition de zone optionnel. Par défaut, l'emplacement du boss.
levelnumberNiveau de renfort optionnel. Par défaut 0, ce qui laisse le helper d'invocation hériter/résoudre le niveau normalement.
Exemple
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:summon_reinforcement("my_minion.yml", context.boss:get_location(), 0)
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)

Renvoie un tableau de wrappers de joueur à 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()

Renvoie le nombre en direct de joueurs ayant infligé des dégâts à ce boss. Contrairement au champ damager_count, ceci effectue une vérification en direct.


boss:get_target_player()

Renvoie la cible actuelle du mob boss sous forme de 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 des effets de particules. Elles nécessitent une zone table en entrée.


boss:get_nearby_players_in_zone(zone)

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

ParamètreTypeNotes
zonezone tableUne définition de forme de zone

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

Remplit l'intérieur d'une zone de particules.

ParamètreTypeNotes
zonezone tableForme 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 de la bordure d'une zone avec des particules.

ParamètreTypeNotes
zonezone tableForme de zone à contourer
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 du boss vers une zone.

ParamètreTypeDéfautNotes
zonezone tableZone 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 d'une zone vers le boss.

ParamètreTypeDéfautNotes
zonezone tableZone 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 propre vecteur de vélocité.

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

Méthodes de l'Ender Dragon

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


boss:get_ender_dragon_phase()

Renvoie le nom de la EnderDragon.Phase actuelle sous forme de chaîne, 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 les mécaniques de pouvoir intégrées d'EliteMobs depuis les scripts Lua.


boss:start_tracking_fireball_system(speed?)

Démarre le système d'IA de boules de feu à tête chercheuse sur le boss. Le boss lancera périodiquement des boules de feu qui suivent sa cible.

ParamètreTypeDéfautNotes
speednumber0.5Vitesse des boules de feu

boss:handle_spirit_walk_damage(cause)

Gère le comportement de marche spirituelle pour la cause de dégâts donnée. La marche spirituelle rend le boss immunisé contre 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()

Renvoie 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 des dégâts avec le mur de bouclier. Renvoie 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 nécronomicon zombie sur une cible, faisant apparaître des renforts morts-vivants à partir d'un fichier de configuration.

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

context.players

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

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

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

Filtres valides : living (par 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