Minecraft Carpet Mod 假人指令:離線時農場繼續運作,不用回床也能跳過夜晚

摘要

Carpet Mod 能在 Fabric 伺服器叫出假人,也就是不用連線、卻會被伺服器當成玩家的角色。所有玩家離開後,農場所在的區塊會卸載,但只要留一個假人在農場旁,農場就會繼續運作。調低睡覺比例後,假人也能代替我們上床跳過夜晚。

文章目錄

我們離線後,Minecraft 伺服器上的農場就會停止,因為所有玩家離開後,農場所在的區塊會卸載,伺服器也會暫停。只要用 Carpet Mod 叫出一個假人留在農場旁,區塊與伺服器就會繼續運作。我們在外面挖礦而不想跑回床上時,假人也能代替我們上床跳過夜晚。

文中的指令都在伺服器視窗輸入,前面不用加斜線。Carpet Mod 的指令文件寫的是遊戲內的 /player,在遊戲裡輸入時要加上 /。

在 Fabric 伺服器安裝 Carpet Mod

Carpet Mod 要裝在 Fabric 伺服器上,而且版本要和 Minecraft 相同,本文用的是 Minecraft 26.3、Fabric Loader 0.20.1 與 Carpet Mod 26.3+v260915。Fabric 的下載頁提醒大多數模組要另外安裝 Fabric API,但 Carpet Mod 不需要。

既有的原版伺服器可以直接換成 Fabric,world、server.properties、ops.json 與 whitelist.json 都不用動。如果還沒有伺服器,就新建一個空資料夾,Java 25 的安裝方式可以參考 Java 原版伺服器架設。

Fabric 的 launcher 要從伺服器下載頁下載。我們在「Minecraft Version」選擇 26.3,其他兩個選項維持預設,再按下「Executable Server (.jar)」:

Fabric 的伺服器下載頁,Minecraft Version 選擇 26.3,Fabric Loader Version 是 0.20.1,Installer Version 是 1.1.2,下方是 Executable Server (.jar) 按鈕

下載 launcher 後,照下面的步驟安裝:

  1. 如果是既有的伺服器,就先輸入 stop 停止伺服器,再把整個資料夾複製一份當作備份。

  2. 把下載的 jar 檔放進伺服器資料夾。

  3. 用這個 jar 檔啟動伺服器。既有的伺服器只要把 start.bat 裡的啟動指令改成下面這一行,新資料夾則在資料夾裡開啟終端機並輸入同一行:

    1java -Xmx2G -jar fabric-server-mc.26.3-loader.0.20.1-launcher.1.1.2.jar nogui
    
  4. 第一次啟動時,launcher 會下載 Minecraft 伺服器並建立 mods 資料夾。新資料夾會印出 You need to agree to the EULA 後停止,這時要把 eula.txt 裡的 eula=false 改成 eula=true。既有的伺服器會直接啟動,看到 Done 後輸入 stop 停止。

  5. 從 Modrinth 下載 fabric-carpet-26.3+v260915.jar,放進 mods 資料夾,放好後的樣子如下圖。

  6. 用相同的指令再次啟動伺服器。

檔案總管的 mods 資料夾,裡面有 fabric-carpet-26.3+v260915.jar

看到 Done 後,在伺服器視窗輸入 carpet,畫面顯示 Carpet Mod version: 26.3+v260915 就代表模組已經載入。想換回原版時,把啟動指令的 jar 檔改回 server.jar 即可,世界也能正常開啟。

叫出與移除假人

伺服器啟動後,在伺服器視窗輸入下面的指令,就能在農場旁叫出一個生存模式的假人。名稱 afk_chunk_bot 可以換成自己想要的名稱,座標 120 -60 40 則要換成農場旁的地面座標:

1player afk_chunk_bot spawn at 120 -60 40 facing 0 0 in overworld in survival

這條指令可以拆開來看,通常只要改名稱和座標:

片段 意思
afk_chunk_bot 假人的名稱
at 120 -60 40 假人出現的座標
facing 0 0 水平與垂直的視角,不用改
in overworld 主世界,在地獄時寫成 in the_nether
in survival 遊戲模式,前面一定要寫維度

伺服器視窗出現 joined the game 後,就能用 list 確認假人在線:

伺服器視窗先印出 Couldn’t find profile with name 與 joined the game,list 顯示 1 位玩家 afk_chunk_bot,Pos 是 120.5、-60、40.5,playerGameType 是 0

上圖的 Couldn't find profile with name 代表這個名稱沒有對應的 Minecraft 帳號,它的後面還會接一段 Exception,這段訊息不用理會,假人仍會正常出現。真人連線時,假人看起來就和一般玩家相同,頭上也會顯示名稱:

遊戲畫面的左邊站著一個假人,頭上顯示名稱 B,遠方是超平坦世界的草地與動物

不再需要假人時,輸入 player afk_chunk_bot kill,伺服器視窗就會顯示 left the game。移除時背包不會掉落,下次用相同的名稱叫出來時物品都還在,但座標不會保留。伺服器重新啟動後,假人不會自動回來,要再輸入一次 spawn 指令。

假人的動作指令

假人叫出來後,就能用 player 假人名稱 動作 操作它,常用的動作如下:

動作 假人的行為
move forward、move backward 持續朝該方向走,直到輸入 stop
stop 停止移動、攻擊與使用
sprint、sneak 開始疾跑、開始潛行
look north、look at 120 -60 45 看向方位或指定座標
attack once、attack continuous 左鍵點一次、持續按住左鍵
attack interval 20 每 20 tick,也就是每秒左鍵點一次
use once、use continuous、use interval 20 用同樣的三種方式按右鍵
hotbar 2 切換到快捷欄的第 2 格

例如讓假人每秒攻擊一次面前的目標時,就依序輸入下面兩行,要停止時再輸入 stop:

1player afk_chunk_bot look at 120.5 -59.2 42.5
2player afk_chunk_bot attack interval 20

掛機時的區塊與遊戲模式

假人在線時,周圍的區塊會和真人在旁邊時一樣持續運作,不用另外設定 forceload,伺服器也不會因為沒有玩家而暫停。農場實際運作的範圍由 server.properties 的 simulation-distance 決定,預設值是 10 個區塊,因此農場要放在假人約 160 格以內。

想確認伺服器還在運作時,可以隔幾秒輸入兩次 time query gametime,數字有增加就代表伺服器沒有暫停。

叫出假人時要選擇遊戲模式,這會影響怪物的生成與假人的存活:

遊戲模式 漏斗與作物 自然生成怪物 被怪物包圍時
生存 運作 會 會被打死並離線
創造 運作 會 生命值維持 20
旁觀 運作 不會 生命值維持 20

已經叫出的假人可以用 gamemode spectator afk_chunk_bot 切換模式。生存模式的假人被打死時會直接離線,周圍的區塊就會跟著卸載,因此農場要生成怪物時,用創造模式比較安全。

假人與多人睡覺

新版的睡覺比例規則是 players_sleeping_percentage,其他規則的新舊名稱可以參考 Minecraft gamerule 新舊名稱對照。這個規則的預設值是 100,也就是所有在線玩家都要上床。

醒著的假人也會被算進在線玩家,因此掛機的假人會讓其他玩家無法靠睡覺跳過夜晚。旁觀模式的假人則不會被計入:

在線玩家 比例 睡著的人數 夜晚
2 人 100 1 不跳過
2 人 50 1 跳過
2 人 0 1 跳過
3 人 50 1 不跳過
3 人 0 1 跳過
3 人 50 2 跳過
2 人,其中 1 人旁觀 100 1 跳過

依這些結果推算,需要上床的人數是在線玩家乘上比例後無條件進位,比例是 0 時仍要有 1 人上床。

掛機的假人導致夜晚無法跳過時,可以把假人切換成旁觀模式,但旁觀的假人不會生成怪物。農場要生成怪物時,就把比例調低。這個比例會套用到所有玩家,例如輸入 gamerule players_sleeping_percentage 0 後,任何一個人上床都會跳過夜晚。

如果我們在外面挖礦而不想回床上,也可以讓假人代替我們上床。下面的步驟裡,假人站在床前兩格:

  1. 輸入 gamerule players_sleeping_percentage 0,讓一個人上床就能跳過夜晚。
  2. 輸入 player afk_sleep_bot spawn at 120 -60 40 facing 0 0 in overworld in survival,把假人叫到床邊。
  3. 天黑後輸入 player afk_sleep_bot look at 120.5 -59.7 42.5,讓假人看向床。這裡的座標要換成床的位置。
  4. 輸入 player afk_sleep_bot use once,讓假人上床。
  5. 輸入 data get entity afk_sleep_bot SleepTimer,數字大於 0 就代表假人已經睡著。

SleepTimer 維持 0 時,代表假人沒有上床,可能的原因是還沒天黑、視角沒有對到床,或是附近有怪物。假人醒來後視角會改變,因此下一晚要再輸入一次 look at 與 use once。下圖是兩個玩家在線、比例設成 50 的結果,time query time 從半夜的 18000 跳到 24085,代表夜晚已經跳過:

players_sleeping_percentage 設成 50,時間設成 18000,假人 look at 與 use once 之後 SleepTimer 是 20,約 9 秒後 time query time 顯示 24085

想恢復原本的規則時,輸入 gamerule players_sleeping_percentage 100 即可。

假人對伺服器的影響

假人會增加伺服器每個 tick 的工作量,分散在不同地方時增加得最明顯。在伺服器視窗輸入 tick query 就能看到平均耗時,這個數字超過 50 ms 時,伺服器就會變慢,這時可以用 spark 找出延遲的來源。在沒有農場的超平坦世界,平均耗時如下:

假人的配置 平均耗時
沒有假人 0.3 ms
1 個生存模式 4.7 ms
5 個創造模式,分散各地 19.4 ms
10 個創造模式,分散各地 37.8 ms

假人預設只有 op 能叫出,這由 Carpet Mod 的 commandPlayer 規則決定,輸入 carpet commandPlayer 就能看到目前的值。

實測紀錄

測試環境是 Windows 11、i7-12700、Java 25 與 Minecraft 26.3,伺服器的記憶體上限是 2 GB,除了換回原版的測試,都使用超平坦世界。睡覺比例測試裡醒著的玩家多半也是假人,比例 0 那組則是我用遊戲連線,加上兩個假人。tick query 測試時這台電腦也有其他伺服器在執行,數字只用來比較不同配置。沒有玩家與只有 forceload 時,遊戲時間會停止,假人在線時則持續增加。移除假人約 33 秒的期間,漏斗只多送了 2 個圓石,假人在線時 30 秒則送了 90 個。

總結

留一個假人在農場旁,區塊與伺服器就會在我們離線時繼續運作,調低睡覺比例後,假人也能代替我們上床跳過夜晚。實測中假人在線時遊戲時間持續增加,離開後漏斗幾乎停止。

接著可以做什麼

上一篇Minecraft Pixelmon 伺服器架設:和朋友在同一個世界玩寶可夢模組Games下一篇Minecraft Chunky 指令與預先生成:多人跑圖時地圖跟得上玩家Games
Ted Liou

Ted Liou

現役軟體工程師,Unity、AI 技術開發經驗分享與諮詢。