MC 服务器架设笔记

本文最后更新于 2023年5月26日 下午

LazyCraft 的架设笔记

序:

我也算是个 Minecraft 的老玩家了

疫情期间,大概是2020年中,我在自己电脑上开了个和朋友们一起玩的服务器(主要是闲的蛋疼),名为 LazyCraft

这篇笔记主要是把这些年来在开服过程中学到的东西都记录一下,对其他人有没有帮助不知道

但我不希望把学到的东西都忘掉

关于 LazyCraft:

此服务器运行于 Minecraft Java 原版服务端之上,附带一些优化 Mod 但并无添加非原版物品

服务器共有俩个子服,玩生存的 smp 以及镜像的创造服 cmp

此服务器的结构主要是在参考 TIS,是另外一个非常厉害的生电服

LazyCraft 的架构:

这是 LazyCraft 目前的架构,仅供参考:


flowchart LR
	subgraph Client
	A(Minecraft Java)
	B(Minecraft Bedrock)
	end
	A --> C
	B --> D
	C & D --> E
	subgraph Server
	C["Java port"]
	D["Bedrock port"]
	E{"Bungeecord + geyser"}
	F["smp + floodgate"]
	G["cmp + floodgate"]
	E <--> F & G	
	end


注:阅读本文需要一定的电脑基础以及英文阅读能力,不懂的地方建议多查文档或者 Wiki


架构以及搭建教程:

单个服务端搭建:

原版服务端:

这是一个最基础的服务器,后面的任何升级都是基于此

  1. 首先,你需要为服务器创建一个文件夹:

    • 方便后续理解,这里命名为 myserver
    • 这个文件夹最好放在 HDD 里,因为服务器将会长期读写,不建议 SSD
    • 请记住要为这个文件夹预留足够空间
  2. 下载 server.jar

    或者

    • 从 Minecraft 官方启动器里,点击 Installations 里的 New installation

    • VERSION 一栏的右侧找到 SERVER 字样的按钮

    • 点击下载

  3. 把刚刚下好的 server.jar 放到你的服务器文件夹里

    • 此时路径应是 .\myserver\server.jar
  4. 执行 server.jar

    • 双击,或
    • 在服务器文件夹路径执行
    1
    java -Xmx2G -jar server.jar
  5. 此时应该没有任何反应,并且你会发现服务器文件夹里生成了一些文件

    • 生成的文件中应该包括以下内容:

      • libraries,Minecraft 服务器的库
      • logs,服务器日志
      • versions,Minecraft 服务器版本
      • eula.txt,Eula 协议
      • server.jar,Minecraft 服务端本体
      • server.properties,服务端选项
  6. 用文字编辑器打开 eula.txt

    • 跟随里面的指示把 eula=false 改为 eula=TRUE
    • 不改的话服务端将无法启动
  7. 再次执行 server.jar

    • 应该会弹出来一个后台界面
    • 当后台界面的日志里出现 Done 字样,表示服务器启动成功

此时服务器文件夹目录结构应如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|-- myserver\
|-- banned-ips.json
|-- banned-players.json
|-- eula.txt
|-- ops.json
|-- server.jar
|-- server.properties
|-- usercache.json
|-- whitelist.json
|-- libraries\
| |-- ...
|-- logs\
| |-- ...
|-- versions\
| |-- ...
|-- world\
|-- ...
  1. 至此,最基本的服务器已经部署完毕 o( ̄▽ ̄)d

  2. 如何连接服务器:

    • 考虑这部分篇幅较长,故暂不放在这 (;´д`)ゞ
    • 以后可能会开新博文来写有关这部分的东西(咕~
    • 又或者,在此文的最后一段加上(咕咕~

Fabric 服务端:

我想给服务器来点优化怎么办?

这时候你就需要嵌套个 Fabric 服务端 ˋ( ° ▽、° )

Fabric 服务端可以为你的服务器添加 Mod,想玩一些辅助 Mod 或者想给服务器添加优化的话建议加上

原版:


flowchart LR
a("client")
b["vanilla server"]
a --> b

有 Fabric 服务端:


flowchart LR
a("client")
	subgraph Fabric
	direction RL
	b["vanilla server"]
	c["mods"]
	c -- With Fabric --> b
	end
a --> Fabric

由于 Fabric 是嵌套类的,所以你需要准备一个原版服务端

  1. 安装 fabric-installer

    • 和在客户端安装 Fabric 一样,前往Fabric 官网下载一个 fabric-installer
  2. 启动并安装 Fabric 服务端

    • 启动刚刚下载好的 fabric-installer
    • 和安装客户端不同,请先到 Installer 的左上角选择 服务端
    • 选择需要的游戏版本以及加载器版本(此处请留意 mod 的兼容性)
    • 安装位置请选择服务器文件夹,这里还是用 myserver\ 做演示
    • 请确保安装的位置和 server.jar 是处于同一个
  3. Fabric 服务端安装完成

    • Fabric Installer 应该会弹出来一个成功界面
    • 可以在这里选择 生成启动脚本

此时服务器文件夹目录结构应如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|-- myserver\
|-- banned-ips.json
|-- banned-players.json
|-- directoryList.md
|-- eula.txt
|-- fabric-server-launch.jar
|-- fabric-server-launcher.properties
|-- ops.json
|-- server.jar
|-- server.properties
|-- start.bat
|-- start.sh
|-- usercache.json
|-- whitelist.json
|-- .fabric\
| |-- ...
|-- libraries\
| |-- ...
|-- logs\
| |-- ...
| |-- latest.log
|-- mods\
|-- versions\
| |-- ...
|-- world
|-- ...

多了些文件有没有发现

  1. 启动服务器

    • 不能直接运行 server.jar ,不然不会启用 Fabric
    • 同路径执行另外一个 .jar 文件,应该是叫做 fabric-server-launch.jar,或
    • 执行
    1
    java -Xmx2G -jar fabric-server-launch.jar nogui
    • 日志显示 Done 字样,即为成功

  2. 至此,Fabric 服务端部署完毕 ╰( ̄ω ̄o)


服务端控制工具:

注* 此处非必须

单单是一个服务端我觉得不够,还需要一些插件来丰富游戏体验

在不影响原版服务端做为前提,这里我推荐 MCDR (五毛一条,记得删括号)

https://github.com/Fallen-Breath/MCDReforged

如何部署等问题都能在他们的文档里解决,这里就不过多叙述

为啥我会选择 MCDR :

  • 除了提升游戏内的体验,游戏外的管理也是非常的不错

  • 能很方便的解决你想要的刁钻小功能

一些插件能提升游玩体验,例如广播坐标、坐标记录器、聊天计算器、每日一句等等

这些功能都是可以通过其他方式做到的,加个 mod 就行了

但是有另外一些功能,用 mod 实现还是没那么好,例如存档备份以及回档,同步生存服区块至镜像服等

这些种种功能都是靠插件实现的,这些插件的开发难度非常低,上限却非常高

也就是说当你想到一个刁钻的想法,几乎没人去做,在经过简单的编程下就能实现了

你也可以经过长时间的研磨,把这个插件的功能做到非常强大

这些都是我个人认为的好处,实际上论实用程度还是因人而异

不管怎样,用了这么久的 MCDR,还是觉得有必要推荐一下的 (。・∀・)ノ゙


多个服务端搭建:

一个服务器我看还不够,那就开多几个吧 §(* ̄▽ ̄*)§

LazyCraft 原本是只有一个 smp (生存服),我在深思熟虑之后决定开多一个镜像创造服(cmp)

其实开多一个服很简单,主要还是重复上面的步骤,只不过就要在 server.properties 里面把端口号改改就行了

  1. 先重复上面的步骤开多一个服

  2. 打开 server.properties 并找到 server-port=

  3. 把后面的端口号改成和第一个服务器不一样即可

请确保新的端口号未被占用

  1. 启动服务器,搞腚(


多服务端互联(BungeeCord):

换个服务器就要退出再进入,麻不麻烦,直接在游戏里打个指令不久好了吗  ̄へ ̄

有个叫做 BungeeCord 的玩意,它可以直接在游戏内连接不同的服务器,不再需要退回服务器列表

这个东西原本应该是给 Spigot 服务端用的,不过他也支持原版服务端,对于多子服的服务器就很方便

如何架设:

  1. 在你的服务器文件同级为 BungeeCord 新建一个文件夹:

    • 为后续理解,这里命名为 bungeecord

    • 此时目录结构应该如下:

    1
    2
    3
    4
    |-- serverdir\
    |-- bungeecord\
    |-- myserver\
    |-- ...
  2. 前往 BungeeCord 的 Jenkins 并下载最新的 Artifact:

    • Last Successful Artifacts 那部分点击 BungeeCord.jar 即可下载

    • 只用下载 .jar 文件足矣

  3. 下载完后,把 BungeeCord.jar 放到刚刚新建的文件夹里:

    • 这里作为演示把 BungeeCord.jar 放到 bungeecord 里面
  4. 双击执行 BungeeCord.jar

    • 此时它会在文件夹里生成一堆文件

    • 此时你的 BungeeCord 目录应该如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    |-- serverdir\
    |-- bungeecord\
    | |-- BungeeCord.jar
    | |-- config.yml
    | |-- locations.yml
    | |-- modules.yml
    | |-- proxy.log.0
    | |-- proxy.log.0.lck
    | |-- modules\
    | | |-- ...
    | |-- plugins\
    |-- myserver\
    |-- ...
  5. 看到这么多文件,先别慌,现在唯一需要做的就是配置 config.yml ,其余文件基本上都不会用到

  6. 配置 config.yml

    详细配置请参考 BungeeCord Wiki ,内容实在是太多太多了,这里就只讲些我觉得重要的项目

    • online_mode 可按照自己需求开或者关

    • servers 请填写你的子服名字以及配置,有多少个服就写多少个:

      • 举个例子,我有俩个服,位于端口25565的 smp ,以及位于25585的 cmp :
      1
      2
      3
      4
      5
      6
      7
      8
      9
      server:
      smp: # 服务器名称,***十分非常建议***使用 lowercase
      motd: This is the smp server # 服务器的 motd
      address: 127.0.0.1:25565 # 子服的 IP 以及端口号
      restricted: false # 是否为限制(开限制的服务器只有有权限许可才能进入)
      cmp: # 请***记得使用*** lowercase
      motd: This is the cmp server # 同上
      address: 127.0.0.1:25585 # 同上
      restricted: false # 同上
    • listeners ,监听端口:

      • query_port ,你将通过这个端口访问服务器

        如果 query_port25577 ,那连接服务器时就要填写 {服务器 IP}:{25577}

      • priorities ,填写优先子服(刚刚的服务器名称),如果启用 force_default_server 的话每次进入就会默认是这个子服

      • force_default_server ,是否启用默认服务器,启用的话每次加入都会是指定服务器, 不启用则每次加入都是上次退出的服务器

      • bind_local_address ,默认开启,除非你的系统有多 IP 地址,通常不会动这个

      • host ,默认 0.0.0.0:25577 ,表示 BungeeCord 会在哪个 IP 和端口上运行,这个也通常不用动

  7. 配置子服 server.properties

    使用 BungeeCord 的话原版子服必须要关掉 online-mode,不然无法使用

    (BungeeCord 本身就只是给 Spigot 用的,想使用原版端只能做些妥协 ㄟ( ▔, ▔ )ㄏ)

    • 所有子服online-mode 设置为 false

      • 这不代表关闭了正版验证,只是一旦使用了 BungeeCord 就只能关掉,不然无法加入游戏

      • 无需担心关掉正版验证后的皮肤加载问题,只要是通过 BungeeCord 连接的都能正确显示皮肤

搞腚 ヾ( ̄▽ ̄)

  1. 连接

    启用 BungeeCord 后就不要直接使用原本服务端的端口来连接了,否则会造成一系列问题例如皮肤加载等

    • 如需连接就要使用 BungeeCord 的端口,默认就是 25577

    • 连接 IP :{本机 IP}:{25577}

(之后可能如果有空的话应该大概会出一个有关 BungeeCord 的详细教程以及一路来踩的坑

(先鸽了,拜拜


跨版本连接:

不同 Java 版本:

玩多了都知道,装了亿堆优化 Mod 以及各种原因的服务器更新是个非常蛋疼的事

服务器版本更新不一定跟得上客户端更新,何况 Mojang 还经常来些小更新(.1 .2 .3

运维要死人力 (ノ`Д)ノ

不过,社区玩家们开发了一个 BungeeCord 插件,叫做 ViaVersion

这个插件能让高版本玩家透过 BungeeCord 加入低版本服务器

设置插件:

  1. 前往 ViaVersion GitHub 下载最新 Release

  2. .jar 文件放进 bungeecord\ 文件里的 plugins\

  3. 启动 BungeeCord

  4. 此时刚刚的 plugins\ 文件夹里应该多了一个也叫做 ViaVersion 的文件夹,里面装的是 config.yml

    • 这个是 ViaVersion 的 config 文件,默认不用动就已经设置完成了

    • 不过你可以按照情况修改 config,ViaVersion 有官方文档供查阅

到这部就已经设置完成力 (。・∀・)ノ゙


Bedrock Edition (基岩版)连接 Java 服务器:

有玩家只有 BE (基岩版)怎么办,有办法让 BE 进 Java 的服务器吗 >︿<

MC 官方都买一送一了,直接用 Java 版连不就行了吗 <(  ̄^ ̄)(θ(θ☆( >_<

Geyser 官方文档

由于 Geyser 的使用情况非常situational,本文只用 LazyCraft 的案例教学,还是老话,建议多查官方文档

(等哪天我突然想来个完整教程再说,不过大概率不会

LazyCraft 正在使用 BungeeCord ,所以 Geyser 将会是以 BungeeCord 插件 的形式设置

除了 BungeeCord 插件 ,Geyser 也提供 Standalong 设置,也就是不依赖 BungeeCord

设置 BungeeCord 插件:

  1. 前往 Geyser 的 build server 下载最新的 Geyser-BungeeCord.jar 的文件

  2. Geyser-BungeeCord.jar 文件放进 plugins\

  3. 启动 BungeeCord

  4. 此时应该会在 plugins\ 生成一些配置文件:

    • plugins\Geyser-BungeeCord\ 这是 Geyser 的配置文件路径

    • 你会动的只有 config.yml ,其他一律不用管

  5. 理论上无需再手动配置 config.yml ,直接就能用了,有兴趣的话可以自行查看文档

  6. 连接:

    • BE 连接默认端口是 19132 , 除非你修改过 config.yml 的端口,否则直接填写 本机 IP 以及 19132 即可

    • 注意,BE 是不允许本机连接本机的,所以测试时请使用其他机子(手机等)连接

另外,

如果你的服务器已开启 online-mode ,或

你想让 BE 玩家正确的显示皮肤

那么请在安装 Geyser 插件之外也装一下 Floodgate

还是利用 LazyCraft 的案例教学,本服 Floodgate 是搭配 BungeeCord 使用

设置 Floodgate:

  1. 下载 BungeeCord 插件版的 Floodgate

    • 选择 floodgate-bungee.jar
  2. floodgate-bungee.jar 文件放进 plugins\

  3. 启动 BungeeCord ,启动完成后可以关掉了

  4. 此时 plugins\ 文件夹应该会生成一些 floodgate 的配置文件:

    • plugins\floodgate\ 这是 floodgate 的配置文件路径

    • 理论上你是不需要去动 floodgate 的 config.yml ,有兴趣的可以自行查看文档

  5. 配置 Geyser 的 config.yml

    • 打开 Geyser 的 config.yml ,路径是 plugins\Geyser-BungeeCord\config.yml

    • remote 里的 auth-type 更改为 floodgate

    1
    2
    remote:
    auth-type: floodgate
    • 保存

  6. 搞腚,再次启动 BungeeCord 就可以了 ˋ( ° ▽、° )


连接:

新开了博文来专门写这部分

( ̄﹃ ̄)

点我前往

后记:

呼,终于写完这一篇啦 (;´д`)ゞ

从七月初挖坑结果咕了一整个暑假到现在九月中终于是把坑填上了(大力吸气

说句实在话,这篇下来一直都忽略了不少东西

当初希望这份笔记不要写的太复杂,结果中途就一直注重着「简洁」,内容只做到了「跟着做就能运行」的程度

其中缺乏了很多解释,某些部分感觉描述起来特别麻烦的就只留下了个「可以自行查看文档」

文中用词欠缺统一,读起来可能会有点乱 <(_ _)>

作为我第一份长篇(?笔记,日后我也会去想办法完善的 (‾◡◝)

cya~


MC 服务器架设笔记
https://blissfulalloy79.github.io/03-lazycraft/
作者
BlissfulAlloy79
发布于
2022年7月1日
许可协议