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.broadcast(message[,color])](#servbroadcastmessagecolor)
- [serv.setBlock(position,blockType)](#servsetblockpositionblocktype) - [serv.setBlock(position,blockType)](#servsetblockpositionblocktype)
- [serv.getPlayer(username)](#servgetplayerusername) - [serv.getPlayer(username)](#servgetplayerusername)
- [serv.getNearby(loc)](#servgetnearbyloc)
- [server.banUsername(username,reason,callback)](#serverbanusernameusernamereasoncallback) - [server.banUsername(username,reason,callback)](#serverbanusernameusernamereasoncallback)
- [server.ban(uuid,reason)](#serverbanuuidreason) - [server.ban(uuid,reason)](#serverbanuuidreason)
- [server.pardonUsername(username,callback)](#serverpardonusernameusernamecallback) - [server.pardonUsername(username,callback)](#serverpardonusernameusernamecallback)
@ -38,6 +39,10 @@
- [server.getUUIDFromUsername(username,callback)](#servergetuuidfromusernameusernamecallback) - [server.getUUIDFromUsername(username,callback)](#servergetuuidfromusernameusernamecallback)
- [server.setTime(time)](#serversettimetime) - [server.setTime(time)](#serversettimetime)
- [server.setTickInterval(ticksPerSecond)](#serversettickintervaltickspersecond) - [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) - [Player](#player)
- [Properties](#properties-1) - [Properties](#properties-1)
- [player.entity](#playerentity) - [player.entity](#playerentity)
@ -70,8 +75,9 @@
- [player.changeWorld(world, opt)](#playerchangeworldworld-opt) - [player.changeWorld(world, opt)](#playerchangeworldworld-opt)
- [Low level properties](#low-level-properties) - [Low level properties](#low-level-properties)
- [player._client](#player_client) - [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._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 --> <!-- 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. 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) #### server.banUsername(username,reason,callback)
Bans players given a username. Mainly used if player is not online, otherwise use `player.ban()`. 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. 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 ## Player
### Properties ### Properties
@ -360,3 +388,7 @@ The internal implementation to communicate with a client
#### player._writeOthers(packetName, packetFields) #### player._writeOthers(packetName, packetFields)
write to other players than `player` the packet `packetName` with fields `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", "minecraft-protocol": "^0.15.0",
"mkdirp": "0.5.1", "mkdirp": "0.5.1",
"moment": "^2.10.6", "moment": "^2.10.6",
"node-dir": "~0.1.9",
"node-uuid": "^1.4.3", "node-uuid": "^1.4.3",
"prismarine-block": "0.1.0", "prismarine-block": "0.1.0",
"prismarine-chunk": "0.2.1", "prismarine-chunk": "0.2.1",
"prismarine-entity": "0.1.0", "prismarine-entity": "0.1.0",
"prismarine-world": "0.3.0", "prismarine-world": "0.3.0",
"prismarine-world-sync": "0.1.0",
"random-seed": "^0.2.0",
"request-promise": "^0.4.3", "request-promise": "^0.4.3",
"requireindex": "~1.0.0", "requireindex": "~1.0.0",
"vec3": "0.1.3",
"spiralloop": "1.0.2", "spiralloop": "1.0.2",
"node-dir": "~0.1.9",
"uuid-1345": "~0.99.6", "uuid-1345": "~0.99.6",
"prismarine-world-sync": "0.1.0" "vec3": "0.1.3"
}, },
"repository": { "repository": {
"type": "git", "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() { player.getOthers = function() {
return serv.players.filter(function (otherPlayer) { return serv.players.filter(function (otherPlayer) {
return otherPlayer != player; 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() { function spawnForOthers() {
player._writeOthers('named_entity_spawn',{ // _writeOthersWithinDistance? player._writeOthersNearby('named_entity_spawn',{
entityId: player.entity.id, entityId: player.entity.id,
playerUUID: player._client.uuid, playerUUID: player._client.uuid,
x: player.entity.position.x, x: player.entity.position.x,
@ -23,8 +23,7 @@ function inject(serv, player) {
} }
function sendNearbyPlayers() { function sendNearbyPlayers() {
player.getOthers().forEach(function (otherPlayer) { player.getNearby().forEach(function (otherPlayer) {
if (otherPlayer.world != player.world) return; // Also check distance from player?
player._client.write('named_entity_spawn', { player._client.write('named_entity_spawn', {
entityId: otherPlayer.entity.id, entityId: otherPlayer.entity.id,
playerUUID: otherPlayer._client.uuid, playerUUID: otherPlayer._client.uuid,

View file

@ -7,4 +7,20 @@ function inject(serv,settings)
player._client.write(packetName, packetFields); 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); serv._worldSync=new WorldSync(serv.overworld);
function pregenWorld(world, size=10) { function pregenWorld(world, size=10) {
var promises = Array();
for (var x = -size; x < size; x++) { for (var x = -size; x < size; x++) {
for (var z = -size; z < size; z++) { 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 = pregenWorld;
serv.pregenWorld(serv.overworld); serv.pregenWorld(serv.overworld).then(() => serv.log('Pre-Generated Overworld'));
serv.log('Pre-Generated Overworld'); serv.pregenWorld(serv.netherworld).then(() => serv.log('Pre-Generated Nether'));
serv.pregenWorld(serv.netherworld);
serv.log('Pre-Generated Nether');
} }