Minecraft Server 設定筆記
===
這個筆記是提供給想開服的伺服器擁有者參考用,
如果你是一般玩家請看[給參與玩家的說明文件](https://docs.google.com/document/d/1IVnEwsqHVE_MQNw2RWO1zUsO4SvlntbHpkqpmjdOxeY/edit)。
## 常用的 server.properties 設定
- `difficulty=2`
遊戲難度,我很常忘記改,0和平、1簡單、2普通、3困難。
- `level-type=CUSTOMIZED`
地圖設定,詳見generator-settings。
DEFAULT預設值、FLAT超平坦世界、CUSTOMIZED自訂。
- `generator-settings={"biomeSize":3}`
地圖設定細節。稍微縮小生態群系大小,biomeSize預設為4。
- `online-mode=false`
線上驗證,俗稱正版驗證。開啟後可使用存於官方的skin等設定資料。
雖然我Server中大部分的玩家都有購買正版,但為了推坑方便還是普遍會關閉。
- `pvp=false`
PVP模式,通常會關閉,但如果有意製作PVP競技場需要開啟該設定,詳見**競技場製作**。
- `enable-command-block=true`
允許指令方塊,如果需要執行指令方塊(eg.蓋競技場、設定傳送點)就需要開啟。
## Server開啟運行參數
```Java
@ECHO OFF
TITLE MINECRAFT
START "MINECRAFT" /ABOVENORMAL /B java -server -Xmx10G -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseNUMA -XX:+CMSParallelRemarkEnabled -XX:MaxGCPauseMillis=50 -XX:+UseAdaptiveGCBoundary -XX:-UseGCOverheadLimit -XX:+UseBiasedLocking -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=90 -XX:MaxTenuringThreshold=15 -XX:UseSSE=3 -XX:+UseLargePages -XX:+OptimizeStringConcat -XX:+UseFastAccessorMethods -XX:+AggressiveOpts -jar server.jar nogui
PAUSE
```
## 歷代模組列表
詳見[模組列表表格](https://docs.google.com/spreadsheets/d/1vTodChJ-0glmX1Y7c35QdofxqXJzKM_to_jF2S8flPw/edit?usp=sharing)。
## 競技場製作
:::info
適用於Minecraft 1.12.2,無使用任何模組。
:::
### 初始化
請確認server.properties中的`pvp=true`。
非戰鬥區域的PVE會以隊伍(scoreboard)實現。
伺服器開始時初始化須執行以下指令。
```shell
/scoreboard teams add Rat
//建立一個隊伍Rat
/scoreboard teams option Rat color aqua
//將Rat隊伍中的玩家名稱改為淺藍綠色,方便辨識狀態
/scoreboard teams option Rat friendlyfire false
//設定Rat隊伍中不會互相誤傷
/gamerule spawnRadius 0
//將玩家預設出生點的區域半徑改為0,即僅於定點重生
```
在玩家進入世界的進入點(預設出生地)設置障礙,
讓玩家只能於特定的缺口出入。
在該缺口的地面設置壓力板,連接至指令方塊。
```shell
/scoreboard teams join Rat @a
//將線上所有玩家加入Rat隊伍
```
玩家離開出生地時會踩到壓力板,
並觸發方塊將線上所有人加入隊伍Rat。
至此完成PVE區域,
並且處於PVE狀態的玩家名稱會是淺藍綠色。
### 建造競技場
競技場需要建造出入口、觀眾席,以及遊玩的場地。
場地可斟酌參考其他遊戲增加礦車、水流、生怪磚等。
競技場周圍為避免玩家從外部非允許的方式進入,
可建造於極遠區域或使用[屏障](https://minecraft-zh.gamepedia.com/index.php?title=%E5%B1%8F%E9%9A%9C&variant=zh-tw)來阻擋。
我們製作時選擇將競技場懸浮於空中,使用傳送點進出。
### 進出競技場
確定競技場位置及對應的出入口座標後,
選擇一個定點作為入口傳送點,
可製作於出生點附近避免遭到破壞。
以壓力板觸發,垂直向下堆疊指令方塊。
```shell
/title @p title {"text":"進入競技場"}
//於最近的玩家畫面上顯示標題
/scoreboard teams leave @p
//把該玩家移出隊伍
/say @p 進入競技場
//伺服器廣播該玩家進入競技場,可使用鐵鉆命名該方塊
/spawnpoint @p 129 64 95
//更改該玩家出生點
/gamemode @p 2
//把該玩家的遊戲模式更改為冒險模式,以免破壞場地
/effect @p 1 5 1
//給予該玩家一個加速BUFF
/tp @p 129 64 95
//傳送該玩家至競技場
```
堆疊方塊時需注意,因為指定玩家的命令是以 @p 運作。
所以傳送的方塊需最後執行。
離開競技場也是同樣原理。
選擇一個定點作為出口傳送點,
可傳送至入口附近,受出生地保護避免被破壞。
以壓力板觸發,垂直向下堆疊指令方塊。
傳送指令最後執行。
```shell
/title @p title {"text":"離開競技場"}
//於最近的玩家畫面上顯示標題
/scoreboard teams join Rat @p
//把該玩家加入隊伍Rat
/say @p 離開競技場
//伺服器廣播該玩家進入競技場
/spawnpoint @p 133 65 95
//更改該玩家出生點
/tp @p 129 64 95
//傳送該玩家回PVE區域
```
這樣基本的競技場雛型已經完成。
還有觀眾席、觀眾席的出入口,以及一些BUG需要解決,如下。
:::warning
一些已知的可能問題:
- 如果同時很多人踩上壓力板?
- 回到PVE區域時出生點被重置?
:::
## TODO
1. server.properties: resource-pack
2. [【心得】Overviewer--將你的地圖「Google地圖」化!](https://forum.gamer.com.tw/Co.php?bsn=18673&sn=624891)
3. 整理愛用模組
## 參考資料
1. [Minecraft Wiki 伺服器](https://minecraft-zh.gamepedia.com/index.php?title=%E6%9C%8D%E5%8A%A1%E5%99%A8&variant=zh-tw)
2. [Minecraft Wiki server.properties](https://minecraft-zh.gamepedia.com/Server.properties)
3. [Minecraft Wiki 地圖自定義](https://minecraft-zh.gamepedia.com/%E8%87%AA%E5%AE%9A%E4%B9%89)
4. [\[討論\] 這幾天我架了伺服器-如何將java最佳化?](https://www.ptt.cc/bbs/Minecraft/M.1358080973.A.E11.html)
5. [minecraft 紅石教室 PVP區域和非PVP區域](https://www.youtube.com/watch?v=5To6IGKm-TE)
6. [【地圖範例說明】PVP - 起始分隊/組隊](https://forum.gamer.com.tw/C.php?bsn=18673&snA=142763)
7. [Minecraft Wiki 指令](https://minecraft-zh.gamepedia.com/%E5%91%BD%E4%BB%A4)
*[@p]: 最近的玩家