67 lines
1.5 KiB
JavaScript
67 lines
1.5 KiB
JavaScript
/* eslint-env mocha */
|
|
|
|
const { Physics, PlayerState } = require('prismarine-physics')
|
|
const { Vec3 } = require('vec3')
|
|
const expect = require('expect')
|
|
|
|
const mcData = require('minecraft-data')('1.13.2')
|
|
const Block = require('prismarine-block')('1.13.2')
|
|
|
|
const fakeWorld = {
|
|
getBlock: (pos) => {
|
|
const type = (pos.y < 60) ? mcData.blocksByName.stone.id : mcData.blocksByName.air.id
|
|
const b = new Block(type, 0, 0)
|
|
b.position = pos
|
|
return b
|
|
}
|
|
}
|
|
|
|
function fakePlayer (pos) {
|
|
return {
|
|
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,
|
|
effects: {}
|
|
},
|
|
jumpTicks: 0,
|
|
jumpQueued: false,
|
|
fireworkRocketDuration: 0,
|
|
version: '1.13.2',
|
|
inventory: {
|
|
slots: []
|
|
}
|
|
}
|
|
}
|
|
|
|
describe('Basic tests', () => {
|
|
it('Gravity test', () => {
|
|
const physics = Physics(mcData, fakeWorld)
|
|
const controls = {
|
|
forward: false,
|
|
back: false,
|
|
left: false,
|
|
right: false,
|
|
jump: false,
|
|
sprint: false,
|
|
sneak: false
|
|
}
|
|
const player = fakePlayer(new Vec3(0, 80, 0))
|
|
const playerState = new PlayerState(player, controls)
|
|
|
|
while (!player.entity.onGround) {
|
|
physics.simulatePlayer(playerState, fakeWorld).apply(player)
|
|
}
|
|
|
|
expect(player.entity.position).toEqual(new Vec3(0, 60, 0))
|
|
})
|
|
})
|