插件¶
插件(Plugin)是Minecraft基岩版服务端中用于扩展和修改服务端行为的程序。与附加包不同,插件运行在服务端软件上,通过调用服务端提供的API来实现游戏逻辑的修改和扩展。
概述¶
基岩版的附加包系统提供了数据驱动和脚本API两种官方扩展机制,但它们的能力受限于官方公开的接口范围。服务端插件则通过接入服务端软件的内部接口,可以实现更深层次的修改,包括自定义命令、权限管理、反作弊、经济系统、领地保护、跨服传送等功能。
插件的开发语言和形式取决于所使用的插件加载器(Plugin Loader)。不同的服务端软件和插件加载器支持不同的编程语言和API体系。
原生插件¶
原生插件(Native Plugin)是使用C/C++等编译型语言编写,直接调用底层接口的插件类型。原生插件具有最高的执行效率和最广泛的接口访问能力,但开发门槛较高,且与服务端版本的耦合度很强。
LeviLamina是目前基岩版原生插件生态中活跃的插件加载器之一,它基于BDS运行,通过钩子和公共API拦截或扩展游戏的原生函数。LeviLamina的原生模组通常使用C++编写,见LeviLamina。
脚本插件¶
许多插件加载器支持使用脚本语言编写插件,以降低开发门槛。常见的脚本语言支持包括:
- JavaScript/TypeScript:SerenityJS等Node.js生态服务端,或部分第三方加载器的附属脚本引擎支持。SerenityJS插件和嵌入式服务端代码只适用于SerenityJS自身,不属于BDS或官方脚本API。
- Python:Endstone等支持。
- Lua:部分旧版加载器支持。
- Java:Nukkit系列及Allay等使用Java实现的服务端软件原生支持Java插件。
与附加包的关系¶
插件和附加包是两种不同层面的扩展机制,但它们可以协同工作。服务端插件可以加载和管理附加包,也可以通过脚本API与附加包中的脚本进行交互。在实际的服务器部署中,通常会同时使用附加包和插件来实现完整的游戏内容和管理功能。
分发¶
插件的分发方式因加载器而异。大多数插件通过GitHub、论坛或专用的插件市场进行分发。LeviLamina生态使用lip包管理器用于模组安装和版本管理;SerenityJS当前工作区则把插件系统拆分为独立的@serenityjs/plugins包。