From ae6d9887fd6beddd6de10955ca31449f967529ba Mon Sep 17 00:00:00 2001 From: Romain Beaumont Date: Sun, 6 Dec 2015 18:31:25 +0100 Subject: [PATCH] fix bug in /tp and add regression tests --- src/lib/plugins/login.js | 4 +-- src/lib/plugins/tp.js | 6 ++-- test/mineflayer.js | 67 ++++++++++++++++++++++++++++++++-------- 3 files changed, 59 insertions(+), 18 deletions(-) diff --git a/src/lib/plugins/login.js b/src/lib/plugins/login.js index 9d9cf02..13d60eb 100644 --- a/src/lib/plugins/login.js +++ b/src/lib/plugins/login.js @@ -15,6 +15,8 @@ module.exports.server=function(serv,options) try { var player = serv.initEntity('player', null, serv.overworld, new Vec3(0,0,0)); player._client=client; + + player.profileProperties=player._client.profile ? player._client.profile.properties : []; player.commands = new Command({}); Object.keys(plugins) .filter(pluginName => plugins[pluginName].player!=undefined) @@ -95,8 +97,6 @@ module.exports.player=function(player,serv) function fillTabList() { - player.profileProperties=player._client.profile ? player._client.profile.properties : []; - player._writeOthers('player_info',{ action: 0, data: [{ diff --git a/src/lib/plugins/tp.js b/src/lib/plugins/tp.js index 534b4e1..0c0895d 100644 --- a/src/lib/plugins/tp.js +++ b/src/lib/plugins/tp.js @@ -37,9 +37,9 @@ module.exports.player = (player, serv) => { if(!(player_from = serv.getPlayer(args[0]))) return false; - let x = getPos(args[0], 'x', player_from); - let y = getPos(args[1], 'y', player_from); - let z = getPos(args[2], 'z', player_from); + let x = getPos(args[1], 'x', player_from); + let y = getPos(args[2], 'y', player_from); + let z = getPos(args[3], 'z', player_from); player_from.teleport(new Vec3(x, y, z)); } diff --git a/test/mineflayer.js b/test/mineflayer.js index f0adf7b..b53bdd2 100644 --- a/test/mineflayer.js +++ b/test/mineflayer.js @@ -2,12 +2,18 @@ var net = require('net'); var mcServer=require("../"); var settings = require('../config/default-settings'); var mineflayer = require("mineflayer"); +var assert = require('chai').assert; +var Vec3 = require('vec3').Vec3; + +function assertPosEqual(pos1,pos2) { + assert.isBelow(pos1.distanceTo(pos2),0.01); +} describe("Server with mineflayer connection", function() { var bot; + var bot2; var serv; - var player; before(function(done){ var options = settings; options["online-mode"]=false; @@ -19,16 +25,25 @@ describe("Server with mineflayer connection", function() { bot = mineflayer.createBot({ host: "localhost", port: 25566, - username: "echo" + username: "bot" + }); + bot2 = mineflayer.createBot({ + host: "localhost", + port: 25566, + username: "bot2" }); - serv.once("newPlayer",function(p){ - player=p; - }); + var nbSpawn=0; + + function spawn() { + nbSpawn++; + if(nbSpawn==2) + done(); + } + + bot.on('spawn', spawn); + bot2.on('spawn', spawn); - bot.on('spawn', function() { - done(); - }); }) }); @@ -47,23 +62,49 @@ describe("Server with mineflayer connection", function() { bot.chat("/help"); }); it("can use /particle",function(done){ - bot._client.on('world_particles',function(){ + bot._client.once('world_particles',function(){ done(); }); bot.chat("/particle 5 10 100 100 100"); }); it("can use /playsound",function(done) { - bot.on('soundEffectHeard',function(){ + bot.once('soundEffectHeard',function(){ done(); }); bot.chat('/playsound ambient.weather.rain'); }); it("can use /summon",function(done) { - bot.on('entitySpawn',function(entity){ - if(entity.name=="EnderDragon") + var listener=function(entity){ + if(entity.name=="EnderDragon") { + bot.removeListener('entitySpawn',listener); done(); - }); + } + }; + bot.on('entitySpawn',listener); bot.chat('/summon EnderDragon'); }); + describe("can use /tp",function() { + it("can tp myself",function(done) { + bot.once('forcedMove', function () { + assertPosEqual(bot.entity.position,new Vec3(2, 3, 4)); + done(); + }); + bot.chat('/tp 2 3 4'); + }); + it("can tp somebody else",function(done) { + bot2.once('forcedMove', function () { + assertPosEqual(bot2.entity.position,new Vec3(2, 3, 4)); + done(); + }); + bot.chat('/tp bot2 2 3 4'); + }); + it("can tp to somebody else",function(done) { + bot2.once('forcedMove', function () { + assertPosEqual(bot2.entity.position,bot.entity.position); + done(); + }); + bot.chat('/tp bot2 bot'); + }); + }); }); });