虽然目前已有支持 Mod 的高版本 (1.15.1) 服务器实现 (如 Fabric), 但 Sponge 服务器的搭建仍然具有重要意义, 因为它是唯一一种可以同时支持高版本、Mod、和插件的服务端, 而 Fabric 仅支持 Mod。
本文将详细介绍如何安装 Sponge, 并部署一个支持 Mod 和插件的 Minecraft 1.12.2 服务器。
介绍
Sponge 是一个为 Minecraft 提供插件支持的开源项目, 作为服务端的核心, 有三个分支, 分别是
- SpongeVanilla: 基于原版 Minecraft, 适合需要插件但不需要 Mod 的服务器
- SpongeForge: 基于 Minecraft Forge, 适合同时运行 Forge Mod 和插件的服务器
- SpongeNeo: 基于 NeoForge, 适合同时运行 NeoForge Mod 和插件的服务器
在这里, 为了能够安装 Mod, 我们选择 SpongeForge 分支
在服务器中, Sponge 作为一个 Mod 放置在
mods
文件夹中, 与插件、Mod 并列存放
Sponge 的工作原理是通过提供统一的 API, 使插件和 Mod 能够共存并相互协作。
也就是说, 支持插件和 Mod 的服务器是由一个基础的 Forge 服务器 (原版服务端 + Forge) 与 Sponge API 组成的。Sponge 的作用是为其他 Forge Mod 提供 API, 使它们能够无缝协作。
其原理与高版本 Fabric 中的 Optifine Loader 类似。由于 Optifine 无法直接与高版本的 Fabric (甚至 Forge) 兼容, 一些开发者创建了 Optifine Loader, 它将为 Optifine 提供了适配 Fabric 的接口。
总的来说, Sponge 的部署步骤与一般的 Forge 服务器类似, 唯一的区别就是需要额外添加 Sponge API 模组。
搭建步骤
下载所需文件
Sponge 对 Forge 的版本有一定要求, 因此在选择 Sponge 时, 需要注意其支持的 Forge 版本号。
例如, Forge 版本号为 1.12.2-14.23.5.2838, 对应的 Sponge 版本号为 1.12.2-2838-7.4.7, 这表示它们是兼容的版本。如果这两个版本不一致, Forge 版本较高 (Sponge 版本较低), 可能会导致运行不稳定, 而如果 Forge 版本较低 (Sponge 版本较高), 则可能会导致部分插件无法正常运行。
首先我们需要下载必要的文件, 包括:
- Minecraft 原版服务器端 1.12.2 - 备份下载 minecraft_server.1.12.2.jar
- Minecraft Forge 1.12.2 - 备份下载 forge-1.12.2-14.23.5.2859-installer.jar
- Sponge Forge 1.12.2 - 备份下载 spongeforge-1.12.2-2838-7.4.7.jar
创建服务器文件夹
创建一个名为 sponge-server
的文件夹
mkdir sponge-server
cd sponge-server
将 Minecraft 原版服务端文件放入, 并重命名为 minecraft_server.1.12.2.jar
重命名文件是为了避免 Forge 安装器下载官方服务端时失败。Forge 安装过程中会尝试下载官方服务端, 但实际上它无法成功下载 (即使使用科学上网, Java 默认不会使用系统的代理设置)。因此, 我们需要通过其它途径提前下载服务端文件, 并将其命名为 Forge 所预期的文件名。这样, Forge 安装器就会跳过服务端下载, 直接开始下载所需的库文件。
安装 Forge
双击打开或使用以下命令打开 Forge 安装器
java -jar forge-1.12.2-14.23.5.2859-installer.jar
选择 Install server
, 并指定 sponge-server
文件夹。若提示 There are already files at the target directory
, 可以忽略并继续安装。
在安装过程中, 如果出现错误 (如下载失败), 无需担心。只需重复上述步骤, Forge 会自动跳过已下载的文件, 继续从上次进度开始。
大概 20 秒左右安装完成后, 你会发现 sponge-server
文件夹中多出了一个 libraries
文件夹, 这就是我们所需要的库文件。
此时, 一个基本的 Forge 服务器已经搭建完成。位于 sponge-server
文件夹中的 Forge universal 文件即为服务器核心, 以后启动服务器时需要使用这个文件。
启动服务器
现在, 我们可以启动服务器来生成一些必要的文件
java -jar forge-1.12.2-14.23.5.2859-universal.jar
启动后, 服务器会生成 eula.txt
文件。将文件中的内容修改为 eula=true
, 然后重新启动服务器。这时, 服务器将生成基础文件夹和文件, 如 logs
、world
、server.properties
, 以及最重要的 mods
文件夹。
当服务器启动完成后, 输入以下命令关闭服务器
> stop
添加 Sponge
将之前下载的 Sponge 文件 (spongeforge-1.12.2-2838-7.4.7.jar
) 放入 mods
文件夹中, 然后启动服务器。你就会发现: 哇, 启动速度慢了一大截呢 就成功了!
这个时候, 启动带 Forge 的客户端, 可以直接进入服务器
插件管理
Sponge 插件和 Mod 都放在 mods
文件夹中, 这一点与 Bukkit 完全不同。它们的配置文件位于 config
文件夹中。服务器的插件和 Mod 结构如下
sponge-server
├── config
│ ├── plugin1
│ │ └── main.conf
│ ├── plugin2
│ │ └── config.conf
│ └── simpleplugin.conf
└── mods
├── plugin1.jar
├── plugin2.jar
└── simpleplugin.jar
每个插件或 Mod 都有相应的配置项, 这些配置文件通常位于 config
文件夹中。大多数插件的配置会放在与插件名称相同的文件夹里, 少数简单的插件则直接放在 config
文件夹中。通过修改这些配置文件, 你可以调整插件或 Mod 的设置, 类似于 Bukkit 中的 config.yml
与 Mod 不同, 插件不需要在本地客户端安装 (插件无需安装在客户端, 仅需安装服务器所需的 Mod)。这意味着你只需要安装那些可以玩的 Mod, 而无需安装服务器上的插件 (例如领地、经济等)。对于像 World Edit 这种既有插件版本也有 Mod 版本的, 建议选择插件版本, 因为它更适合服务器使用。
Sponge 插件的兼容性是通过 API 来判断的。目前, 1.12.2
版本的 Sponge 使用的是 API7, 因此任何使用 API7 接口开发的插件都可以在该版本的 Sponge 服务器上运行。少数为 API6、API5 或更低版本开发的插件 (例如 World Edit) 也能正常运行, 但稳定性较差。部分插件则可能完全不能运行。
这也告诉我们在更新 Sponge 时要慎重, 如果更新版本过高, 一些不再维护的插件就会失效。
插件推荐
Sponge 服务端构建出了一种独立于 Bukkit 插件的体系, 因此它们的主流插件也都不一样了。在这里给出 Sponge 服务端中常用的一些 Mod
- 经济
- TotalEconomy
- EconomyLite 👍
- 商店
- 权限管理
- LuckPerms 👍
- PermissionsEx
- 领地
- RedProtect Anti-Grief | Server Protection | Region Management [1.7-1.18+] 👍
- GriefPrevention
- 不支持 Residence!
- 登录
- 基础管理
- Nucleus 或 ore.spongepowered.org/Nucleus/Nucleus 👍
- 不支持 Essentials!
- 皮肤
- 杂项
常见问题
进入服务器后无法破坏东西?
可能是出生点保护。将 server.properties
中的 spawn-protection
项设置为 0
OP 无效?
在 Sponge 中没有 OP 的概念, 取而代之的是更复杂且灵活的权限组管理。你需要依赖权限管理插件来实现这一功能, 推荐使用 LuckPerms。需要注意的是, Sponge 的权限节点与 EssentialsX 等插件的权限节点不通用, 具体可以参考相关文档。
/help
无权限?
/help
命令的权限在 sponge.commands.help
, 确保为玩家赋予此权限。同时, OP 应该拥有 sponge.commands
权限。
/gamerule
、/gamemode
等无权限?
这些命令属于原版指令, 其权限在 minecraft.commands
里。OP 需要拥有 minecraft.commands
权限才能使用这些命令。
在一次性给予所有权限 (*
权限) 以后, 发生很多奇怪的事情?
建议重置权限组。不推荐一次性授予 *
权限, 因为这样会给玩家一些不必要的权限。例如, nucleus.vanish.onlogin
会导致玩家每次登录时自动隐身, 除了聊天以外没有任何办法发现此人 (Tab 菜单也不可见)。
Nucleus 如何设置玩家家的数量以及称号?
可以通过与 LuckPerms 配合使用来方便地设置这些选项。使用权限组来区分不同设置。
将 default
组的最大 home
数量设置为 5 个
> /lp group default meta set home-count 5
为 default
组的玩家添加一个绿色昵称前缀, 其中 addprefix
后面需要跟上一个表示权重的数字
> /lp group default meta addprefix 1 [&a玩家&r]
原文