mca-json 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/mca-find-signs.js +10 -10
- package/dist/bin/mca-find-signs.js.map +1 -1
- package/dist/bin/mca-remove-chunks.js +3 -3
- package/dist/bin/mca-remove-chunks.js.map +1 -1
- package/dist/bin/nbt-get-player-location.js +2 -2
- package/dist/bin/nbt-get-player-location.js.map +1 -1
- package/dist/lib/block-data.d.ts.map +1 -1
- package/dist/lib/block-data.js +3 -2
- package/dist/lib/block-data.js.map +1 -1
- package/dist/nbt/nbt-byte-array.js +2 -2
- package/dist/nbt/nbt-byte-array.js.map +1 -1
- package/dist/nbt/nbt-byte.js +1 -1
- package/dist/nbt/nbt-byte.js.map +1 -1
- package/dist/nbt/nbt-compound.js +2 -2
- package/dist/nbt/nbt-compound.js.map +1 -1
- package/dist/nbt/nbt-double.js +1 -1
- package/dist/nbt/nbt-double.js.map +1 -1
- package/dist/nbt/nbt-float.js +1 -1
- package/dist/nbt/nbt-float.js.map +1 -1
- package/dist/nbt/nbt-int-array.js +2 -2
- package/dist/nbt/nbt-int-array.js.map +1 -1
- package/dist/nbt/nbt-int.js +1 -1
- package/dist/nbt/nbt-int.js.map +1 -1
- package/dist/nbt/nbt-list.js +4 -4
- package/dist/nbt/nbt-list.js.map +1 -1
- package/dist/nbt/nbt-long-array.js +2 -2
- package/dist/nbt/nbt-long-array.js.map +1 -1
- package/dist/nbt/nbt-long.js +1 -1
- package/dist/nbt/nbt-long.js.map +1 -1
- package/dist/nbt/nbt-short.js +1 -1
- package/dist/nbt/nbt-short.js.map +1 -1
- package/dist/nbt/snbt-parse.js +2 -2
- package/dist/nbt/snbt-parse.js.map +1 -1
- package/package.json +1 -1
- package/src/bin/mca-find-signs.ts +10 -10
- package/src/bin/mca-remove-chunks.ts +3 -3
- package/src/bin/nbt-get-player-location.ts +2 -2
- package/src/lib/block-data.ts +3 -2
- package/src/nbt/nbt-byte-array.ts +2 -2
- package/src/nbt/nbt-byte.ts +1 -1
- package/src/nbt/nbt-compound.ts +2 -2
- package/src/nbt/nbt-double.ts +1 -1
- package/src/nbt/nbt-float.ts +1 -1
- package/src/nbt/nbt-int-array.ts +2 -2
- package/src/nbt/nbt-int.ts +1 -1
- package/src/nbt/nbt-list.ts +4 -4
- package/src/nbt/nbt-long-array.ts +2 -2
- package/src/nbt/nbt-long.ts +1 -1
- package/src/nbt/nbt-short.ts +1 -1
- package/src/nbt/snbt-parse.ts +2 -2
|
@@ -67,7 +67,7 @@ for (const file of args.MCA_FILE) {
|
|
|
67
67
|
}
|
|
68
68
|
console.log(JSON.stringify(signs, null, 4));
|
|
69
69
|
async function processFile(filename) {
|
|
70
|
-
debugLog(
|
|
70
|
+
debugLog('Reading file: %s', filename);
|
|
71
71
|
if (args['--verbose']) {
|
|
72
72
|
console.log(`Reading file: ${filename}`);
|
|
73
73
|
}
|
|
@@ -79,7 +79,7 @@ async function processFile(filename) {
|
|
|
79
79
|
const chunkKey = chunk.chunkKey() || '';
|
|
80
80
|
const signs = processChunk(chunk);
|
|
81
81
|
if (signs.length > 0) {
|
|
82
|
-
debugLog(
|
|
82
|
+
debugLog('Found %d signs in chunk: %s', signs.length, chunkKey);
|
|
83
83
|
if (args['--verbose']) {
|
|
84
84
|
console.log(`Found ${signs.length} signs in chunk ${chunkKey}.`);
|
|
85
85
|
}
|
|
@@ -93,13 +93,13 @@ function processChunk(chunk) {
|
|
|
93
93
|
const foundSigns = [];
|
|
94
94
|
for (const blockName of blockNames) {
|
|
95
95
|
if (blockName.match(/^minecraft:.+_sign$/)) {
|
|
96
|
-
debugLog(
|
|
96
|
+
debugLog('Chunk lists sign name: %s', blockName);
|
|
97
97
|
const listOfBlockCoordinates = chunk.findBlocksByName(blockName);
|
|
98
98
|
if (listOfBlockCoordinates.length === 0) {
|
|
99
99
|
debugLog(`Possible corruption - no blocks found for sign: ${blockName}`);
|
|
100
100
|
}
|
|
101
101
|
for (const coords of listOfBlockCoordinates) {
|
|
102
|
-
debugLog(
|
|
102
|
+
debugLog('Checking block at coordinates: %o', coords);
|
|
103
103
|
const block = chunk.getBlock(coords);
|
|
104
104
|
if (!(block instanceof Sign)) {
|
|
105
105
|
throw new Error(`Block is supposed to be a sign: ${block.name}`);
|
|
@@ -107,20 +107,20 @@ function processChunk(chunk) {
|
|
|
107
107
|
const front = block.frontText();
|
|
108
108
|
const back = block.backText();
|
|
109
109
|
const text = [...front, ...(back ?? [])].join('');
|
|
110
|
-
debugLog(
|
|
111
|
-
debugLog(
|
|
110
|
+
debugLog('Front: %o', front);
|
|
111
|
+
debugLog('Back: %o', back);
|
|
112
112
|
if (args['--blank'] && text.length !== 0) {
|
|
113
|
-
debugLog(
|
|
113
|
+
debugLog('Skipping non-blank sign.');
|
|
114
114
|
continue;
|
|
115
115
|
}
|
|
116
116
|
if (args['--generated'] && !text.match(/^[^a-z0-9]*$/i)) {
|
|
117
|
-
debugLog(
|
|
117
|
+
debugLog('Skipping user-created sign.');
|
|
118
118
|
}
|
|
119
119
|
if (args['--user'] && !text.match(/[a-z0-9]/i)) {
|
|
120
|
-
debugLog(
|
|
120
|
+
debugLog('Skipping a possibly generated sign.');
|
|
121
121
|
continue;
|
|
122
122
|
}
|
|
123
|
-
debugLog(
|
|
123
|
+
debugLog('Found a matching sign.');
|
|
124
124
|
if (args['--verbose']) {
|
|
125
125
|
console.log(`Found a matching sign: ${JSON.stringify(front)} and ${JSON.stringify(back)}`);
|
|
126
126
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mca-find-signs.js","sourceRoot":"","sources":["../../src/bin/mca-find-signs.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport debug from 'debug';\nimport neodoc from 'neodoc';\nimport { Anvil } from '../lib/anvil.js';\nimport { Chunk } from '../lib/chunk.js';\nimport { Sign } from '../block/sign.js';\nimport { readFile } from 'node:fs/promises';\n\ninterface SignInfo {\n chunkX: number;\n chunkZ: number;\n x: number;\n y: number;\n z: number;\n front: string[];\n back: string[] | null;\n}\n\ninterface Args {\n '--blank'?: boolean;\n '--generated'?: boolean;\n '--first'?: boolean;\n '--user'?: boolean;\n '--verbose'?: boolean;\n MCA_FILE?: string[];\n}\n\nconst debugLog = debug('mca-find-signs');\nconst args: Args = neodoc.run(\n `Usage: mca-find-signs [OPTIONS] MCA_FILE...\n\nExtracts sign coordinates from MCA files. This is designed to find different\ncategories of signs.\n\n* Blank signs are blank on both sides.\n* Generated signs can be blank or have any non-numeric and non-alphabetic\n characters. This is so igloos with \"<----\" and \"---->\" are included.\n* User-created signs must have at least a number or a letter on the front or\n the back. There's no way to tell from the block data that a user placed a\n sign, but this is a good heuristic.\n\nThe default output is a JSON array that shows the following information:\n\n[\n {\n \"chunkX\": 0,\n \"chunkZ\": 3,\n \"x\": 12,\n \"y\": 34,\n \"z\": 56,\n \"front\": [\"Line 1\", \"Line 2\", \"Line 3\", \"Line 4\"],\n \"back\": [\"Line 1\", \"Line 2\", \"Line 3\", \"Line 4\"]\n },\n ...\n]\n\nOptions:\n --blank Only show blank signs. Conflicts with --generated and --user.\n --generated Only show generated signs. Conflicts with --blank and --user.\n --user Only show user-created signs. Conflicts with --blank and --generated.\n --first Stop scanning a chunk after the first sign is found.\n -h, --help Show this message.\n -v, --verbose Show more information during processing.\n`,\n {\n argv: [...process.argv].slice(2),\n laxPlacement: true,\n }\n);\n\nif (!args.MCA_FILE?.length) {\n console.error('No files specified.');\n process.exit(1);\n}\n\nif (\n (args['--blank'] ? 1 : 0) +\n (args['--generated'] ? 1 : 0) +\n (args['--user'] ? 1 : 0) >\n 1\n) {\n console.error(\n 'Conflicting options specified. Please choose only one of --blank, --generated, or --user.'\n );\n process.exit(1);\n}\n\nconst signs: SignInfo[] = [];\n\nfor (const file of args.MCA_FILE) {\n try {\n const moreSigns = await processFile(file);\n signs.push(...moreSigns);\n } catch (e) {\n console.error(`Error processing file ${file}: ${e}`);\n\n process.exit(1);\n }\n}\n\nconsole.log(JSON.stringify(signs, null, 4));\n\nasync function processFile(filename: string): Promise<SignInfo[]> {\n debugLog(`Reading file: ${filename}`);\n\n if (args['--verbose']) {\n console.log(`Reading file: ${filename}`);\n }\n\n const contents = await readFile(filename);\n const anvil = Anvil.fromBuffer(contents.buffer);\n const chunks = anvil.getAllChunks();\n const allSignsFound: SignInfo[] = [];\n\n for (const chunk of chunks) {\n const chunkKey = chunk.chunkKey() || '';\n const signs = processChunk(chunk);\n\n if (signs.length > 0) {\n debugLog(`Found ${signs.length} signs in chunk ${chunkKey}.`);\n\n if (args['--verbose']) {\n console.log(\n `Found ${signs.length} signs in chunk ${chunkKey}.`\n );\n }\n\n allSignsFound.push(...signs);\n }\n }\n\n return allSignsFound;\n}\n\nfunction processChunk(chunk: Chunk): SignInfo[] {\n const blockNames = chunk.uniqueBlockNames();\n const foundSigns: SignInfo[] = [];\n\n for (const blockName of blockNames) {\n if (blockName.match(/^minecraft:.+_sign$/)) {\n debugLog(`Chunk lists sign name: ${blockName}`);\n\n const listOfBlockCoordinates = chunk.findBlocksByName(blockName);\n\n if (listOfBlockCoordinates.length === 0) {\n debugLog(\n `Possible corruption - no blocks found for sign: ${blockName}`\n );\n }\n\n for (const coords of listOfBlockCoordinates) {\n debugLog(`Checking block at coordinates: ${coords}`);\n const block = chunk.getBlock(coords);\n\n if (!(block instanceof Sign)) {\n throw new Error(\n `Block is supposed to be a sign: ${block.name}`\n );\n }\n\n const front = block.frontText();\n const back = block.backText();\n const text = [...front, ...(back ?? [])].join('');\n debugLog(`Front: ${JSON.stringify(front)}`);\n debugLog(`Back: ${JSON.stringify(back)}`);\n\n if (args['--blank'] && text.length !== 0) {\n debugLog(`Skipping non-blank sign.`);\n continue;\n }\n\n if (args['--generated'] && !text.match(/^[^a-z0-9]*$/i)) {\n debugLog(`Skipping user-created sign.`);\n }\n\n if (args['--user'] && !text.match(/[a-z0-9]/i)) {\n debugLog(`Skipping a possible generated sign.`);\n continue;\n }\n\n debugLog(`Found a matching sign.`);\n\n if (args['--verbose']) {\n console.log(\n `Found a matching sign: ${JSON.stringify(front)} and ${JSON.stringify(back)}`\n );\n }\n\n const chunkCoordinates = chunk.chunkCoordinates();\n\n if (!chunkCoordinates) {\n throw new Error('Chunk coordinates not found.');\n }\n\n foundSigns.push({\n chunkX: chunkCoordinates[0],\n chunkZ: chunkCoordinates[1],\n x: coords[0],\n y: coords[1],\n z: coords[2],\n front,\n back: back ?? null,\n });\n\n if (args['--first']) {\n return foundSigns;\n }\n }\n }\n }\n\n return foundSigns;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mca-find-signs.js","sourceRoot":"","sources":["../../src/bin/mca-find-signs.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAqB5C,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACzC,MAAM,IAAI,GAAS,MAAM,CAAC,GAAG,CACzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCH,EACG;IACI,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,YAAY,EAAE,IAAI;CACrB,CACJ,CAAC;AAEF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,IACI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,EACH,CAAC;IACC,OAAO,CAAC,KAAK,CACT,2FAA2F,CAC9F,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,KAAK,GAAe,EAAE,CAAC;AAE7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC/B,IAAI,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;QAErD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAE5C,KAAK,UAAU,WAAW,CAAC,QAAgB;IACvC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAEvC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IACpC,MAAM,aAAa,GAAe,EAAE,CAAC;IAErC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAElC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnB,QAAQ,CAAC,6BAA6B,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEhE,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CACP,SAAS,KAAK,CAAC,MAAM,mBAAmB,QAAQ,GAAG,CACtD,CAAC;YACN,CAAC;YAED,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;IAED,OAAO,aAAa,CAAC;AACzB,CAAC;AAED,SAAS,YAAY,CAAC,KAAY;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAe,EAAE,CAAC;IAElC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,IAAI,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACzC,QAAQ,CAAC,2BAA2B,EAAE,SAAS,CAAC,CAAC;YAEjD,MAAM,sBAAsB,GAAG,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAEjE,IAAI,sBAAsB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtC,QAAQ,CACJ,mDAAmD,SAAS,EAAE,CACjE,CAAC;YACN,CAAC;YAED,KAAK,MAAM,MAAM,IAAI,sBAAsB,EAAE,CAAC;gBAC1C,QAAQ,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAErC,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CACX,mCAAmC,KAAK,CAAC,IAAI,EAAE,CAClD,CAAC;gBACN,CAAC;gBAED,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAClD,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBAC7B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBAE3B,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;oBACrC,SAAS;gBACb,CAAC;gBAED,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;oBACtD,QAAQ,CAAC,6BAA6B,CAAC,CAAC;gBAC5C,CAAC;gBAED,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC7C,QAAQ,CAAC,qCAAqC,CAAC,CAAC;oBAChD,SAAS;gBACb,CAAC;gBAED,QAAQ,CAAC,wBAAwB,CAAC,CAAC;gBAEnC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CACP,0BAA0B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAChF,CAAC;gBACN,CAAC;gBAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;gBAElD,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBACpD,CAAC;gBAED,UAAU,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;oBAC3B,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;oBAC3B,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;oBACZ,KAAK;oBACL,IAAI,EAAE,IAAI,IAAI,IAAI;iBACrB,CAAC,CAAC;gBAEH,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;oBAClB,OAAO,UAAU,CAAC;gBACtB,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC","sourcesContent":["#!/usr/bin/env node\n\nimport debug from 'debug';\nimport neodoc from 'neodoc';\nimport { Anvil } from '../lib/anvil.js';\nimport { Chunk } from '../lib/chunk.js';\nimport { Sign } from '../block/sign.js';\nimport { readFile } from 'node:fs/promises';\n\ninterface SignInfo {\n chunkX: number;\n chunkZ: number;\n x: number;\n y: number;\n z: number;\n front: string[];\n back: string[] | null;\n}\n\ninterface Args {\n '--blank'?: boolean;\n '--generated'?: boolean;\n '--first'?: boolean;\n '--user'?: boolean;\n '--verbose'?: boolean;\n MCA_FILE?: string[];\n}\n\nconst debugLog = debug('mca-find-signs');\nconst args: Args = neodoc.run(\n `Usage: mca-find-signs [OPTIONS] MCA_FILE...\n\nExtracts sign coordinates from MCA files. This is designed to find different\ncategories of signs.\n\n* Blank signs are blank on both sides.\n* Generated signs can be blank or have any non-numeric and non-alphabetic\n characters. This is so igloos with \"<----\" and \"---->\" are included.\n* User-created signs must have at least a number or a letter on the front or\n the back. There's no way to tell from the block data that a user placed a\n sign, but this is a good heuristic.\n\nThe default output is a JSON array that shows the following information:\n\n[\n {\n \"chunkX\": 0,\n \"chunkZ\": 3,\n \"x\": 12,\n \"y\": 34,\n \"z\": 56,\n \"front\": [\"Line 1\", \"Line 2\", \"Line 3\", \"Line 4\"],\n \"back\": [\"Line 1\", \"Line 2\", \"Line 3\", \"Line 4\"]\n },\n ...\n]\n\nOptions:\n --blank Only show blank signs. Conflicts with --generated and --user.\n --generated Only show generated signs. Conflicts with --blank and --user.\n --user Only show user-created signs. Conflicts with --blank and --generated.\n --first Stop scanning a chunk after the first sign is found.\n -h, --help Show this message.\n -v, --verbose Show more information during processing.\n`,\n {\n argv: [...process.argv].slice(2),\n laxPlacement: true,\n }\n);\n\nif (!args.MCA_FILE?.length) {\n console.error('No files specified.');\n process.exit(1);\n}\n\nif (\n (args['--blank'] ? 1 : 0) +\n (args['--generated'] ? 1 : 0) +\n (args['--user'] ? 1 : 0) >\n 1\n) {\n console.error(\n 'Conflicting options specified. Please choose only one of --blank, --generated, or --user.'\n );\n process.exit(1);\n}\n\nconst signs: SignInfo[] = [];\n\nfor (const file of args.MCA_FILE) {\n try {\n const moreSigns = await processFile(file);\n signs.push(...moreSigns);\n } catch (e) {\n console.error(`Error processing file ${file}: ${e}`);\n\n process.exit(1);\n }\n}\n\nconsole.log(JSON.stringify(signs, null, 4));\n\nasync function processFile(filename: string): Promise<SignInfo[]> {\n debugLog('Reading file: %s', filename);\n\n if (args['--verbose']) {\n console.log(`Reading file: ${filename}`);\n }\n\n const contents = await readFile(filename);\n const anvil = Anvil.fromBuffer(contents.buffer);\n const chunks = anvil.getAllChunks();\n const allSignsFound: SignInfo[] = [];\n\n for (const chunk of chunks) {\n const chunkKey = chunk.chunkKey() || '';\n const signs = processChunk(chunk);\n\n if (signs.length > 0) {\n debugLog('Found %d signs in chunk: %s', signs.length, chunkKey);\n\n if (args['--verbose']) {\n console.log(\n `Found ${signs.length} signs in chunk ${chunkKey}.`\n );\n }\n\n allSignsFound.push(...signs);\n }\n }\n\n return allSignsFound;\n}\n\nfunction processChunk(chunk: Chunk): SignInfo[] {\n const blockNames = chunk.uniqueBlockNames();\n const foundSigns: SignInfo[] = [];\n\n for (const blockName of blockNames) {\n if (blockName.match(/^minecraft:.+_sign$/)) {\n debugLog('Chunk lists sign name: %s', blockName);\n\n const listOfBlockCoordinates = chunk.findBlocksByName(blockName);\n\n if (listOfBlockCoordinates.length === 0) {\n debugLog(\n `Possible corruption - no blocks found for sign: ${blockName}`\n );\n }\n\n for (const coords of listOfBlockCoordinates) {\n debugLog('Checking block at coordinates: %o', coords);\n const block = chunk.getBlock(coords);\n\n if (!(block instanceof Sign)) {\n throw new Error(\n `Block is supposed to be a sign: ${block.name}`\n );\n }\n\n const front = block.frontText();\n const back = block.backText();\n const text = [...front, ...(back ?? [])].join('');\n debugLog('Front: %o', front);\n debugLog('Back: %o', back);\n\n if (args['--blank'] && text.length !== 0) {\n debugLog('Skipping non-blank sign.');\n continue;\n }\n\n if (args['--generated'] && !text.match(/^[^a-z0-9]*$/i)) {\n debugLog('Skipping user-created sign.');\n }\n\n if (args['--user'] && !text.match(/[a-z0-9]/i)) {\n debugLog('Skipping a possibly generated sign.');\n continue;\n }\n\n debugLog('Found a matching sign.');\n\n if (args['--verbose']) {\n console.log(\n `Found a matching sign: ${JSON.stringify(front)} and ${JSON.stringify(back)}`\n );\n }\n\n const chunkCoordinates = chunk.chunkCoordinates();\n\n if (!chunkCoordinates) {\n throw new Error('Chunk coordinates not found.');\n }\n\n foundSigns.push({\n chunkX: chunkCoordinates[0],\n chunkZ: chunkCoordinates[1],\n x: coords[0],\n y: coords[1],\n z: coords[2],\n front,\n back: back ?? null,\n });\n\n if (args['--first']) {\n return foundSigns;\n }\n }\n }\n }\n\n return foundSigns;\n}\n"]}
|
|
@@ -81,7 +81,7 @@ async function main() {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
async function processFile(filename, determinator) {
|
|
84
|
-
debugLog(
|
|
84
|
+
debugLog('Reading file: %s', filename);
|
|
85
85
|
if (args['--verbose']) {
|
|
86
86
|
console.log(`Reading file: ${filename}`);
|
|
87
87
|
}
|
|
@@ -92,13 +92,13 @@ async function processFile(filename, determinator) {
|
|
|
92
92
|
for (const chunk of chunks) {
|
|
93
93
|
const chunkKey = chunk.chunkKey() || '';
|
|
94
94
|
if (determinator(chunkKey)) {
|
|
95
|
-
debugLog(
|
|
95
|
+
debugLog('Preserving chunk: %s', chunkKey);
|
|
96
96
|
if (args['--verbose']) {
|
|
97
97
|
console.log(`Preserving chunk: ${chunkKey}`);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
else {
|
|
101
|
-
debugLog(
|
|
101
|
+
debugLog('Removing chunk: %s', chunkKey);
|
|
102
102
|
if (args['--verbose']) {
|
|
103
103
|
console.log(`Removing chunk: ${chunkKey}`);
|
|
104
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mca-remove-chunks.js","sourceRoot":"","sources":["../../src/bin/mca-remove-chunks.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport debug from 'debug';\nimport neodoc from 'neodoc';\nimport { Anvil } from '../lib/anvil.js';\nimport { readFile, writeFile } from 'node:fs/promises';\n\nconst debugLog = debug('mca-remove-chunks');\nconst args: {\n '--dry-run'?: boolean;\n '--remove'?: string[];\n '--remove-list'?: string;\n '--preserve'?: string[];\n '--preserve-list'?: string;\n '--verbose'?: boolean;\n MCA_FILE?: string[];\n} = neodoc.run(\n `Usage: mca-remove-chunks [OPTIONS] MCA_FILE...\n\nRemoves chunks from MCA files (region/r.*.*.mca or entities/r.*.*.mca).\n\nThis does not change the file size. Similar to deleting a file on a hard drive,\nthe space is marked as free but not actually removed. Minecraft will reuse or reclaim the space when the region file is next modified.\n\nYou can either specify chunk coordinates to preserve or chunk coordinates to remove, but not both.\n\nOptions:\n -h, --help Show this message.\n -n, --dry-run Do not write changes to the file.\n --remove CHUNK_COORDINATES...\n Remove chunks with these coordinates. Coordinates are in\n the format \"x,z\". May be specified multiple times.\n --remove-list FILE\n Remove chunks with coordinates specified in a text file.\n Each line of the file should have coordinates in the format\n \"x,z\". Safe to combine with --remove option.\n --preserve CHUNK_COORDINATES...\n Do not remove chunks with these coordinates. Coordinates\n are in the format \"x,z\". May be specified multiple times.\n --preserve-list FILE\n Preserve chunks with coordinates specified in a text file.\n Each line of the file should have coordinates in the format\n \"x,z\". Safe to combine with --preserve option.\n -v, --verbose Show more information during processing.\n`,\n {\n argv: [...process.argv].slice(2),\n laxPlacement: true,\n }\n);\n\nmain();\n\nasync function main() {\n if (!args.MCA_FILE?.length) {\n console.error('No files specified.');\n process.exit(1);\n }\n\n if (args['--remove-list']) {\n const coordinates = await readCoordinates(args['--remove-list']);\n\n if (!args['--remove']) {\n args['--remove'] = [];\n }\n\n args['--remove'].push(...coordinates);\n }\n\n if (args['--preserve-list']) {\n const coordinates = await readCoordinates(args['--preserve-list']);\n\n if (!args['--preserve']) {\n args['--preserve'] = [];\n }\n\n args['--preserve'].push(...coordinates);\n }\n\n if (args['--remove'] && args['--preserve']) {\n console.error('Cannot specify both --remove and --preserve options.');\n process.exit(1);\n }\n\n if (!args['--remove'] && !args['--preserve']) {\n console.error('Must specify either --remove or --preserve option.');\n process.exit(1);\n }\n\n if (args['--preserve'] && args['--verbose']) {\n console.log(`Preserving coordinates: ${args['--preserve'].join(' ')}`);\n }\n\n if (args['--remove'] && args['--verbose']) {\n console.log(`Removing coordinates: ${args['--remove'].join(' ')}`);\n }\n\n const determinator = makeDeterminator();\n\n for (const file of args.MCA_FILE) {\n try {\n await processFile(file, determinator);\n } catch (e) {\n console.error(`Error processing file ${file}: ${e}`);\n\n process.exit(1);\n }\n }\n}\n\nasync function processFile(\n filename: string,\n determinator: (chunkKey: string) => boolean\n) {\n debugLog(`Reading file: ${filename}`);\n\n if (args['--verbose']) {\n console.log(`Reading file: ${filename}`);\n }\n\n const contents = await readFile(filename);\n const anvil = Anvil.fromBuffer(contents.buffer);\n const chunks = anvil.getAllChunks();\n let changes = 0;\n\n for (const chunk of chunks) {\n const chunkKey = chunk.chunkKey() || '';\n\n if (determinator(chunkKey)) {\n debugLog(`Preserving chunk: ${chunkKey}`);\n\n if (args['--verbose']) {\n console.log(`Preserving chunk: ${chunkKey}`);\n }\n } else {\n debugLog(`Removing chunk: ${chunkKey}`);\n\n if (args['--verbose']) {\n console.log(`Removing chunk: ${chunkKey}`);\n }\n\n anvil.deleteChunk(chunk);\n changes += 1;\n }\n }\n\n if (args['--verbose']) {\n console.log(`Chunks removed: ${changes}/${chunks.length}`);\n }\n\n if (changes) {\n if (args['--dry-run']) {\n console.log(`DRY RUN: Would write changes to file: ${filename}`);\n } else {\n console.log(`Writing changes to file: ${filename}`);\n const modifiedBuffer = Buffer.from(anvil.buffer());\n await writeFile(filename, modifiedBuffer);\n }\n }\n}\n\nfunction makeDeterminator() {\n if (args['--preserve']) {\n const preservedCoordinates = new Set(args['--preserve']);\n\n return (chunkKey: string) => preservedCoordinates.has(chunkKey);\n } else if (args['--remove']) {\n const removedCoordinates = new Set(args['--remove']);\n\n return (chunkKey: string) => !removedCoordinates.has(chunkKey);\n } else {\n throw new Error('Invalid state: no determinator could be created.');\n }\n}\n\nasync function readCoordinates(filename: string): Promise<string[]> {\n const contents = await readFile(filename, 'utf-8');\n const lines = contents\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n return lines;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mca-remove-chunks.js","sourceRoot":"","sources":["../../src/bin/mca-remove-chunks.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport debug from 'debug';\nimport neodoc from 'neodoc';\nimport { Anvil } from '../lib/anvil.js';\nimport { readFile, writeFile } from 'node:fs/promises';\n\nconst debugLog = debug('mca-remove-chunks');\nconst args: {\n '--dry-run'?: boolean;\n '--remove'?: string[];\n '--remove-list'?: string;\n '--preserve'?: string[];\n '--preserve-list'?: string;\n '--verbose'?: boolean;\n MCA_FILE?: string[];\n} = neodoc.run(\n `Usage: mca-remove-chunks [OPTIONS] MCA_FILE...\n\nRemoves chunks from MCA files (region/r.*.*.mca or entities/r.*.*.mca).\n\nThis does not change the file size. Similar to deleting a file on a hard drive,\nthe space is marked as free but not actually removed. Minecraft will reuse or reclaim the space when the region file is next modified.\n\nYou can either specify chunk coordinates to preserve or chunk coordinates to remove, but not both.\n\nOptions:\n -h, --help Show this message.\n -n, --dry-run Do not write changes to the file.\n --remove CHUNK_COORDINATES...\n Remove chunks with these coordinates. Coordinates are in\n the format \"x,z\". May be specified multiple times.\n --remove-list FILE\n Remove chunks with coordinates specified in a text file.\n Each line of the file should have coordinates in the format\n \"x,z\". Safe to combine with --remove option.\n --preserve CHUNK_COORDINATES...\n Do not remove chunks with these coordinates. Coordinates\n are in the format \"x,z\". May be specified multiple times.\n --preserve-list FILE\n Preserve chunks with coordinates specified in a text file.\n Each line of the file should have coordinates in the format\n \"x,z\". Safe to combine with --preserve option.\n -v, --verbose Show more information during processing.\n`,\n {\n argv: [...process.argv].slice(2),\n laxPlacement: true,\n }\n);\n\nmain();\n\nasync function main() {\n if (!args.MCA_FILE?.length) {\n console.error('No files specified.');\n process.exit(1);\n }\n\n if (args['--remove-list']) {\n const coordinates = await readCoordinates(args['--remove-list']);\n\n if (!args['--remove']) {\n args['--remove'] = [];\n }\n\n args['--remove'].push(...coordinates);\n }\n\n if (args['--preserve-list']) {\n const coordinates = await readCoordinates(args['--preserve-list']);\n\n if (!args['--preserve']) {\n args['--preserve'] = [];\n }\n\n args['--preserve'].push(...coordinates);\n }\n\n if (args['--remove'] && args['--preserve']) {\n console.error('Cannot specify both --remove and --preserve options.');\n process.exit(1);\n }\n\n if (!args['--remove'] && !args['--preserve']) {\n console.error('Must specify either --remove or --preserve option.');\n process.exit(1);\n }\n\n if (args['--preserve'] && args['--verbose']) {\n console.log(`Preserving coordinates: ${args['--preserve'].join(' ')}`);\n }\n\n if (args['--remove'] && args['--verbose']) {\n console.log(`Removing coordinates: ${args['--remove'].join(' ')}`);\n }\n\n const determinator = makeDeterminator();\n\n for (const file of args.MCA_FILE) {\n try {\n await processFile(file, determinator);\n } catch (e) {\n console.error(`Error processing file ${file}: ${e}`);\n\n process.exit(1);\n }\n }\n}\n\nasync function processFile(\n filename: string,\n determinator: (chunkKey: string) => boolean\n) {\n debugLog('Reading file: %s', filename);\n\n if (args['--verbose']) {\n console.log(`Reading file: ${filename}`);\n }\n\n const contents = await readFile(filename);\n const anvil = Anvil.fromBuffer(contents.buffer);\n const chunks = anvil.getAllChunks();\n let changes = 0;\n\n for (const chunk of chunks) {\n const chunkKey = chunk.chunkKey() || '';\n\n if (determinator(chunkKey)) {\n debugLog('Preserving chunk: %s', chunkKey);\n\n if (args['--verbose']) {\n console.log(`Preserving chunk: ${chunkKey}`);\n }\n } else {\n debugLog('Removing chunk: %s', chunkKey);\n\n if (args['--verbose']) {\n console.log(`Removing chunk: ${chunkKey}`);\n }\n\n anvil.deleteChunk(chunk);\n changes += 1;\n }\n }\n\n if (args['--verbose']) {\n console.log(`Chunks removed: ${changes}/${chunks.length}`);\n }\n\n if (changes) {\n if (args['--dry-run']) {\n console.log(`DRY RUN: Would write changes to file: ${filename}`);\n } else {\n console.log(`Writing changes to file: ${filename}`);\n const modifiedBuffer = Buffer.from(anvil.buffer());\n await writeFile(filename, modifiedBuffer);\n }\n }\n}\n\nfunction makeDeterminator() {\n if (args['--preserve']) {\n const preservedCoordinates = new Set(args['--preserve']);\n\n return (chunkKey: string) => preservedCoordinates.has(chunkKey);\n } else if (args['--remove']) {\n const removedCoordinates = new Set(args['--remove']);\n\n return (chunkKey: string) => !removedCoordinates.has(chunkKey);\n } else {\n throw new Error('Invalid state: no determinator could be created.');\n }\n}\n\nasync function readCoordinates(filename: string): Promise<string[]> {\n const contents = await readFile(filename, 'utf-8');\n const lines = contents\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n return lines;\n}\n"]}
|
|
@@ -45,10 +45,10 @@ Options:
|
|
|
45
45
|
}
|
|
46
46
|
async function readInput(filename) {
|
|
47
47
|
if (!filename || filename === '-') {
|
|
48
|
-
debugLog(
|
|
48
|
+
debugLog('Reading from stdin');
|
|
49
49
|
return await getStdin.buffer();
|
|
50
50
|
}
|
|
51
|
-
debugLog(
|
|
51
|
+
debugLog('Reading file: %s', filename);
|
|
52
52
|
return readFile(filename);
|
|
53
53
|
}
|
|
54
54
|
async function processFile(filename) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-get-player-location.js","sourceRoot":"","sources":["../../src/bin/nbt-get-player-location.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACxD,IAAI,EAAE,CAAC;AAEP,KAAK,UAAU,IAAI;IACnB,MAAM,IAAI,GAEN,MAAM,CAAC,GAAG,CACd;;;;;;;;;;;;;;;;;;CAkBC,EACG;QACI,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,YAAY,EAAE,IAAI;KACrB,CACJ,CAAC;IAEE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;YAErD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAA4B;IACjD,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAChC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAC/B,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IACnC,CAAC;IAED,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-get-player-location.js","sourceRoot":"","sources":["../../src/bin/nbt-get-player-location.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport debug from 'debug';\nimport getStdin from 'get-stdin';\nimport neodoc from 'neodoc';\nimport { inflate } from 'pako';\nimport { Nbt } from '../nbt/nbt.js';\nimport { readFile } from 'node:fs/promises';\n\nconst debugLog = debug('mca-trim-chunks-without-signs');\nmain();\n\nasync function main() {\nconst args: {\n 'NBT_FILE'?: string[];\n} = neodoc.run(\n`Usage: nbt-get-player-locations NBT_FILE...\n\nScans a player NBT data file for the player location and prints it to stdout.\nNBT files can be compressed or uncompressed and this tool can handle both. If the filename is \"-\" or not provided, this will read from stdin.\n\nThe output is JSON with the following fields:\n\n{\n \"chunkX\": 7, # player's chunk X coordinate\n \"chunkZ\": -29 # player's chunk Z coordinate\n \"x\": 123, # player's X coordinate, rounded\n \"y\": 64, # player's Y coordinate, rounded\n \"z\": -456, # player's Z coordinate, rounded\n \"dimension\": \"minecraft:overworld\", # or \"minecraft:the_nether\" or \"minecraft:the_end\"\n}\n\nOptions:\n -h, --help Show this message.\n`,\n {\n argv: [...process.argv].slice(2),\n laxPlacement: true,\n }\n);\n\n if (!args.NBT_FILE?.length) {\n args.NBT_FILE = ['-'];\n }\n\n for (const file of args.NBT_FILE) {\n try {\n await processFile(file);\n } catch (e) {\n console.error(`Error processing file ${file}: ${e}`);\n\n process.exit(1);\n }\n }\n}\n\nasync function readInput(filename: string | undefined) {\n if (!filename || filename === '-') {\n debugLog('Reading from stdin');\n return await getStdin.buffer();\n }\n\n debugLog('Reading file: %s', filename);\n\n return readFile(filename);\n}\n\nasync function processFile(filename: string) {\n const inputBuffer = await readInput(filename);\n\n if (inputBuffer.length === 0) {\n if (filename === '-') {\n console.error('Input (stdin) is empty.');\n } else {\n console.error(`Input file is empty: ${filename}`);\n }\n console.error('Aborting. Use --help for usage.');\n process.exit(1);\n }\n\n let buffer = inputBuffer.buffer as ArrayBufferLike;\n\n try {\n buffer = inflate(inputBuffer).buffer;\n } catch (_ignore) {}\n\n const nbt = Nbt.fromBuffer(buffer);\n\n const dimension = nbt.findChild('Dimension')?.data;\n const x = nbt.findChild('Pos/0')?.data;\n const y = nbt.findChild('Pos/1')?.data;\n const z = nbt.findChild('Pos/2')?.data;\n\n if (typeof dimension !== 'string' || typeof x !== 'number' || typeof y !== 'number' || typeof z !== 'number') {\n console.error(`NBT file ${filename} does not contain valid player location data.`);\n process.exit(1);\n }\n\n const chunkX = Math.floor(x / 16);\n const chunkZ = Math.floor(z / 16);\n const output = {\n chunkX,\n chunkZ,\n x: Math.round(x),\n y: Math.round(y),\n z: Math.round(z),\n dimension,\n };\n console.log(JSON.stringify(output, null, 4));\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-data.d.ts","sourceRoot":"","sources":["../../src/lib/block-data.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"block-data.d.ts","sourceRoot":"","sources":["../../src/lib/block-data.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAkDxD,qBAAa,SAAS;IA+CP,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE;IA/C7B,MAAM,CAAC,sBAAsB,CACzB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,EAC7B,WAAW,CAAC,EAAE,YAAY;gBA2CnB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,QAAQ,EAAE,MAAM,EAAE;IAG7B,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ;IAI3C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAexC,eAAe,CAAC,KAAK,EAAE,MAAM;IAa7B,0BAA0B,CAAC,WAAW,EAAE,QAAQ;IAMhD,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAQhD,OAAO;;;;CA4BV"}
|
package/dist/lib/block-data.js
CHANGED
|
@@ -20,8 +20,9 @@ function parseBlockData(blockIds, bitData, paletteMap) {
|
|
|
20
20
|
if (bitsRead < 64) {
|
|
21
21
|
// These extra bits can have any values. They are not
|
|
22
22
|
// initialized before writing to disk.
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
const bitsToSkip = 64 - bitsRead;
|
|
24
|
+
bitData.getBits(bitsToSkip);
|
|
25
|
+
debugLog('Skipped %d bits', bitsToSkip);
|
|
25
26
|
}
|
|
26
27
|
bitsRead = 0;
|
|
27
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-data.js","sourceRoot":"","sources":["../../src/lib/block-data.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAOxC,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;AAErC,SAAS,cAAc,CACnB,QAAkB,EAClB,OAAgB,EAChB,UAA+B;IAE/B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CACjC,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAC7C,CAAC;IAEF,OAAO,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,QAAQ,GAAG,oBAAoB,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;YAEtD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACX,YAAY,OAAO,WAAW,YAAY,4CAA4C,YAAY,EAAE,CACvG,CAAC;YACN,CAAC;YAED,QAAQ,CACJ,YAAY,OAAO,KAAK,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,YAAY,EAAE,CAC9E,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,QAAQ,IAAI,oBAAoB,CAAC;YACjC,YAAY,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,IAAI,QAAQ,GAAG,EAAE,EAAE,CAAC;YAChB,qDAAqD;YACrD,sCAAsC;YACtC,
|
|
1
|
+
{"version":3,"file":"block-data.js","sourceRoot":"","sources":["../../src/lib/block-data.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport { BitData } from './bit-data.js';\nimport { Coords3d } from '../types/coords.js';\nimport { NbtCompound } from '../nbt/nbt-compound.js';\nimport { NbtList } from '../nbt/nbt-list.js';\nimport { NbtLongArray } from '../nbt/nbt-long-array.js';\nimport { NbtString } from '../nbt/nbt-string.js';\n\nconst BLOCKS_PER_CHUNK = 16 * 16 * 16;\nconst debugLog = debug('block-data');\n\nfunction parseBlockData(\n blockIds: number[],\n bitData: BitData,\n paletteMap: Map<number, string>\n) {\n let bitsRead = 0;\n let blockIdsRead = 0;\n const bitsNeededForPalette = Math.max(\n 4,\n Math.ceil(Math.log2(paletteMap.size || 1))\n );\n\n while (bitData.remainingLength() > 0) {\n while (bitsRead + bitsNeededForPalette <= 64) {\n const blockId = bitData.getBits(bitsNeededForPalette);\n\n if (!paletteMap.has(blockId)) {\n throw new Error(\n `Block ID ${blockId}, index ${blockIdsRead} not found in palette when reading index ${blockIdsRead}`\n );\n }\n\n debugLog(\n `Block ID ${blockId} (${paletteMap.get(blockId)}) at index ${blockIdsRead}`\n );\n blockIds.push(blockId);\n bitsRead += bitsNeededForPalette;\n blockIdsRead += 1;\n }\n\n if (bitsRead < 64) {\n // These extra bits can have any values. They are not\n // initialized before writing to disk.\n const bitsToSkip = 64 - bitsRead;\n bitData.getBits(bitsToSkip);\n debugLog('Skipped %d bits', bitsToSkip);\n }\n\n bitsRead = 0;\n }\n\n return blockIds;\n}\n\nexport class BlockData {\n static fromPaletteBlockStates(\n dataVersion: number,\n palette: NbtList<NbtCompound>,\n blockStates?: NbtLongArray\n ) {\n // Convert the palette values to a map\n const paletteSize = palette.data.length;\n const paletteMap = new Map<number, string>();\n\n if (dataVersion < 0) {\n throw new Error('Data version is required to read block data');\n }\n\n for (let i = 0; i < paletteSize; i++) {\n const name = palette.data[i].findChild<NbtString>('Name');\n\n if (name) {\n paletteMap.set(i, name.data);\n } else {\n throw new Error(`Palette entry ${i} does not have a name`);\n }\n }\n\n const blockIds: number[] = [];\n\n if (blockStates) {\n const bitData = BitData.fromLongArrayTag(blockStates);\n parseBlockData(blockIds, bitData, paletteMap);\n }\n\n // Fill the rest of the blocks with the first element in the palette.\n // The documentation says that a chunk could be filled with just the\n // first index in the palette and not have any block data.\n while (blockIds.length < BLOCKS_PER_CHUNK) {\n blockIds.push(0);\n }\n\n // Safety\n while (blockIds.length > BLOCKS_PER_CHUNK) {\n blockIds.pop();\n }\n\n return new BlockData(paletteMap, blockIds);\n }\n\n constructor(\n public paletteMap: Map<number, string>,\n public blockIds: number[]\n ) {}\n\n chunkCoordinatesToIndex([x, y, z]: Coords3d) {\n return (y << 8) | (z << 4) | x;\n }\n\n findBlocksByName(name: string): number[] {\n const number = Array.from(this.paletteMap.keys()).find(\n (key) => this.paletteMap.get(key) === name\n );\n const result = [];\n\n for (let i = 0; i < this.blockIds.length; i++) {\n if (this.blockIds[i] === number) {\n result.push(i);\n }\n }\n\n return result;\n }\n\n getBlockByIndex(index: number) {\n const blockId = this.blockIds[index];\n const blockName = this.paletteMap.get(blockId);\n\n if (!blockName) {\n throw new Error(\n `Block ID ${blockId} not found in palette when reading index ${index}`\n );\n }\n\n return blockName;\n }\n\n getBlockByChunkCoordinates(coordinates: Coords3d) {\n const index = this.chunkCoordinatesToIndex(coordinates);\n\n return this.getBlockByIndex(index);\n }\n\n indexToChunkCoordinates(index: number): Coords3d {\n const x = index & 0xf;\n const y = (index >> 8) & 0xf;\n const z = (index >> 4) & 0xf;\n\n return [x, y, z];\n }\n\n toArray() {\n let errors: any[] = [];\n\n const result = this.blockIds.map((blockId, index) => {\n const blockName = this.paletteMap.get(blockId);\n\n if (!blockName) {\n errors.push({\n index,\n chunkCoordinates: this.indexToChunkCoordinates(index),\n blockId,\n paletteLength: this.paletteMap.size,\n palette: Array.from(this.paletteMap.values()),\n });\n }\n\n return {\n chunkCoordinates: this.indexToChunkCoordinates(index),\n blockName,\n };\n });\n\n if (errors.length) {\n throw new Error(JSON.stringify(errors));\n }\n\n return result;\n }\n}\n"]}
|
|
@@ -7,11 +7,11 @@ export class NbtByteArray extends NbtBase {
|
|
|
7
7
|
name ??= NbtByteArray.readName(bd);
|
|
8
8
|
const data = [];
|
|
9
9
|
const length = bd.getInt();
|
|
10
|
-
debugLogFromBinaryData(
|
|
10
|
+
debugLogFromBinaryData('BYTE_ARRAY, name %s, length %d', name, length);
|
|
11
11
|
for (let i = 0; i < length; i++) {
|
|
12
12
|
data.push(bd.getByte());
|
|
13
13
|
}
|
|
14
|
-
debugLogFromBinaryData(
|
|
14
|
+
debugLogFromBinaryData('BYTE_ARRAY, data %o', name, length, data);
|
|
15
15
|
return new NbtByteArray(data, name);
|
|
16
16
|
}
|
|
17
17
|
constructor(data, name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-byte-array.js","sourceRoot":"","sources":["../../src/nbt/nbt-byte-array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAExE,MAAM,OAAO,YAAa,SAAQ,OAAiB;IAC/C,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3B,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-byte-array.js","sourceRoot":"","sources":["../../src/nbt/nbt-byte-array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAExE,MAAM,OAAO,YAAa,SAAQ,OAAiB;IAC/C,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3B,sBAAsB,CAAC,gCAAgC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,CAAC;QAED,sBAAsB,CAAC,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAElE,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,YAAY,IAAc,EAAE,IAAa;QACrC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,IAAI;SACvB,CAAC;IACN,CAAC;IAED,MAAM;QACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5D,CAAC;CACJ","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:byte-array:from-binary-data');\n\nexport class NbtByteArray extends NbtBase<number[]> {\n static fromBinaryData(bd: BinaryData, name?: string): NbtByteArray {\n name ??= NbtByteArray.readName(bd);\n const data: number[] = [];\n const length = bd.getInt();\n debugLogFromBinaryData('BYTE_ARRAY, name %s, length %d', name, length);\n\n for (let i = 0; i < length; i++) {\n data.push(bd.getByte());\n }\n\n debugLogFromBinaryData('BYTE_ARRAY, data %o', name, length, data);\n\n return new NbtByteArray(data, name);\n }\n\n constructor(data: number[], name?: string) {\n super(NbtTagType.BYTE_ARRAY, data, name);\n }\n\n toObject() {\n return {\n type: this.type,\n byteArray: this.data,\n };\n }\n\n toSnbt() {\n return `[B;${this.data.map((v) => `${v}b`).join(',')}]`;\n }\n}\n"]}
|
package/dist/nbt/nbt-byte.js
CHANGED
|
@@ -6,7 +6,7 @@ export class NbtByte extends NbtBase {
|
|
|
6
6
|
static fromBinaryData(bd, name) {
|
|
7
7
|
name ??= NbtByte.readName(bd);
|
|
8
8
|
const data = bd.getByte();
|
|
9
|
-
debugLogFromBinaryData(
|
|
9
|
+
debugLogFromBinaryData('BYTE, name %s, data %d', name, data);
|
|
10
10
|
return new NbtByte(data, name);
|
|
11
11
|
}
|
|
12
12
|
constructor(data, name) {
|
package/dist/nbt/nbt-byte.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-byte.js","sourceRoot":"","sources":["../../src/nbt/nbt-byte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAElE,MAAM,OAAO,OAAQ,SAAQ,OAAe;IACxC,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-byte.js","sourceRoot":"","sources":["../../src/nbt/nbt-byte.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAElE,MAAM,OAAO,OAAQ,SAAQ,OAAe;IACxC,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1B,sBAAsB,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE7D,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,YAAY,IAAY,EAAE,IAAa;QACnC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;SAClB,CAAC;IACN,CAAC;IAED,MAAM;QACF,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;IAC3B,CAAC;CACJ","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:byte:from-binary-data');\n\nexport class NbtByte extends NbtBase<number> {\n static fromBinaryData(bd: BinaryData, name?: string): NbtByte {\n name ??= NbtByte.readName(bd);\n const data = bd.getByte();\n debugLogFromBinaryData('BYTE, name %s, data %d', name, data);\n\n return new NbtByte(data, name);\n }\n\n constructor(data: number, name?: string) {\n super(NbtTagType.BYTE, data, name);\n }\n\n toObject() {\n return {\n type: this.type,\n byte: this.data,\n };\n }\n\n toSnbt() {\n return `${this.data}b`;\n }\n}\n"]}
|
package/dist/nbt/nbt-compound.js
CHANGED
|
@@ -8,7 +8,7 @@ export class NbtCompound extends NbtBase {
|
|
|
8
8
|
static fromBinaryData(bd, name) {
|
|
9
9
|
name ??= NbtCompound.readName(bd);
|
|
10
10
|
const data = [];
|
|
11
|
-
debugLogFromBinaryData(
|
|
11
|
+
debugLogFromBinaryData('COMPOUND, name %s, starting', name);
|
|
12
12
|
// Careful - this does not store the END tag
|
|
13
13
|
let tag = Nbt.getTag(bd);
|
|
14
14
|
debugLogFromBinaryData(`COMPOUND, name ${name}, tag ${tag.type} was retrieved`);
|
|
@@ -17,7 +17,7 @@ export class NbtCompound extends NbtBase {
|
|
|
17
17
|
tag = Nbt.getTag(bd);
|
|
18
18
|
debugLogFromBinaryData(`COMPOUND, name ${name}, tag ${tag.type} was retrieved`);
|
|
19
19
|
}
|
|
20
|
-
debugLogFromBinaryData(
|
|
20
|
+
debugLogFromBinaryData('COMPOUND, name %s, finished', name);
|
|
21
21
|
return new NbtCompound(data, name);
|
|
22
22
|
}
|
|
23
23
|
constructor(data, name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-compound.js","sourceRoot":"","sources":["../../src/nbt/nbt-compound.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACtE,MAAM,iBAAiB,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAE3D,MAAM,OAAO,WAAY,SAAQ,OAAuB;IACpD,MAAM,CAAC,cAAc,CAAI,EAAc,EAAE,IAAa;QAClD,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAiB,EAAE,CAAC;QAC9B,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-compound.js","sourceRoot":"","sources":["../../src/nbt/nbt-compound.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACtE,MAAM,iBAAiB,GAAG,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAE3D,MAAM,OAAO,WAAY,SAAQ,OAAuB;IACpD,MAAM,CAAC,cAAc,CAAI,EAAc,EAAE,IAAa;QAClD,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAiB,EAAE,CAAC;QAC9B,sBAAsB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;QAE5D,4CAA4C;QAC5C,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,sBAAsB,CAClB,kBAAkB,IAAI,SAAS,GAAG,CAAC,IAAI,gBAAgB,CAC1D,CAAC;QAEF,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,GAAG,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrB,sBAAsB,CAClB,kBAAkB,IAAI,SAAS,GAAG,CAAC,IAAI,gBAAgB,CAC1D,CAAC;QACN,CAAC;QAED,sBAAsB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;QAE5D,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,YAAY,IAAoB,EAAE,IAAa;QAC3C,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEQ,SAAS,CAA8B,IAAY;QACxD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;QACtE,iBAAiB,CACb,kBAAkB,IAAI,CAAC,IAAI,UAAU,IAAI,YAAY,CAAC,CAAC,MAAM,EAAE,CAClE,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;QACX,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC,SAAS,CAAS,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,MAAgB,CAAC;IAC5B,CAAC;IAEQ,UAAU,CAAC,IAAa;QAC7B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,QAAQ;QACJ,MAAM,QAAQ,GAAwB,EAAE,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAEvB,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;YAC/D,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACrC,CAAC;QAED,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ;SACX,CAAC;IACN,CAAC;IAED,MAAM;QACF,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACrC,CAAC;CACJ","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { Nbt } from './nbt.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:compound:from-binary-data');\nconst debugLogFindChild = debug('nbt:compound:find-child');\n\nexport class NbtCompound extends NbtBase<NbtBase<any>[]> {\n static fromBinaryData<T>(bd: BinaryData, name?: string): NbtCompound {\n name ??= NbtCompound.readName(bd);\n const data: NbtBase<T>[] = [];\n debugLogFromBinaryData('COMPOUND, name %s, starting', name);\n\n // Careful - this does not store the END tag\n let tag = Nbt.getTag(bd);\n debugLogFromBinaryData(\n `COMPOUND, name ${name}, tag ${tag.type} was retrieved`\n );\n\n while (tag && tag.type !== NbtTagType.END) {\n data.push(tag);\n tag = Nbt.getTag(bd);\n debugLogFromBinaryData(\n `COMPOUND, name ${name}, tag ${tag.type} was retrieved`\n );\n }\n\n debugLogFromBinaryData('COMPOUND, name %s, finished', name);\n\n return new NbtCompound(data, name);\n }\n\n constructor(data: NbtBase<any>[], name?: string) {\n super(NbtTagType.COMPOUND, data, name);\n }\n\n override findChild<RESULT extends NbtBase<any>>(path: string) {\n const pathSegments = path.split('/');\n const currentSegment = pathSegments.shift();\n const result = this.data.find((item) => item.name === currentSegment);\n debugLogFindChild(\n `COMPOUND, name ${this.name}, path ${path}, found? ${!!result}`\n );\n\n if (!result) {\n return;\n }\n\n if (pathSegments.length) {\n return result.findChild<RESULT>(pathSegments.join('/'));\n }\n\n return result as RESULT;\n }\n\n override isCompound(name?: string) {\n if (name !== undefined && this.name !== name) {\n return false;\n }\n\n return true;\n }\n\n toObject() {\n const compound: Record<string, any> = {};\n\n for (const item of this.data) {\n const name = item.name;\n\n if (compound[name]) {\n console.error('Corrupt chunk - duplicate key found', name);\n }\n\n compound[name] = item.toObject();\n }\n\n return {\n type: this.type,\n compound,\n };\n }\n\n toSnbt() {\n const compound: string[] = [];\n\n for (const item of this.data) {\n const itemSnbt = item.toSnbt();\n compound.push(`${item.name}:${itemSnbt}`);\n }\n\n return `{${compound.join(',')}}`;\n }\n}\n"]}
|
package/dist/nbt/nbt-double.js
CHANGED
|
@@ -6,7 +6,7 @@ export class NbtDouble extends NbtBase {
|
|
|
6
6
|
static fromBinaryData(bd, name) {
|
|
7
7
|
name ??= NbtDouble.readName(bd);
|
|
8
8
|
const data = bd.getDouble();
|
|
9
|
-
debugLogFromBinaryData(
|
|
9
|
+
debugLogFromBinaryData('DOUBLE, name %s, data %d', name, data);
|
|
10
10
|
return new NbtDouble(data, name);
|
|
11
11
|
}
|
|
12
12
|
constructor(data, name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-double.js","sourceRoot":"","sources":["../../src/nbt/nbt-double.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAEpE,MAAM,OAAO,SAAU,SAAQ,OAAe;IAC1C,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC5B,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-double.js","sourceRoot":"","sources":["../../src/nbt/nbt-double.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAEpE,MAAM,OAAO,SAAU,SAAQ,OAAe;IAC1C,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QAC5B,sBAAsB,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE/D,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,YAAY,IAAY,EAAE,IAAa;QACnC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,IAAI;SACpB,CAAC;IACN,CAAC;IAED,MAAM;QACF,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;IAC3B,CAAC;CACJ","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:double:from-binary-data');\n\nexport class NbtDouble extends NbtBase<number> {\n static fromBinaryData(bd: BinaryData, name?: string): NbtDouble {\n name ??= NbtDouble.readName(bd);\n const data = bd.getDouble();\n debugLogFromBinaryData('DOUBLE, name %s, data %d', name, data);\n\n return new NbtDouble(data, name);\n }\n\n constructor(data: number, name?: string) {\n super(NbtTagType.DOUBLE, data, name);\n }\n\n toObject() {\n return {\n type: this.type,\n double: this.data,\n };\n }\n\n toSnbt() {\n return `${this.data}d`;\n }\n}\n"]}
|
package/dist/nbt/nbt-float.js
CHANGED
|
@@ -6,7 +6,7 @@ export class NbtFloat extends NbtBase {
|
|
|
6
6
|
static fromBinaryData(bd, name) {
|
|
7
7
|
name ??= NbtFloat.readName(bd);
|
|
8
8
|
const data = bd.getFloat();
|
|
9
|
-
debugLogFromBinaryData(
|
|
9
|
+
debugLogFromBinaryData('FLOAT, name %s, data %d', name, data);
|
|
10
10
|
return new NbtFloat(data, name);
|
|
11
11
|
}
|
|
12
12
|
constructor(data, name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-float.js","sourceRoot":"","sources":["../../src/nbt/nbt-float.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAEnE,MAAM,OAAO,QAAS,SAAQ,OAAe;IACzC,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC3B,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-float.js","sourceRoot":"","sources":["../../src/nbt/nbt-float.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAEnE,MAAM,OAAO,QAAS,SAAQ,OAAe;IACzC,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC3B,sBAAsB,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE9D,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,YAAY,IAAY,EAAE,IAAa;QACnC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,IAAI;SACnB,CAAC;IACN,CAAC;IAED,MAAM;QACF,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;IAC3B,CAAC;CACJ","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:float:from-binary-data');\n\nexport class NbtFloat extends NbtBase<number> {\n static fromBinaryData(bd: BinaryData, name?: string): NbtFloat {\n name ??= NbtFloat.readName(bd);\n const data = bd.getFloat();\n debugLogFromBinaryData('FLOAT, name %s, data %d', name, data);\n\n return new NbtFloat(data, name);\n }\n\n constructor(data: number, name?: string) {\n super(NbtTagType.FLOAT, data, name);\n }\n\n toObject() {\n return {\n type: this.type,\n float: this.data,\n };\n }\n\n toSnbt() {\n return `${this.data}f`;\n }\n}\n"]}
|
|
@@ -7,11 +7,11 @@ export class NbtIntArray extends NbtBase {
|
|
|
7
7
|
name ??= NbtIntArray.readName(bd);
|
|
8
8
|
const data = [];
|
|
9
9
|
const length = bd.getInt();
|
|
10
|
-
debugLogFromBinaryData(
|
|
10
|
+
debugLogFromBinaryData('INT_ARRAY, name %s, length %d', name, length);
|
|
11
11
|
for (let i = 0; i < length; i++) {
|
|
12
12
|
data.push(bd.getInt());
|
|
13
13
|
}
|
|
14
|
-
debugLogFromBinaryData(
|
|
14
|
+
debugLogFromBinaryData('INT_ARRAY, name %s, data %o', name, data);
|
|
15
15
|
return new NbtIntArray(data, name);
|
|
16
16
|
}
|
|
17
17
|
constructor(data, name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-int-array.js","sourceRoot":"","sources":["../../src/nbt/nbt-int-array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,gCAAgC,CAAC,CAAC;AAEvE,MAAM,OAAO,WAAY,SAAQ,OAAiB;IAC9C,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3B,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-int-array.js","sourceRoot":"","sources":["../../src/nbt/nbt-int-array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,gCAAgC,CAAC,CAAC;AAEvE,MAAM,OAAO,WAAY,SAAQ,OAAiB;IAC9C,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3B,sBAAsB,CAAC,+BAA+B,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEtE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3B,CAAC;QAED,sBAAsB,CAAC,6BAA6B,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAElE,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,YAAY,IAAc,EAAE,IAAa;QACrC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,IAAI;SACtB,CAAC;IACN,CAAC;IAED,MAAM;QACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACzC,CAAC;CACJ","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:int-array:from-binary-data');\n\nexport class NbtIntArray extends NbtBase<number[]> {\n static fromBinaryData(bd: BinaryData, name?: string): NbtIntArray {\n name ??= NbtIntArray.readName(bd);\n const data: number[] = [];\n const length = bd.getInt();\n debugLogFromBinaryData('INT_ARRAY, name %s, length %d', name, length);\n\n for (let i = 0; i < length; i++) {\n data.push(bd.getInt());\n }\n\n debugLogFromBinaryData('INT_ARRAY, name %s, data %o', name, data);\n\n return new NbtIntArray(data, name);\n }\n\n constructor(data: number[], name?: string) {\n super(NbtTagType.INT_ARRAY, data, name);\n }\n\n toObject() {\n return {\n type: this.type,\n intArray: this.data,\n };\n }\n\n toSnbt() {\n return `[I;${this.data.join(', ')}]`;\n }\n}\n"]}
|
package/dist/nbt/nbt-int.js
CHANGED
|
@@ -6,7 +6,7 @@ export class NbtInt extends NbtBase {
|
|
|
6
6
|
static fromBinaryData(bd, name) {
|
|
7
7
|
name ??= NbtInt.readName(bd);
|
|
8
8
|
const data = bd.getInt();
|
|
9
|
-
debugLogFromBinaryData(
|
|
9
|
+
debugLogFromBinaryData('INT, name %s, data %d', name, data);
|
|
10
10
|
return new NbtInt(data, name);
|
|
11
11
|
}
|
|
12
12
|
constructor(data, name) {
|
package/dist/nbt/nbt-int.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-int.js","sourceRoot":"","sources":["../../src/nbt/nbt-int.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAEjE,MAAM,OAAO,MAAO,SAAQ,OAAe;IACvC,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACzB,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-int.js","sourceRoot":"","sources":["../../src/nbt/nbt-int.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAEjE,MAAM,OAAO,MAAO,SAAQ,OAAe;IACvC,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QACzB,sBAAsB,CAAC,uBAAuB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE5D,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,YAAY,IAAY,EAAE,IAAa;QACnC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,IAAI;SACjB,CAAC;IACN,CAAC;IAED,MAAM;QACF,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACJ","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:int:from-binary-data');\n\nexport class NbtInt extends NbtBase<number> {\n static fromBinaryData(bd: BinaryData, name?: string): NbtInt {\n name ??= NbtInt.readName(bd);\n const data = bd.getInt();\n debugLogFromBinaryData('INT, name %s, data %d', name, data);\n\n return new NbtInt(data, name);\n }\n\n constructor(data: number, name?: string) {\n super(NbtTagType.INT, data, name);\n }\n\n toObject() {\n return {\n type: this.type,\n int: this.data,\n };\n }\n\n toSnbt() {\n return `${this.data}`;\n }\n}\n"]}
|
package/dist/nbt/nbt-list.js
CHANGED
|
@@ -35,19 +35,19 @@ export class NbtList extends NbtBase {
|
|
|
35
35
|
}
|
|
36
36
|
const index = parseInt(currentSegment, 10);
|
|
37
37
|
if (isNaN(index)) {
|
|
38
|
-
debugLogFindChild(
|
|
38
|
+
debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, not a number', this.name, this.subtype, path, currentSegment);
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
const result = this.data[index];
|
|
42
42
|
if (!result) {
|
|
43
|
-
debugLogFindChild(
|
|
43
|
+
debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, no child found at index %d', this.name, this.subtype, path, currentSegment, index);
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
46
|
if (pathSegments.length) {
|
|
47
|
-
debugLogFindChild(
|
|
47
|
+
debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, recurse', this.name, this.subtype, path, currentSegment);
|
|
48
48
|
return result.findChild(pathSegments.join('/'));
|
|
49
49
|
}
|
|
50
|
-
debugLogFindChild(
|
|
50
|
+
debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, found', this.name, this.subtype, path, currentSegment);
|
|
51
51
|
return result;
|
|
52
52
|
}
|
|
53
53
|
isList(subtype) {
|
package/dist/nbt/nbt-list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-list.js","sourceRoot":"","sources":["../../src/nbt/nbt-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAClE,MAAM,iBAAiB,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAEvD,MAAM,OAAO,OAAgC,SAAQ,OAAY;IAC7D,MAAM,CAAC,cAAc,CACjB,EAAc,EACd,IAAa;QAEb,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,sBAAsB,CAClB,cAAc,IAAI,aAAa,OAAO,YAAY,MAAM,SAAS,CACpE,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAEvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,eAAe,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YAC1B,6BAA6B;YAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAW,CAAC,CAAC;QACxC,CAAC;QAED,sBAAsB,CAClB,cAAc,IAAI,aAAa,OAAO,mBAAmB,IAAI,CAAC,MAAM,OAAO,CAC9E,CAAC;QAEF,OAAO,IAAI,OAAO,CAAS,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,CAAa;IAEpB,YAAY,IAAS,EAAE,OAAmB,EAAE,IAAa;QACrD,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEQ,SAAS,CACd,IAAY;QAEZ,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC;QAE5C,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAE3C,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACf,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-list.js","sourceRoot":"","sources":["../../src/nbt/nbt-list.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { fromBinaryData } from './nbt.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:list:from-binary-data');\nconst debugLogFindChild = debug('nbt:list:find-child');\n\nexport class NbtList<T extends NbtBase<any>> extends NbtBase<T[]> {\n static fromBinaryData<SOURCE extends NbtBase<any>>(\n bd: BinaryData,\n name?: string\n ): NbtList<SOURCE> {\n name ??= NbtList.readName(bd);\n const subtype = bd.getByte();\n const length = bd.getInt();\n const data: SOURCE[] = [];\n debugLogFromBinaryData(\n `LIST, name ${name}, subtype ${subtype}, length ${length}, start`\n );\n const reader = fromBinaryData[subtype];\n\n if (!reader) {\n throw new Error(`Invalid NBT tag type ${subtype} for list tag`);\n }\n\n while (data.length < length) {\n // All list items are unnamed\n data.push(reader(bd, '') as SOURCE);\n }\n\n debugLogFromBinaryData(\n `LIST, name ${name}, subtype ${subtype}, element count ${data.length}, end`\n );\n\n return new NbtList<SOURCE>(data, subtype, name);\n }\n\n subtype: NbtTagType;\n\n constructor(data: T[], subtype: NbtTagType, name?: string) {\n super(NbtTagType.LIST, data, name);\n this.subtype = subtype;\n }\n\n override findChild<RESULT extends NbtBase<any>>(\n path: string\n ): RESULT | undefined {\n const pathSegments = path.split('/');\n const currentSegment = pathSegments.shift();\n\n if (!currentSegment) {\n return;\n }\n\n const index = parseInt(currentSegment, 10);\n\n if (isNaN(index)) {\n debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, not a number', this.name, this.subtype, path, currentSegment);\n\n return;\n }\n\n const result = this.data[index];\n\n if (!result) {\n debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, no child found at index %d', this.name, this.subtype, path, currentSegment, index);\n\n return;\n }\n\n if (pathSegments.length) {\n debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, recurse', this.name, this.subtype, path, currentSegment);\n\n return result.findChild<RESULT>(pathSegments.join('/'));\n }\n\n debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, found', this.name, this.subtype, path, currentSegment);\n\n return result as unknown as RESULT;\n }\n\n override isList(subtype?: NbtTagType) {\n if (subtype !== undefined && this.subtype !== subtype) {\n return false;\n }\n\n return true;\n }\n\n toObject() {\n return {\n type: this.type,\n subtype: this.subtype,\n list: this.data.map((v) => v.toObject()),\n };\n }\n\n toSnbt() {\n return this.data.map((v) => v.toSnbt()).join(',');\n }\n}\n"]}
|
|
@@ -7,13 +7,13 @@ export class NbtLongArray extends NbtBase {
|
|
|
7
7
|
name ??= NbtLongArray.readName(bd);
|
|
8
8
|
const data = [];
|
|
9
9
|
const length = bd.getInt();
|
|
10
|
-
debugLogFromBinaryData(
|
|
10
|
+
debugLogFromBinaryData('LONG_ARRAY, name %s, length %d', name, length);
|
|
11
11
|
for (let i = 0; i < length; i++) {
|
|
12
12
|
// This needs to be able to be converted back to a bit stream in
|
|
13
13
|
// BitData. See BitData.fromLongArrayTag().
|
|
14
14
|
data.push(bd.getInt64LE());
|
|
15
15
|
}
|
|
16
|
-
debugLogFromBinaryData(
|
|
16
|
+
debugLogFromBinaryData('LONG_ARRAY, name %s, data length %d', name, data.length);
|
|
17
17
|
return new NbtLongArray(data, name);
|
|
18
18
|
}
|
|
19
19
|
constructor(data, name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-long-array.js","sourceRoot":"","sources":["../../src/nbt/nbt-long-array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAExE,MAAM,OAAO,YAAa,SAAQ,OAAiB;IAC/C,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3B,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-long-array.js","sourceRoot":"","sources":["../../src/nbt/nbt-long-array.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,iCAAiC,CAAC,CAAC;AAExE,MAAM,OAAO,YAAa,SAAQ,OAAiB;IAC/C,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3B,sBAAsB,CAAC,gCAAgC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,gEAAgE;YAChE,2CAA2C;YAC3C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,sBAAsB,CAAC,qCAAqC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjF,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,YAAY,IAAc,EAAE,IAAa;QACrC,KAAK,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;SAChD,CAAC;IACN,CAAC;IAED,MAAM;QACF,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAClE,CAAC;CACJ","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:long-array:from-binary-data');\n\nexport class NbtLongArray extends NbtBase<bigint[]> {\n static fromBinaryData(bd: BinaryData, name?: string): NbtLongArray {\n name ??= NbtLongArray.readName(bd);\n const data: bigint[] = [];\n const length = bd.getInt();\n debugLogFromBinaryData('LONG_ARRAY, name %s, length %d', name, length);\n\n for (let i = 0; i < length; i++) {\n // This needs to be able to be converted back to a bit stream in\n // BitData. See BitData.fromLongArrayTag().\n data.push(bd.getInt64LE());\n }\n\n debugLogFromBinaryData('LONG_ARRAY, name %s, data length %d', name, data.length);\n\n return new NbtLongArray(data, name);\n }\n\n constructor(data: bigint[], name?: string) {\n super(NbtTagType.LONG_ARRAY, data, name);\n }\n\n toObject() {\n return {\n type: this.type,\n longArray: this.data.map((v) => v.toString()),\n };\n }\n\n toSnbt() {\n return `[L;${this.data.map((v) => v.toString()).join(', ')}]`;\n }\n}\n"]}
|
package/dist/nbt/nbt-long.js
CHANGED
|
@@ -6,7 +6,7 @@ export class NbtLong extends NbtBase {
|
|
|
6
6
|
static fromBinaryData(bd, name) {
|
|
7
7
|
name ??= NbtLong.readName(bd);
|
|
8
8
|
const data = bd.getInt64LE();
|
|
9
|
-
debugLogFromBinaryData(
|
|
9
|
+
debugLogFromBinaryData('LONG, name %s, data %d', name, data);
|
|
10
10
|
return new NbtLong(data, name);
|
|
11
11
|
}
|
|
12
12
|
constructor(data, name) {
|
package/dist/nbt/nbt-long.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-long.js","sourceRoot":"","sources":["../../src/nbt/nbt-long.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAElE,MAAM,OAAO,OAAQ,SAAQ,OAAe;IACxC,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;QAC7B,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-long.js","sourceRoot":"","sources":["../../src/nbt/nbt-long.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAElE,MAAM,OAAO,OAAQ,SAAQ,OAAe;IACxC,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;QAC7B,sBAAsB,CAAC,wBAAwB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE7D,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,YAAY,IAAY,EAAE,IAAa;QACnC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;SAC7B,CAAC;IACN,CAAC;IAED,MAAM;QACF,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;IAC3B,CAAC;CACJ","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:long:from-binary-data');\n\nexport class NbtLong extends NbtBase<bigint> {\n static fromBinaryData(bd: BinaryData, name?: string): NbtLong {\n name ??= NbtLong.readName(bd);\n const data = bd.getInt64LE();\n debugLogFromBinaryData('LONG, name %s, data %d', name, data);\n\n return new NbtLong(data, name);\n }\n\n constructor(data: bigint, name?: string) {\n super(NbtTagType.LONG, data, name);\n }\n\n toObject() {\n return {\n type: this.type,\n long: this.data.toString(),\n };\n }\n\n toSnbt() {\n return `${this.data}l`;\n }\n}\n"]}
|
package/dist/nbt/nbt-short.js
CHANGED
|
@@ -6,7 +6,7 @@ export class NbtShort extends NbtBase {
|
|
|
6
6
|
static fromBinaryData(bd, name) {
|
|
7
7
|
name ??= NbtShort.readName(bd);
|
|
8
8
|
const data = bd.getShort();
|
|
9
|
-
debugLogFromBinaryData(
|
|
9
|
+
debugLogFromBinaryData('SHORT, name %s, data %d', name, data);
|
|
10
10
|
return new NbtShort(data, name);
|
|
11
11
|
}
|
|
12
12
|
constructor(data, name) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nbt-short.js","sourceRoot":"","sources":["../../src/nbt/nbt-short.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAEnE,MAAM,OAAO,QAAS,SAAQ,OAAe;IACzC,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC3B,sBAAsB,CAAC,
|
|
1
|
+
{"version":3,"file":"nbt-short.js","sourceRoot":"","sources":["../../src/nbt/nbt-short.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,sBAAsB,GAAG,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAEnE,MAAM,OAAO,QAAS,SAAQ,OAAe;IACzC,MAAM,CAAC,cAAc,CAAC,EAAc,EAAE,IAAa;QAC/C,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC3B,sBAAsB,CAAC,yBAAyB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE9D,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,YAAY,IAAY,EAAE,IAAa;QACnC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,IAAI;SACnB,CAAC;IACN,CAAC;IAED,MAAM;QACF,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;IAC3B,CAAC;CACJ","sourcesContent":["import debug from 'debug';\nimport { BinaryData } from '../lib/binary-data.js';\nimport { NbtBase } from './nbt-base.js';\nimport { NbtTagType } from './nbt-tag-type.js';\n\nconst debugLogFromBinaryData = debug('nbt:short:from-binary-data');\n\nexport class NbtShort extends NbtBase<number> {\n static fromBinaryData(bd: BinaryData, name?: string): NbtShort {\n name ??= NbtShort.readName(bd);\n const data = bd.getShort();\n debugLogFromBinaryData('SHORT, name %s, data %d', name, data);\n\n return new NbtShort(data, name);\n }\n\n constructor(data: number, name?: string) {\n super(NbtTagType.SHORT, data, name);\n }\n\n toObject() {\n return {\n type: this.type,\n short: this.data,\n };\n }\n\n toSnbt() {\n return `${this.data}s`;\n }\n}\n"]}
|
package/dist/nbt/snbt-parse.js
CHANGED
|
@@ -5,7 +5,7 @@ function testParsers(snbtData, str, tokenParsers, pos) {
|
|
|
5
5
|
for (const { type, pattern, callback } of tokenParsers) {
|
|
6
6
|
const match = str.match(pattern);
|
|
7
7
|
if (match) {
|
|
8
|
-
debugLog(
|
|
8
|
+
debugLog('Matched %s at position %d: %s', type, pos, match[0]);
|
|
9
9
|
return callback(pos, type, snbtData, match);
|
|
10
10
|
}
|
|
11
11
|
}
|
|
@@ -196,7 +196,7 @@ export function snbtParse(snbt) {
|
|
|
196
196
|
if (!increment) {
|
|
197
197
|
throw new Error(`Unexpected token at position ${pos}`);
|
|
198
198
|
}
|
|
199
|
-
debugLog(
|
|
199
|
+
debugLog('Increment position by %d', increment);
|
|
200
200
|
pos += increment;
|
|
201
201
|
}
|
|
202
202
|
return snbtData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snbt-parse.js","sourceRoot":"","sources":["../../src/nbt/snbt-parse.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport { SnbtData, SnbtTokenType } from './snbt-data.js';\n\nconst debugLog = debug('snbt:parse');\n\ninterface TokenParser {\n type: SnbtTokenType;\n pattern: RegExp;\n callback: (\n offset: number,\n type: SnbtTokenType,\n snbtData: SnbtData,\n match: RegExpMatchArray\n ) => number;\n}\n\nfunction testParsers(\n snbtData: SnbtData,\n str: string,\n tokenParsers: TokenParser[],\n pos: number\n) {\n for (const { type, pattern, callback } of tokenParsers) {\n const match = str.match(pattern);\n\n if (match) {\n debugLog(`Matched ${type} at position ${pos}: ${match[0]}`);\n\n return callback(pos, type, snbtData, match);\n }\n }\n\n return false;\n}\n\nconst tokenParsers: TokenParser[] = [\n {\n type: 'WHITESPACE',\n pattern: /^\\s+/,\n callback: (_pos, _type, _snbtData, matches) => {\n // Do not generate a token for whitespace.\n return matches[0].length;\n },\n },\n {\n type: 'COLON',\n pattern: /^:/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, ':');\n\n return 1;\n },\n },\n {\n type: 'COMMA',\n pattern: /^,/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, ',');\n\n return 1;\n },\n },\n {\n type: 'BYTE_ARRAY_START',\n pattern: /^\\[\\s*[bB]\\s*;/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '[');\n\n return 3;\n },\n },\n {\n type: 'INT_ARRAY_START',\n pattern: /^\\[\\s*[iI]\\s*;/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '[');\n\n return 3;\n },\n },\n {\n type: 'LONG_ARRAY_START',\n pattern: /^\\[\\s*[lL]\\s*;/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '[');\n\n return 3;\n },\n },\n {\n type: 'COMPOUND_START',\n pattern: /^\\{/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '{');\n\n return 1;\n },\n },\n {\n type: 'COMPOUND_END',\n pattern: /^\\}/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '}');\n\n return 1;\n },\n },\n {\n type: 'LIST_START',\n pattern: /^\\[/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '[');\n\n return 1;\n },\n },\n {\n type: 'LIST_END',\n pattern: /^\\]/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, ']');\n\n return 1;\n },\n },\n {\n // Byte - true / false converts to 1 / 0\n type: 'BYTE',\n pattern: anchorPattern('([tT][rR][uU][eE]|[fF][aA][lL][sS][eE])'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(\n pos,\n type,\n matches[1].toLowerCase() === 'true' ? '1' : '0'\n );\n\n return matches[1].length;\n },\n },\n {\n // Byte - number with a suffix\n type: 'BYTE',\n pattern: anchorPattern('[-+]?[0-9]+[bB]'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n // Double - there's another without the D later\n type: 'DOUBLE',\n pattern: anchorPattern('[-+]?[0-9.]+[dD]'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n type: 'FLOAT',\n pattern: anchorPattern('[-+]?[0-9.]+[fF]'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n type: 'LONG',\n pattern: anchorPattern('[-+]?[0-9]+[lL]'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n type: 'SHORT',\n pattern: anchorPattern('[-+]?[0-9]+[sS]'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n // Double - this must come after other suffixed number types but before\n // Int's matcher\n type: 'DOUBLE',\n pattern: anchorPattern('[-+]?[0-9.]+'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n // Int - this must come after all other number types\n type: 'INT',\n pattern: anchorPattern('[-+]?[0-9]+'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n // String - single or double quotes\n type: 'STRING',\n pattern: /^([\\\"'])(?:\\\\.|.)*?\\1/,\n callback: (pos, type, snbtData, matches) => {\n const chunk = JSON.parse(`\"${matches[0].slice(1, -1)}\"`);\n snbtData.addToken(pos, type, chunk);\n\n return matches[0].length;\n },\n },\n {\n // String - not quoted and all else failed\n type: 'STRING',\n pattern: anchorPattern('^[-0-9a-zA-Z_.+]+'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n];\n\n// Creates a regular expression that will start at the beginning of the string\n// and conclude with an \"end of token\" marker at the end. The lookahead will\n// not capture the end of the token marker.\nfunction anchorPattern(pattern: string) {\n return new RegExp(`^${pattern}\\s*(?=$|,|}|]|:)`);\n}\n\nexport function snbtParse(snbt: string) {\n const snbtData = new SnbtData();\n let pos = 0;\n\n while (pos < snbt.length) {\n const increment = testParsers(\n snbtData,\n snbt.slice(pos),\n tokenParsers,\n pos\n );\n\n if (!increment) {\n throw new Error(`Unexpected token at position ${pos}`);\n }\n\n debugLog(`Increment position by ${increment}`);\n pos += increment;\n }\n\n return snbtData;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"snbt-parse.js","sourceRoot":"","sources":["../../src/nbt/snbt-parse.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport { SnbtData, SnbtTokenType } from './snbt-data.js';\n\nconst debugLog = debug('snbt:parse');\n\ninterface TokenParser {\n type: SnbtTokenType;\n pattern: RegExp;\n callback: (\n offset: number,\n type: SnbtTokenType,\n snbtData: SnbtData,\n match: RegExpMatchArray\n ) => number;\n}\n\nfunction testParsers(\n snbtData: SnbtData,\n str: string,\n tokenParsers: TokenParser[],\n pos: number\n) {\n for (const { type, pattern, callback } of tokenParsers) {\n const match = str.match(pattern);\n\n if (match) {\n debugLog('Matched %s at position %d: %s', type, pos, match[0]);\n\n return callback(pos, type, snbtData, match);\n }\n }\n\n return false;\n}\n\nconst tokenParsers: TokenParser[] = [\n {\n type: 'WHITESPACE',\n pattern: /^\\s+/,\n callback: (_pos, _type, _snbtData, matches) => {\n // Do not generate a token for whitespace.\n return matches[0].length;\n },\n },\n {\n type: 'COLON',\n pattern: /^:/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, ':');\n\n return 1;\n },\n },\n {\n type: 'COMMA',\n pattern: /^,/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, ',');\n\n return 1;\n },\n },\n {\n type: 'BYTE_ARRAY_START',\n pattern: /^\\[\\s*[bB]\\s*;/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '[');\n\n return 3;\n },\n },\n {\n type: 'INT_ARRAY_START',\n pattern: /^\\[\\s*[iI]\\s*;/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '[');\n\n return 3;\n },\n },\n {\n type: 'LONG_ARRAY_START',\n pattern: /^\\[\\s*[lL]\\s*;/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '[');\n\n return 3;\n },\n },\n {\n type: 'COMPOUND_START',\n pattern: /^\\{/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '{');\n\n return 1;\n },\n },\n {\n type: 'COMPOUND_END',\n pattern: /^\\}/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '}');\n\n return 1;\n },\n },\n {\n type: 'LIST_START',\n pattern: /^\\[/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, '[');\n\n return 1;\n },\n },\n {\n type: 'LIST_END',\n pattern: /^\\]/,\n callback: (pos, type, snbtData) => {\n snbtData.addToken(pos, type, ']');\n\n return 1;\n },\n },\n {\n // Byte - true / false converts to 1 / 0\n type: 'BYTE',\n pattern: anchorPattern('([tT][rR][uU][eE]|[fF][aA][lL][sS][eE])'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(\n pos,\n type,\n matches[1].toLowerCase() === 'true' ? '1' : '0'\n );\n\n return matches[1].length;\n },\n },\n {\n // Byte - number with a suffix\n type: 'BYTE',\n pattern: anchorPattern('[-+]?[0-9]+[bB]'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n // Double - there's another without the D later\n type: 'DOUBLE',\n pattern: anchorPattern('[-+]?[0-9.]+[dD]'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n type: 'FLOAT',\n pattern: anchorPattern('[-+]?[0-9.]+[fF]'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n type: 'LONG',\n pattern: anchorPattern('[-+]?[0-9]+[lL]'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n type: 'SHORT',\n pattern: anchorPattern('[-+]?[0-9]+[sS]'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n // Double - this must come after other suffixed number types but before\n // Int's matcher\n type: 'DOUBLE',\n pattern: anchorPattern('[-+]?[0-9.]+'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n // Int - this must come after all other number types\n type: 'INT',\n pattern: anchorPattern('[-+]?[0-9]+'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n {\n // String - single or double quotes\n type: 'STRING',\n pattern: /^([\\\"'])(?:\\\\.|.)*?\\1/,\n callback: (pos, type, snbtData, matches) => {\n const chunk = JSON.parse(`\"${matches[0].slice(1, -1)}\"`);\n snbtData.addToken(pos, type, chunk);\n\n return matches[0].length;\n },\n },\n {\n // String - not quoted and all else failed\n type: 'STRING',\n pattern: anchorPattern('^[-0-9a-zA-Z_.+]+'),\n callback: (pos, type, snbtData, matches) => {\n snbtData.addToken(pos, type, matches[0]);\n\n return matches[0].length;\n },\n },\n];\n\n// Creates a regular expression that will start at the beginning of the string\n// and conclude with an \"end of token\" marker at the end. The lookahead will\n// not capture the end of the token marker.\nfunction anchorPattern(pattern: string) {\n return new RegExp(`^${pattern}\\s*(?=$|,|}|]|:)`);\n}\n\nexport function snbtParse(snbt: string) {\n const snbtData = new SnbtData();\n let pos = 0;\n\n while (pos < snbt.length) {\n const increment = testParsers(\n snbtData,\n snbt.slice(pos),\n tokenParsers,\n pos\n );\n\n if (!increment) {\n throw new Error(`Unexpected token at position ${pos}`);\n }\n\n debugLog('Increment position by %d', increment);\n pos += increment;\n }\n\n return snbtData;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -102,7 +102,7 @@ for (const file of args.MCA_FILE) {
|
|
|
102
102
|
console.log(JSON.stringify(signs, null, 4));
|
|
103
103
|
|
|
104
104
|
async function processFile(filename: string): Promise<SignInfo[]> {
|
|
105
|
-
debugLog(
|
|
105
|
+
debugLog('Reading file: %s', filename);
|
|
106
106
|
|
|
107
107
|
if (args['--verbose']) {
|
|
108
108
|
console.log(`Reading file: ${filename}`);
|
|
@@ -118,7 +118,7 @@ async function processFile(filename: string): Promise<SignInfo[]> {
|
|
|
118
118
|
const signs = processChunk(chunk);
|
|
119
119
|
|
|
120
120
|
if (signs.length > 0) {
|
|
121
|
-
debugLog(
|
|
121
|
+
debugLog('Found %d signs in chunk: %s', signs.length, chunkKey);
|
|
122
122
|
|
|
123
123
|
if (args['--verbose']) {
|
|
124
124
|
console.log(
|
|
@@ -139,7 +139,7 @@ function processChunk(chunk: Chunk): SignInfo[] {
|
|
|
139
139
|
|
|
140
140
|
for (const blockName of blockNames) {
|
|
141
141
|
if (blockName.match(/^minecraft:.+_sign$/)) {
|
|
142
|
-
debugLog(
|
|
142
|
+
debugLog('Chunk lists sign name: %s', blockName);
|
|
143
143
|
|
|
144
144
|
const listOfBlockCoordinates = chunk.findBlocksByName(blockName);
|
|
145
145
|
|
|
@@ -150,7 +150,7 @@ function processChunk(chunk: Chunk): SignInfo[] {
|
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
for (const coords of listOfBlockCoordinates) {
|
|
153
|
-
debugLog(
|
|
153
|
+
debugLog('Checking block at coordinates: %o', coords);
|
|
154
154
|
const block = chunk.getBlock(coords);
|
|
155
155
|
|
|
156
156
|
if (!(block instanceof Sign)) {
|
|
@@ -162,24 +162,24 @@ function processChunk(chunk: Chunk): SignInfo[] {
|
|
|
162
162
|
const front = block.frontText();
|
|
163
163
|
const back = block.backText();
|
|
164
164
|
const text = [...front, ...(back ?? [])].join('');
|
|
165
|
-
debugLog(
|
|
166
|
-
debugLog(
|
|
165
|
+
debugLog('Front: %o', front);
|
|
166
|
+
debugLog('Back: %o', back);
|
|
167
167
|
|
|
168
168
|
if (args['--blank'] && text.length !== 0) {
|
|
169
|
-
debugLog(
|
|
169
|
+
debugLog('Skipping non-blank sign.');
|
|
170
170
|
continue;
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
if (args['--generated'] && !text.match(/^[^a-z0-9]*$/i)) {
|
|
174
|
-
debugLog(
|
|
174
|
+
debugLog('Skipping user-created sign.');
|
|
175
175
|
}
|
|
176
176
|
|
|
177
177
|
if (args['--user'] && !text.match(/[a-z0-9]/i)) {
|
|
178
|
-
debugLog(
|
|
178
|
+
debugLog('Skipping a possibly generated sign.');
|
|
179
179
|
continue;
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
debugLog(
|
|
182
|
+
debugLog('Found a matching sign.');
|
|
183
183
|
|
|
184
184
|
if (args['--verbose']) {
|
|
185
185
|
console.log(
|
|
@@ -112,7 +112,7 @@ async function processFile(
|
|
|
112
112
|
filename: string,
|
|
113
113
|
determinator: (chunkKey: string) => boolean
|
|
114
114
|
) {
|
|
115
|
-
debugLog(
|
|
115
|
+
debugLog('Reading file: %s', filename);
|
|
116
116
|
|
|
117
117
|
if (args['--verbose']) {
|
|
118
118
|
console.log(`Reading file: ${filename}`);
|
|
@@ -127,13 +127,13 @@ async function processFile(
|
|
|
127
127
|
const chunkKey = chunk.chunkKey() || '';
|
|
128
128
|
|
|
129
129
|
if (determinator(chunkKey)) {
|
|
130
|
-
debugLog(
|
|
130
|
+
debugLog('Preserving chunk: %s', chunkKey);
|
|
131
131
|
|
|
132
132
|
if (args['--verbose']) {
|
|
133
133
|
console.log(`Preserving chunk: ${chunkKey}`);
|
|
134
134
|
}
|
|
135
135
|
} else {
|
|
136
|
-
debugLog(
|
|
136
|
+
debugLog('Removing chunk: %s', chunkKey);
|
|
137
137
|
|
|
138
138
|
if (args['--verbose']) {
|
|
139
139
|
console.log(`Removing chunk: ${chunkKey}`);
|
|
@@ -56,11 +56,11 @@ Options:
|
|
|
56
56
|
|
|
57
57
|
async function readInput(filename: string | undefined) {
|
|
58
58
|
if (!filename || filename === '-') {
|
|
59
|
-
debugLog(
|
|
59
|
+
debugLog('Reading from stdin');
|
|
60
60
|
return await getStdin.buffer();
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
debugLog(
|
|
63
|
+
debugLog('Reading file: %s', filename);
|
|
64
64
|
|
|
65
65
|
return readFile(filename);
|
|
66
66
|
}
|
package/src/lib/block-data.ts
CHANGED
|
@@ -42,8 +42,9 @@ function parseBlockData(
|
|
|
42
42
|
if (bitsRead < 64) {
|
|
43
43
|
// These extra bits can have any values. They are not
|
|
44
44
|
// initialized before writing to disk.
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
const bitsToSkip = 64 - bitsRead;
|
|
46
|
+
bitData.getBits(bitsToSkip);
|
|
47
|
+
debugLog('Skipped %d bits', bitsToSkip);
|
|
47
48
|
}
|
|
48
49
|
|
|
49
50
|
bitsRead = 0;
|
|
@@ -10,13 +10,13 @@ export class NbtByteArray extends NbtBase<number[]> {
|
|
|
10
10
|
name ??= NbtByteArray.readName(bd);
|
|
11
11
|
const data: number[] = [];
|
|
12
12
|
const length = bd.getInt();
|
|
13
|
-
debugLogFromBinaryData(
|
|
13
|
+
debugLogFromBinaryData('BYTE_ARRAY, name %s, length %d', name, length);
|
|
14
14
|
|
|
15
15
|
for (let i = 0; i < length; i++) {
|
|
16
16
|
data.push(bd.getByte());
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
debugLogFromBinaryData(
|
|
19
|
+
debugLogFromBinaryData('BYTE_ARRAY, data %o', name, length, data);
|
|
20
20
|
|
|
21
21
|
return new NbtByteArray(data, name);
|
|
22
22
|
}
|
package/src/nbt/nbt-byte.ts
CHANGED
|
@@ -9,7 +9,7 @@ export class NbtByte extends NbtBase<number> {
|
|
|
9
9
|
static fromBinaryData(bd: BinaryData, name?: string): NbtByte {
|
|
10
10
|
name ??= NbtByte.readName(bd);
|
|
11
11
|
const data = bd.getByte();
|
|
12
|
-
debugLogFromBinaryData(
|
|
12
|
+
debugLogFromBinaryData('BYTE, name %s, data %d', name, data);
|
|
13
13
|
|
|
14
14
|
return new NbtByte(data, name);
|
|
15
15
|
}
|
package/src/nbt/nbt-compound.ts
CHANGED
|
@@ -11,7 +11,7 @@ export class NbtCompound extends NbtBase<NbtBase<any>[]> {
|
|
|
11
11
|
static fromBinaryData<T>(bd: BinaryData, name?: string): NbtCompound {
|
|
12
12
|
name ??= NbtCompound.readName(bd);
|
|
13
13
|
const data: NbtBase<T>[] = [];
|
|
14
|
-
debugLogFromBinaryData(
|
|
14
|
+
debugLogFromBinaryData('COMPOUND, name %s, starting', name);
|
|
15
15
|
|
|
16
16
|
// Careful - this does not store the END tag
|
|
17
17
|
let tag = Nbt.getTag(bd);
|
|
@@ -27,7 +27,7 @@ export class NbtCompound extends NbtBase<NbtBase<any>[]> {
|
|
|
27
27
|
);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
debugLogFromBinaryData(
|
|
30
|
+
debugLogFromBinaryData('COMPOUND, name %s, finished', name);
|
|
31
31
|
|
|
32
32
|
return new NbtCompound(data, name);
|
|
33
33
|
}
|
package/src/nbt/nbt-double.ts
CHANGED
|
@@ -9,7 +9,7 @@ export class NbtDouble extends NbtBase<number> {
|
|
|
9
9
|
static fromBinaryData(bd: BinaryData, name?: string): NbtDouble {
|
|
10
10
|
name ??= NbtDouble.readName(bd);
|
|
11
11
|
const data = bd.getDouble();
|
|
12
|
-
debugLogFromBinaryData(
|
|
12
|
+
debugLogFromBinaryData('DOUBLE, name %s, data %d', name, data);
|
|
13
13
|
|
|
14
14
|
return new NbtDouble(data, name);
|
|
15
15
|
}
|
package/src/nbt/nbt-float.ts
CHANGED
|
@@ -9,7 +9,7 @@ export class NbtFloat extends NbtBase<number> {
|
|
|
9
9
|
static fromBinaryData(bd: BinaryData, name?: string): NbtFloat {
|
|
10
10
|
name ??= NbtFloat.readName(bd);
|
|
11
11
|
const data = bd.getFloat();
|
|
12
|
-
debugLogFromBinaryData(
|
|
12
|
+
debugLogFromBinaryData('FLOAT, name %s, data %d', name, data);
|
|
13
13
|
|
|
14
14
|
return new NbtFloat(data, name);
|
|
15
15
|
}
|
package/src/nbt/nbt-int-array.ts
CHANGED
|
@@ -10,13 +10,13 @@ export class NbtIntArray extends NbtBase<number[]> {
|
|
|
10
10
|
name ??= NbtIntArray.readName(bd);
|
|
11
11
|
const data: number[] = [];
|
|
12
12
|
const length = bd.getInt();
|
|
13
|
-
debugLogFromBinaryData(
|
|
13
|
+
debugLogFromBinaryData('INT_ARRAY, name %s, length %d', name, length);
|
|
14
14
|
|
|
15
15
|
for (let i = 0; i < length; i++) {
|
|
16
16
|
data.push(bd.getInt());
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
debugLogFromBinaryData(
|
|
19
|
+
debugLogFromBinaryData('INT_ARRAY, name %s, data %o', name, data);
|
|
20
20
|
|
|
21
21
|
return new NbtIntArray(data, name);
|
|
22
22
|
}
|
package/src/nbt/nbt-int.ts
CHANGED
|
@@ -9,7 +9,7 @@ export class NbtInt extends NbtBase<number> {
|
|
|
9
9
|
static fromBinaryData(bd: BinaryData, name?: string): NbtInt {
|
|
10
10
|
name ??= NbtInt.readName(bd);
|
|
11
11
|
const data = bd.getInt();
|
|
12
|
-
debugLogFromBinaryData(
|
|
12
|
+
debugLogFromBinaryData('INT, name %s, data %d', name, data);
|
|
13
13
|
|
|
14
14
|
return new NbtInt(data, name);
|
|
15
15
|
}
|
package/src/nbt/nbt-list.ts
CHANGED
|
@@ -57,7 +57,7 @@ export class NbtList<T extends NbtBase<any>> extends NbtBase<T[]> {
|
|
|
57
57
|
const index = parseInt(currentSegment, 10);
|
|
58
58
|
|
|
59
59
|
if (isNaN(index)) {
|
|
60
|
-
debugLogFindChild(
|
|
60
|
+
debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, not a number', this.name, this.subtype, path, currentSegment);
|
|
61
61
|
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
@@ -65,18 +65,18 @@ export class NbtList<T extends NbtBase<any>> extends NbtBase<T[]> {
|
|
|
65
65
|
const result = this.data[index];
|
|
66
66
|
|
|
67
67
|
if (!result) {
|
|
68
|
-
debugLogFindChild(
|
|
68
|
+
debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, no child found at index %d', this.name, this.subtype, path, currentSegment, index);
|
|
69
69
|
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
if (pathSegments.length) {
|
|
74
|
-
debugLogFindChild(
|
|
74
|
+
debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, recurse', this.name, this.subtype, path, currentSegment);
|
|
75
75
|
|
|
76
76
|
return result.findChild<RESULT>(pathSegments.join('/'));
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
debugLogFindChild(
|
|
79
|
+
debugLogFindChild('LIST, name %s, subtype %s, path %s, segment %s, found', this.name, this.subtype, path, currentSegment);
|
|
80
80
|
|
|
81
81
|
return result as unknown as RESULT;
|
|
82
82
|
}
|
|
@@ -10,7 +10,7 @@ export class NbtLongArray extends NbtBase<bigint[]> {
|
|
|
10
10
|
name ??= NbtLongArray.readName(bd);
|
|
11
11
|
const data: bigint[] = [];
|
|
12
12
|
const length = bd.getInt();
|
|
13
|
-
debugLogFromBinaryData(
|
|
13
|
+
debugLogFromBinaryData('LONG_ARRAY, name %s, length %d', name, length);
|
|
14
14
|
|
|
15
15
|
for (let i = 0; i < length; i++) {
|
|
16
16
|
// This needs to be able to be converted back to a bit stream in
|
|
@@ -18,7 +18,7 @@ export class NbtLongArray extends NbtBase<bigint[]> {
|
|
|
18
18
|
data.push(bd.getInt64LE());
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
debugLogFromBinaryData(
|
|
21
|
+
debugLogFromBinaryData('LONG_ARRAY, name %s, data length %d', name, data.length);
|
|
22
22
|
|
|
23
23
|
return new NbtLongArray(data, name);
|
|
24
24
|
}
|
package/src/nbt/nbt-long.ts
CHANGED
|
@@ -9,7 +9,7 @@ export class NbtLong extends NbtBase<bigint> {
|
|
|
9
9
|
static fromBinaryData(bd: BinaryData, name?: string): NbtLong {
|
|
10
10
|
name ??= NbtLong.readName(bd);
|
|
11
11
|
const data = bd.getInt64LE();
|
|
12
|
-
debugLogFromBinaryData(
|
|
12
|
+
debugLogFromBinaryData('LONG, name %s, data %d', name, data);
|
|
13
13
|
|
|
14
14
|
return new NbtLong(data, name);
|
|
15
15
|
}
|
package/src/nbt/nbt-short.ts
CHANGED
|
@@ -9,7 +9,7 @@ export class NbtShort extends NbtBase<number> {
|
|
|
9
9
|
static fromBinaryData(bd: BinaryData, name?: string): NbtShort {
|
|
10
10
|
name ??= NbtShort.readName(bd);
|
|
11
11
|
const data = bd.getShort();
|
|
12
|
-
debugLogFromBinaryData(
|
|
12
|
+
debugLogFromBinaryData('SHORT, name %s, data %d', name, data);
|
|
13
13
|
|
|
14
14
|
return new NbtShort(data, name);
|
|
15
15
|
}
|
package/src/nbt/snbt-parse.ts
CHANGED
|
@@ -24,7 +24,7 @@ function testParsers(
|
|
|
24
24
|
const match = str.match(pattern);
|
|
25
25
|
|
|
26
26
|
if (match) {
|
|
27
|
-
debugLog(
|
|
27
|
+
debugLog('Matched %s at position %d: %s', type, pos, match[0]);
|
|
28
28
|
|
|
29
29
|
return callback(pos, type, snbtData, match);
|
|
30
30
|
}
|
|
@@ -251,7 +251,7 @@ export function snbtParse(snbt: string) {
|
|
|
251
251
|
throw new Error(`Unexpected token at position ${pos}`);
|
|
252
252
|
}
|
|
253
253
|
|
|
254
|
-
debugLog(
|
|
254
|
+
debugLog('Increment position by %d', increment);
|
|
255
255
|
pos += increment;
|
|
256
256
|
}
|
|
257
257
|
|