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 Sie neu bei Lua-Powers sind, beginnen Sie zuerst mit Erste Schritte.


Entitäts-Wrapper

Wenn Sie über die Lua-API auf Entitäten zugreifen – sei es über context.boss, context.player, Abfrageergebnisse wie context.players:nearby_players() oder Event-Felder – erhalten Sie 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.

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.is_validbooleanSnapshot-Gültigkeitsflag
entity.healthnumberAktuelle Gesundheit (Snapshot)
entity.maximum_healthnumberMaximale Gesundheit (Snapshot)
entity.current_locationlocation-TabellePosition zum Zeitpunkt der Wrapper-Erstellung

Um Elite-spezifische Daten wie das Boss-Level zu lesen, verwenden Sie die Felder und Methoden von context.boss, die im Abschnitt context.boss weiter unten beschrieben werden. Um einen Elite aus einem Script zu despawnen, rufen Sie 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

Jeder Living-Entity-Wrapper unterstützt diese Methoden. Jede Methode führt einen Live-Aufruf an den Server durch.


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 die Entität. 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 die Entität.

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 einen Titel und einen optionalen Untertitel an die Entität.

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

Zeigt der Entität eine temporäre Boss-Leiste an.

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)

Teleportiert die Entität zu einem Standort.

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 nach einer kurzen Verzögerung (Standard 1 Tick) einen Geschwindigkeitsstoß an. Nützlich, um den Rückstoß zu überschreiben.

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)

Lässt die Entität in Richtung eines Richtungsvektors oder eines Standorts blicken.

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 Entität für die angegebene Dauer in Brand.

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

Fügt der Entität visuelle Freeze-Ticks hinzu (der blaue Overlay-Effekt).

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 einen Trankeffekt auf die Entität an.

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 in EliteMobs-Lua-Powers nicht verfügbar. Es existiert nur in Magmacore/FMM. Verwenden Sie als Workaround apply_potion_effect mit einer Dauer von 0, oder gestalten Sie Ihre Power so, dass Sie keine Effekte entfernen müssen.


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

Fügt der Entität Schaden zu. Es stehen drei Varianten zur Verfügung.

MethodeHinweise
deal_damage(amount)Generische Schadensquelle
deal_custom_damage(amount)Verwendet BossCustomAttackDamage des Bosses
deal_damage_from_boss(amount)Die Boss-Entität wird als Verursacher festgelegt
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)

Heilt die Entität bis zu ihrer maximalen Gesundheit.

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

Schaltet die Unverwundbarkeit der Entität um. Wird optional nach einer Dauer zurückgesetzt.

ParameterTypDefaultHinweise
enabledbooleantrue, um Unverwundbarkeit zu aktivieren
durationnumbernilAutomatisches Zurücksetzen nach so vielen 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("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])

Schaltet die KI der Entität um. Wird optional nach einer Dauer zurückgesetzt.

ParameterTypDefaultHinweise
enabledbooleantrue, um die KI zu aktivieren
durationnumbernilAutomatisches Zurücksetzen nach so vielen Ticks
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 Tags an der Entität. Tags werden von EliteMobs verfolgt und bleiben für die Lebensdauer der Entität bestehen.

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)

Lässt die Entität einen Befehl ausführen. Bei Spielern wird dieser als Spieler ausgeführt; verwenden Sie den Befehlstext ohne führenden /.

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 das Attribut generic_scale der Entität. Wird optional nach einer Dauer auf 1.0 zurückgesetzt.

ParameterTypDefaultHinweise
scalenumberSkalierungsmultiplikator
durationnumbernilAutomatisches Zurücksetzen nach so vielen Ticks
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 der Entität um.

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

Spielt einen Sound am Standort der Entität ab.

ParameterTypDefaultHinweise
soundstringMinecraft-Sound-Key (zum Beispiel "entity.ender_dragon.growl")
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 Standort der Entität.

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)

Spielt eine Custom-Model-Animation ab, sofern die Entität ein Custom Model besitzt, das dies unterstützt.

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

Living-Entity-Wrapper stellen außerdem Bukkit-Helfer für Fahrzeuge/Passagiere bereit. Diese sind nützlich für gescriptete Reittiere, temporäre Reiteffekte und um zu prüfen, ob eine Entität bereits an eine andere Entität gekoppelt ist.

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

Stößt die Entität von einem Quellstandort oder Entitäts-Wrapper weg.

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 oder setzt den benutzerdefinierten Anzeigenamen der Entität zurück. Unterstützt Farbcodes.

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

Platziert einen temporären Block am aktuellen Standort der Entität.

ParameterTypDefaultHinweise
materialstringName des Blockmaterials
durationnumber0Ticks bis zur Entfernung
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 true zurück, wenn die Entität derzeit auf festem Boden steht.


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

Schaltet die Wahrnehmung des Mobs um. Wirkt sich nur auf Mob-Entitäten aus. Wird optional nach einer Dauer zurückgesetzt.

ParameterTypDefaultHinweise
awarebooleantrue, um die Wahrnehmung zu aktivieren
durationnumbernilAutomatisches Zurücksetzen nach so vielen Ticks

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

Prüft oder schaltet den Heilungszustand an einer Elite-Entität um.


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

Gibt true zurück, wenn sich die Bounding Box der Entität mit einer achsenparallelen Box am angegebenen Standort überschneidet.

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

Setzt die Ausrüstung an der Entität.

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:is_ai_enabled()

Eine Methode, die true zurückgibt, wenn die Entität derzeit die KI aktiviert hat.

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 –, erhalten Sie einen leichteren Referenz-Wrapper. Diese werden von Methoden wie context.world:spawn_falling_block_at_location() oder context.boss:summon_projectile() zurückgegeben.

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

Methoden:

MethodeHinweise
is_valid()Live-Gültigkeitsprüfung
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()Zündet Firework-Entitäten
remove()Entfernt die Entität aus der Welt
unregister([reason])Meldet die Entität vom Entity-Tracker ab
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
)
-- 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 in Hooks, an denen ein Spieler direkt beteiligt ist (on_boss_damaged_by_player, on_player_damaged_by_boss usw.). Player-Wrapper enthalten alle oben aufgeführten gemeinsamen Entitätsfelder und -methoden sowie die folgenden Extras.

Vorsicht

context.player ist nil in Hooks, die keinen zugeordneten Spieler haben, etwa on_spawn, geplanten Callbacks und Timer-Hooks. Prüfen Sie 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_modestringName des aktuellen Spielmodus (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

Der Boss-Wrapper erbt alle oben aufgeführten gemeinsamen Entitätsmethoden (z. B. push_relative_to, apply_push_vector, set_gravity, set_scale, set_invulnerable, spawn_particle_at_self, overlaps_box_at_location usw.). Die in diesem Abschnitt dokumentierten Methoden sind entweder boss-spezifisch oder verhalten sich über die EliteEntity-Schicht anders.

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_combatbooleanKampfzustand
boss.existsbooleanOb der Elite noch existiert
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


boss:is_alive()

Gibt true zurück, wenn die Boss-Entität gültig und nicht tot ist und der Elite noch existiert. Verwenden Sie 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])

Schaltet die KI des Bosses um. Wird optional nach einer Dauer zurückgesetzt.

ParameterTypDefaultHinweise
enabledbooleantrue, um die KI zu aktivieren
durationnumbernilAutomatisches Zurücksetzen nach so vielen Ticks
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)

Teleportiert den Boss zu einem Standort.

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)

Heilt den Boss bis zu seiner maximalen Gesundheit.

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 (zum Beispiel "entity.wither.spawn")
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][, follow][, timeout])

Verwendet Pathfinding, um den Boss zu einem Standort laufen zu lassen.

ParameterTypDefaultHinweise
locationlocation-TabelleZiel
speednumber1.0Bewegungsgeschwindigkeitsmultiplikator
followbooleanfalseDem Ziel kontinuierlich folgen
timeoutnumbernilNavigation nach so vielen Ticks abbrechen
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 Chat-Nachricht an alle Spieler in der Nähe.

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

Startet eine projektilartige Entität vom Boss aus.

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

Options-Tabelle:

KeyTypHinweise
durationnumberAutomatisches Entfernen nach Ticks
max_ticksnumberMaximale Ticks, die auf das Aufschlagen überwacht werden
custom_damagenumberSchaden beim Aufprall
detonation_powerstringExplosionsstärke beim Aufprall
yieldnumberExplosionsstärke (Fireball)
persistentbooleanOb das Projektil bestehen bleibt (Standard true)
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
trackbooleanOb dem Ziel gefolgt wird
spawn_at_originbooleanAm Ursprung spawnen statt mit Versatz
direction_onlybooleanNur Richtung verwenden, Ziel ignorieren
on_landfunctionCallback (landing_location, spawned_entity)
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][, level])

Beschwört einen Reinforcement-Boss aus einer Konfigurationsdatei.

ParameterTypHinweise
filenamestringDateiname der Boss-Konfiguration
zoneOrLocationlocation-Tabelle oder ZoneOptionaler Spawn-Standort oder Zonendefinition. Standardmäßig der Boss-Standort.
levelnumberOptionales Reinforcement-Level. Standardmäßig 0, wodurch der Beschwörungs-Helfer das Level normal erbt/auflöst.
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 aus der Welt.

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 ein Array von Player-Wrappern innerhalb der Reichweite des Bosses zurück.

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 Live-Anzahl der Spieler zurück, die diesem Boss Schaden zugefügt haben. Anders als das Feld damager_count führt dies eine Live-Prüfung durch.


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 ein Array von Player-Wrappern für alle Spieler zurück, die sich derzeit innerhalb der angegebenen Zone befinden.

ParameterTypHinweise
zoneZonen-TabelleEine Definition einer Zonenform

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

Füllt das Innere einer Zone mit Partikeln.

ParameterTypHinweise
zoneZonen-TabelleZu füllende Zonenform
particlestringName des Partikeltyps
...Zusätzliche Partikelparameter
coveragenumber (optional)Faktor für die Partikeldichteabdeckung

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

Umrandet den Rand einer Zone mit Partikeln.

ParameterTypHinweise
zoneZonen-TabelleZu umrandende Zonenform
particlestringName des Partikeltyps
...Zusätzliche Partikelparameter
coveragenumber (optional)Faktor für die Partikeldichteabdeckung

boss:get_particles_from_self_toward_zone(zone, particle, speed?)

Erzeugt gerichtete Partikel, die vom Boss zu einer Zone wandern.

ParameterTypDefaultHinweise
zoneZonen-TabelleZielzone
particlestringName des Partikeltyps
speednumbernilWandergeschwindigkeit der Partikel

boss:get_particles_toward_self(zone, particle, speed?)

Erzeugt gerichtete Partikel, die von einer Zone zum Boss wandern.

ParameterTypDefaultHinweise
zoneZonen-TabelleQuellzone
particlestringName des Partikeltyps
speednumbernilWandergeschwindigkeit der Partikel

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 das Tracking-Fireball-KI-System am Boss. Der Boss startet regelmäßig Feuerbälle, die seinem Ziel folgen.

ParameterTypDefaultHinweise
speednumber0.5Feuerball-Geschwindigkeit

boss:handle_spirit_walk_damage(cause)

Behandelt das Spirit-Walk-Verhalten für die angegebene Schadensursache. Spirit Walk macht den Boss immun gegen bestimmte Schadensarten und teleportiert ihn hinter den Angreifer.

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

boss:shield_wall_is_active()

Gibt true zurück, wenn der Boss derzeit eine aktive Schildwand hat.


boss:initialize_shield_wall(charges?)

Aktiviert eine Schildwand am Boss, die eingehenden Schaden absorbieren kann.

ParameterTypDefaultHinweise
chargesnumber1Anzahl der Treffer, die das Schild absorbieren kann

boss:shield_wall_absorb_damage(player, damage)

Versucht, Schaden mit der Schildwand zu absorbieren. Gibt true zurück, wenn der Schaden absorbiert wurde, false, wenn das Schild inaktiv oder aufgebraucht ist.

ParameterTypHinweise
playerPlayer-WrapperDer angreifende Spieler
damagenumberZu absorbierende Schadensmenge

boss:deactivate_shield_wall()

Deaktiviert die Schildwand des Bosses und entfernt alle verbleibenden Ladungen.


boss:start_zombie_necronomicon(target, file)

Startet die Zombie-Necronomicon-Kraft auf einem Ziel und spawnt untote Verstärkungen aus einer Konfigurationsdatei.

ParameterTypHinweise
targetEntitäts-WrapperZielentität für das Necronomicon
filestringDateiname der Boss-Konfiguration für die beschworenen Untoten

context.players

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

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-WrappernEntitäten innerhalb einer achsenparallelen Box
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

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