Lua 腳本:列舉與值
本頁提供 EliteMobs Lua 方法所用 Spigot 值類型的文件連結。在 Lua 程式碼中,將 "FLAME"、"ZOMBIE"、"STONE" 等常數名稱作為字串傳入。請使用伺服器 API 版本支援的值。
- 拼寫必須與列舉常數名稱完全匹配
- 大小寫通常在內部標準化,但為了安全起見請匹配 Javadoc 的拼寫
- 無效值的處理方式取決於具體方法:有些會記錄警告,有些會傳回
nil或不執行任何操作,具有輸入驗證的 API 則可能引發 Lua 錯誤
列舉參考
| 列舉 | 用途 | Javadoc |
|---|---|---|
BarColor | Boss 血條顏色 | BarColor |
BarStyle | Boss 血條樣式 | BarStyle |
DamageCause | 依傷害原因篩選 | EntityDamageEvent.DamageCause |
EnderDragon.Phase | 終界龍階段控制 | EnderDragon.Phase |
EntityEffect | 實體視覺效果 | EntityEffect |
EntityType | 實體生成 | EntityType |
EquipmentSlot | 實體裝備欄位;damage_equipment 只接受 HAND、OFF_HAND、HEAD、CHEST、LEGS、FEET | EquipmentSlot |
FireworkEffect.Type | 煙火形狀 | FireworkEffect.Type |
Material | 方塊與物品 | Material |
Particle | 粒子效果 | Particle。舊名稱轉換適用於 EliteScript 粒子動作;Lua 原生粒子輔助方法要求使用目前的 API 名稱。 |
PotionEffectType | 藥水效果 | PotionEffectType |
Sound | 音效播放 | Sound |
每個 Lua 音效輔助方法(boss:play_sound_at_self、entity:play_sound_at_entity、world:play_sound_at_location)都會分兩步解析該字串:先嘗試 Spigot Sound 列舉名稱(會轉成大寫,所以 "entity_blaze_shoot" 可用),若失敗則把該字串視為具命名空間的音效鍵(會轉成小寫,所以 "entity.blaze.shoot" 與你自己資源包的鍵 "mypack:boss.roar" 都可用)。
兩條處理路徑都會去掉前後空白。沒有命名空間的鍵使用 minecraft。格式錯誤的鍵會被忽略;語法有效的鍵會直接傳送給用戶端,不檢查音效是否存在。因此,拼錯的鍵或資源包中缺少的音效可能不會播放任何聲音。
非 Spigot 值
這些值是 EliteMobs 專用的,不在 Spigot Javadocs 中:
區域形狀
用於原生區域定義的 kind 欄位和腳本工具區域規格的 shape 欄位。這些值區分大小寫。原生形狀使用小寫,腳本工具形狀使用大寫。
原生 (kind) | 腳本工具 (shape) |
|---|---|
sphere | SPHERE |
dome | DOME |
cylinder | CYLINDER |
cuboid | CUBOID |
cone | CONE |
static_ray | STATIC_RAY |
rotating_ray | ROTATING_RAY |
translating_ray | TRANSLATING_RAY |
實體篩選器
用於 context.zones 和 context.entities 查詢選項。值不區分大小寫;支援的別名列在下表中。
| 篩選器 | 符合對象 |
|---|---|
player / players | 僅玩家 |
elite / elites | 僅精英怪物 |
mob / mobs | 非玩家生物實體,包含精英怪物 |
living | 所有生物實體,包含玩家,預設值 |
all / entities | 所有實體,包含非生物實體。僅 context.entities:get_nearby_entities 會辨識 |
未知篩選器按 living 處理,因此 "playr" 這類拼字錯誤會使查詢範圍內所有類型的生物實體都成為符合對象。這些原生實體查詢排除 Boss 自身。區域實體查詢在 Boss 所在世界搜尋;長方體查詢在指定中心所在的世界搜尋。
get_nearby_entities(radius, filter) 對生物實體篩選器使用球形距離檢查。使用 all 或 entities 時,它改為搜尋沿每個軸延伸 radius 的軸對齊長方體,並傳回實體參照表,包含非生物實體。其他原生查詢將這兩個篩選器視為 living。
context.script:zone({...}) 使用的是另一組大寫的篩選條件(PLAYER、ELITE、LIVING),因為它執行的是 EliteScript 引擎。
天氣值
用於 context.world:set_world_weather(weather)。值會轉換為大寫,但不會去掉空白。未知值會記錄警告並保持天氣不變。
| 值 | 效果 |
|---|---|
CLEAR | 晴天 |
PRECIPITATION / RAIN | 下雨 |
THUNDER | 雷暴 |
目標類型
這些是 EliteScript 的目標值。context.script:target() 使用同一個解析器,但不提供繼承的動作資料或落地資料。區域目標必須透過區域控制代碼的 full_target() 或 border_target() 取得。
| 值 | 解析為 |
|---|---|
SELF | Boss 實體自身 |
SELF_SPAWN | 解析位置時為 Boss 的出生位置;解析實體時為 Boss 自身 |
DIRECT_TARGET | 目前事件的直接目標;事件未提供時不會選取任何東西 |
NEARBY_PLAYERS | 從 Boss 沿每個軸延伸 range 的長方體內的玩家 |
NEARBY_MOBS | 同一長方體內的非玩家生物實體,排除 Boss |
NEARBY_ELITES | 同一長方體內的精英怪物,排除 Boss |
ALL_PLAYERS | 所有線上玩家 |
WORLD_PLAYERS | Boss 所在世界的所有玩家 |
ZONE_FULL | 區域內部的實體或位置 |
ZONE_BORDER | 區域邊界上的實體或位置 |
LOCATION | 規格中 location 欄位指定的位置 |
LOCATIONS | 規格中 locations 清單指定的多個位置 |
LANDING_LOCATION | 掉落方塊或召喚實體的落點 |
ACTION_TARGET | 繼承外層 EliteScript 動作的目標 |
INHERIT_SCRIPT_TARGET | 繼承呼叫端 EliteScript 的目標 |
INHERIT_SCRIPT_ZONE_FULL | 繼承呼叫端 EliteScript 的區域;目前實體選擇使用其邊界。請參閱繼承區域的限制。 |
INHERIT_SCRIPT_ZONE_BORDER | 呼叫端 EliteScript 區域的邊界;位置解析請參閱繼承區域的限制。 |
不要將 LANDING_LOCATION、ACTION_TARGET 或三個 INHERIT_SCRIPT_* 值用於 context.script:target()。Lua 控制代碼沒有相應的動作、繼承或落地狀態,解析可能不傳回目標或失敗。單獨的 ZONE_FULL 或 ZONE_BORDER 規格也沒有區域。YAML 動作的語意請參閱 EliteScript 目標。
