建立 Minecraft 伺服器在 Linux 上

本章目的

可以多人一齊玩minecraft,自己搭建minecraft server也避免了各種的限制,如果把minecraft server端放在自己的VPS伺服器上,更可以24小時運行,隨時進出。 我是在Linux上搭建我的minecraft server,因為佔用的資料更少。

下載頁

  1. 開心版 截至2020-04-06版本為v4400,啟動器內可選擇任意minecraft版本,Windows/MacOS/Linux可用

  2. Windows Java offline版 64bit

  3. minecraft_server.1.15.2.jar 截至2020-04-06最新minecraft版本為1.15.2

wget https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar

(terminal下建議使用wget下載)

Client

先下載Client端,就可以先一人遊玩

正版(請支持正版)

https://multimc.org/

開心版(也就是破解版)

來源: https://teamshiginima.com/update/

可用系統: Windows / MacOS / Linux

Java

如果無法運行遊戲,請記得下載Java

Java官網 : https://www.java.com/zh_TW/

踩坑的經驗分享:

我在Windows 10上安裝java時等了超長的一段時候都無法成功安裝(顯示100小時以上),估計是因為國內網路關係,最終解決方法是去Java官網找Offline installer,俗稱的脫機版來安裝。

Java官網的Offline版(目前只有英文頁文才有) : https://java.com/en/download/manual.jsp

Server

官網下載網址: https://www.minecraft.net/en-us/download/server/

1. 下載server端minecraft

wget https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar

2. 在該檔案目錄下首次執行:

java -Xms800M -Xmx1024M -jar minecraft_server.1.15.2.jar nogui

-Xms800M記憶體初始佔用

-Xmx1024M記憶體最大佔用

這時候會出現了EULA協議同意的錯誤是正常的。

除此之外,還產生了EULA.txt , server.propertices , log目錄

3. 設定

A.同意EULA協議

編譯EULA.txt

eula=false

改成

eula=true

B.伺服器開放開心版玩家

如果您想讓使用盜版Minecraft的朋友能加入到伺服器的話,您可以在server.propertices 中將online-mode:true改為online-mode:false

編譯server.propertices

online-mode:true

改成

online-mode:false

C.設置管理員

在ops.txt內加入要作為admin的玩家名稱,該名稱的玩家在可以使用管理員指令

新增和編譯ops.txt

echo "minecraft_user_name" >> ops.txt

D.其他

檔名 功能
banned-ips.txt 你封鎖進入ip地址清單
banned-players.txt 你封鎖進入的玩家ID清單
ops.txt 伺服器管理員清單
server.properties 伺服器中的設定
white-list.txt 伺服器的白名單(即限制特定玩家進入)

其實大部分的配置都在server.propertices。

譬如想如果想更換地圖,修改server.properticeslevel-name=world就可以(world換成你地圖的名字)

更詳細的server.propertices內容

#此檔案創建時間

spawn-protection=16 //重生點保護(2x+1)格,OP 無視
max-tick-time=60000 //如果伺服器處理一個tick太久,判斷是崩潰,強制停止(單位毫秒),-1 停用
query.port=25565 //遠端控制的 port
generator-settings= //設定地圖生成條件(開特殊超平坦世界打的那一串)
force-gamemode=false //登入時要不要改遊戲模式
allow-nether=true //是否啟用地獄
enforce-whitelist=false //是否啟動白名單
gamemode=survival //預設遊戲模式
broadcast-console-to-ops=true //不明
enable-query=false //是否啟用遠端控制
player-idle-timeout=0 //掛機多少會被踢
difficulty=easy //難度(peaceful/easy/normal/hard)
spawn-monsters=true //是否生怪
broadcast-rcon-to-ops=true //不明
op-permission-level=4 //OP限權 決定可以用的指令
pvp=true //預設是否開啟同隊(無隊)玩家傷害
snooper-enabled=true //伺服器是否傳送除錯資訊給 Mojang
level-type=default //地圖型態 就是在創建世界時看到的(FLAT/LEGACY/DEFAULT)
hardcore=false //困難模式,不能復活,死後加入會直接被踢
enable-command-block=false //是否啟用指令方塊,玩地圖要開
max-players=20 //玩家數量上限
network-compression-threshold=256 //多少bytes的封包會被壓縮(-1關閉,0壓縮所有)
resource-pack-sha1= //材質包會加密
max-world-size=29999984 //邊境大小
rcon.port=25575 //遠端控制的port
server-port=25565 //伺服器用的port 同主機重複會自動關閉
server-ip= //伺服器ip 兩張網路卡/網路要改
spawn-npcs=true //是否生成村民
allow-flight=false //飛行會不會被踢,玩mod要改,跳上床有機率變成飛行被踢
level-name=world //主世界是哪個資料夾
view-distance=10 //預設視野距離
resource-pack= //強制使用的資源包
spawn-animals=true //是否生成動物
white-list=false //白名單是否開啟
rcon.password= //遠端控制用的密碼
generate-structures=true //是否生成結構
online-mode=true //是否與Mojang連線檢查玩家是否為正版,關了沒skin
max-build-height=256 //建築高度限制
level-seed= //種子碼
prevent-proxy-connections=false //無作用
use-native-transport=true //給 Linux 系統的優化,不用改
motd=A Minecraft Server //伺服器的名稱
enable-rcon=false //是否啟動遠端控制

4. 啟動minecraft伺服器

java -Xms800M -Xmx1024M -jar minecraft_server.1.15.2.jar nogui

等了大概3~5分鐘 看到這出現這樣表示server正常運作

[14:33:16] [Server-Worker-1/INFO]: Preparing spawn area: 91%
[14:33:16] [Server-Worker-1/INFO]: Preparing spawn area: 92%
[14:33:17] [Server-Worker-1/INFO]: Preparing spawn area: 94%
[14:33:18] [Server-Worker-1/INFO]: Preparing spawn area: 95%
[14:33:18] [Server-Worker-1/INFO]: Preparing spawn area: 96%
[14:33:19] [Server-Worker-1/INFO]: Preparing spawn area: 98%
[14:33:19] [Server thread/INFO]: Time elapsed: 57301 ms
[14:33:19] [Server thread/INFO]: Done (128.443s)! For help, type "help"

5. 服務常駐

因為開啟了minecraft會一直佔用當前的session,Ctrl+C就會關閉minecraft伺服器,想讓minectaft伺服器常期開著有很多方法:

A. 譬如官方的做一個啓動腳本

B. 我的方法就懶惰一些,什麼都不做,就放在tmux去運行

  1. 下載tmux
    apt install tmux
    
  2. 開啟tmux
    tmux
    
  3. 在tmux上運行minectaft
    java -Xms800M -Xmx1024M -jar minecraft_server.1.15.2.jar nogui
    
  4. 關掉ssh視窗

    由於是跑在tmux,所以斷掉ssh連線並不會影響正在tmux上執行的session

  5. 開啟ssh新視窗並回到tmux
    tmux attach
    

6.連線

連線方式很簡單,就是選擇多人遊戲,然後輸入你server目前的Public IP

如何查Pulibc IP?在server端上:

curl ifconfig.me

7.關於連線失敗

其實我沒有遇到這部分的問題,不過也記錄一下好讓自己有個大致方向

A. 防火牆問題

開啟指定port (minecraft預設使用25565 port)

firewall-cmd --zone=public --add-port=25565/tcp --permanent
iptables -I INPUT -p tcp --dport 25565 --syn -j ACCEPT

(方法未經確認,主要是看你的伺服器用什麼作為防火牆,上面是linux用iptables的方式)

其實主要的關鍵就是把25565 port打開就是了

B. 設定問題

檢查server.properties,主要檢查下面2個地方

server-ip=server-ip= #我這行是空的也沒問題
server-port=25565

donate