Add ~ tp /tp, small fixes

This commit is contained in:
DemiPixel 2015-12-05 21:24:38 -08:00
parent 6ab320e3bc
commit 127ef3c777
2 changed files with 24 additions and 10 deletions

View file

@ -1,13 +1,19 @@
var Vec3 = require("vec3").Vec3; var Vec3 = require("vec3").Vec3;
module.exports.player = (player, serv) => { module.exports.player = (player, serv) => {
var getPos = (num, dir='x', p=player) => {
if (num[0] == '~') return p.position[dir] + parseInt(num.slice(1, num.length) || 0)*32;
else return parseInt(num);
}
player.commands.add({ player.commands.add({
base: 'teleport', base: 'teleport',
aliases: ['tp'], aliases: ['tp'],
info: 'to teleport a player', info: 'to teleport a player',
usage: '/teleport [target player] <destination player or x> [x] [y]', usage: '/teleport [target player] <destination player or x> [y] [z]',
parse(str) { parse(str) {
return str.match(/^(((\w* )?\d* \d* \d*)|(\w* \w*))$/) ? str.split(' ') : false; return str.match(/^(((\w* )?~?-?\d* ~?-?\d* ~?-?\d*)|(\w* \w*))$/) ? str.split(' ') : false;
}, },
action(args) { action(args) {
if(args.length === 2 && args[0] !== args[1]) { if(args.length === 2 && args[0] !== args[1]) {
@ -19,14 +25,22 @@ module.exports.player = (player, serv) => {
player_from.teleport(player_to.position.clone()); player_from.teleport(player_to.position.clone());
} else if(args.length === 3) { } else if(args.length === 3) {
player.teleport(new Vec3(args[0]*32, args[1]*32, args[2]*32)); let x = getPos(args[0], 'x');
let y = getPos(args[1], 'y');
let z = getPos(args[2], 'z');
player.teleport(new Vec3(x, y, z));
} else if(args.length === 4) { } else if(args.length === 4) {
let player_from; let player_from;
if(!(player_from = serv.getPlayer(args[0]))) if(!(player_from = serv.getPlayer(args[0])))
return false; return false;
player_from.teleport(new Vec3(args[1]*32, args[2]*32, args[3]*32)); let x = getPos(args[0], 'x', player_from);
let y = getPos(args[1], 'y', player_from);
let z = getPos(args[2], 'z', player_from);
player_from.teleport(new Vec3(x, y, z));
} }
} }
}); });

View file

@ -55,16 +55,16 @@ module.exports.player=function(player)
return player.behavior('move', { return player.behavior('move', {
onGround: onGround, onGround: onGround,
position: newPosition position: newPosition
}, async () => { }, async ({onGround, position}) => {
if (player.position.distanceTo(new Vec3(0, 0, 0)) != 0) { if (player.position.distanceTo(new Vec3(0, 0, 0)) != 0) {
var diff = newPosition.minus(player.position); var diff = position.minus(player.position);
if(diff.abs().x>127 || diff.abs().y>127 || diff.abs().z>127) if(diff.abs().x>127 || diff.abs().y>127 || diff.abs().z>127)
{ {
player._writeOthersNearby('entity_teleport', { player._writeOthersNearby('entity_teleport', {
entityId:player.id, entityId:player.id,
x: newPosition.x, x: position.x,
y: newPosition.y, y: position.y,
z: newPosition.z, z: position.z,
yaw: player.yaw, yaw: player.yaw,
pitch: player.pitch, pitch: player.pitch,
onGround: onGround onGround: onGround
@ -80,7 +80,7 @@ module.exports.player=function(player)
}); });
} }
} }
player.position = newPosition; player.position = position;
player.onGround = onGround; player.onGround = onGround;
}, () => { }, () => {
player.sendPosition(); player.sendPosition();