环境

我们至少需要一个 Java8 的运行环境来支持 MC 服务器

安装 Java8

更详细的安装步骤请查阅我的另一篇文章(但没有必要) CentOS7 安装 Java(openjdk)

你可以使用下面的命令快速安装 openjdk-1.8.0

1
yum install java-1.8.0-openjdk

安装 Screen

为了在关闭终端后服务器仍然能够运行,我们可以使用 screen

1
yum install screen

服务端

服务端的选择有很多,这里我们使用基于 Spigot 进行优化的 PaperMC,它可以利用多个 CPU 核心进行异步线程操作,它允许你在服务器使用高频红石而不会导致服务器瞬间崩溃,还有一些其它的优化。PaperMC 与 Spigot 及大多数基于 CraftBukkit 的服务端配置几乎一致。

准备工作

获取 jar

无论何种版本的 Java 服务端,都是以 jar 程序包的形式传播,你可以在 PaperMC 官方下载 选择自己需要的核心版本下载。本文发布时的最新版本为 Paper-1.14.4 Build-226

网络

确保你想使用的服务器端口(默认为25565)不会被任何防火墙拦截

放行 25565 端口的 TCP 协议通信

1
2
3
4
# 将25565/TCP 添加到防火墙公共组,并保持永久生效
firewall-cmd --zone=public --add-port=25565/tcp --permanent
# 重启防火墙使配置生效
firewall-cmd --reload

当然你也可以粗暴一点,直接关闭防火墙

1
2
3
4
# 停止防火墙服务
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service

这时你还需要检查服务器提供商(如阿里云、腾讯云)面板中的安全组策略或者防火墙,开放相应的端口

文件

将刚才下载的服务端 jar 文件上传到服务器固定目录里,如 /root/PaperMC

启动

为了使服务器性能最大化,我们需要对 java 启动参数进行一些配置和优化,因此命令可能会很长,这是我们就需要建立一个脚本来快速启动。
注意,下面的操作都将会在 /root/PaperMC 目录(你存放服务端程序的目录)下进行

1
2
创建并编辑启动脚本 start.sh
vi start.sh

这时会进入一个编辑窗口,按下i开始编辑,写入以下内容

1
screen -S PaperMC java -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=45 -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:InitiatingHeapOccupancyPercent=10 -XX:G1MixedGCLiveThresholdPercent=50 -XX:+AggressiveOpts -XX:LargePageSizeInBytes=2M -jar [paper-226.jar]

其中,最后由中括号括起来的内容替换成你的服务端程序文件名。
按下 ESC,然后输入 :wq 后按下 Enter 即可保存退出。

现在我们需要赋予启动脚本可执行权限

1
chmod +x start.sh

一切就绪!

你现在只需要键入

1
2
./start.sh
# 快捷键 Ctrl+A D 可以使其切换到后台运行

不出意外的话,就会开始加载服务器了,当你看到 Done! 时,服务器就启动完成了
你可以通过 [服务器IP地址]:25565 来连接服务器
开始玩吧!

常用 Screen 命令
快捷键 Ctrl+A D 将正在前台的 screen 切换到后台运行
screen -S [TAG] [command] 打开一个 screen 终端,并设置标签(TAG),command为执行的命令
screen -ls 列出所有后台运行的终端
screen -r [TAG] 将标签为 TAG 的终端切换到前台
screen -X -S [TAG] quit 快速杀死标签为 TAG 的终端

优化

网络优化(BBR 加速)

TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google设计,于2016年发布的拥塞算法。它可以降低网络延迟

推荐使用一键安装脚本自动安装

1
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

当然,你也可以查看我的另一篇文章来手动安装 Centos7 安装 TCP BBR 拥塞算法

配置文件

paper.yml

paper.yml 是 PaperMC 服务端的配置文件

配置项 配置内容 默认 建议 释义
optimize-explosions 爆炸优化 false true 这里提供了一个可选的,更高效的爆炸算法。使用它能够迅速地清除在爆炸中死亡的实体。需要注意的是,此功能有可能会影响到TNT大炮的效果
mob-spawner-tick-rate 怪物生成频率 1 20 此值决定了在一个怪物生成以后要过多久才会继续生成下一个。设置高些不但不会导致怪物生成速度放缓,并且能变相地实现异步 提升怪物生成的效率。
disable-chest-cat-detection 禁用猫检查 false true 通常,在玩家打开箱子时会首先检查箱子上是否坐有猫或者是豹猫。此选项能够禁用这个检查,将会允许猫坐在箱子上的同时打开箱子
container-update-tick-rate 背包刷新率 1 3-4 此值控制背包刷新的频率(以tick计算),设置大些能够缓解压力。但需要注意的是,如果高于5,会导致玩家明显感觉到迟钝。

spigot.yml 是 Spigot 服务端的配置文件

配置项 配置内容 默认 建议 释义
late-bind 延迟加入 false true 这个选项不会对性能有提高,并且可能会导致某些插件无法使用。能够在服务器所有插件完全启用之前,玩家无法进入。在某种程度上提高安全性,但这个是完全可选的。
mob-spawn-range 怪物生成范围 4 3 控制怪物能在离玩家多远的距离内生成。之前加大了怪物的生成频率,这会导致我们产生没有减少怪物生成的错觉
entity-activation-range 实体活跃范围 a:32/mon:32/misc:16 a:6/mon:16/misc:2 在这个范围以外的实体将会被较少地运算。动物的范围不需要那么大,而’misc’基本上就是掉落物品,但如果设置为1可能会导致物品不能在水中流动。此选项对实体的性能有巨大提升!
view-distance 视距 10 3-5 决定发送多少区块到每个玩家。通常建议4,因为3会导致末影珍珠能够被丢入被卸载的区块内。如果你为玩家体验着想,建议设置在4-6,不要太低

bukkit.yml 是 CraftBukkit 服务端的配置文件

配置项 配置内容 默认 建议 释义
spawn-limits 怪物生成范围 70/15/5/15 50/10/3/4 事实上,这个选项绝不仅仅是’’对于每个玩家允许生成的怪物数量’’那么简单,但这确实有一定根据。降低这些数值能够减少在玩家周围生成的怪物数量如果你的玩家较多,你可以放心低减小它。此选项设置过低会使玩家感到难度过于简单和难以找到怪物
chunk-gc 区块回收 period-in-ticks:600/load-threshold:0 period-in-ticks:300/load-threshold:300 在加载大量区块时会触发强制回收。只是在一定的情况下会有用。
ticks-per.monster-spawns 每 tick 怪物生成 1 2-5 设置怪物生成的间隔/频率(以tick计算),此选项是针对整个服务器而言的,而不是单个玩家将此值提高会大大降低怪物的生成数量,通常建议设置为2,除非服务器有巨大的怪物数量。此选项设置过高会使玩家感到难度过于简单和难以找到怪物