Zum Hauptinhalt springen

Lua-Scripting: Boss & Entitäten

webapp_banner.jpg

Diese Seite behandelt alles rund um Boss- und Entitäts-Wrapper in EliteMobs-Lua-Powers: context.boss, context.player, context.players, context.entities und die Entitäts-Wrapper-Tabellen, die sie zurückgeben. Wenn du neu bei Lua-Powers bist, beginne zuerst mit Erste Schritte.


Entitäts-Wrapper​

Wenn du über die Lua-API auf Entitäten zugreifst – sei es über context.boss, context.player, Abfrageergebnisse wie context.players:nearby_players() oder Event-Felder – erhältst du immer Wrapper-Tabellen. Dies sind keine rohen Bukkit-Objekte. Jeder Wrapper stellt eine Reihe von Feldern (Snapshot-Werte, die zum Erstellungszeitpunkt erfasst werden) und Methoden (Live-Aufrufe, die auf den Server zugreifen) bereit.

Diese Seite beschreibt die nativen Wrapper für EliteMobs-Boss-Powers. Gemeinsame MagmaCore-Helfer wie context.world:get_entity(uuid) können andere Wrapper mit erst beim Zugriff gelesenen Live-Feldern und anderen Signaturen liefern. Dafür gilt die gemeinsame API-Referenz. Native Methoden akzeptieren Doppelpunkt oder Punkt ohne explizites self-Argument. Eine Feldzuweisung ändert nur die Lua-Tabelle; verwende eine Methode, um die Entität zu ändern.

Zwei Regeln zum Merken:

  • Felder wie health, current_location und maximum_health sind Snapshots. Sie spiegeln den Zustand zum Zeitpunkt der Wrapper-Erstellung wider und aktualisieren sich nicht automatisch.
  • Methoden wie get_location(), get_health() und is_alive() führen bei jedem Aufruf eine Live-Überprüfung durch.

Gemeinsame Entitätsfelder​

Jeder Living-Entity-Wrapper enthält diese Felder.

FeldTypHinweise
entity.namestringAnzeigename
entity.uuidstringUUID als Text
entity.entity_typestringBukkit-EntityType-Name (z. B. "ZOMBIE", "PLAYER")
entity.is_playerbooleantrue für Spieler
entity.is_elitebooleantrue, wenn EliteMobs diese Entität als Elite verfolgt
entity.is_mountbooleantrue, wenn dieser Wrapper ein Boss-Reittier darstellt
entity.is_monsterbooleantrue für Monster-Entitäten
entity.healthnumberAktuelle Gesundheit (Snapshot)
entity.maximum_healthnumberMaximale Gesundheit (Snapshot)
entity.current_locationlocation-TabellePosition zum Zeitpunkt der Wrapper-Erstellung
entity.is_validbooleanBukkit-Gültigkeit bei der Erstellung des Wrappers (Snapshot)
is_valid ist bei lebenden Entitäten ein Feld, keine Methode

Bei Wrappern lebender Entitäten (einschließlich context.player und context.boss) ist is_valid ein einfacher Boolean, der beim Erstellen des Wrappers festgehalten wurde. Ein Aufruf von entity:is_valid() löst attempt to call a boolean value aus und deaktiviert die Kraft.

  • Lies den Snapshot mit entity.is_valid (Punkt).
  • Für eine Live-Prüfung rufe stattdessen entity:is_alive() auf -- diese Methode fragt den Server jedes Mal neu ab.

is_valid() ist eine echte Methode bei den leichteren Referenz-Wrappern für nicht-lebende Entitäten, die von summon_projectile, spawn_falling_block_at_location und Ähnlichem zurückgegeben werden. Genau diese Wrapper speicherst du am ehesten über mehrere Ticks hinweg, und dort ist die Live-Prüfung wichtig.

Um Elite-spezifische Daten wie das Boss-Level zu lesen, verwende die Felder und Methoden von context.boss, die im Abschnitt context.boss weiter unten beschrieben werden. Um einen Elite aus einem Script zu despawnen, rufe die Methode entity:remove_elite() auf.

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

Gemeinsame Entitätsmethoden​

Die folgenden Methoden greifen live auf den Server zu. Bewegung, Gesundheit, Ausrüstung und Effekte gehören zu Wrappern lebender Entitäten. Chat, Action Bars, Titel, Boss-Leisten und Spielerbefehle benötigen einen Player-Wrapper. context.boss:send_message(...) ist eine separate Boss-Methode für Nachrichten an nahe Spieler. Sofern kein Rückgabewert dokumentiert ist, geben verändernde Methoden nil zurück, keine Erfolgsbestätigung.

Änderungen an KI, Wahrnehmung, Unverwundbarkeit und Skalierung gehören der Power, die sie vorgenommen hat. Jede speichert den Wert, den sie ersetzt hat: Eine positive Dauer stellt diesen Wert nach den angegebenen Ticks wieder her, und das Schließen des Scripts stellt jede noch aktive Änderung wieder her. Ändern mehrere Powers dieselbe Eigenschaft, stellt das Ende einer Änderung die jüngste verbleibende Änderung wieder her oder, wenn keine mehr übrig ist, den ursprünglichen Wert. Ändert zwischenzeitlich ein anderes Plugin oder ein Befehl die Eigenschaft, bleibt dessen Wert erhalten. Das Pausieren des Scripts macht diese Änderungen nicht rückgängig. Dauern von Tags, verzögerte Stöße und Spieler-Boss-Leisten verwenden unabhängige Aufgaben der Spieluhr, die nach dem Schließen des Scripts weiterlaufen. Andere Änderungen an Entitäten werden nicht rückgängig gemacht.


entity:is_alive()​

Gibt true zurück, wenn die Entität noch gültig und nicht tot ist.

Beispiel
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()​

Gibt den aktuellen Live-Standort als location-Tabelle zurück.

Beispiel
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()​

Gibt den Standort auf Augenhöhe als location-Tabelle zurück.

Beispiel
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()​

Gibt die aktuelle bzw. maximale Live-Gesundheit zurück.

Beispiel
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()​

Gibt die aktuelle Geschwindigkeit der Entität als Vektor-Tabelle zurück.

Beispiel
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)​

Sendet eine Chat-Nachricht an einen Spieler. Unterstützt die EliteMobs-Farbformatierung.

ParameterTypHinweise
textstringNachricht mit Farbcodes
Beispiel
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)​

Sendet eine Action-Bar-Nachricht an einen Spieler über die Lua-Quelle von EliteMobs. Diese nimmt an der gemeinsamen Zusammenstellung der Action Bar teil und reserviert die Anzeige nicht für dieses Script.

ParameterTypHinweise
messagestringAction-Bar-Text mit Farbcodes
Beispiel
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])​

Sendet einem Spieler einen Titel und optionalen Untertitel mit EliteMobs-Farben. Zeitangaben sind ganzzahlige Ticks.

ParameterTypDefaultHinweise
titlestringTiteltext
subtitlestring""Untertiteltext
fadeInnumber10Einblend-Ticks
staynumber40Anzeigedauer in Ticks
fadeOutnumber10Ausblend-Ticks
Beispiel
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])​

Erstellt über die Verwaltung der Boss-Leistenreihenfolge eine neue Leiste für einen Spieler. Farb- und Stilnamen ignorieren Groß- und Kleinschreibung; unbekannte Werte verwenden WHITE und SOLID. Eine positive Dauer plant eine unabhängige Entfernung. Nichtpositive Werte fügen keinen Timer hinzu, und die Methode liefert weder Referenz noch Schlüssel zur späteren Entfernung. Verwende eine positive Dauer. Diese Signatur unterscheidet sich von der gemeinsamen MagmaCore-API mit Leisten-Schlüsseln.

ParameterTypDefaultHinweise
titlestringTiteltext der Leiste
colorstring"WHITE"BarColor-Wert
stylestring"SOLID"BarStyle-Wert
durationnumber40Dauer in Ticks
Beispiel
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)​

Fordert einen Bukkit-Teleport an und gibt nil zurück, ohne dessen Erfolg zu melden. Die native Standortkonvertierung akzeptiert x, y, z, optional yaw/pitch, den Namen einer geladenen world oder eine verschachtelte current_location-Tabelle. Fehlende Koordinaten werden 0; ohne Weltangabe gilt die Welt des ausführenden Bosses, nicht zwingend die der Zielentität. Eine ausdrücklich unbekannte Welt lässt die Konvertierung fehlschlagen. nil oder ein Wert ohne Tabellenformat verwendet die Boss-Position. Es gibt keine zusätzliche Prüfung auf sichere Ziele oder Regionsschutz.

ParameterTypHinweise
locationlocation-TabelleZiel
Beispiel
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)​

Setzt die Geschwindigkeit der Entität sofort.

ParameterTypHinweise
vectorVektor-Tabelle{ x, y, z } oder { x = 0, y = 1, z = 0 }
Beispiel
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])​

Wendet einen gespeicherten Geschwindigkeitsvektor nach standardmäßig 1 Tick an. Der unabhängige Timer prüft, ob die Entität noch gültig ist. Mit additive = true addiert er den Vektor zur Geschwindigkeit zum Ausführungszeitpunkt; andernfalls ersetzt er sie. Pausieren oder Schließen des Scripts bricht den Stoß nicht ab.

ParameterTypDefaultHinweise
vectorVektor-TabelleRichtung und Stärke
additivebooleanfalseZur bestehenden Geschwindigkeit hinzufügen, statt sie zu ersetzen
delaynumber1Verzögerung in Ticks vor der Anwendung
Beispiel
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)​

Richtet die Entität durch einen Teleport an ihre aktuelle Position mit neuer Drehung aus. Eine Tabelle mit einem world-String oder verschachteltem current_location gilt als Zielort und muss in der Welt der Entität liegen. Eine reine x/y/z-Tabelle gilt als Richtungsvektor. Ein Nullvektor ändert nichts.

ParameterTypHinweise
directionOrLocationVektor- oder location-TabelleZiel, auf das geblickt werden soll
Beispiel
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)​

Setzt die Bukkit-Feuerticks auf den angegebenen Wert. Die Richtlinie für Instanzeffekte prüft das Ziel bei jedem Aufruf erneut. Spieler müssen online, am Leben und in der Quellwelt sein; in einer Instanz müssen sie zur aktiven Partie und deren Teilnehmerliste gehören. Andere lebende Ziele müssen gültig sein. Dies garantiert keinen Feuerschaden.

ParameterTypHinweise
ticksnumberBranddauer in Ticks (20 Ticks = 1 Sekunde)
Beispiel
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])​

Erhöht die tatsächlichen Bukkit-Freeze-Ticks unter derselben Richtlinie für Instanzeffekte wie set_fire_ticks. Trotz des Namens ist dies kein reines Paket-Overlay und stoppt weder KI noch Bewegung direkt. Das normale Gefrierverhalten von Minecraft kann wirken.

ParameterTypDefaultHinweise
ticksnumber1Anzahl der Freeze-Ticks
Beispiel
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])​

Wendet nach derselben Instanzprüfung wie set_fire_ticks einen Bukkit-Trankeffekt an. Namen ignorieren Groß- und Kleinschreibung; unbekannte Namen erzeugen eine Warnung ohne Effekt. Bukkits Regeln zum Ersetzen von Effekten gelten; vorhandene Effekte werden nicht pauschal überschrieben.

ParameterTypDefaultHinweise
effectstringPotionEffectType-Name
durationnumberDauer in Ticks
amplifiernumber0Effektstärke (0 = Stufe I)
Beispiel
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
}

Vorsicht

remove_potion_effect(effect) ist auf nativen EliteMobs-Boss-Power-Wrappern nicht verfügbar. Es existiert auf gemeinsamen MagmaCore-Wrappern. Wähle beim Anwenden eine passende Effektdauer; ein Effekt mit Dauer null entfernt einen vorhandenen Effekt nicht zuverlässig.


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

Übergibt Schaden an Bukkit. Alle drei Methoden geben nil zurück; die angeforderte Menge bestätigt keinen Gesundheitsverlust. Kampfregeln und spätere Listener können den Treffer ändern oder abbrechen.

MethodeHinweise
deal_damage(amount)Ruft Bukkit-Schaden ohne ausdrücklichen Verursacher auf
deal_custom_damage(amount)Verwendet BossCustomAttackDamage mit dem ausführenden Boss; lehnt Selbsttreffer, unverwundbare oder tote Ziele und Spieler außerhalb von Survival/Adventure ab, übergibt einen benutzerdefinierten Treffer und löscht danach den nativen Schadens-Cooldown
deal_damage_from_boss(amount)Ruft Bukkit-Schaden mit dem ausführenden Boss als Verursacher auf; die normale EliteMobs-Kampfverarbeitung kann greifen
Beispiel
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)​

Ruft für registrierte Elites die EliteMobs-Heilung mit dem abbrechbaren EliteMobHealEvent auf. Andere lebende Entitäten werden direkt bis zum Basiswert ihres Attributs für maximale Gesundheit geheilt. Dieser kann vom effektiven Maximum aus get_maximum_health() abweichen. Übergib eine nichtnegative Menge; der Helfer ist keine Schadens-API mit automatischer Eingabebegrenzung.

ParameterTypHinweise
amountnumberMenge der Heilung
Beispiel
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])​

Setzt die Unverwundbarkeit der Entität und speichert den ersetzten Wert. Eine positive Dauer stellt diesen Wert nach den angegebenen Ticks wieder her; andernfalls bleibt die Änderung bestehen, bis diese Power beendet wird, was den Wert ebenfalls wiederherstellt. Ein erneuter Aufruf aus derselben Power ersetzt deren frühere Änderung.

ParameterTypDefaultHinweise
enabledbooleantrue, um Unverwundbarkeit zu aktivieren
durationnumber0Stellt den ersetzten Wert nach diesen Ticks wieder her; 0 behält die Änderung bei, bis die Power beendet wird
Beispiel
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])​

Setzt die KI der Entität und speichert den ersetzten Wert. Eine positive Dauer stellt diesen Wert nach den angegebenen Ticks wieder her; andernfalls bleibt die Änderung bestehen, bis diese Power beendet wird, was den Wert ebenfalls wiederherstellt. Ein Aufruf von set_ai_enabled(true), während diese Power eine KI-Änderung hält, beendet diese Änderung und stellt den ersetzten Wert wieder her, statt eine neue anzuwenden.

ParameterTypDefaultHinweise
enabledbooleantrue, um die KI zu aktivieren
durationnumber0Stellt den ersetzten Wert nach diesen Ticks wieder her; 0 behält die Änderung bei, bis die Power beendet wird
Beispiel
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)​

Verwaltet EliteMobs-Tags mit Beachtung der Groß- und Kleinschreibung auf registrierten Elites und Spielern mit geladenen EliteMobs-Inventardaten. Normale, nicht registrierte Mobs speichern diese Tags nicht. Es sind keine Bukkit-Scoreboard-Tags. Eine positive Dauer plant eine unabhängige Entfernung; erneutes Hinzufügen desselben Tags bricht seinen alten Timer nicht ab.

MethodeParameterHinweise
add_tag(tag[, duration])string, optionale numberFügt einen Tag hinzu, entfernt ihn optional automatisch nach Ticks
remove_tag(tag)stringEntfernt den Tag
has_tag(tag)stringGibt true zurück, wenn der Tag vorhanden ist
Beispiel
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)​

Führt sofort einen Befehl als Spieler mit dessen Berechtigungen aus. Verwende Text ohne führenden /. Diese reine Spielermethode gibt nil zurück, meldet keinen Befehlserfolg und ersetzt keine Platzhalter.

ParameterTypHinweise
commandstringBefehlstext ohne führenden /
Beispiel
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])​

Setzt den Basiswert des Skalierungsattributs, sofern vorhanden, und speichert den ersetzten Wert. Eine positive Dauer stellt diesen Wert nach den angegebenen Ticks wieder her; andernfalls bleibt die Änderung bestehen, bis diese Power beendet wird, was den Wert ebenfalls wiederherstellt. Attributmodifikatoren können die effektive Größe verändern.

ParameterTypDefaultHinweise
scalenumberSkalierungsmultiplikator
durationnumber0Stellt die ersetzte Skalierung nach diesen Ticks wieder her; 0 behält die Änderung bei, bis die Power beendet wird
Beispiel
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)​

Schaltet die Schwerkraft um. Beim Schließen des Scripts wird sie nicht automatisch wiederhergestellt. Ein verzögerter Script-Callback läuft nach dem Schließen möglicherweise nie; verlass dich bei überlebenden Entitäten nicht auf ihn als garantierte Wiederherstellung.

ParameterTypHinweise
enabledbooleantrue für normale Schwerkraft
Beispiel
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
-- Change the boss's gravity; the callback runs only while this script stays active.
context.boss:set_gravity(false)
context.scheduler:run_after(60, function(tick_context)
if tick_context.boss.exists then
tick_context.boss:set_gravity(true)
end
end)
end
}

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

Spielt einen Sound am Standort der Entität ab.

ParameterTypDefaultHinweise
soundstringMinecraft-Sound-Key wie "entity.ender_dragon.growl" oder ein Spigot-Sound-Enum-Name. Resource-Pack-Keys funktionieren ebenfalls.
volumenumber1.0Lautstärke
pitchnumber1.0Tonhöhe
Beispiel
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 für play_sound_at_entity. Spielt einen Sound am Standort der Entität ab.


entity:spawn_particle_at_self(particleOrSpec[, count])​

Erzeugt Partikel am aktuellen Standort der Entität. Verwendet dieselbe Partikelspezifikation wie der native Welt-Helfer. Das amount einer Tabelle überschreibt den Ersatzwert count; Namen werden in Großbuchstaben umgewandelt. Nicht unterstützte Partikel mit zusätzlichen Daten erzeugen eine Warnung statt Partikel.

ParameterTypDefaultHinweise
particleOrSpecstring oder TabellePartikelname oder Spezifikations-Tabelle
countnumber1Anzahl der Partikel
Beispiel
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])​

Erzeugt Partikel an einem bestimmten Standort.

ParameterTypDefaultHinweise
locationlocation-TabelleZielstandort
particlestringName des Partikeltyps
countnumber1Anzahl der Partikel
Beispiel
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)​

Fordert eine Animation nur an, wenn EliteMobs die Entität als Custom Boss mit Custom Model registriert hat. Die Methode gibt nil zurück, wartet nicht auf das Ende und meldet nicht, ob der Animationsname existiert. Eine beliebige Entität mit Modell reicht für diesen nativen Helfer nicht aus.

ParameterTypHinweise
namestringName der Animation
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:play_model_animation("attack_swing")
end
}

Methoden für Fahrzeuge und Passagiere​

Wrapper lebender Entitäten bieten auch Bukkit-Helfer für Fahrzeuge und Passagiere. Wrapper-Argumente werden über die Bukkit-UUID aufgelöst; reine UUID-Strings sind hier nicht erlaubt. Aufsitzen lehnt fehlende, identische oder ungültige Entitäten ab, umgeht vorübergehend den EliteMobs-Schutz gegen Reittier-Exploits und gibt Bukkits Annahmeergebnis zurück. Diese Methoden registrieren keine Transportroute und planen keine Bereinigung beim Schließen des Scripts.

MethodeGibt zurückHinweise
entity:is_inside_vehicle()booleanTrue, wenn die Entität auf einer anderen Entität reitet.
entity:has_vehicle()booleanTrue, wenn die Entität derzeit ein Fahrzeug hat.
entity:get_vehicle()Entitäts-Wrapper oder nilGibt den aktuellen Fahrzeug-Wrapper zurück.
entity:set_vehicle(vehicle)booleanLässt diese Entität auf vehicle reiten.
entity:leave_vehicle()booleanLässt diese Entität ihr aktuelles Fahrzeug verlassen.
entity:has_passengers()booleanTrue, wenn diese Entität Passagiere hat.
entity:get_passenger_count()numberAnzahl der Passagiere.
entity:get_passengers()TabelleArray von Passagier-Wrappern.
entity:add_passenger(passenger)booleanFügt dieser Entität einen Passagier hinzu.
entity:remove_passenger(passenger)booleanEntfernt einen Passagier von dieser Entität.
entity:eject_passengers()booleanWirft alle Passagiere ab.
Beispiel
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])​

Ersetzt sofort die Geschwindigkeit durch den normalisierten Versatz von der Quelle zur Entität, multipliziert mit strength, und addiert die Versätze entlang der Weltachsen. Identische Positionen erhalten trotzdem die Zusatzversätze. Ein Wrapper liefert sein gespeichertes current_location; verwende bei Bedarf source:get_location() für die aktuelle Position. Der Helfer vergleicht keine Welten, daher dürfen nur Positionen derselben Welt verwendet werden.

ParameterTypDefaultHinweise
sourcelocation oder WrapperUrsprung des Stoßes
strengthnumber1.0Stärkemultiplikator des Stoßes
xOffsetnumber0Zusätzlicher X-Versatz
yOffsetnumber0Zusätzlicher Y-Versatz
zOffsetnumber0Zusätzlicher Z-Versatz
Beispiel
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()​

Setzt den benutzerdefinierten Bukkit-Namen mit Farbformatierung. Das Zurücksetzen verwendet den konfigurierten Namen eines registrierten Elites; bei nicht registrierten Entitäten verwendet es deren aktuelles getName(), keinen gespeicherten Originalnamen. Weder der Kontoname eines Spielers noch das Snapshot-Feld des Wrappers wird geändert.

Beispiel
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.boss:set_custom_name("&c&lEnraged Boss")
context.boss:send_message("&cThe boss is enraged!")
-- Reset after 5 seconds
context.scheduler:run_after(100, function(tick_context)
if tick_context.boss:is_alive() then
tick_context.boss:reset_custom_name()
end
end)
end
}

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

Platziert einen temporären Block am aktuellen Standort der Entität und gibt nil zurück, auch wenn requireAir die Platzierung verhindert. Eine positive Dauer stellt die gespeicherten Blockdaten, keine Behälterinhalte, wieder her, wenn der Timer endet, wenn der Chunk oder die Welt entladen wird oder wenn das Plugin heruntergefahren wird, allerdings nur, solange an der Stelle noch der temporäre Block steht. Eine erneute Platzierung auf demselben temporären Block startet dessen Timer neu. Blöcke mit Blockentitäten, etwa Truhen, und Blöcke, die ein anderer Besitzer temporärer Blöcke hält, werden übersprungen. Das Abbauen des Blocks lässt nichts fallen. Eine nichtpositive Dauer platziert den Block dauerhaft und ohne Verfolgung. Verwende ein Blockmaterial und prüfe Schutzregeln selbst.

ParameterTypDefaultHinweise
materialstringName des Blockmaterials
durationnumber0Positive Ticks bis zur Wiederherstellung; nichtpositive Werte platzieren den Block dauerhaft
requireAirbooleanfalseNur platzieren, wenn der Block derzeit Luft ist
Beispiel
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()​

Gibt die Höhe der Entität in Blöcken zurück.


entity:is_on_ground()​

Gibt Bukkits aktuelles isOnGround()-Flag zurück. Führt keine neue Block- oder Kopffreiheitsprüfung aus.


entity.is_valid​

Bei einem Wrapper für eine lebende Entität speichert dieses boolesche Feld die Bukkit-Gültigkeit zum Erstellungszeitpunkt. Lies es mit einem Punkt (entity.is_valid); ein Methodenaufruf führt zu einem Fehler.

Da es sich um einen Snapshot handelt, veraltet der Wert und ersetzt keine Live-Prüfung. Verwende entity:is_alive(), wenn du den aktuellen Zustand brauchst, und is_valid() (die Methode) bei Referenz-Wrappern für nicht-lebende Entitäten, die du über mehrere Ticks hinweg gespeichert hast.


entity:is_frozen()​

Gibt true zurück, wenn die Entität (sofern sie als Custom Boss verfolgt wird) das Frozen-Flag gesetzt hat.


entity:set_awareness_enabled(aware[, duration])​

Setzt die Wahrnehmung des Mobs und speichert den ersetzten Wert. Wirkt nur auf Mob-Entitäten. Eine positive Dauer stellt diesen Wert nach den angegebenen Ticks wieder her; andernfalls bleibt die Änderung bestehen, bis diese Power beendet wird, was den Wert ebenfalls wiederherstellt. Ein Aufruf mit true, während diese Power eine Wahrnehmungsänderung hält, beendet diese Änderung, statt eine neue anzuwenden.

ParameterTypDefaultHinweise
awarebooleantrue, um die Wahrnehmung zu aktivieren
durationnumber0Stellt den ersetzten Wert nach diesen Ticks wieder her; 0 behält die Änderung bei, bis die Power beendet wird

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

Liest oder setzt das Heilungsflag eines registrierten Elites. Das heilt nicht selbst und startet keinen Heilungstimer. set_healing(true) markiert den Elite als heilend, sofern er es noch nicht ist; set_healing(false) entfernt nur eine Heilung, die diese Power gesetzt hat. Wird die Power beendet, entfernt sie jedes Heilungsflag, das ihr noch gehört. Nicht registrierte Entitäten liefern beim Lesen false und bleiben beim Setzen unverändert.


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

Gibt true zurück, wenn die Bounding Box der Entität die numerische achsenparallele Box überschneidet. Welten werden nicht verglichen; übergib einen Mittelpunkt in der Welt der Entität. Ein nicht auflösbarer Mittelpunkt ergibt false.

ParameterTypDefaultHinweise
centerlocation-TabelleMittelpunkt der Testbox
halfXnumber0.5Halbe Breite auf der X-Achse
halfYnumberwie halfXHalbe Höhe auf der Y-Achse
halfZnumberwie halfXHalbe Breite auf der Z-Achse

entity:remove_elite()​

Entfernt die Elite-Entität aus dem EliteMobs-Tracking. Ist die Entität ein Elite, despawnt dies sie ordnungsgemäß über EliteMobs.


entity:remove()​

Entfernt eine einfache lebende Entität, die ein Skript gespawnt hat, etwa einen Rüstungsständer. Gibt true zurück, wenn sie entfernt wurde. Spieler und Elites werden mit false abgelehnt; despawne Elites mit remove_elite().


entity:set_invisible(enabled) und entity:set_silent(enabled)​

set_invisible blendet den Körper der Entität aus; getragene und gehaltene Gegenstände bleiben sichtbar. set_silent schaltet die eigenen Geräusche der Entität stumm.


entity:set_marker(enabled)​

Nur für Rüstungsständer. Diese vier Methoden gibt es bei Rüstungsständer-Wrappern; bei jeder anderen Entität fehlen sie.

MethodeWirkung
set_marker(enabled)Ein Marker-Ständer hat keine Hitbox; er kann nicht getroffen werden, und nichts kollidiert mit ihm
set_small(enabled)Ständer in halber Größe
set_base_plate(enabled)Zeigt oder verbirgt die steinerne Bodenplatte
set_arms(enabled)Zeigt oder verbirgt die Arme

Für ein rein visuelles schwebendes Item oder einen Block verwende bevorzugt world:spawn_display_at_location, das nichts davon benötigt.


entity:set_custom_name_visible(visible)​

Legt fest, ob der benutzerdefinierte Name der Entität immer sichtbar ist oder nur, wenn man sie ansieht.

ParameterTypHinweise
visiblebooleantrue für immer sichtbar

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

Ersetzt den gewählten Slot durch ein neues Item des Materials. Slot-, Material- und Verzauberungsnamen ignorieren Groß- und Kleinschreibung. Unbekannte Slots oder Materialien ändern nichts; unbekannte Verzauberungen werden übersprungen, bekannte ohne normale Levelbeschränkungen angewendet. Dies lädt keine Custom-Item-Datei und bewahrt keine Metadaten des vorherigen Items. Gibt nil zurück.

ParameterTypDefaultHinweise
slotstringAusrüstungs-Slot: "HEAD", "CHEST", "LEGS", "FEET", "HAND", "OFF_HAND"
materialstringMaterialname (z. B. "DIAMOND_SWORD", "IRON_HELMET")
optionsTabelle{}Optionale Einstellungen (siehe unten)

Options-Tabelle:

KeyTypDefaultHinweise
enchantmentsArray von TabellennilJeder Eintrag: { type = "SHARPNESS", level = 2 }
unbreakablebooleanfalseOb das Item unzerstörbar ist
Beispiel
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:damage_equipment(slot, amount)​

Beschädigt das Item in HAND, OFF_HAND, HEAD, CHEST, LEGS oder FEET und gibt den tatsächlich angewendeten Haltbarkeitsschaden zurück. Fordere pro Aufruf 1 bis 64 Punkte an. Fehlende, nicht beschädigbare oder unzerstörbare Items liefern 0.

Bei Spielern wird PlayerItemDamageEvent ausgelöst; Abbruch und geänderte Schadensmenge werden berücksichtigt. Ein Listener kann die Menge über die ursprüngliche Anfragengrenze von 64 Punkten erhöhen; sie bleibt durch die verbleibende Haltbarkeit begrenzt. Erreicht ein Item seinen maximalen Schaden, wird der gesamte Stack aus dem Slot entfernt und PlayerItemBreakEvent ausgelöst. Metadaten für benutzerdefinierten Maximalschaden werden berücksichtigt. Die Methode berechnet selbst keine Unbreaking-Reduktion. Ungültige Slots oder Anfragen außerhalb von 1..64 lösen einen Lua-Argumentfehler aus.

entity:is_ai_enabled()​

Gibt true zurück, wenn die KI aktiviert ist. Bei registrierten Elites liest sie den logischen KI-Zustand von EliteMobs einschließlich der Verwaltung nativen Verhaltens, statt sich nur auf Bukkits zugrunde liegendes KI-Flag zu verlassen.

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

Referenz-Wrapper für nicht-lebende Entitäten​

Wenn eine gespawnte Entität keine LivingEntity ist – zum Beispiel ein fallender Block, ein Projektil oder ein Feuerball –, erhältst du einen leichteren Referenz-Wrapper. Diese werden von Methoden wie context.world:spawn_falling_block_at_location() oder context.boss:summon_projectile() zurückgegeben.

Snapshot-Felder: name, uuid, entity_type, is_player (immer false), is_elite (immer false), is_mount (normalerweise false; boss:get_mount() setzt es auf true), current_location.

Methoden:

MethodeHinweise
is_valid()Live-Gültigkeitsprüfung. Anders als bei Wrappern lebender Entitäten ist dies hier wirklich eine Methode
get_location()Aktueller Live-Standort
get_velocity()Aktueller Geschwindigkeitsvektor
is_on_ground()Ob auf dem Boden
teleport_to_location(location)Teleportiert die Entität
set_velocity_vector(vector)Setzt die Geschwindigkeit
set_direction_vector(vector)Setzt die Richtung (nur Fireball)
set_yield(value)Setzt die Explosionsstärke (nur Fireball)
set_gravity(enabled)Schaltet die Schwerkraft um
detonate()Fordert die Zündung von Firework-Entitäten an; ohne Wirkung auf andere Typen
remove()Entfernt die Entität aus der Welt
unregister([reason])Führt für erkannte registrierte Entitäten die EliteMobs-Tracker-Entfernung aus; nicht registrierte Entitäten bleiben unverändert

Diese Wrapper bieten auch alle Fahrzeug- und Passagiermethoden, etwa is_inside_vehicle(), get_vehicle(), set_vehicle(v), add_passenger(p) und eject_passengers(). Damit kann ein Boss auf einer nicht lebenden Entität reiten.

unregister akzeptiert einen Entfernungsgrund ohne Beachtung der Groß- und Kleinschreibung und verwendet standardmäßig OTHER; es ist keine boolesche Erfolgsabfrage. Wrapper-Methoden behalten die Referenz auf die Entität. Prüfe daher is_valid(), bevor du eine gespeicherte Referenz verwendest. Eine durch die Lua-Instanz verzögerte Entfernung wird beim Schließen der Instanz abgebrochen. Verwende eine passende native Dauer oder die Registrierung beim Besitzer, wenn die Bereinigung das Script überleben muss.

Beispiel
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
)
if fb == nil then return end
-- 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​

Verfügbar, wenn das direkte Ziel oder der Akteur des Events ein Spieler ist, unter anderem in on_boss_damaged_by_player und on_player_damaged_by_boss. Player-Wrapper enthalten die gemeinsamen Methoden lebender Entitäten. Methoden, die einen registrierten Elite oder Custom Boss erfordern, bleiben bei normalen Spielern wirkungslos. Die folgenden Extras sind nur für Spieler verfügbar.

Vorsicht

context.player ist nil in Hooks, die keinen zugeordneten Spieler haben, etwa on_spawn, geplanten Callbacks und Timer-Hooks. Prüfe vor der Verwendung immer auf nil.

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

Nur Spieler betreffende Felder​

FeldTypHinweise
game_modestringSnapshot des Spielmodus in Großbuchstaben (z. B. "SURVIVAL")

Nur Spieler betreffende Methoden​

MethodeHinweise
send_message(message)Chat-Nachricht mit EliteMobs-Farbformatierung
show_action_bar(message)Action-Bar-Text
show_title(title[, subtitle][, fadeIn][, stay][, fadeOut])Titelbildschirm-Overlay
show_boss_bar(title[, color][, style][, duration])Temporäre Boss-Leiste
run_command(command)Führt einen Befehl als Spieler aus (ohne führenden /)
Beispiel
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​

Der Boss-Wrapper für den Elite-Mob, dem diese Lua-Power gehört. In jedem Hook immer verfügbar.

Tipp

Solange eine lebende Entität zugrunde liegt, erbt der Boss-Wrapper die gemeinsamen Methoden lebender Entitäten, darunter push_relative_to, apply_push_vector, set_gravity, set_scale, set_invulnerable, spawn_particle_at_self und overlaps_box_at_location. Er erbt keine reine Spieleroberfläche oder Spielerbefehle. Die folgenden Methoden sind boss-spezifisch oder verwenden die EliteEntity-Schicht. Fehlt die zugrunde liegende Entität, existiert die Tabelle weiterhin, aber nicht zwingend mit allen geerbten Methoden.

Boss-Felder​

FeldTypHinweise
boss.namestringAnzeigename
boss.uuidstringUUID des Boss-Elites
boss.entity_typestringBukkit-EntityType-Name
boss.is_monsterbooleantrue, wenn die zugrunde liegende Entität ein Monster ist
boss.levelnumberElite-Level
boss.healthnumberAktuelle Gesundheit (Snapshot)
boss.maximum_healthnumberMaximale Gesundheit (Snapshot)
boss.damager_countnumberAnzahl der Verursacher (Snapshot)
boss.is_in_combatbooleanSnapshot des Kampfzustands
boss.existsbooleanOb der Elite beim Aufbau dieser Tabelle existierte
boss.current_locationlocation-TabellePosition bei der Wrapper-Erstellung (Snapshot)
Beispiel
return {
api_version = 1,
on_spawn = function(context)
context.log:info(context.boss.name .. " level " .. context.boss.level)
end
}

Boss-Methoden​


Patrouillen-Bewegungsmethoden​

Bosse mit konfigurierter Patrouille stellen patrol_pause(), patrol_resume(), walk_to(x, y, z), hold(x, y, z) und teleport(x, y, z) bereit. Koordinaten sind Versätze vom Spawnpunkt; jede Methode meldet, ob die Anfrage angenommen wurde. walk_to setzt die Route bei Ankunft fort, hold wartet auf patrol_resume(), und lange Wege nutzen den automatischen Löser.


boss:is_alive()​

Gibt true zurück, wenn die Boss-Entität gültig und nicht tot ist und der Elite noch existiert. Verwende dies anstelle des Feldes exists für Live-Prüfungen.

Beispiel
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()​

Gibt den aktuellen Live-Standort des Bosses als location-Tabelle zurück.

Beispiel
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()​

Gibt den Standort des Bosses auf Augenhöhe zurück.

Beispiel
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])​

Setzt die KI des Bosses nach denselben Regeln für eigene Änderungen wie entity:set_ai_enabled: Eine positive Dauer stellt den ersetzten Wert wieder her, und das Schließen der Power stellt jede noch aktive Änderung wieder her.

ParameterTypDefaultHinweise
enabledbooleantrue, um die KI zu aktivieren
durationnumber0Stellt den ersetzten Wert nach diesen Ticks wieder her; 0 behält die Änderung bei, bis die Power beendet wird
Beispiel
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)​

Fordert mit den oben beschriebenen nativen Standortregeln einen Bukkit-Teleport an. Gibt nil zurück, keine Erfolgsbestätigung. Die Methode verschiebt weder den konfigurierten Spawnpunkt noch setzt sie ein Patrouillenziel.

ParameterTypHinweise
locationlocation-TabelleZiel
Beispiel
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)​

Setzt die Geschwindigkeit des Bosses sofort.

ParameterTypHinweise
vectorVektor-Tabelle{ x, y, z } oder { x = 0, y = 1, z = 0 }
Beispiel
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)​

Ruft die EliteMobs-Heilung mit dem abbrechbaren EliteMobHealEvent auf. Die Gesundheit wird auf den kleineren Wert aus EliteMobs-Maximum und Basiswert des Bukkit-Maximalgesundheitsattributs begrenzt. Gibt nil zurück; ein Event-Abbruch kann die Heilung verhindern.

ParameterTypHinweise
amountnumberMenge der Heilung
Beispiel
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])​

Spielt einen Sound am Standort des Bosses ab.

ParameterTypDefaultHinweise
soundstringMinecraft-Sound-Key wie "entity.wither.spawn" oder ein Spigot-Sound-Enum-Name. Resource-Pack-Keys funktionieren ebenfalls.
volumenumber1.0Lautstärke
pitchnumber1.0Tonhöhe
Beispiel
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])​

Erzeugt Partikel am Standort des Bosses.

ParameterTypDefaultHinweise
particleOrSpecstring oder TabellePartikelname oder Spezifikations-Tabelle
countnumber1Anzahl der Partikel
Beispiel
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)​

Spielt, falls verfügbar, eine Custom-Model-Animation am Boss ab.

ParameterTypHinweise
namestringName der Animation
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:play_model_animation("slam")
end
}

boss:has_mount() / boss:get_mount()​

Prüft oder gibt die Entität zurück, auf der dieser Boss derzeit reitet. boss:get_mount() gibt nil zurück, wenn der Boss kein Reittier hat. Wird ein Reittier zurückgegeben, hat dessen Wrapper is_mount = true.

Beispiel
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()​

Setzt den Boss auf ein Reittier oder steigt ab. boss:set_mount(entity) lässt den Boss auf dem übergebenen Entitäts-Wrapper reiten und gibt true zurück, wenn Bukkit die Passagieränderung akzeptiert hat. boss:clear_mount() und boss:dismount() lassen den Boss beide sein aktuelles Fahrzeug verlassen.

Beispiel
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)​

Lässt den Boss in eine Richtung oder zu einem Standort blicken.

ParameterTypHinweise
vectorOrLocationVektor- oder location-TabelleRichtung, in die geblickt werden soll
Beispiel
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][, forceTeleport][, timeout])​

Verwendet die Wegfindung, um den Boss zu einem Standort laufen zu lassen. Funktioniert nur mit benutzerdefinierten Bossen.

ParameterTypDefaultHinweise
locationlocation-TabelleZiel
speednumber1.0Bewegungsgeschwindigkeitsmultiplikator
forceTeleportbooleanfalseDen Boss zum Ziel teleportieren, wenn timeout vor seiner Ankunft abläuft
timeoutnumber0Wartezeit bis zum Abbruch in Ticks. 0 verwendet den Standard von 100 Ticks (5 Sekunden)

Die Navigation endet auch, wenn der Boss sich dem Ziel auf weniger als einen Block nähert, nicht mehr existiert oder die Zielwelt verlässt. Eine neue Navigation beendet die zuvor auf diesem Boss laufende Navigation. Sie verwendet eine unabhängige Bukkit-Aufgabe und wird durch Pausieren oder Schließen der Lua-Instanz nicht abgebrochen. Die Methode gibt nil zurück, kein Ankunftsergebnis; das Ziel wird beim Aufruf gespeichert.

Beispiel
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)​

Verwaltet Tags am Boss.

Beispiel
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])​

Sendet eine formatierte Chat-Nachricht an alle Spieler im kugelförmigen 3D-Radius in der Welt des Bosses. Spielmodus, Sichtlinie, Kampfteilnahme und Instanzzugehörigkeit werden nicht gefiltert.

ParameterTypDefaultHinweise
messagestringNachrichtentext mit Farbcodes
rangenumber20Radius in Blöcken
Beispiel
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])​

Erzeugt eine Entität und gibt ihren nativen Wrapper zurück, oder nil bei nicht auflösbarer Position oder unbekanntem Entitätstyp. Erkannte, aber nicht erzeugbare Typen können weiterhin fehlschlagen. Normale Bukkit-Projektile starten beim Boss, sofern nicht spawn_at_origin = true gesetzt ist; der angegebene Ursprung bestimmt trotzdem die Richtung zum Ziel. Beide Positionen müssen in derselben Welt liegen, da der Helfer dies nicht prüft. Andere Entitätstypen erscheinen am angegebenen Ursprung und erhalten den passenden lebenden oder nicht lebenden Wrapper.

ParameterTypDefaultHinweise
entityTypestringEntitätstyp (z. B. "FIREBALL", "ARROW")
originlocation-TabelleStartposition
destinationlocation-TabelleZielposition
speednumber1.0Projektilgeschwindigkeit
optionsTabelle{}Siehe Optionen unten

Options-Tabelle:

KeyTypHinweise
durationnumberPositive Werte planen eine unabhängige Entfernung nach diesen Ticks; nichtpositive Werte fügen keinen Timer hinzu
max_ticksnumberGrenze der Landeüberwachung; standardmäßig 6000
custom_damagenumberMetadaten für benutzerdefinierten Projektilschaden, kein garantierter Gesundheitsverlust
detonation_powerstringPower-Dateiname als Metadatum für explosive Projektile, keine numerische Explosionsstärke
yieldnumberExplosionsstärke (Fireball)
persistentbooleanSetzt bei Angabe die Bukkit-Persistenz; überschreibt weder Dauer noch Kollision oder Entfernung durch den Besitzer
effectstringEntityEffect-Name, der beim Spawn abgespielt wird
incendiarybooleanOb die Explosion Brände auslöst
gravitybooleanOb das Projektil Schwerkraft hat
glowingbooleanLeuchteffekt
invulnerablebooleanOb das Projektil unverwundbar ist
trackbooleanStandard true: registriert das Projektil bei EliteMobs; bewirkt keine Zielverfolgung.
spawn_at_originbooleanStandard false: normale Projektile starten beim Boss. Mit true werden sie am angegebenen Ursprung erzeugt.
direction_onlybooleanSetzt bei Feuerbällen mit explizitem Ursprung die Richtung ohne zusätzliche Geschwindigkeitszuweisung
on_landfunctionCallback (landing_location, spawned_entity) bei Bodenkontakt, Ungültigkeit oder Überschreiten von max_ticks; nicht nur bei einem Aufprall

direction_only betrifft Feuerbälle, die ausdrücklich am angegebenen Ursprung erzeugt werden. Es überspringt die zusätzliche Geschwindigkeitszuweisung nach dem Setzen der Richtung. Das Ziel bestimmt weiterhin die Richtung. Bukkit-Projektile erhalten den Boss als Schützen. Mit track = true wird ein Projektil bei EliteMobs registriert und an den Lebenszyklus der Boss-Verstärkungen gebunden. Dies gilt nicht für andere Entitätstypen. track = false deaktiviert diese Besitzerbereinigung; plane dann eine andere Entfernung.

Die on_land-Überwachung gehört zur Lua-Instanz und endet beim Schließen. Sie ruft (landing_location, spawned_entity) einmal bei Bodenkontakt, Ungültigkeit oder überschrittenem Zähler auf, ohne die Entität selbst zu entfernen. Ein positiver duration-Timer ist unabhängig und überlebt das Schließen. Der Callback beweist daher keinen tatsächlichen Treffer.

Beispiel
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])​

Beschwört ohne Ankündigung eine Verstärkung aus einer Custom-Boss-Datei, registriert den Beschwörer und übernimmt normalisierten Kampf, wenn der beschwörende Custom Boss ihn verwendet. Die eigene Konfiguration und die Regeln für dynamische Level bestimmen das Level der Verstärkung. Eine Zone wählt einen zufälligen abgetasteten Standort oder ihren Mittelpunkt, wenn keine Standorte vorhanden sind. Ein nicht auflösbares Ergebnis verwendet den Boss-Standort. Gibt den Wrapper der lebenden Entität zurück, oder nil, wenn keine lebende Verstärkung entstand.

ParameterTypHinweise
filenamestringDateiname der Boss-Konfiguration
zoneOrLocationlocation-Tabelle oder ZoneOptionaler Spawn-Standort oder Zonendefinition. Standardmäßig der Boss-Standort.
durationnumberOptionale positive Zeit bis zur Flucht in Ticks. Standard 0 fügt keinen Timer hinzu; dies überschreibt nicht das Level.
Beispiel
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()​

Entfernt den Boss über EliteMobs mit dem Grund OTHER. boss:remove() ist ein Alias mit demselben Ablauf. Dies ist weder ein Schadenstreffer noch eine normale Anfrage nach Todesbelohnungen.

Beispiel
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)​

Gibt Player-Wrapper im kugelförmigen 3D-Radius in der Welt des Bosses zurück. Filtert weder Spielmodus noch Sichtlinie oder Instanzteilnahme und sortiert nicht nach Entfernung.

ParameterTypHinweise
rangenumberRadius in Blöcken
Beispiel
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()​

Gibt die aktuelle Größe des gespeicherten Angreiferverzeichnisses zurück. Anders als damager_count ist dies eine Live-Abfrage; sie zählt nicht nur nahe oder aktuell verbundene Kampfteilnehmer.

boss:get_nearby_elites(radius)​

Gibt bis zu 32 lebende, registrierte Elites in der Boss-Welt zurück, ohne den Boss selbst. Der Radius muss endlich, größer als 0 und höchstens 64 Blöcke sein. Die Ergebnisse sind Wrapper lebender Entitäten, nach Entfernung und bei Gleichstand nach Elite-UUID sortiert. Diese Abfrage allein bestätigt nicht, dass ein Effekt jedes Ergebnis treffen darf.


boss:get_target_player()​

Gibt das aktuelle Mob-Ziel des Bosses als Player-Wrapper zurück oder nil, wenn das Ziel kein Spieler ist oder nicht gesetzt ist.


Zonen- & Partikelmethoden​

Diese Methoden kombinieren Zonen mit Partikeleffekten. Sie benötigen eine Zonen-Tabelle als Eingabe.


boss:get_nearby_players_in_zone(zone)​

Gibt Wrapper der Spieler zurück, deren Entitäten die native Zonenform in der Boss-Welt erfüllen. Filtert weder Spielmodus noch Instanzteilnahme. Dies ist eine neue Abfrage, keine dauerhafte Überwachung.

ParameterTypHinweise
zoneZonen-TabelleEine Definition einer Zonenform

boss:spawn_particles_in_zone(zone, particle[, amount][, x][, y][, z][, speed][, coverage])​

Füllt das Innere einer Zone mit Partikeln. Die Argumente werden der Reihe nach übergeben; eine Spezifikationstabelle wird hier nicht akzeptiert.

ParameterTypStandardHinweise
zoneZonen-TabelleNative Zonenform mit kind; siehe Zonen und Ziele
particlestringName des Partikeltyps
amountnumber1Partikel pro ausgewähltem Standort
x, y, znumber0Streuung oder Richtung, wenn amount gleich 0 ist
speednumber0Partikelgeschwindigkeit
coveragenumber1.0Unabhängige Auswahlwahrscheinlichkeit pro Standort, begrenzt auf 0.01–1.0; eine nicht leere Menge liefert mindestens einen Standort

boss:spawn_particles_in_zone_border(zone, particle[, amount][, x][, y][, z][, speed][, coverage])​

Wie oben, verwendet jedoch Standorte am Rand der Zone statt im Inneren.


boss:get_particles_from_self_toward_zone(zone, particle[, speed])​

Gibt Partikelspezifikationen zurück, die an ausgewählten Zonenpositionen liegen und vom Boss weg zeigen. Erzeugt keine Partikel am Boss und animiert keine Reise von dort. Übergib das Ergebnis an boss:spawn_particles_with_vector(...).

ParameterTypDefaultHinweise
zoneZonen-TabelleZielzone
particlestringName des Partikeltyps
speednumber0.1In jede Spezifikation geschriebene Partikelgeschwindigkeit

Jeder Eintrag hat die Form { location = ..., particle = ..., amount = 0, x/y/z = <unit direction>, speed = ... }. Jede Zonenposition hat eine Auswahlwahrscheinlichkeit von 20 %, wobei aus einer nicht leeren Menge mindestens eine gewählt wird. Danach werden Positionen übersprungen, die mit der Boss-Position identisch sind. Das tatsächliche Richtungsverhalten hängt vom Partikeltyp ab.


boss:get_particles_toward_self(zone, particle, speed)​

Dasselbe mit umgekehrter Richtung; jedes Partikel zeigt von seiner Zonenposition zum Boss. Gibt ebenfalls das Array zurück, statt Partikel zu erzeugen.

ParameterTypDefaultHinweise
zoneZonen-TabelleQuellzone
particlestringName des Partikeltyps
speednumberEinen expliziten Wert wie 0.1 übergeben; sonst wird der Partikelname als Zahl gelesen und der Aufruf schlägt fehl.

boss:spawn_particles_with_vector(particles)​

Erzeugt ein Array gerichteter Partikel, jeweils mit eigener Position und eigenem Geschwindigkeitsvektor.

ParameterTypHinweise
particlesArray von TabellenJeder Eintrag definiert ein Partikel mit Position und Richtung

Ender-Dragon-Methoden​

Diese Methoden gelten nur, wenn die Boss-Entität ein Ender Dragon ist.


boss:get_ender_dragon_phase()​

Gibt den aktuellen EnderDragon.Phase-Namen als String zurück oder nil, wenn der Boss kein Ender Dragon ist.


boss:set_ender_dragon_phase(phase)​

Setzt die Phase des Ender Dragons.

ParameterTypHinweise
phasestringEnderDragon.Phase-Name (z. B. "CIRCLING", "CHARGE_PLAYER")

Methoden zur Unterstützung spezieller Kräfte​

Diese Methoden unterstützen integrierte EliteMobs-Kraftmechaniken aus Lua-Scripts.


boss:start_tracking_fireball_system(speed?)​

Startet für diese Power einen Controller auf einem Monster-Boss. Bei seinem ersten Lauf im nächsten Tick und danach alle 8 Sekunden startet er zielverfolgende Feuerbälle auf Survival- und Adventure-Spieler im Umkreis von 20 Blöcken auf jeder Achse, solange das Monster ein Ziel hat. Ein Lauf ohne Ziel stoppt den Controller, auch der erste Lauf; ein neuer Aufruf kann ihn erneut starten. Wiederholte Aufrufe während des Betriebs ändern die Geschwindigkeit nicht. Der Controller gehört zum Script der Power: Pausieren des Scripts pausiert ihn, Schließen des Scripts stoppt ihn. Startet der Aufruf einen Controller, muss die Geschwindigkeit endlich und positiv sein, sonst löst der Aufruf einen Fehler aus.

Die Feuerbälle haben Explosionsstärke 3 und sind brandstiftend. Die Verfolgungsaufgabe jedes Feuerballs ist unabhängig vom Script. Sie endet nach ungefähr 3 Minuten oder bei ungültigem Kontext, entfernt aber den Feuerball nicht selbst. Ein nicht abgebrochener Treffer gegen einen registrierten Feuerball wechselt dessen Verfolgung zwischen Spieler und Beschwörer.

ParameterTypDefaultHinweise
speednumber0.5Feuerball-Geschwindigkeit; muss endlich und positiv sein

boss:handle_spirit_walk_damage(cause)​

Übergibt eine Schadensursache an den Spirit-Walk-Helfer. Feuer, Feuerticks, Gift, Wither, Dornen und Flächenangriffe erhöhen dessen Zähler nicht. Ertrinken und Ersticken starten sofort eine Flucht; andere akzeptierte Ursachen lösen sie bei jedem neunten Treffer aus. Der Helfer sucht ein nahes gültiges Ziel und animiert die Bewegung dorthin mit vorübergehender Unverwundbarkeit. Er bricht das übergebene Schadensevent nicht ab und garantiert keine Position hinter dem Angreifer.

ParameterTypHinweise
causestringBukkit-DamageCause-Name (z. B. "ENTITY_ATTACK", "PROJECTILE")

boss:shield_wall_is_active()​

Gibt das Aktivitätsflag des Schild-Controllers zurück. Dies garantiert keine positive Schildreserve in einer bestimmten Richtung.


boss:initialize_shield_wall(openingDirection?)​

Initialisiert richtungsabhängige Schildreserven und Anzeigen, sofern noch keine Wand aktiv ist. Jede geschützte Richtung beginnt mit Gesundheit in Höhe des Boss-Levels. Das Argument wählt die ungeschützte Öffnung, keine Ladungszahl. Die Lua-Methode gibt nil zurück und installiert keinen Handler für Schadensevents.

ParameterTypDefaultHinweise
openingDirectionnumber11 = Norden, 2 = Osten, 3 = Süden, 4 = Westen; andere Ganzzahlen schützen alle vier Seiten

boss:shield_wall_absorb_damage(player, damage)​

Prüft die Position des Angreifers relativ zum Boss und zieht den angegebenen Schaden von der Schildreserve dieser Richtung ab. Gibt true zurück, wenn die Reserve vor dem Abzug positiv war, auch wenn der Treffer sie übersteigt. Fehlende Spieler oder Zustände, andere Welten sowie offene oder erschöpfte Richtungen ergeben false. Die Methode bricht das Schadensevent nicht ab. Bei true muss dein Schadens-Hook context.event.cancel_event() aufrufen, um den Treffer zu blockieren. Übergib eine nichtnegative Schadensmenge.

ParameterTypHinweise
playerPlayer-WrapperDer angreifende Spieler
damagenumberZu absorbierende Schadensmenge

boss:deactivate_shield_wall()​

Stoppt die unabhängige Anzeigeaufgabe der Wand und entfernt ihren Zustand sowie die Schild-Rüstungsständer. Das Schließen der Lua-Instanz ruft diese Methode nicht auf; deaktiviere die Wand ausdrücklich, wenn die Mechanik endet.


boss:start_zombie_necronomicon(target, chant)​

Startet den Necronomicon-Controller mit einem lebenden Ziel und einem durchlaufenden Beschwörungstext. Das zweite Argument ist Anzeigetext, kein Boss-Dateiname. Verwendet die festen Dateien necronomicon_zombie.yml mit 80 % und necronomicon_skeleton.yml mit 20 % Wahrscheinlichkeit auf dem Level des Beschwörers, eine Beschwörung alle 60 Ticks. Eine neue Aktivierung wird nur bei höchstens neun registrierten Verstärkungen und ohne aktiven Controller angenommen. Der laufende Controller füllt bis auf elf auf, aktiviert bei voller Gruppe die KI und beschwört weiter, wenn die Zahl sinkt.

Während des Beschwörens wird die Boss-KI deaktiviert und der Anzeigename geändert; Warnanzeigen beachten die Einstellung für Warneffekte. Das Ziel muss gültig, in derselben Welt und innerhalb von 30 Blöcken bleiben. Ungültiger Kontext oder Besitzerentfernung stoppt die Controller, stellt die Darstellung wieder her und entfernt ihre Verstärkungen. Diese Bukkit-Aufgaben sind unabhängig; das Schließen von Lua allein beendet sie nicht. Die Methode gibt nil zurück.

ParameterTypHinweise
targetEntitäts-WrapperZielentität für das Necronomicon
chantstringDurchlaufender Anzeigetext; leerer Text verwendet den Boss-Namen, kurzer Text wird aufgefüllt

context.players​

Helfer für Spielerabfragen, die sich am Boss orientieren. Verwende diese, um Spieler zu finden, ohne einen bestimmten Spieler aus dem Event zu benötigen.

Diese Abfragen filtern weder Spielmodus, Sichtlinie, Überleben, Kampfteilnahme noch Instanzzugehörigkeit und sortieren nicht nach Entfernung. current_target() bevorzugt den Event-Akteur; context.player bevorzugt dagegen das direkte Ziel. Ein frischer geplanter Kontext hat keinen Event-Akteur und verwendet deshalb das aktuelle Mob-Ziel.

MethodeGibt zurückHinweise
players:current_target()Player-Wrapper oder nilDer Event-Spieler oder das Mob-Ziel des Bosses, sofern es ein Spieler ist
players:nearby_players(radius)Array von Player-WrappernAlle Spieler innerhalb des Radius um den Boss
players:all_players_in_world()Array von Player-WrappernAlle Spieler in der Welt des Bosses
Beispiel
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
}
Beispiel
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​

Allgemeine Helfer für Entitätsabfragen, die sich am Boss orientieren.

MethodeGibt zurückHinweise
entities:get_nearby_entities(radius[, filter])Array von Entitäts-WrappernEntitäten in der Nähe rund um den Boss
entities:get_entities_in_box(center, halfX, halfY, halfZ[, filter])Array von Entitäts-WrappernLebende Entitäten mit Fußposition innerhalb der einschließlich geprüften Boxgrenzen in der Welt des Mittelpunkts; keine Bounding-Box-Überschneidungsprüfung
entities:get_all_entities([filter])Array von Entitäts-WrappernAlle passenden Entitäten in der Boss-Welt
entities:get_direct_target_entity()Entitäts-Wrapper oder nilDirektes Ziel für das aktuelle Event
entities:get_boss_spawn_location()location-TabelleDer ursprüngliche Spawn-Standort des Bosses

Gültige Filter: living (Standard), player / players, elite / elites, mob / mobs, all / entities

Nur get_nearby_entities berücksichtigt all / entities. Dies schließt nicht lebende Entitäten wie fallengelassene Items und Projektile ein, die als leichtere Referenz-Wrapper zurückgegeben werden. Lebende Ergebnisse behalten ihre vollständigen Wrapper. Dieser Filter sucht in einer achsenparallelen Box mit dem angegebenen Radius auf jeder Achse; die Filter für lebende Entitäten verwenden kugelförmige Entfernung. In anderen Abfragen fällt all / entities auf living zurück. Der Boss selbst ist immer ausgeschlossen.

Filter ignorieren Groß- und Kleinschreibung; unbekannte Filter verwenden ebenfalls living. mob meint jede lebende Entität außer Spielern, nicht nur feindliche Monster. Die Abfragen haben keinen automatischen Instanzteilnehmerfilter, keine Ergebnisgrenze und keine Entfernungssortierung. Breite Abfragen durchlaufen die geladenen lebenden Entitäten der Welt; verwende einen begrenzten Radius und vermeide unnötige Wiederholungen. get_direct_target_entity() verwendet das direkte Event-Ziel und kann nil sein; es greift nicht auf das aktuelle Kampfziel des Mobs zurück.

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

Nächste Schritte​