MythicFixOffhand ¥15
让指定的 MMOItems 武器在副手也能正常生效的修复补丁
插件介绍
这是“修复补丁”,不是“重做系统”
MythicFixOffhand 的目标很明确:把 MMOItems 某些武器本来只在主手生效的数值,补丁式地注册到副手上。
MythicFixOffhand 是一个面向 Paper 1.20+ 的 MMOItems 兼容修复插件,依赖 MythicLib 与 MMOItems。它会监听玩家副手物品变化,并在副手拿着指定的 MMOItems 武器时,读取该物品的数值属性,再以副手来源的形式挂到玩家属性映射里。
源码层面上,它并没有修改 MMOItems 本体,也不是重新实现一套双持系统,而是把满足条件的副手武器属性以 OFF_HAND + HAND_ITEM 的方式注册为临时修饰符。副手物品被拿下、切换世界、退出游戏或条件不再满足时,这些修饰符会被自动移除。
说人话:把“本来主手才吃到的 MMOItems 武器数值”,在副手再补挂一遍。
适合双持职业
如果你的服里有双刀、短剑副手、法器副手之类玩法,这个插件就是补上副手数值生效缺口的。
适合定向放行
你可以只放行某几个武器,也可以整类放行,比如全部 SWORD 或全部 DAGGER。
主要功能
- 指定物品副手生效:通过
类型:物品ID精确控制哪些 MMOItems 武器可以在副手生效。 - 整类武器副手生效:可以直接放行整个类型,比如所有
SWORD、DAGGER。 - 白名单 / 黑名单模式:
whitelist-mode: true时仅配置项生效,false时则相反。 - 自动监听副手变化:切换主手栏位、F 键互换主副手、进服、退服、切世界时都会重新检查。
- 自动注册数值属性:遍历 MMOItems 的数值属性并注册为副手修饰符,无需手动一项项写。
- 调试模式:可输出当前副手物品、匹配结果、添加或移除的属性数量,方便排错。
- 管理命令:支持重载、查看列表、动态添加/删除放行物品,以及直接检查当前副手属性。
当前实现只处理 数值型属性。也就是说,它主要补的是攻击、暴击、生命、防御这类数值,不是把所有技能触发器都完整复制到副手。
生效逻辑
插件的判断流程基本可以概括成下面五步:
1. 监听副手状态变化
触发事件包括:PlayerSwapHandItemsEvent、PlayerItemHeldEvent、玩家加入、退出、切换世界。
2. 判断物品是否合法
副手必须是 MMOItems 物品,并且它的 type 和 itemId 必须通过配置检测。
3. 限定为武器类来源
源码只对 type.getModifierSource().isWeapon() 为真的类型继续处理。非武器类物品会被直接跳过。
4. 读取并注册数值属性
插件会遍历 MMOItems 的全部数值属性,读取 NBT 内该物品已有的数值,并注册为副手修饰符。
5. 条件失效时自动移除
副手清空、切走物品、换世界、退出服务器,或者当前物品不再匹配时,之前挂上的属性会被移除,避免残留。
if (副手是已启用的 MMOItems 武器) {
遍历全部数值属性
按 OFF_HAND + HAND_ITEM 注册修饰符
} else {
移除旧的副手修饰符
}
命令列表
主命令:/mythicfixoffhand,别名:/mfo
| 命令 | 说明 | 权限 |
|---|---|---|
/mfo reload | 重载配置文件并重新读取放行列表 | mythicfixoffhand.admin |
/mfo list | 显示当前白名单/黑名单模式、已启用物品和类型 | mythicfixoffhand.admin |
/mfo add <类型> <物品ID> | 动态添加一个允许副手生效的 MMOItems 物品 | mythicfixoffhand.admin |
/mfo remove <类型> <物品ID> | 从配置中移除一个允许副手生效的物品 | mythicfixoffhand.admin |
/mfo stats | 查看当前副手物品的 MMOItems 类型、ID、数值属性与是否已启用 | mythicfixoffhand.admin |
/mfo check | 和 /mfo stats 行为一致,作为别名保留 | mythicfixoffhand.admin |
按源码实现,当前版本所有子命令都会先检查 mythicfixoffhand.admin,包括 stats 和 check。
权限节点
| 权限 | 说明 | 默认 |
|---|---|---|
mythicfixoffhand.admin | 允许使用全部管理命令,包括 reload、list、add、remove、stats、check | OP |
源码中没有拆分普通玩家权限与管理员权限,因此如果你想让测试人员使用 /mfo stats,也需要给这个节点。
使用教程
安装依赖
先确保服务器已安装 MythicLib 与 MMOItems,否则插件会在启动时自检失败并自动停用。
放入插件并开服
把 MythicFixOffhand.jar 放进 plugins 文件夹,首次启动后会自动生成 config.yml。
配置允许副手生效的武器
在 offhand-enabled-items 里写具体物品,或在 offhand-enabled-types 里直接写类型。
执行重载
/mfo reload
进游戏实测
把目标 MMOItems 武器放到副手,然后执行 /mfo stats,检查类型、ID 和数值是否被识别。
两种常见配置方式
精确放行
适合只想让少数武器副手生效的服务器。把具体的 类型:物品ID 写进 offhand-enabled-items 即可。
整类放行
适合职业武器体系固定的服务器。直接把 SWORD、DAGGER 这类类型加入 offhand-enabled-types。
配置文件
配置文件路径:plugins/MythicFixOffhand/config.yml
debug: false
offhand-enabled-items:
- "SWORD:flame_blade"
- "DAGGER:shadow_fang"
offhand-enabled-types:
- "GAUNTLET"
whitelist-mode: true
| 字段 | 说明 | 默认行为 |
|---|---|---|
debug | 是否输出调试日志 | false |
offhand-enabled-items | 指定哪些 类型:物品ID 允许副手生效 | 空列表 |
offhand-enabled-types | 指定整个 MMOItems 类型允许副手生效 | 空列表 |
whitelist-mode | true 为白名单,false 为黑名单 | true |
配置中的 类型 和 物品ID 必须和 MMOItems 物品 NBT 里的实际值完全一致,否则不会匹配。
依赖插件与环境
| 依赖 | 是否必需 | 说明 |
|---|---|---|
| Paper 1.20.1 | 必需 | 插件基于 Paper API 1.20.1 编译 |
| Java 17+ | 必需 | pom.xml 指定编译目标为 Java 17 |
| MythicLib | 必需 | 用于读取 MMOItems NBT、访问玩家属性映射并注册修饰符 |
| MMOItems | 必需 | 提供类型、数值属性与 MMOItems 物品数据 |
技术信息
| 项目 | 信息 |
|---|---|
| 插件名称 | MythicFixOffhand |
| 版本 | 1.0 |
| 主命令 | /mythicfixoffhand / /mfo |
| API 版本 | 1.20 |
| Java | 17+ |
| 核心实现 | 将 MMOItems 数值属性以副手修饰符形式挂入 MythicLib 属性系统 |
| 检测事件 | 主副手互换、主手栏位切换、进服、退服、切换世界 |
| 处理范围 | 仅武器类来源的 MMOItems 数值属性 |
常见问题
ModifierSource.isWeapon() 为真的类型。也就是说,这个插件目标就是“武器副手修复”,不是“所有 MMOItems 物品副手全生效”。/mfo stats 看副手物品读出来的真实 type 和 itemId。最常见的问题是写错了类型名、物品 ID,或者拿着的根本不是 MMOItems 物品。mythicfixoffhand.admin,所以 stats 和 check 也被归到管理员权限里。这个插件最适合拿来补“副手数值不吃”的短板。如果你要的是完整双持技能、不同手武器判定或技能触发重写,那已经是另一个插件层级了。