教學:架設Java版伺服器

出自Minecraft Wiki
跳至導覽 跳至搜尋

  本教學介紹的是架設Java版伺服器。關於基岩版伺服器的架設,請見「Tutorial:架設基岩版伺服器」。
本文章所述內容僅適用於Java版

本教學將通過手柄手的方式,一步步地幫助你建立屬於你自己的Java版伺服器。在本教學中,我們使用Mojang發佈的供玩家免費下載的伺服器端程式,該程式在大部分作業系統(比如Windows、Mac OS、GNU/Linux和BSD)上都可以執行。

更多有關Minecraft伺服器的資訊,請見伺服器

注意:

  • 架設伺服器會花費一些時間,並且需要一些技術知識。如果你沒有基礎的電腦和網絡技能,請不要嘗試架設伺服器。最好的選擇可能是在網絡上尋找有關於如何設定伺服器的教學(而不是這裏)。
  • 一台Minecraft伺服器不需要一台高端機器,2核心的CPU足夠開一個4、5人的小型伺服器,但需要注意的是如果你想提高伺服器效能,你需要的是更新的CPU架構和更高的主頻,而不是更多的核心數量(例如一顆在2012年推出的有24核心但只有1.1GHz主頻的至強處理器效能並不比最新的但核更少的處理器強大)。
  • 如果你想長期開一個中大型伺服器,Intel的酷睿和AMD的銳龍並不是明智之選,這些民用平台的處理器一般穩定性和拓展功能較差,且不支援穩定的ECC記憶體(DDR5除外),你需要的是Intel的至強W系列及至強可拓展處理器,或是AMD的執行緒撕裂者或霄龍處理器,這些適用於工作站或伺服器的處理器一般穩定性強,但主頻較低,在挑選時應選擇較新且主頻(或者睿頻)在3GHz以上的處理器,且記憶體應在36GB以上且支援ECC。
  • 只要你的電腦效能足夠強勁,你可以在一台電腦上同時架設伺服器並在該伺服器上進行遊戲。
  • 對於很多玩家遊玩的伺服器,不建議將伺服器連線到無線網絡(WLAN,尤其是WWAN),最好還是把伺服器接入到有線網絡,例如以太網。
  • 如果你只是想聯機玩遊戲,而不是自己開設伺服器。可以考慮在Minecraft伺服器列表中找到你想玩的伺服器。
  • 如果使用遊戲中設定內的區域網絡遊戲需要外網或者內網貫穿亦或者端口映射,如果聯機主機可以連線你的WLAN,可以直接輸入位置連線而不用使用更複雜的操作讓其他內網連線到你的伺服器(使用端口映射對裝置有一定危險性)位置的正確填寫x.x.x.x:端口
  • 如果你不想在家中開設伺服器,請查看Minecraft論壇上的伺服器託管區。這樣的話,你一般需要每月支付一定的費用(免費的託管服務很少,且一般無法保證品質),但是這樣也免去了你維護伺服器的煩惱,可以保持伺服器一直線上,玩家可以隨時進入伺服器遊玩。也可以購買VPS並在上面搭建伺服器。

註:也有一些其他的定製伺服器軟件,大部分大型伺服器都使用這些軟件,但是這些軟件並不受Mojang官方支援。

警吿[編輯 | 編輯原始碼]

注意

雖然我們鼓勵探索和學習,但是請知曉沒有充分認知到風險就執行伺服器軟件將會使你的系統更可能面臨潛在的安全問題。如果你不確定的話,請務必採取相應措施以及尋求幫助指導。

鑑於你正在一步步地開啟你自己的伺服器,你應該要注意所有可能出現的危險。執行下面的所有教學應該不會導致你的系統出錯,但是由於本wiki是所有人都可編輯的,且我們並不知道你的系統設定與軟件執行情況,我們並不能保證你的系統一定不會出現問題。

為了確保你根據下面的教學架設伺服器而不會出現問題,我們強烈推薦你至少要知道以下的內容:

  • 命令列的使用以及編輯各種設定檔
  • 基本的網絡術語(IPDHCP端口等)
  • 你的系統設定
  • 你的網絡設定
  • 你的路由器設定(如果你想要其他人通過互聯網連線到你的伺服器)

安全建議[編輯 | 編輯原始碼]

在架設伺服器之前,建議遵循以下的安全實踐:

  • 只使用必要的權限執行Minecraft伺服器。sudo超級用户的權限過大,很可能導致安全錯誤
  • 關閉未使用的端口,並且只在需要的時候開放端口。這是抵禦外部攻擊的有效方式。只開放必要的端口,例如Minecraft伺服器監聽的端口。當不再使用端口後,應當及時關閉。
  • 如果你使用SSH,必須設定某種認證方式,如密碼或密鑰。建議使用密鑰認證身份,並且將密鑰的私鑰妥善保管。絕不要對外分享你的私鑰!
  • 如果可能,使用白名單來控制誰能訪問伺服器。白名單可以阻止陌生人隨意進入伺服器,並且阻止常見的惡意破壞。白名單可以通過whitelist.json/whitelist設定。
  • 妥善設定你的網絡防火牆
  • 及時更新伺服器軟件,同時不要使用包含已知錯誤的版本。
  • 定期備份伺服器,防止數據丟失或損壞。
  • 檢查你的伺服器插件和mod版本,有錯誤時及時更新。
  • 在其他伺服器上測試插件和mod,而不要使用你的主伺服器來測試。
  • 對個人或私有伺服器,儘可能只將伺服器開放至區域網絡。

Java[編輯 | 編輯原始碼]

Java是一種靜態類型的編程語言,用於編寫在Java虛擬機器(JVM)上執行的程式。JVM支援多種平台,這使得開發者只需編寫一次程式碼,就可以在所有支援JVM的平台上執行該程式。進一步了解

此章節用於回答一些經常被問到的關於Java的問題,也會指導你作出有關Java的決定。

OpenJDK與OracleJDK的區別[編輯 | 編輯原始碼]

OpenJDK與OracleJDK非常相似。OpenJDK是對Java的一種官方的開源參考實現。OpenJDK是一個開原始碼庫,幾乎所有其他JDK都基於此構建。除了打包方式、許可證和一些表面上的差別外,OpenJDK與OracleJDK是一樣的

請注意:如果用於商業和生產用途,OracleJDK的OTN(Oracle技術網絡)構建版本就需要一份付費的訂閱才能使用。這似乎包含了執行Minecraft伺服器的情況,即便是非盈利目的的。Oracle會提供他們自己的OpenJDK構建版,但是不會打包成那種易於安裝的安裝包格式。

JRE與JDK的區別[編輯 | 編輯原始碼]

JRE指的是「Java執行環境」。JDK指的是「Java開發工具包」。JRE被設計用來執行Java程式,而JDK則是被設計用來開發Java程式的。JDK中包含了JRE,而JRE中包含了JVM。這意味着如果你已經有了JDK,那樣也同時有了JRE和JVM。原版Minecraft不需要JDK,但是有一些插件可能需要。

Java版本要求[編輯 | 編輯原始碼]

某些版本的Java版伺服器要求特定的最低Java版本。以下是Minecraft伺服器的一些主要最低Java版本要求:

  • 1.1217w13a)開始,執行Minecraft伺服器的最低要求是Java 8。
  • 1.1721w19a)開始,執行Minecraft伺服器的最低要求是Java 16。
  • 1.181.18-pre2)開始,執行Minecraft伺服器的最低要求是Java 17。
  • 1.20.524w14a)開始,執行Minecraft伺服器的最低要求是Java 21,且作業系統要求為64位元。

請注意,舊版的Minecraft可以執行在較新的Java版本上,例如Minecraft 1.16可以執行在Java 17上,Minecraft 1.18可以執行在Java 20上,反之亦然。

雖然伺服器可以執行在舊版本的Java上,但建議使用最新版本,因為新版本可能帶來更好的效能、更高的安全性和更少的錯誤。

無頭Java[編輯 | 編輯原始碼]

無頭Java實際上是普通Java的刪減版。它去除了對圖形界面與鼠標、鍵盤方面的支援。無頭Java通常被用在伺服器或其他不需要圖形界面的場合。

在Debian上,有幾種Java虛擬軟件包被使用。這些軟件包都支援Java執行環境,且具有以下兩種類型:無頭的(沒有圖形界面)以及普通的。

Java安裝[編輯 | 編輯原始碼]

Windows[編輯 | 編輯原始碼]

執行Minecraft伺服器需要Java執行環境(JRE,或者直接叫Java)。考慮到安全性,建議使用最新版的Java。你可以通過以下方法之一檢查是否為最新版:

  • 打開Windows控制面板,找到Java(可能在「程式」類別中),然後點擊「立即升級」。
  • 下載Java Uninstall Tool。該軟件會檢查你安裝的 Java 版本,並在必要時刪除舊版本的 Java。
  • 打開命令提示符,輸入java -version。如果顯示出了版本號,可以與Oracle Java技術細節上的資訊對比取得最新版本號。

如果你沒有安裝Java或你的Java版本較舊,你可以下載Adoptium 的 OpenJDK Temurin微軟的 OpenJDK

Winget[編輯 | 編輯原始碼]

Winget是Windows官方的軟件包管理工具,用於從Microsoft Store和Winget倉庫安裝程式。它在Windows 10和Windows 11中預設包含。

你可以使用Winget安裝多個OpenJDK發行版。由於Minecraft伺服器只需要JRE,因此安裝完整的JDK包是可選的:

  • winget install EclipseAdoptium.Temurin.21.JRE 安裝Adoptium Temurin 21 JRE。
  • winget install EclipseAdoptium.Temurin.8.JRE 安裝Adoptium Temurin 8 JRE。
  • winget install Microsoft.OpenJDK.21 安裝微軟構建的OpenJDK 21。微軟構建的OpenJDK 8 版本不可用。

macOS[編輯 | 編輯原始碼]

請注意,Minecraft伺服器在macOS 10.4及更早版本上可能無法正常執行,嚴重可能導致系統崩潰。

  • 打開終端。
  • 執行java -version來檢查是否已安裝Java。
  • 如果沒有安裝Java,或需要安裝其他特定版本,可以通過Homebrew安裝:
    • 首先執行/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"來安裝Homebrew。
    • 然後執行brew tap homebrew/cask-versions準備安裝特定版本的OpenJDK。
    • 執行brew install --cask temurin@21安裝Adoptium Temurin 21。
    • 執行brew install --cask temurin@8安裝Adoptium Temurin 8。

Linux 發行版[編輯 | 編輯原始碼]

Linux存在許多不同的變體,稱為發行版(distro)。其中一些發行版專門設計或更適合用於執行伺服器。如果你正在部署專用伺服器,建議使用以下發行版之一。

一般來説,Linux對開源程式更為友好。所以,請優先考慮使用開源程式,如OpenJDK。

Ubuntu、Raspbian、基於Debian的系統[編輯 | 編輯原始碼]

可以使用apt安裝OpenJDK:

  • 安裝前,建議執行sudo apt update更新軟件包列表。
  • sudo apt install openjdk-21-jdk-headless 安裝OpenJDK 21。
  • sudo apt install openjdk-8-jdk-headless 安裝OpenJDK 8。

由於Debian的軟件較老,目前其軟件倉庫中不包含OpenJDK 21,因此需要手動從此處下載deb包並安裝。

去掉-headless部分的命令將安裝Java的GUI元件。

Fedora、AlmaLinux、Rocky Linux、CentOS、基於RHEL的系統[編輯 | 編輯原始碼]

可以使用dnf安裝OpenJDK:

  • sudo dnf install java-21-openjdk-headless 安裝OpenJDK 21。
  • sudo dnf install java-1.8.0-openjdk-headless 安裝 OpenJDK 8。

去掉-headless部分的命令將安裝Java的GUI元件。

openSUSE[編輯 | 編輯原始碼]

可以使用zypper安裝 OpenJDK:

  • sudo zypper install java-21-openjdk 安裝OpenJDK 21。
  • sudo zypper install java-1_8_0-openjdk 安裝OpenJDK 8。

推薦使用openSUSE Leap,而非捲動發行的Tumbleweed,以確保伺服器穩定性。

Arch Linux[編輯 | 編輯原始碼]

OpenJDK發行版可以在Arch Linux倉庫中找到。

可以使用pacman安裝 OpenJDK:

  • pacman -S jre21-openjdk-headless 安裝OpenJDK 21。
  • pacman -S jre8-openjdk-headless 安裝OpenJDK 8。

去掉-headless部分的命令將安裝Java的GUI元件。

如果遇到問題,建議參考官方Arch Linux Wiki

Gentoo[編輯 | 編輯原始碼]

執行emerge --ask virtual/jdk。這將根據你的設定檔安裝OpenJDK。

有關舊版本Java的資訊,請參考Gentoo Wiki

Solus[編輯 | 編輯原始碼]

執行sudo eopkg install openjdk-21安裝OpenJDK 21。

有關舊版本Java的資訊,請參考Solus 說明中心

其他發行版[編輯 | 編輯原始碼]

請查看你所使用的發行版的文件,了解如何安裝OpenJDK。

或者,你可以直接訪問Java官網,下載適用於Linux的Java包。大多數發行版都可以使用這些包(32位元或64位元)。網站上提供了不同包的安裝説明。

如果安裝過程中提示輸入密碼,請輸入你的密碼。如果詢問「Is this OK [Y/N]」,請輸入Y並按下↵ Enter

FreeBSD[編輯 | 編輯原始碼]

在FreeBSD上可以通過pkg[1]安裝OpenJDK:

  • pkg install openjdk21 安裝OpenJDK 21[2]
  • pkg install openjdk8-jre 安裝僅JRE的OpenJDK 8[3]

安裝OpenJDK後,可能會看到OpenJDK需要fdescfsprocfs。為滿足這些要求,你可以執行以下命令:

  • mount -t fdescfs fdesc /dev/fdfdescfs掛載到/dev/fd
  • mount -t procfs proc /procprocfs掛載到/proc

這些更改在系統重啟後不會永久生效。要使其永久生效,你需要將這些掛載點加入到/etc/fstab檔案中。使用文字編輯器(如nano或vi)打開該檔案,並在/etc/fstab中插入以下行:

fdesc	/dev/fd		fdescfs		rw	0	0
proc	/proc		procfs		rw	0	0

最後,為確保可以立即使用新的Java二進制檔案,請在命令列中執行rehash

如果你想使用ports安裝OpenJDK,請參考此文章以取得更多資訊。pkg提供的軟件包是ports的編譯二進制檔案[4]

Docker[編輯 | 編輯原始碼]

Docker是一個免費的基於容器的平台,可以使不同的Minecraft伺服器實例和主機相互隔離開來。Docker本身和其容器倉庫的所有者與Mojang沒有任何隸屬關係。

取得Docker(適用於Linux、Mac和Windows)[編輯 | 編輯原始碼]

請參閱Docker安裝文件

Docker鏡像[編輯 | 編輯原始碼]

  1. 下載鏡像:執行docker pull sirplexus/minecraft-server-standalone:latest
  2. 設定容器:開放端口25565,分配1G記憶體,並命名為「MyServer」:docker container create --publish 25565:25565/tcp --name "MyServer" --env RAM=1G sirplexus/minecraft-server-standalone
  3. 啟動容器:docker container start MyServer

更新Docker鏡像[編輯 | 編輯原始碼]

更新minecraft-server-standalone鏡像:執行

docker pull sirplexus/minecraft-server-standalone:latest

在Synology Diskstation上使用Docker-Minecraft[編輯 | 編輯原始碼]

注意

此方法適用於自託管的Minecraft世界,而不是獨立版本。你需要從官方網站下載server.jar檔案。

Docker是許多新Synology Diskstation的「附加軟件包」之一,許多裝置足以執行至少一個Minecraft實例。

在啟動Docker之前,你需要先建立一個檔案夾,裡面包含你想啟動的Minecraft版本,並將其重新命名為「server.jar」,以及一個eula.txt檔案。

在Synology Diskstation上設定Minecraft伺服器的方法如下:

  1. 在Diskstation上安裝並打開Docker。
  2. 在Registry中搜尋「sirplexus」,找到「sirplexus/minecraft-server」。右鍵點擊並選擇「Download this image」。
  3. 下載完成後,你可以在鏡像列表中找到該鏡像。點擊「Laungh」。
  4. 點擊「Advanced settings」,進入「Volume」標籤。加入之前建立的檔案夾,並將「mound path」設定為「/srv/minecraft」。
  5. 進入「Port Settings」標籤,分配一個「Local Port」。你可以通過這個端口連線到你的伺服器。
  6. 點擊「Apply」,「Next」,然後再次點擊「Apply」以完成容器設定。

現在,你已經啟動好了Minecraft伺服器。IP位址是Diskstation的IP位址,端口號是你在第5步中設定的。

執行Minecraft伺服器[編輯 | 編輯原始碼]

執行Minecraft伺服器的基本步驟是安裝Java、執行伺服器、接受EULA(使用者授權合約),然後再次執行伺服器。當你安裝了java並打開命令列後,後續的內容基本上都是一致的。

  • 確認你的CPU、記憶體和硬盤空間滿足伺服器需求
  • 安裝Java。不同的作業系統步驟不同,請參照下方相關內容。
  • 官網下載伺服器端。
  • 為下載下來的jar檔案新增一個檔案夾,並把它放進去。這個檔案夾會儲存所有的設定和世界存檔檔案,所以不要在「下載」檔案夾中直接執行。
  • 打開一個命令提示符或一個終端界面。
  • 檢查Java是否可用。輸入java -version就可以。
  • 輸入cd(切換工作目錄),切換到你存放伺服器端jar檔案的檔案夾中。如果你打開了一個圖形界面,也可以把這個檔案夾拖動到終端視窗中。
  • 輸入java -jar minecraft_server.jar --nogui用來首次啟動伺服器(如果你的jar檔案名不是「minecraft_server.jar」,把它換成實際的檔案名即可)。
  • 接受EULA。首次執行伺服器時,會自動生成一個eula.txt。使用文字編輯器(如Windows中的記事本,Linux中的vim)打開eula.txt,將檔案中的eula=false改為eula=true。這表示你已閱讀並理解了EULA的內容,並會在使用伺服器端時遵守它。如果不這樣做,伺服器會在你嘗試啟動時立即關閉。
  • 現在伺服器已被設定好了。你可以再次使用java -jar minecraft_server.jar啟動伺服器了。如果你不想讓伺服器顯示圖形界面,在前面的命令後面添上一個空格和--nogui即可(有些人覺得這樣做會讓伺服器更快)。你也可以使用下面所列出的一些選項。

現在,你應該已經啟動了一個基本的伺服器了。更多關於設定伺服器的內容,參見設定環境。關於如何編寫啟動腳本的內容,參見編寫腳本用於啟動伺服器

Java選項[編輯 | 編輯原始碼]

Java選項應加入在命令列中的java-jar之間,或在啟動腳本中。

記憶體限制
對執行Minecraft伺服器來説,最重要的事情莫過於記憶體。你可以使用-Xmx選項設定伺服器能被允許使用的記憶體量。通常-Xmx2G(最大記憶體2GB)對有5名玩家且使用預設模擬距離(5×212 = 2205個區塊)的家庭伺服器來説足夠。但應根據實際設定調整。如果設定值太低,會導致垃圾回收頻繁停止。如果設定值太高,在Java 8上垃圾回收可能會持續過長時間。
-Xms(初始化記憶體大小)只影響啟動效能。但是你也可以設定它。如果你的伺服器還執行其他程式,將其設定為最大記憶體大小的1/4(例如,-Xms512M),以確保良好的平衡:JVM在不需要這麼多記憶體時,可以將部分記憶體歸還給作業系統(雖然這個歸還過程非常保守,長期效能影響較小)。如果伺服器只執行Minecraft,可以將其設定為與最大記憶體大小相同,以停用堆縮放,從而獲得最快的啟動速度。
對於一些版本的JRE,可以使用「soft max heap size」(-XX:SoftMaxHeapSize=1G)。JRE將嘗試只使用那麼多的記憶體,但如有必要,它將超過-Xmx設定的最大值。 如果你在伺服器上執行許多東西,這可能會很有用。
GC
在Java 9及更高版本中,Minecraft使用的預設垃圾回收器是G1GC(Java 8中也有,但預設未啟用)。官方Minecraft啟動器使用的選項包括:-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M。當然,還有一些更好的選項,如brucethemoose的Minecraft效能選項Aikar的垃圾回收器選項
在Java 14及更高版本中還可以使用ZGC。它幾乎沒有延遲,停頓時間僅在毫秒級別。只需使用-XX:+UnlockExperimentalVMOptions -XX:+UseZGC,無需其他與GC相關的選項。除了-Xmx之外,調節選項不如其他GC設定那麼重要(因為預設設定已經足夠好),但如果願意犧牲一些記憶體來減少延遲,可以嘗試使用-XX:-ZProactive
VM
如果你的伺服器執行在64位元的Solaris系統上,並且使用了64位元Java,請加入-d64

總之,一個合理的選項組合可以簡化為-Xmx4G -Xms1G -XX:SoftMaxHeapSize=3G -XX:+UnlockExperimentalVMOptions -XX:+UseZGC。雖然通過複雜的選項可以進一步最佳化效能,但通過修改伺服器端可以獲得更大的效能提升。實際上,所有關於伺服器效能的深入討論(如Aikar和brucethemoose)都假設進行了一定程度的修改。

Minecraft選項[編輯 | 編輯原始碼]

關於伺服器端JAR檔案的選項要寫在命令中的-jar minecraft_server.jar後面。你可以在後面加上--help查看所有可以被傳遞給伺服器端的參數。下方列出了一些可用的命令列選項。

  • --bonusChest
    • 在初次生成世界時,是否生成獎勵箱
  • --demo
    • 指定伺服器是否在演示模式下執行(給玩家顯示一個「演示版」彈出資訊。且演示結束後,玩家不能破壞、放置方塊或者吃東西)。
  • --eraseCache
    • 清除光照快取等。與最佳化單人遊戲世界時的選項相同。
  • --forceUpgrade
    • 強制升級所有區塊到伺服器目前的版本(單人遊戲世界也可用)。
  • --help
    • 顯示此幫助。
  • --initSettings
    • 只初始化server.propertieseula.txt,然後退出。
  • --nogui
    • 啟動伺服器時不顯示圖形界面。
    • 你仍然可以與你的伺服器互動,但如果啟用,必須使用cmd或終端。
    • nogui與此選項的作用相同,主要用於向後相容非常舊的伺服器版本,但更加推薦使用--nogui,因為它的格式與其他選項更一致。
  • --port <整數>
    • 指定伺服器監聽的端口,無論在server.properties中設定的端口值是什麼(預設值為-1)。
  • --safeMode
    • 載入存檔時只使用原版數據包。
  • --serverId <字串>
    • 為伺服器指定一個伺服器ID。
  • --singleplayer <字串>
    • 指定伺服器以離線模式執行(<字串>需要指定一個值,但此值的具體用途未知,可能是由Mojang內部所使用的)。
  • --universe <字串>
    • 指定查找world檔案夾的位置(預設為.,即目前目錄)。
  • --world <字串>
    • 指定一個level.dat所在檔案夾的名稱。
  • --jfrprofile
    • 初始化Java Flight Recorder。僅1.18及以上版本可用。
舊命令列選項

一些選項能在舊版中使用,但是已在新版本中被移除或被替換了。

  • -o true
    • 使伺服器以線上模式執行,只有經過認證的用户才能進入(新版本中,將server.properties中的"online-mode"改為"true"等同於此選項)。

示例命令列[編輯 | 編輯原始碼]

  • 執行一個名稱為「cold」的存檔檔案夾,監聽在1337端口上且最大1GB記憶體的伺服器:java -Xmx1G -jar minecraft_server.jar --port 1337 --nogui --world cold

使用screen工具執行伺服器端[編輯 | 編輯原始碼]

當使用ssh連線至伺服器時,如果直接啟動伺服器端,那麼關閉ssh視窗後,正在執行的伺服器端程式也會被終止,此時就需要用到screen工具。

首先執行screen,再執行伺服器端啟動命令,此時關閉ssh視窗就不會終止伺服器端的執行。

如需回到伺服器端界面,先執行screen -ls列出正在執行的對談,再執行screen -r <對談名稱>就可以回到之前的界面。

設定環境[編輯 | 編輯原始碼]

編寫腳本用於啟動伺服器[編輯 | 編輯原始碼]

實際上,我們不需要在每次啟動伺服器的時候輸入命令。我們可以把命令寫進一個檔案裏,然後執行它。

Windows[編輯 | 編輯原始碼]

在Windows中,腳本稱為「批次檔」。在伺服器jar檔案所在的檔案夾中,建立一個文字文件,命名為start.bat,然後右鍵點擊「編輯」,再將下面的內容貼到裏面:

@ECHO OFF
java -Xms1024M -Xmx2048M -jar minecraft_server.jar --nogui
pause

然後雙擊這個檔案啟動你的伺服器。你可能會收到「Class_Not_Found」和「ServerGuiConcole」錯誤資訊,直接忽略這些錯誤。然後你就可以看到「Server Thread/INFO」這樣的內容,這表示你的伺服器啟動了。

如果在玩家遊玩過程中傳送中文訊息伺服器控制台顯示是亂碼,可以嘗試在第二行上面插入chcp 65001

腳本中的pause命令會保持視窗開啟,這樣是為了讓你能在伺服器停止時更方便地知道到底發生了什麼。

macOS、Linux和FreeBSD[編輯 | 編輯原始碼]

這些系統在命令列中都使用一種被稱為「POSIX shell script」的腳本語言。在放伺服器jar檔案的檔案夾中建立一個文字檔案,命名為start.sh,然後寫入以下內容:

#!/bin/sh
cd "$(dirname "$0")"
exec java -Xms1G -Xmx1G -jar server.jar --nogui

然後儲存檔案。執行chmod a+x start.sh(或者你放置此腳本的路徑)使其可執行。你可以通過雙擊此檔案或者在檔案夾中輸入./start.sh(如果在檔案夾外,請輸入完整路徑)命令啟動伺服器。

如果你想像Windows中一樣能在伺服器關閉後保留視窗,請刪除腳本中的exec一詞,並在末尾加上read -n 1 -p "Waiting..."一行。此更改對從圖形界面雙擊打開的伺服器有效果。

啟動和維護腳本[編輯 | 編輯原始碼]

另外,你也可以嘗試使用下面列出的腳本實現對Minecraft伺服器的管理和啟動、關閉自動化:

  • Minecraft Server Control Script (MSCS)適用於UNIX和Linux平台的Minecraft伺服器。有以下功能:
    • 執行多個Minecraft實例。
    • 啟動、停止和重啟單個或多個實例。
    • 建立、刪除、停用和啟用實例。
    • 第三方伺服器支援:Forge、BungeeCord、SpigotMC等。
    • 自動備份、刪除(X天前)和重啟實例。
    • 詳情參見:MSCS的Github
  • Minecraft Server Manager是一個適用於原版伺服器端和Bukkit的全面的啟動腳本(支援Debian系統,例如Ubuntu)。
    • MSM可以定期建立可相容World Edit的備份。
    • 可設定用於提醒玩家的訊息,例如「將在10秒內關閉伺服器!」。
    • 可以在終端內執行遊戲內命令(例如「say」、「op」和「whitelist」)。
    • 支援Tab鍵補全命令,使學習更簡單。
    • 查看完整功能:MSM的GitHub
  • 伺服器架設腳本
  • FreeBSD啟動腳本
  • OpenBSD啟動腳本
  • Ubuntu啟動腳本
  • rfwadmin是一個適用於Linux的具有Web界面的啟動腳本。有很好的用於快速儲存和載入存檔的Web界面。
  • Minecraft Systemd Service是一個完全集成systemd的Minecraft服務:
    • 適用於CentOS和Fedora。
    • 使用大量的唯讀和不可存取的權限來保護伺服器。
    • 使用rcon執行安全的重啟和停機操作。
    • 為了更方便的管理,可以與Minecraft Command Center Script一起組合使用。
  • Arch Linux伺服器管理腳本

設定Minecraft伺服器[編輯 | 編輯原始碼]

  1. 編輯server.properties檔案(格式可參見server.properties § server.properties)。請使用純文字編輯器修改此檔案(例如記事本)。可能不需要做額外設定,預設生成的內容也可以啟動伺服器。
  2. 如果你要成為管理員(op)或加入管理員,請在伺服器控制台或GUI上輸入/op <玩家或玩家實體目標選擇器>命令。此命令會把你指定的用户的UUID加入到ops.json檔案中。管理員權限不會隨着用户名的更改而消失,因為儲存的是你的UUID而不是用户名。
    • 管理員可以執行命令。換句話説,管理員有權限控制遊戲的某些方面(例如傳送玩家)。
    • ops.json的內容:
[
  {
    "uuid": "",
    "name": "",
    "level": 4,
    "bypassesPlayerLimit": false
  }
]
  1. 如果在你的server.properties中設定了開啟白名單,你可以在伺服器控制台或GUI上使用/whitelist add <玩家或玩家實體目標選擇器>命令把玩家加入進whitelist.json檔案中(由於過渡到UUID系統的原因,不建議直接修改此檔案的內容)。

發佈Minecraft伺服器[編輯 | 編輯原始碼]

在成功設定並啟動Minecraft伺服器後,需要將其發佈,使其他玩家可以通過互聯網或本地網絡查看並加入伺服器。

發佈Minecraft伺服器有多種方法:

區域網絡[編輯 | 編輯原始碼]

  本章節介紹的是專用伺服器上的區域網絡連線。關於向區域網絡開放單人遊戲世界,請見「Tutorial:本地區域網絡聯機」。
參見:區域網絡

區域網絡是用於在有限區域內(如家庭、校園或辦公樓)連線裝置並進行通信的電腦網絡。當你的裝置通過以太網或無線方式連線到路由器時,它便參與了路由器的區域網絡,這包括所有其他連線到同一路由器的裝置。因此,通過區域網絡,你可以連線並與網絡上的其他裝置或託管的應用程式進行通信,例如Minecraft伺服器。

網絡中的每個裝置都會獲得一個唯一識別碼,稱為內部IP位址(或本地IP)。裝置上的應用程式通過端口監聽並與區域網絡中的其他裝置通信。

在裝置上啟動Minecraft伺服器時,Minecraft伺服器會向伺服器主機請求一個特定的端口號,以便與網絡中的其他裝置進行通信。伺服器主機會分配並監聽請求的端口,將來自該端口的所有連線指向Minecraft伺服器進行處理。Minecraft伺服器的預設端口是25565,但可以在server.properties檔案中修改。

當你通過區域網絡託管Minecraft伺服器時,玩家可以通過輸入伺服器主機的內部IP位址和端口號來本地連線。例如,如果伺服器主機的內部IP位址是192.168.1.2,端口號是25565,玩家應使用位置192.168.1.2:25565連線到伺服器。

請注意,玩家需要連線到Minecraft伺服器所在的區域網絡才能連線到你的伺服器。

連接埠轉送[編輯 | 編輯原始碼]

如果你有一台路由器,並且想讓用户通過路由器連線進來時,就需要使用連接埠轉送。如果你只是想架設一台內部伺服器,那麼你就不需要做這樣的事。請注意:連接埠轉送可能會導致安全風險。

不同路由器設定連接埠轉送的方式不同。如果你不知道如何在你的路由器設定連接埠轉送,可以嘗試在網絡上找適用於你路由器型號的教學。

此示例適用於TP-Link家庭路由器的新版界面。

進入你路由器的管理界面,找到連接埠轉送頁,然後點擊新增服務或自訂服務。選擇一個「協定類型」,「TCP」表示只轉發TCP協定,「UDP」只轉發UDP協定,而「ALL」則兩者都轉發。內部端口和外部端口都填寫25565(如果你伺服器不是標準端口,可以按需填寫)。IP位址則填寫你Minecraft伺服器的內部IP位址,其餘保持不變即可。

要取得你電腦的IP位址,請按以下步驟操作:

Windows Windows
⊞ Win + R打開「執行」,輸入cmd然後↵ Enter,打開命令提示符。在命令提示符中輸入ipconfig然後↵ Enter。找到對應你使用的網絡配接器上的IPv4位置(有線連線的一般是「以太網」,無線連線的一般是「WLAN」)。一個IP位址的形式應該是xxx.xxx.xxx.xxx,然後把這樣的內容記錄下來。注意不要包含任何除了數字或點的部分
OS X上IP位址的顯示位置
macOSMac
打開在logo下的選單,找到「系統首選項」,然後選擇「網絡」。你的IP位址應該會顯示在右側(應該是xxx.xxx.xxx.xxx形式)。將它複製下來即可。
LinuxLinux
你可以使用網絡診斷中心(有一些發行版有)。或者在終端中執行ip a,此命令會輸出你所有網絡接口的IP位址,找到例如inet xxx.xxx.xxx.xxx的內容,將xxx.xxx.xxx.xxx的部分複製下來即可。

如果你獲得了你的IP位址,請把它輸入到前面轉發設定中的「IP位址」中。

填寫好這些需要的資訊後,請點擊「儲存」(或者其他類似意思的按鈕)。這樣你就成功的設定了連接埠轉送。當你啟動Minecraft伺服器時,需要把server.properties中的IP位址一項留空。

其他人需要通過你的外部IP位址來連線到你的伺服器。你可以通過例如IP Chicken的網站取得外部IP位址。如果你不想用IP位址連線,可以使用動態DNS服務,例如NoIP DynDNS

接下來可以設定並連線了。

設定VPN[編輯 | 編輯原始碼]

該段落的內容不代表Mojang StudiosMinecraft Wiki的官方意見。

注意

使用虛擬專用網絡可能對連線至Mojang伺服器、Minecraft伺服器,或者你的互聯網本身造成影響。

在你和你的朋友之間設定伺服器的另一種方法是設定虛擬專用網絡。由於希望連線到伺服器的所有用户必須下載外部軟件以加入或建立伺服器,因此該方法可能會被認為是不推薦而且不方便的。另外一種可行的辦法是連接埠轉送。可用於建立虛擬專用網絡的免費簡單程式是Hamachi(不支援M系Mac處理器)和Radmin虛擬專用網絡。是另外一種免費開源且支援大多數作業系統的方案,但是設定較困難。Hamachi免費版只允許5個玩家連線。

設定Hamachi[編輯 | 編輯原始碼]

  1. 在希望加入伺服器的每台電腦上安裝Hamachi,包括主機。下載位置:
    Windows / Mac
    Linux (32位元與64位元.deb.rpm包均可找到。欲在 Gentoo 上安裝,使用net-misc/logmein-hamachi
  2. 在主機上建立新的Hamachi網絡。
  3. 主機安裝並設定Minecraft伺服器軟件(server.jar):server.properties中的伺服器IP字段保留為空(預設情況下)。
  4. 主機將新建立的Hamachi網絡憑證傳遞給每個玩家。
  5. 玩家連線到主機的Hamachi網絡。
  6. 當所有機器都連線在同一個Hamachi網絡中,主機將其機器的Hamachi IPv4位置提供給玩家。
  7. 每個玩家使用主機的IPv4位置輸入到「直接連線」框裏。
  • 請注意,Hamachi佔用了已經被IANA分配的IP塊(25.0.0.0/8)。所以,Hamachi有可能會和互聯網衝突。

設定Radmin VPN(僅支援Windows)[編輯 | 編輯原始碼]

其設定方法和Hamachi的很相像。

  1. 這裏下載Radmin VPN。
  2. 建立網絡:在本地電腦上安裝Radmin VPN後,按「建立網絡」按鈕。 設定網絡名稱和密碼,然後按「建立」按鈕。
  3. 現在新網絡將出現在主視窗。給朋友傳送連線資訊,然後執行Minecraft。
  4. 連線:Radmin程式啟動後按「加入網絡」 - >在對話框中按輸入網絡名稱和從主機網絡的密碼 - >「加入」 - >新網絡及其節點將顯示在主視窗中。 - > 在Minecraft中連線到主機。(如同設定Hamachi的第七步)
  • 如果Radmin VPN上的連線已經建立,但你沒有看到遊戲中的其他玩家,則需要調整防火牆,或者直接關閉防火牆。

連線到Minecraft伺服器[編輯 | 編輯原始碼]

  • 如果你是在作為伺服器端的電腦上玩Minecraft,先選擇「多人遊戲」,輸入「localhost」或者是「127.0.0.1」,而不是你的IP位址。
    • 這是不推薦的。除非你有一個效能良好,記憶體比較大的電腦。(伺服器4GB,用戶端2GB,其餘的給系統)
  • 在你的區域網絡內的玩家可以通過內網IP來連線到你的伺服器(因為玩家在區域網絡內,所以你不需要連接埠轉送)。
  • 從互聯網連線的玩家(也就是不在你的區域網絡中的玩家)必須使用你的外部IP來連線。你必須為這些從外部連線的玩家使用連接埠轉送。
  • (部分支援IPv6的用戶端和伺服器端,用戶端可以直接通過IPv6位置存取伺服器端。)
  • 特定網絡配接器上的IP位址可以通過在命令提示符中輸入「ipconfig」或者通過此網站來查看。如果在server.properties檔案中指定了非25565的端口,則需要在位置欄中加上端口號。位置(IP和端口)看起來應該像192.168.0.168:25565這樣。

關於IP位址的一些注意事項[編輯 | 編輯原始碼]

  • 除非你為正在做伺服器的電腦設定一個靜態IP,否則的話,內部IP位址是有可能改變的。這會影響到連接埠轉送規則並使得它們失效。不同的路由器有不同的設定靜態IP的方法。你可以從你的裝置的説明書或者線上文件中獲得更多的幫助。
  • 如果你有連線到你外部IP的玩家,你應該明白如果你沒有從你的Internet服務商處獲得一個靜態IP,那麼你的外部IP是會變化的。你可以使用類似MyWANIP的工具來定時的檢查你的外部IP。此外,你可以嘗試使用DDNS服務,這會允許你使用一個固定的域名,而不是動態的IP位址。不管你的外部IP位址是否改變,這個域名會指向你目前的外部IP位址(即,當你的外部IP改變時,DNS會自動更新)。
  • 在解決伺服器故障時,你可以嘗試在執行伺服器的機器上使用用戶端來除錯,使用本機IP位址(localhost)、內網IP位址(例如192.168.x.x)或者公網IP都是可以的。
  • 如果你在公網上連線你伺服器的公網IPv4位置時有問題,可以嘗試使用IPv6位置來連線。你僅應在測試伺服器是否線上時執行此操作。對於其他玩家而言,還是最好使用你的IPv4位置來連線。

伺服器端網絡設定[編輯 | 編輯原始碼]

  • 伺服器需要開啟防火牆相應端口(預設為25565)才能使伺服器端正常工作。
  • 確認網絡設定正確並使用線上工具如You Get Signal確定伺服器端在國際互聯網的IP。測試端口應與伺服器端設定的端口一致(預設為25565),測試時請啟動伺服器端

伺服器有可能會遭到惡意攻擊,在伺服器投入使用以前,請務必做好物理保護及數據備份工作,否則有可能會帶來經濟及精神上的損失。

針對接入NAT的家庭網絡的伺服器[編輯 | 編輯原始碼]

  • 如果家庭路由器的伺服器接入NAT網絡,那麼他在啟動後外網的玩家是無法連線的。
  • 購買路由器,進入路由器設定頁面(一般是192.168.1.1:80或192.168.0.1:80)查看WAN IP記錄下來,使用搜尋引擎搜尋IP,將該IP與之前的WAN IP對比,若相同則為一般有IP,若不同則為接入NAT的家庭網絡。

這種情況,你可以使用內網貫穿類應用,如花生殼,或協商運營商請求許可取得公網IP的資格。

針對使用家庭路由器的伺服器[編輯 | 編輯原始碼]

  • 如果伺服器位於一個家庭路由器的區域網絡內,則需要在路由器設定相應的端口映射法則。
  • 關於端口映射的具體設定,可以訪問portforward.com。從網站給出的列表中選擇你使用的路由器型號,網站將給出設定端口映射的相應步驟(有廣吿,可跳過)。調製解調器、路由器等網絡器材附帶的説明檔案也可能包括了設定端口映射的相關資訊。
    • 部分路由器提供了DMZ選項,與端口映射有同樣效果,但遭到攻擊的可能性相比使用端口映射更大(DMZ主機暴露在外網,不受路由器安全設定保護)。新手使用請諮詢熟悉的業內人士
    • 一般來説可以首先嘗試使用UPnP進行端口映射,大部分路由器都支援並預設開啟該功能。可以使用諸如miniupnpc軟件包的upnpc命令一類的程式進行映射。

針對使用動態IP的伺服器[編輯 | 編輯原始碼]

  • 由於大部分家庭用户(部分伺服器代理的伺服器也沒有固定IP)使用ADSL或PPPoE等方式接入互聯網,此種情況下的伺服器無論通過路由器與否,IP位址是不定的。解決此問題可以使用動態DNS服務,屆時玩家只需要知道伺服器使用的域名即可連線到伺服器。
  • 請聯繫網絡供應商(家庭用户)或伺服器代理商確定正在使用的網絡接入方式。
  • 使用動態DNS需要進行以下準備工作:
    • 獲得一個域名,可以從dot.tkOray等網站獲得免費域名,也可以支付一定費用註冊;
    • 選擇一個動態DNS服務商,註冊賬號並按服務商提供的操作方法設定伺服器及域名,維基百科有部分動態DNS的服務商列表

使用動態DNS需要一定網絡理論及實踐的基礎,新手在做出決定前,請先諮詢熟悉的業內人士。

  • 設定動態DNS請按照服務商的指示對伺服器、路由器(僅限使用路由器的用户)進行設定。
    • 路由器設定需要進入管理頁面進行操作,新手請參照説明文件或在業內人士的指導下進行。

區域網絡中的專用伺服器[編輯 | 編輯原始碼]

這一段的內容只適用於Classic(v0.30)伺服器。

管理員不能在內網中通過一台另一台機器進入那台架設了伺服器的機器,這是一個普遍性的問題。典型的情景是:你有一台專用伺服器,而且有另一台供你玩遊戲的機器。而它們同時連線到同一個路由器或交換機下,且內部IP為「192.168.x.x」。通常,通過伺服器生成的URL連線時,會返回「伺服器離線」的錯誤資訊。

要解決這個問題,你需要在你的URL、書籤以及其他你用來連線的東西後面加上?override=true
例如:http://www.minecraft.net/classic/play/4c3bebb1a01816acbe31c5ece1570da5?override=true

以前(1.8 beta和網站更新前)上面要加的東西是&override=true。這一點並沒有被Mojang在網站Applet頁面上説明,導致出現了很多誤用。在此更新前,通過網站連線到你自己的URL會導致出現在Applet視窗底部出現「If you can't connect, try this link instead.」的紅色文字,返回的是同樣以「&override=true」結尾的連線。

註:Beta伺服器沒有這樣的情況,你應該能通過內部或外部IP連線上伺服器。

SRV記錄[編輯 | 編輯原始碼]

Java版1.3開始支援玩家可以在不輸入端口號的情況下連線到一個使用非標準端口號的伺服器。相關的資訊是作為一種服務被記錄在DNS上的SRV記錄中的。SRV記錄吿知用戶端實際上應該連線的主機名和端口。一些動態DNS(DDNS)服務和大多數的靜態DNS服務都會允許你設定這樣的記錄。[5]

假設現為example.com這個根域設定SRV解析記錄,遊戲伺服器執行端口為65312,子域server.example.com已經解析到遊戲伺服器,玩家通過mc.example.com加入遊戲。

那麼當設定SRV記錄時,應當參照下列規則:

  • SRV記錄的名稱應當設定為_minecraft._tcp.mc.example.com,其中mc.example.com是玩家加入遊戲時需要輸入的域名。該域名可以為根域。
    • 某些DNS服務提供商可能自動補全名稱後的.example.com,此時僅需輸入_minecraft._tcp.mc即可。
  • 按需設定記錄的優先級和權重。一般情況下將優先級設定為5,權重設定為0
  • 將端口號設定為伺服器執行的端口號。在本例中為65312
  • 將目標設定為解析到遊戲伺服器的域名,在本例中為server.example.com
  • 某些DNS服務提供商可能要求直接填寫記錄值而非獨立的四個字段。此時需將上述四項按順序填入記錄值中,中間以空格分割。在本例中,記錄值為5 0 65312 server.example.com
  • 為了使記錄儘快生效,可以將TTL值設定的儘可能小。

若要手動檢查SRV記錄,可以執行nslookup(Windows)或dig(Linux)命令。在本例中,得到的回覆類似下面的內容:

> nslookup -q=srv _minecraft._tcp.mc.example.com
Server:  UnKnown
Address:  [REDACTED]

Non-authoritative answer:
_minecraft._tcp.mc.example.com  SRV service location:
          priority       = 5
          weight         = 0
          port           = 65312
          svr hostname   = server.example.com

常見問題[編輯 | 編輯原始碼]

問:如果我有一個沒在這裏提到的問題,我應該怎麼辦?

答:你可以在Minecraft Forums上發帖説明你的問題。為了能幫到你,請提供以下資訊:

  • 使用的作業系統
  • Java版本
  • 一台還是多台電腦
  • 問題的具體描述
  • 你為解決問題已嘗試的步驟
  • 你遇到的任何錯誤
  • (如果可以的話)問題的擷圖
  • 其他可能有助於幫你解決問題的內容(一般也不會有多少。注意不要提供密碼

如果我們解決了你的問題,請説明具體解決問題的地方和方法。這可以對其他人有所幫助(也能幫我們解決常見問題)!


問:在Windows上雙擊批次檔啟動伺服器,命令提示符視窗閃退且伺服器沒有啟動。

答:請在你的批次檔最後加上pause再執行。如果顯示的是無效路徑,這可能是你Java可執行檔案或者伺服器端jar檔案的路徑不正確導致的。把批次檔路徑裏的/jre7/換成/jre6/,確定執行環境在/Program Files/裏還是在/Program Files (x86)/裏,或者根據自己電腦的情況對路徑進行相應調整。多説一句,執行伺服器端需要JRE執行環境,而不是瀏覽器裏的Java插件。

也可能是你沒有修改你的eula.txt檔案。在雙擊你的minecraft_sever.jar檔案後,你會看到檔案夾內有個eula.txt檔案。用記事本打開這個檔案

(https://account.mojang.com/documents/minecraft_eula).
 Datum Uhrzeit
 eula=false

將最後一行修改為

eula=true

然後儲存並退出。重新雙擊伺服器啟動的批次檔應該就可以正常啟動了。


問:當我嘗試啟動伺服器時,伺服器顯示"Failed to bind to port!"。

答:可能是路由器端口映射設定有誤,確認路由器為Minecraft開放的端口(預設為25565)正確地映射到你的伺服器上。如果你的伺服器是直接接入網絡的且網絡服務商不開放你所設定的端口,將server.properties檔案中的server-port=25565中的「25565」改為其他可用端口號。

或者是你在server.properties檔案中的IP位址一項中設定了IP位址。如果這個IP位址不與你系統上任何接口上的位置一致,伺服器端會顯示這樣的資訊。如果把此項留空,你就可以在所有接口上綁定。這樣,你和內網內的人就可以通過localhost或內網IP位址連線到伺服器了。

此外,問題也可能是由於你嘗試使用一個已被佔用或無權限綁定的端口(小於1024的端口需要root或管理員特權才能使用)導致的。要解決這個問題,你可以嘗試修改server.properties檔案中的server-port=25565一行。

註:你應該避免使用下列端口,這些端口在有些ISP那裏是被封鎖的。並且,為了安全考慮,最好不要用root用户執行伺服器(適用於Linux系統且端口小於1024的情況):

  • 21(由大多數FTP伺服器使用)
  • 22(由SSH伺服器使用)
  • 25(由郵件伺服器使用,用於SMTP協定)
  • 53(由DNS伺服器使用)
  • 80(由大多數Web伺服器使用)
  • 110(由郵件伺服器使用,用於POP3協定)
  • 115(由簡單檔案傳輸協定使用)
  • 143(由郵件伺服器使用,用於IMAP協定)
  • 443(由Web伺服器使用的SSL端口)
  • 3306(由大多數MySQL伺服器使用)

一般要避免使用端口號低於1024的端口,因為這些端口是「公認端口」,用於在IANA處註冊的重要服務;另外因為安全原因,一些網絡服務商還會封鎖3306(MySQL伺服器預設使用)端口等。除此之外,49152-65535段端口屬於「動態端口」範圍,沒有被註冊佔用。

此類問題亦有可能是操作者疏忽導致伺服器端未關閉就再次開啟了伺服器端,典型的錯誤操作有:Windows中直接雙擊了核心jar,Linux中使用守護進程執行Java等,導致伺服器端在後台執行而操作者未注意的情況。遇到此類問題可先檢查佔用該端口的進程,取得控制或將其結束,再啟動伺服器端。


問:我嘗試在Solaris/OpenSolaris上執行伺服器,但是出現了以下錯誤:

java.io.InterruptedIOException: Operation interrupted 
at java.net.SocketInputStream.socketRead0(Native Method) 
at java.net.SocketInputStream.read(SocketInputStream.java:129) 
at java.net.SocketInputStream.read(SocketInputStream.java:182) 
at java.io.FilterInputStream.read(FilterInputStream.java:66) 
at gq.a(SourceFile:131) 
at ji.g(SourceFile:197) 
at ji.c(SourceFile:17) 
at oq.run(SourceFile:84) 
2011-05-31 16:57:26 [INFO] /:44673 lost connection

答:只有Solaris系統線上程中斷連線時會發生這種異常,這種異常可以通過改變啟動命令來避免:

java -Xmx1G -Xms32M -XX:-UseVMInterruptibleIO -XX:+UseConcMarkSweepGC \
 -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts\
 -jar minecraft.jar nogui

這樣的命令讓Java使用一種可中斷的IO棧來防止異常發生。


問:當我嘗試連線到我的伺服器上,伺服器顯示:

               Connection lost 
 
The server responded with an invalid server key

答:此錯誤通常在伺服器端傳送了一個用戶端不能識別的功能時出現,這可能是由於使用了不能識別的伺服器軟件、不平衡的用戶端/伺服器版本或修改過的用戶端導致的。


問:為什麼我不能破壞或放置方塊!?

答:聯繫服主關閉保護重生點的功能,或離重生點遠一些,除非你是伺服器的op,或者該伺服器中沒有op,否則在該功能開啟時你不能在重生點附近放置或破壞方塊。


問:我的伺服器執行正常,但是我不能連線上去!

答:這可能是由一連串問題導致的。請按照上方提供的模板發帖詢問。


問:如何給伺服器更多記憶體?

答:修改啟動命令列中的「-Xmx1G -Xms1G」部分中的數字。「-Xms」部分指定的是伺服器啟動時使用的記憶體量,而「-Xmx」部分指定的是伺服器最大可以使用的記憶體量。 -Xmx1G -Xms2G = 1GB -Xmx2G -Xms1G = 2GB 等等。


問:為什麼伺服器CPU經常滿載?

答:這可能是由於GUI(圖形界面)視窗導致的。在啟動命令列加入nogui可以停用這個視窗。


問:我要怎麼取得伺服器的IP位址?

答:請參閱連線到Minecraft伺服器一節。


問:我設定了連接埠轉送,並且允許java.exe通過防火牆,但仍然不起作用!

答:你的調製解調器有可能執行在路由模式下。你可能會從ISP處拿到調製解調器和路由器二合一的裝置。 要驗證這一點,請查看你路由器上顯示的WAN IP,如果這個IP是一個私有IP,那麼你需要登入到ISP提供給你的調製解調器的管理界面,然後把連接埠轉送中的IP位址設定為你路由器的WAN IP。


問:我關閉了路由器/調製解調器上的防火牆,為什麼它還是不能正常工作?但是,連接埠轉送網站報吿説它們能「看到」我??這是什麼情況?

答:關閉路由器/調製解調器上的防火牆實際上會停用連接埠轉送。連接埠轉送本身是防火牆規則的一部分。如果在某個端口(例如25565)上沒有設定規則,防火牆就會忽略或丟棄連線嘗試(因此,你會遇到連線逾時的問題)。如果有規則存在,它會將連線轉發到設定為接收初始連線嘗試的伺服器上。

當你停用路由器/調製解調器防火牆,並在連接埠轉送檢測網站上檢測你的公共(非RFC 1918)IP位址時,網站會訪問你的路由器/調製解調器,你的路由器/調製解調器會回應,所以連接埠轉送網站表示它能「看到」你。這也是不建議停用防火牆的原因之一:你可能誤以為外部的玩家可以直接連線到你伺服器上的Minecraft伺服器,實際上他們只是嘗試連線到路由器/調製解調器本身。

要解決這個問題,你應該確認你的連接埠轉送規則是否正確。你可以使用Minecraft伺服器狀態檢查器來檢查網絡是否正確設定,例如:Minecraft Server Status。以便外部的Minecraft用戶端能夠通過你的路由器/調製解調器連線到你的伺服器。

註:你可能需要注意Minecraft Query - 它可能使用第4層,即傳輸層的UDP協定來查詢你的伺服器。許多教學僅建議你進行TCP連接埠轉送(本教學建議你同時轉發這兩項)。


問:什麼是連線逾時和連線被拒絕?

答:簡單來説,連線逾時是指防火牆忽略了連線嘗試(即忽略了帶有SYN標誌的初始連線包)。連線被拒絕則是指端口上沒有進程在監聽,因此作業系統會通知用戶端(在標準的用戶端-伺服器模型中)連線嘗試失敗。

所有Windows電腦(家庭版)和幾乎所有的SOHO路由器的預設設定是丟棄或逾時連線。 這被稱為「隱形模式」,請參考superuser。 簡單來説,這樣設定可以避免攻擊者發現目標電腦的存在。通過連線嘗試逾時,攻擊者可能忽略該電腦。

你可以通過這篇serverfault的文章在來了解更多關於連線被拒絕的資訊。

因此,如果你遇到連線逾時錯誤,通常是防火牆的問題。你可能需要在Windows防火牆中允許Java,或進行連接埠轉送。如果錯誤資訊是連線被拒絕,可能是你的Minecraft伺服器沒有正確啟動,或者你關閉了路由器上的防火牆而不是進行連接埠轉送。

如果你還有疑問,或者你不會使用命令提示符/終端,你可以在Minecraft論壇上尋求幫助。

「連線過濾」和「連線關閉」分別表示連線逾時和連線被拒絕。

影片和替代教學[編輯 | 編輯原始碼]

這裏給出了一些其他的Minecraft伺服器架設教學:

參考[編輯 | 編輯原始碼]

導覽[編輯 | 編輯原始碼]