@@ -12,13 +12,71 @@ index c437ecf3a0e4ab5758a48538c714b7e9651bb5da..d9c9895ae8614550aa09ad60a396ac32
12
12
debug('ping response', response)
13
13
// TODO: could also use ping pre-connect to save description, type, max players, etc.
14
14
@@ -40,6 +40,7 @@ module.exports = function (client, options) {
15
-
15
+
16
16
// Reinitialize client object with new version TODO: move out of its constructor?
17
17
client.version = minecraftVersion
18
18
+ await options.versionSelectedHook?.(client)
19
19
client.state = states.HANDSHAKING
20
-
20
+
21
21
// Let other plugins such as Forge/FML (modinfo) respond to the ping response
22
+ diff --git a/src/client/chat.js b/src/client/chat.js
23
+ index f14269bea055d4329cd729271e7406ec4b344de7..00f5482eb6e3c911381ca9a728b1b4aae0d1d337 100644
24
+ --- a/src/client/chat.js
25
+ +++ b/src/client/chat.js
26
+ @@ -111,7 +111,7 @@ module.exports = function (client, options) {
27
+ for (const player of packet.data) {
28
+ if (!player.chatSession) continue
29
+ client._players[player.UUID] = {
30
+ - publicKey: crypto.createPublicKey({ key: player.chatSession.publicKey.keyBytes, format: 'der', type: 'spki' }),
31
+ + // publicKey: crypto.createPublicKey({ key: player.chatSession.publicKey.keyBytes, format: 'der', type: 'spki' }),
32
+ publicKeyDER: player.chatSession.publicKey.keyBytes,
33
+ sessionUuid: player.chatSession.uuid
34
+ }
35
+ @@ -127,7 +127,7 @@ module.exports = function (client, options) {
36
+ for (const player of packet.data) {
37
+ if (player.crypto) {
38
+ client._players[player.UUID] = {
39
+ - publicKey: crypto.createPublicKey({ key: player.crypto.publicKey, format: 'der', type: 'spki' }),
40
+ + // publicKey: crypto.createPublicKey({ key: player.crypto.publicKey, format: 'der', type: 'spki' }),
41
+ publicKeyDER: player.crypto.publicKey,
42
+ signature: player.crypto.signature,
43
+ displayName: player.displayName || player.name
44
+ @@ -198,7 +198,7 @@ module.exports = function (client, options) {
45
+ if (mcData.supportFeature('useChatSessions')) {
46
+ const tsDelta = BigInt(Date.now()) - packet.timestamp
47
+ const expired = !packet.timestamp || tsDelta > messageExpireTime || tsDelta < 0
48
+ - const verified = !packet.unsignedChatContent && updateAndValidateSession(packet.senderUuid, packet.plainMessage, packet.signature, packet.index, packet.previousMessages, packet.salt, packet.timestamp) && !expired
49
+ + const verified = false && !packet.unsignedChatContent && updateAndValidateSession(packet.senderUuid, packet.plainMessage, packet.signature, packet.index, packet.previousMessages, packet.salt, packet.timestamp) && !expired
50
+ if (verified) client._signatureCache.push(packet.signature)
51
+ client.emit('playerChat', {
52
+ plainMessage: packet.plainMessage,
53
+ @@ -363,7 +363,7 @@ module.exports = function (client, options) {
54
+ }
55
+ }
56
+
57
+ - client._signedChat = (message, options = {}) => {
58
+ + client._signedChat = async (message, options = {}) => {
59
+ options.timestamp = options.timestamp || BigInt(Date.now())
60
+ options.salt = options.salt || 1n
61
+
62
+ @@ -405,7 +405,7 @@ module.exports = function (client, options) {
63
+ message,
64
+ timestamp: options.timestamp,
65
+ salt: options.salt,
66
+ - signature: (client.profileKeys && client._session) ? client.signMessage(message, options.timestamp, options.salt, undefined, acknowledgements) : undefined,
67
+ + signature: (client.profileKeys && client._session) ? await client.signMessage(message, options.timestamp, options.salt, undefined, acknowledgements) : undefined,
68
+ offset: client._lastSeenMessages.pending,
69
+ acknowledged
70
+ })
71
+ @@ -419,7 +419,7 @@ module.exports = function (client, options) {
72
+ message,
73
+ timestamp: options.timestamp,
74
+ salt: options.salt,
75
+ - signature: client.profileKeys ? client.signMessage(message, options.timestamp, options.salt, options.preview) : Buffer.alloc(0),
76
+ + signature: client.profileKeys ? await client.signMessage(message, options.timestamp, options.salt, options.preview) : Buffer.alloc(0),
77
+ signedPreview: options.didPreview,
78
+ previousMessages: client._lastSeenMessages.map((e) => ({
79
+ messageSender: e.sender,
22
80
diff --git a/src/client/encrypt.js b/src/client/encrypt.js
23
81
index b9d21bab9faccd5dbf1975fc423fc55c73e906c5..99ffd76527b410e3a393181beb260108f4c63536 100644
24
82
--- a/src/client/encrypt.js
@@ -34,10 +92,10 @@ index b9d21bab9faccd5dbf1975fc423fc55c73e906c5..99ffd76527b410e3a393181beb260108
34
92
+ // clearTimeout(loginTimeout)
35
93
+ // })
36
94
}
37
-
95
+
38
96
function onJoinServerResponse (err) {
39
97
diff --git a/src/client.js b/src/client.js
40
- index c89375e32babbf3559655b1e95f6441b9a30796f..f24cd5dc8fa9a0a4000b184fb3c79590a3ad8b8a 100644
98
+ index 5b63c295080f62ca54928660cdfa134214002fa1..d2d24bff963d8ed7747ccb48f8c278950ba7f396 100644
41
99
--- a/src/client.js
42
100
+++ b/src/client.js
43
101
@@ -88,10 +88,12 @@ class Client extends EventEmitter {
@@ -72,9 +130,9 @@ index c89375e32babbf3559655b1e95f6441b9a30796f..f24cd5dc8fa9a0a4000b184fb3c79590
72
130
}
73
131
})
74
132
}
75
- @@ -166 ,7 +174 ,10 @@ class Client extends EventEmitter {
133
+ @@ -167 ,7 +175 ,10 @@ class Client extends EventEmitter {
76
134
}
77
-
135
+
78
136
const onFatalError = (err) => {
79
137
- this.emit('error', err)
80
138
+ // todo find out what is trying to write after client disconnect
@@ -83,8 +141,8 @@ index c89375e32babbf3559655b1e95f6441b9a30796f..f24cd5dc8fa9a0a4000b184fb3c79590
83
141
+ }
84
142
endSocket()
85
143
}
86
-
87
- @@ -195 ,6 +206 ,8 @@ class Client extends EventEmitter {
144
+
145
+ @@ -196 ,6 +207 ,8 @@ class Client extends EventEmitter {
88
146
serializer -> framer -> socket -> splitter -> deserializer */
89
147
if (this.serializer) {
90
148
this.serializer.end()
@@ -93,8 +151,8 @@ index c89375e32babbf3559655b1e95f6441b9a30796f..f24cd5dc8fa9a0a4000b184fb3c79590
93
151
} else {
94
152
if (this.socket) this.socket.end()
95
153
}
96
- @@ -236 ,8 +249 ,11 @@ class Client extends EventEmitter {
97
-
154
+ @@ -237 ,8 +250 ,11 @@ class Client extends EventEmitter {
155
+
98
156
write (name, params) {
99
157
if (!this.serializer.writable) { return }
100
158
- debug('writing packet ' + this.state + '.' + name)
@@ -106,83 +164,25 @@ index c89375e32babbf3559655b1e95f6441b9a30796f..f24cd5dc8fa9a0a4000b184fb3c79590
106
164
+ this.emit('writePacket', name, params)
107
165
this.serializer.write({ name, params })
108
166
}
109
-
167
+
110
168
diff --git a/src/index.d.ts b/src/index.d.ts
111
- index 0a5821c32d735e11205a280aa5a503c13533dc14..94a49f661d922478b940d853169b6087e6ec3df5 100644
169
+ index 423085259176a10c9dfeb617f00975df077d02be..ae0558b7c53ab24474b22240e8a2f4e4cde02f19 100644
112
170
--- a/src/index.d.ts
113
171
+++ b/src/index.d.ts
114
- @@ -121 ,6 +121 ,7 @@ declare module 'minecraft-protocol' {
172
+ @@ -134 ,6 +134 ,7 @@ declare module 'minecraft-protocol' {
115
173
sessionServer?: string
116
174
keepAlive?: boolean
117
175
closeTimeout?: number
118
176
+ closeTimeout?: number
119
177
noPongTimeout?: number
120
178
checkTimeoutInterval?: number
121
179
version?: string
122
- @@ -141 ,6 +142 ,8 @@ declare module 'minecraft-protocol' {
180
+ @@ -154 ,6 +155 ,8 @@ declare module 'minecraft-protocol' {
123
181
disableChatSigning?: boolean
124
182
/** Pass custom client implementation if needed. */
125
183
Client?: Client
126
184
+ /** Can be used to prepare mc data on autoVersion (client.version has selected version) */
127
185
+ versionSelectedHook?: (client: Client) => Promise<void> | void
128
186
}
129
-
187
+
130
188
export class Server extends EventEmitter {
131
- diff --git a/src/client/chat.js b/src/client/chat.js
132
- index 5cad9954db13d7121ed0a03792c2304156cdf436..ffd7c7d6299ef54854e0923f8d5296bf2a58956b 100644
133
- --- a/src/client/chat.js
134
- +++ b/src/client/chat.js
135
- @@ -111,7 +111,7 @@ module.exports = function (client, options) {
136
- for (const player of packet.data) {
137
- if (!player.chatSession) continue
138
- client._players[player.UUID] = {
139
- - publicKey: crypto.createPublicKey({ key: player.chatSession.publicKey.keyBytes, format: 'der', type: 'spki' }),
140
- + // publicKey: crypto.createPublicKey({ key: player.chatSession.publicKey.keyBytes, format: 'der', type: 'spki' }),
141
- publicKeyDER: player.chatSession.publicKey.keyBytes,
142
- sessionUuid: player.chatSession.uuid
143
- }
144
- @@ -127,7 +127,7 @@ module.exports = function (client, options) {
145
- for (const player of packet.data) {
146
- if (player.crypto) {
147
- client._players[player.UUID] = {
148
- - publicKey: crypto.createPublicKey({ key: player.crypto.publicKey, format: 'der', type: 'spki' }),
149
- + // publicKey: crypto.createPublicKey({ key: player.crypto.publicKey, format: 'der', type: 'spki' }),
150
- publicKeyDER: player.crypto.publicKey,
151
- signature: player.crypto.signature,
152
- displayName: player.displayName || player.name
153
- @@ -198,7 +198,7 @@ module.exports = function (client, options) {
154
- if (mcData.supportFeature('useChatSessions')) {
155
- const tsDelta = BigInt(Date.now()) - packet.timestamp
156
- const expired = !packet.timestamp || tsDelta > messageExpireTime || tsDelta < 0
157
- - const verified = !packet.unsignedChatContent && updateAndValidateSession(packet.senderUuid, packet.plainMessage, packet.signature, packet.index, packet.previousMessages, packet.salt, packet.timestamp) && !expired
158
- + const verified = false && !packet.unsignedChatContent && updateAndValidateSession(packet.senderUuid, packet.plainMessage, packet.signature, packet.index, packet.previousMessages, packet.salt, packet.timestamp) && !expired
159
- if (verified) client._signatureCache.push(packet.signature)
160
- client.emit('playerChat', {
161
- plainMessage: packet.plainMessage,
162
- @@ -363,7 +363,7 @@ module.exports = function (client, options) {
163
- }
164
- }
165
-
166
- - client._signedChat = (message, options = {}) => {
167
- + client._signedChat = async (message, options = {}) => {
168
- options.timestamp = options.timestamp || BigInt(Date.now())
169
- options.salt = options.salt || 1n
170
-
171
- @@ -404,7 +404,7 @@ module.exports = function (client, options) {
172
- message,
173
- timestamp: options.timestamp,
174
- salt: options.salt,
175
- - signature: (client.profileKeys && client._session) ? client.signMessage(message, options.timestamp, options.salt, undefined, acknowledgements) : undefined,
176
- + signature: (client.profileKeys && client._session) ? await client.signMessage(message, options.timestamp, options.salt, undefined, acknowledgements) : undefined,
177
- offset: client._lastSeenMessages.pending,
178
- acknowledged
179
- })
180
- @@ -418,7 +418,7 @@ module.exports = function (client, options) {
181
- message,
182
- timestamp: options.timestamp,
183
- salt: options.salt,
184
- - signature: client.profileKeys ? client.signMessage(message, options.timestamp, options.salt, options.preview) : Buffer.alloc(0),
185
- + signature: client.profileKeys ? await client.signMessage(message, options.timestamp, options.salt, options.preview) : Buffer.alloc(0),
186
- signedPreview: options.didPreview,
187
- previousMessages: client._lastSeenMessages.map((e) => ({
188
- messageSender: e.sender,
0 commit comments