费了老鼻子劲才搞懂如何部署,对新人实在是太不友好了。所以总结一下。
这里选用 PaperMC + Veloity,使用 docker compose 部署。
首先搞清楚服务器部署原理,有两个东西。
服务核心常见的主要有三种。
服务代理是当你有多个服务端的时候,才需要的东西,通过一个代理,别人可以只记住代理的入口,然后就可以先进入大厅世界,在大厅里选择不同的服务端进入。或者在进入大厅世界,由自己或者管理员输入命令传送到不同的服务端。
这里选择Velocity,因为他和Paper服务端是最适配的。
compose.yaml:
version: '3.8'
services:
lobby:
image: phyremaster/papermc:latest
container_name: mc-lobby
restart: unless-stopped
ports:
# java
- "25566:25565"
volumes:
- ../docker-data/servers/lobby:/papermc
environment:
TZ: 自己改
MC_VERSION: "1.20.2"
EULA: true
survival:
image: phyremaster/papermc:latest
container_name: mc-survival
restart: unless-stopped
ports:
# java
- "25567:25565"
# bluemap
- "8100:8100"
volumes:
- ../docker-data/servers/survival:/papermc
environment:
TZ: 自己改
MC_VERSION: "1.20.2"
EULA: true
creative:
image: phyremaster/papermc:latest
container_name: mc-creative
restart: unless-stopped
ports:
# java
- "25568:25565"
# bluemap
- "8200:8100"
volumes:
- ../docker-data/servers/creative:/papermc
environment:
TZ: 自己改
MC_VERSION: "1.20.2"
EULA: true
velocity:
image: mythoscode/velocity:3.2.0-SNAPSHOT-265
container_name: mc-velocity
network_mode: host
# ports:
# - "25577:25577"
volumes:
- ../docker-data/velocity:/data
environment:
- JAVA_MEMORY=512M
- JAVA_FLAGS=-XX:+UseStringDeduplication -XX:+UseG1GC -XX:G1HeapRegionSize=4M -XX:+UnlockExperimentalVMOptions -XX:+ParallelRefProcEnabled -XX:+AlwaysPreTouch
你会看到我这里还特地多开了端口,是为bluemap插件。可以从网页端查看地图。
然后由于我用的是ARM服务器,所以自己构建了一下 Veloity的镜像,如果是AMD就直接用官方的镜像吧。
先启动 docker compose 项目。注意我专门设置了一个项目名称 mc
.
docker compose -p mc up
通常来说是需要先去配置文件夹里修改 eula 声明为 true的,不过我们在环境里面已经配置过了,所以就省略了,他已经自动帮我们改为true了。
官网还推荐改的:
velocity.toml
player-info-forwarding
改为 modern
。
配置服务器地址,根据自己的实际服务器和网址修改。
# What port should the proxy be bound to? By default, we'll bind to all addresses on port 25577.
bind = "0.0.0.0:25575"
[servers]
# Configure your servers here. Each key represents the server's name, and the value
# represents the IP address of the server to connect to.
lobby = "127.0.0.1:25566"
survival = "127.0.0.1:25567"
creative = "127.0.0.1:25568"
# In what order we should try servers when a player logs in or is kicked from a server.
try = [
"lobby"
]
[forced-hosts]
# Configure your forced hosts here.
"lobby.com" = [
"lobby"
]
"survival.com" = [
"survival"
]
"creative.com" = [
"creative"
]
然后打开 Veloity 的 forwarding.secret
文件,复制密钥。
为了让服务器和代理可以正常使用,还需要对 Paper 设置做出修改以配合 Veloity的设置:
server.properties
:
online-mode
改为 false
。
spigot.yml
:
settings.bungeecord
改为 false
。这个默认就是 false
。
config/paper-global.yml
:
proxies.velocity.enabled
改为 true
。
proxies.velocity.secret
改为刚才从 forwarding.secret
复制的密钥。
接下来就是按照自己的需求配置某些功能、权限和插件了。
这里记录了一些我想要修改的东西:
打开命令方块:
server.properties
来源: https://www.youtube.com/watch?v=hozrPSujlMk
取消出身点保护机制, 这个会让出生点的命令方块无法在非 op 玩家上运行。
server.properties
spawn-protection=0
设置难度
server.properties
difficulty=hard
geyser
Geyser 是一个代理,允许 Minecraft Bedrock 版本的玩家连接到 Minecraft Java 版本的服务器。
它转换了 Bedrock 协议到 Java 协议,从而使这两个不同的版本可以交互。
这意味着一个使用 Bedrock 版本的玩家(如在手机、Windows 10、Xbox、Switch 上的玩家)可以连接到 Java 服务器并与 Java 玩家一起玩。
下载 jar 包,然后放入plugins 文件夹。具体教程看官网。
floodgate
Floodgate 是 Geyser 的一个可选插件。
它允许 Bedrock 玩家无需拥有一个 Java 账户就可以连接到 Java 服务器。如果没有 Floodgate,Bedrock 玩家则需要拥有 Java 版 Minecraft 的账户才能加入。
当 Bedrock 玩家使用 Floodgate 加入服务器时,它们会有一个特定的用户名格式,以区分他们是通过 Geyser 和 Floodgate 加入的。
SkinsRestorer
可以让非正版服务器正确显示皮肤。
官网推荐同时把这插件放到 proxy 和 server。同时还需要修改配置文件。
Viaversion
可以选择安装在代理或者 server上。
https://www.spigotmc.org/resources/viaversion.19254/
Bluemap
地图
https://bluemap.bluecolored.de/
注意 nginx
配置官网的教程不行,需要这样写:
location ~/survival(.*)$ {
proxy_pass http://127.0.0.1:8100$1;
}
DeathCoordinates
死亡后显示死亡坐标
https://github.com/MythosCode/papermc-death-coordinates
ProxyCommand
把命令传递给Velocity,执行 BungeeCord 命令
https://github.com/MythosCode/papermc-proxy-command