PmmoJS is a KubeJS addon for Project MMO on Forge 1.20.1.
It wraps PMMO's API as KubeJS events and helpers. Scripts can define skills, requirements, XP awards, perks, triggers, and handler behavior from JavaScript.
ProbeJS 集成为 PmmoJS 事件、工具类和 PMMO 枚举值生成类型补全与代码片段。
If you are building pack progression from scratch, read PMMO Authoring Workflow before the API pages. It shows the normal order: define skills, choose a reset baseline, register object data, add NBT rules, configure perks, then use runtime hooks for exceptions.
Control layers
PmmoJS organizes its features into three layers, matching the KubeJS script types:
Startup layer (startup_scripts/)
Startup scripts register data before the game world loads:
- Custom perks — define new perk types with
PmmoJS.registerPerk(...). Each perk gets lifecycle callbacks for conditions checking, startup, ticking, shutdown, and status display. - Custom predicates — register condition checks that PMMO evaluates using
PmmoJS.registerPredicate(...). - Direct data registration — use
PmmoHelperto register requirement data, XP awards, bonuses, and trigger listeners directly into PMMO's API.
Config layer (server_scripts/)
Server scripts edit PMMO configuration through KubeJS events:
| Event | What it controls |
|---|---|
PmmoJS.skillsConfig(...) | Add, replace, or remove skills |
PmmoJS.perksConfig(...) | Edit existing perk entries in PMMO's config |
PmmoJS.serverConfig(...) | Server-level settings like max level, vein mining, death loss |
PmmoJS.autoValueConfig(...) | Auto-generated values for blocks and items |
PmmoJS.antiCheeseConfig(...) | AFK detection and diminishing returns |
PmmoJS.globalsConfig(...) | Global NBT paths and constants |
PmmoJS.settings(...) | Item, block, entity, biome, and dimension requirements and XP data |
Runtime layer (server_scripts/)
Runtime hooks fire during gameplay:
| Event | When it fires |
|---|---|
PmmoJS.trigger(EventType, ...) | PMMO trigger events (block break, crafting, damage, jumping, etc.) |
PmmoJS.internal(PMMOInternalType, ...) | PMMO handler-level hooks (login, dimension travel, explosions, brewing) |
PmmoJS.xp(...) | When a player gains PMMO XP |
PmmoJS.enchant(...) | When a player enchants an item |
PmmoJS.furnace(...) | When a furnace smelts |
PmmoJS.salvage(...) | When a player salvages an item |
PmmoJS.itemstackDamagePenalty(...) | Scaling item durability loss from PMMO |
PmmoJS.entityDamagePenalty(...) | Scaling entity damage from PMMO |
Script bindings
PmmoJS registers bindings by script type:
Startup scripts: PmmoHelper, TagBuilder, NbtPathBuilder
Server scripts: PmmoHelper, SkillHelper, SKillHelper, CustomReqMap, TagBuilder, NbtPathBuilder, SalvageBuilder
Client scripts: SkillHelper, SKillHelper (read-only access to skill data)
PmmoHelper
PmmoHelper exposes PMMO API access through static methods:
- Skill state:
getSkillLevel,setSkillLevel,addSkillXp,getAllSkillLevels - Data lookups:
getItemXpAwards,getBlockRequirements,getConsolidatedModifiers - Direct registration:
registerRequirementData,registerXpAwardData,registerBonusData,registerTriggerListener - Party system:
getPartyMembers,getPartyMembersInRange,inviteToParty - Vein mining:
applyVeinMining,regenerateVeinCharge,getCurrentVeinCharge - Type discovery:
getTriggerTypeIds,getInternalTypeIds,getEventTypeIds,getReqTypeIds,getObjectTypeIds
Type enums
PmmoJS exposes PMMO type enums for script constants:
EventType— PMMO event type names (e.g.,BLOCK_BREAK,CRAFT,DEATH)PMMOInternalType— internal hook type IDs (e.g.,DIMENSION_TRAVEL,LOGIN)ReqType— requirement type names (e.g.,WEAPON,TOOL,KILL)ObjectType— object type names (e.g.,ITEM,BLOCK,ENTITY)ModifierDataType— modifier data categories (e.g.,BIOME,HELD,WORN)PMMOPerkSide—SERVER,CLIENT, orBOTH
Version compatibility
| Component | Version |
|---|---|
| Minecraft | 1.20.1 |
| Project MMO | 1.7.40 |
| KubeJS | 2001.6.5-build.16+ |
| ProbeJS(可选) | ProbeJS 或 ProbeJS Legacy |
PmmoJS 分别支持 ProbeJS 和 ProbeJS Legacy。整合包只需要加载其中一个 ProbeJS 变体,然后运行 /probejs dump 生成编辑器类型。
Startup and server scripts
Startup scripts run before the world loads. They hold definitions and registrations that must exist at load time.
Server scripts run after the world loads and on reload. They hold gameplay reactions and config changes.
Runtime logic does not belong in startup scripts. Registration logic belongs in startup scripts unless a specific PmmoJS server event is documented for reload-time data mutation.