Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PrismarineJS
GitHub Repository: PrismarineJS/mineflayer
Path: blob/master/lib/plugins/team.js
9427 views
1
module.exports = inject
2
3
// TODO: apply this to all versions and rename scoreboard_team -> teams in minecraft-data
4
const TEAM_MODES = ['add', 'remove', 'change', 'join', 'leave']
5
6
function inject (bot) {
7
const Team = require('../team')(bot.registry)
8
const teams = {}
9
10
function teamHandler (packet) {
11
const { team: teamName, players = [] } = packet
12
const mode = typeof packet.mode === 'number' ? TEAM_MODES[packet.mode] : packet.mode
13
14
let team = teams[teamName]
15
16
switch (mode) {
17
case 'add':
18
team = new Team(
19
teamName,
20
packet.name,
21
packet.friendlyFire,
22
packet.nameTagVisibility,
23
packet.collisionRule,
24
packet.formatting,
25
packet.prefix,
26
packet.suffix
27
)
28
for (const player of players) {
29
team.add(player)
30
bot.teamMap[player] = team
31
}
32
teams[teamName] = team
33
bot.emit('teamCreated', teams[teamName])
34
break
35
36
case 'remove':
37
if (!team) break
38
team.members.forEach((member) => {
39
delete bot.teamMap[member]
40
})
41
delete teams[teamName]
42
bot.emit('teamRemoved', teams[teamName])
43
break
44
45
case 'change':
46
if (!team) break
47
team.update(
48
packet.name,
49
packet.friendlyFire,
50
packet.nameTagVisibility,
51
packet.collisionRule,
52
packet.formatting,
53
packet.prefix,
54
packet.suffix
55
)
56
bot.emit('teamUpdated', teams[teamName])
57
break
58
59
case 'join':
60
if (!team) break
61
for (const player of players) {
62
team.add(player)
63
bot.teamMap[player] = team
64
}
65
bot.emit('teamMemberAdded', teams[teamName])
66
break
67
68
case 'leave':
69
if (!team) break
70
for (const player of players) {
71
team.remove(player)
72
delete bot.teamMap[player]
73
}
74
bot.emit('teamMemberRemoved', teams[teamName])
75
break
76
77
default:
78
bot._warn(`Unknown team mode handling team update: ${mode}`)
79
}
80
}
81
82
if (bot.supportFeature('teamUsesScoreboard')) {
83
bot._client.on('scoreboard_team', teamHandler)
84
} else {
85
bot._client.on('teams', teamHandler)
86
}
87
88
bot.teams = teams
89
bot.teamMap = {}
90
}
91
92