本文原文发布于 GitHub,完整版可见于 此处 。因为使用了一些非标准 Markdown 语法因此在本页面可能显示不完全,在此处发布仅仅只是为了归档原文。

依照原文,采用 CC BY-NC 3.0 中国大陆 协议授权

前言

之所以想写这一篇一条龙教程,实在是因为国人开服,功利心很重,不需要过程,只需要结果。有的人开服,喜欢网上抓一个整合包就开起来,自己不会改,但是只要能得到「结果」就好了。在这个大环境下,国内服务器圈弥漫着一股粗制滥造和模板化的问题。而真正想从零开始的小白服主,又很难找到一个精准,完全的开服教程,往往要东拼西凑,获得经验。

本文的初衷是一条龙服务,为希望认真学习开服技术的小白服主们提供全面的服务。通过循序渐进的方式,通过夹杂着故事的技术讲解,为小白服主们揭开服务端的神秘面纱。

本文为本人耗时多天完成,难免有一定纰漏,如有技术上或语言上的问题欢迎指正。同时,本文还会持续更新,如果您有什么不理解的开服问题需要详细了解,也欢迎回复告诉我您的想法。

本文的贡献者:
- 贺兰星辰(主要编写者)
- TheZihanGu
- Subilan
- iceBear67
- 晓夜
- 以及所有对本文提出过宝贵意见的人

务必 注意查看标注的每一个注释,他们都非常有用。

阅读前,请先了解以下事项:

  • 本文 适用于非 Java 版

  • 本文 讨论代理服务端

  • 本文 讨论如何进行端口映射,端口转发等工作

  • 本文所有操作均视为您的操作系统环境已显示文件拓展名。且重命名文件时均包含拓展名

  • 如无特殊说明,本文均采用 CC BY-NC 3.0 中国大陆 协议授权

如果您已经准备好了,烦请继续向下阅读

一、服务端核心介绍

服务端核心(简称核心,有时也被叫做服务端)是指开服时用于直接或间接启动Minecraft服务器的一类文件,文件名一般以.jar结尾。
一般情况下,我们使用 CMD/PowerShell (可执行文件名以.bat为结尾)或是 *nix Shell (可执行文件名以.sh为结尾)运行这样的程序以启动服务器。

为什么要说「直接或间接」

一般情况下,一个服务器的大部分运行代码都存在那一个小小的罐子(指核心)里,且这些核心通常直接修改Minecraft的代码来分发。
但是某些服务端核心里,用于运行服务器核心代码完全不在这个文件里,为什么呢?
这是因为 Mojang 的最终用户许可协议 (EULA)规定,未经授权的任何人都不能二次分发 Minecraft 二进制文件,以及作为 End User 的我们您不得分发我们的游戏或软件的任何 Mod 化版本(摘自Mojang Eula)

或许有读者会好奇: 那么,如果我就是这样干了,又怎么样?
那么你应该看看CraftBukkit的下场。
CraftBukkit 服务端因为本体直接包含 Minecraft 代码,违反了 Mojang EULA 和千禧年数字版权法 (DMCA),面临被起诉的风险,最终被迫停止开发。

有趣的是,仍然会有「直接」启动的核心存在。像是 Spigot,Paper..那么他们为什么没有被起诉?

BuildTools

他们(大部分)不提供带有Minecraft代码的文件,而是提供了 BuildTools(构建方法)。通过 BuildTools,我们可以在自己的计算机上合成可直接运行的服务端核心,以此绕过了Mojang EULA和DMCA的规定(他们管直接分发但是不管间接)

注意: 即使如此,BuildTools 并不是「间接启动核心」,他只是让发布者间接发布了可以直接启动的核心

「间接启动」核心

但是 BuildTools 的过程通常非常慢,它还需要很多乱七八糟的东西..因此有些核心放弃 BuildTools,用了其他方法。

PaperClip

PaperMC(一种服务端核心的团队) 会把每一次的更新制作成一个个补丁文件的形式。

用户下载到的文件将会是一个补丁安装器,该核心安装器从 Mojang 下载未经过修改的 Minecraft 后,现场给你打补丁。

paperclip: (人家本质也是 BuildTools 啦..)

什么是 CMD,什么又是 *nix Shell?为什么我们不能直接双击 jar 运行服务端核心?

TL;DR

你当然可以这样启动服务器,但是你没法设置 Java 进程参数。

CMD 是什么?

CMD/Command,本教程中泛指Microsoft Windows命令提示符

如果你是 Windows 用户,按下 Win+R,输入cmd后回车,弹出的窗口就是 CMD

在 CMD 中,你可以运行程序,设定命令行参数。

*nix Shell 是什么?

*nix 是unix-like的意思。包含了基于Linux,Unix内核开发的发行版(「macos 基于 unix 哦」)

Shell 起到和 Windows 中命令提示符的作用,他可以启动程序,设定命令行参数。

...

启动一个Minecraft服务端需要若干参数限制运行条件,因此我们需要使用这些特殊的程序来修改参数。

要注意的是,不只是通过命令行添加参数,某些「开服器」也可以,后面将会提到。

主流服务端核心列表

那么说完上面的,那么现在究竟有哪些核心,他们有什么区别呢?
注意: 为了方便查阅,我们将会用粗体表示推荐使用的服务端核心,使用斜体表示另类,冷门,不推荐使用的服务端核心。
注意:此处我们只会介绍目前还在积极更新的,或是有一定历史意义的服务端核心,对于刚出生就夭寿的,无意义的服务端,此处不多赘述

你需要知道的东西:

  • API —— 应用开发接口,作为初学者你可以把它看作平台/规范
  1. Vanilla

    对于 Java 版来说,绝大多数服务端的始祖便是 Mojang 提供的官方服务端了,按照习惯,我们把官服叫做 Vanilla(香草,代指纯净[纯净服务端有歧义])

    其实他本身的名字应该是 Minecraft_Server(但是大多数情况下我们不会用这个名字)

    Vanilla 有以下的属性

  • 不支持除了原生 Minecraft 外的任何特性内容
  • Mojang 官方支持
  • 自带原生 GUI 控制台窗口
  • 相对比其他服务端来说,性能较差

    根据以上属性,我们可以发现 Vanilla 基本上啥都干不了,就是原生兼容好,因此比较适合开原版的服务器(比如玩玩命令方块小游戏地图啊,基友联机啊之类的)

    下载 Vanilla:

    1. 前往正版启动器手动选择版本下载
    2. 前往第三方下载站下载(如GetBukkit:https://getbukkit.org/download/vanilla)
  1. CraftBukkit(有时被称为 Bukkit[10])

    仅用 Vanilla 我们无法快速,高效地通过编程拓展游戏内容。因此,CraftBukkit 诞生。
    CraftBukkit 是一个实现了 BukkitAPI 的服务端,这意味着开发者们可以通过 BukkitAPI 提供的(有限的)内容来拓展服务器逻辑,增强趣味性。

    社区开发者们发布Bukkit插件,多数情况下我们只需要放到plugins文件夹即可使用。

    CraftBukkit 有以下的属性:

  • 基于 Vanilla 二次开发
  • 可以 安装支持 BukkitAPI 的插件
  • 性能较差

    为什么不推荐?:CraftBukkit 虽然是跨时代性的,但他和 Vanilla 的性能一样差(甚至更差),因此在后来的日子里诞生了很多自带优化的服务端,CraftBukkit 对于我们来说只是一个过去时代的丰碑罢了,并不能满足实际使用需求了
    讲个题外话,CraftBukkit 曾经的开发者现在要么离开了自己心爱的项目,要么去了 SpigotMC 团队,有一个人挺不寻常,他叫 Searge,他最后收到了 Mojang 的邀请,前去开发 Minecraft 了。对于有的 Mod 开发者来说,你应当知道 Mod Code Pack(MCP)也是由 Searge 等人发起的,而MCP使用的映射名「Srg 名」,也是为了纪念 Searge 这位巨佬

    下载 CraftBukkit:

    1. BukkitDev官方:http://dl.bukkit.org/ (由于Mojang EULA和DMCA的要求,已停止服务)
    2. SpigotMC官方:https://hub.spigotmc.org/jenkins/job/BuildTools/ (CraftBukkit不直接提供,你只能通过BuildTools手动构建)
    3. 使用第三方下载站下载已经构建好的CraftBukkit(如GetBukkit:https://getbukkit.org/download/craftbukkit)

::: details 注释 4

[10]: 把 CraftBukkit 称作 Bukkit 其实是不负责任的,Bukkit 其实是一个规范,他仅包含接口,不包含实现,我们不应将两者划等号。

:::

  1. Spigot

    CraftBukkit 是挺好,但是他性能和 Vanilla 一样捉急,甚至装多了插件还可能会更差,人们急切需要一个能够优化服务端处理逻辑,提升服务器性能的服务端,曾经有过多种这样的服务端,有的可能优化了TNT爆炸逻辑,有的可能优化了耕田逻辑,但是活到最后的,是包含了他们之中绝大部分优化功能的 Spigot
    Spigot 由 SpigotMC 团队开发,可以说是 CraftBukkit 的正统续作,他不仅完全兼容 BukkitAPI 规范,还提供了更多独有的开发API14,最重要的是,这个服务端优化很好,因此十分稳定。(spigot yyds

    Spigot 有以下的属性:

  • 基于 CraftBukkit
  • 可以 安装支持 BukkitAPI,SpigotAPI 的插件
  • 稳定性好
  • 性能较好

    下载 Spigot:

    1. SpigotMC 官方:https://hub.spigotmc.org/jenkins/job/BuildTools/ (Spigot不直接提供,你只能通过BuildTools手动构建)
    2. 使用第三方下载站下载已经构建好的Spigot(如GetBukkit:https://getbukkit.org/download/spigot)

::: details 注释 5

:::

  1. Paper(曾用名 PaperSpigot,有时被称为 PaperClip[15])

    一方面是认为 Spigot 更新太慢了,又一方面是认为 Spigot 的 BuildTools 太麻烦了,还一方面是因为 Spigot 的优化还 不 够 劲,因此,一群人创建了 Paper。

    Paper 有以下的属性:

  • 基于 Spigot
  • 可以 安装支持 BukkitAPI,SpigotAPI,PaperAPI 的插件
  • 部分自带原生 GUI 控制台窗口[16]
  • 稳定性较好
  • 性能好
  • 更新迅速
  • 提供了更多的优化和服务端个性化选项[17] [18]
  • 构建、使用方便
  • 搭载了较为先进的 Aikar's Timings® 性能分析系统[19]

为什么推荐?:Paper 是一个兼具稳定,性能,拓展的服务端核心,不仅提供了很多有效的优化,更有很多自定义选项供服主选择,几乎 100% 兼容 BukkitAPI 插件也是人们选择 Paper的主要原因

下载 Paper:

1. PaperMC 官方: https://papermc.io/downloads (对于旧版本核心,你可以前往页末的`LEGACY`标签下载不受支持的旧版的 Paper 核心

::: details 注释 6

[15]: 此处 PaperClip 应当指的是 Paper 的补丁安装器,不含 Paper 核心本体,但因为用补丁安装器安装补丁并启动服务器基本感觉是一气呵成的所以大家总是把 PaperClip 当做 Paper 本体。
[16]: 之所以说部分支持,是因为大部分版本Spigot是把这个丑到爆炸的控制台删掉了的(即只能使用 CMD 或 Linux Shell 开服),但自某个高于 1.15 的版本起,Paper 又恢复了这个控制台以防你手贱双击打开了JAR但没有办法操控服务器,但这会导致在你不指定nogui参数时用命令行开服依然会把那个控制台给召唤出来。
[17]: 位于.\paper.yml。其实Spigot也是有这样的文件的,位于.\spigot.yml,同理,CraftBukkit 也有,位于.\bukkit.yml,下游服务端是同时拥有上游服务端的这些文件的,因此新的服务端定义的新的文件提供了上游服务端所没有的新特性供服主们设定,而不是相互挤兑冲突。
[18]: Hey,也许你是一个生电玩家转生的新手服主,希望开一个生电服,如果如此,请切记不要使用 Paper,Paper 内含对包括 0tick 等 Minecraft 原版「特性」的修复,可能会导致你和你的玩家感到疑惑,因此,你应当使用 Spigot
[19]: Timings 是一种自 Spigot 开始自带的性能分析器,允许你通过一个网页查看一段时间内服务器的总耗能情况,据此推断出哪些插件,或是哪些世界,或是哪些生物卡服。Spigot 也有 Timings,但是是旧版的,一般称作 Spigot Timings,虽也是由 Aikar 设计但是网页界面观感和功能都相差甚远。Aikar's Timings 同时也搭载在 Sponge 核心中。

:::

  1. Tuinity

    众所周知,Paper 是开源的,那么这意味着,所有人都可以通过Paper所在的代码托管网站 Github 向 PaperMC 团队提交各种各样的漏洞修复/性能优化代码,而 PaperMC 团队也可以选择性的将这些代码合并到自己的项目中,完成一次协作。前往 Paper 的 Github 的 Pull Request 界面,你可以看到这里依然还有超过 60 个的代码合并请求尚在活跃状态但未被 PaperMC 团队合并。这些提交中可能包含着诸如视距优化这样的刚需,也包含对开发者有益的API更新。

    但Paper就是不合并,你也没办法。

    因此,一名叫做 Spottedleaf 的大佬站了出来,Fork[20]了 Paper 的仓库,然后把那一堆PR[21]全合并了,又作了一些改动,最后,Tuinity 横空出世了

    曾经一段时间内,Tuinity 仅支持JRE11[22]作为其运行环境 但现在 Tuinity 只需 JRE8+ 即可运行

    启动 Tuinity 会生成 tuinity.yml,在其中可设置单玩家怪物生成,分离视距等高级参数。即使你不会设置这些参数,Tuinity 自身自带的一个个优化也足以你的服务器使用。

    Tuinity 有以下的属性:

  • 基于 Paper
  • 可以 安装基于 BukkitAPI,SpigotAPI,PaperAPI,TuinityAPI 的插件
  • 不可以 安装基于任何 API 的模组
  • 性能极佳
  • 更新较快
  • 较为稳定

    下载 Tuinity:

    1. CodeMC 自动构建站: https://ci.codemc.io/job/Spottedleaf/job/Tuinity/

::: details 注释 7

[20]: 指使用 Git 克隆(拷贝)别人的代码仓库到自己的名下的行为
[21]: 即 Pull Request,拉取请求,就是上面说的那些希望合并的代码
[22]: 即 Java Runtime Environment(Version 11),Java11 的运行环境。同理,后文中 JRE8+ 也指 Java8 以上的运行环境

:::

  1. Akarin/Torch[23]

    Akarin Project 开发者们的原话来说,Akarin 是一个 「来自新纬度的服务端」 (A server software from the 'new dimension'.),其本质原因是 Akarin 以 多线程 (Multi-Threaded)著称。

    那么在此之前,我们需要了解什么是多线程。简单的来说,人一般情况下只能专心干一件事情,那么我们可以把这种行为叫做单线程;如果你能一下干多个事情,那么这就是所谓多线程——从软件或者硬件上实现多个线程并发执行的技术。

    在 Akarin 之前,绝大多数的服务端的核心任务都是由主线程这一条线程完成的,如果同时有很多事情要做,那么他得做完了一个再做另外一个,这就有可能引起卡顿。

如果做的这件事情无线重复,或是要花费太长时间以至于连服务器的基本运行事件都给挡住了,那么就会引起堵塞,导致服务器瞬卡甚至崩溃。

通过使用 Akarin,我们可以将主线程本应完成的动作转移到其他子线程同时执行,极大的减缓了服务器压力。

当然,因为这是一个新技术,同时让一个本不兼容多线程的东西兼容多线程是一个很难的工程,因此总会有不稳定因素。

Akarin 有如下的属性:

  • 基于 Paper/Tuinity[24]
  • 可以 安装基于 BukkitAPI,SpigotAPI,PaperAPI,可能可以安装基于 TuinityAPI 的插件
  • 不可以 安装基于任何 API 的模组
  • 性能极佳
  • 支持多线程
  • 更新不快
  • 不太稳定

    下载 Akarin:

    1. Github Actions: https://github.com/Akarin-project/Akarin/actions
    2. JosephWorks Jenkins: http://josephworks.ddns.net:8080/job/Akarin-project/

::: details 注释 8

[23]: Torch,前称 TorchSpigot,是一个支持 1.8.8 的优化核心,是Akarin服务端的前身。由于在部分代码和统计系统上,Akarin 仍使用「Torch」表示 Akarin 服务端,因此这里同时将 Torch 写上
[24]: 自1.14开始,Akarin 开始使用 Tuinity 作为其项目前置,而不是原来的Paper,同时因此该服务端对不同API的插件兼容性需注意使用的服务端版本

:::

如果你看到了这里,那么恭喜你,你已经结束了所有主流 BukkitAPI 系服务端的介绍,接下来是一些搭载 ForgeAPI 或 FabricAPI 的模组服务端,两个基于 SpongeAPI 的服务端和两个魔怔猎奇基于其他API的服务端介绍,如果你不需要了解这些,请直接跳到下一节。

  1. VanillaForge

    让我们把视线调转回刚开始的 Vanilla,如果说 Bukkit 让修改服务端变成了可能,那么就一定有一个东西能够让修改客户端变为可能,而Forge就是。
    VanillaForge 则是一个 Vanilla+ForgeAPI 的服务端,他允许你安装 ForgeMod,处理自定义物品,自定义方块,自定义实体操作。

    VanillaForge 有如下的属性:

  • 基于 Vanilla
  • 可以 安装支持 ForgeAPI 的模组
  • 稳定性较好
  • 性能较差
  • 可插拔性强,易于更新25

    下载 VanillaForge:

    1. 前往 Forge 官网下载 Forge Installer,并选择 install server 模式,将安装目录指向运行过一次的 Vanilla 服务端: http://files.minecraftforge.net/

::: details 注释 9

:::

  1. Cauldron/MCPC+

那么究竟有没有能同时兼容 BukkitAPI 和 ForgeAPI 的服务端呢?
答案是当然,最初搞出来这个玩意的服务端叫做 MCPC+,自1.7.10 起改名为 Cauldron,随后停更。
同时你也将看到,由于「糅合」的复杂性和难以维护性,因此每一个 BukkitAPI+ForgeAPI 服务端几乎都只维护一个主流版本,这也是此类服务端遍地开花的一个主要原因。
Cauldron 有如下的属性:
- 已停更
- 基于 Spigot
- 可以 安装支持 BukkitAPI,SpigotAPI 的插件
- 可以 安装支持 ForgeAPI 的模组
- 支持至最高 1.7.10

为什么不推荐?:同 CraftBukkit 一样,Cauldron 也已然成为了一个时代的奠基人和里程碑,其原始的完整代码仓库现在甚至无法被找到,我们也只能在各式各样的第三方构建站看到他的身影。只闻其声,不闻其形。

下载 Cauldron:

1. 前往第三方构建站下载
  1. KCauldron

    KCauldron 是 Cauldron 的优化版/继承。

    KCauldron 有如下的属性:

  • 已停更
  • 基于 Cauldron
  • 可以 安装基于 BukkitAPI,SpigotAPI 的插件
  • 可以 安装基于 ForgeAPI 的模组
  • 仅支持 1.7.10

    下载 KCauldron:
    1.前往第三方构建站下载

  1. Thermos

    Thermos 是 KCauldron 的优化版。

    Thermos 有如下的属性:

  • 已停更
  • 基于 KCauldron
  • 可以 安装基于 BukkitAPI,SpigotAPI 的插件
  • 可以 安装基于 ForgeAPI 的模组
  • 仅支持 1.7.10

    下载Thermos:

    1. Github Releases: https://github.com/CyberdyneCC/Thermos/releases
  1. Contigo

    Contigo 是 Thermos 的优化版/继承。

    Contigo 有如下的属性:

  • 已停更
  • 基于 Thermos
  • 可以 安装基于 BukkitAPI,SpigotAPI 的插件
  • 可以 安装基于 ForgeAPI 的模组
  • 仅支持 1.7.10

    下载 Contigo:

    1. Github Releases: https://github.com/djoveryde/Contigo/releases
  1. Uranium

    Uranium 是一款基于 KCauldron 的 BukkitAPI+ForgeAPI 服务端,其整合了部分Thermos对服务端的修复,同时进行了一些输入书与笔虚体问题的BUG修复。其最大的特点26是强制使用 UTF-8 编码作为配置文件编码[27]和通过 UraniumPlus Mod 令 1.7.10 客户端支持 Title 和 Actionbar[28]。

    Uranium 有如下的属性:

  • 基于 KCauldron
  • 可以 安装基于 BukkitAPI,SpigotAPI 的插件
  • 可以 安装基于 ForgeAPI 的模组
  • 仅支持 1.7.10

    下载 Uranium:

    1. Jenkins CI: https://ci.uraniummc.cc/job/Uranium-dev/

::: details 注释 10

[27]: 事实上,我们看到的所有文本,其内容都是经过编码存储在计算机上的,对于 Minecraft 服务端来说,在 1.7.10 版本,Windows 使用 ANSI 编码,而 Linux 使用 UTF-8 编码,这引起了诸多不便,因此 Uranium 强制在所有操作系统上运行该服务端,文件编码均为UTF-8,简化了使用流程
[28]: Title 是自 1.8 引入的,在客户端上显示大标题和副标题的功能;Actionbar 是自 1.8 引入的,在客户端物品栏上方显示字幕的功能

:::

13. CatServer

不同于 Cauldron 系,CatServer 支持 1.12.2 的 BukkitAPI+ForgeAPI,发展至今已十分稳定,同时也拥有独特的优化和 BUG 修复。

CatServer 有如下的属性:

  • 基于 Spigot
  • 可以 安装基于 BukkitAPI,SpigotAPI 的插件
  • 可以 安装基于 ForgeAPI 的模组
  • 稳定性好
  • 性能较好
  • 更新较快
  • 仅支持 1.12.2

为什么推荐?:CatServer 历经多年的打磨,其已经非常稳定,同时因为 1.12.2 版本从技术上讲依然是一个稳定的年轻版本,因此使用 CatServer 开 Mod 服或许是你的不二之选
又一个题外话:如果你刚入服主圈,那么你可能不知道,由于作为第一个支持高版本的 BukkitAPI+ForgeAPI 服务端,CatServer 有过一段艰苦,黑暗的发展历史,从“抄袭风波”到收购风波,从付费风波再到“后门风波”,CatServer 曾有过一段饱受诟病的日子,甚至还和下面某些服务端作者产生过争执......笔者作为那段时代的亲历者,只能用一句话来形容那时:
“黑,真他妈的黑啊”

下载 CatServer:

1. Github Releases: https://github.com/Luohuayu/CatServer/releases

下载 CatServer-Async[29]:

1. Github Releases: https://github.com/Luohuayu/CatServer/releases/tag/Async-final

::: details 注释 11

[29]: 即 CatServer 的多线程版本,用开发者的话来说,「由于多线程版存在过多兼容性问题无法修复, 不再提供更新, 也不推荐使用.」,该版本最后停更于Mar 19,2020。本文笔者也不推荐使用此版本

:::

  1. Mohist(曾用名 PFCraft)

    Mohist 和下面的 Magma 一样,都有一点「另类」,他们本体基于 Paper,而不是 Spigot,这意味着这两个服务端不仅可以享受 Paper 带来的漏洞修复和优化,还可以让你轻松使用基于 PaperAPI 开发的插件。

    Mohist 还支持控制台信息国际化[30],可选择服务端 Mod 语言[31],内置插件管理器[32]等等非常实用的功能。

    但是很遗憾,由于 Mohist 本身工程量大难以维护,也由于 Mohist 开发组重组,近几个月内的 Mohist 稳定性并不是很好。

    Mohist 有如下的属性:

  • 基于 Paper
  • 可以 安装基于 BukkitAPI,SpigotAPI,PaperAPI 的插件
  • 可以 安装基于 ForgeAPI 的模组
  • 稳定性较差
  • 性能较好
  • 更新较快
  • 控制台/模组本地化支持
  • 内置插件管理器
  • 支持 1.12.2,1.15.2[35]

说个题外话:笔者曾有幸参与了 Mohist 控制台信息的简体中文、繁体中文本地化工作,并亲眼见证了 Mohist 从使用高峰到现在的开发过程。Mohist 的原开发者 Mgazul 是个好人,而且能在家庭条件十分有限的情况下,开发出 Mohist 并开源供大家使用,可以说是我们这个圈子的幸运。

下载 Mohist-1.12.2:

1. CodeMC Jenkins CI: https://ci.codemc.io/job/Mohist-Community/job/Mohist-1.12.2/

下载 Mohist-1.15.2:

1. CodeMC Jenkins CI: https://ci.codemc.io/job/Mohist-Community/job/Mohist-1.15.2/

::: details 注释 12

[30]: 该功能会自动本地化控制台信息,为你展示你能看得懂文字(Mohist 现支持简体中文和繁体中文的控制台本地化),效果大约如下:

Mohist-控制台本地化

[31]: 在一般服务端下,在服务端安装的 Mod 仅能限制默认的美式英文(en_US)本地化语言文本,这导致客户端无法按照本地语言显示文本,即使有汉化也没法看。但 Mohist 通过这项功能解决了这个问题
[32]: 一般来说,服务端插件在服务器启动以后便不能,安装、卸载、更新,要想那么做,得先关闭服务器,这很耗时,插件管理器允许你通过执行指令,在服务器开启的情况下热配置插件。著名的插件管理器 PlugMan 和 Yum 两个插件,而 Mohist 自带了他们的部分功能
[35]: 有消息称 Mohist 开发组正在研发/测试 1.16 版本的 Mohist,且 Mohist 代码仓库中确实存在标签为「1.16.x」的代码分支(空仓库)

:::

  1. Magma

    Magma 同样是一个基于 Paper[36]的 BukkitAPI+ForgeAPI 服务端。

    Magma 有如下的属性:

  • 基于 Paper
  • 可以 安装基于 BukkitAPI,SpigotAPI,PaperAPI[^36]的插件
  • 可以 安装基于 ForgeAPI 的模组
  • 稳定性较好
  • 性能较好
  • 更新较快
  • 支持 1.12.2,1.15.2[37]

    下载 Magma-1.12.2:

    1. Github Releases: https://github.com/magmafoundation/Magma/releases (稳定版,请下载-server结尾的版本,-installer结尾的版本暂无法使用)
    2. Jenkins CI: https://ci.hexeption.dev/job/Magma%20Foundation/job/Magma/job/master/ (开发版)

    下载 Magma-1.12.2-全Paper特性支持版:

    1. Jenkins CI: https://ci.hexeption.dev/job/Magma%20Foundation/job/Magma/job/feature%252Ffull-paper-support/ (开发版)

    下载 Magma-1.15.2:

    1. Jenkins CI: https://ci.hexeption.dev/job/Magma%20Foundation/job/Magma-1.15.x/job/1.15.x/lastSuccessfulBuild/ (开发版)

::: details 注释 13

[36]: Magma 的主要发行版本并未应用所有 PaperAPI 和 Paper 的补丁,这可能会带来一些问题
[37]: 根据 Magma 项目说明,Magma 尚在积极开发对 1.16 版本的支持,同时,Magma-1.15.2 目前仅处于 Beta 测试版阶段,可能尚不稳定

:::

  1. Arclight

    Arclight 是一款「在 Forge 上使用 Mixin 实现的 Bukkit 服务端」,提供了 1.14.4 和 1.15.2 两个高版本的 BukkitAPI+ForgeAPI 支持

    Arclight 有如下的属性:

  • 基于 Spigot
  • 可以 安装基于 BukkitAPI,SpigotAPI 的插件
  • 可以 安装基于 ForgeAPI 的模组
  • 稳定性相对较好
  • 性能较好
  • 更新较快
  • 支持 1.14.4,1.15.2

    下载 Arclight(1.14.4,1.15.2):

    1. Github Releases: https://github.com/IzzelAliz/Arclight/releases
    2. AppVeyor CI: https://ci.appveyor.com/project/IzzelAliz/arclight/build/artifacts

如果你看到了这里,那么恭喜你已经结束了所有**主流 **BukkitAPI+ForgeAPI 服务端的了解,接下来是一些搭载 FabricAPI 的模组服务端,两个基于 SpongeAPI 的服务端和两个基于其他 API 的服务端介绍,如果你不需要了解这些,请直接跳到下一节。

  1. SpongeVanilla&SpongeForge

    让我们再将目光转回 CraftBukkit 时期。一群人做出 BukkitAPI 以后,发现这个东西实在是太垃圾了:对 Mod 兼容性差,没有开发文档,代码规范随意,这不是他们想要的那个 API。于是,一群人离开了 Bukkit 开发团队,转而开始制作他们心目中的那个完美的 API 框架——幸运的是,他们做出来了,这就是 SpongeAPI 和他的服务端实现:Sponge

    Sponge 分为 SpongeVanilla 和 SpongeForge 两个版本:前者需要与 Vanilla 一起使用,他通过注入38的方式,允许你在 Vanilla 服务端上安装基于 SpongeAPI 的插件;后者实现在 Forge 上,允许你在 VanillaForge 上安装基于 SpongeAPI 的插件(同时享受安装基于 ForgeAPI 的模组),需要提到的是,在 SpongeForge 中,其其实是作为一个 ForgeMod 来使用(即将其放入.\mods中并启动服务端),而非作为一个完整的服务端运行核心文件。

    很遗憾的是,由于生不逢时,Sponge 并没有得到大多数开发者的支持,因此基于 SpongeAPI 开发的插件少之甚少,主流 BukkitAPI 插件迁移至 SpongeAPI 的更是屈指可数,因此对于普通服主来说,使用 Sponge 会导致在插件支持上落后于 Bukkit 使用者。

    同时,由于自 1.13 起,由于 Minecraft 源代码的大幅度改动导致ForgeAPI大幅度改动其代码,致使 Sponge 始终难以兼容 1.13 及以上版本,直到最近才发布了对 1.14.4版本的支持

    SpongeVanilla 有如下属性:

  • 可以 安装支持 Sponge 的插件
  • 性能相对很好
  • 更新较快
  • 稳定性很好
  • 社区支持友好
  • 插件生态较差
  • 支持至最高 1.14.4

    SpongeForge 有如下属性:

  • 基于 ForgeAPI

  • 可以 安装支持 SpongeAPI 的插件
  • 可以 安装支持 ForgeAPI 的模组
  • 性能相对很好
  • 更新较快
  • 稳定性很好
  • 社区支持友好
  • 插件生态较差
  • 对模组兼容性极佳
  • 支持至最高 1.14.4

    下载 SpongeVanilla:

    1. SpongePowered 官方: https://www.spongepowered.org/downloads/spongevanilla/stable/

    下载 SpongeForge:

    1. SpongePowered 官方: https://www.spongepowered.org/downloads/spongeforge/stable/

题外话:曾经有一段时间,Sponge 是市面上唯一一个支持 1.8+ 高版本插件+模组的服务端,当Bukkit阵营始终停留在 1.7.10 时,已经支持之 1.12.2 的 Sponge 收到了大部分神奇宝贝服服主的欢迎

::: details 注释 14

:::

  1. VanillaFabric

    前面我们提到了由于自1.13起,Minecraft源代码的大幅度改动,这导致了 CraftBukkit/Spigot,Sponge,Forge 等项目分别出现了时常不同的窗口期,这段时间内这些项目都没有发布对新版本的支持。
    在这段长达半年的窗口期中,涌现了几个新的 ModAPI,抛去因为夹带私货和停止支持的 RiftAPI,便只剩下了在当时乃至现在最流行的新生代 API——Fabric[39]

    Fabric 和 Rift 不同,他不是在那段窗口期诞生的替代产品,他早自 1.12 时代就已出现,只不过和 Sponge 一样同样生不逢时,虽然设计先进,但大多数开发者当时依然只依赖于 Forge 开发模组而不是 Fabric,知道窗口期的来临,Fabric 才得以重获新生,得到了一部分开发者的支持[40]。

    Fabric 是模块化41的,这意味着他不想高耦合的 Forge,每次 Minecraft 源代码更新就要折腾一阵子推倒重来,他完全可以拆出不兼容的模块,并更换上兼容新版本的模块以快速发布更新,这也是 Fabric 甚至有针对每一个 Minecraft 预览版(Snapshot)的支持的原因。

    VanillaFabric 则和 VanillaForge 类似,是基于 Vanilla 的实现了 FabricAPI 支持的服务端,他允许你安装 FabricMod。

    VanillaFabric 有以下属性:

  • 基于 Vanilla
  • 可以 安装支持 FabricAPI 的模组
  • 稳定性较好
  • 性能相对较好
  • 可插拔性强,易于更新

    下载 VanillaFabric:

    1. 前往 Fabric 官网下载 Fabric Installer,并选择 install server 模式,将安装目录指向运行过一次的 Vanilla 服务端: https://fabricmc.net/use/

::: details 注释 15

[39]: 此处很显然不严谨,Fabric 本体是一个模组加载器(Mod Loader),不是一个 ModAPI,Fabric 的 ModAPI 是 FabricAPI,但因为 Fabric 的模块化设计,FabricAPI 作为 FabricMod 与 Fabric 本体(Fabric Loader)分离,不默认提供,因此 FabricAPI 又不能代表 Fabric,故如此表示
[40]: 虽然设计确实先进,但随着 Forge 发布对新版本的支持,Fabric 又逐渐趋向没落,只留下来了一些或是小型的,或是客户端向模组的青睐,比如 ReplayMod
:::

19.Fukkit

Fukkit是一款实现了 BukkitAPI+FabricAPI 支持的服务端,现已停更归档,因此不多赘述,也不提供下载地址。

为什么不推荐?:已归档,不稳定

如果你看到了这里,那么恭喜你已经结束了所有主流服务端的介绍,接下来是两个看看就好的服务端的介绍,如果你不需要了解这些,请直接跳到下一节。

20.Glowstone

如果你是个聪明人,你会发现上面的所有服务端都基于 Mojang 提供的官方服务端 Vanilla,那么有没有不依赖于 Vanilla 的服务端呢,答案是有,这就是 Glowstone。

Glowstone 完全不依赖任何 Mojang 的源码,因此他非常的自由,不会受到 Mojang EULA 和 DMCA 的管控。

Glowstone 有如下属性:

  • 少更新
  • 可以 安装支持 BukkitAPI,SpigotAPI,PaperAPI,GlowstoneAPI 的插件
  • 稳定性不好
  • 性能较好
  • 缺少很多原版内容
  • 仅支持 1.12.2

为什么不推荐?:由于 Glowstone 不基于 Vanilla,所有 Vanilla 负责的游戏行为都由其自行处理,因此 Vanilla 提供的一些东西未在 Glowstone 中提供,Bukkit同理。这会导致一些Bukkit插件无法在 Glowstone 运行,因此对于绝大多数服主都不友好,故不推荐使用

下载 Glowstone:

1. Glowstone 官方: https://glowstone.net/#downloads
  1. Cuberite

    Cuberite 同样完全不依赖任何 Mojang 的源码,因此他非常的自由,不会受到 Mojang EULA 和 DMCA 的管控。

    而且,Cuberite 支持跨版本运行,1.8-1.12.2 的客户端均能加入到你的 Cuberite 服务器中

    说起来你可能不信,Cuberite 甚至还能在 Android™️ 上运行。

    Cuberite 有如下属性:

  • 少更新
  • Android™️ 跨平台支持
  • 可以 安装支持 CuberiteAPI 的插件
  • 稳定性不好
  • 性能较好
  • 缺少很多原版内容
  • 同时支持 1.8-1.12.2[43]

*为什么不推荐?:比起GlowStone,他连BukkitAPI都不支持。

下载 Cuberite:

1. Cuberite 官方: https://cuberite.org/

[43]: 来自其官网说明,但根据其开源项目提交日志,Cuberite 应已支持 1.14 版本的连接,并正在尝试对 1.15 的特性进行兼容

最后,以上服务端的迭代关系大致如下:
anMron.png

至此,你已经完成第一节的所有学习,并基本了解了所有主流服务端以及其迭代关系。动核心」,他只是让发布者间接发布了可以直接启动的核心

二、服务端核心的安装与使用

由于篇幅原因,本节仅介绍上文中非不推荐核心的安装和使用方式,其他服务端的安装方式请自行查阅文档或自行探索。

安装 Java

确定操作系统架构

对于新手来说,下载了不适合与自己服务器/计算机的操作系统的 Java 是非常难过的,为了最大化利用计算机性能,一般情况下服主们都会为服务端设置最大内存,但因为支持 x86 架构(32位系统)的 Java 最大只能为服务端分配 1024MB 的内存,超出这个数值会导致无法开服。只有支持 x86_64 架构 (64位系统) 的 Java 才能支持更大的最大内存。
对于 Windows 操作系统(家用操作系统),请右击您桌面上的
```计算机/此电脑``` (Win7,Win8,Win8.1,Win10) 图标,选择```属性```,查看操作系统为 32 位还是 64 位; 如果您没有看到以上图标,而是看到了```我的电脑``` (WinXP),那么您的操作系统一般应为 32 位。
对于 Windows 操作系统(服务器),您可通过服务器管理器或是通过其他方式查看您的操作系统架构。

下载并安装 Java 8

对于 1.8+ 服务端,他们均需要 Java 8 或以上版本1运行,因此您可前往 Java 官方网站下载页2 下载 Java 8 的运行环境 (JRE8) 以支持启动您的服务端。
如果您是 32 位的 Windows 操作系统,请选择
```Windows``` 栏目下的 ```Windows 離線``` 安装包; 如果您是 64 位的 Windows 操作系统,请选择 ```Windows``` 栏目下的 ```Windows 離線(64位元)```; 对于 Mac OS X 和 Linux 系统,请自行按照各自的档案类型下载对应的安装包。下载完成后,请自行打开文件进行安装操作。

下载并安装 Java 7

对于 1.7.10 或更低版本的服务端,您可能需要下载已不受支持的 Java 7 以运行。您需要前往 Oracle官网 下载已被归档的 Java 7。
您需要前往该网站下方的
```Java SE Runtime Environment 7u80``` 下载Java运行环境,而非下载上方的 ```Java SE Development Kit 7u80``` Java 开发工具包。
如果您是 32 位的 Windows 操作系统,请选择 ```Windows x86``` 安装包; 如果您是 64 位的 Windows 操作系统,请选择 ```Windows x64```; 对于 Mac OS X 和 Linux 系统,请自行按照各自的档案类型下载对应的安装包。
您可能需要注册并登录 Oracle 账号以下载 Java 7。
下载完成后,请自行打开文件进行安装操作。

关于OpenJ9

有一种非官方的 JVM3 实现,它的名字叫做 OpenJ9,其以
```高性能,可拓展```著称,此处我们不介绍 OpenJ9 的详细安装方式,但有需要的服主可前往 [AdoptOpenJDK](https://adoptopenjdk.net/) 网站了解并下载 OpenJ9 JVM。

安装服务端

此处我们已假设您已正确安装 Java 运行环境 (JRE) 并已完成您所需要的服务端核心的下载。
为了方便和美观起见,您应当创建一个新的文件夹,并放入您的服务端核心,以此文件夹作为根目录开始您的开服旅程。

适用于 Vanilla, CraftBukkit, Spigot 的安装和使用教程

  • 对于 Windows 用户,您可通过直接双击
    ```minecraft_server_1.x.x.jar``` 运行服务端,当服务器完全就绪[^4]后即可通过默认的连接地址[^5]连接到服务器。
  • 对于希望使用 CMD 控制台的 Windows 用户来说,您可通过
    ```Shift+右键``` 在服务端根目录启动命令行,或是直接创建一个以 ```.bat``` 结尾的批处理文件,并写入以下内容。
@echo off
java -Xmx1024M -jar minecraft_server_1.x.x.jar -nogui
pause

其中的
```-Xmx1024M``` 用于指定最大内存,您可将 ```1024M``` 更换为您需要指定的最大内存,例如 ```-Xmx2048M```,```-Xmx4G```。
核心名称中的 ```1.x.x``` 代表你的服务器版本。
对于 Linux 用户,您可通过 ```cd``` 指令进入服务端根目录,或是直接在服务端根目录创建一个以 ```.sh``` 结尾的Linux shell文件,并写入以下内容。

java -Xmx1024M -jar .\minecraft_server_1.x.x.jar -nogui

其中,你应将
```java``` 替换为 ```"您的Java JRE存放位置\bin\java.exe"```。
自 1.8 起,当你第一次启动服务端时,服务器会先在根目录生成一个```eula.txt```,随后服务器会自动关闭。
请打开 ```eula.txt```,届时您会看到这样的文字。

#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Fri Jul 31 12:26:16 CST 2020
eula=false

请将其中的
```eula=false``` 修改为 ```eula=true```[^6],然后重新启动服务器。此时,服务器才会正式启动。
最后,您可通过在控制台[^7]内输入 ```stop``` 或在游戏内输入 ```/stop``` 关闭服务器。

适用于 Paper, Tuinity, Akarin 的安装和使用教程

基本同上,只需将核心名称替换为你的核心名称即可。但请注意,Paper, Tuinity, Akarin等衍生于 Paper 的核心第一次启动都需要下载 Vanilla 文件以完成打补丁操作,对于某些网络不稳定的地方,你可能会一直卡在
```Downloading cache```上。对于这种问题,你可以通过上方提供的或其他渠道先下载对应版本的 Vanilla,然后将核心改名为```mojang_1.x.x.jar``` (1.x.x代表你的服务器版本),放入 ```·\cache``` 文件夹内,开启服务器即可开始打补丁操作。

适用于 VanillaForge, VanillaFabric 的安装和使用教程

请先按照第一则教程安装并完全启动一次 Vanilla,随后关闭服务端。
打开 Forge 或 Fabric 的安装器,选择
```install server```,并将目录选择至服务器根目录,点击 ```安装(Install)```,在自动下载 libraries (需保持网络畅通,不然可能会导致下载失败) 完成后,ForgeVanilla 或 FabricVanilla的核心便会出现在根目录上,此时将启动参数的 jar 指向新的核心,即可开始开服。

适用于 SpongeVanilla 的安装和使用教程

与第一则教程相同,只需将核心名称替换为你的核心名称即可。请注意 Forge 的版本必须于 SpongeVanilla 下载页上标注的 Forge 版本相同,否则可能会引发兼容性问题。

适用于 SpongeForge 的安装和使用教程

请先按照第三则教程安装并完全启动一次与 SpongeForge 下载页上标注的 Forge 版本相同的 VanillaForge,随后关闭服务端。
将 SpongeForge 的 jar 文件直接拖入
```.\mods``` 文件夹,之后启动服务器即可开服[^8]。

适用于 Thermos, Contigo 的安装和使用教程

请在下载这两种服务端核心时注意需要同时下载
```libraries.zip```[^9]。
将您下载到的 ```libraries.zip``` 内的 ```libraries``` 文件夹(包括文件夹)解压至服务端根目录,然后按照第一则教程的启动方式启动服务器。

适用于 Uranium 的安装和使用教程

基本同上一则教程,前往下载核心时请下载结尾为
```-server``` 的 jar,下载 libraries 时请下载 [#271构建打包的libraries](https://ci.uraniummc.cc/job/Uranium-dev/271/artifact/build/distributions/Uranium-1710-dev-5-B271-31d6587-libraries.zip)。
对于使用显示 Title 和 Actionbar 的功能,请自行前往[此处](https://github.com/UraniumMC/UraniumPlus/releases/tag/v1.1)下载 UraniumPlus,并将其作为 MOD 安装至客户端(```.minecraft\mods```)和服务端(```.\mods```)。

适用于 CatServer/Mohist/Magma/Arclight 的安装和使用教程

基本同第一则教程。运行所需的 Libraries 应当会自动被下载。
至此,你已经完成第二节的所有学习,并应已经启动过一次服务器并通过
```stop``` 指令安全的关闭服务器。

三、服务端核心的配置

由于篇幅原因,本节仅介绍 Spigot 核心的主要配置文件的主要配置项。
本配置对应的服务器版本为
```1.16.1```.

on
```server.properties```

#Minecraft server properties
#Fri Jul 31 12:30:46 CST 2020
spawn-protection=16
max-tick-time=60000
query.port=25565
generator-settings=
sync-chunk-writes=true
force-gamemode=false
allow-nether=true
enforce-whitelist=false
gamemode=survival
broadcast-console-to-ops=true
enable-query=false
player-idle-timeout=0
difficulty=easy
spawn-monsters=true
broadcast-rcon-to-ops=true
op-permission-level=4
pvp=true
entity-broadcast-range-percentage=100
snooper-enabled=true
level-type=default
hardcore=false
enable-status=true
enable-command-block=false
max-players=20
network-compression-threshold=256
resource-pack-sha1=
max-world-size=29999984
function-permission-level=2
rcon.port=25575
server-port=25565
debug=false
server-ip=
spawn-npcs=true
allow-flight=false
level-name=world
view-distance=10
resource-pack=
spawn-animals=true
white-list=false
rcon.password=
generate-structures=true
max-build-height=256
online-mode=true
level-seed=
use-native-transport=true
prevent-proxy-connections=false
enable-jmx-monitoring=false
enable-rcon=false
motd=A Minecraft Server

```online-mode=true``` 表示是否启用正版验证,默认值为开启。设置为开启即**代表只有 Minecraft 正版玩家才能连接到您的服务器**,一般的"盗版服"均需要将此处设置为关闭。

```spawn-protection=16``` 表示出生点保护边长[^53],默认值为```16```。**在该范围内的所有方块将会被禁止交互(如破坏,放置,触发插件监听[^54])**。设置为0即代表关闭出生点保护。

```sync-chunk-writes=false``` 自1.16加入,表示是否开启**同步**区块读写,默认为关闭[^55]。将此项目关闭即代表开启异步区块读写,可以加快区块加载速度,但有很大几率导致区块数据损坏[^56]。

```force-gamemode=false``` 表示是否强制游戏模式,默认为关闭。开启后每当玩家重新加入服务器都会自动将玩家的游戏模式设置为默认的游戏模式。

```allow-nether=true``` 表示是否生成地狱,默认为开启。关闭后地狱世界将不会被生成和加载,玩家也不能进入地狱。

```gamemode=survival``` 表示默认游戏模式,默认为```survival```(生存模式)。玩家第一次进入服务器的时候便会被设置成此游戏模式。可选的游戏模式还有```creative```(创造模式),```adventure```(冒险模式),```spectator```(观察模式)[^57]。

```player-idle-timeout=0``` 表示玩家AFK踢出时间,单位为分钟,默认为0,代表关闭。设置为非0自然数即代表当玩家超过X分钟没有进行任何活动时,他将会被自动踢出服务器。

```difficulty=easy ```表示游戏难度,默认为 ```easy``` (简单)。可选的游戏难度还有 ```peaceful``` (和平), ```normal``` (普通), ```hard``` (困难)[^58]。

```spawn-npcs=true``` 表示是否生成 NPC,默认为开启。关闭后将不会自然生成诸如村民这样的NPC生物。

```spawn-animals=true``` 表示是否生成动物,默认为开启。关闭后将不会自然生成动物。

```spawn-monsters=true``` 表示是否生成怪物,默认为开启。关闭后将不会自然生成怪物。

```generate-structures=true``` 表示是否生成结构,默认为开启。关闭后将不会在地图中生成诸如沙漠神庙,废弃矿道这样的结构。

```op-permission-level=4``` 表示默认 OP 权限,默认为4。代表了当你使用 ```/op``` 命令时 OP 的默认权限等级[^60]。设置为 1 即代表 OP 仅能绕过出生点保护限制; 设置为 2 即代表 OP 可以使用单人模式作弊指令 (例如 ```/execute``` ); 设置为 3 即代表 OP 可以使用多人游戏作弊指令 (例如 ```/ban``` ); 设置为 4 即代表 OP 可以使用所有指令,包括 ```/stop```, ```/save-all```, ```/save-on```, ```/save-off``` 等。

```pvp=true``` 表示是否允许 PVP,默认为开启。设置为关闭玩家与玩家便无法相互攻击。

```level-type=default``` 表示主世界类型,默认为默认。设置为 ```flat``` 即代表超平坦。

```hardcore=false``` 表示是否开启极限模式,默认为关闭。开启后当玩家死亡便会被服务器自动封禁。

```enable-status=true``` 自 1.16 加入,表示是否在服务器列表中显示为在线,默认为开启。关闭后客户端的服务器列表中将将此服务器显示为**离线**,但玩家仍可连接到服务器。

```enable-command-block=false``` 表示是否启用命令方块,默认为关闭。开启后才能够使用命令方块。

```max-players=20``` 表示最大玩家数,默认为 20。表示了该服务器能够容纳的同时在线玩家数。

```resource-pack=``` 表示资源包地址,默认为空。在此处填写直链[^61]后玩家进服便可以选择是否安装资源包。

```server-port=25565``` 表示服务器端口号,默认为 25565。

```allow-flight=false``` 表示是否允许玩家飞行,默认为关闭。开启后服务端自带的反作弊系统将不会拦截并踢出使用飞行作弊的玩家[^62]。

```view-distance=10``` 表示服务器最大视距,默认为 10,允许的值为3-32。

```level-seed=``` 表示地图种子号,默认为空。

```prevent-proxy-connections=false``` 表示是否阻止代理连接,默认为关闭。开启后服务端将会尽可能的禁止被判定为使用代理的连接。

```motd=A Minecraft Server``` 表示服务器标语,默认为 ```A Minecraft Server``` 。代表了玩家在多人游戏列表上看到的服务器标语,您可以使用 ```\u00A7``` 表示分节符表示创建颜色代码,使用\n表示换行。

```white-list=false``` 表示是否启用白名单,默认为关闭。开启后只有在服务器白名单内的玩家才能进入服务器,您可通过 ```/whitelist``` 指令管理您的白名单。

```enforce-whitelist=false``` 表示是否强制踢出非白名单玩家,默认为关闭。开启后当你在服务器运行中通过 ```/whitelist on``` 指令手动开启白名单后,未处于白名单内的在线玩家将会被踢出。

有关 server.properties 的更多信息请见https://minecraft.gamepedia.com/Server.properties

::: details 注释 20

on
```bukkit.yml``` [^63]

# This is the main configuration file for Bukkit.
# As you can see, there's actually not that much to configure without any plugins.
# For a reference for any variable inside this file, check out the Bukkit Wiki at
# https://www.spigotmc.org/go/bukkit-yml
# 
# If you need help on this file, feel free to join us on irc or leave a message
# on the forums asking for advice.
# 
# IRC: #spigot @ irc.spi.gt
#    (If this means nothing to you, just go to https://www.spigotmc.org/go/irc )
# Forums: https://www.spigotmc.org/
# Bug tracker: https://www.spigotmc.org/go/bugs


settings:
  allow-end: true
  warn-on-overload: true
  permissions-file: permissions.yml
  update-folder: update
  plugin-profiling: false
  connection-throttle: 4000
  query-plugins: true
  deprecated-verbose: default
  shutdown-message: Server closed
  minimum-api: none
spawn-limits:
  monsters: 70
  animals: 10
  water-animals: 15
  water-ambient: 20
  ambient: 15
chunk-gc:
  period-in-ticks: 600
ticks-per:
  animal-spawns: 400
  monster-spawns: 1
  water-spawns: 1
  water-ambient-spawns: 1
  ambient-spawns: 1
  autosave: 6000
aliases: now-in-commands.yml

```allow-end: true``` 表示是否生成末地,默认为开启。关闭后末地世界将不会被生成和加载,玩家也不能进入末地。

```warn-on-overload: true``` 表示是否提示服务器过载,默认为开启。

```spawn-limits:``` 表示每个世界能够生成的最大生物多少。下方分别表示了怪物,动物,水生动物,水生环境生物和环境生物的最大自然生成数。

```ticks-per:``` 表示每多少Tick[^64]能够生成一个生物。除和上方相同的项目外,```autosave```代表了地图自动保存的时间。

有关
```bukkit.yml``` 的更多信息请见 [Bukkit.yml - Official BukkitWiki](https://bukkit.gamepedia.com/Bukkit.yml) [^65]。

::: details 注释 21

on
```spigot.yml```

# This is the main configuration file for Spigot.
# As you can see, there's tons to configure. Some options may impact gameplay, so use
# with caution, and make sure you know what each option does before configuring.
# For a reference for any variable inside this file, check out the Spigot wiki at
# http://www.spigotmc.org/wiki/spigot-configuration/
# 
# If you need help with the configuration or have any questions related to Spigot,
# join us at the IRC or drop by our forums and leave a post.
# 
# IRC: #spigot @ irc.spi.gt ( http://www.spigotmc.org/pages/irc/ )
# Forums: http://www.spigotmc.org/

config-version: 12
settings:
  debug: false
  save-user-cache-on-stop-only: false
  moved-wrongly-threshold: 0.0625
  log-villager-deaths: true
  bungeecord: false
  timeout-time: 60
  restart-on-crash: true
  restart-script: ./start.sh
  moved-too-quickly-multiplier: 10.0
  sample-count: 12
  player-shuffle: 0
  user-cache-size: 1000
  netty-threads: 4
  attribute:
    maxHealth:
      max: 2048.0
    movementSpeed:
      max: 2048.0
    attackDamage:
      max: 2048.0
messages:
  whitelist: You are not whitelisted on this server!
  unknown-command: Unknown command. Type "/help" for help.
  server-full: The server is full!
  outdated-client: Outdated client! Please use {0}
  outdated-server: Outdated server! I'm still on {0}
  restart: Server is restarting
commands:
  silent-commandblock-console: false
  log: true
  tab-complete: 0
  send-namespaced: true
  spam-exclusions:
  - /skill
  replace-commands:
  - setblock
  - summon
  - testforblock
  - tellraw
advancements:
  disable-saving: false
  disabled:
  - minecraft:story/disabled
stats:
  disable-saving: false
  forced-stats: {}
world-settings:
  default:
    verbose: true
    enable-zombie-pigmen-portal-spawns: true
    item-despawn-rate: 6000
    view-distance: default
    wither-spawn-sound-radius: 0
    hanging-tick-frequency: 100
    end-portal-sound-radius: 0
    arrow-despawn-rate: 1200
    trident-despawn-rate: 1200
    zombie-aggressive-towards-villager: true
    nerf-spawner-mobs: false
    dragon-death-sound-radius: 0
    seed-village: 10387312
    seed-desert: 14357617
    seed-igloo: 14357618
    seed-jungle: 14357619
    seed-swamp: 14357620
    seed-monument: 10387313
    seed-shipwreck: 165745295
    seed-ocean: 14357621
    seed-outpost: 165745296
    seed-endcity: 10387313
    seed-slime: 987234911
    seed-bastion: 30084232
    seed-fortress: 30084232
    seed-mansion: 10387319
    seed-fossil: 14357921
    seed-portal: 34222645
    mob-spawn-range: 6
    max-tnt-per-tick: 100
    hopper-amount: 1
    entity-tracking-range:
      players: 48
      animals: 48
      monsters: 48
      misc: 32
      other: 64
    merge-radius:
      item: 2.5
      exp: 3.0
    growth:
      cactus-modifier: 100
      cane-modifier: 100
      melon-modifier: 100
      mushroom-modifier: 100
      pumpkin-modifier: 100
      sapling-modifier: 100
      beetroot-modifier: 100
      carrot-modifier: 100
      potato-modifier: 100
      wheat-modifier: 100
      netherwart-modifier: 100
      vine-modifier: 100
      cocoa-modifier: 100
      bamboo-modifier: 100
      sweetberry-modifier: 100
      kelp-modifier: 100
    entity-activation-range:
      animals: 32
      monsters: 32
      raiders: 48
      misc: 16
      tick-inactive-villagers: true
    hunger:
      jump-walk-exhaustion: 0.05
      jump-sprint-exhaustion: 0.2
      combat-exhaustion: 0.1
      regen-exhaustion: 6.0
      swim-multiplier: 0.01
      sprint-multiplier: 0.1
      other-multiplier: 0.0
    max-tick-time:
      tile: 50
      entity: 50
    squid-spawn-range:
      min: 45.0
    ticks-per:
      hopper-transfer: 8
      hopper-check: 1

```spigot.yml``` 中与 ```bukkit.yml``` 可能会有部分选项有所冲突,此时请以 ```spigot.yml``` 为准

有关 spigot.yml 的更多信息请见 Spigot Configuration.

For Sponge

SpongePowered 团队为 Sponge 提供了非常详细的入门教程和配置文件示意,且文档支持简体中文,您可以直接前往SpongePowered 的 Sponge Documentation了解更多 Sponge 的入门知识。

至此,你已经完成第三节的所有学习,并应已掌握部分服务端的配置。

四、插件和模组的下载与使用

对于 Bukkit 系服务端

下载插件

您可前往以下网站获取兼容Bukkit系服务端的插件

  1. BukkitDev(英文) ——Bukkit 论坛下属的一个插件发布平台,很多老牌 Bukkit 插件都在此处发布

  2. SpigotMC Forum(英文)——SpigotMC 团队管理的论坛,现在大部分 Bukkit 插件都在此处发布

  3. PaperMC Forum(英文)——PaperMC 团队管理的论坛,一小部分只兼容 PaperAPI 的插件会在此处发布

  4. MCBBS(中文)——国内著名 MC 交流论坛,拥有一部分优秀的国人原创插件和搬运自国外的插件

安装插件

将您下载到的以.jar结尾的插件放入.\plugins文件夹,重启服务器后即可加载。届时,您可通过输入/plugins指令查看插件安装状态。您可前往.\plugins\插件名称文件夹查看插件提供的配置文件(如果有)。

对于Sponge系服务端

下载插件

您可前往以下网站获取兼容Sponge系服务端的插件

  1. SpongePowered Ore(英文)——SpongePowered 团队管理的一个插件发布平台,几乎所有的 Sponge 插件都会在此平台发布

  2. MCBBS(中文)——国内著名 MC 交流论坛,拥有一部分优秀的国人原创插件和搬运自国外的插件。对于 Sponge,您可在服务端插件版中部的筛选栏中仅选择Sponge以过滤掉其他类型的插件

安装插件

Sponge 对插件兼容有严格的要求,请务必确保您的 Sponge 插件兼容您的 Sponge 服务端兼容的插件API版本(这些版本会在SpongePowered Ore上有显著声明,如API7,请在下载 Sponge 服务端时注意该服务端支持的 API 版本)

将您下载到的以.jar结尾的插件放入.\mods文件夹,重启服务器后即可加载。届时,您可通过输入/sponge plugins指令查看插件安装状态。您可前往.\config\插件名称`文件夹查看插件提供的配置文件(如果有)。

对于搭载了 ForgeAPI 或是 FabricAPI 的模组服务端

下载模组

您可前往以下网站获取兼容 ForgeAPI 或是 FabricAPI 的 Mod

  1. CurseForge(英文)——国外著名游戏 Mods 和 Addons 发布平台,几乎所有模组都会在此平台发布
  2. MC百科(中文)——国内著名 Mod 百科,包含了详细的 Mod 介绍

安装模组

将您下载到的以.jar结尾的插件放入.\mods文件夹,重启服务器后即可加载。您可前往.\config`文件夹查看模组提供的配置文件(如果有)。

至此,你已经完成第四节的所有学习,并应已学会安装插件或模组。


  1. Minecraft使用的开发环境也是 Java 8, 且截止目前,Java 8仍然是 Oracle 公司指定的长期支持版本,因此使用 Java 8 十分稳定。 ↩︎
  2. 此处提供了繁体中文版的
    ```下載適用於所有作業系統的 Java```界面,简体中文版的界面因不明原因长期无法连接。
     ↩︎
  3. 指 Java 虚拟机,运行 Java 应用程序的中间人。 ↩︎