---
lang: zh-TW
---
# Minecraft 伺服器架設全攻略
[TOC]
---
:::info
本教學涵蓋以下主要內容,請根據上方目錄尋找需要的段落,或從頭一步步來。
其中的所有文句都有其存在的意義,不妨一字一句地把它看完吧,不然會...「誒 這個剛剛有說過嗎?」
我是一名接觸Minecraft多年的玩家,也曾是帶領眾多玩家一起遊玩的伺服主。模組、插件、Bungeecord、Geyser 等眾多工具皆有接觸。我想透過集合這些經驗,讓想了解伺服器的玩家,或是已經是大佬級的人物一起讓開伺服器變得不那麼困難。
:::
---
# 簡介
Minecraft 是一款買斷制付費遊戲,玩家不僅可以選擇預設的「最新版本」來啟動遊戲,還可以透過「安裝檔」選擇想要的遊戲版本,或是調整GC參數,更多細節會在之後說明。
除了單人遊戲外,最吸引人的便是他**多人遊戲**的內容,與其他大型遊戲不同,伺服器均是由玩家們自行建立並運行的,玩家可以自行選擇伺服器的「核心」、「版本」、「模組」,更甚至是自定義遊戲規則。整個過程完全不需要額外收費,若你沒有買Minecraft,仍然可以架設屬於自己的伺服器。
伺服器開啟後,便可以邀請朋友們進來一起玩,但是要怎麼加入呢?對於硬體上的設定也是勸退了不少準伺服主,如何只用如「`play.hypixel.net`」這個的IP位址就加入伺服器呢?如何設定數據機的端口導向?多層NAT網路,如何對路由器做多步重定向?DDNS、DNS該如何設定?
\
此攻略將分為以下部分說明
1. 硬體上的準備
2. 軟體上的準備
3. 伺服器連線的方式、方法
4. 伺服器架設步驟
# 硬體需要準備什麼
以[最低標準](https://arc.net/l/quote/lvktfozf)(1~3人)來說,你只需要一台電腦(或租用VPS),一個可靠的網路環境(6Mbp/s 以上),便可以開啟伺服器了。
---
# 軟體需要準備什麼
* 合適版本的 Java (JRE/JDK)
* 伺服器啟動核心
- 地圖檔案(可選)
- 模組(可選)
- 插件(可選)
## 版本所需Java
以下為各MC版本所需之Java版本(JRE或JDK皆可)。 \[[資料來源](https://www.reddit.com/r/feedthebeast/comments/138sarj/what_version_of_java_to_use_for_a_forge_1192/)\]
| Minecraft | 1.13 | 1.14 | 1.15 | 1.16 | 1.17 | 1.18 | 1.19 | 1.20 |
|:---------:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|:----:|
| **Java** | 15 | 15 | 15 | 15 | 17 | 17 | 17 | 17 |
## 核心種類
為自己的伺服器選擇一個合適的核心,直接影響到伺服器的效能與第三方插件或模組的支援性,以下是一些常見的啟動核心。
### [Vanilla](https://mcversions.net/)
Minecraft官方提供的伺服器,絕大部分玩家可以選擇此核心。在巴哈姆特下載的地圖也可以透過這個核心開伺服器。
此核心保有最純粹的原版體驗,包含需多「特性」。
:::info
穩定性:中高
版本支援:全
插件支援:X
模組支援:X
:::
### [Spigot](https://getbukkit.org/download/spigot)
目前主流的插件伺服器核心,可用插件總數最多。原版的許多「特性」在此核心上被保留。
:::info
穩定性:中
版本支援:1.4.6 - latest
插件支援:O
模組支援:X
:::
### [Paper](https://papermc.io/downloads/all)
Spigot的替代品,修復並提升了需多漏洞與性能,建議以Paper取代Spigot作為核心。
:::info
穩定性:高
版本支援:1.8.8 - latest
插件支援:O
模組支援:X
:::
### [Pufferfish(+)](https://pufferfish.host/downloads)
Pufferfish是Paper的分支之一,提昇了效能。
Pufferfish+使用了全非同步架構,效能約提升30%。
:::info
穩定性:高
版本支援:
Pufferfish: 1.17.1 - latest
Pufferfish+: 1.18.2 - latest
插件支援:O
模組支援:X
:::
### [Purpur](https://purpurmc.org/downloads)
Purpur是Pufferfish的分支之一,在他優點之下新增了許多有趣的設定(預設關),例如可以飛行魷魚、可騎乘生物等...
:::info
穩定性:中
版本支援:1.16.5 - latest
插件支援:O
模組支援:X
:::
### [Sponge](https://spongepowered.org/)
獨立API與Forge兼容,可與可支援的插件並用
:::info
穩定性:中
版本支援:1.8 - latest
插件支援:O
模組支援:O
:::
### [BungeeCord](https://www.spigotmc.org/wiki/bungeecord/) [bridge work with Spigot]
可整合與連接不同伺服器,達到分流效果。主要應用在Spigot伺服器。
:::info
穩定性:高
版本支援:ALL
插件支援:O
模組支援:X
:::
### [Velocity](https://papermc.io/software/velocity) [bridge work with Paper]
可整合與連接不同伺服器,達到分流效果。主要應用在Paper伺服器。
:::info
穩定性:高
版本支援:ALL
插件支援:O
模組支援:X
:::
### [Forge](https://files.minecraftforge.net/net/minecraftforge/forge/)
主流模組啟動器、伺服器。
:::info
穩定性:高
版本支援:1.1 - latest
插件支援:X
模組支援:O
:::
### [Fabric](https://fabricmc.net/use/installer/)
還在發展並趨於成熟的Forge替代品,在高版本中流行使用。
:::info
穩定性:高
版本支援:1.14 - latest
插件支援:X
模組支援:O
:::
---
# 伺服器連線
這個部分是相較下最困難的地方,客戶端要如何才能夠訪問到伺服器呢?反向代理、直連IP、DDNS動態域名又是什麼呢?
以下提供多種不同方法實踐,並且會附上其建議與優缺點。可透過DNS補足某些方法的缺點。
## 方法1: [ngrok](https://ngrok.com/)
知名的FRP反向代理平台,人數少時可作為代理使用。可配合CNAME與SRV紀錄綁定在域名上,做到固定IP。
:::info
優點:快速、便捷、延遲相對低、安全性高
缺點:流量限制低,不適用高負載、每次重新啟動端口不固定、僅英文介面對部分人不友好、無圖形化介面
:::
## 方法2: [ZeroTier](https://www.zerotier.com/)
用過都說讚。詳細使用說明,網路上已有大量文章可供參考。
:::info
優點:開源、快速、延遲相對低、系統支援廣泛
缺點:客戶端需安裝額外應用程式、僅英文介面對部分人不友好、25人數限制
:::
## 方法3: [Radmin VPN](https://www.radmin-vpn.com/)
貌似是朋友間主流的選擇,學習成本較低,但連線很麻煩...。詳細使用說明,網路上已有大量文章可供參考。
:::info
優點:快速、延遲相對低,有中文介面
缺點:客戶端需安裝額外應用程式、僅支援Windows用戶、150人數限制
:::
## ~~方法4: [LogMeIn Hamachi](https://vpn.net/)~~
若只有Windows用戶,請改用Radmin,否則請改用ZeroTier。
:::info
優點:快速、延遲低、有中文介面
缺點:客戶端需安裝額外應用程式、5人數限制、穩定性疑慮
:::
## 方法5: 直連
對客戶端最友善的連線方式,浮動IP可搭配[No-IP](https://www.noip.com/)的DDNS服務一起服用。詳細使用說明如下。
:::info
優點:一勞永逸(一般來說)、延遲極低
缺點:設定較難
:::
---
# 架設原版伺服器
此範例以 1.20.4 版本為主
1. 到這個[網站](https://mcversions.net/)找到欲安裝的版本核心,下載`server.jar`檔案

2. 根據上表「版本所需Java」可知,需要安裝Java 17。確定版本並選擇好作業系統後,可以到[此網站](https://www.oracle.com/tw/java/technologies/downloads/#jdk17-windows)下載並安裝Windows版本Java 17

3. 建立一個新空資料夾,並將`server.jar`伺服器核心放入

4. 再建立一個文字文件名為`start.txt`

5. 請先讀完敘述後再動作!先根據以下說明調整後,將調整後的文字輸入進`start.txt`中。將副檔名改為`bat`批次檔案
```!
REM GC來源與詳細說明 https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/
java -Xms?G -Xmx?G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=35 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -Djansi.passthrough=true -jar server.jar --nogui
```
:::warning
1. 將 `-Xms?G` 與 `-Xmx?G` 更改為欲分配的記憶體大小(實際上會略大於),兩者數字填一樣。單位可用`G`或`M`
2. 若設定之記憶體大於12G,請調整以下參數
```
-XX:G1NewSizePercent=40
-XX:G1MaxNewSizePercent=50
-XX:G1HeapRegionSize=16M
-XX:G1ReservePercent=15
-XX:InitiatingHeapOccupancyPercent=20
```
3. 若無法執行,可能是環境變數有問題,可指定`java`為需求之版本。例如:`"C:\Program Files\Java\jdk-17.0.2\bin\java" -Xms....`
:::

6. 建立一個`eula.txt`檔案,並在內部輸入文字`eula=true`並存檔

7. 執行`start.bat`即可開啟伺服器,本機可以透過輸入IP位址 `0` 來登入。多人連線問題請參考「伺服器連線」

---
# 架設模組伺服器
此範例以 1.18.2 - 40.2.0 版本為主
1. 到這個[網站](https://files.minecraftforge.net/net/minecraftforge/forge/)找到欲安裝的版本核心,下載`server.jar`檔案

2. 建立一個新空資料夾,並將`forge-1.18.2-40.2.0-installer.jar`安裝器放入

3. 執行安裝器檔案,並選擇`Install server`,資料夾選擇當前資料夾,並開始安裝(他紅色的不要理他)


4. 可透過`user_jvm_args.txt`設定伺服器記憶體

5. 建立一個`eula.txt`檔案,並在內部輸入文字`eula=true`並存檔

6. 執行`run.bat`即可開啟伺服器,本機可以透過輸入IP位址 `0` 來登入。多人連線問題請參考「伺服器連線」

:::info
較新的版本不需要自行建立`start.bat`,若使用較舊的forge可參考「架設原版伺服器 4.」步驟完成設定
可在`run.sh`或`run.bat`後加上`--nogui`即可不啟動白色GUI視窗

:::
7. 將模組放進`mods`資料夾裡,並重新啟動伺服器即可完成。
---
# 架設插件伺服器
TODO: ...
# 關於客戶端
:::warning
由於新舊版本的設定檔無法相互兼容,客戶端強烈建議使用第三方的啟動器,將各個版本的設定檔案隔開,在後續安裝模組也可以更加便利。
會造成的影響
* 按鍵設定重置 (完整/部分)
* 模組資料彼此污染
:::
---
> [name=XinShou]
---
###### tags: `Tutor` `Minecraft`
<style>
.markdown-body p {
font-size: 18px;
}
</style>