@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
73 lines (70 loc) • 8.69 kB
JavaScript
import { WorldEvent } from '../packet/WorldEventPacket.es.js';
import { BlockMappings } from '../../block/BlockMappings.es.js';
import Identifiers from '../Identifiers.es.js';
import { PlayerAction } from '../packet/PlayerActionPacket.es.js';
class PlayerActionHandler {
static NetID = Identifiers.PlayerActionPacket;
async handle(packet, server, session) {
const player = session.getPlayer();
const world = player.getWorld();
const block = await world.getBlock(
packet.blockPosition.getX(),
packet.blockPosition.getY(),
packet.blockPosition.getZ()
);
switch (packet.action) {
case PlayerAction.START_BREAK: {
const breakTime = Math.ceil(block.getBreakTime(null, server) * 20);
await world.sendWorldEvent(packet.blockPosition, WorldEvent.BLOCK_START_BREAK, 65535 / breakTime);
return;
}
case PlayerAction.ABORT_BREAK: {
await world.sendWorldEvent(packet.blockPosition, WorldEvent.BLOCK_STOP_BREAK, 0);
return;
}
case PlayerAction.STOP_BREAK: {
return;
}
case PlayerAction.CONTINUE_DESTROY_BLOCK:
case PlayerAction.CREATIVE_PLAYER_DESTROY_BLOCK: {
await world.sendWorldEvent(
packet.blockPosition,
WorldEvent.PARTICLE_DESTROY_BLOCK,
BlockMappings.getRuntimeId(block.getName())
);
return;
}
case PlayerAction.CRACK_BLOCK: {
return;
}
case PlayerAction.RESPAWN: {
return;
}
case PlayerAction.JUMP: {
return;
}
case PlayerAction.START_SPRINT: {
await player.setSprinting(true);
return;
}
case PlayerAction.STOP_SPRINT: {
await player.setSprinting(false);
return;
}
case PlayerAction.START_SNEAK: {
await player.setSneaking(true);
return;
}
case PlayerAction.STOP_SNEAK: {
await player.setSneaking(false);
return;
}
default: {
server.getLogger().verbose(`Unhandled player action: ${packet.action}`);
break;
}
}
}
}
export { PlayerActionHandler as default };
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWVyQWN0aW9uSGFuZGxlci5lcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL25ldHdvcmsvaGFuZGxlci9QbGF5ZXJBY3Rpb25IYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdvcmxkRXZlbnQgfSBmcm9tICcuLi9wYWNrZXQvV29ybGRFdmVudFBhY2tldCc7XG5cbmltcG9ydCB0eXBlIHsgUGxheWVyU2Vzc2lvbiB9IGZyb20gJy4uLy4uLyc7XG5pbXBvcnQgdHlwZSBTZXJ2ZXIgZnJvbSAnLi4vLi4vU2VydmVyJztcbmltcG9ydCB7IEJsb2NrTWFwcGluZ3MgfSBmcm9tICcuLi8uLi9ibG9jay9CbG9ja01hcHBpbmdzJztcbmltcG9ydCBJZGVudGlmaWVycyBmcm9tICcuLi9JZGVudGlmaWVycyc7XG5pbXBvcnQgdHlwZSBQbGF5ZXJBY3Rpb25QYWNrZXQgZnJvbSAnLi4vcGFja2V0L1BsYXllckFjdGlvblBhY2tldCc7XG5pbXBvcnQgeyBQbGF5ZXJBY3Rpb24gfSBmcm9tICcuLi9wYWNrZXQvUGxheWVyQWN0aW9uUGFja2V0JztcbmltcG9ydCB0eXBlIFBhY2tldEhhbmRsZXIgZnJvbSAnLi9QYWNrZXRIYW5kbGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGxheWVyQWN0aW9uSGFuZGxlciBpbXBsZW1lbnRzIFBhY2tldEhhbmRsZXI8UGxheWVyQWN0aW9uUGFja2V0PiB7XG4gICAgcHVibGljIHN0YXRpYyBOZXRJRCA9IElkZW50aWZpZXJzLlBsYXllckFjdGlvblBhY2tldDtcblxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGUocGFja2V0OiBQbGF5ZXJBY3Rpb25QYWNrZXQsIHNlcnZlcjogU2VydmVyLCBzZXNzaW9uOiBQbGF5ZXJTZXNzaW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHBsYXllciA9IHNlc3Npb24uZ2V0UGxheWVyKCk7XG4gICAgICAgIGNvbnN0IHdvcmxkID0gcGxheWVyLmdldFdvcmxkKCk7XG5cbiAgICAgICAgY29uc3QgYmxvY2sgPSBhd2FpdCB3b3JsZC5nZXRCbG9jayhcbiAgICAgICAgICAgIHBhY2tldC5ibG9ja1Bvc2l0aW9uLmdldFgoKSxcbiAgICAgICAgICAgIHBhY2tldC5ibG9ja1Bvc2l0aW9uLmdldFkoKSxcbiAgICAgICAgICAgIHBhY2tldC5ibG9ja1Bvc2l0aW9uLmdldFooKVxuICAgICAgICApO1xuXG4gICAgICAgIHN3aXRjaCAocGFja2V0LmFjdGlvbikge1xuICAgICAgICAgICAgY2FzZSBQbGF5ZXJBY3Rpb24uU1RBUlRfQlJFQUs6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBicmVha1RpbWUgPSBNYXRoLmNlaWwoYmxvY2suZ2V0QnJlYWtUaW1lKG51bGwsIHNlcnZlcikgKiAyMCk7IC8vIFRPRE86IGNhbGN1bGF0ZSB3aXRoIGl0ZW0gaW4gaGFuZFxuXG4gICAgICAgICAgICAgICAgYXdhaXQgd29ybGQuc2VuZFdvcmxkRXZlbnQocGFja2V0LmJsb2NrUG9zaXRpb24sIFdvcmxkRXZlbnQuQkxPQ0tfU1RBUlRfQlJFQUssIDY1NTM1IC8gYnJlYWtUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgUGxheWVyQWN0aW9uLkFCT1JUX0JSRUFLOiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgd29ybGQuc2VuZFdvcmxkRXZlbnQocGFja2V0LmJsb2NrUG9zaXRpb24sIFdvcmxkRXZlbnQuQkxPQ0tfU1RPUF9CUkVBSywgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIFBsYXllckFjdGlvbi5TVE9QX0JSRUFLOiB7XG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlZCBpbiBJbnZlbnRvcnlUcmFuc2FjdGlvbkhhbmRsZXJcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgUGxheWVyQWN0aW9uLkNPTlRJTlVFX0RFU1RST1lfQkxPQ0s6XG4gICAgICAgICAgICBjYXNlIFBsYXllckFjdGlvbi5DUkVBVElWRV9QTEFZRVJfREVTVFJPWV9CTE9DSzoge1xuICAgICAgICAgICAgICAgIGF3YWl0IHdvcmxkLnNlbmRXb3JsZEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBwYWNrZXQuYmxvY2tQb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgV29ybGRFdmVudC5QQVJUSUNMRV9ERVNUUk9ZX0JMT0NLLFxuICAgICAgICAgICAgICAgICAgICBCbG9ja01hcHBpbmdzLmdldFJ1bnRpbWVJZChibG9jay5nZXROYW1lKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgUGxheWVyQWN0aW9uLkNSQUNLX0JMT0NLOiB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIHRoaXMuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIFBsYXllckFjdGlvbi5SRVNQQVdOOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIFBsYXllckFjdGlvbi5KVU1QOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIFBsYXllckFjdGlvbi5TVEFSVF9TUFJJTlQ6IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBwbGF5ZXIuc2V0U3ByaW50aW5nKHRydWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgUGxheWVyQWN0aW9uLlNUT1BfU1BSSU5UOiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcGxheWVyLnNldFNwcmludGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlIFBsYXllckFjdGlvbi5TVEFSVF9TTkVBSzoge1xuICAgICAgICAgICAgICAgIGF3YWl0IHBsYXllci5zZXRTbmVha2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFBsYXllckFjdGlvbi5TVE9QX1NORUFLOiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcGxheWVyLnNldFNuZWFraW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuZ2V0TG9nZ2VyKCkudmVyYm9zZShgVW5oYW5kbGVkIHBsYXllciBhY3Rpb246ICR7cGFja2V0LmFjdGlvbn1gKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVVBLE1BQXFCLG1CQUFpRSxDQUFBO0FBQUEsRUFDbEYsT0FBYyxRQUFRLFdBQVksQ0FBQSxrQkFBQTtBQUFBLEVBRWxDLE1BQWEsTUFBQSxDQUFPLE1BQTRCLEVBQUEsTUFBQSxFQUFnQixPQUF1QyxFQUFBO0FBQ25HLElBQU0sTUFBQSxNQUFBLEdBQVMsUUFBUSxTQUFVLEVBQUE7QUFDakMsSUFBTSxNQUFBLEtBQUEsR0FBUSxPQUFPLFFBQVMsRUFBQTtBQUU5QixJQUFNLE1BQUEsS0FBQSxHQUFRLE1BQU0sS0FBTSxDQUFBLFFBQUE7QUFBQSxNQUN0QixNQUFBLENBQU8sY0FBYyxJQUFLLEVBQUE7QUFBQSxNQUMxQixNQUFBLENBQU8sY0FBYyxJQUFLLEVBQUE7QUFBQSxNQUMxQixNQUFBLENBQU8sY0FBYyxJQUFLO0FBQUEsS0FDOUI7QUFFQSxJQUFBLFFBQVEsT0FBTyxNQUFRO0FBQUEsTUFDbkIsS0FBSyxhQUFhLFdBQWEsRUFBQTtBQUMzQixRQUFNLE1BQUEsU0FBQSxHQUFZLEtBQUssSUFBSyxDQUFBLEtBQUEsQ0FBTSxhQUFhLElBQU0sRUFBQSxNQUFNLElBQUksRUFBRSxDQUFBO0FBRWpFLFFBQUEsTUFBTSxNQUFNLGNBQWUsQ0FBQSxNQUFBLENBQU8sZUFBZSxVQUFXLENBQUEsaUJBQUEsRUFBbUIsUUFBUSxTQUFTLENBQUE7QUFDaEcsUUFBQTtBQUFBO0FBQ0osTUFFQSxLQUFLLGFBQWEsV0FBYSxFQUFBO0FBQzNCLFFBQUEsTUFBTSxNQUFNLGNBQWUsQ0FBQSxNQUFBLENBQU8sYUFBZSxFQUFBLFVBQUEsQ0FBVyxrQkFBa0IsQ0FBQyxDQUFBO0FBQy9FLFFBQUE7QUFBQTtBQUNKLE1BRUEsS0FBSyxhQUFhLFVBQVksRUFBQTtBQUUxQixRQUFBO0FBQUE7QUFDSixNQUVBLEtBQUssWUFBYSxDQUFBLHNCQUFBO0FBQUEsTUFDbEIsS0FBSyxhQUFhLDZCQUErQixFQUFBO0FBQzdDLFFBQUEsTUFBTSxLQUFNLENBQUEsY0FBQTtBQUFBLFVBQ1IsTUFBTyxDQUFBLGFBQUE7QUFBQSxVQUNQLFVBQVcsQ0FBQSxzQkFBQTtBQUFBLFVBQ1gsYUFBYyxDQUFBLFlBQUEsQ0FBYSxLQUFNLENBQUEsT0FBQSxFQUFTO0FBQUEsU0FDOUM7QUFDQSxRQUFBO0FBQUE7QUFDSixNQUVBLEtBQUssYUFBYSxXQUFhLEVBQUE7QUFFM0IsUUFBQTtBQUFBO0FBQ0osTUFFQSxLQUFLLGFBQWEsT0FBUyxFQUFBO0FBQ3ZCLFFBQUE7QUFBQTtBQUNKLE1BRUEsS0FBSyxhQUFhLElBQU0sRUFBQTtBQUNwQixRQUFBO0FBQUE7QUFDSixNQUVBLEtBQUssYUFBYSxZQUFjLEVBQUE7QUFDNUIsUUFBTSxNQUFBLE1BQUEsQ0FBTyxhQUFhLElBQUksQ0FBQTtBQUM5QixRQUFBO0FBQUE7QUFDSixNQUNBLEtBQUssYUFBYSxXQUFhLEVBQUE7QUFDM0IsUUFBTSxNQUFBLE1BQUEsQ0FBTyxhQUFhLEtBQUssQ0FBQTtBQUMvQixRQUFBO0FBQUE7QUFDSixNQUVBLEtBQUssYUFBYSxXQUFhLEVBQUE7QUFDM0IsUUFBTSxNQUFBLE1BQUEsQ0FBTyxZQUFZLElBQUksQ0FBQTtBQUM3QixRQUFBO0FBQUE7QUFDSixNQUNBLEtBQUssYUFBYSxVQUFZLEVBQUE7QUFDMUIsUUFBTSxNQUFBLE1BQUEsQ0FBTyxZQUFZLEtBQUssQ0FBQTtBQUM5QixRQUFBO0FBQUE7QUFDSixNQUVBLFNBQVM7QUFDTCxRQUFBLE1BQUEsQ0FBTyxXQUFZLENBQUEsT0FBQSxDQUFRLENBQTRCLHlCQUFBLEVBQUEsTUFBQSxDQUFPLE1BQU0sQ0FBRSxDQUFBLENBQUE7QUFDdEUsUUFBQTtBQUFBO0FBQ0o7QUFDSjtBQUVSOzs7OyJ9