Compare commits

...

5 commits

Author SHA1 Message Date
IceTank
742fcbf512
Merge 6a15f4a0c6 into 590dc33fed 2024-11-15 03:49:43 +00:00
dependabot[bot]
590dc33fed
Bump @types/node from 20.16.15 to 22.7.9 (#1345)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.16.15 to 22.7.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-27 21:29:40 +01:00
rom1504bot
89de052d44
Release 1.50.0 (#1346)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2024-10-26 23:54:20 +02:00
Grooble
5bebac3662
1.21 Support (#1342)
* Update default version

* Update README

* 1.21.1

* Update version.js

* Update ci.yml

* Update version.js

* add values for vec2f and ChatTypes

* fix lint

* fix server tests

* fix lint

* update mcdata

* remove debug install

---------

Co-authored-by: Romain Beaumont <romain.rom1@gmail.com>
2024-10-26 23:52:46 +02:00
IceTank
6a15f4a0c6 Add onLoginPluginRequest callback in client Options 2024-03-27 13:49:43 +01:00
10 changed files with 55 additions and 8 deletions

View file

@ -151,6 +151,7 @@ Returns a `Client` instance and perform login.
* realmId : The id of the Realm to join.
* pickRealm(realms) : A function which will have an array of the user Realms (joined/owned) passed to it. The function should return a Realm.
* Client : You can pass a custom client class to use instead of the default one, which would allow you to create completely custom communication. Also note that you can use the `stream` option instead where you can supply custom duplex, but this will still use serialization/deserialization of packets.
* onLoginPluginRequest(packet, meta) : (optional) callback that is called when a `login_plugin_request` packet is received. When this option is defined and of type function then the callback is called and expected to write a `login_plugin_response` packet on client with at least `messageId: packet.messageId` in the payload. If no login_plugin_response is send the connection will halt. When the `onLoginPluginRequest` option is not defined or not of type function then a login_plugin_response packet with `messageId: packet.messageId` and no data is send.
## mc.Client(isServer,version,[customPackets])

View file

@ -1,5 +1,8 @@
# History
## 1.50.0
* [1.21 Support (#1342)](https://github.com/PrismarineJS/node-minecraft-protocol/commit/5bebac36620d8f8ec256d19483e20e643d63de2a) (thanks @GroobleDierne)
## 1.49.0
* [support 1.20.6 (#1338)](https://github.com/PrismarineJS/node-minecraft-protocol/commit/0b0012d60f0f1648be5ff705e7694bb1cd4ec37c) (thanks @rom1504)

View file

@ -13,7 +13,7 @@ Parse and serialize minecraft packets, plus authentication and encryption.
* Supports Minecraft PC version 1.7.10, 1.8.8, 1.9 (15w40b, 1.9, 1.9.1-pre2, 1.9.2, 1.9.4),
1.10 (16w20a, 1.10-pre1, 1.10, 1.10.1, 1.10.2), 1.11 (16w35a, 1.11, 1.11.2), 1.12 (17w15a, 17w18b, 1.12-pre4, 1.12, 1.12.1, 1.12.2), and 1.13 (17w50a, 1.13, 1.13.1, 1.13.2-pre1, 1.13.2-pre2, 1.13.2), 1.14 (1.14, 1.14.1, 1.14.3, 1.14.4)
, 1.15 (1.15, 1.15.1, 1.15.2) and 1.16 (20w13b, 20w14a, 1.16-rc1, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5), 1.17 (21w07a, 1.17, 1.17.1), 1.18 (1.18, 1.18.1 and 1.18.2), 1.19 (1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6)
, 1.15 (1.15, 1.15.1, 1.15.2) and 1.16 (20w13b, 20w14a, 1.16-rc1, 1.16, 1.16.1, 1.16.2, 1.16.3, 1.16.4, 1.16.5), 1.17 (21w07a, 1.17, 1.17.1), 1.18 (1.18, 1.18.1 and 1.18.2), 1.19 (1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21.1)
* Parses all packets and emits events with packet fields as JavaScript
objects.
* Send a packet by supplying fields as a JavaScript object.

View file

@ -1,6 +1,6 @@
{
"name": "minecraft-protocol",
"version": "1.49.0",
"version": "1.50.0",
"description": "Parse and serialize minecraft packets, plus authentication and encryption.",
"main": "src/index.js",
"types": "src/index.d.ts",
@ -33,7 +33,7 @@
},
"browser": "src/browser.js",
"devDependencies": {
"@types/node": "^20.2.1",
"@types/node": "^22.7.9",
"espower-loader": "^1.0.0",
"intelli-espower-loader": "^1.0.0",
"minecraft-packets": "^1.1.5",
@ -52,7 +52,7 @@
"endian-toggle": "^0.0.0",
"lodash.get": "^4.1.2",
"lodash.merge": "^4.3.0",
"minecraft-data": "^3.75.0",
"minecraft-data": "^3.78.0",
"minecraft-folder-path": "^1.2.0",
"node-fetch": "^2.6.1",
"node-rsa": "^0.4.2",

View file

@ -18,7 +18,13 @@ module.exports = function (client, options) {
const above385 = mcdata.version.version >= 385
if (above385) { // 1.13-pre3 (385) added Added Login Plugin Message (https://wiki.vg/Protocol_History#1.13-pre3)
client.on('login_plugin_request', onLoginPluginRequest)
client.on('login_plugin_request', (...args) => {
if (options.onLoginPluginRequest != null && typeof options.onLoginPluginRequest === 'function') {
options.onLoginPluginRequest(...args)
} else {
onLoginPluginRequest(...args)
}
})
}
const channelNames = above385 ? ['minecraft:register', 'minecraft:unregister'] : ['REGISTER', 'UNREGISTER']

1
src/index.d.ts vendored
View file

@ -154,6 +154,7 @@ declare module 'minecraft-protocol' {
disableChatSigning?: boolean
/** Pass custom client implementation if needed. */
Client?: Client
onLoginPluginRequest?: (packet: any, meta: any, ...args: any[]) => void
}
export class Server extends EventEmitter {

View file

@ -1,6 +1,6 @@
'use strict'
module.exports = {
defaultVersion: '1.20.6',
supportedVersions: ['1.7', '1.8.8', '1.9.4', '1.10.2', '1.11.2', '1.12.2', '1.13.2', '1.14.4', '1.15.2', '1.16.5', '1.17.1', '1.18.2', '1.19', '1.19.2', '1.19.3', '1.19.4', '1.20', '1.20.1', '1.20.2', '1.20.4', '1.20.6']
defaultVersion: '1.21.1',
supportedVersions: ['1.7', '1.8.8', '1.9.4', '1.10.2', '1.11.2', '1.12.2', '1.13.2', '1.14.4', '1.15.2', '1.16.5', '1.17.1', '1.18.2', '1.19', '1.19.2', '1.19.3', '1.19.4', '1.20', '1.20.1', '1.20.2', '1.20.4', '1.20.6', '1.21.1']
}

View file

@ -284,6 +284,36 @@ for (const supportedVersion of mc.supportedVersions) {
})
})
})
it('sends a valid login_plugin_request packet', function (done) {
const onLoginPluginRequest = function (packet) {
client.write('login_plugin_response', {
messageId: packet.messageId,
data: Buffer.from('Hallo from nmp')
})
}
const client = mc.createClient({
username: 'Player',
version: version.minecraftVersion,
port: PORT,
onLoginPluginRequest: onLoginPluginRequest
})
client.on('error', err => done(err))
client.on('login', function () {
client.write('login_plugin_request', {
messageId: 0,
channel: 'minecraft:brand',
data: Buffer.from([0x00])
})
})
client.on('login_plugin_response', function (packet) {
assert.strictEqual(packet.messageId, 0)
assert.strictEqual(!!packet.data)
console.info('Client send in plugin response: ' + packet.data.toString())
client.end()
done()
})
})
})
describe.skip('online', function () {

View file

@ -135,6 +135,9 @@ const values = {
delete results['..']
return results
},
vec2f: {
x: 0, y: 0
},
vec3f: {
x: 0, y: 0, z: 0
},
@ -153,6 +156,9 @@ const values = {
SlotComponent: {
type: 'hide_tooltip'
},
ChatTypes: {
registryIndex: 1
},
SlotComponentType: 0,
nbt: nbtValue,
optionalNbt: nbtValue,

View file

@ -83,7 +83,7 @@ for (const supportedVersion of mc.supportedVersions) {
plainMessage: message,
signedChatContent: '',
unsignedChatContent: JSON.stringify({ text: message }),
type: 0,
type: mcData.supportFeature('incrementedChatType') ? { registryIndex: 1 } : 0,
senderUuid: 'd3527a0b-bc03-45d5-a878-2aafdd8c8a43', // random
senderName: JSON.stringify({ text: sender }),
senderTeam: undefined,