手搭基于Fabric或paper的Minecraft互通服务器

  • ~10.50K 字
  1. 1. 使用Fabric
  2. 2. 使用paper

本篇文章尽量让小白看懂,我使用Debian 12系统,其他的Linux发行版大体上是差不多的,我这里的Minecraft版本是1.20.1

首先使用apt(Ubuntu/Debian默认用的这个包管理器)安装openjdk,我这里的JDK是17版本的

1
apt install -y openjdk-17-jdk

如果是CentOS系统,可以用yum安装openjdk,还要关闭SELinux

以下命令建议根据自己的需求来操作

如果你的服务器在国内的话,你得考虑科学上网了,要不然可能下载失败,假设你在IP为192.168.31.1的机器上有路由设备控制http/socks代理(并且在10809端口允许外网连接)且能够与这台设备通信,那么可以用这个命令暂时设置http代理

1
2
3
export http_proxy="http://192.168.31.1:10809/";
export https_proxy="http://192.168.31.1:10809/";
export no_proxy="localhost, 127.0.0.1, ::1";

使用Fabric

我用mkdir命令在/www/wwwroot/目录新建了fabric文件夹,

然后cd命令切换到了这个文件夹,

然后使用curl命令从Fabric官网下载了服务端的jar文件,这个curl可能需要额外安装(Debian系统的话apt install -y curl就行了,其他的依葫芦画瓢就行了)

1
2
3
mkdir -p /www/wwwroot/fabric
cd /www/wwwroot/fabric
curl -o fabric.jar -LJ https://meta.fabricmc.net/v2/versions/loader/1.20.1/0.14.21/0.11.2/server/jar

然后我使用systemctl工具来控制程序的启动(你也可以使用service等等工具来控制),我这里偷懒使用cat命令一键写入了,你也可以使用vim,nano等等编辑器写入

注意java那里带的参数,其中-Xms指定了堆的内存初始大小,-Xmx指定了内存使用上限,需要根据实际需求更改(我这里是拿64G内存的服务器来跑了)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat>/usr/lib/systemd/system/fabric.service<<EOF
[Unit]
Description=fabric service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=java -Xms1G -Xmx64G -XX:+UseG1GC -jar ./fabric.jar
WorkingDirectory=/www/wwwroot/fabric/

[Install]
WantedBy=multi-user.target
EOF

启动应用:systemctl start fabric

设置自启动:systemctl enable fabric,fabric 将在系统启动时自动启动。

如果需要重启应用,可以使用这个命令:systemctl restart fabric

如果要停止应用,可以使用这个命令:systemctl stop fabric
要查看应用的日志,可以使用这个命令:systemctl status fabric

好了,接下来就是漫长的初始化等待了

首次启动还要把eula.txt的false改成true然后重启应用(也就是同意他的协议)

到这里基本的服务器就能跑起来了,有关配置信息的详细说明可以查阅https://minecraft.fandom.com/zh/wiki/Server.properties

上面的这个

(是心奈的100昏哎)图标可以找一张64*64的png图片命名为server-icon.png上传到fabric的目录下

接下来是mod的安装

比如我需要兼容基岩版的连接,那么我需要去下载能够支持这样的插件,比如Geyser

首先,既然我是用Fabric跑起来的,那我还需要它的API插件即fabric-api,

https://www.curseforge.com/minecraft/mc-mods/fabric-api

Fabric 专用的的Geyser mod在这里下载:

https://ci.opencollab.dev/job/GeyserMC/job/Floodgate-Fabric/job/master/

下载完后将jar文件放在/www/wwwroot/fabric/mods/目录下,使用systemctl restart fabric重启fabric服务就行了

如果需要支持非正版的玩家加入,你还需要Geyser的Floodgate插件,

https://ci.opencollab.dev/job/GeyserMC/job/Floodgate-Fabric/job/master/

下载后也是放在那里的mods目录下,有关它的详细配置说明我就不再详细赘述了,自己去Geyser的wiki看吧

如果要在基岩版聊天,你可能需要在server.properties文件里配置enforce-secure-profile=false

不然的话:

如果你玩生电,那我推荐你去试试投影(Litematica)mod和地毯(Carpet)mod,保证会让你爱不释手

如果你要兼容更低一点的客户端版本进入你的服务器,你还需要ViaVersion mod

到这里一个基本的使用Fabric的Minecraft服务器就搭建好了

对了,不要忘记放行端口(怎么操作看你的服务器提供商了),Minecraft Java默认的端口是tcp 25565,Minecraft 基岩版的默认端口是udp 19132

如果你想给自己一个op,你可以先使用systemctl stop fabric将上面的服务停止,然后cd切换到/www/wwwroot/fabric/目录使用,这样的命令手动运行一下java -jar ./fabric.jar,然后自动会进入程序的控制台,使用op 你的游戏用户名赋予权限,完事了之后你就可以quit退出这个程序,然后继续使用systemctl来控制程序,你可以在游戏内给别的用户赋予权限

我大概的的文件夹结构(供参考)

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
root@Debian-12:/www/wwwroot/fabric# tree -L 3
.
-- banned-ips.json
-- banned-players.json
-- config
-- Geyser-Fabric
-- cache
-- config.yml
-- custom_mappings
-- extensions
-- locales
`-- packs
`-- floodgate
-- config.yml
`-- key.pem
-- eula.txt
-- fabric.jar
-- libraries
-- com
-- github
-- google
`-- mojang
-- commons-io
`-- commons-io
-- io
`-- netty
-- it
`-- unimi
-- net
-- fabricmc
-- java
`-- sf
`-- org
-- apache
-- joml
-- ow2
`-- slf4j
-- logs
-- 2023-07-23-1.log.gz
-- 2023-07-23-2.log.gz
-- 2023-07-23-3.log.gz
-- 2023-07-23-4.log.gz
-- 2023-07-23-5.log.gz
-- 2023-07-23-6.log.gz
-- 2023-07-23-7.log.gz
`-- latest.log
-- mods
-- Geyser-Fabric.jar
-- ViaVersion-4.7.0.jar
-- appleskin-fabric-mc1.20-rc1-2.4.3.jar
-- fabric-api-0.85.0+1.20.1.jar
-- fabric-carpet-1.20-1.4.112+v230608.jar
-- fabric-language-kotlin-1.9.4+kotlin.1.8.21.jar
-- floodgate-fabric.jar
`-- litematica-fabric-1.20.1-0.15.0.jar
-- ops.json
-- server-icon.png
-- server.properties
-- usercache.json
-- versions
`-- 1.20.1
`-- server-1.20.1.jar
-- whitelist.json
`-- world
-- DIM-1
`-- data
-- DIM1
`-- data
-- advancements
-- 00000000-0000-0000-0009-01f644437326.json
-- 02cfc44a-a7ff-4ada-94e9-23d9fee52e68.json
-- 5899fcaf-2983-44f1-8339-2b3f1863e762.json
-- 5bd53475-9562-375a-9dc8-a701f4a36395.json
-- 7a145152-d9c8-377f-b501-0601f9c0d747.json
-- c765aaae-5179-433c-875e-35cbe5a6a24a.json
`-- f280f42d-690b-3272-ad36-baed97c2a96d.json
-- carpet.conf
-- data
-- raids.dat
`-- random_sequences.dat
-- datapacks
-- entities
-- r.-1.-1.mca
-- r.-1.0.mca
-- r.0.-1.mca
`-- r.0.0.mca
-- level.dat
-- level.dat_old
-- playerdata
-- 00000000-0000-0000-0009-01f644437326.dat
-- 00000000-0000-0000-0009-01f644437326.dat_old
-- 02cfc44a-a7ff-4ada-94e9-23d9fee52e68.dat
-- 5899fcaf-2983-44f1-8339-2b3f1863e762.dat
-- 5899fcaf-2983-44f1-8339-2b3f1863e762.dat_old
-- 5bd53475-9562-375a-9dc8-a701f4a36395.dat
-- 5bd53475-9562-375a-9dc8-a701f4a36395.dat_old
-- 7a145152-d9c8-377f-b501-0601f9c0d747.dat
-- 7a145152-d9c8-377f-b501-0601f9c0d747.dat_old
-- c765aaae-5179-433c-875e-35cbe5a6a24a.dat
-- c765aaae-5179-433c-875e-35cbe5a6a24a.dat_old
-- f280f42d-690b-3272-ad36-baed97c2a96d.dat
`-- f280f42d-690b-3272-ad36-baed97c2a96d.dat_old
-- poi
-- r.-1.-1.mca
-- r.-1.0.mca
-- r.0.-1.mca
`-- r.0.0.mca
-- region
-- r.-1.-1.mca
-- r.-1.0.mca
-- r.0.-1.mca
`-- r.0.0.mca
-- scripts
-- session.lock
`-- stats
-- 00000000-0000-0000-0009-01f644437326.json
-- 02cfc44a-a7ff-4ada-94e9-23d9fee52e68.json
-- 5899fcaf-2983-44f1-8339-2b3f1863e762.json
-- 5bd53475-9562-375a-9dc8-a701f4a36395.json
-- 7a145152-d9c8-377f-b501-0601f9c0d747.json
-- c765aaae-5179-433c-875e-35cbe5a6a24a.json
`-- f280f42d-690b-3272-ad36-baed97c2a96d.json

47 directories, 74 files

使用paper

一开始我是使用paper搭建的Minecraft服务器,搭建操作也和上面的大同小异,而且性能我感觉要比Fabric好很多,但是它不支持大部分Fabric的mod,所以我就换过来了,

paper默认禁用了Java原版的TNT、地毯复制,破基岩,需要手动在paper-global.yml开启:

1
2
3
4
5
6
7
unsupported-settings:
allow-grindstone-overstacking: true
allow-headless-pistons: true
allow-permanent-block-break-exploits: true
allow-piston-duplication: true
compression-format: ZLIB
perform-username-validation: true

paper搭建也是依葫芦画瓢,我就不细说了:

vim /usr/lib/systemd/system/paper.service

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=paper service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
ExecStart=java -Xms1G -Xmx64G -XX:+UseG1GC -jar ./paper.jar
WorkingDirectory=/www/wwwroot/paper/

[Install]
WantedBy=multi-user.target

设置自启动:

systemctl enable paper

使用以上命令,paper 将在系统启动时自动启动。如果需要重启应用,可以使用以下命令:

systemctl restart paper

如果要停止应用,可以使用以下命令:

systemctl stop paper 要查看应用的日志,可以使用以下命令:

systemctl status paper

paper的插件放在plugins文件夹里,细节可以查阅paper的wiki,这里不再赘述

文件夹结构参考:

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
root@Debian-12:/www/wwwroot/paper# tree -L 3
.
-- banned-ips.json
-- banned-players.json
-- bukkit.yml
-- cache
`-- mojang_1.20.1.jar
-- commands.yml
-- config
-- paper-global.yml
`-- paper-world-defaults.yml
-- eula.txt
-- help.yml
-- libraries
-- com
-- github
-- google
-- googlecode
-- lmax
-- mojang
-- mysql
`-- velocitypowered
-- commons-codec
`-- commons-codec
-- commons-io
`-- commons-io
-- commons-lang
`-- commons-lang
-- io
-- leangen
-- netty
`-- papermc
-- it
`-- unimi
-- javax
`-- inject
-- net
-- fabricmc
-- java
-- kyori
-- md-5
-- minecrell
`-- sf
`-- org
-- apache
-- checkerframework
-- codehaus
-- eclipse
-- fusesource
-- jline
-- joml
-- ow2
-- slf4j
-- spongepowered
-- xerial
`-- yaml
-- logs
-- 2023-07-23-1.log.gz
-- 2023-07-23-2.log.gz
-- 2023-07-23-3.log.gz
-- 2023-07-23-4.log.gz
-- 2023-07-23-5.log.gz
-- 2023-07-23-6.log.gz
-- 2023-07-23-7.log.gz
-- 2023-07-23-8.log.gz
-- 2023-07-23-9.log.gz
`-- latest.log
-- ops.json
-- paper.jar
-- permissions.yml
-- plugins
-- Geyser-Spigot
-- cache
-- config.yml
-- custom_mappings
-- extensions
-- locales
`-- packs
-- Geyser-Spigot.jar
-- ViaVersion
`-- config.yml
-- ViaVersion-4.7.0.jar
-- bStats
`-- config.yml
-- floodgate
-- config.yml
`-- key.pem
`-- floodgate-spigot.jar
-- server.properties
-- spigot.yml
-- usercache.json
-- version_history.json
-- versions
`-- 1.20.1
`-- paper-1.20.1.jar
-- whitelist.json
-- world
-- advancements
-- 00000000-0000-0000-0009-01f644437326.json
`-- c765aaae-5179-433c-875e-35cbe5a6a24a.json
-- data
-- raids.dat
`-- random_sequences.dat
-- datapacks
`-- bukkit
-- entities
-- r.-1.-1.mca
-- r.-1.0.mca
-- r.0.-1.mca
`-- r.0.0.mca
-- level.dat
-- level.dat_old
-- paper-world.yml
-- playerdata
-- 00000000-0000-0000-0009-01f644437326.dat
-- c765aaae-5179-433c-875e-35cbe5a6a24a.dat
`-- c765aaae-5179-433c-875e-35cbe5a6a24a.dat_old
-- poi
-- r.-1.-1.mca
-- r.-1.0.mca
-- r.0.-1.mca
`-- r.0.0.mca
-- region
-- r.-1.-1.mca
-- r.-1.0.mca
-- r.-2.-1.mca
-- r.-2.0.mca
-- r.0.-1.mca
`-- r.0.0.mca
-- session.lock
-- stats
-- 00000000-0000-0000-0009-01f644437326.json
`-- c765aaae-5179-433c-875e-35cbe5a6a24a.json
`-- uid.dat
-- world_nether
-- DIM-1
-- data
-- entities
`-- region
-- level.dat
-- level.dat_old
-- paper-world.yml
-- session.lock
`-- uid.dat
`-- world_the_end
-- DIM1
-- data
-- entities
`-- region
-- level.dat
-- level.dat_old
-- paper-world.yml
-- session.lock
`-- uid.dat

79 directories, 74 files

终于写完喽~