本教學將透過手把手的方式,一步步地幫助你建立屬於你自己的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論壇上的伺服器託管區。這樣的話,你一般需要每月支付一定的費用(免費的託管服務很少,且一般無法保證質量),但是這樣也免去了你維護伺服器的煩惱,可以保持伺服器一直線上,玩家可以隨時進入伺服器遊玩。
註: 也有一些其他的客製化伺服器軟件,大部分大型伺服器都使用這些軟件,但是這些軟件並不受Mojang官方支持。
警告[]
如果你對自己所做的事情沒有清楚的認知,那麼在自己的電腦上執行伺服器軟件會導致你的電腦更容易受到來自外部網路的非法人士或有害程式(例如駭客和病毒)的攻擊。因此,請謹慎使用伺服器軟件。
鑑於你正在一步步地開啟你自己的伺服器,你應該要注意所有可能出現的危險性。執行下面的所有教學(應該)不會導致你的系統出錯,但是由於本wiki是所有人都可編輯的,且我們並不知道你的系統配置與軟件執行情況,我們並不能保證你的系統不會出現問題。
為了確保你根據下面的教學架設伺服器而不會出現問題,我們強烈推薦你至少要知道以下的內容:
Java[]
Java是一種靜態類型的編程語言,用於編寫在Java虛擬機(JVM)上執行的程式。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的刪減版。它去除了對圖形介面或滑鼠、鍵盤方面的支持。無頭Java通常被用在伺服器或其他不需要圖形介面的場合。
一般步驟[]
執行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
。使用文字編輯器(如記事本)打開eula.txt
,將檔案中的eula=false
改為eula=true
。這表示你已閱讀並理解了EULA的內容,並會在使用伺服器端時遵守它。如果不這樣做,伺服器會在你嘗試啟動時立即關閉。 - 現在伺服器已被配置好了。你可以使用
java -jar minecraft_server.jar
啟動伺服器了。如果你不想讓伺服器顯示圖形介面,在前面的指令後面添上一個空格和--nogui
即可(有些人覺得這樣做會讓伺服器更快)。你也可以使用下面所列出的一些選項。
現在,你應該已經啟動了一個基本的伺服器了。更多關於配置伺服器的內容,參見配置環境。關於如何編寫啟動腳本的內容,參見編寫腳本用於啟動伺服器。
Java選項[]
命令列中,Java選項應該加入在-jar
選項之前。
- 對執行Minecraft伺服器來說,最重要的事情莫過於記憶體。你可以使用
-Xmx
選項設定伺服器能被允許使用的記憶體量。通常-Xmx2G
(最大記憶體2GB)就已經夠用了。-Xms
(初始化記憶體大小)不會對長時間執行有效能上的影響,但是你也可以設定它。-Xms512M
(512MB)應該夠了。- 對於一些版本的JRE,可以使用「soft max heap size」(
-XX:SoftMaxHeapSize=1G
)。JRE將嘗試只使用那麼多的記憶體,但如有必要,它將超過-Xmx設定的最大值。 如果你在伺服器上執行許多東西,這可能會很有用。
- 如果你的伺服器執行在64位元的Solaris系統上,並且使用了64位元Java,請加入
-d64
。
Minecraft選項[]
關於伺服器端JAR檔案的選項要寫在指令中的-jar minecraft_server.jar
後面。你可以在後面加上--help
查看所有可以被傳遞給伺服器端的參數。下方列出了一些可用的命令列選項。
--bonusChest
- 在初次生成世界時,是否生成獎勵箱。
--demo
- 指定伺服器是否在演示模式下執行(給玩家顯示一個「演示版」彈出資訊。且演示結束後,玩家不能破壞、放置方塊或者吃東西)。
--eraseCache
- 清除光照快取等。與最佳化單人遊戲世界時的選項相同。
--forceUpgrade
- 強制升級所有區塊到伺服器目前的版本(單人遊戲世界也可用)。
--help
- 顯示此幫助。
--initSettings
- 只初始化
server.properties
和eula.txt
,然後退出。
- 只初始化
--nogui
- 啟動伺服器時不顯示圖形介面。
- 你仍然可以與你的伺服器互動,但如果啟用,必須使用cmd或終端。
nogui
與此選項作用相同,主要用於向後相容非常舊的伺服器版本,但更加推薦使用--nogui
更可取,因為這與其他選項的格式匹配
--port <整数>
- 指定伺服器監聽的端口,而無論在
server.properties
中設定的是什麼(預設值為-1)。
- 指定伺服器監聽的端口,而無論在
--safeMode
- 載入存檔時只使用原版資料包。
--serverId <字符串>
- 為伺服器指定一個伺服器ID。
--singleplayer <字符串>
- 指定伺服器以離線模式執行(<字串>需要指定一個值,但此值的具體用途未知,可能是由Mojang內部所使用的)。
--universe <字符串>
- 指定查找world資料夾的位置(預設為
.
,即目前目錄)。
- 指定查找world資料夾的位置(預設為
--world <字符串>
- 指定一個
level.dat
所在資料夾的名稱。
- 指定一個
- 舊命令列選項
一些選項能在舊版中使用,但是已在新版本中被移除或被替換了。
-o true
- 使伺服器以線上模式執行,只有經過認證的使用者才能進入(新版本中,將server.properties中的"online-mode"改為"true"等同於此選項)。
示例命令列[]
- 執行一個存檔資料夾名稱為「cold」的,監聽在1337端口上且最大1GB記憶體的伺服器:
java -Xmx1G -jar minecraft_server.jar --port 1337 --nogui --world cold
。
Windows操作指導[]
安裝Java[]
執行Minecraft伺服器需要Java執行環境(JRE,或者直接叫Java)。考慮到安全,你應該使用最新版的Java。你可以按照下列方法之一檢查是否是最新版:
- 打開Windows控制面板,找到Java(可能在「程式」類別中),然後點擊「立即升級」。
- 點此可以透過你的瀏覽器自動檢查版本。但是,Google Chrome和Firefox瀏覽器不執行Java內容,所以不能用這些瀏覽器來檢查。
- 打開指令提示字元,輸入
java -version
。如果顯示出了版本號,可以與Java網站上的資訊對比取得最新版本號。
如果你沒有安裝Java或你的Java版本較舊,你可以下載OpenJDK或Oracle 「OTN」 JDK。
macOS操作指導[]
請注意:在MacOS 10.4或更老的版本上,伺服器不能正常執行,且有可能導致你的機器崩潰。
安裝Java[]
打開終端。
- 你可以透過執行
java -version
來檢查你是否安裝了Java。並確保其版本高於1.6(比1.8高要更好)。 - 如果你沒有Java,你可以使用HomeBrew安裝:
- 先執行
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
安裝HomeBrew。 - 再執行
brew cask install adoptopenjdk
安裝Java(OpenJDK)。
- 先執行
- 再次執行
java -version
,這一次應該會看到一些訊息了。
設定Minecraft伺服器[]
參見一般步驟。
使用Time Capsule[]
有些家庭使用的無線路由器是AirPort Time Capsule。此章節教你如何在不搞壞檔案伺服器的情況下做相應設定。
註:你需要知道你的管理員帳號和密碼。
- 打開系統設定->網路。
- 點擊「高級」按鈕,然後到TCP/IP的底部。
- 找到配置IPv4的地方,把選項改成使用具有手動IP地址的DHCP。
- 把IP地址改為10.0.1.x。注意:x的數值需要在DHCP範圍內(例如:如果DHCP地址池為10.0.1.2-10.0.1.254,那麼x可以取2-254的任意值)。
- 轉到共享一節,確保Internet共享已開啟。
- 打開AirPort Utility並編輯你的Time Capsule設定。
- 轉到「網路」,確保路由模式選項設定為「DHCP和NAT」。然後,點擊端口設定下方的「+」按鈕。
- 輸入以下內容:
- 描述:Minecraft Server(隨便怎麼寫都行)
- 私有IP地址:你在第四步填寫的IP地址。
- 把所有名字裡面帶「端口」的內容改成25565.
- 點擊儲存並更新Time Capsule。
你現在可以配置你的伺服器了。
Linux操作指導[]
Linux有許多被稱為「發行版」的變種。有一些發行版是專門為伺服器設計的,或更適合執行在伺服器上的。如果你正在架設一台專用伺服器,我們建議你使用這些發行版中的其中一個。
一般來講,Linux更歡迎開源軟件。因此,在適用的情況下,建議你使用開源程式,例如OpenJDK。
安裝Java[]
大多數發行版中都有OpenJDK。你可以直接安裝。對於Oracle Java,請參考Oracle的下載頁。
註:儘管不影響Minecraft伺服器,JavaFX以及其他專有部分可能需要單獨安裝。
Solus[]
執行sudo eopkg install openjdk-8
指令安裝OpenJDK。
安裝Oracle JDK,請參考Solus說明中心。
註:OpenJDK 11不在Solus的倉庫中。
Debian、Ubuntu和Raspbian[]
為了正常使用apt-add-repository
指令,你可能需要「software-properties-common」(使用sudo apt-get install software-properties-common
安裝)和/或「python-software-properties」軟件包(使用sudo apt-get install python-software-properties
安裝)。
由於許可證方面的問題,常用來安裝Oracle Java的軟件庫已經停止維護。推薦你安裝OpenJDK 8及更高版本。
OpenJDK可以使用此指令安裝:sudo apt update; sudo apt-get install openjdk-8-jdk-headless
去掉指令中的「-headless」可以安裝完整的Java。
註:此方法已在Ubuntu 18.04中測試有效。
openSUSE[]
註:由於openSUSE Tumbleweed可能的不穩定性,不建議使用此系統架設專用伺服器。
在終端內執行指令:sudo zypper in java-1_8_0-openjdk
安裝Java。
註:此方法已在openSUSE Leap 15.1中測試有效。
Arch Linux[]
Arch預設提供最新的穩定Java版本。若無特殊需求,建議安裝預設版本的Java環境。
執行pacman -S jdk-openjdk
安裝Java。
如果希望了解所有可用的Java版本,請執行pacman -Ss openjdk
進行查詢,或訪問OpenJDK取得更多資訊。
例如安裝Java 17,請執行pacman -S jdk17-openjdk
。
註:Arch官方不提供無頭JDK,只提供無頭JRE、完整JRE以及JDK。
如果遇到問題,請參考ArchWiki。
Gentoo[]
執行emerge --ask virtual/jdk
安裝Java。
其他發行版[]
查看你使用發行版的文件。它們應該會告訴你如何安裝OpenJDK。
另外,你還可以直接造訪Java網站下載適用於Linux的安裝包。對於大部分發行版都有用(無論32位元還是64位元)。在網站上提供了不同安裝包的安裝指導。
如果你在安裝的過程中詢問了密碼,請輸入它。如果你被問到「Is this OK [Y/N]」,(如果需要的話)請回答「Y」然後回車。Java現在應該已經安裝好了。
一個簡單的安裝腳本(同時會安裝Java)[]
https://github.com/silvertriclops/MCSLI
註:這是一個非常早期的項目,設計時考慮了脫機安裝,並將定期更新以使其對使用者更加友好。
FreeBSD操作指導[]
Java 7已經過時,因為官方已經使用Java 18了。
一些崩潰問題在OpenJDK 18中不會再出現。
所以如果相關內容測試成功的話,則下文中關於Linux相容相關的內容應該就可以刪掉了。
此部分已在FreeBSD 10.0 amd64上測試有效(JRE使用的是:jre-7u65-linux-i586.tar.gz
)。
安裝Java[]
由於OpenJDK與Minecraft伺服器的效能和崩潰問題,我們會安裝為Linux設計的Oracle JRE。
在安裝JRE前,你需要安裝FreeBSD的Linux二進制檔案相容層,你可以按照此文件操作。
Java需要從proc中取得一些資訊。你需要執行以下指令掛載linprocfs:
kldload linprocfs
mount -t linprocfs linprocfs /compat/linux/proc
並向/etc/fstab
加入此行:
linprocfs /compat/linux/proc linprocfs rw 0 0
Oracle JRE的一個依賴被標成「禁止」,所以安裝這個依賴會失敗。切換到/usr/ports/textproc/linux-f10-expat2.0.1/
,然後在其中的Makefile檔案中刪掉以FORBIDDEN=
開頭的一行。
由於許可證問題,你需要從Java官網上手動下載Linux的tar包(例如「jre-7u65-linux-i586.tar.gz」),並把它複製到/usr/ports/distfiles
。
然後,進入/usr/ports/java/linux-sun-jre17/
目錄並執行make install distclean
安裝JRE。
註:前一部分以前的說法(適用於FreeBSD 9.2 amd64)是:你必須在Makefile檔案中設定JRE_UPDATE_VERSION
變數,並將其設定為一個數字(在此例中為45)。然後再執行make install NO_CHECKSUM=1
。
嘗試執行java -version
。你可能會被提示找不到libjli.so
。一種解決方法是:將你的Java路徑顯式指定為搜尋路徑。
建立一個符號連接:
ln -s /usr/local/linux-sun-jre1.7.0/lib/i386 /compat/linux/usr/lib/java
然後在/compat/linux/etc/ld.so.conf.d/java.conf
加入:
/usr/lib/java /usr/lib/java/jli
執行/compat/linux/sbin/ldconfig
。
現在執行java -version
應該是正常的了。
啟動Minecraft伺服器[]
建立一個資料夾,然後把Minecraft伺服器端jar檔案複製進去。
在實際的版本中,如果你用一般方法執行伺服器,你會得到以下異常:syscall epoll_create not implemented
。為了解決這個問題,可以在指令後面加上-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider
。
啟動指令示例:
java -Xmx1024M -Xms1024M -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.PollSelectorProvider -jar minecraft_server.1.7.10.jar nogui
Plan 9[]
alien-convert PATH_TO_YOUR_JRE.deb chmod ~/~ rwx # for current user snarf java -jar PATH_TO_SERVER_JAR.jar xvmf in acme
Hostman[]
Hostman是用於雲託管應用程式的應用程式託管提供商。Minecraft可作為Hostman上的一鍵式應用程式使用。安裝大約需要2分鐘,有個關於如何配置伺服器並開始遊玩的說明。你可以在一台伺服器上擁有多個Minecraft服務。在此處免費試用。
Cloudron[]
Cloudron是一個在伺服器上自託管應用程式的平台。在Cloudron上,Minecraft是一個一鍵應用。它允許你透過瀏覽器上的Web介面管理Minecraft伺服器。你也可以在同一台伺服器上安裝多個Minecraft實例。你可以嘗試此示例(使用者名稱:cloudron,密碼:cloudron)。
Docker[]
Docker是一種開源的容器平台,可以使不同的Minecraft伺服器實例和主機相互隔離開來。Docker本身和其容器倉庫的所有者與Mojang沒有任何隸屬關係。
安裝Docker(適用於Linux、Mac和Windows)[]
參見https://docs.docker.com/install
Docker鏡像[]
關於完整的Docker鏡像文件,請參見:https://github.com/itzg/docker-minecraft-server/blob/master/README.md。
在一個名為「mc」的容器中執行一個簡單的最新版本伺服器,可以在shell中執行以下指令:
docker run -d -p 25565:25565 --name mc -e EULA=TRUE itzg/minecraft-server
在Docker鏡像中指定Minecraft版本[]
如果要指定特定的版本,請在指令後加入-e VERSION=<version number>
。例如,你可以使用下面的指令指定版本為最新快照:
docker run -d -p 25565:25565 --name mc -e VERSION=SNAPSHOT -e EULA=TRUE itzg/minecraft-server
指定為Minecraft 1.7.9:
docker run -d -p 25565:25565 --name mc -e VERSION=1.7.9 -e EULA=TRUE itzg/minecraft-server
伺服器端口[]
要變更監聽的端口,需要用到Docker的端口映射功能。這可以把主機上的指定端口映射到容器的25565端口上。可以使用下面的指令執行一個非25565端口的伺服器:
docker run -d -p <port>:25565 --name mc -e EULA=TRUE itzg/minecraft-server
更新Docker鏡像[]
使用下面的指令更新Docker鏡像。請注意,此指令不會更新Minecraft,它只會更新鏡像本身。
docker pull itzg/minecraft-server
配置環境[]
編寫腳本用於啟動伺服器[]
實際上,我們不需要在每次啟動伺服器的時候輸入指令。我們可以把指令寫進一個檔案裡,然後執行它。
Windows[]
在Windows中,腳本稱為「批處理檔案」。在伺服器jar檔案所在的資料夾中,建立一個文字文件,命名為start.bat
,然後右鍵點擊「編輯」,再將下面的內容粘貼到裡面:
@ECHO OFF
java -Xms1024M -Xmx2048M -jar minecraft_server.jar --nogui
pause
然後雙擊這個檔案啟動你的伺服器。你可能會收到「Class_Not_Found」和「ServerGuiConcole」錯誤資訊,直接忽略這些錯誤。然後你就可以看到「Server Thread/INFO」這樣的內容,這表示你的伺服器啟動了。
腳本中的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 systemd wrapper
端口轉發[]
如果你有一台路由器,並且想讓使用者透過路由器連接進來時,就需要使用端口轉發。如果你只是想架設一台內部伺服器,那麼你就不需要做這樣的事。請注意:端口轉發可能會導致安全風險。
不同路由器設定端口轉發的方式不同。如果你不知道如何在你的路由器設定端口轉發,可以嘗試在網路上找適用於你路由器型號的教學。
此示例適用於TP-Link家庭路由器的新版介面。
進入你路由器的管理介面,找到端口轉發頁,然後點擊新建服務或自訂服務。選擇一個「協議類型」,「TCP」表示只轉發TCP協議,「UDP」只轉發UDP協議,而「ALL」則兩者都轉發。內部端口和外部端口都填寫25565(如果你伺服器不是標準端口,可以按需填寫)。IP地址則填寫你Minecraft伺服器的內部IP地址,其餘保持不變即可。
要取得你電腦的IP地址,請按以下步驟操作:
- Windows
- 按⊞ Win + R打開「執行」,輸入
cmd
然後↵ Enter,打開指令提示字元。在指令提示字元中輸入ipconfig
然後↵ Enter。找到對應你使用的網路適配器上的IPv4地址(有線連接的一般是「以太網」,無線連接的一般是「WLAN」)。一個IP地址的形式應該是xxx.xxx.xxx.xxx
,然後把這樣的內容記錄下來。注意不要包含任何除了數字或點的部分。
- Linux
- 你可以使用網路診斷中心(有一些發行版有)。或者在終端中執行
ifconfig
,此指令會輸出你所有網路接口的IP地址,找到例如inet addr:xxx.xxx.xxx.xxx
的內容,將xxx.xxx.xxx.xxx的部分複製下來即可。
如果你獲得了你的IP地址,請把它輸入到前面轉發設定中的「IP地址」中。
填寫好這些需要的資訊後,請點擊「儲存」(或者其他類似意思的按鈕)。這樣你就成功的設定了端口轉發。當你啟動Minecraft伺服器時,需要把server.properties
中的IP地址一項留空。
其他人需要透過你的外部IP地址來連接到你的伺服器。你可以透過例如IP Chicken的網站取得外部IP地址。如果你不想用IP地址連接,可以使用動態DNS服務,例如NoIP DynDNS。
接下來可以配置並連接了。
設定VPN[]
該段落的內容不代表Mojang Studios或Minecraft Wiki的官方意見。
使用虛擬專用網路可能對連接至Mojang伺服器,Minecraft伺服器,或者你的互聯網造成影響。
在你和你的朋友之間設定伺服器的另一種方法是設定虛擬專用網路。由於希望連接到伺服器的所有使用者必須下載外部軟件以加入或建立伺服器,因此該方法可能會被認為是不推薦而且不方便的。另外一種可行的辦法是端口轉發。可用於建立虛擬專用網路的免費簡單程式是Hamachi和Radmin虛擬專用網路。這是另外一種免費開源且支持大多數操作系統的方案,但是配置較困難。Hamachi免費版只允許5個玩家連接。
設定Hamachi[]
- 在希望加入伺服器的每台計算機上安裝Hamachi,包括主機。下載地址:
Windows / Mac
Linux (32位元與64位元.deb
和.rpm
包均可找到。欲在 Gentoo 上安裝,使用net-misc/logmein-hamachi
) - 在主機上建立新的Hamachi網路。
- 主機安裝並配置Minecraft伺服器軟件(server.jar):server.properties中的伺服器IP字段保留為空(預設情況下)。
- 主機將新建立的Hamachi網路憑證傳遞給每個玩家。
- 玩家連接到主機的Hamachi網路。
- 當所有機器都連接在同一個Hamachi網路中,主機將其機器的Hamachi IPv4地址提供給玩家。
- 每個玩家使用主機的IPv4地址輸入到「直接連接」框裡。
- 請注意,Hamachi占用了已經被IANA分配的IP塊(25.0.0.0/8)。 所以,Hamachi有可能會和互聯網衝突。
設定Radmin VPN[]
其配置方法和Hamachi的很相像。
- 在這裡下載Radmin VPN。
- 建立網路:在本地計算機上安裝Radmin VPN後,按「建立網路」按鈕。 設定網路名稱和密碼,然後按「建立」按鈕。
- 現在新網路將出現在主窗口。給朋友發送連接資訊,然後執行Minecraft。
- 連接:Radmin程式啟動後按「加入網路」 - >在對話框中按輸入網路名稱和從主機網路的密碼 - >「加入」 - >新網路及其節點將顯示在主窗口中。 - > 在Minecraft中連接到主機。(如同配置Hamachi的第七步)
- 如果Radmin VPN上的連接已經建立,但你沒有看到遊戲中的其他玩家,則需要調整防火牆,或者直接關閉防火牆。
配置Minecraft伺服器[]
- 編輯
server.properties
檔案(格式可參見server.properties#server.properties)。請使用純文字編輯器修改此檔案(例如記事本)。可能不需要做額外配置,預設生成的內容也可以啟動伺服器。 - 如果你要成為管理員(op)或加入管理員,請在伺服器控制台或GUI上輸入
/op <玩家或玩家實體目標選擇器>
指令。此指令會把你指定的使用者的UUID加入到ops.json
檔案中。管理員權限不會隨著使用者名稱的變更而消失,因為儲存的是你的UUID而不是使用者名稱。- 管理員可以執行指令。換句話說,管理員有權限控制遊戲的某些方面(例如傳送玩家)。
ops.json
的內容:
[
{
"uuid": "",
"name": "",
"level": 4,
"bypassesPlayerLimit": false
}
]
- 如果在你的server.properties中設定了開啟白名單,你可以在伺服器控制台或GUI上使用
/whitelist add <玩家或玩家實體目標選擇器>
指令把玩家加入進whitelist.json
檔案中(由於過渡到UUID系統的原因,不建議直接修改此檔案的內容)。
連接到Minecraft伺服器[]
- 如果你是在作為伺服器端的電腦上玩Minecraft,先選擇「多人遊戲」,輸入「localhost」或者是「127.0.0.1」,而不是你的IP地址。
- 這是不推薦的。除非你有一個效能良好,記憶體比較大的電腦。(伺服器4GB,用戶端2GB,其餘的給系統)
- 在你的局域網內的玩家可以透過內網IP來連接到你的伺服器(因為玩家在局域網內,所以你不需要接口轉發)。
- 從Internet連結的玩家(也就是不在你的局域網中的玩家)必須使用你的外部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。從網站給出的列表中選擇你使用的路由器型號,網站將給出設定端口映射的相應步驟(有廣告,可跳過)。調製解調器、路由器等網路器材附帶的說明檔案也可能包括了設定端口映射的相關資訊。
針對使用動態IP的伺服器[]
- 由於大部分家庭使用者(部分伺服器代理的伺服器也沒有固定IP)使用ADSL或PPPoE等方式接入互聯網,此種情況下的伺服器無論透過路由器與否,IP地址是不定的。解決此問題可以使用動態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服務都會允許你設定這樣的記錄。[1]
如果你要手動驗證SRV記錄是否生效,請參考下面的內容(假設給玩家的域名是「YOUR.DOMAIN.com」):
> nslookup -q=srv _minecraft._tcp.YOUR.DOMAIN.com Server: UnKnown Address: [REDACTED] Non-authoritative answer: _minecraft._tcp.YOUR.DOMAIN.com SRV service location: priority = 5 weight = 5 port = 65312 svr hostname = ACTUAL.DOMAIN.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,否則在該功能開啟時你不能在重生點附近放置或破壞方塊。
問:我的伺服器執行正常,但是我不能連接上去!
答:這可能是由一連串問題導致的。請按照上方提供的模板發帖詢問。
問:如何給伺服器更多記憶體?
答:修改啟動命令列中的「-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。
效能最佳化Java參數[]
對於各類JDK(Oracle或Open)使用者,使用JDK的一些參數進行最佳化是可行的。以下參數在一定程度上最佳化GC記憶體操作且利用了一些CPU指令集。
使用Java 8或之前的版本[]
java -server -XX:-UseVMInterruptibleIO -XX:NewRatio=3 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=4 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+CMSParallelRemarkEnabled -XX:MaxGCPauseMillis=50 -XX:+UseAdaptiveGCBoundary -XX:-UseGCOverheadLimit -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=15 -XX:+DisableExplicitGC -Xnoclassgc -oss4M -ss4M -XX:CMSInitiatingOccupancyFraction=60 -XX:SoftRefLRUPolicyMSPerMB=2048 -Xms(视情况) -Xmx(视情况) -jar <jar文件> nogui
使用Java 9或之後的版本[]
因為從1.17開始不支持Java 8,而在高版本Java上,上面的許多參數都被刪除,暫時沒有替代品,故可以使用以下參數:
java -jar -Xms(视情况) -Xmx(视情况) -server -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M <jar文件> nogui
其他[]
如果上述兩個用例都報錯的話,可以使用伺服器端所屬版本的官方用戶端參數,此參數可以在編輯「配置」介面上的「JVM參數」中找到,然後使用以下參數:
java -jar -Xms(视情况) -Xmx(视情况) -server <在官方启动器中获得的参数> <jar文件> nogui
影片和替代教學[]
這裡給出了一些其他的Minecraft伺服器架設教學:
- Windows
- Mac OS X
- Linux
- 其他
- 一體化教學
參考[]
|
語言