Parse and serialize minecraft packets, plus authentication and encryption.
rom1504 on master
allow false as beforePing callb… (compare)
rom1504 on master
Fallback version for dynamic ve… (compare)
u9g on master
Add motdMsg to createServer (#9… (compare)
u9g on npm_and_yarn
u9g on master
Bump standard from 16.0.4 to 17… (compare)
master/src/createClient.js
27 const mcData = require('minecraft-data')(optVersion)
28 if (!mcData) throw new Error(`unsupported protocol version: ${optVersion}`)
29 const version = mcData.version
30 options.majorVersion = version.majorVersion
31 options.protocolVersion = version.version
32 const hideErrors = options.hideErrors || false
33
34 const client = new Client(false, version.minecraftVersion, options.customPackets, hideErrors)
35
36 tcpDns(client, options)
>37 if (options.auth === 'microsoft') {
38 microsoftAuth.authenticate(client, options)
39 } else {
40 auth(client, options)
41 }
42 if (options.version === false) autoVersion(client, options)
43 setProtocol(client, options)
44 keepalive(client, options)
45 encrypt(client, options)
46 play(client, options)
47 compress(client, options)
<Kashall> @extremeheat Encountered a strange bug here with latest protocol: https://github.com/PrismarineJS/prismarine-auth/blob/0223a23039242068b11cd99a6ade184034d539d8/src/TokenManagers/LiveTokenManager.js#L160
|afk | Error: Authentication failed, timed out
0|afk | at LiveTokenManager.authDeviceCode (/root/MinecraftAFKBot/node_modules/prismarine-auth/src/TokenManagers/LiveTokenManager.js:160:11)
0|afk | at runMicrotasks (<anonymous>)
0|afk | at processTicksAndRejections (internal/process/task_queues.js:95:5)
0|afk | at async MicrosoftAuthFlow.getMsaToken (/root/MinecraftAFKBot/node_modules/prismarine-auth/src/MicrosoftAuthFlow.js:90:19)
0|afk | at async retry.msa.forceRefresh (/root/MinecraftAFKBot/node_modules/prismarine-auth/src/MicrosoftAuthFlow.js:118:26)
0|afk | at async retry (/root/MinecraftAFKBot/node_modules/prismarine-auth/src/MicrosoftAuthFlow.js:22:14)
0|afk | at async MicrosoftAuthFlow.getXboxToken (/root/MinecraftAFKBot/node_modules/prismarine-auth/src/MicrosoftAuthFlow.js:117:14)
0|afk | at async retry.xbl.forceRefresh (/root/MinecraftAFKBot/node_modules/prismarine-auth/src/MicrosoftAuthFlow.js:144:22)
0|afk | at async retry (/root/MinecraftAFKBot/node_modules/prismarine-auth/src/MicrosoftAuthFlow.js:22:14)
0|afk | at async MicrosoftAuthFlow.getMinecraftJavaToken (/root/MinecraftAFKBot/node_modules/prismarine-auth/src/MicrosoftAuthFlow.js:143:7)
I know this is a catch all error but forsome reason it just instantly kicks me to this error for a specific account.
<Abulkhaiyr> `const mc = require("minecraft-protocol");
const World = require("prismarine-world")("1.16");
const Chunk = require("prismarine-chunk")("1.16");
const Anvil = require("prismarine-provider-anvil").Anvil("1.16");
const Vec3 = require("vec3");
const server = mc.createServer({
"online-mode": true,
encryption: true,
host: "localhost",
port: 25565,
version: "1.16",
});
const mcData = require("minecraft-data")(server.version);
const loginPacket = mcData.loginPacket;
function generateSimpleChunk(chunkX, chunkZ) {
const chunk = new Chunk();
for (let x = 0; x < 16; x++) {
for (let z = 0; z < 16; z++) {
chunk.setBlockType(new Vec3(x, 50, z), 2);
for (let y = 0; y < 256; y++) {
chunk.setSkyLight(new Vec3(x, y, z), 15);
}
}
}
return chunk;
}
const world = new World(generateSimpleChunk, new Anvil("./world"));
world.ch;
server.on("login", function (client) {
client.write("login", {
entityId: client.id,
isHardcore: false,
gameMode: 0,
previousGameMode: 1,
worldNames: loginPacket.worldNames,
dimensionCodec: loginPacket.dimensionCodec,
dimension: loginPacket.dimension,
worldName: "minecraft:overworld",
hashedSeed: [0, 0],
maxPlayers: server.maxPlayers,
viewDistance: 10,
reducedDebugInfo: false,
enableRespawnScreen: true,
isDebug: false,
isFlat: false,
});
// client.write("map_chunk", {
// x: 0,
// z: 0,
// groundUp: true,
// biomes: chunk.dumpBiomes !== undefined ? chunk.dumpBiomes() : undefined,
// heightmaps: {
// type: "compound",
// name: "",
// value: {}, // Client will accept fake heightmap
// },
// bitMap: chunk.getMask(),
// chunkData: chunk.dump(),
// blockEntities: [],
// });
client.write("position", {
x: 15,
y: 101,
z: 15,
yaw: 137,
pitch: 0,
flags: 0x00,
});
});`
<Abulkhaiyr> ```const mc = require("minecraft-protocol");
const World = require("prismarine-world")("1.16");
const Chunk = require("prismarine-chunk")("1.16");
const Anvil = require("prismarine-provider-anvil").Anvil("1.16");
const Vec3 = require("vec3");
const server = mc.createServer({
"online-mode": true,
encryption: true,
host: "localhost",
port: 25565,
version: "1.16",
});
const mcData = require("minecraft-data")(server.version);
const loginPacket = mcData.loginPacket;
function generateSimpleChunk(chunkX, chunkZ) {
const chunk = new Chunk();
for (let x = 0; x < 16; x++) {
for (let z = 0; z < 16; z++) {
chunk.setBlockType(new Vec3(x, 50, z), 2);
for (let y = 0; y < 256; y++) {
chunk.setSkyLight(new Vec3(x, y, z), 15);
}
}
}
return chunk;
}
const world = new World(generateSimpleChunk, new Anvil("./world"));
world.ch;
server.on("login", function (client) {
client.write("login", {
entityId: client.id,
isHardcore: false,
gameMode: 0,
previousGameMode: 1,
worldNames: loginPacket.worldNames,
dimensionCodec: loginPacket.dimensionCodec,
dimension: loginPacket.dimension,
worldName: "minecraft:overworld",
hashedSeed: [0, 0],
maxPlayers: server.maxPlayers,
viewDistance: 10,
reducedDebugInfo: false,
enableRespawnScreen: true,
isDebug: false,
isFlat: false,
});
// client.write("map_chunk", {
// x: 0,
// z: 0,
// groundUp: true,
// biomes: chunk.dumpBiomes !== undefined ? chunk.dumpBiomes() : undefined,
// heightmaps: {
// type: "compound",
// name: "",
// value: {}, // Client will accept fake heightmap
// },
// bitMap: chunk.getMask(),
// chunkData: chunk.dump(),
// blockEntities: [],
// });
client.write("position", {
x: 15,
y: 101,
z: 15,
yaw: 137,
pitch: 0,
flags: 0x00,
});
});
```
client.queue('player_action', let action = {action: 5, runtime_entity_id: client.uuid, position:0, face: 0})
throw e
^
TypeError: SizeOf error for undefined : Cannot read properties of undefined (reading 'valueOf')
at Object.sizeOfVarLong [as varint64] (/mc/node_modules/bedrock-protocol/src/datatypes/varlong.js:2:20)
at Object.packet_player_action (eval at compile (/mc/node_modules/protodef/src/compiler.js:258:12), <anonymous>:2466:29)
at eval (eval at compile (/mc/node_modules/protodef/src/compiler.js:258:12), <anonymous>:1686:66)
at mcpe_packet (eval at compile (/mc/node_modules/protodef/src/compiler.js:258:12), <anonymous>:1822:9)
at CompiledProtodef.sizeOf (/mc/node_modules/protodef/src/compiler.js:89:14)
at e.message (/mc/node_modules/protodef/src/compiler.js:96:40)
at tryCatch (/mc/node_modules/protodef/src/utils.js:50:16)
at CompiledProtodef.createPacketBuffer (/mc/node_modules/protodef/src/compiler.js:96:20)
at Serializer.createPacketBuffer (/mc/node_modules/protodef/src/serializer.js:12:23)
at Client.queue (/mc/node_modules/bedrock-protocol/src/connection.js:77:36)
js
PartialReadError: Read error for undefined : Missing characters in string, found size is 40799 expected size was 420740095
at new ExtendableError (C:\Users\Jason\Documents\js-projects\cosmic-lore-bot\node_modules\protodef\src\utils.js:63:13)
at new PartialReadError (C:\Users\Jason\Documents\js-projects\cosmic-lore-bot\node_modules\protodef\src\utils.js:70:5)
at Object.string (eval at compile (C:\Users\Jason\Documents\js-projects\cosmic-lore-bot\node_modules\protodef\src\compiler.js:258:12), <anonymous>:47:15)
at eval (eval at compile (C:\Users\Jason\Documents\js-projects\cosmic-lore-bot\node_modules\protodef\src\compiler.js:258:12), <anonymous>:1837:69)
at eval (eval at compile (C:\Users\Jason\Documents\js-projects\cosmic-lore-bot\node_modules\protodef\src\compiler.js:258:12), <anonymous>:1923:11)
at Object.packet_declare_recipes (eval at compile (C:\Users\Jason\Documents\js-projects\cosmic-lore-bot\node_modules\protodef\src\compiler.js:258:12), <anonymous>:1928:9)
at eval (eval at compile (C:\Users\Jason\Documents\js-projects\cosmic-lore-bot\node_modules\protodef\src\compiler.js:258:12), <anonymous>:2041:70)
at packet (eval at compile (C:\Users\Jason\Documents\js-projects\cosmic-lore-bot\node_modules\protodef\src\compiler.js:258:12), <anonymous>:2046:9)
at CompiledProtodef.read (C:\Users\Jason\Documents\js-projects\cosmic-lore-bot\node_modules\protodef\src\compiler.js:70:12)
at e.message (C:\Users\Jason\Documents\js-projects\cosmic-lore-bot\node_modules\protodef\src\compiler.js:111:49)
<TheGameSpider> Hello, I am trying to send custom_payload
packet using
client.write("custom_payload", packet)
, and I am getting this error
Caught exception: RangeError [ERR_INVALID_ARG_VALUE]: The argument 'size' is invalid. Received NaN
at Function.allocUnsafe (node:buffer:371:3)
at CompiledProtodef.createPacketBuffer (/home/ubuntu/mc/node_modules/protodef/src/compiler.js:101:27)
at Serializer.createPacketBuffer (/home/ubuntu/mc/node_modules/protodef/src/serializer.js:12:23)
at Serializer._transform (/home/ubuntu/mc/node_modules/protodef/src/serializer.js:18:18)
at Serializer.Transform._read (/home/ubuntu/mc/node_modules/readable-stream/lib/_stream_transform.js:177:10)
at Serializer.Transform._write (/home/ubuntu/mc/node_modules/readable-stream/lib/_stream_transform.js:164:83)
at doWrite (/home/ubuntu/mc/node_modules/readable-stream/lib/_stream_writable.js:409:139)
at writeOrBuffer (/home/ubuntu/mc/node_modules/readable-stream/lib/_stream_writable.js:398:5)
at Serializer.Writable.write (/home/ubuntu/mc/node_modules/readable-stream/lib/_stream_writable.js:307:11)
at Client.write (/home/ubuntu/mc/node_modules/minecraft-protocol/src/client.js:221:21) {
code: 'ERR_INVALID_ARG_VALUE',
field: 'play.toServer'
}
<paradise> ```js
const mc = require('minecraft-protocol');
const handleServer = (server) => {
try {
var client = mc.createClient({
host: "localhost", // optional
port: 25565, // optional
username: "Symphony",
version: false
});
client.on('login', function(packet) {
client.write('chat', {message: "xyz"});
client.end();
});
} catch (e) { console.error(e); }
}
```