prismarine-physics

    1.3.0 • Public • Published

    prismarine-physics

    NPM version Build Status Discord Gitter Irc

    Try it on gitpod

    Provide the physics engine for minecraft entities

    Usage

    const { Physics, PlayerState } = require('prismarine-physics')
    const { Vec3 } = require('vec3')
    
    const mcData = require('minecraft-data')('1.13.2')
    const Block = require('prismarine-block')('1.13.2')
    
    const physics = Physics(mcData, world)
    const controls = {
      forward: false,
      back: false,
      left: false,
      right: false,
      jump: false,
      sprint: false,
      sneak: false
    }
    const player = {
        entity: {
          position: pos,
          velocity: new Vec3(0, 0, 0),
          onGround: false,
          isInWater: false,
          isInLava: false,
          isInWeb: false,
          isCollidedHorizontally: false,
          isCollidedVertically: false,
          yaw: 0
        },
        jumpTicks: 0,
        jumpQueued: false
      }
    const playerState = new PlayerState(player, controls)
    
    while (!player.entity.onGround) {
      // simulate 1 tick of player physic, then apply the result to the player
      physics.simulatePlayer(playerState, world).apply(player)
    }

    See examples/ for more.

    API

    Physics

    simulatePlayer(playerState, world)

    • playerState : instance of the PlayerState class
    • world : interface with a function getBlock(position) returning the prismarine-block at the given position

    PlayerState

    A player state is an object containing the properties:

    Read / Write properties:

    • pos : position (vec3) of the player entity
    • vel : velocity (vec3) of the player entity
    • onGround : (boolean) is the player touching ground ?
    • isInWater : (boolean) is the player in water ?
    • isInLava : (boolean) is the player in lava ?
    • isInWeb : (boolean) is the player in a web ?
    • isCollidedHorizontally : (boolean) is the player collided horizontally with a solid block ?
    • isCollidedVertically : (boolean) is the player collided vertically with a solid block ?
    • jumpTicks : (integer) number of ticks before the player can auto-jump again
    • jumpQueued : (boolean) true if the jump control state was true between the last tick and the current one

    Read only properties:

    • yaw : (float) the yaw angle, in radians, of the player entity
    • control : (object) control states vector with properties:
      • forward
      • back
      • left
      • right
      • jump
      • sprint
      • sneak

    Install

    npm i prismarine-physics

    DownloadsWeekly Downloads

    4,319

    Version

    1.3.0

    License

    MIT

    Unpacked Size

    37.6 kB

    Total Files

    20

    Last publish

    Collaborators

    • rom1504