部署
费了老鼻子劲才搞懂如何部署,对新人实在是太不友好了。所以总结一下。
这里选用 PaperMC + Veloity,使用 docker compose 部署。
结构
首先搞清楚服务器部署原理,有两个东西。
- Minecraft 服务端
 - Minecraft 服务代理
 
服务核心常见的主要有三种。
- Vanilla
官方的最原始的纯净服务端。 - 插件端
插件端就是插件只需要安装在服务器李。客户端是不需要任何修改的。比如安装一键砍树,一些简单的功能扩展这种。
下面是几个常见的服务端:- Bukkit
给官服加入插件机制,已停止开发,主要继承者是 Spigot。 - Spigot
给 Bukkit 服务端加入大量优化,速度相当快,大众常用的一个服务端。 - Paper
基于 Spigot 添加了一些比较深度的优化,是最快、大众常用的服务端。 
 - Bukkit
 - Mod 端
Mod 端是需要同时在客户端和服务端安装Mod的,这些都是设计重大更改的,比如工业模组这种。同时由于大量的逻辑功能修改,相对于插件端,很多Mod(注意不是指Mod服务端,而是指Mod)他们会重点专注于某些版本上。插件端相对来说,插件会很快更新到新版本。- Forge
老牌,稳定。 - Fabric
因为不满于Forge更新慢。 退出的模块化,开源服务端。 
 - Forge
 
服务代理是当你有多个服务端的时候,才需要的东西,通过一个代理,别人可以只记住代理的入口,然后就可以先进入大厅世界,在大厅里选择不同的服务端进入。或者在进入大厅世界,由自己或者管理员输入命令传送到不同的服务端。
这里选择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
 
配置支持 Veloity
通常来说是需要先去配置文件夹里修改 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 -  
取消末地:
bukkit.yaml

 -  
取消下界
server.properties

 -  
取消出身点保护机制, 这个会让出生点的命令方块无法在非 op 玩家上运行。
server.propertiesspawn-protection=0 -  
设置难度
server.propertiesdifficulty=hard 
安装插件
Velocity
-  
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/ 
Paper
-  
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 














![[Spring] Spring5——IOC 简介(二)](https://img-blog.csdnimg.cn/acdd080d850849fcb6e456c3168fb3e6.png)




