Skip to main content

Lua API Reference

Complete method reference for the Lua scripting API. All methods are called via context.table:method() syntax.

Global methods (marked GLOBAL) come from Magmacore, the shared core library. They apply to FreeMinecraftModels scripts and other MagmaCore ScriptInstance consumers. EliteMobs boss powers reuse the same Lua sandbox but expose boss-specific context tables and method names; EliteMobs NPC scripts run on the same MagmaCore runtime and receive the full shared context plus the NPC-only context.npc table. See the EliteMobs sections below and NPC Scripts for those variants.

EliteMobs methods (marked ELITEMOBS) are specific to EliteMobs boss power scripts and NPC scripts.

FMM methods (marked FMM) are specific to FreeMinecraftModels item and prop scripts.

Where a method requires a Bukkit enum (Sound, Particle, Material, etc.), see the Spigot Javadocs for valid values. Enum names are passed as uppercase strings (e.g., "DIAMOND_SWORD", "ENTITY_ARROW_SHOOT").


Entity Table GLOBAL

Base fields present on all entity tables — players, mobs, props, anything.

Properties

FieldTypeDescription
uuidstringEntity UUID
entity_typestringEntity type (lowercase)
is_validboolEntity still exists in the world
is_deadboolEntity is dead
is_playerboolIs a player
is_hostileboolIs a Monster
is_passiveboolIs an Animal
current_locationlocationEntity position (x, y, z, yaw, pitch, world)
worldstringWorld name

Plugin-specific enrichers may add extra top-level fields when the relevant plugin is installed. See the bridge sections below for EliteMobs and FreeMinecraftModels fields.

Methods

MethodArgsReturnsDescription
teleport(location)location tablenilTeleport entity
remove()nilRemove entity from world
set_silent(enabled)boolnilSet silent
set_invulnerable(enabled)boolnilSet invulnerable
set_gravity(enabled)boolnilSet gravity
set_glowing(enabled)boolnilSet glowing

Bridge: entity.elite

Added by EliteMobs' entity enricher when EliteMobs is installed. The enricher adds these top-level flags:

FieldTypeDescription
is_eliteboolIs an EliteMobs entity
is_custom_bossboolIs an EliteMobs custom boss
is_significant_bossboolCustom boss with health multiplier over 1 (designed encounter)

entity.elite is only present when is_elite is true.

FieldTypeDescription
levelintElite mob level
namestringElite display name
healthdoubleCurrent health
max_healthdoubleMax health
is_custom_bossboolIs a custom boss (also available at top level)
health_multiplierdoubleConfig-defined health multiplier
damage_multiplierdoubleConfig-defined damage multiplier
remove()methodRemove the elite entity

Bridge: entity.model

Added by FreeMinecraftModels' entity enricher when FMM is installed. The enricher adds these top-level flags:

FieldTypeDescription
is_modeledboolHas an FMM model
is_propboolIs an FMM prop

entity.model is only present when is_modeled is true.

FieldTypeDescription
model_idstringModel blueprint name
is_dynamicboolWhether this is an FMM DynamicEntity (true) or a static prop (false)
play_animation(name, blend?, loop?)methodPlay animation. blend defaults to false, loop defaults to false
stop_animations()methodStop all animations
remove()methodRemove the modeled entity

Bridge: player permissions

Added by FreeMinecraftModels' entity enricher when FMM is installed. These fields appear only on player entity tables:

Field / MethodArgsReturnsDescription
has_permission(node)stringboolWhether the player has the given permission node
is_opboolWhether the player is a server operator

Living Entity Table GLOBAL

Extends Entity Table. Applied to all living entities (mobs and players).

Properties

FieldTypeDescription
healthdoubleCurrent health
maximum_healthdoubleMax health
namestringEntity display name
is_aliveboolEntity is not dead

Methods

MethodArgsReturnsDescription
damage(amount)doublenilDeal damage to entity
push(x, y, z)double, double, doublenilAdd velocity vector
set_facing(x, y, z)double, double, doublenilSet look direction
add_potion_effect(type, duration, amplifier)string (PotionEffectType), int, intnilApply potion effect by name
remove_potion_effect(type)string (PotionEffectType)nilRemove potion effect by name
get_scale()numberCurrent entity scale (defaults to 1.0 on servers without generic.scale attribute)
set_scale(value)doublenilSet entity scale via generic.scale attribute (no-op on servers before 1.20.5)

context.player GLOBAL

Player entity table. Inherits all Entity and Living Entity fields.

Properties

FieldTypeDescription
game_modestringsurvival, creative, adventure, spectator

Methods

MethodArgsReturnsDescription
send_message(text)stringnilSend chat message. Supports color codes
get_held_item()table or nilReturns type, amount, display_name fields, or nil if empty hand. type is an uppercase Bukkit Material name
consume_held_item(amount?)int (default 1)nilReduce held item stack by amount
has_item(material, amount?)string (Material), int (default 1)boolCheck inventory for material
get_target_entity(range?)num (default 50)entity or nilRaycast for entity player is looking at
get_eye_location()locationPlayer eye position
get_look_direction()vectorUnit direction vector
send_block_change(x, y, z, material, ticks?)int, int, int, string (Material), int (optional)boolSend fake block. Auto-resets after ticks if given
reset_block(x, y, z)int, int, intboolReset fake block to real
sleep(x, y, z)num, num, numnilBed sleep animation at location
wake_up()nilWake from sleep
show_boss_bar(text, color?, progress, ticks?)string, string (BarColor, default WHITE), num, int (optional)nilDisplay boss bar. Auto-hides after ticks. Supports color codes
hide_boss_bar()nilRemove boss bar
show_action_bar(text, ticks?)string, int (optional)nilShow action bar. Repeats if ticks greater than 0. Supports color codes
show_title(title, subtitle?, fadeIn, stay, fadeOut)string, string (default empty), int, int, intnilShow title screen. Supports color codes

context.world GLOBAL

World operations for FreeMinecraftModels scripts and other Magmacore-backed ScriptInstance runtimes. EliteMobs boss powers start from this same base table and layer the EliteMobs context.world additions and overrides listed below.

context.world methods come in two interchangeable forms: coordinate-style (x, y, z) and location-table-style (the *_at_location variants). Both forms are available on the generic surfaces, and EliteMobs boss powers keep the shared base methods while adding boss-specific location-table helpers.

Properties

FieldTypeDescription
namestringWorld name

Methods

MethodArgsReturnsDescription
get_block_at(x, y, z)int, int, intstringMaterial name (lowercase). Returns "air" if the chunk is unloaded
set_block_at(x, y, z, material)int, int, int, string (Material)boolQueue block placement if material is valid; unloaded chunks are skipped
get_highest_block_y(x, z)int, intintY of highest non-air block
spawn_particle(particle, x, y, z, count?, dx?, dy?, dz?, speed?)string (Particle), num, num, num, int?=1, num?=0, num?=0, num?=0, num?=0nilSpawn particle effect
play_sound(sound, x, y, z, volume?, pitch?)string (Sound), num, num, num, float?=1, float?=1nilPlay sound
strike_lightning(x, y, z)num, num, numnilStrike lightning
get_time()intWorld time in ticks
set_time(ticks)longnilSet world time
get_nearby_entities(x, y, z, radius)num, num, num, numtableArray of entity tables
get_nearby_players(x, y, z, radius)num, num, num, numtableArray of player entity tables
spawn_entity(type, x, y, z)string (EntityType), num, num, numentity or nilSpawn vanilla entity; returns nil if the entity type is invalid
raycast(fx, fy, fz, dx, dy, dz, max?)num, num, num, num, num, num, num?=50tableReturns hit_entity, hit_location, hit_block fields
place_temporary_block(x, y, z, material, ticks?, require_air?)int, int, int, string (Material), int?=0, bool?=falseboolQueue block replacement that auto-reverts after ticks. Returns false if material is invalid or the chunk is unloaded
drop_item(x, y, z, material, amount?)num, num, num, string (Material), int?=1entity or nilDrop item entity naturally at location; returns nil if material is invalid
spawn_firework(x, y, z, colors, type?, power?)num, num, num, table, string (FireworkEffect.Type)?=BALL, int?=1nilSpawn firework
strike_lightning_at_location(loc)locationnilStrike lightning
play_sound_at_location(loc, sound, volume?, pitch?)location, string (Sound), float?=1, float?=1nilPlay sound
spawn_particle_at_location(loc, particle, count?, dx?, dy?, dz?, speed?)location, string (Particle), int?=1, num?=0, num?=0, num?=0, num?=0nilSpawn particle effect
get_block_at_location(loc)locationstringMaterial name (lowercase). Returns "air" if the chunk is unloaded
set_block_at_location(loc, material)location, string (Material)boolQueue block placement if material is valid; unloaded chunks are skipped
place_temporary_block_at_location(loc, material, ticks?, require_air?)location, string (Material), int?=0, bool?=falseboolQueue block replacement that auto-reverts after ticks. Returns false if material is invalid or the chunk is unloaded
get_highest_block_y_at_location(loc)locationint or nilY of highest non-air block

em helpers GLOBAL

Global helper constructors exposed on the em table in all MagmaCore Lua runtimes.

Constructors

MethodArgsReturnsDescription
em.create_location(x, y, z, world?, yaw?, pitch?)num, num, num, string?, num?, num?locationLocation table with x, y, z, optional world, yaw, pitch, and an in-place add(dx, dy, dz) method
em.create_vector(x, y, z)num, num, numvectorVector table with x, y, z

Zone Builders

Zone builders return plain zone definition tables. Spheres, domes, cylinders, and cuboids include :set_center(location). Cones and ray zones include :set_origin(location) and :set_destination(location).

MethodArgsReturnsDescription
em.zone.create_sphere_zone(radius)numzone{ kind = "sphere", radius = ... }
em.zone.create_dome_zone(radius)numzone{ kind = "dome", radius = ... }
em.zone.create_cylinder_zone(radius, height)num, numzone{ kind = "cylinder", radius = ..., height = ... }
em.zone.create_cuboid_zone(x, y, z)num, num, numzoneCuboid half-extents
em.zone.create_cone_zone(length, radius)num, numzoneCone definition with origin/destination setters
em.zone.create_static_ray_zone(length, thickness)num, numzoneStatic ray definition
em.zone.create_rotating_ray_zone(length, point_radius, animation_duration)num, num, numzoneRotating ray definition
em.zone.create_translating_ray_zone(length, point_radius, animation_duration)num, num, numzoneTranslating ray definition

context.boss ELITEMOBS

Boss entity table for EliteMobs Lua power scripts. Inherits all EliteMobs Living Entity methods. Properties refresh via dedicated getters.

Properties

FieldTypeDescription
namestringBoss display name
uuidstringElite entity UUID
healthdoubleCurrent health (snapshot)
maximum_healthdoubleMax health (snapshot)
current_locationlocationBoss position (snapshot)
levelintBoss level
damager_countintNumber of players who damaged this boss
is_in_combatboolBoss is in combat
existsboolBoss entity exists

Methods

MethodArgsReturnsDescription
is_alive()boolWhether boss entity is alive (live check)
get_health()doubleCurrent health (live)
get_maximum_health()doubleMax health (live)
get_location()locationCurrent position (live)
restore_health(amount)doublenilHeal the boss
despawn()nilRemove boss entity
get_damager_count()intLive damager count
add_tag(tag, ticks?)string, int?=0nilAdd tag, auto-remove after ticks if set
remove_tag(tag)stringnilRemove tag
has_tag(tag)stringboolCheck tag
reset_custom_name()nilReset name to config default
play_sound_at_self(sound, volume?, pitch?)string (Minecraft sound key, e.g. "entity.wither.spawn"), float?=1, float?=1nilPlay sound at boss
play_sound_at_entity(sound, volume?, pitch?)string (Minecraft sound key, e.g. "entity.wither.spawn"), float?=1, float?=1nilPlay sound at boss (alias)
spawn_particle_at_self(particle, count?)string (Particle) or table, int?=1nilSpawn particle at boss
play_model_animation(name)stringnilPlay FMM model animation (requires FMM model)
has_mount()-boolWhether this boss is riding a mount entity
get_mount()-entity or nilCurrent mount entity reference, marked with is_mount = true
set_mount(entity)entity tableboolMakes the boss ride the given entity
clear_mount()-boolMakes the boss leave its current vehicle
dismount()-boolAlias for clear_mount()
navigate_to_location(location, speed?, force?, timeout?)location, double?=1, bool?=false, int?=0nilPathfind to location
send_message(text, range?)string, double?=20nilSend message to nearby players. Supports color codes
get_nearby_players(range)doubletableArray of player tables within range
get_target_player()player or nilCurrent mob target if it's a player
get_nearby_players_in_zone(zone)zone tabletablePlayers inside the zone shape
get_ender_dragon_phase()string or nilEnderDragon.Phase name
set_ender_dragon_phase(phase)string (EnderDragon.Phase)nilSet ender dragon phase
summon_reinforcement(file, zone?, level?)string, zone or nil, int?=0entity or nilSpawn reinforcement boss
summon_projectile(type, origin, dest, speed?, options?)string (EntityType), location, location, double?=1, tableentity or nilSpawn tracked projectile; returns nil if the type or locations are invalid

summon_projectile options

OptionTypeDefaultDescription
custom_damagenumberOverride projectile damage
detonation_powerstringExplosive power level
yieldnumberFireball yield
incendiarybooltrueFireball sets fire
gravityboolEnable gravity
glowingboolfalseSet glowing
invulnerableboolfalseSet invulnerable
persistentbooltrueSet persistent
durationint0Auto-remove after ticks
effectstringEntityEffect to play on spawn
spawn_at_originboolfalseSpawn at origin instead of launching from boss
direction_onlyboolfalseSet direction without velocity (fireballs)
trackbooltrueRegister as elite projectile
on_landfunctionCallback when projectile lands: function(location, entity)
max_ticksint6000Max ticks before forced landing callback

Zone/Particle Methods

MethodArgsReturnsDescription
spawn_particles_in_zone(zone, particle, ...)zone, particle spec, coverage?=1.0nilFill zone with particles
spawn_particles_in_zone_border(zone, particle, ...)zone, particle spec, coverage?=1.0nilOutline zone with particles
get_particles_from_self_toward_zone(zone, particle, speed?)zone, string, double?=0.1tableDirectional particles from boss to zone
get_particles_toward_self(zone, particle, speed?)zone, string, double?=0.1tableDirectional particles from zone to boss
spawn_particles_with_vector(particles)tablenilSpawn directional particle array

Special Power Support

MethodArgsReturnsDescription
start_tracking_fireball_system(speed?)double?=0.5nilStart tracking fireball AI
handle_spirit_walk_damage(cause)string (DamageCause)nilHandle spirit walk damage by cause
shield_wall_is_active()boolWhether shield wall is active
initialize_shield_wall(charges?)int?=1nilActivate shield wall
shield_wall_absorb_damage(player, damage)entity table, doubleboolAttempt to absorb damage
deactivate_shield_wall()nilDeactivate shield wall
start_zombie_necronomicon(target, file)entity table, stringnilStart necronomicon on target

context.npc ELITEMOBS NPC

NPC table for EliteMobs NPC Lua scripts. NPC scripts live in plugins/EliteMobs/npc_scripts/ and attach through an NPC config scripts: list. NPC scripts run on the same MagmaCore runtime as every other surface and receive the full shared context — context.world, context.zones, context.scheduler, context.cooldowns, context.log, context.event, context.player, context.state — plus the NPC-only context.npc table documented here.

Properties

FieldTypeDescription
namestringNPC display name
filenamestringNPC config filename
uuidstringRuntime NPC UUID
activation_radiusdoubleConfigured activation radius
current_locationlocationSnapshot location when the NPC entity exists
entity_typestringBukkit entity type when the NPC entity exists

Methods

MethodArgsReturnsDescription
is_valid()-boolWhether the NPC backing entity is still valid
get_location()-locationCurrent NPC location, or spawn fallback
get_eye_location()-locationCurrent eye location, or spawn fallback
get_activation_radius()-doubleCurrent configured activation radius
get_nearby_players(radius)doubletablePlayer tables near the NPC
face_direction_or_location(target)vector or locationnilFace a direction or look toward a location
say_greeting(player?)player, UUID, name, or nilnilSend a configured greeting. Defaults to the triggering player when available
say_dialog(player?)player, UUID, name, or nilnilSend configured dialog. Defaults to the triggering player when available
say_farewell(player?)player, UUID, name, or nilnilSend configured farewell text. Defaults to the triggering player when available
play_model_animation(name)stringnilPlay a custom model animation if available; safe no-op otherwise

NPC-specific hooks include on_spawn, on_remove, on_game_tick, on_npc_interact, on_npc_proximity_enter, and on_npc_proximity_leave. See EliteMobs NPC Scripts for the complete workflow and cooldown details.


EliteMobs Living Entity Table ELITEMOBS

Entity tables created inside EliteMobs power scripts (from context.boss, event data, zone callbacks, and world queries) use an extended living entity table with additional methods beyond the global Living Entity. context.boss inherits all of these.

Properties

FieldTypeDescription
namestringEntity display name
uuidstringEntity UUID
entity_typestringEntity type name
is_playerboolIs a player
is_monsterboolIs a Monster
is_eliteboolIs an EliteMobs entity
is_validboolEntity still exists
is_mountboolTrue when this entity table represents a boss mount
healthdoubleCurrent health (snapshot)
maximum_healthdoubleMax health (snapshot)
current_locationlocationEntity position (snapshot)
game_modestringGame mode (UPPERCASE in EliteMobs: SURVIVAL, CREATIVE, ADVENTURE, SPECTATOR)

Methods

MethodArgsReturnsDescription
is_alive()boolWhether entity is alive (live check)
is_ai_enabled()boolWhether AI is enabled
is_frozen()boolWhether boss is frozen (CustomBossEntity only)
is_on_ground()boolWhether entity is on the ground
is_healing()boolWhether elite is healing
get_location()locationCurrent position (live)
get_eye_location()locationEye position (live)
get_height()doubleEntity height
get_health()doubleCurrent health (live)
get_maximum_health()doubleMax health (live)
get_velocity()vectorCurrent velocity vector
deal_damage(amount)doublenilDeal generic damage
deal_custom_damage(amount)doublenilDeal custom boss attack damage from the power's boss
deal_damage_from_boss(amount)doublenilDeal damage attributed to the power's boss entity
restore_health(amount)doublenilHeal entity (uses EliteMobs heal if elite)
play_sound_at_entity(sound, volume?, pitch?)string (Minecraft sound key, e.g. "entity.ender_dragon.growl"), float?=1, float?=1nilPlay sound at entity
play_sound_at_self(sound, volume?, pitch?)string (Minecraft sound key, e.g. "entity.ender_dragon.growl"), float?=1, float?=1nilPlay sound at entity (alias)
spawn_particle_at_self(particle, count?)string (Particle) or table, int?=1nilSpawn particle at entity
spawn_particles_at_location(loc, particle, count?)location, particle spec, int?=1nilSpawn particles at location
teleport_to_location(location)locationnilTeleport entity
set_velocity_vector(vector)vectornilSet velocity
set_gravity(enabled)boolnilSet gravity
apply_push_vector(vector, additive?, delay?)vector, bool?=false, int?=1nilApply velocity after delay. additive adds to existing velocity
push_relative_to(location, force?, extraX?, extraY?, extraZ?)location, double?=1, double?=0, double?=0, double?=0nilPush entity away from location
set_custom_name(name)stringnilSet custom display name. Supports color codes
reset_custom_name()nilReset name to EliteMobs default
set_custom_name_visible(visible)boolnilToggle name visibility
set_ai_enabled(enabled, duration?)bool, int?=0nilSet AI state. Auto-reverts after duration ticks
set_awareness_enabled(enabled, duration?)bool, int?=0nilSet mob awareness. Auto-reverts after duration ticks
face_direction_or_location(target)vector or locationnilFace a direction or look toward a location
play_model_animation(name)stringnilPlay FMM model animation (requires FMM model)
is_inside_vehicle()-boolWhether the entity is riding another entity
has_vehicle()-boolWhether the entity has a vehicle
get_vehicle()-entity or nilCurrent vehicle entity reference
set_vehicle(entity)entity tableboolMakes this entity ride the given vehicle
leave_vehicle()-boolMakes this entity leave its current vehicle
has_passengers()-boolWhether this entity has passengers
get_passenger_count()-intNumber of passengers
get_passengers()-tableArray of passenger entity references
add_passenger(entity)entity tableboolAdds a passenger to this entity
remove_passenger(entity)entity tableboolRemoves a passenger from this entity
eject_passengers()-boolEjects all passengers
set_scale(scale, duration?)double, int?=0nilSet entity scale. Auto-reverts to 1.0 after duration ticks
set_invulnerable(enabled, duration?)bool, int?=0nilSet invulnerable. Auto-reverts after duration ticks
set_healing(enabled)boolnilSet elite healing state
navigate_to_location(location, speed?, force?, timeout?)location, double?=1, bool?=false, int?=0nilPathfind to location (CustomBossEntity only)
add_tag(tag, ticks?)string, int?=0nilAdd tag, auto-remove after ticks
remove_tag(tag)stringnilRemove tag
has_tag(tag)stringboolCheck tag
overlaps_box_at_location(center, halfX?, halfY?, halfZ?)location, double?=0.5, double?=halfX, double?=halfXboolWhether entity bounding box overlaps a box at location
remove_elite()nilRemove via EliteMobs removal pipeline
apply_potion_effect(type, duration, amplifier?)string (PotionEffectType), int, int?=0nilApply potion effect
set_equipment(slot, material, options?)string (EquipmentSlot), string (Material), tablenilSet equipment slot item
set_fire_ticks(ticks)intnilSet fire ticks
add_visual_freeze_ticks(ticks?)int?=1nilAdd freeze visual ticks
place_temporary_block(material, ticks?, requireAir?)string (Material), int?=0, bool?=falsenilPlace temporary block at entity location

set_equipment options

OptionTypeDefaultDescription
unbreakableboolfalseMake item unbreakable
enchantmentstableArray of {type = "ENCHANT_NAME", level = 1} tables

EliteMobs Player Methods

Players in EliteMobs scripts have all EliteMobs living entity methods plus:

MethodArgsReturnsDescription
send_message(text)stringnilSend chat message. Supports color codes
show_action_bar(text)stringnilShow action bar text. Supports color codes
show_title(title, subtitle?, fadeIn?, stay?, fadeOut?)string, string?="", int?=10, int?=40, int?=10nilShow title screen. Supports color codes
show_boss_bar(title, color?, style?, duration?)string, string (BarColor)?=WHITE, string (BarStyle)?=SOLID, int?=40nilShow boss bar. Auto-hides after duration ticks. Supports color codes
run_command(command)stringnilRun command as player

EliteMobs Entity Reference Table

Non-living entities (projectiles, falling blocks, fireworks) returned from EliteMobs spawn methods get a lightweight reference table:

Field / MethodArgsReturnsDescription
namestringEntity name
uuidstringEntity UUID
entity_typestringEntity type name
is_playerboolAlways false
is_eliteboolAlways false
is_valid()boolWhether entity is still valid (live check)
current_locationlocationPosition (snapshot)
get_location()locationCurrent position (live)
get_velocity()vectorCurrent velocity vector
is_on_ground()boolWhether entity is on the ground
teleport_to_location(location)locationnilTeleport entity
set_velocity_vector(vector)vectornilSet velocity
set_direction_vector(vector)vectornilSet direction (fireballs only)
set_yield(amount)doublenilSet fireball yield
set_gravity(enabled)boolnilSet gravity
detonate()nilDetonate firework
remove()nilRemove entity
unregister(reason?)string?=OTHERnilUnregister from EliteMobs entity tracker

context.players ELITEMOBS

Player query table available in EliteMobs power scripts. Provides helper methods to find players relative to the boss.

MethodArgsReturnsDescription
current_target()player or nilEvent actor if player, or boss's current mob target if player
nearby_players(radius)doubletableArray of player tables within radius of boss
all_players_in_world()tableArray of all player tables in the boss's world

context.entities ELITEMOBS

Entity query table available in EliteMobs power scripts. Provides helper methods to find entities relative to the boss. All queries exclude the boss itself.

MethodArgsReturnsDescription
get_nearby_entities(radius, filter?)double, string?="living"tableEntities within radius. "all"/"entities" returns every entity (including non-living); any other value returns living entities filtered by category: "player(s)", "elite(s)", "mob(s)", or default = all living
get_entities_in_box(center, halfX, halfY, halfZ, filter?)location, double, double, double, string?="living"tableLiving entities inside an axis-aligned box (same filter values as above; non-all modes only)
get_all_entities(filter?)string?="living"tableAll living entities in the boss's world (same filter values)
get_direct_target_entity()entity or nilDirect target entity from the triggering event
get_boss_spawn_location()locationThe boss's original spawn location

context.vectors ELITEMOBS

Vector math utilities available in EliteMobs power scripts.

MethodArgsReturnsDescription
get_vector_between_locations(from, to, options?)location, location, tablevectorVector from source to destination. Options can modify the result
rotate_vector(vector, pitch?, yaw?)vector, double?=0, double?=0vectorRotate vector by pitch and yaw (degrees)
normalize_vector(vector)vectorvectorNormalize to unit length

context.state GLOBAL

A plain Lua table that persists for the script instance's entire lifetime. Use it to store flags, counters, task IDs, toggle states, and any data you need to share between hooks. context.state is the script-owned persistent table; most other context tables are rebuilt or lazily recreated as needed. FMM caches context.prop per prop for performance, but its live fields such as current_location still refresh on read.

context.state.counter = (context.state.counter or 0) + 1

context.cooldowns GLOBAL

Cooldown management. Local cooldowns are per-script-instance; global cooldowns are shared across all scripts on the same entity/owner. If no key is provided, defaults to the script's filename.

MethodArgsReturnsDescription
local_ready(key?)string (optional)boolWhether the local cooldown has expired
local_remaining(key?)string (optional)intRemaining ticks on local cooldown (0 if ready)
check_local(key?, duration)string (optional), intboolIf ready, starts cooldown and returns true; otherwise false
set_local(duration, key?)long, string (optional)nilSet local cooldown for duration ticks
global_ready()boolWhether the global cooldown has expired
set_global(duration)longnilSet global cooldown for duration ticks

In EliteMobs power scripts, local cooldowns are shared across all powers on the same boss entity, and global cooldowns use the boss's built-in power cooldown system.

EliteMobs NPC scripts use the shared cooldown order check_local(key?, duration); see NPC Scripts.


context.scheduler GLOBAL

Task scheduling. All tasks are automatically cancelled when the script shuts down.

Global (Magmacore) variant

FreeMinecraftModels scripts and EliteMobs NPC scripts use this shared variant. The EliteMobs-style names below are aliases on the same scheduler, so either naming style is valid on the generic surfaces.

MethodArgsReturnsDescription
run_later(ticks, callback)int, functionintRun callback after ticks. Returns task ID
run_repeating(delay, interval, callback)int, int, functionintRun callback every interval ticks after initial delay. Returns task ID
cancel(taskId)intnilCancel a scheduled task

EliteMobs variant

MethodArgsReturnsDescription
run_after(ticks, callback)int, functionintRun callback after ticks. Returns task ID
run_every(ticks, callback)int, functionintRun callback every N ticks. Returns task ID
cancel_task(taskId)intnilCancel a scheduled task

context.log GLOBAL

Logging utilities for debugging scripts.

Global (Magmacore / FMM) variant

MethodArgsReturnsDescription
info(message)stringnilLog info message
warn(message)stringnilLog warning message
error(message)stringnilLog error/warning message

EliteMobs variant

MethodArgsReturnsDescription
info(message)stringnilLog info message
warn(message)stringnilLog warning message
debug(message)stringnilLog debug message (appears as info with debug prefix)

context.zones GLOBAL

Zone creation and monitoring for FreeMinecraftModels scripts and other Magmacore-backed ScriptInstance runtimes. EliteMobs boss powers use the EliteMobs context.zones variant below.

Global (Magmacore) variant

MethodArgsReturnsDescription
create_sphere(x, y, z, radius)num, num, num, numintCreate sphere zone, returns handle
create_cylinder(x, y, z, radius, height)num, num, num, num, numintCreate cylinder zone, returns handle
create_cuboid(x, y, z, xSize, ySize, zSize)num, num, num, num, num, numintCreate cuboid zone, returns handle
watch(handle, on_enter?, on_leave?)int, function?, function?boolEnable zone tracking. Function arguments enable on_zone_enter / on_zone_leave; function bodies are not invoked directly. Zone hooks receive context.player / context.event.player for the player that crossed the boundary
unwatch(handle)intnilStop tracking zone

EliteMobs variant

MethodArgsReturnsDescription
get_entities_in_zone(zone, options?)zone table, tabletableGet entities inside zone. Options: filter, mode
get_locations_in_zone(zone, options?)zone table, tabletableGet locations inside zone. Options: coverage, mode
zone_contains(zone, location, mode?)zone table, location, string?="full"boolWhether location is inside zone ("full" or "border")
watch_zone(zone, callbacks, options?)zone table, table, table?nilWatch zone for enter/leave. Callbacks: {on_enter = fn, on_leave = fn}. Options support filter and mode

context.event GLOBAL

Event data table for the hook that triggered the current script execution. Present during event-driven hooks and generic MagmaCore zone enter/leave hooks that provide a player actor; not present during on_game_tick, scheduled callbacks, or lifecycle hooks without a player.

Global (Magmacore) variant

Field / MethodTypeDescription
is_cancelledboolCancellation state when context was built; not refreshed after cancel() / uncancel()
cancel()methodCancel the event when the underlying Bukkit event is cancellable
uncancel()methodUn-cancel the event when the underlying Bukkit event is cancellable
playerentity tablePlayer involved in the event (if any)

Generic zone hooks populate player but are not backed by a cancellable Bukkit event, so cancel() and uncancel() are not present there.

For the EliteMobs event table (which provides damage amounts, damage causes, etc.), see EliteMobs Event Table.


context.script ELITEMOBS

Bridge to the EliteMobs Elite Script system. Lets Lua powers use the YAML-based targeting, zone, and relative vector systems via Lua tables with the same field names as Elite Script YAML configs.

Methods

MethodArgsReturnsDescription
target(spec)tabletarget handleCreate a target handle from an Elite Script target spec table
zone(spec)tablezone handleCreate a zone handle from an Elite Script zone spec table
relative_vector(spec, location?, zone?)table, location, zone handlevector handleCreate a relative vector from an Elite Script vector spec
damage(target, amount?, multiplier?)target handle, double?=0, double?=1nilDeal damage to all entities in target
push(target, vector, additive?)target handle, vector or vector handle, bool?=falsenilPush target entities with velocity
set_facing(target, vector)target handle, vector or vector handlenilSet target entities facing direction
spawn_particles(target, particles)target handle, table or stringnilSpawn particles at target locations

Target Handle

Returned by context.script:target(spec). The spec table uses the same keys as Elite Script YAML target configs (e.g., {targetType = "NEARBY_PLAYERS", range = 20}).

MethodArgsReturnsDescription
entities()tableArray of entity tables at target
locations()tableArray of location tables at target
first_entity()entity or nilFirst entity at target
first_location()location or nilFirst location at target

Zone Handle

Returned by context.script:zone(spec). The spec table uses the same keys as Elite Script YAML zone configs (e.g., {shape = "SPHERE", radius = 5, target = {targetType = "SELF"}}).

MethodArgsReturnsDescription
full_target(coverage?)numbertarget handleTarget handle for zone interior locations
border_target(coverage?)numbertarget handleTarget handle for zone border locations
full_locations(coverage?)numbertableArray of interior locations
border_locations(coverage?)numbertableArray of border locations
full_entities()tableEntities inside zone
border_entities()tableEntities on zone border
contains(location, mode?)location, string?="full"boolWhether location is in zone
watch(callbacks, mode?)table, string?="full"intWatch for enter/leave. Returns task ID

Vector Handle

Returned by context.script:relative_vector(spec). The spec table uses the same keys as Elite Script YAML relative vector configs.

MethodArgsReturnsDescription
resolve()vectorCompute the vector for the current context

context.world (EliteMobs) ELITEMOBS

Boss-specific world table for EliteMobs power scripts. Boss powers start with the generic MagmaCore world table, so coordinate helpers such as get_block_at(...), set_block_at(...), and spawn_particle(...) remain available. The methods below are EliteMobs additions or boss-specific overrides, mainly location-table forms and boss helpers.

Block Queries

MethodArgsReturnsDescription
get_block_type_at_location(loc)locationstring or nilMaterial name
get_highest_block_y_at_location(loc)locationint or nilHighest block Y
get_blast_resistance_at_location(loc)locationdoubleBlast resistance value
is_air_at_location(loc)locationboolBlock is air
is_passable_at_location(loc)locationboolBlock is passable
is_passthrough_at_location(loc)locationboolBlock is not solid
is_on_floor_at_location(loc)locationboolAir with solid block below
is_standing_on_material(loc, material)location, string (Material)boolBlock below matches material

Block Manipulation

MethodArgsReturnsDescription
set_block_at_location(loc, material, requireAir?)location, string (Material), bool?=falsenilPlace block. If requireAir is true, only replaces air
place_temporary_block_at_location(loc, material, ticks?, requireAir?)location, string, int?=0, bool?=falsenilPlace block, auto-remove after ticks. If requireAir is true, only replaces air

Spawning

MethodArgsReturnsDescription
spawn_boss_at_location(file, loc?, level?)string, location?=boss loc, int?=boss levelentity or nilSpawn custom boss
spawn_custom_boss_at_location(file, loc, options?)string, location, tableentity or nilSpawn boss with options (level, silent, add_as_reinforcement, velocity)
spawn_entity_at_location(type, loc, options?)string (EntityType), location, tableentity or nilSpawn vanilla entity with options (velocity, duration, effect, on_land, max_ticks)
spawn_falling_block_at_location(loc, material, options?)location, string (Material), tableentity or nilSpawn falling block (drop_item, hurt_entities, velocity, on_land)
spawn_reinforcement_at_location(file, loc, level?, velocity?)string, location, int?=0, vectorentity or nilSpawn reinforcement tied to boss
spawn_fireworks_at_location(loc, config)location, tableentity or nilSpawn firework
spawn_splash_potion_at_location(loc, config)location, tableentity or nilSpawn splash potion

Effects and Utility

MethodArgsReturnsDescription
play_sound_at_location(loc, sound, volume?, pitch?)location, string (Minecraft sound key, e.g. "entity.blaze.shoot"), float?=1, float?=1nilPlay sound
spawn_particle_at_location(loc, particle, count?)location, string (Particle) or table, int?=1nilSpawn particles
strike_lightning_at_location(loc)locationnilStrike lightning (bypasses EM protection)
run_empowered_lightning_task_at_location(loc)locationnilEmpowered lightning effect
generate_fake_explosion(locations, center?)table of locations, locationnilVisual explosion without damage
spawn_fake_gold_nugget_at_location(loc, velocity, gravity?)location, vector, bool?=falsefake projectile or nilSpawn visual gold nugget projectile
run_fake_gold_nugget_damage(projectiles)tablenilRun damage check on fake projectiles
set_world_time(time) or (loc, time)long, or location + longnilSet world time
set_world_weather(weather, duration?) or (loc, weather, duration?)string (CLEAR, RAIN, PRECIPITATION, THUNDER), int?=6000nilSet weather
run_console_command(command)stringnilExecute console command
generate_player_loot(times?)int?=1nilRun this many player-loot rolls for damagers
drop_bonus_coins(multiplier?)double?=2nilDrop bonus coins at boss

context.settings (EliteMobs)

MethodArgsReturnsDescription
warning_visual_effects_enabled()boolWhether warning VFX are enabled in config

EliteMobs Event Table

The context.event table is passed to damage and spawn hooks. Fields vary by event type.

Field / MethodTypePresent WhenDescription
damage_amountdoubleDamage eventsRaw damage amount
damage_causestringDamage eventsDamageCause name
damagerentity tableDamage-by-entity eventsEntity that dealt the damage
projectileentity tableProjectile damage eventsProjectile that dealt the damage
spawn_reasonstringSpawn eventSpawn reason name
entityentity tableDeath/zone eventsRelevant entity
cancel_event()methodMost eventsCancel the event
set_damage_amount(amount)method (double)Damage eventsOverride damage amount
multiply_damage_amount(multiplier)method (double)Damage eventsMultiply current damage

context.item FMM

Accessed in FMM item scripts. Resolves the specific scripted item from the player's equipped slots via PDC tag.

Read methods inspect the currently equipped matching item when called. Write methods queue their mutation onto the Bukkit main thread and return nil.

Properties

FieldTypeDescription
idstringItem's script identifier

Methods

MethodArgsReturnsDescription
material()stringMaterial name
get_amount()intStack size
set_amount(n)intnilQueue setting stack size
consume(n?)int?=1nilQueue decrement by n, remove if zero
get_uses()intPDC-stored use counter
set_uses(n)intnilQueue setting PDC use counter
get_durability()table or nilReturns current and max fields, or nil if no durability bar
get_durability_percentage()number or nil0.0--1.0 remaining fraction, or nil
use_durability(amount, can_break?)int, bool?=falsenilQueue reducing durability by flat amount. When false, clamps to 1 remaining
use_durability_percentage(fraction, can_break?)number, bool?=falsenilQueue reducing durability by fraction of max (0.0--1.0)
get_name()string or nilDisplay name
set_name(s)stringnilQueue setting display name. Supports color codes
get_lore()tableArray of lore strings
set_lore(table)tablenilQueue setting lore from array of strings

context.prop FMM

Accessed in FMM prop scripts. Inherits all Entity fields from the backing armor stand.

Properties

FieldTypeDescription
model_idstringBlueprint model name
current_locationlocationProp's current position

Methods

MethodArgsReturnsDescription
play_animation(name, blend?, loop?)string, bool?=true, bool?=trueboolPlay named animation
stop_animation()nilStop all current animations
hurt_visual()nilRed tint flash, no damage
pickup()nilQueue removing prop and dropping placement item
has_mount_points()boolWhether prop has mount point bones
mount(player)entity tableboolQueue mount check; true means basic references were valid
dismount(player)entity tableboolQueue dismount check; true means basic references were valid
get_passengers()tableArray of entity tables for mounted players
spawn_elitemobs_boss(file, x, y, z)string, num, num, numentity or nilSpawn EliteMobs boss (requires EliteMobs)
open_inventory(player, title, rows?)entity table, string, int?=3boolQueue opening persistent chest inventory (rows clamped 1--6). Title supports color codes
place_book(player)entity tableboolQueue storing the player's held written/writable book on prop
read_book(player)entity tableboolQueue opening the stored book for reading
take_book(player)entity tableboolQueue returning the stored book to player
has_book()boolWhether a book is stored
drop_inventory()boolQueue dropping all stored items and clearing storage
drop_book()boolQueue dropping stored book and clearing storage
is_viewing_inventory(player)entity tableboolWhether player has this prop's inventory open
set_persistent_data(key, value)string, stringboolStore string in prop's PDC
get_persistent_data(key)stringstring or nilRetrieve string from prop's PDC

Color Codes

All methods marked as supporting color codes use Magmacore's ChatColorConverter. These formats can be mixed freely in any string:

Legacy codes

Use & followed by a color/format character:

CodeColorCodeFormat
&0Black&lBold
&1Dark Blue&mStrikethrough
&2Dark Green&nUnderline
&3Dark Aqua&oItalic
&4Dark Red&rReset
&5Dark Purple
&6Gold
&7Gray
&8Dark Gray
&9Blue
&aGreen
&bAqua
&cRed
&dLight Purple
&eYellow
&fWhite

Hex colors

Exact RGB color using 6-digit hex:

&#FF5500          -- ampersand prefix
<#FF5500> -- tag syntax

Gradients

Smoothly interpolate between two or more colors across the text:

<gradient:#FF0000:#0000FF>This text fades red to blue</gradient>
<g:#FF0000:#00FF00:#0000FF>Three-color gradient</g>

The short form g works identically to gradient. You can chain as many color stops as you want.

Rainbow

Cycle through the full hue spectrum at full saturation. An optional numeric argument shifts the starting hue (phase offset):

<rainbow>Full rainbow text</rainbow>
<r:0.5>Rainbow with a shifted starting hue</r>

Common Types

location

{ x = number, y = number, z = number, yaw = number, pitch = number, world = string }

vector

{ x = number, y = number, z = number }

entity table

Any table with a uuid field. Player and entity tables from context work directly:

context.player                              -- valid entity table
context.world:get_nearby_entities(x,y,z,r) -- returns array of entity tables

Next Steps