LogoKubeJS PMMO

启动注册

启动事件注册 PMMO 在游戏开始之前需要的结构。这些属于 startup_scripts/,不是 server_scripts/

什么放在哪里

放在 startup_scripts/ 中:

  • PmmoJS.registerPredicate(...) —— 自定义需求谓词
  • PmmoJS.registerPerk(...) —— 新 Perk 类型定义
  • PmmoHelper.registerRequirementData(...) —— 直接 PMMO 数据注册
  • PmmoHelper.registerXpAwardData(...) —— 直接 XP 奖励注册
  • PmmoHelper.registerTriggerListener(...) —— 直接触发器监听器注册
  • ForgeEvents.onEvent(...) —— 原始 Forge 事件监听器

放在 server_scripts/ 中:

  • PmmoJS.trigger(...)PmmoJS.internal(...) —— 运行时钩子
  • 所有配置事件 —— PmmoJS.skillsConfig(...)PmmoJS.perksConfig(...)
  • PmmoJS.settings(...) —— 物品/方块/实体数据
  • ProbeJSEvents.generateDoc(...) —— ProbeJS 文档生成

PmmoJS.registerPredicate

注册 PMMO 在需求检查期间评估的自定义谓词。提供三种方法:

  • registerActionPredicate(resourceId, reqType, predicate) —— 用于物品操作
  • registerBreakPredicate(resourceId, reqType, predicate) —— 用于方块破坏
  • registerEntityPredicate(resourceId, reqType, predicate) —— 用于实体交互

每个谓词接收当前 Player 和相关目标对象。

PmmoJS.registerPredicate(event => {
event.registerActionPredicate(
PmmoHelper.id('minecraft:stick'),
ReqType.WEAPON,
(player, stack) => player.experienceLevel >= 5
)
})

PmmoJS.registerPerk

定义新的 PMMO Perk 类型。这是用于创建带生命周期回调的自定义 Perk 的重量级 API。

参见 Perk 注册 获取完整指南。

直接 PMMO 注册

PmmoHelperstartup_scripts/ 中可用,用于将数据直接注册进 PMMO 的 API。当你希望精确控制注册内容,而不通过 KubeJS 事件系统时,这很有用。

常用辅助方法:

// 注册需求
PmmoHelper.registerRequirementData(
ObjectType.ITEM, 'minecraft:diamond_pickaxe', ReqType.TOOL,
{ mining: 10, endurance: 4 }, true
)
// 注册 XP 奖励
PmmoHelper.registerXpAwardData(
ObjectType.ITEM, 'minecraft:diamond_pickaxe', EventType.BLOCK_BREAK,
{ mining: 8 }, true
)
// 注册触发器监听器
PmmoHelper.registerTriggerListener('kubejs:example', EventType.BLOCK_BREAK,
(forgeEvent, context) => {
context.putInt('bonus_roll', 1)
context.putBoolean('is_cancelled', false)
return context
}
)

对于上面的直接数据注册方法,最后一个参数(true)告诉 PMMO 替换已有数据而不是与它合并。

Raw trigger listener 返回的 tag 必须包含 is_cancelled;PMMO 会用这个键判断 listener 输出是否有效。普通运行时脚本优先用 PmmoJS.trigger(...)

完整直接注册方法列表:registerRequirementDataregisterXpAwardDataregisterDamageXpAwardDataregisterBonusDataregisterPositiveEffectsregisterNegativeEffectsregisterSalvageDataregisterVeinDataregisterMobModifierDataregisterTriggerListener,以及对应的工具提示注册变体。

原始 Forge 事件

在 KubeJS 1.20.1 上,ForgeEvents.onEvent(...) 是启动脚本 API:

ForgeEvents.onEvent(
'net.minecraftforge.event.entity.player.PlayerEvent$PlayerLoggedInEvent',
event => {
console.info(`[PmmoJS] ${event.getEntity().getScoreboardName()} 已登录`)
}
)

注意:ProbeJSEvents.generateDoc(...) 是服务端脚本 API,不是启动 API。这两个事件系统尽管看起来相似,但有各自不同的生命周期。

相关页面