Class PortalScriptManager
java.lang.Object
scripting.PortalScriptManager
傳送門腳本的全域單例管理器,負責載入、快取並執行
scripts/portal/<名稱>.js。
腳本以 PortalScript 接口快取於 ConcurrentHashMap(以哨符 NULL_SCRIPT
表示「無腳本」,避免重複查找檔案);同一傳送門名稱使用 per-name ReentrantLock
序列化並發進入,防止多條 Netty worker 執行緒同時踩入同一 GraalJS Context(GraalJS 禁止並發)。
關鍵協作者:
ScriptEngines:fresh("portal/<名稱>")建立 GraalJS 引擎;C8 後為 GraalJS-only。PortalScript:腳本接口,由 GraalJSInvocable.getInterface(Class)綁定。PortalPlayerInteraction:在executePortalScript中建立並傳入腳本enter()。MaplePortal:提供傳送門scriptName以定位.js檔案。
clearScripts() 供 GM 指令 !reloadportals 呼叫以清除腳本快取;
portalLocks 刻意不隨之清除,以避免持鎖執行緒與新建鎖物件間的互斥失效。
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfinal voidfinal voidexecutePortalScript(MaplePortal portal, MapleClient c) static final PortalScriptManager
-
Constructor Details
-
PortalScriptManager
public PortalScriptManager()
-
-
Method Details
-
getInstance
-
executePortalScript
-
clearScripts
public final void clearScripts()
-