本文为Minecraft服务器搭建系列的第二篇。本文介绍了Minecraft服务器的模组安装与服务器通过公网域名访问和frp内网穿透的相关操作。

若Mermaid图表无法正常显示,刷新页面即可。

MOD

承接上文,Minecraft服务端发的MOD基于Fabric,MOD可以在 CurseForgeModrinth 上下载,可以在MC百科|最大的Minecraft中文MOD百科上查看详细的MOD介绍与依赖关系。另外如果你使用 HMCL 启动器,可以很方便的搜索和下载MOD,无法显示MOD列表的可将HMCL设置为测试版更新后重试。

目前服务器端安装的MOD如下:

$ tree ./mods
./mods
├── architectury-6.3.49-fabric.jar
├── BBOutlineReloaded-2.5-1.19.2-fabric.jar
├── cammies-minecart-tweaks-1.7.jar
├── carpet-tis-addition-mc1.19.2-v1.42.0.jar
├── cloth-config-8.2.88-fabric.jar
├── create-fabric-0.5.0g-791+1.19.2.jar
├── CustomSkinLoader_Fabric-14.15-SNAPSHOT-348.jar
├── emotecraft-for-MC1.19.2-2.2.5-fabric.jar
├── fabric-api-0.66.0+1.19.2.jar
├── fabric-api-0.67.1+1.19.2.jar
├── fabric-carpet-1.19.2-1.4.84+v221018.jar
├── farmers-delight-fabric-1.19.X-1.3.9.jar
├── g4mespeed-1.3.2-mc1.19.jar
├── Geyser-Fabric.jar
├── holograms-1.4.0+1.19.2.jar
├── Jade-1.19.1-fabric-8.6.2.jar
├── journeymap-1.19.1-5.9.0beta2-fabric.jar
├── litematica-fabric-1.19.2-0.12.5.jar
├── lithium-fabric-mc1.19.2-0.10.2.jar
├── magiclib-0.5.37.jar
├── malilib-fabric-1.19.2-0.13.0.jar
├── midnightlib-fabric-1.0.0.jar
├── minimotd-fabric-mc1.19.2-2.0.9.jar
├── plusls-carpet-addition-1.19.2-0.2.5-alpha 0a76b23.jar
├── RoughlyEnoughItems-9.1.572.jar
├── starlight-1.1.1+fabric.ae22326.jar
├── syncmatica-1.19.1-0.3.5.jar
├── tweakeroo-fabric-1.19.2-0.14.3.jar
├── viafabric-0.4.9+21-main.jar
├── whereisit-1.19.2-1.14.13.jar
└── worldedit-mod-7.2.12.jar

玩家想要进入服务器,需要安装如下的客户端MOD,本列表与服务端同步更新:

文件 - Nextcloud (goodnickname.cn)

采用的是HMCL的服务端可更新mod整合包,以后再出文介绍。

生存 · 信息辅助型MOD

可以参考黑山大叔的 1.19.3基础整合包 ,乔哥的 2021年推荐生存必装模组 上「啾」答疑:MC的一些配置 等,都非常详细。

S for Server, C for Client
  • BBOutlineReloadedBBOR,显示群系、光照强度、史莱姆区块等 【C,S可选】
  • fabric-carpet :地毯模组,生存红石必备【SC】
  • Jade :抬头显示【SC】
  • journeymap :小地图和大地图,但1.19.2下会与BBOR冲突,不建议使用【SC】
  • plusls-carpet-addition :PCA,自有协议与客户端同步服务端信息,如箱子物品预览(1.19.2需去Github里找)【SC】
  • carpet-tis-addition :TIS Carpet扩展【SC】
  • RoughlyEnoughItemsREI 物品管理器,显示合成配方【SC】
  • syncmatica :共享投影原理图【SC】
  • whereisit : 高亮显示附近物品容器【SC】
  • Durability Viewer :耐久信息显示【C】
  • EasierVillagerTrading :简单村民交易【C】
  • Inventory Profiles Next :IPN,一件背包整理【C】
  • Replay Mod :录像、回放【C】
  • Xaero's Minimap :小地图【SC】
  • Xaero's World Map :大地图【SC】
  • VoxelMap :体素地图,优点是可以三界共享坐标,自动换算;更新缓慢【C】

mema全家桶:

  • tweakeroo :原版修改【SC】
  • Item Scroller :物品快速合成
  • litematica :投影,创建和还原建造蓝图 【SC】
  • Masa Gadget :Masa全家桶的补充【C】
  • MiniHUD :显示各种信息【C】

增强型MOD

  • CustomSkinLoader :非正版用户显示自定义皮肤【C】
  • emotecraft :动作模组【SC】
  • g4mespeed :改变服务器tick,其实此功能已有其他MOD提供【SC】
  • lithium-fabric :锂,优化以提高帧数【SC】
  • starlight :光照【SC】
  • holograms :全息图,固定地点显示浮空标题【S】
  • viafabric :跨版本兼容【SC】
  • worldedit :创世神,快速建造【SC】
  • Better Beds :床优化 【C】
  • Better Sodium Video Settings Button :视频界面按钮调整【C】
  • Continuity :连续的玻璃【C】
  • Controlling :键位冲突显示【C】
  • Falling Leaves :落叶【C】
  • Sodium :钠,视频优化【C】
  • Sodium Extra :钠 · 扩展【C】
  • Indium :铟,钠的附属模组【C】
  • Iris Shaders :Fabric的光影【C】
  • LambDynamicLights :LDL,动态光源【C】
  • ModMenu :列出安装的MOD【C】
  • Reese's Sodium Options :RSO,Reese的钠视频界面【C】

API(基本两端需装):

  • architectury
  • fabric-api
  • magiclib
  • malilib-fabric
  • midnightlib
  • Cloth Config API
  • Fabric Language Kotlin
  • libIPN 【C】

服务器美化:

  • minimotd :彩色自定义服务器描述与icon【S】

配置文件 config/MiniMOTD/main.conf

icon文件目录 config/MiniMOTD/icons,需要存放 64*64 大小的图片

motd显示部分:

motds=[
    {
        # Set the icon to use with this MOTD
        #  Either use 'random' to randomly choose an icon, or use the name
        #  of a file in the icons folder (excluding the '.png' extension)
        #    ex: icon="myIconFile"
        icon=random
        line1="<rainbow>1.19 Fabric 机械生存友好型服务器"
        line2="Fabric Create FarmerDelight Survival <gradient:blue:red>Server"
    },
    {
        # Set the icon to use with this MOTD
        #  Either use 'random' to randomly choose an icon, or use the name
        #  of a file in the icons folder (excluding the '.png' extension)
        #    ex: icon="myIconFile"
        icon=random
        line1="<blue>Early~ Wolf~ <bold><red>有意思吗!"
        line2="管理面板:<italic><gradient:red:green><u><click:open_url:'http://mc.goodnickname.ga'>https://mc.goodnickname.ga</click></u>"
    }
]
  • Hologram

Simplified Text Format - Placeholder API (pb4.eu)

额外模组

  • Cammie's Minecart Tweaks :矿车锁链、速度调整 【SC】
  • farmers-delight-fabric :农夫乐事 最高1.19.2【SC】
  • create-fabric :机械动力 最高1.19.2 【SC】

间歇泉

使用Geyser模组可以使Bedrock版用户连接至JAVA服务器,但是需要二者版本对应,如果JAVA固定版本而Bedrock端版本随时更新,请配合ViaVersion插件使用,注意如果要持续提供Geyser互通服务,最好JAVA端保持纯净,不安装机械动力等内容型MOD。安装额外内容MOD的JAVA端服务器,即使使用Geyser与ViaVersion也无法完美互通。

  • Geyser-Fabric :基岩版与JAVA版互通

参考:[Geyser-Farbic - Geyser Wiki (superiormc.cn)](https://geyser.superiormc.cn/user-guide/da-jian)

注意Geyser无法翻译MOD数据,配置文件在 config/Geyser-Fabric/config.yml

基岩版默认端口为19132,UDP

diagram of bedrock edition to geyser to java edition

公网访问

VPS有公网IP,可以方便的从公网访问。本服务器部署在本地,需要使用DDNS或内网穿透的方式将服务器暴露在公网。之后可通过ip地址访问Minecraft服务器。若想通过域名连接Minecraft服务器,还需配置域名解析。

端口转发

由于我的出口宽带有公网IP,可以借助华硕路由器的华硕DDNS实现公网访问,仅需要在路由中做端口转发:

服务名称外部端口内部端口本地 IP 地址通信协议来源 IP
Minecraft2556525565192.168.50.130TCP
Minecraft-Bedrock1913219132192.168.50.130UDP

内网穿透

如无公网IP,可以使用内网穿透的方案,需要一台服务器作为中转,将客户端的端口点对点穿透,也相当于反代。

我是用腾讯云的VPS作为服务器,使用 frp 穿透,国内访问延迟很低,但是速度受限于VPS的带宽。

参考:文档 | frp (gofrp.org)

frp安装

从Github下载压缩包:Releases · fatedier/frp (github.com)

wget https://github.com/fatedier/frp/releases/download/v0.46.1/frp_0.46.1_linux_amd64.tar.gz

解压缩下载的压缩包,将其中的 frpc 拷贝到内网服务所在的机器上,将 frps 拷贝到具有公网 IP 的机器上,放置在任意目录。

tar -xzvf frp_0.46.1_linux_amd64.tar.gz

编写配置文件,先通过 ./frps -c ./frps.ini 启动服务端,再通过 ./frpc -c ./frpc.ini 启动客户端。

frps 服务端配置

[common]
# 穿透服务的端口
bind_port =端口
bind_addr = 0.0.0.0
# http服务的端口(本例不适用)
vhost_http_port = 端口
# 认证方式:token
authentication_method = token
token = xxxxxxxxxxxx
heartbeat_timeout = 90
user_conn_timeout = 10a
tcp_mux = true

# 服务端管理面板 端口
dashboard_addr = 0.0.0.0
dashboard_port = 端口

# dashboard对应的用户名/密码
dashboard_user = admin
dashboard_pwd = password

服务端通过./frps -c ./frps.ini 启动。

使用 systemd 管理 frps 服务:

vim /etc/systemd/system/frps.service
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
Restart=on-failure
RestartSec=5s

# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frps -c /path/to/frps.ini

[Install]
WantedBy = multi-user.target

使用 systemctl start frps 启动服务。

frpc 客户端

[common]
# 公网服务器的地址
server_addr = 地址
server_port = 端口
authentication_method = token
token = xxxxxxxxxxxxxxxxxx
protocol = tcp
tcp_mux = true
user = deepin
#log_file = /dev/null
log_level = info
log_max_days = 3

# TCP穿透
[mcjava]
type = tcp
local_ip = 127.0.0.1
local_port = 25565
remote_port = 25565

[mcbedrock]
type = udp
local_ip = 127.0.0.1
local_port = 19132
remote_port = 19132

客户端通过 ./frpc -c ./frpc.ini 启动。

域名解析

添加指向Minecraft服务器IP地址的A记录,如果是家用服务器,可以使用DDNS或内网穿透。

如果您的Minecraft服务器不使用默认端口25565,可以配置SRV解析:

_minecraft._tcp.xxx.com 300 class SRV 1 0 25565 mc.goodnickname.cn