曾经我玩 MC 都是单机的,一年多后才与好友玩起联机;游玩服务器则更是等到某易代理国版之后。

与好友联机是一件很有趣的事。不过众所周知这需要“房主”保持在线,而且大多需要直接在游戏里控制。

数据确实保持在自己手里了,但要与好友在同一局域网里,或配置内网穿透。嗯……稳定性?每次游玩都要我保持在线……曾经这确实不是什么问题,后来大家时间都很紧了,同时在线是几乎不可能的事。我需要一个不受“房主”限制的能实现“联机游玩”的方案……

譬如,搭建 MC 服务器?

准备工作

明确自己开设的服务器的用途,满足自己短时间联机的需求,或是想做大做强,对服务器性能的要求等等。根据需求选择合适的服务器设备。

(如果你愿意,甚至可以使用自己的电脑乃至手机作为服务器。)

一般情况下,你需要做的准备有:

  • 服务器(无论是个人电脑还是购买的云服务器)
  • 浏览器(建议使用 Chromium 系,不建议使用 IE 等古老浏览器)
  • 流畅的网络(如果不流畅请自备加速优化工具)
  • 懂得如何使用搜索引擎、如何阅读官方文档

说明:

  • 本文记录了Java 版MC 服务器的搭建过程以及域名配置,请根据需要选择性阅读;
  • 文中可能存在描述简单、不便书写的内容,请悉知;
  • 请学会阅读官方文档、使用搜索引擎等必备技能。
  • MC 服务器运行目录将以【mcserver】代替,服务端核心名称为server.jar,域名以example.com及其变式为例,IP 以255.255.255.255为例,端口以25565为例。
  • 本教程内实例使用Paper1.20.X,且仅为基础配置,不含插件、MOD(补充:Paper 核心不支持 MOD)等教程。

服务器配置

安装 Java

可能用到的文档:
https://adoptium.net/zh-CN/
https://adoptium.net/installation/linux/
https://www.java.com/zh-CN/download/

提醒:

  • JDK 包含了 JRE,一般安装前者即可。

前往 Java 官网下载:https://www.java.com/zh-CN/download/

我安装的是 Adoptium 的 OpenJDK,它的前身是著名的 AdoptOpenJDK,更新到 jdk16 后被移交给 Eclipse 基金会并改名为 Adoptium Eclipse Temurin

https://adoptium.net/zh-CN/

如果你准备开设的 MC 服务器版本低于或等于 1.16.5,可以安装 Java8。1.17.X 需要 Java16,往后版本甚至需要 Java17,此时最好使用 Java 最新版本

Windows 系统下安装环境难度不大。安装后打开 Win+R 输入 CMD 打开命令提示符,输入命令查看安装成果:

1
java -version

【此处以 Ubuntu20.04 系统操作为例】

【建议略微了解下 vim 编辑器的基本操作,它与你平常使用的编辑器不太一样,但掌握的话使用起来非常方便】

【此处建议结合本节开头的链接文档阅读】

由于国内网络众所周知的原因,使用 Ubuntu 默认软件源速度很慢,故建议配置国内镜像。

登入系统后,输入命令打开软件源配置文件:

1
sudo vim /etc/apt/sources.list

建议备份该文件以防万一:

1
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

将文件内的东西清空后替换为如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#添加阿里源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
#添加清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse multiverse

保存并退出,然后执行命令更新镜像源:

1
sudo apt-get update

之后安装 MC 服务器所需的 Java 环境。执行以下命令搜索:

1
apt search openjdk

按照你的需求选择合适的版本,输入:【请根据自己的需求适当替换命令中的内容】

1
apt install openjdk-17-jdk -y

安装完成后执行命令确认安装成果:

1
java --version

云服务器

一般情况下,至少大厂的云服务器有些有预制 MC 服务器镜像,直接使用即可。若无,可在服务器的操作系统中自行配置。Winserver 和 Ubuntu/CentOS 大致同前面的 Windows 和 Linux

闲置安卓手机

由于我没有进行这方面的实践探索,故此处请自行百度(逃。)。

选择 MC 服务端

下载适合你需求的服务端。可以前往此处寻找:

https://mcversions.net/
https://www.minecraft.net/download/server

MC 服务端核心种类比较多,此处列举比较有名的几个【仅为部分,且不包含 PE 版服务器核心】:

服务端简介与属性下载备注
Vanilla所有核心的源头,最简单最完善的核心。不支持除了原生 Minecraft 外的任何特性内容,不过在安装 Forge/Fabric 之类的插件后可以安装 modhttps://www.minecraft.net/
Bukkit基于 Vanilla 二次开发,给官服加入插件机制。由于 Minecraft EULA 的内容变更与项目归属等原因,该核心在 2014 年 8 月 21 日停止开发https://www.getbukkit.org/
Spigot由 SpigotMC 团队开发,可以看作 CraftBukkit 的延续,在 Bukkit 的基础上支持其自己的 Spigot 插件,优化很好,使用稳定https://www.spigotmc.org/支持插件,不支持 MOD
Paper基于 Spigot 添加了很多有效的优化和更多个性化配置,稳定性和性能好,更新迅速,对服务器性能要求低,但削弱很多官方特性https://papermc.io/支持插件,不支持 MOD
VanillaForge基于官方原版的、可安装支持 ForgeAPI 的模组的服务端,稳定性较好,易于更新,性能较差https://www.curseforge.com/minecraft/modpacks/vanilla-forge
CatServer基于 Spigot,支持大部分 MOD 和插件同时稳定运行,但仅支持 1.12.2https://catmc.org/

对于 Windows 系统而言,可下载后将其复制粘贴到你准备用来运行服务器的文件夹中;对 Linux 系统而言,如果没有图像界面,可以使用命令完成:

1
2
3
4
cd ~
mkdir mcserver # mcserver 可改为其他名称
cd mcserver # mcserver 可改为其他名称
wget https://api.papermc.io/v2/projects/paper/versions/1.20.4/builds/391/downloads/paper-1.20.4-391.jar # wget 后面的链接请根据自己需求修改。在核心的官网找到下载地址并复制下载链接即可。

初始化文件

为方便启动,可在【mcserver】目录下(建议与核心在同一层目录)创建文件并编写启动命令。

新建 start.bat 文件并将以下内容输入保存:

1
2
3
4
5
6
7
8
9
10
11
@echo off 
:: 关闭命令回显

path=%PATH%;【Java 安装目录】
:: 检测系统设置里的环境变量;若未检测到,则使用后面的地址(连同括号一并替换为你的 Java 安装目录,到/bin 目录为止)

java -jar -Xms1000m -Xmx2000m -jar server.jar nogui
:: 这段命令的含义为:调用 Java,以最小内存 1000M、最大内存 2000M 启动 server.jar,不显示图形界面

pause
:: 命令结束后不停顿

新建 start.sh 文件并将以下内容输入保存:

1
2
3
4
#!/bin/sh

java -jar -Xms1024M -Xmx4096M -jar server.jar nogui
:: 将服务端最低内存设置为 1024M,最大内存设置为 4096M,不需要图形界面。

完成后执行脚本,会自动下载所需文件。第一次运行有很大概率会很快终止。此时需要打开【mcserver】目录下生成的elua.txt,将其中的eula=false改为eula=true并保存(代表接受 Minecraft EULA),之后重新运行脚本即可。

配置参数

配置文件

server.properties会在服务端第一次运行时自动生成。它是 Minecraft 服务器的主配置文件,其中行之间的顺序可以打乱,但文件结构不能改变。

#开头的行为注释,不会对游戏造成影响。修改之后,必须重新启动服务端或在控制台使用/reload命令重新加载才能生效。

该文件大致含有如下内容【不同核心、不同版本此处内容会有出入】:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#Minecraft server properties
#Sat Oct 28 01:01:12 CDT 2023
enable-jmx-monitoring=false
rcon.port=25565
level-seed=
gamemode=survival
enable-command-block=false
enable-query=false
generator-settings={}
enforce-secure-profile=true
level-name=world
motd=A Minecraft Server
query.port=25565
pvp=true
generate-structures=true
max-chained-neighbor-updates=1000000
difficulty=easy
network-compression-threshold=256
max-tick-time=60000
require-resource-pack=false
use-native-transport=true
max-players=20
online-mode=true
enable-status=true
allow-flight=false
initial-disabled-packs=
broadcast-rcon-to-ops=true
view-distance=10
server-ip=
resource-pack-prompt=
allow-nether=true
server-port=25565
enable-rcon=false
sync-chunk-writes=true
op-permission-level=4
prevent-proxy-connections=false
hide-online-players=false
resource-pack=
entity-broadcast-range-percentage=100
simulation-distance=10
rcon.password=
player-idle-timeout=0
debug=false
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false
broadcast-console-to-ops=true
spawn-npcs=true
spawn-animals=true
log-ips=true
function-permission-level=2
initial-enabled-packs=vanilla
level-type=minecraft\:normal
text-filtering-config=
spawn-monsters=true
enforce-whitelist=false
spawn-protection=16
resource-pack-sha1=
max-world-size=29999984

# The only server software you should be using is Paper, found here https://papermc.io/
# tacos are tasty. burritos are also tasty. there is no need for war.

对照:
https://minecraft.fandom.com/zh/wiki/Server.properties

对照内容【不建议阅读此处】

https://minecraft.fandom.com/zh/wiki/Server.properties

请直接阅读原文。这里的内容仅用于打不开上面链接时临时查询。

属性类型默认值描述
allow-flight布尔值false允许玩家在安装添加飞行功能的 mod 前提下在生存模式下飞行。
允许飞行可能会使恶意破坏者更加常见,因为此设定会使他们更容易达成目的。在创造模式下无作用。
false - 不允许飞行。悬空超过 5 秒的玩家会被踢出服务器。
true - 允许飞行。玩家得以使用任何能飞行的 mod 飞行。
allow-nether布尔值true允许玩家进入下界。
false - 下界传送门不会生效。
true - 玩家可以通过下界传送门前往下界。
broadcast-console-to-ops布尔值true向所有在线 OP 发送所执行命令的输出。
broadcast-rcon-to-ops布尔值true向所有在线 OP 发送通过 RCON 执行的命令的输
difficulty字符串easy定义服务器的游戏难度(例如生物对玩家造成的伤害,饥饿和中毒对玩家的影响方式等)。如果设置了旧的数字 ID,则会自动转化为英文的难度名称。
peaceful (0) - 和平
easy (1) - 简单
normal (2) - 普通
hard (3) - 困难
enable-command-block布尔值false是否启用命令方块。
enable-jmx-monitoring布尔值false暴露一个具有对象名 net.minecraft.server:type=Server 的 MBean 和两个属性 averageTickTime 和 tickTimes 用于暴露以毫秒为单位的 tick 时间。
为了启用 JRE 的 JMX,你需要添加在此处所述的一些 JVM 标志。
enable-query布尔值false允许使用 GameSpy4 协议的服务器监听器。用于获取服务器信息。
enable-rcon布尔值false是否允许远程访问服务器控制台。
由于 RCON 协议传输数据时没有加密,所以不建议把 RCON 暴露在互联网上。RCON 客户端和服务端交换的所有数据(包括 RCON 密码)都会泄露给正在监听此连接的人。
enable-status布尔值true使服务器在服务器列表中看起来是“在线”的。
enforce-secure-profile布尔值true要求玩家必须具有 Mojang 签名的公钥才能进入服务器。
true - 不具有 Mojang 签名的公钥的玩家不能进入服务器。
false - 不具有 Mojang 签名的公钥的玩家也可进入服务器。
enforce-whitelist布尔值false在服务器上强制执行白名单。
当启用后,不在白名单(前提是启用)中的用户将在服务器重新加载白名单文件后从服务器踢出。
true - 不在白名单上的用户会被踢出。
false - 不在白名单上的在线用户不会被踢出。
entity-broadcast-range-percentage整数(10-1000)100此选项控制实体需要距离玩家有多近才会将数据包发送给客户端。更高的数值意味着实体可以在更远的地方就被渲染,同时也可能提高增加延迟的概率。
这个值是以默认值的百分比来表示的。例如:将此值设为 50,表示将渲染正常情况下一半距离以内的生物。
此功能模仿了客户端视频设置中的功能,而不像客户端的渲染距离设置一样只能在服务器设置的限制下调整渲染距离。
force-gamemode布尔值false强制玩家加入时为默认游戏模式。
false - 玩家将以退出前的游戏模式加入
true - 玩家总是以默认游戏模式加入
function-permission-level整数(1-4)2设定函数的默认权限等级。
4 个等级的详情见 #op-permission-level。
gamemode字符串survival定义默认游戏模式。
如果值是旧用的数字,会静默转换为对应游戏模式的英文名称。
survival (0) - 生存模式
creative (1) - 创造模式
adventure (2) - 冒险模式
spectator (3) - 旁观模式
generate-structures布尔值true定义是否能生成结构(例如村庄)。
false - 新生成的区块中将不包含结构。
true - 新生成的区块中将包含结构。
注:由于地牢和沙漠水井在技术上属于地物,因而即使此项设为 false,其仍然会生成。
generator-settings字符串{}本属性质用于自定义世界的生成。详见超平坦世界和自定义了解正确的设定及例子。
hardcore布尔值false如果设为 true,服务器难度的设置会被忽略并且设为 hard(困难),玩家在死后会自动切换至旁观模式。
hide-online-players布尔值false如果设为 true,服务端在响应客户端状态请求时不会返回在线玩家列表。
initial-disabled-packs字符串空白需要在创建世界过程中禁用的数据包名称,以逗号分隔。
initial-enabled-packs字符串vanilla需要在创建世界过程中启用的数据包名称,以逗号分隔。特别地,功能数据包必须在此指定才能生效。
level-name字符串world“level-name”的值将作为世界名称及其文件夹名。你也可以把你已生成的世界存档复制过来,然后让这个值与那个文件夹的名字保持一致,服务器就可以载入该存档。
部分字符,例如 ‘ (单引号)可能需要在前面加反斜杠号 \ 才能被正常应用。
level-seed字符串空白与单人游戏类似,为你的世界定义一个种子。
这里有一些例子:minecraft,404,1a2b3c。
level-type字符串minecraft:normal使用世界预设 ID,确定地图所生成的类型。
使用世界预设 ID 时,需要在其中的“:”前加“\”转义。原版世界预设 ID 可以省略其前面的“minecraft:”(即命名空间)。
minecraft:normal - 带有丘陵、河谷、海洋等的标准的世界。
minecraft:flat - 一个没有特性的平坦世界,可用 generator-settings 修改。
minecraft:large_biomes - 如同默认的世界,但所有生物群系都更大。
minecraft:amplified - 如同默认的世界,但世界生成高度提高。
minecraft:single_biome_surface - 单一生物群系世界,可用 generator-settings 修改。
log-ips布尔值true是否在有新玩家加入游戏时,在服务器日志中记录其 IP 地址。
true - 在日志中记录新加入玩家的 IP 地址。
false - 在日志中隐藏新加入玩家的 IP 地址。
max-build-height整数256玩家在游戏中能够建造的最大高度。可能会在该值较小时生成超过该值的地形。
max-chained-neighbor-updates整数 [需要更多信息]1000000限制连锁 NC 更新的数量,超过此数量的连锁 NC 更新会被跳过。若为负数则无限制。
max-players整数(0-2147483647)20服务器同时能容纳的最大玩家数量。请注意,在线玩家越多,对服务器造成的负担也就越大。同样注意,服务器的 OP 具有在人满的情况下强行进入服务器的能力:找到在服务器根目录下叫 ops.json 的文件并打开,将需要此能力的 OP 下的 bypassesPlayerLimit 选项设置为 true 即可(默认值为 false),这意味着 OP 将不需要在服务器人满时等待有玩家离开后再加入。过大的数值会使客户端显示的玩家列表崩坏。
max-tick-time
整数(0–(2^63 - 1))60000设置每个 tick 花费的最大毫秒数。超过该毫秒数时,服务器 watchdog 插件将停止服务器程序并附带上信息:服务器的一个 tick 花费了 60.00 秒(最长也应该只有 0.05 秒);判定服务器已崩溃,它将被强制关闭。遇到这种情况的时候,它会调用 System.exit(1)。
译者注:如果你监测服务程序的返回代码,此时返回代码会为 1。(习惯上,程序正常退出应当返回 0)
-1 - 完全停用 watchdog 插件(这个停用选项在 14w32a 快照中添加)
max-world-size
整数(1-29999984)29999984设置可让世界边界获得的最大半径值,单位为方块。通过成功执行的命令能把世界边界设置得更大,但不会超过这里设置的最大方块限制。如果设置的 max-world-size 超过默认值的大小,那将不会起任何效果。
例如:
设置 max-world-size 为 1000 将会有 2000×2000 的地图边界。
设置 max-world-size 为 4000 将会有 8000×8000 的地图边界。
motd字符串A Minecraft Server本属性值是玩家客户端的多人游戏服务器列表中显示的服务器信息,显示于名称下方。
MOTD 支持样式代码。
MOTD 支持特殊符号,比如”♥”。然而,这些符号需要转换为 Unicode 转义字符。你可以在这里找到一个转换器。
如果 MOTD 超过 59 个字符,服务器列表很可能会返回“通讯错误”。
network-compression-threshold
整数256默认会允许 n-1 字节的数据包正常发送,如果数据包为 n 字节或更大时会进行压缩。所以,更低的数值会使得更多的数据包被压缩,但是如果被压缩的数据包字节太小将反而使压缩后字节更大。
-1 - 完全禁用数据包压缩
0 - 压缩全部数据包
注:以太网规范要求把小于 64 字节的数据包填充为 64 字节。因此,设置一个低于 64 的值可能没有什么好处。也不推荐让设置的值超过 MTU(通常为 1500 字节)。
online-mode布尔值true是否让服务器对比 Minecraft 账户数据库验证登录信息。只有在你的服务器并未与 Internet 连接时,才将这个值设为 false。如果设为 false,黑客就能够使用任意假账户连接服务器!如果 minecraft.net 服务器宕机或不可访问,那么该值设为 true 的服务器会因为无法验证玩家身份而拒绝所有玩家加入。通常,这个值设为 true 的服务器被称为“正版服务器”。故意设定该变量为 false 的服务器称为“破解服务器”(也称离线服务器),这类服务器允许拥有未授权的 Minecraft 副本的玩家加入。
true - 启用。服务器会认为自己具有 Internet 连接,并检查每一位连入的玩家。
false - 禁用。服务器不会尝试检查玩家。
op-permission-level整数(1-4)4设定使用/op 命令时 OP 的权限等级。所有存档会从之前的存档继承能力和命令。
1 - OP 可以绕过重生点保护。
2 - OP 可以使用所有单人游戏作弊命令(除了/publish,因为不能在服务器上使用;/debug 也是)并使用命令方块。命令方块和领域服服主/管理员有此等级权限。
3 - OP 可以使用大多数多人游戏中独有的命令,包括 /debug,以及管理玩家的命令(/ban,/op 等等)。
4 - OP 可以使用所有命令,包括 /stop, /save-all, /save-on 和 /save-off。
player-idle-timeout整数0如果不为 0,服务器将在玩家的空闲时间达到设置的时间(单位为分钟)时将玩家踢出服务器
注:当服务器接受到下列数据包之一时将会重置空闲时间:
点击窗口
附魔物品
更新告示牌
玩家挖掘方块
玩家放置方块
更换拿着的物品
动画(挥动手臂)
实体动作
客户端状态
聊天信息
使用实体
prevent-proxy-connections布尔值false如果服务器发送的 ISP/AS 和 Mojang 的验证服务器的不一样,玩家将会被踢出。
true - 启用。服务器将会禁止玩家使用虚拟专用网络或代理。
false - 禁用。服务器将不会禁止玩家使用虚拟专用网络或代理。
pvp布尔值true是否允许 PvP。也只有在允许 PvP 时玩家自己的箭才会受到伤害。
true - 玩家可以互相伤害。
false - 玩家无法互相造成伤害(也称作玩家对战环境(PvE))。
注:由玩家造成的间接伤害(例如熔岩,火,TNT 等,某种程度上还有水,沙子和沙砾)还是会伤害其他玩家。
query.port整数(1-65534)25565设置监听服务器的端口号(参见 enable-query)。
rate-limit整数0设置玩家被踢出服务器前,可以发送的数据包数量。
设置为 0 表示关闭此功能。
rcon.password字符串空白设置 RCON 远程访问的密码(参见 enable-rcon)。RCON:能允许其他应用程序通过互联网与 Minecraft 服务器连接并交互的远程控制台协议。
rcon.port整数(1-65534)25565设置 RCON 远程访问的端口号。
require-resource-pack布尔值false当此选项启用(设为 true)时,玩家会被提示作出选择(是否启用服务器资源包)。如果玩家拒绝则会被服务器断开连接。
但是,若玩家使用 Linux 系统加入服务器,游戏目录内的 server-resource-packs 没有写权限,则会提示“无法应用服务器资源包”“所有依赖自定义资源包的功能都有可能不按预期工作”,并提示玩家“继续”或“断开连接”。若玩家选择“继续”,则仍可在此服务器中游戏。
resource-pack字符串空白可选选项,可输入指向一个资源包的 URI。玩家可选择是否使用该资源包。
注意若该值含”:”和”=”字符,需要在其前加上反斜线 (),例如 http://somedomain.com/somepack.zip?someparam=somevalue 资源包大小理应不能超过
50 MiB(1.15-pre5 前)
100 MiB(1.15-pre5 到 1.18-pre8)
250 MiB(1.18-rc1 起)
注意,下载成功或失败由客户端记录,而非服务器。
resource-pack-prompt字符串空白
可选,用于在使用 require-resource-pack 时在资源包提示界面显示自定义信息。
与聊天组件语法一致,可以包含多行文本。
resource-pack-sha1字符串空白资源包的 SHA-1 值,必须为小写十六进制,建议填写它。这还没有用于验证资源包的完整性,但是它提高了资源包缓存的有效性和可靠性。
server-ip字符串空白将服务器与一个特定 IP 绑定。强烈建议留空该属性值!
留空,或是填入你想让服务器绑定(监听)的 IP。
server-port整数(1-65534)25565改变服务器(监听的)端口号。如果服务器在使用 NAT 的网络中运行,该端口必须被转发(在你有家用路由器/防火墙的前提下)。
simulation-distance整数(3-32)10设置服务端可更新实体范围的最大值,即玩家各个方向上的区块数量(是以玩家为中心的半径,不是直径)。超出此范围的实体不会被更新,对玩家也不可见。
默认/推荐设置为 10,如果有严重卡顿的话,减少该数值。
spawn-animals布尔值true决定动物是否可以生成。
true - 动物可以正常生成。
false - 动物生成后会立即消失。
提示:如果你有严重的卡顿,可以设为 false。
spawn-monsters布尔值true决定攻击型生物(怪物)是否可以生成。
true - 启用。怪物会生成于夜晚和黑暗处。
false - 禁用。不会有任何怪物。
如果 difficulty=0(即难度设置为和平)的话,该属性值不会有任何影响。
提示:如果你有严重的卡顿,可以设为 false。
spawn-npcs布尔值true决定是否生成村民。
true - 启用。生成村民。
false - 禁用。不生成村民。
spawn-protection整数16通过将该值进行 2x+1 的运算来决定出生点的保护半径。设置为 1 会保护以出生点为中心的 3×3 方块的区域,2 会保护 5×5 方块的区域,3 会保护 7×7 方块的区域,以此类推。这个选项不在第一次服务器启动时生成,只会在第一个玩家加入服务器时出现。如果服务器没有设置 OP,这个选项会自动禁用。
设置为 0 会禁用出生点保护。
sync-chunk-writes布尔值true启用后区块文件以同步模式写入。
text-filtering-config字符串 [需要测试]空白服务器中需要被屏蔽的文本。[需要测试]
use-native-transport布尔值true是否使用针对 Linux 平台的数据包收发优化。此选项仅会在 Linux 平台上生成。
true - 启用。启用 Linux 数据包收发优化。
false - 禁用。禁用 Linux 数据包收发优化。
view-distance整数(3-32)10设置服务端发送给客户端的世界数据量,也就是设置玩家各个方向上的区块数量(是以玩家为中心的半径,不是直径)。它决定了服务端的可视距离。(另见渲染距离)
默认/推荐设置为 10,如果有严重卡顿的话,减少该数值。
white-list布尔值false启用服务器的白名单。
当启用时,只有白名单上的用户才能连接服务器。白名单主要用于私人服务器,例如提供给相识的朋友、通过应用流程谨慎选择的陌生人等。
false - 不使用白名单。
true - 从 whitelist.json 文件加载白名单。
注:OP 会自动被视为在白名单上,所以无需再将 OP 加入白名单。

等终端表明运行成功,你可以打开你的 Minecraft 游戏,连接服务器(本地设备的话内网 IP 自行百度获取方法;端口号是你那个配置文件中rcon.port=25565后的内容(此处示例是25565))。

至此,你的 Paper 服务器已经搭建完成。剩下如插件、指令等将由您自行发挥。

至于外网访问,如果你之前选择的服务器是外界可以正常访问(例如公网 IP、服务商分配域名之类),那么这一步可以忽略

外界访问,本地设备没公网,又不想给运营商打电话,咋整?内网穿透自行解决呗。

常见问题

进入服务器验证失败

大概率是因为你没有使用正版 Minecraft。请找到server.properties文件中online-mode=参数,将true改为false

我为什么不能使用命令方块

配置文件找enable-command-block=false,把false改为true

我该如何调整最大玩家数量

配置文件找max-players=20,自行修改后面的数字

自定义域名

我猜很多人可能就是想来看这条的内容。

背景

我是学生党很穷,服务器只能用时创建不用时销毁;没有固定 IP,地址变来变去;我服务器和别人合用/我用的是面板服,端口是随机分配的……

如果你手头有一个域名那么这事就很好办了。只要你能在开服时及时将域名解析好,好友只需记住你这个域名即可连接,而且可以实现免端口访问。

SRV 记录,它是 DNS 服务器的数据库中支持的一种资源记录类型,用来标识某台服务器使用了某个服务,常见于 Microsoft 系统的目录管理。

不同服务商的界面可能略有不同,此处以Cloudflare为例(记得设置为仅 DNS)。

做法

进入 Cloudflare 控制台(其他 DNS 服务商不确定),点击你已添加且将要使用的域名(以example.com为例),在左侧找到记录->DNS,在右边界面找到添加记录按钮并点击。

添加 A 记录填写如下(本地内网穿透的方案我没有尝试过):

参数内容
类型A
名称 (必需)mcs
IPv4 地址 (必需)255.255.255.255
代理状态仅 DNS
TTL1 分钟

这段的效果大致是:如果你的服务器所在的 IP 是255.255.255.255,并且你分配到或你自行配置的端口为25565,那么你可以通过mcs.example.com:25565进行连接。

IPv4 地址为你选择的服务器提供的 IP,面板服或只提供域名的请自行 Ping 服务商提供的域名。不知道端口号的,可以查看根目录下的配置文件server.properties,找到类似于port一项进行查看(例如 paper 核心的服务器,如果其配置文件中有rcon.port=25565,则表明端口为25565)。

很显然,只这么做,进入服务器还是要输入端口号,这可不是我们期望的。

同一个域名可以同时存在 SRV 和 A 解析,这时候就可以再添加 SRV 记录来实现这个功能。

SRV 记录填写如下:

参数内容
类型SRV
名称 (必需)mcs
服务 (必需)_minecraft
协议 (必需)TCP
TTL1 分钟
优先级 (必需)5
权重 (必需)0
端口 (必需)25565
目标 (必需)mcs.example.com

这里的效果大致为:_minecraft._tcp.mcs.example.com指向mcs.example.com并侦听_minecraft服务的_tcp端口25565

如果你发现你的服务器只给了解析记录这样的填写处,那可以试试这样填写:5 0 25565 mcs.example.com

以上设置完后保存即可,等待解析同步 DNS 缓存,2 小时内同步完成(但往往几分钟之内即可)。

之后便可访问mcs.example.com连接 MC 服务器,无需另外输入端口。

至此,你的 MC 服务器自定义访问域名也已配置完成。

后记

参考:

https://zhuanlan.zhihu.com/p/142014944
https://guide.minecraft.kim/guide
https://blog.csdn.net/starvapour/article/details/113415562
https://zhuanlan.zhihu.com/p/508274523
https://dusays.com/383/
https://www.mcio.cn/274.html
https://blog.icyuyan.net/technology/SRV-Tutorial.html