11module . exports = inject
22
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+
36function inject ( bot ) {
47 const Team = require ( '../team' ) ( bot . registry )
58 const teams = { }
69
710 function teamHandler ( packet ) {
8- const { team : teamName , mode } = packet
11+ const { team : teamName , players = [ ] } = packet
12+ const mode = typeof packet . mode === 'number' ? TEAM_MODES [ packet . mode ] : packet . mode
13+
914 let team = teams [ teamName ]
10- if ( mode === 0 ) {
11- team = new Team (
12- packet . team ,
13- packet . name ,
14- packet . friendlyFire ,
15- packet . nameTagVisibility ,
16- packet . collisionRule ,
17- packet . formatting ,
18- packet . prefix ,
19- packet . suffix
20- )
21- if ( Array . isArray ( packet . players ) ) {
22- packet . players . forEach ( player => {
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 ) {
2329 team . add ( player )
2430 bot . teamMap [ player ] = team
25- } )
26- }
27- teams [ teamName ] = team
28- bot . emit ( 'teamCreated' , teams [ teamName ] )
29- }
30- if ( team !== undefined ) {
31- if ( mode === 1 ) {
32- team . members . forEach ( member => {
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 ) => {
3339 delete bot . teamMap [ member ]
3440 } )
3541 delete teams [ teamName ]
3642 bot . emit ( 'teamRemoved' , teams [ teamName ] )
37- }
38- if ( mode === 2 ) {
43+ break
44+
45+ case 'change' :
46+ if ( ! team ) break
3947 team . update (
4048 packet . name ,
4149 packet . friendlyFire ,
@@ -46,23 +54,28 @@ function inject (bot) {
4654 packet . suffix
4755 )
4856 bot . emit ( 'teamUpdated' , teams [ teamName ] )
49- }
50- if ( Array . isArray ( packet . players ) ) {
51- if ( mode === 3 ) {
52- packet . players . forEach ( ( player ) => {
53- team . add ( player )
54- bot . teamMap [ player ] = team
55- } )
56- bot . emit ( 'teamMemberAdded' , 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
5764 }
58- if ( mode === 4 ) {
59- packet . players . forEach ( ( player ) => {
60- team . remove ( player )
61- delete bot . teamMap [ player ]
62- } )
63- bot . emit ( 'teamMemberRemoved' , teams [ teamName ] )
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 ]
6473 }
65- }
74+ bot . emit ( 'teamMemberRemoved' , teams [ teamName ] )
75+ break
76+
77+ default :
78+ bot . _warn ( `Unknown team mode handling team update: ${ mode } ` )
6679 }
6780 }
6881
0 commit comments