forked from PrismarineJS/flying-squid
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogout.js
37 lines (33 loc) · 1.12 KB
/
logout.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
const { once } = require('events')
module.exports.server = function (serv) {
serv.quit = async (reason = 'Server closed') => {
await Promise.all(serv.players.map((player) => {
player.kick(reason)
return once(player, 'disconnected')
}))
serv._server.close()
await once(serv._server, 'close')
}
}
module.exports.player = function (player, serv, { worldFolder }) {
player.despawnEntities = entities => player._client.write('entity_destroy', {
entityIds: entities.map(e => e.id)
})
player._client.on('end', async () => {
if (player && player.username) {
player._unloadAllChunks()
serv.broadcast(serv.color.yellow + player.username + ' left the game.')
serv._sendPlayerEventLeave(player)
player.nearbyPlayers().forEach(otherPlayer => otherPlayer.despawnEntities([player]))
delete serv.entities[player.id]
player.emit('disconnected')
const index = serv.players.indexOf(player)
if (index > -1) {
serv.players.splice(index, 1)
}
delete serv.uuidToPlayer[player.uuid]
}
player.save()
player._client.socket?.destroy()
})
}