你在下载页看到一整片胶囊,听人说 Paper 最好就下了 Paper;接着照一篇教程,把下载来的 Forge 模组丢进 mods/ 文件夹,重启,结果什么都没发生——既没报错,也没多出任何东西。
问题不在操作,在搭配:选了什么核心,就决定了你能装什么。 这四个名字天天混着出现,但它们的层级完全不同;装错了通常不会报错,只会静默失效,让人以为“下载的包是坏的”。
这一页用一组类比加一张兼容表,把核心、插件、模组、代理端的关系一次理清,也说明在 Minexa 里每种核心的入口开在哪里、文件该放哪个目录。
核心是发动机,插件是不改发动机的外设,模组是改游戏本身,代理端是前台分诊台。
插件只在服务端装,模组通常两边都要装,这是两者最根本的区别。
兼容是单向的:Bukkit 插件进不了模组服,反过来也一样。
放错目录不会报错,只会静默不加载;装完必须重启(先停止再启动)。
18 个核心里有 7 个能装插件、4 个能装模组,代理端两个都不提供入口。
四个词,四句话#
核心(服务端程序本体):可以理解成发动机。它决定游戏版本、性能上限,以及“允不允许外挂东西”。没有核心就没有服务端。
插件(plugin,挂在服务端上、玩家不用装的小程序):不改发动机的外设。它通过核心提供的接口加功能——传送、地皮、经济、权限——玩家不用装任何东西就能享受。
模组(mod,直接改游戏内容的程序):改游戏本身。新增方块、生物、机器、合成表,通常客户端也要装同样的模组,否则进不去,或者画面错乱。
代理端(proxy,玩家先连它、它再转发给后面子服的程序):前台和分诊台。玩家连的是它,它把连接转给后面的子服;它自己不生成世界,只做转发。
一句话记忆:插件只在服务端加东西,模组要两边一起改,核心选错就全都装不上,代理端用来把多个服收成一个入口。
插件为什么只能在 Bukkit 系跑#
Bukkit 是一套接口标准:核心把“玩家加入”“方块被破坏”“有人发消息”这些事件暴露出来,插件监听事件、再调用接口改变游戏状态。Spigot、Paper、Purpur、Leaves、Leaf 都建立在这套接口上,所以:
CraftBukkit → Spigot → Paper → Purpur / Leaves / Leaf 是同源的一家人,六个核心的亲戚关系见 Paper 系六个核心;
一个为 Bukkit 写的老插件,通常能在这六个核心上直接跑;
但反过来,为 Paper 新接口写的插件,在很老的 CraftBukkit 上可能跑不了:接口向下兼容,不向上兼容。
Fabric、Forge、NeoForge、Quilt 走的是另一条路:它们不实现 Bukkit 接口,而是在启动时改写游戏自身的类。所以 Bukkit 插件放进模组服,连加载的机会都没有——没有那套接口可以调用。
这也是为什么“装个插件实现某功能”的教程只对一半核心有效。看到教程第一句就该确认:它说的是 Paper 系还是 Fabric 系。两者怎么选,见 18 个核心选项总览。
模组为什么通常两边都要装#
模组加载器在启动时改字节码:客户端加了新方块、新界面,服务端也加同样的注册表。如果只有一边有:
客户端缺模组 → 连接时版本握手失败,或者进服后看到紫黑方块、物品变成“未知”;
服务端缺模组 → 客户端发来的方块 ID 服务端不认识,直接断开。
有少数模组是“只装服务端”的(偏优化、偏管理的那种),但这是例外,不能当默认。判断方法看模组发布页有没有写“client required / 仅服务端”,拿不准就两边都装。
模组还有三条版本线要对齐,缺一条就崩:
| 对齐项 | 说明 | 不对齐的表现 |
|---|---|---|
| 游戏版本 | 模组为哪个 MC 版本编译,就只能用在哪个版本 | 加载阶段直接报错,或模组不生效 |
| 加载器版本 | Forge 的 loader、Fabric 的 loader 要与模组声明匹配 | 提示依赖不满足,启动中止 |
| 前置依赖 | 很多模组要先装 Fabric API 或其它库 | 日志明确写缺少某个 mod id |
一张表:谁能装什么#
这是 Minexa 里 18 个核心的实际支持情况,装之前对一眼:
| 核心 | 插件 | 模组 | 文件放哪 |
|---|---|---|---|
| Paper / Purpur / Leaves / Leaf / Spigot / CraftBukkit | ✅ | ❌ | plugins/ |
| Fabric / Forge / NeoForge / Quilt | ❌ | ✅ | mods/ |
| Vanilla | ❌ | ❌ | — |
| Velocity / BungeeCord | 应用内不提供 | 应用内不提供 | — |
| PowerNukkitX | ✅(PNX 插件) | ❌ | plugins/ |
| PocketMine-MP | 应用内不提供入口 | ❌ | 自己放 plugins/ |
| Allay | ❌ | ❌ | — |
| BDS | ❌ | ❌ | 不能装插件/模组,但服务端本身可以跑(转译) |
表格之外还有两条要说明:
PocketMine-MP 其实有插件生态,用的是
.phar格式的插件,但应用的插件管理页不提供它的入口。想装只能自己用文件管理把文件放进plugins/目录,应用不负责识别和启停,详见 基岩版核心。BDS 既不能装插件也不能装模组(官方就没有这两套机制,不是应用不提供入口)。它能跑,但靠 PRoot + box64 转译,要先初始化专用环境、性能约为原生一半,见 官方基岩版(BDS)开服。
不存在“Paper + Forge 双核心”,也没有“装个桥接就能混装”。换核心 = 换掉核心那一层,世界通常能沿用(同版本、同类型的前提下),但插件和模组必须重新配:Paper 的插件在 Fabric 上一个都不会加载。
换核心前先备份世界,具体见 备份策略与恢复演练。
代理端什么时候才需要#
代理端不是“更高级的核心”,它解决的是一个特定问题:你想在一台机器上跑多个子服,但希望玩家只记一个地址。
典型场景:一个生存服 + 一个小游戏服。玩家连代理端的 25565,代理端按规则把他送到对应的子服,换服时不用退出重连。
代价也很实在:
代理端本身不生成世界、不跑游戏逻辑,但会占一份内存和 CPU;
子服要单独配置、单独占端口,手机上的内存和 CPU 会成倍吃紧;
在 Minexa 里,Velocity 和 BungeeCord 都不提供插件/模组入口,也就没有图形化的转发规则配置,需要自己在配置文件里写。
所以:只有一个服,就不需要代理端。 手机上多开一层代理,往往得不偿失。等你有“必须把两个服合成一个入口”的需求,再考虑它。
Velocity、BungeeCord 是 Java 版的代理端,只能转发 Java 客户端。基岩版没有对应的内置方案,别把它们当成“把基岩玩家接进来”的工具。
文件放哪:plugins/ 与 mods/#
两个目录都在服务端目录里,名字固定,位置不能改:
/storage/emulated/0/Minexa/Minecraftserver/<目录名>/
├── plugins/ # Bukkit 系核心的插件(.jar)
│ └── 某插件.jar
└── mods/ # Fabric / Forge / NeoForge / Quilt 的模组(.jar)
└── 某模组.jar放错目录 = 静默不加载。丢错目录不会报错,只会当它不存在。
装完必须重启(先「停止」再「启动」)。运行中往目录里加文件,大多数核心不会热加载。
不要解压。插件和模组都是
.jar文件本身,解压出来的文件夹不会被读。有的模组会自己生成
config/目录放配置,那是正常的,不要删。
「服务器管理」下的插件/模组入口只对支持的核心显示。如果你用的是 Vanilla 或 Allay,看不到这个入口不是 bug,是它本来就不支持。要放文件,用「文件」页上传或新建文件夹,路径就是上面那个真实目录,完整结构见 服务端目录结构与文件说明。
三个最容易混的说法#
“插件就是服务端”——不是。插件不能单独启动,必须挂在某个核心上。删掉核心,插件目录里躺着多少 jar 都没用。
“模组装服务端就行”——多数情况不行。模组改的是游戏内容,客户端没有同样的内容就没法同步。只有明确标了“仅服务端”的模组才可以。
“装了没反应就是文件坏了”——先按四步查,别急着重下:
目录对不对(
plugins/还是mods/);版本对不对(插件/模组支持的游戏版本是否与你服务端一致);
加载器对不对(Bukkit 插件配 Bukkit 系核心,模组配模组核心);
前置依赖装了吗(缺库会在日志里抛
NoClassDefFoundError或Missing dependency)。
四步都对还不行,重启一次并看终端里有没有加载日志——正常加载会打印插件名和版本号。具体排错见 插件安装、启停与排错 和 模组安装、依赖与排错。
能说出自己的核心属于「插件系 / 模组系 / 代理 / 原版」里的哪一种。
打开服务端目录,能看到
plugins/或mods/中的一个,且里面只有.jar,没有解压出来的文件夹。装完东西后是停服再启动的,不是运行中直接丢文件。
终端里能看到插件名/模组名被加载的记录,不是一片安静。
知道换核心后插件和模组必须重配,不是自动继承。
下一步#
还没选核心:18 个核心选项总览
要装插件:插件安装、启停与排错
要装模组:模组安装、依赖与排错