跳到正文
本頁目錄

交互界面

在終端裡不帶參數運行 lip,即可打開交互界面:一個全屏程序,用方向鍵和 Enter 就能設置服務器、安裝 levimc.org/mods 上的模組、運行服務器並編輯它的配置。

shell
lip

界面一次處理一個工作區,起初是當前目錄(見工作區)。當 lip 的標準輸入或標準輸出不是終端時(腳本或管道中),不帶參數的 lip 改為輸出幫助。

與命令一樣,界面運行在 lip 的守護進程中;你啟動的 lip 負責顯示它並轉發你的按鍵。你可以同時在多個終端中打開它。

佈局

text
 lip 1.2.3 · D:\servers\survival                            ● 运行中
┌────────────────┐┌─ 主页 ──────────────────────────────────────────┐
│ 主页           ││                                                 │
│ 服务器       ● ││                                                 │
│ 模组           ││                                                 │
│ 获取模组       ││                    当前页面                     │
│ 游戏配置       ││                                                 │
│ 模组配置       ││                                                 │
│ 工作区         ││                                                 │
│ 工具           ││                                                 │
│ 设置           ││                                                 │
└────────────────┘└─────────────────────────────────────────────────┘
 ↑↓ 移动  Enter 打开  Esc 退出
部分顯示
頂行lip 的版本、所選的工作區,以及它的服務器是否在運行。
側欄九個頁面。服務器運行期間,“服務器”一項帶有標記。
頁面側欄中選中的頁面。詢問、菜單和進度以對話框的形式顯示在它上面。
底行此刻可用的按鍵,各附一兩個詞的說明。它隨你的移動而變化。終端較窄時,排在後面的按鍵會被省略;Esc 始終顯示。

焦點要麼在側欄,要麼在頁面裡;界面打開時焦點在主頁中。在側欄中,↑ 和 ↓ 逐個顯示頁面,Enter 進入所顯示的頁面;Esc 回到側欄。

界面需要至少 60 列、16 行的終端;終端更小時,它會請你放大終端,此時唯一可用的按鍵是 Ctrl+C,它不經詢問直接退出。在不足 80 列的終端裡,當你在頁面中時,側欄收窄為每頁一個符號,回到側欄時再顯示名稱。

按鍵

同樣的按鍵在每個頁面上作用一致:

按鍵作用
↑、↓在列表或菜單中移動。
←、→在側欄與頁面之間、並排的各欄或按鈕之間移動;改變選項的值。
Enter打開或執行選中的內容。在列表的一行上,打開可對它執行的操作菜單。
Space在可多選的列表中勾選一行;打開或關閉一個開關。
Esc返回上一層:從對話框回到頁面,在頁面內從裡層回到外層(從服務器的輸入行回到它的輸出,從文件的值回到文件列表),從頁面回到側欄。在側欄中,詢問是否退出。
Tab、Shift+Tab移到下一個或上一個區域,在側欄和頁面的各個區域之間循環。
PgUp、PgDn、Home、End在列表或文本中翻頁。
Ctrl+C在服務器頁面且服務器正在運行時,停止服務器。在其他頁面和側欄中,詢問是否退出。在執行修改期間,取消這次修改。

界面沒有字母快捷鍵。你能做的每件事都是屏幕上的一行或一個按鈕,用方向鍵就能選到;只有在文本框獲得焦點時(例如搜索框或服務器的輸入行),才需要輸入字符。

要退出,請在側欄按 Esc,或在 Ctrl+C 不是停止服務器的地方按 Ctrl+C,然後確認。正在運行的服務器會繼續運行(見服務器)。

三步開好第一個服務器

主頁按順序列出新服務器需要的步驟。用 ↑ 和 ↓ 選擇一步並按 Enter;已完成的步驟會打勾。

  1. 創建服務器。 當前目錄還沒有服務器時,lip 提供在其中創建,或讓你選擇其他文件夾;然後依次詢問遊戲版本和加載器(見工作區)。隨後它顯示將要安裝的內容;選擇應用,並在詢問時接受 Minecraft EULA。
  2. 安裝模組。 這會打開獲取模組頁面:移到一個模組上,按 Enter,選擇安裝,再選擇版本。同樣,lip 會先顯示將要做什麼,然後才改動。
  3. 啟動服務器。 這會打開服務器頁面並啟動服務器。在它的輸入行裡輸入服務器命令;Ctrl+C 停止服務器。沒有服務器時無可啟動,lip 會請你回到第一步。

如果你的網絡連不上 GitHub,lip 會在一開始就詢問如何連接:見 GitHub 代理。

頁面

頁面作用對應命令
主頁(Home)顯示工作區的狀態和下一步該做什麼。
服務器(Server)啟動和停止服務器,顯示它的輸出,並把你輸入的內容發給它。lip run、lip config
模組(Mods)列出已安裝的包;安裝、更新、卸載。lip list、lip install、lip update、lip uninstall
獲取模組(Get mods)搜索、篩選、排序 levimc.org 上的模組,並安裝。lip install
遊戲配置(Game config)編輯 server.properties、allowlist.json 和 permissions.json。
模組配置(Mod config)編輯已安裝模組的配置文件。
工作區(Workspaces)在工作區之間切換,設置新服務器,更改某個工作區的遊戲或加載器。lip setup
工具(Tools)創建 lip.toml、遷移 tooth.json、打包 ZIP、查看包。lip pkg init、lip pkg migrate、lip pkg pack、lip pkg view
設置(Settings)語言、GitHub 代理、緩存、lip 的更新、守護進程的狀態。lip config、lip cache clean、lip self-update、lip daemon status

每個頁面都處理頂行顯示的所選工作區。

主頁

主頁顯示所選工作區的狀態,以及新服務器的三個步驟:創建服務器、安裝模組、啟動服務器。已完成的步驟會打勾;在某一步上按 Enter 直接進入該步驟(見三步開好第一個服務器)。

服務器

服務器頁面顯示所選工作區的服務器是在運行、在等待重啟,還是以什麼退出碼退出;一個啟動或停止它的按鈕,以及自動重啟選項;服務器的輸出;服務器運行期間還有一個輸入行。在沒有服務器的工作區中,頁面改為提供新建服務器…,其設置過程與工作區頁面相同。

  • 啟動服務器時,會像 lip run --managed --detach 一樣把它作為託管服務器啟動:它由 lip 的守護進程運行,退出 lip 或關閉其終端後仍繼續運行。再次打開 lip,或在該工作區運行 lip run --managed,即可重新看到它。
  • 服務器運行期間,你在輸入行裡輸入的內容按 Enter 發給服務器;↑ 和 ↓ 調出之前發送過的行。Esc 從輸入行回到輸出,Tab 則從按鈕依次移到輸出和輸入行。
  • 輸出獲得焦點時,↑、↓、PgUp、PgDn、Home 和 End 滾動它;否則它跟隨服務器的最新輸出。
  • 用按鈕或 Ctrl+C 停止服務器時,會向它發送一行 stop。
  • 自動重啟決定服務器崩潰後是否重新啟動;它就是工作區的 restart 鍵,與 lip config set restart on-failure --workspace 設置的相同(參見 lip run)。設置頁面中也有這個選項。

每個工作區有自己的服務器,因此多個工作區的服務器可以同時運行;工作區頁面會標出服務器正在運行的工作區。同時在多個終端中打開的界面以及 lip run --managed 共享這些服務器:每個界面顯示其所選工作區的服務器,無論由誰啟動。

lip 無法使用守護進程而自己運行界面時,它啟動的服務器不是託管服務器:退出 lip 會請求它們停止,lip 會等到它們都退出。

服務器運行期間,界面既不改動其工作區中的包,也不改動遊戲配置:見服務器運行期間。

模組

模組頁面列出工作區中已安裝的包,與 lip list 相同。

  • 列表上方是適合當前工作區的操作:從來源安裝…始終存在;安裝過模組後有全部更新,在此之前則是打開獲取模組頁面的獲取模組;沒有遊戲的工作區還有新建服務器…。第一項中,可以按命令行的寫法輸入包(見 lip install),例如包 id 或 URL,也可以瀏覽並選擇磁盤上的 ZIP 文件或文件夾。
  • 在模組上按 Enter 打開它的菜單:查看詳情、更新、更新到你指定的版本(lip update <包>@<版本>),或卸載。詳情與獲取模組頁面為該模組顯示的內容相同;levimc.org 的模組目錄中沒有這個模組,或目錄無法讀取時,lip 會提示沒有它的信息。遊戲和加載器的菜單通往工作區頁面,它們的版本在那裡更改。
  • Space 勾選你安裝的模組;此時菜單一次更新或卸載所有勾選的模組。

僅因為被其他包依賴而安裝的包既不能勾選,也不能單獨卸載:請卸載依賴它的包。

獲取模組

獲取模組頁面讀取 levimc.org 的模組目錄(https://levimc.org/api/v4/mods/);目錄內容不會寫入磁盤,也不經過 github_proxy。lip 只管理服務端,所以列表裡只有帶服務端構建的模組。

頁面上有搜索框、排序方式、打開篩選條件的一行(遊戲版本、標籤、許可證、依賴)、模組列表和選中模組的詳情。與 levimc.org 一樣,列表的每一行顯示模組的下載量、星標和最近更新的日期,已安裝的模組帶有標記;下載量未知時不顯示。排序方式與 levimc.org 一致:

排序模組的順序
相關性與搜索最匹配的在前。
熱度最熱門的在前。模組的熱度與 levimc.org 一樣,由下載量和星標共同算出,所以它既不是按下載量排序,也不是按星標排序。
最近更新最近更新的在前。
最新發布最近發佈的在前。

在模組上按 Enter 打開它的菜單:安裝…、閱讀 README,或在瀏覽器中打開它的頁面。安裝一定要先選擇版本,不能不看版本就直接安裝“最新版”:

  • 模組有變體時,所有變體作為標籤排在頂部的一行裡,← 和 → 切換變體。這一行放不下全部變體時會橫向滾動,並標出哪一側還有未顯示的變體;它絕不會佔用第二行。
  • 下面是所選變體中與工作區的遊戲和 LeviLamina 相配的版本,從新到舊,且只有這些版本。沒有相配的版本時,會有一行說明是哪個遊戲版本或哪個 LeviLamina 版本排除了它們。
  • 最後一行**自定義…**改為接受一個分支、標籤或提交,例如 branch:main。

在沒有服務器的工作區中,沒有可供版本相配的對象:lip 會說明這一點,並提供先創建服務器(見工作區)。

遊戲配置

遊戲配置頁面編輯工作區根目錄下服務器的文件,分為三個部分:

文件內容
server.properties服務器的屬性。
allowlist.json允許進入服務器的玩家。
permissions.json每個玩家的權限。

Enter 編輯選中的條目,Space 切換 true/false 值;在你修改過的屬性上,Enter 還提供恢復原值。**添加玩家…**是兩個玩家列表各自的第一行,在玩家上按 Enter 打開它的菜單,可以移除該玩家。

在你選擇頁面底部的保存之前,什麼都不會寫入;放棄丟棄你的修改,帶著未保存的修改離開頁面時,會詢問是否保存。如果文件在 lip 讀取之後在磁盤上被修改過,lip 會先詢問再覆蓋。lip 只改動你修改過的內容:在 server.properties 中,只改動你修改過的屬性所在的行,所有註釋都保留;在 JSON 文件中,只改動你修改過的值,並保持成員的順序(JSON 文件中的註釋不會保留)。

服務器在第一次啟動時生成 server.properties,所以新的工作區裡可能還沒有它;allowlist.json 和 permissions.json 會在你保存時創建。服務器在啟動時讀取這三個文件。

服務器運行期間,這個頁面是隻讀的:可以瀏覽這些文件,但不能修改,也不能保存(見服務器運行期間)。

模組配置

模組配置頁面列出已安裝模組的配置文件。.json 文件以樹的形式打開:Enter 打開對象或列表、編輯值,Space 切換 true/false 值,Esc 返回上一級;列表中有一行用於添加值,在它的某個值上按 Enter 可以移除該值。其他文件原樣顯示,請用文本編輯器修改。與遊戲配置頁面一樣,在你選擇保存之前什麼都不會寫入,帶著未保存的修改離開時會詢問;已不存在的文件不會被創建。與遊戲配置不同,模組的配置在服務器運行期間也可以保存;模組可能要到服務器下次啟動時才讀取它(見服務器運行期間)。

已安裝的模組都沒有配置文件時,頁面會說明沒有可配置的模組,並改為提供獲取模組。這並不表示沒有安裝模組:模組可能沒有配置,或把配置放在 lip 不查看的位置。

模組的配置文件是 mods/<模组>/config/ 中的文件;沒有這樣的文件時,是 mods/<模组>/ 下直接存放的 .json、.ini、.toml、.yml 和 .yaml 文件(manifest.json 除外),以及 mods/<模组>/data/config.json。大多數模組在服務器第一次啟動時生成它們。

工作區

lip 把你用過的工作區記在一個列表裡,即其狀態目錄中的 workspaces.json(Windows 上為 %LOCALAPPDATA%\lip\State,其他系統為 $XDG_STATE_HOME/lip)。界面打開時,當前目錄若不在列表中會被加入,並被選中。列表在 lip 的多次運行之間保留,並由同時打開的各個界面共享。

工作區頁面顯示這個列表:哪個工作區是所選的,哪些已不存在,哪些的服務器正在運行。

  • 列表上方有兩個操作:新建服務器…,以及添加已有文件夾…,後者讓你選擇文件夾。
  • 在工作區上按 Enter 打開它的菜單:切換到它、更改它的遊戲或加載器版本,或把它從列表中移除。移除不會改變工作區中的任何文件;當前所選的工作區不能移除。目錄已不存在的工作區只能移除;服務器正在運行的工作區不能更改版本。

設置新服務器至多分四步:

  1. 服務器的文件夾:在文件夾瀏覽器中選擇。也可以選擇尚不存在的文件夾,它會被創建。所選工作區還沒有服務器時,lip 會先提供這個工作區本身。
  2. 遊戲版本:讀自服務器的構建列表,先是正式版本(從新到舊),然後是其他版本。每個版本都標明是否有支持它的 LeviLamina。模組需要 LeviLamina,而並非每個遊戲版本都有對應的 LeviLamina,所以要裝模組的服務器請選擇受支持的版本。lip 查不到這一信息時,列表只顯示版本。
  3. 構建:僅當 lip 運行在 x64 的 Linux 上且該版本兩種構建都有時才詢問:windows,即 LeviLamina 及其模組運行於其上的服務器(在 Windows 以外通過 Wine 運行);或 linux,即不帶加載器的 Linux 版服務器。在其他系統上 Linux 版服務器無法運行,所以構建就是 windows,lip 不會詢問;該版本只有一種構建時同樣不詢問。
  4. 加載器(僅 windows 構建):支持該遊戲的 LeviLamina 版本(從新到舊),或不使用加載器。lip 按 lip setup 的方式查找它們,可能需要一點時間。

隨後 lip 創建該目錄,把它加入列表並選中它,再按你的選擇執行 lip setup,例如 lip setup --game 1.21.50 --loader levilamina@1.1.0。Esc 返回上一步,在第一步則停止,不會創建任何東西。完成後,新工作區就是列表中選中的那一行。

更改某個工作區的遊戲或加載器,就是在其中再次執行 lip setup,除文件夾外的選擇與上面相同;每一步都從該工作區現有的內容開始。

工具

工具頁面面向製作包的人。它的每一行會詢問對應命令所需的內容,並顯示結果:

行命令
創建 lip.tomllip pkg init
遷移 tooth.jsonlip pkg migrate
打包 ZIPlip pkg pack
查看包lip pkg view

某一行需要文件夾或文件時,你在文件夾瀏覽器中選擇:打包會先詢問包所在的文件夾,再詢問要寫入的文件。查看包會先詢問查看哪一個:工作區中已安裝的模組(從列表中選擇)、按命令行寫法輸入的包,或磁盤上的 ZIP 文件或文件夾。

設置

行作用命令
語言選擇界面的語言,或跟隨系統(見語言)。lip config set language <值>、lip config delete language
GitHub 代理設置並測試 lip 訪問 GitHub 所用的代理,改為直接連接,或移除這項設置(見 GitHub 代理)。lip config set github_proxy <URI>、lip config delete github_proxy
自動重啟決定所選工作區的服務器崩潰後是否重新啟動(見服務器)。lip config set restart on-failure --workspace
清理緩存刪除已下載的文件。lip cache clean
檢查更新檢查是否發佈了更新的 lip,並提供安裝。lip self-update --check
安裝更新安裝新版本;檢查發現新版本後才有這一行。lip self-update
守護進程顯示 lip 守護進程的狀態;Enter 重新查詢。lip daemon status
關於顯示 lip 的版本。lip --version

界面不能停止守護進程,因為界面正是由守護進程運行的:請退出界面後運行 lip daemon stop。

預覽與應用

對工作區的每次修改(安裝、更新、卸載、設置)都按同樣的流程進行:

  1. 預覽。 lip 先以 dry run(--dry-run)執行命令,並顯示將要做什麼。
  2. 應用或取消。 在你選擇應用之前,什麼都不會改變。取消讓工作區保持原樣,所以它也是隻查看命令將要做什麼的方式。預覽發現沒有任何改動時(例如都已安裝),就沒有可應用的內容,唯一的按鈕是關閉。
  3. 許可協議,當這次修改會設置遊戲時,例如新服務器,或在沒有遊戲的工作區中安裝 LeviLamina(見 lip setup):lip 給出 Minecraft EULA 和 Microsoft 隱私聲明的鏈接,詢問你是否接受;除非你接受,否則什麼都不會改變。
  4. 進度。 Esc 或 Ctrl+C 取消這次修改,並撤銷已經完成的部分。
  5. 結果。 命令輸出的消息。

應用不會從頭再來:預覽從網絡讀到和下載的內容(版本、包文件、歸檔)會被直接使用,所以應用所需的時間只取決於對工作區的改動。新建服務器從第一步起就共用這些內容,所以各步驟讀過的版本也不會再讀一遍。

若某次設置的預覽中列出了因無法與新遊戲配合而將被卸載的模組,選擇應用即會卸載它們。

命令失敗時,界面會顯示原因、可以採取的措施,以及工作區 .lip/logs 下失敗報告的路徑,然後繼續運行。

選擇文件夾或文件

凡是 lip 需要文件夾或文件的地方,都會打開文件夾瀏覽器,你不必手動輸入路徑:新服務器的文件夾和要添加的已有文件夾(工作區),要安裝的 ZIP 文件或文件夾(模組),以及要打包的文件夾、要寫入的文件和要查看的包(工具)。

瀏覽器從所選工作區的文件夾開始。它有一個路徑欄、所顯示文件夾的內容列表(先是 ..,然後是其中的文件夾,最後是可以選擇的文件,如果有的話),以及按鈕。

按鍵作用
↑、↓、PgUp、PgDn、Home、End在列表中移動。
Enter、→在文件夾上,打開它。在文件上按 Enter 選擇它。
←,或在 .. 上按 Enter返回上一級。盤符的頂層文件夾之上是盤符列表(Windows 上;在其他系統上頂層是 /)。
Tab、Shift+Tab在路徑欄、列表、文件名(要寫入文件時)和按鈕之間移動。
Esc在路徑欄中,回到列表;否則關閉瀏覽器,不作選擇。
  • 選擇此文件夾選擇所顯示的文件夾;保存選擇所顯示文件夾中、以列表下方輸入的名稱命名的文件。
  • **新建文件夾…**詢問名稱,並在所顯示的文件夾中創建該名稱的文件夾。
  • 你仍然可以在路徑欄中輸入或粘貼路徑,按 Enter 前往:絕對路徑,或相對於所顯示文件夾的路徑。

隱藏的文件夾和文件,以及名稱以點開頭的(例如 .lip),不會列出;要進入它們,請在路徑欄中輸入路徑。lip 無權讀取的文件夾會給出提示,此時只能返回上一級。

服務器運行期間

所選工作區的服務器運行期間,界面既不改動它的包,也不改動它的遊戲配置:

內容服務器運行期間
安裝、更新和卸載模組(模組、獲取模組)不可用。
設置或更改遊戲或加載器(工作區)不可用。
server.properties、allowlist.json、permissions.json(遊戲配置)只讀。
模組的配置文件(模組配置)可以修改和保存。如頁面所提示,修改可能要重啟服務器後才生效。

不可用的操作仍留在屏幕上,顯示為禁用,並附有原因:請先停止服務器。其他功能照常可用,例如瀏覽 levimc.org 上的模組、工具和設置。

無論服務器由誰啟動,都是如此:界面、lip run --managed,或另一個終端中普通的 lip run。這隻針對界面:命令 lip install、lip update、lip uninstall 和 lip setup 在服務器運行期間不會被拒絕(見運行服務器)。

GitHub 代理

lip 從 GitHub 下載 LeviLamina 和大多數模組。界面打開時,如果沒有設置 github_proxy(連空值都沒有,見配置),lip 會在後臺檢查能否連上 GitHub,期間你可以照常使用界面:它請求 https://github.com/LiteLDev/LeviLamina.git/info/refs?service=git-upload-pack,並最多等待 10 秒的應答。

GitHub 沒有應答時,界面會詢問如何連接它:

選項作用
使用代理在設置頁面中詢問 GitHub 代理的 URL 前綴,通過它發送同樣的請求來測試,可用時把它保存為 github_proxy。不可用時,你可以重新輸入,或仍然保存它。
直接連接把 github_proxy 設為空值:lip 直接連接 GitHub,不再檢查或詢問。
以後再說什麼也不改變;下次打開界面時,lip 會再次檢查。

lip 自身不推薦任何代理。你隨時可以在設置頁面中,或用 lip config 修改 github_proxy;設置之後,就不再進行檢查。

語言

界面有英文、簡體中文和繁體中文三種語言。在設置頁面中選擇一種,屏幕立即隨之改變。這個選擇就是用戶配置的 language 鍵(見配置):

值語言
en英文
zh-Hans簡體中文
zh-Hant繁體中文
shell
lip config set language zh-Hans
lip config delete language

沒有設置 language 時,界面跟隨系統:在 Windows 上是你的用戶的顯示語言;在其他系統上是環境變量 LC_ALL、LC_MESSAGES 和 LANG 中第一個指明瞭語言的。臺灣、香港或澳門的中文區域設置,或帶有 Hant 標記的,對應繁體中文,除非它帶有 Hans 標記;其他中文區域設置對應簡體中文。若是其他語言,界面使用英文。

只有界面自身的文字會被翻譯。命令輸出的內容,例如預覽的各行、消息和錯誤,與命令行中一樣以英文顯示。