forked from PrismarineJS/mineflayer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathteam.js
93 lines (83 loc) · 2.16 KB
/
team.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
let ChatMessage
let MessageBuilder
module.exports = loader
function loader (registry) {
ChatMessage = require('prismarine-chat')(registry)
MessageBuilder = ChatMessage.MessageBuilder
return Team
}
function colorString (color) {
const formatting = [
'black',
'dark_blue',
'dark_green',
'dark_aqua',
'dark_red',
'dark_purple',
'gold',
'gray',
'dark_gray',
'blue',
'green',
'aqua',
'red',
'light_purple',
'yellow',
'white',
'obfuscated',
'bold',
'strikethrough',
'underlined',
'italic',
'reset'
]
if (color === undefined || color > 21 || color === -1) return 'reset'
return formatting[color]
}
class Team {
constructor (team, name, friendlyFire, nameTagVisibility, collisionRule, formatting, prefix, suffix) {
this.team = team
this.update(name, friendlyFire, nameTagVisibility, collisionRule, formatting, prefix, suffix)
this.membersMap = {}
}
parseMessage (value) {
let result
try {
result = new ChatMessage(JSON.parse(value)) // version>1.13-pre7
} catch {
result = MessageBuilder.fromString(value, { colorSeparator: '§' })
if (result === null) {
return new ChatMessage('')
}
return new ChatMessage(result.toJSON())
}
return result
}
add (name) {
this.membersMap[name] = ''
return this.membersMap[name]
}
remove (name) {
const removed = this.membersMap[name]
delete this.membersMap[name]
return removed
}
update (name, friendlyFire, nameTagVisibility, collisionRule, formatting, prefix, suffix) {
this.name = this.parseMessage(name)
this.friendlyFire = friendlyFire
this.nameTagVisibility = nameTagVisibility
this.collisionRule = collisionRule
this.color = colorString(formatting)
this.prefix = this.parseMessage(prefix)
this.suffix = this.parseMessage(suffix)
}
// Return a chat component with prefix + color + name + suffix
displayName (member) {
const name = this.prefix.clone()
name.append(new ChatMessage({ text: member, color: this.color }), this.suffix)
return name
}
get members () {
return Object.keys(this.membersMap)
}
}