这些钩子让你在 server_scripts/ 中用 JavaScript 调整 PMMO 配置,而不是手动编辑 TOML 文件。
设置干净基线
在 KubeJS 配置事件运行之前,PmmoJS 可以通过 Forge 通用配置文件 config/pmmojs-common.toml 清除 PMMO 的内置默认值:
[disableDefaultSettings]all = falseskills = falseperks = falserequirements = falsexpAwards = falseitemExtras = falseblockVeinData = false
执行顺序保证你的脚本始终生效:
- PmmoJS 读取
pmmojs-common.toml - 启用的类别清除 PMMO 的默认数据
- 你的
PmmoJS.skillsConfig和PmmoJS.settings调用应用你的自定义数据
PmmoJS.skillsConfig
添加、替换或移除 PMMO 技能。
PmmoJS.skillsConfig(event => {event.addSkill('defense').withColor(0x2f6fed).withMaxLevel(100).withIconSize(18).build()event.removeDefaultSkill('swimming')})
如果你在同一个趟次中移除并重新添加同一个技能,你的自定义定义会生效。
PmmoJS.perksConfig
编辑已有的 PMMO Perk 条目。用于配置 PMMO 自带的 Perk 或你在启动时注册的 Perk。
PmmoJS.perksConfig(event => {event.clearPerks(EventType.SKILL_UP) // 清除所有 SKILL_UP 的 Perkevent.removePerkType('pmmo:fireworks') // 按 ID 移除特定 Perk})
核心方法:
addPerk(eventType, perkId, skill)—— 添加新的 Perk 条目clearPerks(eventType)—— 删除某个事件类型下的所有 PerkremovePerkType(perkId)—— 删除所有匹配的 Perk ID 条目removePerk(tag)—— 删除同时匹配 Perk ID 和技能的条目
调用 addPerk(...) 后,你可以链式调用构建器方法来配置 Perk 条目:
| 方法 | 写入的键 |
|---|---|
withCooldown(ticks) | cooldown |
withChance(value) | chance |
withMinLevel(level) | min_level |
withMaxLevel(level) | max_level |
withPerXLevel(step) | per_x_level |
withMilestones(values) | milestones |
withString(key, value)、withBool(key, value)、withInt(key, value) 等 | 自定义标量键 |
专用 Perk 构建器
PMMO 有若干内置 Perk 类型。PmmoJS 为每种提供了专用的构建器方法:
| 构建器方法 | 配置内容 | 重要键 |
|---|---|---|
asAttributePerk() | 永久属性加成 | attribute、multiplicative、max_boost、per_level、base |
asTempAttributePerk() | 临时属性加成 | 同上 + duration |
asDamageBoostPerk() | 伤害加成 | applies_to、for_damage + 加成键 |
asDamageReducePerk() | 伤害减免 | for_damage + 加成键 |
asBreakSpeedPerk() | 挖掘速度 | pickaxe_dig、axe_dig、shovel_dig 等 |
asEffectPerk() | 药水效果 | effect、duration、modifier、ambient、visible |
asCommandPerk() | 执行命令 | command、function |
asFireworksPerk() | 烟花展示 | colors |
asJumpBoostPerk() | 跳跃高度加成 | max_boost、per_level、base |
asBreathPerk() | 呼吸时间加成 | max_boost、per_level、base |
asVillagerBoostPerk() | 村民交易加成 | max_boost、per_level、base |
asTameBoostPerk() | 驯服加成 | max_boost、per_level、base |
使用专用构建器的完整示例:
PmmoJS.perksConfig(event => {event.addPerk(EventType.SKILL_UP, 'pmmo:attribute', 'endurance').asAttributePerk().withAttribute(Java.loadClass('net.minecraft.world.entity.ai.attributes.Attributes').MAX_HEALTH).withPerLevel(1).withMaxBoost(10).build()})
PmmoJS.serverConfig
调整 PMMO 的服务器级设置。
PmmoJS.serverConfig(event => {event.setMaxLevel(100).setGlobalModifier(1.0).setUseExponentialFormula(true).setTreasureEnabled(true)event.addSkillModifier('defense', 1.1)event.addJumpXp('agility', 0.5)event.addPartyBonus('charisma', 0.1)})
PmmoJS.autoValueConfig
覆盖 PMMO 对方块和物品自动生成数值的方式。
PmmoJS.autoValueConfig(event => {event.setAutoValuesEnabled(true).setRaritiesModifier(1.5).setHardnessModifier(2.0)event.addItemXpAward(EventType.CRAFT, 'smithing', 25)event.addBlockReq(ReqType.BREAK, 'mining', 5)event.setAxeOverride({woodcutting: 15,})})
PmmoJS.antiCheeseConfig
配置 AFK 检测、收益递减和 XP 标准化。
PmmoJS.antiCheeseConfig(event => {event.setAfkCanSubtract(false)event.addAfkSetting(EventType.BLOCK_BREAK).minTime(600).reduction(0.1).cooloff(5).tolerance(3.0).strictTolerance(true).build()})
PmmoJS.globalsConfig
管理 PMMO 的全局 NBT 路径和常量。
PmmoJS.globalsConfig(event => {event.addPath('durability', 'Damage')event.addConstant('MAX_SKILL_LEVEL', '100')event.removePath('old_path')event.removeConstant('OLD_CONSTANT')})
这些配置钩子通过服务器重载路径应用,因此与 PMMO 的配置重载和 EMI tag 同步兼容。