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

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

apt install -y openjdk-17-jdk

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

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

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

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就行了,其他的依葫芦画瓢就行了)

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内存的服务器来跑了)

cat <<EOF  sudo tee /usr/lib/systemd/system/fabric.service
[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来控制程序,你可以在游戏内给别的用户赋予权限

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

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开启:

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

[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,这里不再赘述

文件夹结构参考:

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

终于写完喽~