Skip to content

Players

Quick Start: Spice it up with twists.

Live body reads: state, blocks, slots, titles, movement, and inventory. The one-line forms live in the cheatsheet. Twins: every <p*> tag below also ships <r*> (one role) and <g*> (everyone) twins; see Role and global twins.

Tag Meaning
<random-hunter> One random hunter in this match (null with no hunters).
<random-runner> One random speedrunner in this match (null with no speedrunners).
<pstate:player,state> true/false for SNEAK, SPRINT, GLIDE, SWIM, GROUND, IDLE.
<plos:player,target,maxdist,maxangle> paid true when the target is in line of sight.
<pstandingon:player> Upper-case block below the feet (AIR over void).
<pblock:player,type> Lower-case block id at under (default), feet, or head.
<pismoving:player> true when the player moved since this modifier last checked.
<pisusinghanditem:player,item> paid true while the player holds an item in use.
<premoveitem:player,item,count> Remove count when held (default 1), true/false, all-or-nothing.
<give:player,item> Deliver stacks (overflow drops), empty on success and null on failure.
<pdamage:player,amount,by,type> Deal damage, empty (attacker and type optional).
<pexp.get:player> Vanilla experience levels, never raw xp (p-only, no twins).
<pexp.add:player,levels> Add whole levels, empty (p-only, no twins).
<pexp.remove:player,levels> Remove whole levels, flooring at zero, empty (p-only, no twins).
<kill:player,by,force> Kill through the damage path, empty on success and null on failure (killer and force optional).
<puuid:player> Mojang id as four ints in NBT int-array order.
<ptitle:player,title,sub,...> Center title, empty (optional stay, in, out seconds).
<pslot:player,slot> paid Get [MATERIAL, qty], null when empty.
<pslot:player,slot,item> paid Set from [material, qty] or bare material, empty.
<clearslot:player,slot> paid Empty one slot, empty.
<itemtag:player,slot> paid Unprefixed JMH tag, null when none.
<pstat:player,key[,qualifier]> One player's stat: match keys plus vanilla stats, see Stats.
<pghost.enter:player,id,loc,ymode?> paid Open a ghost: decoy at the player, ridden anchor at the loc, optional WORLD/CAMERA lift, empty.
<pghost.exit:id> paid Close a ghost, firing ON_PGHOST_EXIT, empty.
<pghost.control:id,movement,smoothness?> paid Steer a ghost anchor, empty (smoothness 0..1, default 0.3).
<pisghost:player> paid true/false ghost state (null offline).
<pshapeshift.mob:player,abilities-off?,prompt-seconds?,hold-seconds?> paid Prompt the pending mob shift, empty (optional true lands without abilities; optional prompt and hold windows in seconds).
<pshapeshift.exit:player> paid Exit a shift now, firing ON_SHAPESHIFT_EXIT, empty (silent when unshifted).

<plos:player,target,maxdist,maxangle> reads 3D line of sight: true when the target's head point sits within maxdist blocks (default 180), within maxangle degrees of the player's look direction (default 90, clamped to 0..180), and reachable by an unblocked block+player ray from the eye. The head point is feet plus 1.5 blocks (1.35 while sneaking). Angles below 90 calibrate at 8 blocks: the authored angle holds exactly 8 blocks out, and scales nearer and farther so the same lateral offset passes at any range (a 10 degree cone reads about 1 degree at 80 blocks). Angles of 90 and above compare raw. Checks run cheap-first (dimension, distance, angle) with the raycast last. Offline, unknown, or cross-dimension players resolve null silently.

<pstate:player,state> reads the live body: SNEAK, SPRINT, GLIDE, SWIM, or GROUND (any case), true or false. IDLE reads true when the player did not move since this modifier's own last check: the inverted twin of <pismoving>. Both share and advance one baseline per modifier, so a tick should read only one of them (a second movement read in the same tick always sees no movement). Unknown states warn, list the valid names, and yield null; offline or unknown players resolve null silently. <pstandingon:player> reports the upper-case material below the feet (AIR over the void), silent null when offline. <pblock:player,type> reports the lower-case block id (dirt, oak_slab, no namespace) at under (below the feet, air over the void), feet, or head (the eye block); the type is optional and defaults to under. Unknown types warn, list the valid names, and yield null; offline or unknown players resolve null silently. <pisusinghanditem:player,item> reads true while the player holds an item in use (either hand): drawing a bow, loading a crossbow, blocking with a shield, zooming a spyglass, eating, drinking, and kin. The optional item filters to one material (spyglass, crossbow, minecraft:bow); omitted or blank means any item. Instant-use items such as fishing rods, thrown pearls, or placed blocks never hold use state, so they warn as never usable instead of reading true. Unknown materials warn too; offline players resolve null silently. <puuid:player> reports the Mojang id as four ints in NBT int-array order, silent null when offline, so Owner:[I;<list.join:<puuid:Steve>,",">] renders an NBT owner. <pstat:player,exp-level> reads the vanilla experience level.

<ptitle:player,title,subtitle,stay,in,out> sends a center-screen title; the timings are seconds in written order (stay, fade in, fade out: never Paper order), trailing args may be omitted, and defaults are stay 2.0, in 0.4, out 0.4. Seconds convert to ticks through the engine converter (0.05s per tick, minimum one tick). Title and subtitle parse like message text (MiniMessage plus legacy codes); blank parts are allowed. Bad timing warns plus null with nothing sent, as does an offline player; success returns empty.

<pslot:player,slot> gets [MATERIAL, qty], with null for an empty slot or an offline player. <pslot:player,slot,newitem> sets unconditionally and returns empty. Slots name equipment (mainhand, offhand, helmet, chestplate, leggings, boots, any case) or address the raw player inventory by index: 0-8 hotbar, 9-35 main storage, 36-39 armor, 40 offhand. A [material, qty] list sets both, a bare material sets qty 1; materials match case-blind, qty clamps silently to 1 through the max stack, and anything invalid (unknown slot or material, non-integer qty, bad index) warns plus null with no change.

<clearslot:player,slot> empties one slot, using the same slot addresses as <pslot> (equipment names or raw indices 0-40), and yields empty. Blank players, bad slots, and offline players warn plus null with nothing cleared.

<itemtag:player,slot> reads the unprefixed JMH tag behind one slot, using the same slot addresses as <pslot>. Empty slots, offline players, and untagged items read null quietly; only a blank player or a bad slot warns. See JMH item data for writing tags.

<pismoving:player> reads movement since this modifier's own last check: the first check seeds the baseline and reads false, later checks read true when the spot (exact coords or world) changed. Each modifier keeps its own baseline per player, so two modifiers polling at different rates never steal each other's checks; rotation alone never counts, and offline or unknown players resolve null silently. Baselines clear at match end. <pstate:player,IDLE> inverts this same baseline (stillness instead of motion) and advances it too, so one tick reads either <pismoving> or IDLE, never both. Evaluate once per poll and reuse the answer through <lf:>: every evaluation moves the baseline forward:

- '<lf:moved,<pismoving:<p>>>'
- '<if:"<lf:moved> == true","<pf:hold-<id>,0>">'
- '<if:"<lf:moved> == true","exit">'

<premoveitem:player,item,count> removes count of the material from the player's storage (hotbar plus main inventory, the same population <phasitem> counts), all-or-nothing: when fewer are held nothing changes. The count defaults to 1. It yields true when items left the inventory, false when too few are held, the player is offline, or the material is unknown; misuse (blank player or item, a count below 1) warns plus null. Materials match case-blind with an optional minecraft: prefix:

- '<if:"<premoveitem:<p>,GOLD_INGOT,3> == true","say Toll paid!">'

<pdamage:player,amount,by,type> deals amount damage to the player in health points (20 is ten hearts; whole numbers convert implicitly). The attacker is optional: omitted or blank means no attacker, and a name outside the match silently drops to no attacker too, so kills credit only real match players. The type is optional and defaults to arrow; names match case-blind with an optional minecraft: prefix (dragon_breath, minecraft:campfire, and registered datapack namespace:key forms). It yields empty on success; misuse (a blank player, a non-numeric or negative amount, an unknown type) and offline players warn plus null with nothing dealt. Unlike <run:damage ...>, the call never depends on vanilla command syntax:

- '<pdamage:Alex,6,Steve>'

<kill:Steve,Alex> kills Steve through the engine damage path, so stats, teams, and killstreaks credit Alex exactly like a natural kill. The killer is optional (omitted kills read environmental), and the force flag is optional too, default false: without it one lethal hit lands and totems save, with it (<kill:Steve,Alex,true>) the hits repeat past totem pops. Offline victims warn plus null; an offline killer degrades to environmental with a warning.

<give:Steve,[diamond, 3]> delivers three diamonds to one online player and yields empty. The payload is one [material, qty] pair or a nested list of pairs, safer than vanilla give (no command syntax to quote); unknown materials warn and skip. Stacks that do not fit drop naturally at the player's feet. Offline players warn plus null with nothing delivered, and the tag names its player, so it works in any list, console included:

- '<give:<p>,[[iron_sword, 1], [bread, 16]]>'

<pghost.enter:Steve,drone,[0, 64, 0, world]> detaches Steve into a ghost: a mannequin decoy with their skin stays at their exact spot and rotation (crouching players leave a crouching decoy with no nameplate, everyone else leaves a standing decoy named in the role color), wearing copies of their armor and holding copies of their hand items, while Steve rides a cinematic anchor at the loc as its passenger. The anchor entity sits one eye height below the loc, so the ridden view lands exactly on it. There are no body teleports: the rider follows the anchor exactly, so look packets flow and pose reads (<ploc>, <pdir>, line of sight, and the rest) track the drone with a live look, and the anchor copies that look every tick. Sneak descends without dismounting, clicks never glue the camera to an entity, spectator-menu teleports are rejected, and WASD never fights the drone (a ridden anchor ignores movement input). <pghost.control:drone,[0, 0, 1],0.3> steers the anchor toward that blocks-per-tick velocity in look-relative space (forward follows the gaze, strafe stays level, lift stays vertical; smoothness 0 answers instantly, 1 glides the slowest, eased in world space so turns keep their momentum). An optional fourth enter arg picks the lift axis: WORLD (default) keeps lift vertical, CAMERA lifts along the gaze tilt, so vertical input steers with the look the way the other axes already do. The ghost exits instantly on block collisions and living or projectile hits (projectiles scan the roomier ghost-touch box, so arrows and thrown shots can down a drone the small collider would let through), and two ghosts whose bounds touch exit together. Spectators and lobby idlers never break a ghost: their bodies and their shots pass through, and damage they cause to the decoy is swallowed without mirroring. Any other damage to the decoy mirrors onto the player in full (armor-piercing, same attacker) and exits too, as do quits, leaves, and teleports. While ghosted, hunter compasses track your frozen last-seen spot with the away reason instead of the live drone. <pghost.exit:drone> closes the ghost by id: the decoy vanishes, the body comes home to the decoy spot (the anchor when the decoy is already gone) keeping its look, the gamemode restores, and ON_PGHOST_EXIT fires with the player, the id, the damage taken, the exit reason, its detail, the shooter name, and the colliding entity's location (match-end exits stay silent; see event args for the reason values). Entering while a cinematic camera holds the player is unsupported: the two systems fight over the same body. While ghosted, the rider is exempt from GrimAC checks when GrimAC is installed (a session-scoped grim.exempt grant, lifted on every exit); without GrimAC nothing changes.

- '<pghost.enter:<p>,drone,[<px:<p>>,100,<pz:<p>>,<pworld:<p>>]>'
- '<pghost.control:drone,<vec.mult:<args:2>,2>,0.3>'

<pshapeshift.mob:Steve> prompts Steve to become their pending mob: the last living mob they killed, stored per player on every ON_MOB_KILLED (that trigger's <args:0> carries the same name, so custom prompts can read it too). The engine message names the mob and opens the sneak-jump window (10 seconds by default; the optional third arg retunes it per call, clamped to 1..60 seconds). Sneaking with the jump key held inside the window starts the hold (3 seconds by default; the optional fourth arg retunes it per call, same clamp); a hold started inside the window always completes, even past the window end. Landing cloaks the body (endless iconless invisibility plus hiding from every viewer, damage unaffected) and spawns a view-mob that follows the player's spot and look every tick, across dimensions, with no AI awareness. Non-living types and the ender dragon refuse with one console warning per match per type, as do unknown mob types (which shift with no abilities); no pending mob, a ghosted player, or an already shifted player warns and no-ops instead. An optional true second arg lands without per-mob abilities. While shifted, damage to the view-mob cancels, routes onto the player with its source, and echoes onto the mob for feedback (near-infinite mob health, so the echo never kills it), and knockback to the mob lands on the player instead. The mob mirrors sneak, swim, glide, and sneak-driven sitting where the platform allows (sprinting and walking have no mob API); invisibility bonuses apply to the mob, every other effect applies to the player, all with no particles and no icon, on cycles and loot intervals that reset on every shift (see shapeshift/abilities.yml). Mundane mobs (pig, cow, chicken) shift with empty kits and no warning. <pshapeshift.exit:Steve> exits the shift now, firing ON_SHAPESHIFT_EXIT with the player, the mob, and the reason (MANUAL for the tag, COMBO for the exit hold, DEATH, QUIT, or MOB_LOST); unshifted players exit silently. Shifted players can also sneak with the jump key held (no prompt needed) to start the exit hold (same duration), and death, quit, or mob loss exits the same way (the mob drops silently and lootlessly while the player drops theirs). Match-end exits stay silent.

- '<pshapeshift.mob:<p>>'
- '<pshapeshift.exit:<p>>'

Next Steps