从 0 → ∞ 成为 Minecraft JE 腐竹

本文写于 2024.10.13 ,技术与时俱进,但是基础永恒不变。——顾白

前言

Minecraft 至今已经有 15 个年头了,15 年内优秀服务器不断涌现。已经 2024 年了,mc 服务器门槛已经相当的低。网络上虽然各种资料都有,但质量参差不齐。这篇教程将从头到尾介绍创建 mc java 服务器所有基础流程,已经我对 mc 服务器的一些看法。所以这篇教程会非常长而且没有图片

注意:不是所有联机情况都需要开服。如果只是一两个人联机,或者宿舍一起玩,那么局域网联机、联机 mod、内网穿透等联机方式就完全足够了

阅读本篇教程你需要准备的是:

  1. 能分辨问题的脑子,没断掉的且能自由活动的手,能感知光照的眼睛
  2. 能联网的电脑
  3. 一款好用的浏览器,推荐谷歌、edge
  4. 会解压,有一款能用来解压的软件,比如 7-zip 等等
  5. 打开隐藏目录和文件扩展名显示
  6. 一款趁手的文本编辑器,如 vscode 等等
  7. 初中英语水平,以及能够上网找翻译的能力
  8. 不奢求开服赚米回本、敢于试错的心态
  9. 敢于自主解决问题的心态
  10. 耐心

基础教程不涉及 java 编程,其实大多数服主都没有编程基础。如果只是开个基友服,看完本篇教程绰绰有余

在开始之前,还是要说,这篇教程着重教的不是固定模板开服,那会失去自主探索的能力;也不是教某个 mod 或者插件具体怎么用,因为优质教程贴数不胜数。如果只是想找个整合包一键无脑开,那还请选择其他教程。

授人以鱼不如授人以渔


基础教程

准备工作

java 环境

Java Downloads

首先要明确的是,mc java 版是使用 java 语言开发的,java 版服务器也是基于 java 的。至于 java 语言是什么,零基础者只需要知道这是一个能跨平台(win、linux、mac os 等等)的编程语言即可。

既然是 java 语言开发的,那么就要配置一下 java 环境,不然有关 java 的都无法运行。

下面是 mc 各个版本对应的 java 版本。

mc 版本 java 版本
1.12(17w13a)开始 java 8
1.17(21w19a)开始 java 16
1.18(1.18-pre2)开始 java 17
1.20.5(24w14a)开始 java 21

根据想要开的服务器的版本选择 java 环境。

假设这里要开一个 1.21 的服务器,那么就需要下载 JDK 21。要开 1.12 的服务器,就需要 JDK 8

这里可能会有疑惑,为什么我要把 java 写为 JDK,这涉及到 java 的几个版本问题。

实际上,Java 是一种编程语言,而 JDK(Java Development Kit)是用于开发 Java 应用程序的一套工具。

也许有了解过 java 的同学想问,为什么不安装 JRE。这就涉及到 JRE 和 JDK 的区别了

JDK 包括了编译器(javac)、解释器(java)、调试器(jdb)、文档生成工具(javadoc)等开发工具,以及 Java 运行环境(JRE)和 Java 基础类库(Java API)。

JRE 中包含了 Java 虚拟机(JVM)和 Java 标准类库,是运行 Java 程序所必需的环境。

换句话说,JDK 是 JRE plus,JRE 能实现的功能,JDK 都能实现。JRE 没有的功能 ,JDK 也能实现。如果有想要从事 Java 开发的同学,JDK 是刚需。所以果断装全面的,避免以后出现各种麻烦。

注意:同一电脑可以安装多个版本 java。

安装 java 过程要注意安装路径!一定要记住!

下载有两种方案

  1. 下载 exe 安装包,常规安装
  2. 下载 zip 压缩包,压缩包 解压 后包含所有安装内容

两者实际上都可以。压缩包方便拷贝但是没有注册表,安装包一键安装有注册表。如果使用压缩包版本,一定要完整解压再使用!

windows下安装完 JDK 后还需要配置环境变量,使终端能在任何位置下都能检测到 java。也可以不配置环境变量,但是需要在服务器启动程序中标注 java 路径。java 环境配置(详细教程)_java 环境配置-CSDN 博客

至于linux,可以参考这篇教程Linux 配置 Java 环境(图文详细)_⑤ 配置 java 运行环境 linux-CSDN 博客

至于Mac OS,可以参考这篇教程超详细的 Java 安装教程(Mac 版)_mac 安装 java-CSDN 博客

linux 比 windows 优化好多了,为什么不用 linux 开服呢?因为我当初不会 linux

至此你已经完成了 1/4


选择一个合适的服务器核心

推荐镜像站:FastMirror.(镜像站没有 fabric 核心)

服务器不会被 java 自己生出来的。

什么是服务器核心?

服务端核心(简称核心,有时也被叫做服务端)是指开服时用于直接或间接启动 Minecraft 服务器的一类文件,文件名一般以 .jar 结尾。

换句话说,没有核心,就没有服务器

选择一个合适自己的核心是很重要的。

目前服务器模式有:

  1. 官服,纯原版,只支持数据包,这种属于官方核心:vanilla 核心(也被称为香草、官核)
  2. 纯 fabric / forge 模组服
  3. forge + spigot 混合服
  4. 插件服

下面逐一介绍每个模式对应的核心

官服:bugjiang(mojang)发布的服务端,不支持 mod 和插件,支持数据包 下载官核

纯 fabric 端:生电首选,保留了绝大部分原版特性。能安装 fabric mod 以及数据包,不支持插件和 forge mod。兼容性非常好。Download Minecraft Server Launcher | Fabric (fabricmc.net)

纯 forge 端:整合包首选,修复了部分原版特性。能安装 forge mod 和数据包,不兼容 fabric mod。兼容性较差。Downloads for Minecraft Forge for Minecraft 1.16.5

forge + spigot 混合服:既能装 forge mod,又能装 spigot 插件,虽然五脏俱全但是兼容性更差了,崩服、forge mod 不兼容是常见的事

插件服:只能装插件,技术难度无上限。好处是没有了 mod 莫名其妙报错的干扰,容易确定报错点,也没有 mod 服不能随便卸 mod 的困扰。插件服核心种类丰富,如一家独大的 Paper 以及一些分支,老牌 spigot。不同插件服有不同的优势。

paper:优化很好,修复了很多特性,性能更强,支持的插件极为丰富。更新速度比 spigot 慢几个小时或者几天。

folia(paper 分支):paper 团队新产品,为数不多支持多线程的服务器,配置后生电限制少,插件库正在发展,未来可期。

purpur:做了大量优化,可以通过配置选择性打开生电选项,插件丰富,插件生电服首选。

spigot:优化略微逊色,特性修复较少(不足以生电),支持的插件极为丰富,更新速度非常快,新版本发布后几个小时内就能用上 spigot。

还有很多很多核心。但这几款以及足够新手腐竹用了。

插件服发展史放到后面说。

现在,新建文件夹,将你的核心 .jar 文件放进去,就到达了新世界的门口


编写启动脚本

??什么?编写?不是说不用编程的吗?

编写启动脚本可不是编程,而且相当简单。

为什么要编写脚本?主要是给 java 提供参数设置,给 java 一些设置,让 java 的运行符合预期。

如何编写?在windows下,需要新建文本文件,在文件内填入以下内容后将文件后缀的 txt 改为 bat。在linux下,需要新建.sh 文件,填入的内容需要去掉 @ECHO OFFpause,其他内容相同。

这是一个最简单的启动程序。

1
2
"C:\Program Files\Java\jdk1.8.0_301\bin\java" -jar server.jar
pause

看不懂没关系,下面对这些内容逐一解释

首先是最开始引号内的路径,这是指定 java 路径的语句,如果没有配置环境变量,或者是想要指定这个服务器用哪个版本的 java,就可以用这个语句来指定 java。这个路径可以是绝对路径,也可以是相对路径。如果配置好了环境变量,连同引号在内所有内容都可以用 java 代替,比如:

1
2
java -jar server.jar
pause

然后是 -jar ,作用是启动 jar 文件(在这里就是指服务器核心),后面的 server.jar 是指定的核心名。

然后是 pause ,代指程序暂停,这是一个系统命令,与 java 无关。这个命令最大的用处在于,他会让终端在服务器关闭后不会直接消失,这样会很方便查看崩服的原因,不然只能看日志了。

这是一个最简单的启动示例,还有各种各样的启动参数,比如 -Xms Xmx Xincgc 等等,下面是一个很常见的启动参数,相比上面的参数,增加了内存控制

1
2
java -Xms1G -Xmx4G -jar server.jar
pause

-Xmx:最大内存,默认为物理内存的 1/4 或者 1G,必须大于 2M,可以指定单位 k(K),m(M),g(G)

-Xms:初始化内存大小(可以理解为最小内存大小),默认为物理内存的 1/64,需大于 1M,单位上同

-Xincgc:开启增量 GC[垃圾收集(Garbage Collection)通常被称为 “GC”];这有助于减少长时间 GC 时应用程序出现的停顿。但可能会降低 CPU 对应用的处理能力。

对于 forge mod 服(包括 sponge),建议将-Xmx 和-Xms 设为同值

下面是推荐的启动脚本(具体内存数按需更改,分配的内存不要过少)

纯净:

1
2
3
@ECHO OFF
java -server -Xms4g -Xmx8g -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseG1GC -XX:SurvivorRatio=6 -XX:G1ReservePercent=15 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=1 -XX:InitiatingHeapOccupancyPercent=40 -jar 核心名.jar
pause

mod:

1
2
3
@ECHO OFF
java -server -Xms8g -Xmx8g -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseG1GC -XX:SurvivorRatio=6 -XX:G1ReservePercent=15 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=1 -XX:InitiatingHeapOccupancyPercent=40 -jar 核心名.jar
pause

这样就完成了启动脚本的编写。启动脚本需要放到核心同级目录里(也就是在一个文件夹内既要看到核心,又要看到启动脚本)


启动

EULA

一切准备就绪,windows 下直接双击启动脚本,linux 下使用指令运行.sh 文件

如果一切是从头开始且没有报错的话,不出意外,你的程序会暂停。

这是因为你需要同意 EULA 协议,你可以在终端看到 EULA 提示。

Minecraft® EULA 协议,官方网址 https://account.mojang.com/documents/minecraft_eula。其 EULA 协议本质上就是 Minecraft 的发行工作室 Mojang AB 对于 Minecraft 所有用户的一个使用协议。

在服务器文件夹可以看到有个名为 eula.txt 的文件,打开后将 false 改为 true,就代表你同意了协议,然后再次打开服务器即可。没人会憨到改为 true 后把这个文件删掉吧

虽然这是一个无关紧要的必须同意协议,但是我希望所有服主都认认真真看一遍。在最后也会谈到这个问题。

服务器结构

在终端看到 Done 时,代表服务器启动完毕。在这过程中服务器会自动补全所有必要的文件。

不同服务器核心,结构略微有所区别。下面是官核结构

1
2
3
4
5
6
7
8
9
10
11
12
13
服务器文件夹
├─crash-reports //崩溃报告
├─logs //日志,存储终端所有内容
├─world //地图文件
├─banned-ips.json //被ban的ip列表
├─banned-players.json //被ban的玩家
├─eula.txt //EULA协议
├─server.jar //服务器核心
├─ops.json //op以及op等级列表
├─server.properties //服务器配置文件
├─usercache //玩家id、uid、最近一次入服的记录
├─whitelist //白名单列表
├─启动脚本

其他核心结构与官核大差不差,比如 mod 服会多出一个 mods 文件夹,插件服会多出一个 plugins 文件夹,混合服则多出上述两种文件夹。

logs 和 crash-reports

用于记录服务器日志和崩溃原因。这是日后对服务器崩溃进行处理、寻找崩溃原因、抓熊孩子等等重要取证文件。

如果在这些目录中发现了.tar.gz 格式,这是压缩格式的一种,用解压软件打开即可。

地图结构

地图结构在不同服务器核心会有变化。如果使用 paper 核心,会发现还有 world_nether world_the_end 两个文件夹,分别代表地狱和末地文件夹。而 world 文件夹相比其他核心,少了 DIM1DIM-1 文件夹。

这是核心对地图结构的改变,DIM1 相当于 world_the_end,DIM-1 相当于 world_nether。

如果后续使用了多地图插件,或者是能生成更多维度世界的 mod,在两种地图结构中会发现,生成的地图(假设名为 DIM3)位置也不同,在类似于 paper 一样的地图结构中,会生成在 world 文件夹外面,和 world、world_nether、world_the_end 并列;在类似于原版的地图结构中,DIM3 会生成在 world 文件夹内,和 DIM1、DIM-1 并列,被 world 文件夹包含

如果想要在两种地图结构中互相改变,只需要将文件夹重命名后放到对应结构位置即可。

更改服务器地图

如果想将预设地图放到服务器内,首先要按照服务器地图结构将原地图进行结构变化

结构变化后,将服务器关闭,删除现有服务器地图,将预设地图拷贝进来即可

需要注意的是,如果一些插件强制规定了进入服务器时的位置,需要及时更改这个设置。常规方法是先记住预设坐标,在服务器中 tp 到坐标位置,然后将强制规定的进入服务器时的位置在游戏内用指令更改为这个坐标;或者是直接修改插件配置文件。

mods / plugins

用于安装 mod 和插件的文件夹,将需要安装的.jar 文件直接拖入即可。

mod

要注意模组加载器是否匹配,游戏版本是否匹配,是否有冲突,是否缺少前置。forge 模组报错首先搜一下报错内容,或者全部复制下来问 ai。没用解决方案的话就需要联系模组作者了。

下载 mod 推荐mcmodCurseForgeModrinth

plugin

同 mod 要求。插件一般情况下会在 plugins 文件夹生成一个以插件名命名的文件夹,里面存放插件各种配置文件。这些配置文件需要按照插件文档进行修改。可以在后台使用指令 plugins 查看插件情况。

下载插件推荐SpigotMCCurseForge

server.properties 详解

server.properties是储存多人游戏(Minecraft 或 Minecraft Classic)服务器所有设置的文件。

在编辑 server.properties 时,行之间的顺序可以打乱,但文件结构不能改变。每一行的等号之前的文本为变量名,你不应该修改这些内容。等号后面为变量的值,你可以按照规则自行编辑。以#开头的行为注释,添加、修改或移除注释行不会对游戏造成影响。

保存了 server.properties 的更改之后,服务端必须重启才能使更改生效,另一种选择是在服务器后台或游戏中使用/reload命令重新加载,但有时候会产生卡顿。

如果 server.properties 文件未列出一些属性(例如服务端版本更新加入新属性,或该文件还未创建),那么服务器在启动时会重写 server.properties 补全缺失的属性,并将缺失的属性值设为默认值。

尽管有扩展名,server.properties 文件只是一个普通的 UTF-8 编码文本文件,因此可以使用任何文本编辑器进行编辑,比如 Windows 上的记事本、macOS 上的 TextEdit 或者 Linux 上的 nano 和 vim。

下面是 server.properties 配置文件的重要部分的注释,还有一部分翻译一下就出来了~~(blog 好像炸了)~~

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#Minecraft server properties
#(文件修改时间戳)
enable-jmx-monitoring=false
rcon.port=25575
level-seed= // 地图种子,空为随机
gamemode=survival // 默认游戏模式,可能被其他插件/mod取代
enable-command-block=false // 是否启用命令方块
enable-query=false
generator-settings={}
enforce-secure-profile=false // 强制安全验证
level-name=world // 主世界地图文件夹名
motd=A Minecraft Server // motd文本,没啥用,很鸡肋,可以被mod/插件取代
query.port=25565
pvp=true // 是否启用pvp,也可以被mod/插件取代
generate-structures=true // 是否生成结构
max-chained-neighbor-updates=1000000
difficulty=easy // 游戏难度
network-compression-threshold=256
max-tick-time=60000 // 最大延迟
require-resource-pack=false // 是否需要资源包
use-native-transport=true
max-players=20 // 最大玩家数(鸡肋,没用)
online-mode=false // 是否开启正版验证
enable-status=true
allow-flight=false // 是否允许飞行(用来防飞行挂的,但是会防生存使用飞行类mod)
initial-disabled-packs=
broadcast-rcon-to-ops=true
view-distance=10 // 最大视距
server-ip=
resource-pack-prompt=
allow-nether=true // 是否生成地狱(false的话将不会加载地狱,也无法进入)
server-port=25565 // 服务器端口
enable-rcon=false
sync-chunk-writes=true
op-permission-level=4 // op等级权限
prevent-proxy-connections=false
hide-online-players=false
resource-pack= // 资源包链接
entity-broadcast-range-percentage=100
simulation-distance=10
rcon.password=
player-idle-timeout=0
force-gamemode=false
rate-limit=0
hardcore=false
white-list=false // 是否启用白名单
broadcast-console-to-ops=true
spawn-npcs=true
spawn-animals=true
log-ips=true
function-permission-level=2
initial-enabled-packs=vanilla
level-type=minecraft\:normal
text-filtering-config=
spawn-monsters=true
enforce-whitelist=false
spawn-protection=16
resource-pack-sha1=
max-world-size=29999984

也可以参考这篇文章Minecraft 服务器 server.properties 属性文件介绍 (最详细 最全 汉化) - 哔哩哔哩 (bilibili.com)

控制台指令和重要指令

后台使用指令时候,在原版指令的基础上,去掉了最开始的 /

比如,/gamemode 在后台只需要 gamemode

如果指令是双斜杠开头,比如 worldedit 中的 //copy,需要删掉一个 /,也就是在后台输入 /copy (不过这个指令好像不能在后台执行)

几个很重要的指令(这些指令游戏内也可以用,需要 op 权限):

  1. stop 关服指令,尽量不要直接 x 掉或强制关闭进程,很可能回档、丢数据
  2. reload 重载指令,重新加载服务器配置文件以及数据包,但会产生卡顿
  3. list 列出所有在线玩家(包括 carpet 的假人),这个指令也可以用来检测服务器是否正在运行
  4. kick id 踢出玩家,id 为玩家名
  5. ban id ban 掉玩家,id 为玩家名
  6. ban-ip ip/id ban 掉一个玩家所在的 ip,或直接 ban 掉某个 ip
  7. pardon id 解 ban 指令,id 为玩家名
  8. pardon-ip ip 解 ban 指令,ip 为有效地址
  9. banlist ban 列表
  10. op id 给玩家 op 权限,id 为玩家名
  11. deop id 撤掉 op 权限,id 为玩家名
  12. plugins 查看插件情况,绿色为正常,黄色为存在部分问题,红色为出现的问题影响正常功能,基本不能使用

虽然控制台权限至高无上,但是有些指令不能在后台用(比如涉及插件的 gui 界面)


云服务器、物理机

现在整个服务器运行在你的本地,如果想要一直开服,需要 24h 保持运行,这对大部分人来说是不可能的。那么如何解决这个问题呢,那就是云服务器 / 物理机了

下面将云服务器称为机子,我的世界服务器称为服务器,一是方便区分,二是习惯称呼

什么是机子?简单来说,就是远程电脑,这个电脑能保持开机状态,并且服务商提供了公网 ip 和端口让你能从外部连接到机子后台,还会提供一些开放端口让你能够进入服务器。

如何选择机子,配置怎么看

选择机子三要素:稳定,价格,配置

稳定性不用多说,谁都不希望玩着玩着突然机子关机了。当然,大多数服务商不会烂到这种地步。

价格方面,配置越高,价格越高。阿里、华为、腾讯等等大厂的价格极高,在没有优惠的情况下不建议购买。小厂商推荐剑客云、蓝夜科技等。一般来说,一个服务商如果有浏览器控制机子后台的功能(并不是指浏览器控制 mc 服务器后台),那么这个厂商就可以纳入考虑范围之内。因为实现这个功能很麻烦,跑路服务商才不会做

配置方面,看服务器规模。配置几大要素分别是:cpu、内存、硬盘、宽带。

cpu:mc 作为单核游戏,不用过多考虑服务器核心太少,只需要单核性能足够强大。当然,如果是 folia,可以选择降低单核性能,选择更多核心,这样可以利用 folia 多核心性质来降低成本。

内存:2g 起步。生电服推荐 10g 左右,给服务器分 8g(再多点就更好了,8g 有点勉强)。如果是插件服或者模组服,按照插件和模组的多少进行调动。不要担心内存占用太高,内存就是拿来用的,除了系统运行需要外,空 1、2g 内存就是在浪费。

硬盘:10g 起步,服务器开到后期会发现占用硬盘的大头不是插件和模组,而是地图。可以一开始选择较小硬盘,逐渐增加。适当时候开启新周目。

宽带:1Mbps(M) = 128 kb/s。这个绝对是值得花钱的地方。如何估算呢?而一个用户,在不大规模加载地图时候,大概是消耗服务器带宽 20kb/s 左右。玩家加载地图时候的瞬时带宽可能会突破 200kb/s。所以,1M=2.5 人左右~~(有点诡异)~~,推荐 3M 起步。

以上都是云服务器需求,如果物理机,考虑因素更多了。物理机一般比较昂贵,没钱,所以没有经验

如何配置端口

假设现在将服务器已经完整放到机子上,并且能正常运行了。

在 server.properties 配置文件中查看 server-port 项,默认 25565,这是内网端口,现在需要将内网端口开放出去。

开放端口有两种类型,一是对称开放,也就是内网端口和对应的外网端口相同;二是非对称开放,内网端口和对应的外网端口不同。

服务商规定不一定相同,一般有下面几种情况

  1. 规定给某一部分端口开放

    这种属于规定开放的对称端口,只需要将 server-port 值修改为规定端口,然后在游戏内使用 ip:端口的形式进入即可(也有可能是 域名:端口)

    比如规定 30000 为开放端口,将 server-port 改为 30000,然后使用 ip:30000 作为服务器地址即可进入游戏

  2. 自由开放端口,但是开放的外网端口和内部端口不同

    这种属于非对称开放端口,假设 server-port 设为 25565,外网端口生成为 30000,那么就使用 ip:30000 进入游戏

  3. 自由开放端口,开放的外网端口和内网端口相同

    属于对称开放端口,和第一种情况相同,只是没用端口数量和端口号的限制

如何进入服务器

如果是在自己电脑上开服,自己只需要在服务器地址输入 0.0.0.0 即可,也可以是 127.0.0.1:25565localhost:25565 。注意,25565 改为实际内网端口,也就是 server-port 的值。

如果已经放到云服务器上,按照 ip:外网端口 或者 域名:外网端口 的格式即可

比如我的域名是 gubaiovo.com,外网端口是 25565,那么服务器地址填写 gubaiovo.com:25565 即可,如果是 ip 的话同理

mod 服须知,尤其是 forge mod,要确保服务端 mod 和客户端 mod 列表相同。在 mcmod 页面可以看到 mod 安装要求,有的 mod 需要双端都装,有的只需要一端,有的只能一端。forge 要求很严格,客户端必须也是 forge 端。fabric 大部分为优化 mod,要求相对较松。

正版问题,只需要更改 online-mode 项。如果使用了第三方皮肤站作为登录方式,那么需要设为 true 而不是 false。如果设为 false(离线登录),那么 uuid 将会由本地分配而不是微软分配,再次更改为 true 时需要考虑玩家数据问题。因为这个问题不能进入服务器的玩家通常收到的提示时“无效的会话”


基础教程结束。通过以上教程,相信开一个简单的基友服不是问题了。


进阶教程

锦上添花,选用外部优秀教程。我对教程帖挺挑剔的,所以用的都是我觉得不错的帖子

如何使用自己的域名替代 ip:端口 的格式

Minecraft 联机中如何用域名替换 IP 和端口? - 哔哩哔哩 (bilibili.com)

如何为服务器添加 MCDR

快速上手 — MCDReforged 2.13.2 文档

如何实现与基岩版互通

我的世界间歇泉 Geyser 配置文件 config 注释版! - 哔哩哔哩 (bilibili.com)

Geyser 间歇泉实现 Minecraft 基岩版/JAVA 版互通服 - 哔哩哔哩 (bilibili.com)

Minecraft Geyser 互通服开服指南 | SakuraFrp 帮助文档 (natfrp.com)

如何使用面板控制服务器(使用 MCSM)

MCSManager——MC 服务器配置超全教程(Win) - 哔哩哔哩 (bilibili.com)

杂谈 EULA

这里只讨论国际服,不讨论网易。

从小学到现在(2024.10),也算是 mc 腐竹圈的中年人了,也见证了国内 mc 服务器环境的变化。

从最开始多玩盒子联机,到网易接手后联机难度大大降低,网易上各种服务器、联机房间兴起,再到越来越多人加入国际服,pcl、hmcl 独占一方。

曾经 mcbbs 是众多服务器开发者、插件开发者、插件搬运工的聚集地,为国内提供了相当便利的资源站,也是国内很多腐竹的起点。2020 年左右算得上是国内腐竹涌现的时期,其中有良心腐竹,积极听取玩家建议,努力维护服务器,也有渣滓从 bbs 下个快餐服,圈钱跑路。

良心维护也好,圈钱也好,都是个人想法,mojiang 的 eula 从来只是防君子不防小人。人家国外都一堆圈钱服,国内有什么理由不能有呢?双方自愿对吧。

但是,双方自愿的前提是,双方,至少是玩家,对游戏还有足够的积极度。

mc 是一款沙盒游戏,这款游戏是极度依赖社区创作的。如果 mojang 把 mod 全锁死,严格禁止光影材质包,严格禁止第三方服务器,那么这游戏已经离死不远了。

而大多数玩家是没有创作能力的,真正的创作技术掌握在少数人手里,要想让少数人的技术满足大部分人的预期,那么创作者要有创作的动力,玩家要有提出意见的积极性。

现在假设腐竹为 A,开发者为 B,服务器内有两个玩家 C 和 D,C 相对富裕,有赞助的能力。

A 看好 B 的一个作品,花钱得到 B 作品的使用权,C 喜欢服务器的模式,在遵守 eula 的前提下为服务器赞助,D 没有赞助能力,但是他能够宣传给朋友们,带动更多人来玩服务器。

这是一个很正常的发展模式,在这个过程中,A 有了玩家们的支持,愿意继续维护,B 有了 A 的投资,有了创作动力,C 和 D 在服务器也满足了自己的游戏体验,这是一个良性发展模式。

而快餐服的存在,省去了 A 购买 B 使用权的过程,有的只是 A 无限收割玩家的热情。B 缺少了创作积极性,优秀作品逐渐减少。不过当然对 A 没有影响了,因为 A 已经不再购买 B。C 和 D 的热情没有得到正向反馈,热情减少,C 的赞助减少,D 的宣传作用减弱,A 收割的越来越少,直至没人愿意继续在他的服务器玩,于是 A 关掉服务器,不知从何处搞到另一个快餐服,继续以上模式。

受影响的只有 B,C,D。这就是为什么快餐服会削减社区整体积极性。

在 mcbbs 崩盘之后,直到现在,快餐服群体受了很大打击。为什么呢?因为没资源了,那些圈钱腐竹不懂技术,不会升级服务器版本,不会替换新版插件,不知道流行 mod 是什么。

想象中是,快餐服倒闭后,大量玩家涌入良心服务器,良心服茁壮成长。

可是曾经习惯快餐服的玩家,早就没了积极性,快餐服的快节奏也无法融入到良心服相对较慢的节奏。

于是玩家整体规模开始下滑,市场开始缩减。良心腐竹们苦苦维持,全凭着一腔热血,但总有放弃的时候。

以至于现在,出名服务器两只手可以数过来,一个服务器超过十个人常驻就谢天谢地了。

mc 整体规模下降肯定还有别的原因,但我常混迹在腐竹圈,快餐服是我见到的最直接的原因。

说白就是 eula 管的太松了,mojang 在当地都不怎么管,更何况山高皇帝远,mojang 几乎不可能管到中国来。

eula 不只是在开服时候强制要求你同意的一个文件,更应该作为每个腐竹的规范。如何运维好服务器?eula 已经给出答案了。下面是 eula 的部分原文。

本 EULA 是您和我们(Mojang AB 和微软公司或(如适用)下文的“企业信息”一节列出的其当地关联公司之一)之间达成的法律协议。您应该阅读完整内容,但此处简要总结了一些要点以便为您提供指导,完整条款和条件仍然适用。

  • 本 Minecraft EULA 和微软服务协议共同适用于所有 Minecraft 服务。
  • 您的内容为您所有,但请负责任和安全地分享它。
  • 我们的社区标准帮助我们建立一个对所有人开放和安全的社区。
  • 您可以开发工具、插件和服务,前提是它们看起来不是官方项目或者看起来未经过我们批准,例如不使用我们的徽标。
  • 未经我们允许,请勿分发或将我们创建的任何内容用于商业用途。
  • 我们会尽可能做到公开、诚实和相信他人,希望您对我们也是如此。

您可以和不可以用 Minecraft 软件和内容做的事情

您购买我们的游戏后,可以下载、安装和畅玩这些游戏。对于 Minecraft:Java 版的 服务器版本,您可以将其安装在服务器上并主持在线游戏。

但是,除非我们明确同意,否则您不得分发我们创建的任何内容。“分发我们创建的任何内容”是指:

  • 向任何其他人提供我们的游戏软件或内容;
  • 将我们创建的任何内容用于商业用途;
  • 试图通过我们创建的任何内容赚钱;或者
  • 允许其他人以不公平或不合理的方式访问我们创建的任何内容。

因此,为清楚起见,“游戏”或“我们提供的内容”包括但不限于服务以及我们将来可能发布的任何其他游戏。它还包括游戏的更新、补丁、可下载内容、市场内容、加载项或修改版本、这些内容的一部分、商品、视听内容,或我们提供的任何其他内容。

除此之外,我们对您做的事情要求非常宽松,事实上我们鼓励您做一些很酷的事情,只是不要做我们规定不能做的那些事情即可。

一句话来说,就是

Minecraft 这个游戏是我们的,请不要利用我们的游戏来赚钱。

但是 eula 的存在并不为人所知,甚至很多人不知道这到底是什么东西。不像其他应用强制要求看完的用户协议,mc 的 eula 除了开服时候提示一下之外,从来没刻意强调过自己的存在。这也是有原因的,因为 mc 的 eula 针对的不是玩家群体,而是利用 mc 去赚钱的人。

服务器是整个 mc 与资本关系最密切的地方,优秀资源在外可以自由分享,但是一旦到了服务器上就开始变味了。

服务器运营需要成本,需要钱去租机子,需要时间去打磨。腐竹们需要维持运营就需要收入,收入可以是自己工作获得,也可以以公益赞助方式分摊到广大玩家,更可以是吸引氪金成为商业服。

前两者是完全符合 eula 的,而第三者显然违反了 eula。就像上文所说,开设服务器必须要有资本的支撑才能够运行。而这样的“资本来源”对于基于 mc 开设的商业服务器来说,从何而来,是一大难题。

但是 eula 并没有完全限制死商业服的发展

仔细阅读 eula,并没有说“不允许使用 mc 进行任何盈利”,而是说“试图通过我们创建的任何内容赚钱”“允许其他人以不公平或不合理的方式访问我们创建的任何内容”。

以 hypixel 为例,作为全球最大的小游戏服务器,hypixel 中氪金靠着 rank、gold、items 三大类,也就是特权、金币、道具。

hypixel 无疑是商业服,但是为什么说他符合 eula 呢?这三大类为什么符合 eula?

首先,所谓 特权 ,在 hypixel 中仅仅是头衔称号、特效等徒有其表的加成,而 道具 也仅仅用做装饰用途,在实际游戏中,不管氪金多少,考验的都只是玩家的实力。而这些装饰特效,并不是 mojiang 创作的,是 hypixel 工作室自己编写的。所以无论从哪个角度看,hypixel 的商业模式在 eula 的规范下是相当成功的,名利双收。

而快餐服的特点是,吸金,氪金和不氪金的体验差距巨大,甚至能花钱买 op。

所以,eula 虽然没有实权,空有其表,但是确确实实规范了服务器与资本的关系,也确确实实指导腐竹们怎么进行服务器商业化的可持续化。

综上,不要仅仅将 eula 视为不同意就不让自己开服的屑文件。

在商业化时代,想赚钱但是遵守空有其表的 eula 好像确实是商业傻子,来钱肯定不如随心所欲的圈来的快。但不能否认的是,eula 的规范是商业服可持续化的必然之路,我们遵守 eula,也是对 mc 最基本的尊重。

杂谈服务器经济体系

玩了很多服务器,发现玩着玩着,人人大富翁,想要什么直接从服务器商店买,有新人进来先给他几十万带带他。

很明显,遇到通货膨胀问题了。

服务器货币一般有两种模式:

  1. 游戏矿物。比如钻石
  2. 系统商店,计分板货币

首先看第一种,矿物作为货币。以钻石为例,确实是一个理想货币:不可再生,一般情况需要劳动才能获得。但是忽略了劳动难度。开荒时,钻石往往是很稀缺的资源,一个开荒玩家手里一下掏出几组钻石去交易是不可能的,除非没日没夜开矿透去挖。因此,昂贵矿物作为货币往往因为产量过少导致市场缩减

再看第二种,计分板货币,很常见的货币类型。下面是知乎某帖的回复。

由于这个系统为每种劳动都人为定价了,必然会造成获取物品的价值之分(划算与否),导致的结果是所有人的玩法趋同,都向着挣钱最快的游戏方式努力,建设大量相同的设施,甚至养殖大量动物导致服务器卡顿。如果不调整兑换比例,在成为“土豪”后就会迅速对游戏厌倦,导致大量玩家流失,唯一的方式就是开始新周目所有财产清零,这也是很多服务器为什么生命周期如此之短的原因。

总结两个方案。一边是缺钱,一边是钱太多。

针对第一个问题,直接的方案是增大钻石刷新率,并在前期提高钻石的价格。但是当附近钻石都被开采完毕,新玩家只能到更远的地方发展。这一来割裂了玩家,二来新玩家体验很差。

针对第二个问题,直接的方案是继续增大兑换比例,并减少玩家生产能力(比如添加体力系统)。但前一种治标不治本,后一种会引起玩家反感。所以,如果引入了计分板货币系统,通货膨胀是必然结局。

结论就是,mc 中任何经济体系都是没有用的

(写文时候突发奇想一种解决方案,让所有玩家财产公有,但是每人每天有消费上限,共有财产定期收缴一部分。这种模式还是第一次想过)