Inner Core Tool Chain開發環境設定教學

↑本文撰寫日期

InnerCore的作者有在Github上釋出Inner Core Tool Chain工具,方便開發者在Windows上「高效率」地開發Inner Core Minecraft模組。

本文介紹如何透過這個工具撰寫和打包JavaScript的InnerCore模組,需要打大量指令。 



    前置作業

    需要的工具:

    如果要開發C++原生模組,還要用到JDK、NDK,暫且不提。

    這個工具只能在Windows執行,不過將bat檔自行改寫成shell也是能在Linux上執行,因為大部分操作還是依賴python完成。

    VS Code能在編輯程式時顯示每個函數的定義,或者按Ctrl+Shift+B來執行專案資料夾裡的bat檔。


    *Windows 10如何用指令執行bat檔:開啟Powershell,cd切換到bat檔所在的資料夾,輸入.\bat檔名,例如:.\build-scripts-and-resources.bat


    設定專案

    1. 下載儲存庫
    git clone https://github.com/zheka2304/innercore-mod-toolchain

    2. 切換至該目錄
    cd innercore-mod-toolchain

    3. 建立一個InnerCore專案
    python .\toolchain-setup.py mymod

    之後終端機會詢問一些問題,可照填:

    Enter your pack directory name [Inner_Core]: mymod (資料夾名稱)

    Enter project name: My Mod (專案名稱)

    Enter Author Name: Ivon (作者)

    Enter Project Version: 1.0 (版本)

    Enter Project Description: A test mod. (說明)

    Do you want to initialize a new native directory? [y/N]: N

    Do you want to initialize a new java directory? [y/N]: N

    Do you want to clean up the project? [Y/n]: y


    接著就會建立一個叫做"mymod"的資料夾,這就是專案的根目錄。

    4. 切換至專案目錄"mymod"
    cd mymod

    5. 初始化專案
    npm init -y

    6. 安裝Typescript
    npm install tsc
    npm install typescript

    7. 執行toolchains目錄下的bat檔,下載InnerCore的TypeScript定義,這樣輸入函數時就會顯示相關用法:
    .\download-declartions.bat

    這樣"mymod"根目錄下應該有這些東西了:

    mymod
    ├── make.json
    ├── package.json
    ├── src/
    └── toolchain/

    開始撰寫主程式

    開啟VS Code,檔案→開啟資料夾→開啟專案"mymod"根目錄。

    1. 打包時,腳本會按照根目錄的make.json所設定的來建構檔案。剛剛在創建專案時,已經輸入好開發所需的資訊了,因此make.json裡global的info欄位已填入模組的基本資訊:
    {
       "global":{
          "info":{
             "name":"My Mod",
             "author":"Ivon",
             "version":"1.0",
             "description":"A test mod."
          },
          "api":"CoreEngine"
       },
       "make":{
          "debugAbi":"armeabi-v7a",
          "abis":[
             "armeabi-v7a",
             "x86"
          ],
          "linkNative":[
             "minecraftpe",
             "innercore",
             "nativejs"
          ],
          "excludeFromRelease":[
             
          ],
          "pushTo":"storage/emulated/0/games/horizon/packs/mymod/innercore/mods/mymod",
          "ndkPath":null
       },
       "resources":[
          {
             "path":"src/assets/res",
             "type":"resource_directory"
          },
          {
             "path":"src/assets/gui",
             "type":"gui"
          },
          {
             "path":"src/assets/resource_packs/*",
             "type":"minecraft_resource_pack"
          },
          {
             "path":"src/assets/behavior_packs/*",
             "type":"minecraft_behavior_pack"
          }
       ],
       "sources":[
          {
             "source":"src/dev",
             "target":"main.js",
             "type":"main",
             "language":"typescript"
          },
          {
             "source":"src/launcher.js",
             "type":"launcher",
             "language":"javascript"
          },
          {
             "source":"src/lib/*",
             "type":"library",
             "language":"javascript"
          },
          {
             "source":"src/preloader/*",
             "type":"preloader",
             "language":"javascript"
          }
       ],
       "compile":[
          {
             "source":"src/native/*",
             "type":"native"
          },
          {
             "source":"src/java/*",
             "type":"java"
          }
       ],
       "additional":[
          {
             "source":"src/assets/root/*",
             "targetDir":"."
          }
       ]
    }
    

    resources:[]代表這個專案,相關紋理的儲存位置。
    sources:[]代表這個專案包含的JS,維持預設。

    pushTo屬性代表的是輸出到手機的目錄。手機Horizon儲存模組的位置通常位於內部儲存空間/games/horizon/packs/Inner_Core/innercore/mods。

    excludeDirectories,打包輸出時要排除的目錄。


    2. 在目錄src/dev/下新增一個"main.ts",這是模組主程式。
    建議使用TypeScript (ESNext標準)撰寫,再編譯成JS,因為InnerCore的JS是ES5標準。

    main.ts輸入以下內容,這樣會在玩家進入Minecraft世界後顯示Hello World!的訊息:
    Callback.addCallback("LevelDisplayed", function () {
            Game.message("Hello World!");
    });
    

    3. 把src/icon.png移動到src/assets/root/,改名mod_icon.png,這是模組的縮圖。

    4. 在src/assets/root/新增config.json
    裡面輸入:
    {
      "enabled":true
    }
    

    這樣可讓玩家在Horizon中任意啟用或停用模組。


    如果要新增物品/方塊,紋理貼圖應放在src/assets/res資料夾。


    5. 到此為止,根目錄/src下應該有這些檔案:
    mymod/src
    ├── assets
    │   ├── behavior_packs
    │   ├── gui
    │   ├── res
    │   │   ├── items-opaque
    │   │   └── terran-atlas
    │   ├── resource_packs
    │   └── root
    │       ├── config.json
    │       └── mod_icon.png
    ├── dev
    │   ├── header.js
    │   ├── main.ts
    │   └── tsconfig.json
    ├── launcher.js
    ├── lib
    ├── native
    └── preloader


    打包輸出

    所有的.bat檔案都位於根目錄/toolchains。VScode按Ctrl+Shift+B可執行專案資料夾裡的bat檔。

    編譯並複製到手機上測試

    手機插到電腦上,開啟除錯模式。
    執行:
    .\build-scripts-and-resources.bat

    此操作會將檔案全部輸出到根目錄/output,接著把檔案複製到手機上Horizon的目錄,然後Horizon會自行啟動。

    在Horizon的本機模組列表就能看到自製模組,以及config的畫面。

     


    進入世界,顯示Hello World!訊息。


    打包成.icmod

    執行:
    .\assemble-release.dat

    此操作會將模組的檔案打包成.icmod,檔案位於根目錄,會產生一個"mod.icomod"的檔案。

    .icmod是用於發布到官網的格式,其實就是zip。


    編譯成.dex檔案

    此動作非必須,但編譯成Android系統的.dex檔案可增加模組執行效率。
    點進去模組頁面,按右上角「編譯」

     
    之後模組資料夾會多出".dex"資料夾,代表編譯完成。

    發表到InnerCore官網

    投稿到官網,其他玩家就能從模組管理器的「下載模組」處搜尋到你的模組。
    官方有權利刪除你的投稿,所以務必寫完整說明。

    準備好.icmod檔案,到官網註冊帳號,點右上角自己帳號的名字,按「添加模組集」進行投稿。
    可同時提供英文及中文的說明。




    其他參考資源

    留言

    此網誌的熱門文章

    Minecraft基岩版多人連線教學: 方法一覽

    【詳細解說】什麼是Minecraft基岩版,跟Java版有什麼差?

    Minecraft基岩版安裝模組(Add-On)&資源包&光影教學