跳到正文
本頁目錄

創建包

本指南將帶你使用 lip 創建新包。包是根部帶有 lip.toml 的歸檔,通常是一個 git 倉庫;各字段詳見 lip.toml。

使用 lip pkg init

開始新包最簡單的方式是在倉庫根目錄中使用 lip pkg init。

sh
lip pkg init

lip 會詢問包 ID,即 Go 模塊路徑,例如 github.com/user/MyTool,直到回答合法為止。隨後它在當前目錄創建 lip.toml:

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 匹配的文件:

toml
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:

sh
lip pkg pack build/ -o MyMod-server-win-x64.zip

然後在 lip.toml 中指向它:

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),且必須與工作區環境的運行端和平臺相同。請為包支持的每個運行端和平臺各添加一個條目,每個條目有自己的資源:

toml
[[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;不帶 # 時使用變體 "":

toml
[[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: 之類的前綴;不需要其他拼寫或同義詞。挑選最能描述你的包的幾個,此外也可以添加任何其他標籤:

toml
[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 文件安裝:

sh
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),但不再創建它們。如需轉換,請參閱遷移包。