don't spawn in water, fix #63

This commit is contained in:
Romain Beaumont 2015-12-14 20:40:42 +01:00
parent 908054dca1
commit 0ea7fcf40d
3 changed files with 28 additions and 5 deletions

View file

@ -157,6 +157,7 @@ module.exports.player=function(player,serv)
} }
addPlayer(); addPlayer();
await player.findSpawnPoint();
sendLogin(); sendLogin();
await player.sendMap(); await player.sendMap();
player.sendSpawnPosition(); player.sendSpawnPosition();

View file

@ -9,14 +9,36 @@ module.exports.server=function(serv,settings)
{ {
serv.gameMode=settings.gameMode; serv.gameMode=settings.gameMode;
serv.getSpawnPoint = () => new Vec3(randomInt(5,20),81,randomInt(5,20)); async function findSpawnZone(world,initialPoint)
{
var point=initialPoint;
while((await (world.getBlockType(point)))==0)
point=point.offset(0,-1,0);
while(true)
{
var p=await world.getBlockType(point);
if(p.type!=8 && p.type!=9)
break;
point=point.offset(1,0,0);
}
while((await world.getBlockType(point))!=0)
point = point.offset(0, 1, 0);
return point;
}
serv.getSpawnPoint = async (world) => {
return await findSpawnZone(world,new Vec3(randomInt(0,30),81,randomInt(0,30)));
};
}; };
module.exports.player=function(player,serv) module.exports.player=async function(player,serv)
{ {
player.gameMode=serv.gameMode; player.gameMode=serv.gameMode;
player.spawnPoint=serv.getSpawnPoint(); player.findSpawnPoint=async () => {
player.spawnPoint=await serv.getSpawnPoint(player.world);
};
player._client.on('settings',({viewDistance}) => { player._client.on('settings',({viewDistance}) => {
player.view=viewDistance; player.view=viewDistance;
}); });

View file

@ -143,8 +143,7 @@ module.exports.player=function(player,serv,settings) {
player.changeWorld = async (world, opt) => { player.changeWorld = async (world, opt) => {
if(player.world == world) return Promise.resolve(); if(player.world == world) return Promise.resolve();
opt = opt || {}; opt = opt || {};
player.world = world; player.world = world
player.world = world;
player.loadedChunks={}; player.loadedChunks={};
if (typeof opt.gamemode != 'undefined') player.gameMode = opt.gamemode; if (typeof opt.gamemode != 'undefined') player.gameMode = opt.gamemode;
player._client.write("respawn",{ player._client.write("respawn",{
@ -153,6 +152,7 @@ module.exports.player=function(player,serv,settings) {
gamemode: opt.gamemode || player.gameMode, gamemode: opt.gamemode || player.gameMode,
levelType:'default' levelType:'default'
}); });
await player.findSpawnPoint();
player.position=player.spawnPoint.toFixedPosition(); player.position=player.spawnPoint.toFixedPosition();
player.sendSpawnPosition(); player.sendSpawnPosition();
player.updateAndSpawn(); player.updateAndSpawn();