跳至主要內容

Lua 腳本:列舉與值

webapp_banner.jpg

本頁提供 EliteMobs Lua 方法所用 Spigot 值類型的文件連結。在 Lua 程式碼中,將 "FLAME"、"ZOMBIE"、"STONE" 等常數名稱作為字串傳入。請使用伺服器 API 版本支援的值。

  • 拼寫必須與列舉常數名稱完全匹配
  • 大小寫通常在內部標準化,但為了安全起見請匹配 Javadoc 的拼寫
  • 無效值的處理方式取決於具體方法:有些會記錄警告,有些會傳回 nil 或不執行任何操作,具有輸入驗證的 API 則可能引發 Lua 錯誤

列舉參考​

列舉用途Javadoc
BarColorBoss 血條顏色BarColor
BarStyleBoss 血條樣式BarStyle
DamageCause依傷害原因篩選EntityDamageEvent.DamageCause
EnderDragon.Phase終界龍階段控制EnderDragon.Phase
EntityEffect實體視覺效果EntityEffect
EntityType實體生成EntityType
EquipmentSlot實體裝備欄位;damage_equipment 只接受 HAND、OFF_HAND、HEAD、CHEST、LEGS、FEETEquipmentSlot
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)
sphereSPHERE
domeDOME
cylinderCYLINDER
cuboidCUBOID
coneCONE
static_raySTATIC_RAY
rotating_rayROTATING_RAY
translating_rayTRANSLATING_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() 取得。

值解析為
SELFBoss 實體自身
SELF_SPAWN解析位置時為 Boss 的出生位置;解析實體時為 Boss 自身
DIRECT_TARGET目前事件的直接目標;事件未提供時不會選取任何東西
NEARBY_PLAYERS從 Boss 沿每個軸延伸 range 的長方體內的玩家
NEARBY_MOBS同一長方體內的非玩家生物實體,排除 Boss
NEARBY_ELITES同一長方體內的精英怪物,排除 Boss
ALL_PLAYERS所有線上玩家
WORLD_PLAYERSBoss 所在世界的所有玩家
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 目標。


後續步驟​