CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PrismarineJS

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.

GitHub Repository: PrismarineJS/mineflayer
Path: blob/master/lib/team.js
Views: 789
1
function colorString (color) {
2
const formatting = [
3
'black',
4
'dark_blue',
5
'dark_green',
6
'dark_aqua',
7
'dark_red',
8
'dark_purple',
9
'gold',
10
'gray',
11
'dark_gray',
12
'blue',
13
'green',
14
'aqua',
15
'red',
16
'light_purple',
17
'yellow',
18
'white',
19
'obfuscated',
20
'bold',
21
'strikethrough',
22
'underlined',
23
'italic',
24
'reset'
25
]
26
if (color === undefined || color > 21 || color === -1) return 'reset'
27
return formatting[color]
28
}
29
30
function loader (registry) {
31
const ChatMessage = require('prismarine-chat')(registry)
32
const MessageBuilder = ChatMessage.MessageBuilder
33
return class Team {
34
constructor (team, name, friendlyFire, nameTagVisibility, collisionRule, formatting, prefix, suffix) {
35
this.team = team
36
this.update(name, friendlyFire, nameTagVisibility, collisionRule, formatting, prefix, suffix)
37
this.membersMap = {}
38
}
39
40
parseMessage (value) {
41
if (registry.supportFeature('teamUsesChatComponents')) { // 1.13+
42
return ChatMessage.fromNotch(value)
43
} else {
44
const result = MessageBuilder.fromString(value, { colorSeparator: '§' })
45
if (result === null) {
46
return new ChatMessage('')
47
}
48
return new ChatMessage(result.toJSON())
49
}
50
}
51
52
add (name) {
53
this.membersMap[name] = ''
54
return this.membersMap[name]
55
}
56
57
remove (name) {
58
const removed = this.membersMap[name]
59
delete this.membersMap[name]
60
return removed
61
}
62
63
update (name, friendlyFire, nameTagVisibility, collisionRule, formatting, prefix, suffix) {
64
this.name = this.parseMessage(name)
65
this.friendlyFire = friendlyFire
66
this.nameTagVisibility = nameTagVisibility
67
this.collisionRule = collisionRule
68
this.color = colorString(formatting)
69
this.prefix = this.parseMessage(prefix)
70
this.suffix = this.parseMessage(suffix)
71
}
72
73
// Return a chat component with prefix + color + name + suffix
74
displayName (member) {
75
const name = this.prefix.clone()
76
name.append(new ChatMessage({ text: member, color: this.color }), this.suffix)
77
return name
78
}
79
80
get members () {
81
return Object.keys(this.membersMap)
82
}
83
}
84
}
85
86
module.exports = loader
87
88