本篇文章尽量让小白看懂,我使用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

终于写完喽~

  • wechat_img
届ける言葉を今は育ててる
最后更新于 2023-07-29