https://github.com/prismarinejs/prismarine-physics
Provide the physics engine for minecraft entities
https://github.com/prismarinejs/prismarine-physics
minecraft physics-engine prismarinejs
Last synced: 2 months ago
JSON representation
Provide the physics engine for minecraft entities
- Host: GitHub
- URL: https://github.com/prismarinejs/prismarine-physics
- Owner: PrismarineJS
- License: mit
- Created: 2020-07-05T15:58:38.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2025-01-26T21:54:17.000Z (over 1 year ago)
- Last Synced: 2025-06-28T11:48:28.037Z (12 months ago)
- Topics: minecraft, physics-engine, prismarinejs
- Language: JavaScript
- Homepage:
- Size: 90.8 KB
- Stars: 35
- Watchers: 4
- Forks: 40
- Open Issues: 16
-
Metadata Files:
- Readme: README.md
- Changelog: HISTORY.md
- License: LICENSE
Awesome Lists containing this project
README
# prismarine-physics
[](http://npmjs.com/package/prismarine-physics)
[](https://github.com/PrismarineJS/prismarine-physics/actions?query=workflow%3A%22CI%22)
[](https://discord.gg/GsEFRM8)
[](https://gitter.im/PrismarineJS/general)
[](https://irc.gitter.im/)
[](https://gitpod.io/#https://github.com/PrismarineJS/prismarine-physics)
Provide the physics engine for minecraft entities
## Usage
```js
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,
elytraFlying: false,
yaw: 0,
pitch: 0
},
jumpTicks: 0,
jumpQueued: false,
fireworkRocketDuration: 0
}
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 ?
- elytraFlying : (boolean) is the player elytra flying ?
- 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
- fireworkRocketDuration : (number) how many ticks of firework boost are remaining ?
Read only properties:
- yaw : (float) the yaw angle, in radians, of the player entity
- pitch: (float) the pitch angle, in radians, of the player entity
- control : (object) control states vector with properties:
- forward
- back
- left
- right
- jump
- sprint
- sneak