From b1ca7aef1e8b27886fd0f98f9e77dbb0212e5121 Mon Sep 17 00:00:00 2001 From: HenkjanvDiermen Date: Mon, 15 Dec 2025 15:28:30 +0100 Subject: [PATCH 1/2] Fix chat packet handling for 1.21+ versions - Add null checks for senderName field in player_chat packets - Handle empty NBT tags (type: end) in 1.21+ where networkName can be null - Fixes crash when accessing properties on null senderName --- test/clientTest.js | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/test/clientTest.js b/test/clientTest.js index 63c2be29..2cf132f1 100644 --- a/test/clientTest.js +++ b/test/clientTest.js @@ -174,7 +174,7 @@ for (const supportedVersion of mc.supportedVersions) { const message = JSON.parse(data.formattedMessage) if (chatCount === 1) { assert.strictEqual(message.translate, 'chat.type.text') - assert.deepEqual(message.with[0].clickEvent, { + assert.deepEqual(message.with[0][CLICK_EVENT], { action: 'suggest_command', value: mcData.version.version > 340 ? '/tell Player ' : '/msg Player ' }) @@ -194,20 +194,30 @@ for (const supportedVersion of mc.supportedVersions) { } } else { // 1.19+ - const sender = JSON.parse(data.senderName) - const msgPayload = data.formattedMessage ? JSON.parse(data.formattedMessage) : data.plainMessage - const plainMessage = client.parseMessage(msgPayload).toString() + const plainMessage = data.formattedMessage ? client.parseMessage(JSON.parse(data.formattedMessage)).toString() : data.plainMessage if (chatCount === 1) { assert.strictEqual(plainMessage, 'hello everyone; I have logged in.') - const clickEvent = sender[CLICK_EVENT] - assert.strictEqual(clickEvent.action, 'suggest_command') - assert.ok(['/tell Player ', '/msg Player '].includes(clickEvent.value || clickEvent.command)) - assert.strictEqual(sender.text, 'Player') + // In 1.21+, senderName can be null when networkName is empty (NBT type: end) + if (data.senderName) { + const sender = JSON.parse(data.senderName) + if (sender) { // ADD THIS CHECK + const clickEvent = sender[CLICK_EVENT] + if (clickEvent) { // AND THIS ONE + assert.strictEqual(clickEvent.action, 'suggest_command') + assert.ok(['/tell Player ', '/msg Player '].includes(clickEvent.value || clickEvent.command)) + assert.strictEqual(sender.text, 'Player') + } + } + } } else if (chatCount === 2) { - const plainSender = client.parseMessage(sender).toString() + // In 1.21+, senderName can be null + if (data.senderName) { + const sender = JSON.parse(data.senderName) + const plainSender = client.parseMessage(sender).toString() + assert.strictEqual(plainSender, 'Server') + } assert.strictEqual(plainMessage, 'hello') - assert.strictEqual(plainSender, 'Server') wrap.removeListener('line', lineListener) client.end() done() From 5327652379f8ae2344a13560e03b3a93dedd5e13 Mon Sep 17 00:00:00 2001 From: HenkjanvDiermen Date: Mon, 15 Dec 2025 15:37:13 +0100 Subject: [PATCH 2/2] Update minecraft-data to ^3.101.0 for 1.21.9 support --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 63e1c75d..ac3a2303 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "debug": "^4.3.2", "endian-toggle": "^0.0.0", "lodash.merge": "^4.3.0", - "minecraft-data": "^3.78.0", + "minecraft-data": "^3.101.0", "minecraft-folder-path": "^1.2.0", "node-fetch": "^2.6.1", "node-rsa": "^0.4.2",