Skip to content
Contractsv1.9.0

Player Movement

⭐ Premium

Progress counts only when the player is moving in one of the specified ways at the instant of the action.

{
"type": "PlayerMovement",
"states": ["OnFoot", "Sprinting"]
}
FieldTypeDescription
typestringExactly 'PlayerMovement'
statesenum[]: OnFoot | Swimming | Falling | Sprinting | Ducking | OnLadderMovement states the player can be in. One of: OnFoot, Swimming, Falling, Sprinting, Ducking, OnLadder. Matching any listed state is enough. States overlap rather than exclude each other: a sprinting player is also OnFoot, and a ducking player on the ground is both Ducking and OnFoot. At least one entry is required, and an empty list is invalid.
  • OnFoot: grounded, unmounted, and not swimming.
  • Swimming: in water deep enough to swim.
  • Falling: airborne and descending. Off the ground with no support and moving downward. A rising jump is not falling, but the falling part of a jump may count in some situations (e.g: unleveled ground).
  • Sprinting: running at full speed.
  • Ducking: crouched.
  • OnLadder: climbing a ladder.

States overlap rather than exclude each other: a sprinting player is also OnFoot, and a crouched player on the ground is both Ducking and OnFoot. Listing several states means any one of them is enough. To demand exclusivity, combine with Not: “on foot but not sprinting” is two conditions: 1 PlayerMovement condition with OnFoot + 1 Not condition with a Sprinting movement condition.

  • A mounted player is in no movement state. Riding a horse, sitting in a vehicle, or hanging from a deployed parachute never satisfies this condition. For “while mounted” rules, use the Player Mount condition instead. The two compose cleanly: “by horse” is Player Mount, “on foot” is Player Movement, and they never both match.
  • A player standing on the deck of a moving vessel is grounded and unmounted, so they read as OnFoot even though the boat is doing the traveling.
  • The list must have at least one entry. An empty list would match nothing useful, so it is invalid and the contract will not load.

Travel 500 meters on foot:

{
"type": "Travel",
"amountRequired": 500,
"conditions": {
"on_foot": {
"type": "PlayerMovement",
"states": ["OnFoot"]
}
}
}

Kill 3 players while falling:

{
"type": "Kill",
"amountRequired": 3,
"entities": ["player"],
"conditions": {
"while_falling": {
"type": "PlayerMovement",
"states": ["Falling"]
}
}
}