Added lots of communication stuff

This commit is contained in:
DemiPixel 2015-10-24 21:02:26 -07:00
parent bb80bd7c44
commit f0cce9fadb
6 changed files with 72 additions and 12 deletions

View file

@ -31,6 +31,7 @@
- [serv.broadcast(message[,color])](#servbroadcastmessagecolor)
- [serv.setBlock(position,blockType)](#servsetblockpositionblocktype)
- [serv.getPlayer(username)](#servgetplayerusername)
- [serv.getNearby(loc)](#servgetnearbyloc)
- [server.banUsername(username,reason,callback)](#serverbanusernameusernamereasoncallback)
- [server.ban(uuid,reason)](#serverbanuuidreason)
- [server.pardonUsername(username,callback)](#serverpardonusernameusernamecallback)
@ -38,6 +39,10 @@
- [server.getUUIDFromUsername(username,callback)](#servergetuuidfromusernameusernamecallback)
- [server.setTime(time)](#serversettimetime)
- [server.setTickInterval(ticksPerSecond)](#serversettickintervaltickspersecond)
- [Low level methods](#low-level-methods)
- [server._writeAll(packetName, packetFields)](#server_writeallpacketname-packetfields)
- [server._writeArray(packetName, packetFields, playerArray)](#server_writearraypacketname-packetfields-playerarray)
- [server._writeNearby(packetName, packetFields, loc)](#server_writenearbypacketname-packetfields-loc)
- [Player](#player)
- [Properties](#properties-1)
- [player.entity](#playerentity)
@ -70,8 +75,9 @@
- [player.changeWorld(world, opt)](#playerchangeworldworld-opt)
- [Low level properties](#low-level-properties)
- [player._client](#player_client)
- [Low level methods](#low-level-methods)
- [Low level methods](#low-level-methods-1)
- [player._writeOthers(packetName, packetFields)](#player_writeotherspacketname-packetfields)
- [player._writeOthersNearby(packetName, packetFields)](#player_writeothersnearbypacketname-packetfields)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
@ -190,6 +196,14 @@ Saves block in world and sends block update to all players.
Returns player object with that username or, if no such player is on the server, null.
#### serv.getNearby(loc)
Returns array of players within loc. loc is a required paramater. The object contains:
* world: World position is in
* position: Center position
* radius: Distance from position
#### server.banUsername(username,reason,callback)
Bans players given a username. Mainly used if player is not online, otherwise use `player.ban()`.
@ -222,6 +236,20 @@ Resets tick interval to occur `ticksPerSecond` times per second.
Use `server.stopTickInterval()` if you want but this method already calls that and you can use `serv.doDaylightCycle` to stop it anyway.
### Low level methods
#### server._writeAll(packetName, packetFields)
Writes packet to every player on the server
#### server._writeArray(packetName, packetFields, playerArray)
Writes packet to every player in playerArray
#### server._writeNearby(packetName, packetFields, loc)
Writes packet to all players within distance of loc. loc has the same paramater as loc in server.getNearby()
## Player
### Properties
@ -360,3 +388,7 @@ The internal implementation to communicate with a client
#### player._writeOthers(packetName, packetFields)
write to other players than `player` the packet `packetName` with fields `packetFields`
#### player._writeOthersNearby(packetName, packetFields)
write to other players in same world that are within 150 blocks (see player.getNearby())

View file

@ -27,18 +27,19 @@
"minecraft-protocol": "^0.15.0",
"mkdirp": "0.5.1",
"moment": "^2.10.6",
"node-dir": "~0.1.9",
"node-uuid": "^1.4.3",
"prismarine-block": "0.1.0",
"prismarine-chunk": "0.2.1",
"prismarine-entity": "0.1.0",
"prismarine-world": "0.3.0",
"prismarine-world-sync": "0.1.0",
"random-seed": "^0.2.0",
"request-promise": "^0.4.3",
"requireindex": "~1.0.0",
"vec3": "0.1.3",
"spiralloop": "1.0.2",
"node-dir": "~0.1.9",
"uuid-1345": "~0.99.6",
"prismarine-world-sync": "0.1.0"
"vec3": "0.1.3"
},
"repository": {
"type": "git",

View file

@ -8,9 +8,21 @@ function inject(serv,player)
});
};
player._writeOthersNearby = function(packetName, packetFields) {
serv._writeArray(packetName, packetFields, player.getNearby();
}
player.getOthers = function() {
return serv.players.filter(function (otherPlayer) {
return otherPlayer != player;
});
};
player.getNearby = function() {
return serv.getNearby({
world: player.world,
position: player.entity.position,
radius: 150
}).filter((p => p != player));
}
}

View file

@ -9,7 +9,7 @@ function inject(serv, player) {
}
function spawnForOthers() {
player._writeOthers('named_entity_spawn',{ // _writeOthersWithinDistance?
player._writeOthersNearby('named_entity_spawn',{
entityId: player.entity.id,
playerUUID: player._client.uuid,
x: player.entity.position.x,
@ -23,8 +23,7 @@ function inject(serv, player) {
}
function sendNearbyPlayers() {
player.getOthers().forEach(function (otherPlayer) {
if (otherPlayer.world != player.world) return; // Also check distance from player?
player.getNearby().forEach(function (otherPlayer) {
player._client.write('named_entity_spawn', {
entityId: otherPlayer.entity.id,
playerUUID: otherPlayer._client.uuid,

View file

@ -7,4 +7,20 @@ function inject(serv,settings)
player._client.write(packetName, packetFields);
});
};
serv._writeArray=function(packetName, packetFields, players) {
players.forEach(function(player) {
player._client.write(packetName, packetFields);
});
}
serv._writeNearby=function(packetName, packetFields, loc) {
serv._writeArray(packetName, packetFields, serv.getNearby(loc));
}
serv.getNearby=function(loc) {
serv.players.filter(function(player) {
return player.world == loc.world && player.entity.position.distanceTo(loc.position) <= loc.radius;
})
}
}

View file

@ -23,16 +23,16 @@ function inject(serv,{regionFolder,generation={"name":"diamond_square","options"
serv._worldSync=new WorldSync(serv.overworld);
function pregenWorld(world, size=10) {
var promises = Array();
for (var x = -size; x < size; x++) {
for (var z = -size; z < size; z++) {
world.getColumn(x, z);
promises.push(world.getColumn(x, z));
}
}
return Promise.all(promises);
}
serv.pregenWorld = pregenWorld;
serv.pregenWorld(serv.overworld);
serv.log('Pre-Generated Overworld');
serv.pregenWorld(serv.netherworld);
serv.log('Pre-Generated Nether');
serv.pregenWorld(serv.overworld).then(() => serv.log('Pre-Generated Overworld'));
serv.pregenWorld(serv.netherworld).then(() => serv.log('Pre-Generated Nether'));
}