LogoKubeJS PMMO

PmmoJS 概览

PmmoJS 是 Project MMO 在 Forge 1.20.1 上的 KubeJS 附属模组。

它将 PMMO 的 API 封装成干净的 KubeJS 事件和辅助类,让你能用 JavaScript 配置 PMMO 的每一个部分 —— 技能、需求、经验奖励、Perk、触发器等等 —— 不写任何 Java 代码。

如果你要从零设计整合包成长,先读 PMMO 编写流程。它会按顺序说明:定义技能、选择默认数据基线、注册对象数据、添加 NBT 规则、配置 Perk,最后用运行时 hook 处理例外。

三层控制能力

PmmoJS 的功能按三个层级组织,对应 KubeJS 的脚本类型:

启动层(startup_scripts/

在游戏世界加载之前完成的注册:

  • 自定义 Perk —— 通过 PmmoJS.registerPerk(...) 定义新的 Perk 类型。每个 Perk 拥有完整的生命周期回调:条件检查、启动、持续运行、关闭、状态显示。
  • 自定义谓词 —— 通过 PmmoJS.registerPredicate(...) 注册 PMMO 会评估的条件检查。
  • 直接数据注册 —— 通过 PmmoHelper 直接将需求数据、经验奖励、加成和触发器监听器注册到 PMMO 的 API 中。

配置层(server_scripts/

通过 KubeJS 事件编辑 PMMO 的配置文件:

事件控制内容
PmmoJS.skillsConfig(...)添加、替换或删除技能
PmmoJS.perksConfig(...)编辑 PMMO 配置中的已有 Perk 条目
PmmoJS.serverConfig(...)服务器级设置,如最大等级、矿脉挖掘、死亡惩罚
PmmoJS.autoValueConfig(...)方块和物品的自动生成值
PmmoJS.antiCheeseConfig(...)AFK 检测和收益递减
PmmoJS.globalsConfig(...)全局 NBT 路径和常量
PmmoJS.settings(...)物品、方块、实体、生物群系和维度的需求与经验数据

运行时层(server_scripts/

在实际游戏过程中触发的钩子:

事件触发时机
PmmoJS.trigger(EventType, ...)PMMO 触发器事件(挖掘、合成、伤害、跳跃等)
PmmoJS.internal(PMMOInternalType, ...)PMMO 处理器级钩子(登录、跨维度、爆炸、酿造)
PmmoJS.xp(...)玩家获得 PMMO 经验时
PmmoJS.enchant(...)玩家附魔物品时
PmmoJS.furnace(...)熔炉烧炼时
PmmoJS.salvage(...)玩家回收物品时
PmmoJS.itemstackDamagePenalty(...)调整物品耐久损耗
PmmoJS.entityDamagePenalty(...)调整实体伤害

脚本绑定

PmmoJS 会为你的 KubeJS 脚本注册以下绑定,可用的绑定取决于你在哪个脚本类型中:

启动脚本: PmmoHelperTagBuilderNbtPathBuilder

服务端脚本: PmmoHelperSkillHelperSKillHelperCustomReqMapTagBuilderNbtPathBuilderSalvageBuilder

客户端脚本: SkillHelperSKillHelper(仅限只读访问技能数据)

PmmoHelper

PmmoHelper 是主要的工具类。它将 PMMO 的内部 API 封装为清晰的静态方法:

  • 技能状态: getSkillLevelsetSkillLeveladdSkillXpgetAllSkillLevels
  • 数据查询: getItemXpAwardsgetBlockRequirementsgetConsolidatedModifiers
  • 直接注册: registerRequirementDataregisterXpAwardDataregisterBonusDataregisterTriggerListener
  • 队伍系统: getPartyMembersgetPartyMembersInRangeinviteToParty
  • 矿脉挖掘: applyVeinMiningregenerateVeinChargegetCurrentVeinCharge
  • 类型发现: getTriggerTypeIdsgetInternalTypeIdsgetEventTypeIdsgetReqTypeIdsgetObjectTypeIds

类型枚举

PmmoJS 同时暴露 PMMO 的类型枚举,让你对每个值都有自动补全:

  • EventType —— PMMO 事件类型名称(如 BLOCK_BREAKCRAFTDEATH
  • PMMOInternalType —— 内部钩子类型 ID(如 DIMENSION_TRAVELLOGIN
  • ReqType —— 需求类型名称(如 WEAPONTOOLKILL
  • ObjectType —— 对象类型名称(如 ITEMBLOCKENTITY
  • ModifierDataType —— 修正数据类型(如 BIOMEHELDWORN
  • PMMOPerkSide —— SERVERCLIENTBOTH

版本兼容

组件版本
Minecraft1.20.1
Project MMO1.7.40
KubeJS2001.6.5-build.16+
ProbeJS(可选)v6 或 v7(Legacy)

何时用启动脚本 vs 服务端脚本

这是最容易混淆的地方。规则很简单:

  • 启动脚本 在世界加载前运行。用于必须在加载时存在的定义和注册。
  • 服务端脚本 在世界加载后运行。用于任何响应游戏事件或需要在重载周期中修改配置的逻辑。

把运行时逻辑放在启动脚本里会失败。把注册逻辑放在服务端脚本里可能可以运行,但这并不是正确的生命周期。