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.
Files changed (50) hide show
  1. package/dist/bin/mca-find-signs.js +10 -10
  2. package/dist/bin/mca-find-signs.js.map +1 -1
  3. package/dist/bin/mca-remove-chunks.js +3 -3
  4. package/dist/bin/mca-remove-chunks.js.map +1 -1
  5. package/dist/bin/nbt-get-player-location.js +2 -2
  6. package/dist/bin/nbt-get-player-location.js.map +1 -1
  7. package/dist/lib/block-data.d.ts.map +1 -1
  8. package/dist/lib/block-data.js +3 -2
  9. package/dist/lib/block-data.js.map +1 -1
  10. package/dist/nbt/nbt-byte-array.js +2 -2
  11. package/dist/nbt/nbt-byte-array.js.map +1 -1
  12. package/dist/nbt/nbt-byte.js +1 -1
  13. package/dist/nbt/nbt-byte.js.map +1 -1
  14. package/dist/nbt/nbt-compound.js +2 -2
  15. package/dist/nbt/nbt-compound.js.map +1 -1
  16. package/dist/nbt/nbt-double.js +1 -1
  17. package/dist/nbt/nbt-double.js.map +1 -1
  18. package/dist/nbt/nbt-float.js +1 -1
  19. package/dist/nbt/nbt-float.js.map +1 -1
  20. package/dist/nbt/nbt-int-array.js +2 -2
  21. package/dist/nbt/nbt-int-array.js.map +1 -1
  22. package/dist/nbt/nbt-int.js +1 -1
  23. package/dist/nbt/nbt-int.js.map +1 -1
  24. package/dist/nbt/nbt-list.js +4 -4
  25. package/dist/nbt/nbt-list.js.map +1 -1
  26. package/dist/nbt/nbt-long-array.js +2 -2
  27. package/dist/nbt/nbt-long-array.js.map +1 -1
  28. package/dist/nbt/nbt-long.js +1 -1
  29. package/dist/nbt/nbt-long.js.map +1 -1
  30. package/dist/nbt/nbt-short.js +1 -1
  31. package/dist/nbt/nbt-short.js.map +1 -1
  32. package/dist/nbt/snbt-parse.js +2 -2
  33. package/dist/nbt/snbt-parse.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/bin/mca-find-signs.ts +10 -10
  36. package/src/bin/mca-remove-chunks.ts +3 -3
  37. package/src/bin/nbt-get-player-location.ts +2 -2
  38. package/src/lib/block-data.ts +3 -2
  39. package/src/nbt/nbt-byte-array.ts +2 -2
  40. package/src/nbt/nbt-byte.ts +1 -1
  41. package/src/nbt/nbt-compound.ts +2 -2
  42. package/src/nbt/nbt-double.ts +1 -1
  43. package/src/nbt/nbt-float.ts +1 -1
  44. package/src/nbt/nbt-int-array.ts +2 -2
  45. package/src/nbt/nbt-int.ts +1 -1
  46. package/src/nbt/nbt-list.ts +4 -4
  47. package/src/nbt/nbt-long-array.ts +2 -2
  48. package/src/nbt/nbt-long.ts +1 -1
  49. package/src/nbt/nbt-short.ts +1 -1
  50. 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(`Reading file: ${filename}`);
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(`Found ${signs.length} signs in chunk ${chunkKey}.`);
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(`Chunk lists sign name: ${blockName}`);
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(`Checking block at coordinates: ${coords}`);
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(`Front: ${JSON.stringify(front)}`);
111
- debugLog(`Back: ${JSON.stringify(back)}`);
110
+ debugLog('Front: %o', front);
111
+ debugLog('Back: %o', back);
112
112
  if (args['--blank'] && text.length !== 0) {
113
- debugLog(`Skipping non-blank sign.`);
113
+ debugLog('Skipping non-blank sign.');
114
114
  continue;
115
115
  }
116
116
  if (args['--generated'] && !text.match(/^[^a-z0-9]*$/i)) {
117
- debugLog(`Skipping user-created sign.`);
117
+ debugLog('Skipping user-created sign.');
118
118
  }
119
119
  if (args['--user'] && !text.match(/[a-z0-9]/i)) {
120
- debugLog(`Skipping a possible generated sign.`);
120
+ debugLog('Skipping a possibly generated sign.');
121
121
  continue;
122
122
  }
123
- debugLog(`Found a matching sign.`);
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":"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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: %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(`Reading file: ${filename}`);
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(`Preserving chunk: ${chunkKey}`);
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(`Removing chunk: ${chunkKey}`);
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":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,QAAQ,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC5C,MAAM,IAAI,GAQN,MAAM,CAAC,GAAG,CACV;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BH,EACG;IACI,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,YAAY,EAAE,IAAI;CACrB,CACJ,CAAC;AAEF,IAAI,EAAE,CAAC;AAEP,KAAK,UAAU,IAAI;IACf,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QAEjE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAEnE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,YAAY,GAAG,gBAAgB,EAAE,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACD,MAAM,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC1C,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,WAAW,CACtB,QAAgB,EAChB,YAA2C;IAE3C,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,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QAExC,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;YAE3C,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;YACjD,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;YAEzC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC,CAAC;QACjB,CAAC;IACL,CAAC;IAED,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACV,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,yCAAyC,QAAQ,EAAE,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;YACpD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACnD,MAAM,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB;IACrB,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QACrB,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAEzD,OAAO,CAAC,QAAgB,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC;SAAM,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAErD,OAAO,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC;SAAM,CAAC;QACJ,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACxE,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC3C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,QAAQ;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC;AACjB,CAAC","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(`Reading from stdin`);
48
+ debugLog('Reading from stdin');
49
49
  return await getStdin.buffer();
50
50
  }
51
- debugLog(`Reading file: ${filename}`);
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":"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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: ${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
+ {"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;AAiDxD,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"}
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"}
@@ -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
- bitData.getBits(64 - bitsRead);
24
- debugLog(`Skipped ${64 - bitsRead} bits`);
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":"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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 bitData.getBits(64 - bitsRead);\n debugLog(`Skipped ${64 - bitsRead} bits`);\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"]}
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(`BYTE_ARRAY, name ${name}, length ${length}`);
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(`BYTE_ARRAY, data ${data}`);
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,oBAAoB,IAAI,YAAY,MAAM,EAAE,CAAC,CAAC;QAErE,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,oBAAoB,IAAI,EAAE,CAAC,CAAC;QAEnD,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 ${name}, length ${length}`);\n\n for (let i = 0; i < length; i++) {\n data.push(bd.getByte());\n }\n\n debugLogFromBinaryData(`BYTE_ARRAY, data ${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"]}
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"]}
@@ -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(`BYTE, name ${name}, data ${data}`);
9
+ debugLogFromBinaryData('BYTE, name %s, data %d', name, data);
10
10
  return new NbtByte(data, name);
11
11
  }
12
12
  constructor(data, name) {
@@ -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,cAAc,IAAI,UAAU,IAAI,EAAE,CAAC,CAAC;QAE3D,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 ${name}, data ${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"]}
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"]}
@@ -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(`COMPOUND, name ${name}, starting`);
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(`COMPOUND, name ${name}, finished`);
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":"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","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 ${name}, starting`);\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 ${name}, finished`);\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"]}
1
+ {"version":3,"file":"nbt-compound.js","sourceRoot":"","sources":["../../src/nbt/nbt-compound.ts"],"names":[],"mappings":"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","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"]}
@@ -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(`DOUBLE, name ${name}, data ${data}`);
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,gBAAgB,IAAI,UAAU,IAAI,EAAE,CAAC,CAAC;QAE7D,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 ${name}, data ${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"]}
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"]}
@@ -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(`FLOAT, name ${name}, data ${data}`);
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,eAAe,IAAI,UAAU,IAAI,EAAE,CAAC,CAAC;QAE5D,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 ${name}, data ${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"]}
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(`INT_ARRAY, name ${name}, length ${length}`);
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(`INT_ARRAY, name ${name}, data ${data}`);
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,mBAAmB,IAAI,YAAY,MAAM,EAAE,CAAC,CAAC;QAEpE,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,mBAAmB,IAAI,UAAU,IAAI,EAAE,CAAC,CAAC;QAEhE,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 ${name}, length ${length}`);\n\n for (let i = 0; i < length; i++) {\n data.push(bd.getInt());\n }\n\n debugLogFromBinaryData(`INT_ARRAY, name ${name}, data ${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"]}
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"]}
@@ -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(`INT, name ${name}, data ${data}`);
9
+ debugLogFromBinaryData('INT, name %s, data %d', name, data);
10
10
  return new NbtInt(data, name);
11
11
  }
12
12
  constructor(data, name) {
@@ -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,aAAa,IAAI,UAAU,IAAI,EAAE,CAAC,CAAC;QAE1D,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 ${name}, data ${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"]}
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"]}
@@ -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(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, not a number`);
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(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, no child found at index ${index}`);
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(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, recurse`);
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(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, found`);
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) {
@@ -1 +1 @@
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 ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, not a number`);\n\n return;\n }\n\n const result = this.data[index];\n\n if (!result) {\n debugLogFindChild(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, no child found at index ${index}`);\n\n return;\n }\n\n if (pathSegments.length) {\n debugLogFindChild(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, recurse`);\n\n return result.findChild<RESULT>(pathSegments.join('/'));\n }\n\n debugLogFindChild(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, found`);\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"]}
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(`LONG_ARRAY, name ${name}, length ${length}`);
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(`LONG_ARRAY, name ${name}, data ${data}`);
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,oBAAoB,IAAI,YAAY,MAAM,EAAE,CAAC,CAAC;QAErE,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,oBAAoB,IAAI,UAAU,IAAI,EAAE,CAAC,CAAC;QAEjE,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 ${name}, length ${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 ${name}, data ${data}`);\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"]}
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"]}
@@ -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(`LONG, name ${name}, data ${data}`);
9
+ debugLogFromBinaryData('LONG, name %s, data %d', name, data);
10
10
  return new NbtLong(data, name);
11
11
  }
12
12
  constructor(data, name) {
@@ -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,cAAc,IAAI,UAAU,IAAI,EAAE,CAAC,CAAC;QAE3D,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 ${name}, data ${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"]}
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"]}
@@ -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(`SHORT, name ${name}, data ${data}`);
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,eAAe,IAAI,UAAU,IAAI,EAAE,CAAC,CAAC;QAE5D,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 ${name}, data ${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"]}
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"]}
@@ -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(`Matched ${type} at position ${pos}: ${match[0]}`);
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(`Increment position by ${increment}`);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mca-json",
3
- "version": "1.2.1",
3
+ "version": "1.2.2",
4
4
  "description": "Convert Minecraft MCA (Anvil files) and NBT into JSON and back, or modify directly in memory. Works on region files and player data.",
5
5
  "keywords": [
6
6
  "minecraft",
@@ -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(`Reading file: ${filename}`);
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(`Found ${signs.length} signs in chunk ${chunkKey}.`);
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(`Chunk lists sign name: ${blockName}`);
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(`Checking block at coordinates: ${coords}`);
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(`Front: ${JSON.stringify(front)}`);
166
- debugLog(`Back: ${JSON.stringify(back)}`);
165
+ debugLog('Front: %o', front);
166
+ debugLog('Back: %o', back);
167
167
 
168
168
  if (args['--blank'] && text.length !== 0) {
169
- debugLog(`Skipping non-blank sign.`);
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(`Skipping user-created sign.`);
174
+ debugLog('Skipping user-created sign.');
175
175
  }
176
176
 
177
177
  if (args['--user'] && !text.match(/[a-z0-9]/i)) {
178
- debugLog(`Skipping a possible generated sign.`);
178
+ debugLog('Skipping a possibly generated sign.');
179
179
  continue;
180
180
  }
181
181
 
182
- debugLog(`Found a matching sign.`);
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(`Reading file: ${filename}`);
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(`Preserving chunk: ${chunkKey}`);
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(`Removing chunk: ${chunkKey}`);
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(`Reading from stdin`);
59
+ debugLog('Reading from stdin');
60
60
  return await getStdin.buffer();
61
61
  }
62
62
 
63
- debugLog(`Reading file: ${filename}`);
63
+ debugLog('Reading file: %s', filename);
64
64
 
65
65
  return readFile(filename);
66
66
  }
@@ -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
- bitData.getBits(64 - bitsRead);
46
- debugLog(`Skipped ${64 - bitsRead} bits`);
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(`BYTE_ARRAY, name ${name}, length ${length}`);
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(`BYTE_ARRAY, data ${data}`);
19
+ debugLogFromBinaryData('BYTE_ARRAY, data %o', name, length, data);
20
20
 
21
21
  return new NbtByteArray(data, name);
22
22
  }
@@ -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(`BYTE, name ${name}, data ${data}`);
12
+ debugLogFromBinaryData('BYTE, name %s, data %d', name, data);
13
13
 
14
14
  return new NbtByte(data, name);
15
15
  }
@@ -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(`COMPOUND, name ${name}, starting`);
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(`COMPOUND, name ${name}, finished`);
30
+ debugLogFromBinaryData('COMPOUND, name %s, finished', name);
31
31
 
32
32
  return new NbtCompound(data, name);
33
33
  }
@@ -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(`DOUBLE, name ${name}, data ${data}`);
12
+ debugLogFromBinaryData('DOUBLE, name %s, data %d', name, data);
13
13
 
14
14
  return new NbtDouble(data, name);
15
15
  }
@@ -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(`FLOAT, name ${name}, data ${data}`);
12
+ debugLogFromBinaryData('FLOAT, name %s, data %d', name, data);
13
13
 
14
14
  return new NbtFloat(data, name);
15
15
  }
@@ -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(`INT_ARRAY, name ${name}, length ${length}`);
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(`INT_ARRAY, name ${name}, data ${data}`);
19
+ debugLogFromBinaryData('INT_ARRAY, name %s, data %o', name, data);
20
20
 
21
21
  return new NbtIntArray(data, name);
22
22
  }
@@ -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(`INT, name ${name}, data ${data}`);
12
+ debugLogFromBinaryData('INT, name %s, data %d', name, data);
13
13
 
14
14
  return new NbtInt(data, name);
15
15
  }
@@ -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(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, not a number`);
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(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, no child found at index ${index}`);
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(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, recurse`);
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(`LIST, name ${this.name}, subtype ${this.subtype}, path ${path}, segment ${currentSegment}, found`);
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(`LONG_ARRAY, name ${name}, length ${length}`);
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(`LONG_ARRAY, name ${name}, data ${data}`);
21
+ debugLogFromBinaryData('LONG_ARRAY, name %s, data length %d', name, data.length);
22
22
 
23
23
  return new NbtLongArray(data, name);
24
24
  }
@@ -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(`LONG, name ${name}, data ${data}`);
12
+ debugLogFromBinaryData('LONG, name %s, data %d', name, data);
13
13
 
14
14
  return new NbtLong(data, name);
15
15
  }
@@ -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(`SHORT, name ${name}, data ${data}`);
12
+ debugLogFromBinaryData('SHORT, name %s, data %d', name, data);
13
13
 
14
14
  return new NbtShort(data, name);
15
15
  }
@@ -24,7 +24,7 @@ function testParsers(
24
24
  const match = str.match(pattern);
25
25
 
26
26
  if (match) {
27
- debugLog(`Matched ${type} at position ${pos}: ${match[0]}`);
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(`Increment position by ${increment}`);
254
+ debugLog('Increment position by %d', increment);
255
255
  pos += increment;
256
256
  }
257
257