插件介绍

这是“修复补丁”,不是“重做系统”

MythicFixOffhand 的目标很明确:把 MMOItems 某些武器本来只在主手生效的数值,补丁式地注册到副手上。

MythicFixOffhand 是一个面向 Paper 1.20+ 的 MMOItems 兼容修复插件,依赖 MythicLib 与 MMOItems。它会监听玩家副手物品变化,并在副手拿着指定的 MMOItems 武器时,读取该物品的数值属性,再以副手来源的形式挂到玩家属性映射里。

源码层面上,它并没有修改 MMOItems 本体,也不是重新实现一套双持系统,而是把满足条件的副手武器属性以 OFF_HAND + HAND_ITEM 的方式注册为临时修饰符。副手物品被拿下、切换世界、退出游戏或条件不再满足时,这些修饰符会被自动移除。

说人话:把“本来主手才吃到的 MMOItems 武器数值”,在副手再补挂一遍。

适合双持职业

如果你的服里有双刀、短剑副手、法器副手之类玩法,这个插件就是补上副手数值生效缺口的。

适合定向放行

你可以只放行某几个武器,也可以整类放行,比如全部 SWORD 或全部 DAGGER

主要功能

  • 指定物品副手生效:通过 类型:物品ID 精确控制哪些 MMOItems 武器可以在副手生效。
  • 整类武器副手生效:可以直接放行整个类型,比如所有 SWORDDAGGER
  • 白名单 / 黑名单模式whitelist-mode: true 时仅配置项生效,false 时则相反。
  • 自动监听副手变化:切换主手栏位、F 键互换主副手、进服、退服、切世界时都会重新检查。
  • 自动注册数值属性:遍历 MMOItems 的数值属性并注册为副手修饰符,无需手动一项项写。
  • 调试模式:可输出当前副手物品、匹配结果、添加或移除的属性数量,方便排错。
  • 管理命令:支持重载、查看列表、动态添加/删除放行物品,以及直接检查当前副手属性。

当前实现只处理 数值型属性。也就是说,它主要补的是攻击、暴击、生命、防御这类数值,不是把所有技能触发器都完整复制到副手。

生效逻辑

插件的判断流程基本可以概括成下面五步:

1. 监听副手状态变化

触发事件包括:PlayerSwapHandItemsEventPlayerItemHeldEvent、玩家加入、退出、切换世界。

2. 判断物品是否合法

副手必须是 MMOItems 物品,并且它的 typeitemId 必须通过配置检测。

3. 限定为武器类来源

源码只对 type.getModifierSource().isWeapon() 为真的类型继续处理。非武器类物品会被直接跳过。

4. 读取并注册数值属性

插件会遍历 MMOItems 的全部数值属性,读取 NBT 内该物品已有的数值,并注册为副手修饰符。

5. 条件失效时自动移除

副手清空、切走物品、换世界、退出服务器,或者当前物品不再匹配时,之前挂上的属性会被移除,避免残留。

Java核心思路
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,包括 statscheck

权限节点

权限说明默认
mythicfixoffhand.admin允许使用全部管理命令,包括 reload、list、add、remove、stats、checkOP

源码中没有拆分普通玩家权限与管理员权限,因此如果你想让测试人员使用 /mfo stats,也需要给这个节点。

使用教程

安装依赖

先确保服务器已安装 MythicLibMMOItems,否则插件会在启动时自检失败并自动停用。

放入插件并开服

MythicFixOffhand.jar 放进 plugins 文件夹,首次启动后会自动生成 config.yml

配置允许副手生效的武器

offhand-enabled-items 里写具体物品,或在 offhand-enabled-types 里直接写类型。

执行重载

/mfo reload

进游戏实测

把目标 MMOItems 武器放到副手,然后执行 /mfo stats,检查类型、ID 和数值是否被识别。

两种常见配置方式

精确放行

适合只想让少数武器副手生效的服务器。把具体的 类型:物品ID 写进 offhand-enabled-items 即可。

整类放行

适合职业武器体系固定的服务器。直接把 SWORDDAGGER 这类类型加入 offhand-enabled-types

配置文件

配置文件路径:plugins/MythicFixOffhand/config.yml

YAMLconfig.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-modetrue 为白名单,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
Java17+
核心实现将 MMOItems 数值属性以副手修饰符形式挂入 MythicLib 属性系统
检测事件主副手互换、主手栏位切换、进服、退服、切换世界
处理范围仅武器类来源的 MMOItems 数值属性

常见问题

因为源码里只继续处理 ModifierSource.isWeapon() 为真的类型。也就是说,这个插件目标就是“武器副手修复”,不是“所有 MMOItems 物品副手全生效”。
先用 /mfo stats 看副手物品读出来的真实 typeitemId。最常见的问题是写错了类型名、物品 ID,或者拿着的根本不是 MMOItems 物品。
不会直接改主手逻辑。主手仍由原本的 MMOItems / MythicLib 体系处理,这个插件只额外处理副手并在条件失效时清理自己注册的修饰符。
如果主手和副手都各自有合法的数值来源,结果上通常会叠加。这正是双持玩法常见的目标;如果你不想叠加,就不要把对应类型或物品放行到副手。
按当前源码不行。命令入口一开始就统一检查 mythicfixoffhand.admin,所以 statscheck 也被归到管理员权限里。

这个插件最适合拿来补“副手数值不吃”的短板。如果你要的是完整双持技能、不同手武器判定或技能触发重写,那已经是另一个插件层级了。