跳至主要內容

ClassJS

芒果凍布丁2025年12月7日大约 1 分鐘forge-1.20

ClassJS 是一個在 KubeJS 中建立 Java 類別的模組。

基本範例

你可以操作 Java 位元組碼來建立自訂的方法。

注意:某些會與類別互動的指令(例如 getstaticinvokestaticnew 等)受 KubeJS 的類別過濾器保護。你不能使用這些指令存取 KubeJS 或其其他外掛不允許的類別,也不能擴充或實作這些被限制的類別。

let ExampleClass = ClassCreator.create("ExampleClass")
    .toPublic()           // 設定類別為 public
    .defaultConstructor() // 新增預設建構子
    .createMethod("exampleMethod", [], "java.lang.String") // 方法名稱、參數型別、與回傳型別
        .toPublic()
        .code(builder => {
            builder.pushString("你好,ClassJS!")   // 將字串參考推到操作數棧
                .returnObject();                    // 回傳該字串
        })
    .defineClass();     // 定義該類別

console.info((new ExampleClass()).exampleMethod());

等價的 Java 程式碼:

public class ExampleClass {

    public ExampleClass() {
        super();
    }

    public String exampleMethod() {
        return "你好,ClassJS!";
    }

}

在 JavaScript 中撰寫程式碼

如果你不想學習 Java 位元組碼,也可以使用 JavaScript 函數來建立方法。

let ExampleClass = ClassCreator.create("ExampleClass")
    .toPublic()
    .createMethod("exampleMethod", ["int", "int"], "int")
        .toPublic().toStatic()
        .codeJS((num1, num2) => {
            return num1 + num2;
        })
    .defineClass();

console.info(ExampleClass.exampleMethod(1, 2));
// 在 startup.log 的輸出為
// 3.0

等價的 Java 程式碼:

public class ExampleClass {

    // 注意:這個類別甚至沒有建構子,
    // 因為上面的 JavaScript 並未呼叫 `defaultConstructor`,
    // 也沒有建立其他建構子。

    public static int exampleMethod(int i1, int i2) {
        return i1 + i2;
    }

}

載入已建立的類別

類別只能在 startup 腳本中定義。如果你想在其他腳本中使用它們,可以使用 ClassJSUtils.loadClass 方法。

ClassCreator.create("SomeClass")
    /** 對這個類別進行一些操作以加入內容 */
    .defineClass();

// 在其他腳本中:

let SomeClass = ClassJSUtils.loadClass("SomeClass");
// 然後就可以使用 `SomeClass`
上次編輯於: 2025/12/7 上午4:32:41
貢獻者: EvanHsieh0415