創建包
本指南將帶你使用 lip 創建新包。包是根部帶有 lip.toml 的歸檔,通常是一個 git 倉庫;各字段詳見 lip.toml。
使用 lip pkg init
開始新包最簡單的方式是在倉庫根目錄中使用 lip pkg init。
lip pkg initlip 會詢問包 ID,即 Go 模塊路徑,例如 github.com/user/MyTool,直到回答合法為止。隨後它在當前目錄創建 lip.toml:
format = 4
id = "github.com/user/MyTool"
version = "0.1.0"
[[variants.""]]
side = "server"
platform = "win-x64"若該目錄已存在 lip.toml,或無法詢問(標準輸入或標準錯誤不是終端),命令會失敗。
此時這個包還不會安裝任何東西:請按下文為其條目添加 deps、assets 等字段。
發佈版本
像 github.com/user/MyTool 這樣的包 ID 即 git 倉庫 https://github.com/user/MyTool.git,該倉庫中 lip.toml 的 id 必須恰好是這個路徑。要發佈一個版本,請推送名為 v 加 SemVer 2.0.0 版本號的標籤,例如 v1.0.0。標籤處 lip.toml 中的 version 必須是同一版本。不嚴格符合 v<SemVer> 的標籤(例如 v1.0)不是版本。
文件包
文件包在工作區中放置文件。每個資源都是一個取文件的歸檔:self 是包自身的歸檔(標籤處的倉庫),zip 是 lip 下載的 ZIP 文件。其 place 複製一個文件、一個目錄或與 glob 匹配的文件:
format = 4
id = "github.com/user/MyTool"
version = "1.0.0"
[[variants.""]]
side = "server"
platform = "win-x64"
preserve = ["config/mytool/"]
[[variants."".assets]]
type = "self"
place = [{ src = "config/", dest = "config/mytool/" }]
[[variants."".assets]]
type = "zip"
urls = ["https://github.com/user/MyTool/releases/download/v1.0.0/MyTool-win-x64.zip"]
place = [{ src = "MyTool.exe", dest = "MyTool.exe" }]preserve 保留用戶修改過的配置:已存在的文件不會被覆蓋,卸載時也不會被刪除。其 glob 相對於工作區。
mod
mod 是帶有 mcmod 資源的條目:一個根部帶有該 mod 的 LeviLamina manifest.json 的 ZIP 歸檔。lip 把整個歸檔寫入 mods/<name>/,其中 <name> 是該 manifest.json 中的 name;lip 不讀取 manifest.json 的其他內容,並原樣安裝它。
用 lip pkg pack 從構建輸出目錄(其中有 manifest.json 和 mod 的文件)構建該歸檔,並把它附加到 Release:
lip pkg pack build/ -o MyMod-server-win-x64.zip然後在 lip.toml 中指向它:
format = 4
id = "github.com/user/MyMod"
version = "1.0.0"
[info]
name = "My Mod"
[[variants.""]]
side = "server"
platform = "win-x64"
preserve = ["mods/MyMod/config/"]
[variants."".deps]
"github.com/LiteLDev/LeviLamina" = ">=1.0.0 <2.0.0"
"github.com/user/MyLib" = "^0.3.0"
[[variants."".assets]]
type = "mcmod"
urls = ["https://github.com/user/MyMod/releases/download/v1.0.0/MyMod-server-win-x64.zip"]deps 把每個依賴的包 ID 映射到版本範圍,例如 ^0.3.0 或 >=1.0.0 <2.0.0,語法見 Semver for .NET。lip 會安裝這些依賴。它只讀取 mod 的 LeviLamina manifest.json 中的 name,並原樣安裝該文件,因此請按 LeviLamina 的要求,自己在其 deps 中列出你的 mod 所依賴的 mod。
在客戶端上,mod 同樣安裝到 mods/<name>/,由 LeviLauncher 等啟動器負責;lip 本身只安裝到服務端。
多個運行端和平臺
一個條目恰好適用於一個運行端(server 或 client)和一個平臺(.NET RID,例如 win-x64),且必須與工作區環境的運行端和平臺相同。請為包支持的每個運行端和平臺各添加一個條目,每個條目有自己的資源:
[[variants.""]]
side = "server"
platform = "win-x64"
assets = [{ type = "mcmod", urls = ["https://github.com/user/MyMod/releases/download/v1.0.0/MyMod-server-win-x64.zip"] }]
[[variants.""]]
side = "client"
platform = "win-x64"
assets = [{ type = "mcmod", urls = ["https://github.com/user/MyMod/releases/download/v1.0.0/MyMod-client-win-x64.zip"] }]
[[variants.""]]
side = "client"
platform = "win-arm64"
assets = [{ type = "mcmod", urls = ["https://github.com/user/MyMod/releases/download/v1.0.0/MyMod-client-win-arm64.zip"] }]運行端和平臺沒有對應條目的工作區無法安裝該包。lip 始終使用平臺 win-x64,在 Linux 上也是如此(此時通過 Wine 運行服務器);因此服務端 mod 需要 win-x64 的 server 條目,lip 從不安裝 linux-x64 等其他平臺的條目。
變體
使用變體可在一個倉庫中提供多個包。用戶通過 path#variant 選擇其中之一,例如 lip install github.com/user/repo#lua;不帶 # 時使用變體 "":
[[variants.lua]]
side = "server"
platform = "win-x64"
assets = [{ type = "self", place = [{ src = "lua/", dest = "myengine/lua/" }] }]
[[variants.quickjs]]
side = "server"
platform = "win-x64"
assets = [{ type = "self", place = [{ src = "quickjs/", dest = "myengine/quickjs/" }] }]每個變體都作為獨立的包安裝,身份為 <包 ID>#<variant>,因此同一倉庫的多個變體可以並存。其他包在 deps 中以鍵 <包 ID>#<variant> 依賴某個變體。
推薦標籤
info.tags 供人閱讀,也供列出包的網站和啟動器使用;lip 本身忽略標籤。levimc.org 和 LeviLauncher 等模組列表會優先顯示下列標籤及其本地化名稱,並允許用戶按它們篩選。請按此處的寫法使用這些 ID:小寫,且不加 category: 之類的前綴;不需要其他拼寫或同義詞。挑選最能描述你的包的幾個,此外也可以添加任何其他標籤:
[info]
tags = ["management", "economy"]| 標籤 | 名稱 | 適用於 |
|---|---|---|
library | 前置庫 / API | 其他 mod 依賴的庫或 API,例如事件、表單或導出函數。 |
utility | 實用工具 | 玩家日常使用的工具,例如背包輔助、信息顯示、物品提示和配方查看。 |
management | 服務器管理 | 運營服務器,例如備份、封禁、白名單、登錄、命令和領地。 |
game-mechanics | 遊戲機制 | 改變遊戲玩法,例如原版增強功能和成就。 |
adventure | 內容與冒險 | 可供探索的新內容,例如世界生成、地形和生物群系。 |
visual | 視覺與界面 | 玩家看到的內容,例如 HUD、側邊欄、光影、回放和錄製。 |
economy | 經濟 | 貨幣、商店和交易。 |
teleport | 傳送 | 傳送命令、家園、傳送點和傳送石碑。 |
anticheat | 反作弊 | 檢測和阻止作弊,例如反礦透。 |
optimization | 性能優化 | 提升性能,例如實體和掉落物清理。 |
bugfix | 錯誤修復 | 修復遊戲的錯誤。 |
technology | 技術與紅石 | 紅石、活塞和自動化。 |
protocol | 協議與多版本 | 網絡協議,例如讓多個遊戲版本的客戶端加入。 |
無需為運行端、平臺或“這是 LeviLamina mod”添加標籤:條目和 deps 已經說明了這些,模組列表也會隱藏 server、client、levilamina 和 mod 等標籤。
本地測試
發佈之前,你可以從磁盤安裝包:從其目錄,或從根部帶有 lip.toml 的 ZIP 文件安裝:
lip install ../MyTool
lip pkg pack ../MyTool -o MyTool.zip
lip install ./MyTool.zip此時 self 資源從該目錄或 ZIP 文件中取文件。
lip v0.x 的包
lip 仍會安裝 lip v0.x 的包(它們帶有格式版本 1、2 或 3 的 tooth.json,而不是 lip.toml),但不再創建它們。如需轉換,請參閱遷移包。