mca-json 1.1.1 → 1.2.0

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 (187) hide show
  1. package/dist/bin/mca-chunks.js +1 -1
  2. package/dist/bin/mca-chunks.js.map +1 -1
  3. package/dist/bin/mca-find-signs.js +2 -2
  4. package/dist/bin/mca-find-signs.js.map +1 -1
  5. package/dist/bin/mca-json.js +1 -1
  6. package/dist/bin/mca-json.js.map +1 -1
  7. package/dist/bin/mca-remove-chunks.js +1 -1
  8. package/dist/bin/mca-remove-chunks.js.map +1 -1
  9. package/dist/bin/nbt-get-player-location.js +1 -1
  10. package/dist/bin/nbt-get-player-location.js.map +1 -1
  11. package/dist/bin/nbt-json.js +1 -1
  12. package/dist/bin/nbt-json.js.map +1 -1
  13. package/dist/block/banner.d.ts +1 -1
  14. package/dist/block/banner.d.ts.map +1 -1
  15. package/dist/block/banner.js +2 -2
  16. package/dist/block/banner.js.map +1 -1
  17. package/dist/block/barrel.d.ts +6 -6
  18. package/dist/block/barrel.d.ts.map +1 -1
  19. package/dist/block/barrel.js +4 -4
  20. package/dist/block/barrel.js.map +1 -1
  21. package/dist/block/beacon.d.ts +6 -6
  22. package/dist/block/beacon.d.ts.map +1 -1
  23. package/dist/block/beacon.js +4 -4
  24. package/dist/block/beacon.js.map +1 -1
  25. package/dist/block/bed.d.ts +1 -1
  26. package/dist/block/bed.d.ts.map +1 -1
  27. package/dist/block/bed.js +1 -1
  28. package/dist/block/bed.js.map +1 -1
  29. package/dist/block/beehive.d.ts +4 -4
  30. package/dist/block/beehive.d.ts.map +1 -1
  31. package/dist/block/beehive.js +1 -1
  32. package/dist/block/beehive.js.map +1 -1
  33. package/dist/block/bell.d.ts +1 -1
  34. package/dist/block/bell.d.ts.map +1 -1
  35. package/dist/block/bell.js +1 -1
  36. package/dist/block/bell.js.map +1 -1
  37. package/dist/block/block.d.ts +10 -10
  38. package/dist/block/block.d.ts.map +1 -1
  39. package/dist/block/block.js +8 -8
  40. package/dist/block/block.js.map +1 -1
  41. package/dist/block/generic.d.ts +2 -2
  42. package/dist/block/generic.d.ts.map +1 -1
  43. package/dist/block/generic.js.map +1 -1
  44. package/dist/block/has-entity-data.d.ts +3 -3
  45. package/dist/block/has-entity-data.d.ts.map +1 -1
  46. package/dist/block/has-entity-data.js +1 -1
  47. package/dist/block/has-entity-data.js.map +1 -1
  48. package/dist/block/mixins/custom-name.d.ts +1 -1
  49. package/dist/block/mixins/custom-name.d.ts.map +1 -1
  50. package/dist/block/mixins/custom-name.js +1 -1
  51. package/dist/block/mixins/custom-name.js.map +1 -1
  52. package/dist/block/mixins/lock.d.ts +1 -1
  53. package/dist/block/mixins/lock.d.ts.map +1 -1
  54. package/dist/block/mixins/lock.js +1 -1
  55. package/dist/block/mixins/lock.js.map +1 -1
  56. package/dist/block/sign.d.ts +1 -1
  57. package/dist/block/sign.d.ts.map +1 -1
  58. package/dist/block/sign.js +1 -1
  59. package/dist/block/sign.js.map +1 -1
  60. package/dist/index.d.ts +38 -38
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +38 -38
  63. package/dist/index.js.map +1 -1
  64. package/dist/lib/anvil.d.ts +3 -3
  65. package/dist/lib/anvil.d.ts.map +1 -1
  66. package/dist/lib/anvil.js +3 -3
  67. package/dist/lib/anvil.js.map +1 -1
  68. package/dist/lib/bit-data.d.ts +1 -1
  69. package/dist/lib/bit-data.d.ts.map +1 -1
  70. package/dist/lib/bit-data.js.map +1 -1
  71. package/dist/lib/block-data.d.ts +4 -4
  72. package/dist/lib/block-data.d.ts.map +1 -1
  73. package/dist/lib/block-data.js +1 -1
  74. package/dist/lib/block-data.js.map +1 -1
  75. package/dist/lib/chunk.d.ts +5 -5
  76. package/dist/lib/chunk.d.ts.map +1 -1
  77. package/dist/lib/chunk.js +3 -3
  78. package/dist/lib/chunk.js.map +1 -1
  79. package/dist/nbt/nbt-base.d.ts +2 -2
  80. package/dist/nbt/nbt-base.d.ts.map +1 -1
  81. package/dist/nbt/nbt-base.js.map +1 -1
  82. package/dist/nbt/nbt-byte-array.d.ts +3 -3
  83. package/dist/nbt/nbt-byte-array.d.ts.map +1 -1
  84. package/dist/nbt/nbt-byte-array.js +2 -2
  85. package/dist/nbt/nbt-byte-array.js.map +1 -1
  86. package/dist/nbt/nbt-byte.d.ts +3 -3
  87. package/dist/nbt/nbt-byte.d.ts.map +1 -1
  88. package/dist/nbt/nbt-byte.js +2 -2
  89. package/dist/nbt/nbt-byte.js.map +1 -1
  90. package/dist/nbt/nbt-compound.d.ts +3 -3
  91. package/dist/nbt/nbt-compound.d.ts.map +1 -1
  92. package/dist/nbt/nbt-compound.js +3 -3
  93. package/dist/nbt/nbt-compound.js.map +1 -1
  94. package/dist/nbt/nbt-double.d.ts +3 -3
  95. package/dist/nbt/nbt-double.d.ts.map +1 -1
  96. package/dist/nbt/nbt-double.js +2 -2
  97. package/dist/nbt/nbt-double.js.map +1 -1
  98. package/dist/nbt/nbt-end.d.ts +2 -2
  99. package/dist/nbt/nbt-end.d.ts.map +1 -1
  100. package/dist/nbt/nbt-end.js +2 -2
  101. package/dist/nbt/nbt-end.js.map +1 -1
  102. package/dist/nbt/nbt-float.d.ts +3 -3
  103. package/dist/nbt/nbt-float.d.ts.map +1 -1
  104. package/dist/nbt/nbt-float.js +2 -2
  105. package/dist/nbt/nbt-float.js.map +1 -1
  106. package/dist/nbt/nbt-int-array.d.ts +3 -3
  107. package/dist/nbt/nbt-int-array.d.ts.map +1 -1
  108. package/dist/nbt/nbt-int-array.js +2 -2
  109. package/dist/nbt/nbt-int-array.js.map +1 -1
  110. package/dist/nbt/nbt-int.d.ts +3 -3
  111. package/dist/nbt/nbt-int.d.ts.map +1 -1
  112. package/dist/nbt/nbt-int.js +2 -2
  113. package/dist/nbt/nbt-int.js.map +1 -1
  114. package/dist/nbt/nbt-list.d.ts +3 -3
  115. package/dist/nbt/nbt-list.d.ts.map +1 -1
  116. package/dist/nbt/nbt-list.js +3 -3
  117. package/dist/nbt/nbt-list.js.map +1 -1
  118. package/dist/nbt/nbt-long-array.d.ts +3 -3
  119. package/dist/nbt/nbt-long-array.d.ts.map +1 -1
  120. package/dist/nbt/nbt-long-array.js +2 -2
  121. package/dist/nbt/nbt-long-array.js.map +1 -1
  122. package/dist/nbt/nbt-long.d.ts +3 -3
  123. package/dist/nbt/nbt-long.d.ts.map +1 -1
  124. package/dist/nbt/nbt-long.js +2 -2
  125. package/dist/nbt/nbt-long.js.map +1 -1
  126. package/dist/nbt/nbt-short.d.ts +3 -3
  127. package/dist/nbt/nbt-short.d.ts.map +1 -1
  128. package/dist/nbt/nbt-short.js +2 -2
  129. package/dist/nbt/nbt-short.js.map +1 -1
  130. package/dist/nbt/nbt-string.d.ts +3 -3
  131. package/dist/nbt/nbt-string.d.ts.map +1 -1
  132. package/dist/nbt/nbt-string.js +2 -2
  133. package/dist/nbt/nbt-string.js.map +1 -1
  134. package/dist/nbt/nbt.d.ts +2 -2
  135. package/dist/nbt/nbt.d.ts.map +1 -1
  136. package/dist/nbt/nbt.js +17 -17
  137. package/dist/nbt/nbt.js.map +1 -1
  138. package/dist/nbt/snbt-parse.d.ts +1 -1
  139. package/dist/nbt/snbt-parse.d.ts.map +1 -1
  140. package/dist/nbt/snbt-parse.js +1 -1
  141. package/dist/nbt/snbt-parse.js.map +1 -1
  142. package/dist/nbt/snbt-to-nbt.d.ts +2 -2
  143. package/dist/nbt/snbt-to-nbt.d.ts.map +1 -1
  144. package/dist/nbt/snbt-to-nbt.js +12 -12
  145. package/dist/nbt/snbt-to-nbt.js.map +1 -1
  146. package/package.json +3 -3
  147. package/src/bin/mca-chunks.ts +1 -1
  148. package/src/bin/mca-find-signs.ts +3 -3
  149. package/src/bin/mca-json.ts +1 -1
  150. package/src/bin/mca-remove-chunks.ts +1 -1
  151. package/src/bin/nbt-get-player-location.ts +1 -1
  152. package/src/bin/nbt-json.ts +1 -1
  153. package/src/block/banner.ts +4 -4
  154. package/src/block/barrel.ts +8 -8
  155. package/src/block/beacon.ts +5 -5
  156. package/src/block/bed.ts +1 -1
  157. package/src/block/beehive.ts +5 -5
  158. package/src/block/bell.ts +1 -1
  159. package/src/block/block.ts +10 -10
  160. package/src/block/generic.ts +2 -2
  161. package/src/block/has-entity-data.ts +3 -3
  162. package/src/block/mixins/custom-name.ts +2 -2
  163. package/src/block/mixins/lock.ts +2 -2
  164. package/src/block/sign.ts +4 -4
  165. package/src/index.ts +38 -38
  166. package/src/lib/anvil.ts +4 -4
  167. package/src/lib/bit-data.ts +1 -1
  168. package/src/lib/block-data.ts +6 -6
  169. package/src/lib/chunk.ts +13 -13
  170. package/src/nbt/nbt-base.ts +2 -2
  171. package/src/nbt/nbt-byte-array.ts +3 -3
  172. package/src/nbt/nbt-byte.ts +3 -3
  173. package/src/nbt/nbt-compound.ts +4 -4
  174. package/src/nbt/nbt-double.ts +3 -3
  175. package/src/nbt/nbt-end.ts +2 -2
  176. package/src/nbt/nbt-float.ts +3 -3
  177. package/src/nbt/nbt-int-array.ts +3 -3
  178. package/src/nbt/nbt-int.ts +3 -3
  179. package/src/nbt/nbt-list.ts +4 -4
  180. package/src/nbt/nbt-long-array.ts +3 -3
  181. package/src/nbt/nbt-long.ts +3 -3
  182. package/src/nbt/nbt-short.ts +3 -3
  183. package/src/nbt/nbt-string.ts +3 -3
  184. package/src/nbt/nbt.ts +18 -18
  185. package/src/nbt/snbt-parse.ts +1 -1
  186. package/src/nbt/snbt-to-nbt.ts +14 -14
  187. package/tsconfig.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/block/block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAI9B,MAAM,OAAO,KAAK;IACd,MAAM,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAA4C;QACzE,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxB,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;QAClB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QAC1B,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;QACpB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;KACvB,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAY,EAAE,MAAgB,EAAE,UAAwB;QAClE,KAAK,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC/D,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChB,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY;QACxB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY;QACxB,OAAO,IAAI,KAAK,kBAAkB,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY;QACxB,OAAO,IAAI,KAAK,kBAAkB,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAY;QACzB,OAAO,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,oBAAoB,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAY;QACtB,OAAO,IAAI,KAAK,gBAAgB,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAY;QACtB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/C,CAAC","sourcesContent":["import { Banner } from './banner';\nimport { Barrel } from './barrel';\nimport { Beacon } from './beacon';\nimport { Bed } from './bed';\nimport { Beehive } from './beehive';\nimport { Bell } from './bell';\nimport { Coords3d } from '../types/coords';\nimport { Generic } from './generic';\nimport { NbtCompound } from '../nbt/nbt-compound';\nimport { Sign } from './sign';\n\nexport type BlockInstance = Banner | Barrel | Beacon | Bed | Beehive | Bell | Generic | Sign;\n\nexport class Block {\n static blockConstructor = new Map<(name: string) => boolean, typeof Generic>([\n [Block.isBanner, Banner],\n [Block.isBarrel, Barrel],\n [Block.isBeacon, Beacon],\n [Block.isBed, Bed],\n [Block.isBeehive, Beehive],\n [Block.isBell, Bell],\n [Block.isSign, Sign]\n ]);\n\n static create(name: string, coords: Coords3d, entityData?: NbtCompound): Generic {\n for (const [isBlock, blockConstructor] of Block.blockConstructor) {\n if (isBlock(name)) {\n return new blockConstructor(name, coords, entityData);\n }\n }\n\n return new Generic(name, coords, entityData);\n }\n\n static isBanner(name: string): boolean {\n return !!name.match(/^minecraft:.+_banner$/);\n }\n\n static isBarrel(name: string): boolean {\n return name === 'minecraft:barrel';\n }\n\n static isBeacon(name: string): boolean {\n return name === 'minecraft:beacon';\n }\n\n static isBed(name: string): boolean {\n return !!name.match(/^minecraft:.+_bed$/);\n }\n\n static isBeehive(name: string): boolean {\n return name === 'minecraft:beehive' || name === 'minecraft:bee_nest';\n }\n\n static isBell(name: string): boolean {\n return name === 'minecraft:bell';\n }\n\n static isSign(name: string): boolean {\n return !!name.match(/^minecraft:.+_sign$/);\n }\n}\n"]}
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/block/block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,OAAO,KAAK;IACd,MAAM,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAA4C;QACzE,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxB,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;QAClB,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;QAC1B,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;QACpB,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;KACvB,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,IAAY,EAAE,MAAgB,EAAE,UAAwB;QAClE,KAAK,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC/D,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChB,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY;QACxB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY;QACxB,OAAO,IAAI,KAAK,kBAAkB,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY;QACxB,OAAO,IAAI,KAAK,kBAAkB,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,IAAY;QACzB,OAAO,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,oBAAoB,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAY;QACtB,OAAO,IAAI,KAAK,gBAAgB,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAY;QACtB,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC/C,CAAC","sourcesContent":["import { Banner } from './banner.js';\nimport { Barrel } from './barrel.js';\nimport { Beacon } from './beacon.js';\nimport { Bed } from './bed.js';\nimport { Beehive } from './beehive.js';\nimport { Bell } from './bell.js';\nimport { Coords3d } from '../types/coords.js';\nimport { Generic } from './generic.js';\nimport { NbtCompound } from '../nbt/nbt-compound.js';\nimport { Sign } from './sign.js';\n\nexport type BlockInstance = Banner | Barrel | Beacon | Bed | Beehive | Bell | Generic | Sign;\n\nexport class Block {\n static blockConstructor = new Map<(name: string) => boolean, typeof Generic>([\n [Block.isBanner, Banner],\n [Block.isBarrel, Barrel],\n [Block.isBeacon, Beacon],\n [Block.isBed, Bed],\n [Block.isBeehive, Beehive],\n [Block.isBell, Bell],\n [Block.isSign, Sign]\n ]);\n\n static create(name: string, coords: Coords3d, entityData?: NbtCompound): Generic {\n for (const [isBlock, blockConstructor] of Block.blockConstructor) {\n if (isBlock(name)) {\n return new blockConstructor(name, coords, entityData);\n }\n }\n\n return new Generic(name, coords, entityData);\n }\n\n static isBanner(name: string): boolean {\n return !!name.match(/^minecraft:.+_banner$/);\n }\n\n static isBarrel(name: string): boolean {\n return name === 'minecraft:barrel';\n }\n\n static isBeacon(name: string): boolean {\n return name === 'minecraft:beacon';\n }\n\n static isBed(name: string): boolean {\n return !!name.match(/^minecraft:.+_bed$/);\n }\n\n static isBeehive(name: string): boolean {\n return name === 'minecraft:beehive' || name === 'minecraft:bee_nest';\n }\n\n static isBell(name: string): boolean {\n return name === 'minecraft:bell';\n }\n\n static isSign(name: string): boolean {\n return !!name.match(/^minecraft:.+_sign$/);\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { Coords3d } from '../types/coords';
2
- import { NbtCompound } from '../nbt/nbt-compound';
1
+ import { Coords3d } from '../types/coords.js';
2
+ import { NbtCompound } from '../nbt/nbt-compound.js';
3
3
  export declare class Generic {
4
4
  name: string;
5
5
  coords: Coords3d;
@@ -1 +1 @@
1
- {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/block/generic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,OAAO;IAEL,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,UAAU,CAAC,EAAE,WAAW;gBAFxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,EAChB,UAAU,CAAC,EAAE,WAAW,YAAA;IAGnC,UAAU,IAAI,WAAW,GAAG,SAAS;CAGxC"}
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/block/generic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,qBAAa,OAAO;IAEL,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,UAAU,CAAC,EAAE,WAAW;gBAFxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,EAChB,UAAU,CAAC,EAAE,WAAW,YAAA;IAGnC,UAAU,IAAI,WAAW,GAAG,SAAS;CAGxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../src/block/generic.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,OAAO;IAEL;IACA;IACA;IAHX,YACW,IAAY,EACZ,MAAgB,EAChB,UAAwB;QAFxB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAU;QAChB,eAAU,GAAV,UAAU,CAAc;IAChC,CAAC;IAEJ,UAAU;QACN,OAAO,IAAI,CAAC,UAAU,EAAE,SAAS,CAAc,YAAY,CAAC,CAAC;IACjE,CAAC;CACJ","sourcesContent":["import { Coords3d } from '../types/coords';\nimport { NbtCompound } from '../nbt/nbt-compound';\n\nexport class Generic {\n constructor(\n public name: string,\n public coords: Coords3d,\n public entityData?: NbtCompound\n ) {}\n\n components(): NbtCompound | undefined {\n return this.entityData?.findChild<NbtCompound>('components');\n }\n}\n"]}
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../src/block/generic.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,OAAO;IAEL;IACA;IACA;IAHX,YACW,IAAY,EACZ,MAAgB,EAChB,UAAwB;QAFxB,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAU;QAChB,eAAU,GAAV,UAAU,CAAc;IAChC,CAAC;IAEJ,UAAU;QACN,OAAO,IAAI,CAAC,UAAU,EAAE,SAAS,CAAc,YAAY,CAAC,CAAC;IACjE,CAAC;CACJ","sourcesContent":["import { Coords3d } from '../types/coords.js';\nimport { NbtCompound } from '../nbt/nbt-compound.js';\n\nexport class Generic {\n constructor(\n public name: string,\n public coords: Coords3d,\n public entityData?: NbtCompound\n ) {}\n\n components(): NbtCompound | undefined {\n return this.entityData?.findChild<NbtCompound>('components');\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { Generic } from './generic';
2
- import { Coords3d } from '../types/coords';
3
- import { NbtCompound } from '../nbt/nbt-compound';
1
+ import { Generic } from './generic.js';
2
+ import { Coords3d } from '../types/coords.js';
3
+ import { NbtCompound } from '../nbt/nbt-compound.js';
4
4
  export declare class HasEntityData extends Generic {
5
5
  entityData: NbtCompound;
6
6
  constructor(name: string, coords: Coords3d, entityData?: NbtCompound);
@@ -1 +1 @@
1
- {"version":3,"file":"has-entity-data.d.ts","sourceRoot":"","sources":["../../src/block/has-entity-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,aAAc,SAAQ,OAAO;IAC7B,UAAU,EAAE,WAAW,CAAC;gBAG7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,EAChB,UAAU,CAAC,EAAE,WAAW;CAS/B"}
1
+ {"version":3,"file":"has-entity-data.d.ts","sourceRoot":"","sources":["../../src/block/has-entity-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,qBAAa,aAAc,SAAQ,OAAO;IAC7B,UAAU,EAAE,WAAW,CAAC;gBAG7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,QAAQ,EAChB,UAAU,CAAC,EAAE,WAAW;CAS/B"}
@@ -1,4 +1,4 @@
1
- import { Generic } from './generic';
1
+ import { Generic } from './generic.js';
2
2
  export class HasEntityData extends Generic {
3
3
  entityData;
4
4
  constructor(name, coords, entityData) {
@@ -1 +1 @@
1
- {"version":3,"file":"has-entity-data.js","sourceRoot":"","sources":["../../src/block/has-entity-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,OAAO,aAAc,SAAQ,OAAO;IAC7B,UAAU,CAAc;IAEjC,YACI,IAAY,EACZ,MAAgB,EAChB,UAAwB;QAExB,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7D,CAAC;QAED,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;CACJ","sourcesContent":["import { Generic } from './generic';\nimport { Coords3d } from '../types/coords';\nimport { NbtCompound } from '../nbt/nbt-compound';\n\nexport class HasEntityData extends Generic {\n override entityData: NbtCompound;\n\n constructor(\n name: string,\n coords: Coords3d,\n entityData?: NbtCompound\n ) {\n if (!entityData) {\n throw new Error('Block is supposed to have entity data');\n }\n\n super(name, coords, entityData);\n this.entityData = entityData;\n }\n}\n"]}
1
+ {"version":3,"file":"has-entity-data.js","sourceRoot":"","sources":["../../src/block/has-entity-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,MAAM,OAAO,aAAc,SAAQ,OAAO;IAC7B,UAAU,CAAc;IAEjC,YACI,IAAY,EACZ,MAAgB,EAChB,UAAwB;QAExB,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7D,CAAC;QAED,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;CACJ","sourcesContent":["import { Generic } from './generic.js';\nimport { Coords3d } from '../types/coords.js';\nimport { NbtCompound } from '../nbt/nbt-compound.js';\n\nexport class HasEntityData extends Generic {\n override entityData: NbtCompound;\n\n constructor(\n name: string,\n coords: Coords3d,\n entityData?: NbtCompound\n ) {\n if (!entityData) {\n throw new Error('Block is supposed to have entity data');\n }\n\n super(name, coords, entityData);\n this.entityData = entityData;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { HasEntityData } from '../has-entity-data';
1
+ import { HasEntityData } from '../has-entity-data.js';
2
2
  export declare class CustomName extends HasEntityData {
3
3
  customName(): string | undefined;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"custom-name.d.ts","sourceRoot":"","sources":["../../../src/block/mixins/custom-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,qBAAa,UAAW,SAAQ,aAAa;IACzC,UAAU,IAAI,MAAM,GAAG,SAAS;CAGnC"}
1
+ {"version":3,"file":"custom-name.d.ts","sourceRoot":"","sources":["../../../src/block/mixins/custom-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,qBAAa,UAAW,SAAQ,aAAa;IACzC,UAAU,IAAI,MAAM,GAAG,SAAS;CAGnC"}
@@ -1,4 +1,4 @@
1
- import { HasEntityData } from '../has-entity-data';
1
+ import { HasEntityData } from '../has-entity-data.js';
2
2
  export class CustomName extends HasEntityData {
3
3
  customName() {
4
4
  return this.entityData.findChild('CustomName')?.data;
@@ -1 +1 @@
1
- {"version":3,"file":"custom-name.js","sourceRoot":"","sources":["../../../src/block/mixins/custom-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,OAAO,UAAW,SAAQ,aAAa;IACzC,UAAU;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAY,YAAY,CAAC,EAAE,IAAI,CAAC;IACpE,CAAC;CACJ","sourcesContent":["import { HasEntityData } from '../has-entity-data';\nimport { NbtString } from '../../nbt/nbt-string';\n\nexport class CustomName extends HasEntityData {\n customName(): string | undefined {\n return this.entityData.findChild<NbtString>('CustomName')?.data;\n }\n}\n"]}
1
+ {"version":3,"file":"custom-name.js","sourceRoot":"","sources":["../../../src/block/mixins/custom-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,MAAM,OAAO,UAAW,SAAQ,aAAa;IACzC,UAAU;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAY,YAAY,CAAC,EAAE,IAAI,CAAC;IACpE,CAAC;CACJ","sourcesContent":["import { HasEntityData } from '../has-entity-data.js';\nimport { NbtString } from '../../nbt/nbt-string.js';\n\nexport class CustomName extends HasEntityData {\n customName(): string | undefined {\n return this.entityData.findChild<NbtString>('CustomName')?.data;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { HasEntityData } from '../has-entity-data';
1
+ import { HasEntityData } from '../has-entity-data.js';
2
2
  export declare class Lock extends HasEntityData {
3
3
  lock(): string | undefined;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../../src/block/mixins/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,qBAAa,IAAK,SAAQ,aAAa;IACnC,IAAI,IAAI,MAAM,GAAG,SAAS;CAG7B"}
1
+ {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../../src/block/mixins/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,qBAAa,IAAK,SAAQ,aAAa;IACnC,IAAI,IAAI,MAAM,GAAG,SAAS;CAG7B"}
@@ -1,4 +1,4 @@
1
- import { HasEntityData } from '../has-entity-data';
1
+ import { HasEntityData } from '../has-entity-data.js';
2
2
  export class Lock extends HasEntityData {
3
3
  lock() {
4
4
  return this.entityData.findChild('Lock')?.data;
@@ -1 +1 @@
1
- {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/block/mixins/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,OAAO,IAAK,SAAQ,aAAa;IACnC,IAAI;QACA,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAY,MAAM,CAAC,EAAE,IAAI,CAAC;IAC9D,CAAC;CACJ","sourcesContent":["import { HasEntityData } from '../has-entity-data';\nimport { NbtString } from '../../nbt/nbt-string';\n\nexport class Lock extends HasEntityData {\n lock(): string | undefined {\n return this.entityData.findChild<NbtString>('Lock')?.data;\n }\n}\n"]}
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../../src/block/mixins/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,MAAM,OAAO,IAAK,SAAQ,aAAa;IACnC,IAAI;QACA,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAY,MAAM,CAAC,EAAE,IAAI,CAAC;IAC9D,CAAC;CACJ","sourcesContent":["import { HasEntityData } from '../has-entity-data.js';\nimport { NbtString } from '../../nbt/nbt-string.js';\n\nexport class Lock extends HasEntityData {\n lock(): string | undefined {\n return this.entityData.findChild<NbtString>('Lock')?.data;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { HasEntityData } from './has-entity-data';
1
+ import { HasEntityData } from './has-entity-data.js';
2
2
  type SignText = [string, string, string, string];
3
3
  export declare class Sign extends HasEntityData {
4
4
  backColor(): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/block/sign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKlD,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,qBAAa,IAAK,SAAQ,aAAa;IACnC,SAAS,IAAI,MAAM,GAAG,SAAS;IAK/B,eAAe,IAAI,OAAO,GAAG,SAAS;IActC,QAAQ,IAAI,QAAQ,GAAG,SAAS;IAchC,UAAU,IAAI,MAAM,GAAG,SAAS;IAShC,gBAAgB,IAAI,OAAO,GAAG,SAAS;IAcvC,SAAS,IAAI,QAAQ;IAyBrB,OAAO,IAAI,OAAO,GAAG,SAAS;IAY9B,OAAO,CAAC,UAAU;CAGrB"}
1
+ {"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../../src/block/sign.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAKrD,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,qBAAa,IAAK,SAAQ,aAAa;IACnC,SAAS,IAAI,MAAM,GAAG,SAAS;IAK/B,eAAe,IAAI,OAAO,GAAG,SAAS;IActC,QAAQ,IAAI,QAAQ,GAAG,SAAS;IAchC,UAAU,IAAI,MAAM,GAAG,SAAS;IAShC,gBAAgB,IAAI,OAAO,GAAG,SAAS;IAcvC,SAAS,IAAI,QAAQ;IAyBrB,OAAO,IAAI,OAAO,GAAG,SAAS;IAY9B,OAAO,CAAC,UAAU;CAGrB"}
@@ -1,4 +1,4 @@
1
- import { HasEntityData } from './has-entity-data';
1
+ import { HasEntityData } from './has-entity-data.js';
2
2
  export class Sign extends HasEntityData {
3
3
  backColor() {
4
4
  // 1.20+
@@ -1 +1 @@
1
- {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/block/sign.ts"],"names":[],"mappings":"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","sourcesContent":["import { HasEntityData } from './has-entity-data';\nimport { NbtByte } from '../nbt/nbt-byte';\nimport { NbtList } from '../nbt/nbt-list';\nimport { NbtString } from '../nbt/nbt-string';\n\ntype SignText = [string, string, string, string];\n\nexport class Sign extends HasEntityData {\n backColor(): string | undefined {\n // 1.20+\n return this.entityData.findChild<NbtString>('back_text/color')?.data;\n }\n\n backGlowingText(): boolean | undefined {\n // 1.20+\n const byte = this.entityData.findChild<NbtByte>(\n 'back_text/has_glowing_text'\n );\n\n if (byte) {\n return byte.data !== 0;\n }\n\n // Up to 1.19\n return;\n }\n\n backText(): SignText | undefined {\n // 1.20+\n const backSnbt = this.entityData\n .findChild<NbtList<NbtString>>('back_text/messages')\n ?.data.map((tag) => tag.data);\n\n if (this.isSignText(backSnbt)) {\n return backSnbt;\n }\n\n // Up to 1.19\n return;\n }\n\n frontColor(): string | undefined {\n return (\n // 1.20+\n this.entityData.findChild<NbtString>('front_text/color')?.data ||\n // Up to 1.19\n this.entityData.findChild<NbtString>('Color')?.data\n );\n }\n\n frontGlowingText(): boolean | undefined {\n const byte =\n // 1.20+\n this.entityData.findChild<NbtByte>('front_text/has_glowing_text') ||\n // Up to 1.19\n this.entityData.findChild<NbtByte>('GlowingText');\n\n if (byte) {\n return byte.data !== 0;\n }\n\n return;\n }\n\n frontText(): SignText {\n // 1.20+\n const frontSnbt = this.entityData\n .findChild<NbtList<NbtString>>('front_text/messages')\n ?.data.map((tag) => tag.data);\n\n if (this.isSignText(frontSnbt)) {\n return frontSnbt;\n }\n\n // Up to 1.19\n const frontOldSnbt = [\n this.entityData.findChild<NbtString>('Text1')?.data,\n this.entityData.findChild<NbtString>('Text2')?.data,\n this.entityData.findChild<NbtString>('Text3')?.data,\n this.entityData.findChild<NbtString>('Text4')?.data,\n ].filter((tag): tag is string => !!tag);\n\n if (this.isSignText(frontOldSnbt)) {\n return frontOldSnbt;\n }\n\n throw new Error('Unknown format for sign text');\n }\n\n isWaxed(): boolean | undefined {\n const tag = this.entityData.findChild<NbtByte>('waxed');\n\n if (!tag) {\n // Up to 1.19\n return;\n }\n\n // 1.20+\n return tag.data !== 0;\n }\n\n private isSignText(value?: string[]): value is SignText {\n return value?.length === 4;\n }\n}\n"]}
1
+ {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../src/block/sign.ts"],"names":[],"mappings":"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","sourcesContent":["import { HasEntityData } from './has-entity-data.js';\nimport { NbtByte } from '../nbt/nbt-byte.js';\nimport { NbtList } from '../nbt/nbt-list.js';\nimport { NbtString } from '../nbt/nbt-string.js';\n\ntype SignText = [string, string, string, string];\n\nexport class Sign extends HasEntityData {\n backColor(): string | undefined {\n // 1.20+\n return this.entityData.findChild<NbtString>('back_text/color')?.data;\n }\n\n backGlowingText(): boolean | undefined {\n // 1.20+\n const byte = this.entityData.findChild<NbtByte>(\n 'back_text/has_glowing_text'\n );\n\n if (byte) {\n return byte.data !== 0;\n }\n\n // Up to 1.19\n return;\n }\n\n backText(): SignText | undefined {\n // 1.20+\n const backSnbt = this.entityData\n .findChild<NbtList<NbtString>>('back_text/messages')\n ?.data.map((tag) => tag.data);\n\n if (this.isSignText(backSnbt)) {\n return backSnbt;\n }\n\n // Up to 1.19\n return;\n }\n\n frontColor(): string | undefined {\n return (\n // 1.20+\n this.entityData.findChild<NbtString>('front_text/color')?.data ||\n // Up to 1.19\n this.entityData.findChild<NbtString>('Color')?.data\n );\n }\n\n frontGlowingText(): boolean | undefined {\n const byte =\n // 1.20+\n this.entityData.findChild<NbtByte>('front_text/has_glowing_text') ||\n // Up to 1.19\n this.entityData.findChild<NbtByte>('GlowingText');\n\n if (byte) {\n return byte.data !== 0;\n }\n\n return;\n }\n\n frontText(): SignText {\n // 1.20+\n const frontSnbt = this.entityData\n .findChild<NbtList<NbtString>>('front_text/messages')\n ?.data.map((tag) => tag.data);\n\n if (this.isSignText(frontSnbt)) {\n return frontSnbt;\n }\n\n // Up to 1.19\n const frontOldSnbt = [\n this.entityData.findChild<NbtString>('Text1')?.data,\n this.entityData.findChild<NbtString>('Text2')?.data,\n this.entityData.findChild<NbtString>('Text3')?.data,\n this.entityData.findChild<NbtString>('Text4')?.data,\n ].filter((tag): tag is string => !!tag);\n\n if (this.isSignText(frontOldSnbt)) {\n return frontOldSnbt;\n }\n\n throw new Error('Unknown format for sign text');\n }\n\n isWaxed(): boolean | undefined {\n const tag = this.entityData.findChild<NbtByte>('waxed');\n\n if (!tag) {\n // Up to 1.19\n return;\n }\n\n // 1.20+\n return tag.data !== 0;\n }\n\n private isSignText(value?: string[]): value is SignText {\n return value?.length === 4;\n }\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,39 +1,39 @@
1
- export * from './block/banner';
2
- export * from './block/barrel';
3
- export * from './block/beacon';
4
- export * from './block/bed';
5
- export * from './block/beehive';
6
- export * from './block/bell';
7
- export * from './block/block';
8
- export * from './block/generic';
9
- export * from './block/has-entity-data';
10
- export * from './block/mixins/custom-name';
11
- export * from './block/mixins/lock';
12
- export * from './block/mixins/mixin';
13
- export * from './block/sign';
14
- export * from './lib/anvil';
15
- export * from './lib/binary-data';
16
- export * from './lib/bit-data';
17
- export * from './lib/block-data';
18
- export * from './lib/chunk';
19
- export * from './nbt/nbt';
20
- export * from './nbt/nbt-base';
21
- export * from './nbt/nbt-byte';
22
- export * from './nbt/nbt-byte-array';
23
- export * from './nbt/nbt-compound';
24
- export * from './nbt/nbt-double';
25
- export * from './nbt/nbt-end';
26
- export * from './nbt/nbt-float';
27
- export * from './nbt/nbt-int';
28
- export * from './nbt/nbt-int-array';
29
- export * from './nbt/nbt-list';
30
- export * from './nbt/nbt-long';
31
- export * from './nbt/nbt-long-array';
32
- export * from './nbt/nbt-short';
33
- export * from './nbt/nbt-string';
34
- export * from './nbt/nbt-tag-type';
35
- export * from './nbt/snbt-data';
36
- export * from './nbt/snbt-parse';
37
- export * from './nbt/snbt-to-nbt';
38
- export * from './types/coords';
1
+ export * from './block/banner.js';
2
+ export * from './block/barrel.js';
3
+ export * from './block/beacon.js';
4
+ export * from './block/bed.js';
5
+ export * from './block/beehive.js';
6
+ export * from './block/bell.js';
7
+ export * from './block/block.js';
8
+ export * from './block/generic.js';
9
+ export * from './block/has-entity-data.js';
10
+ export * from './block/mixins/custom-name.js';
11
+ export * from './block/mixins/lock.js';
12
+ export * from './block/mixins/mixin.js';
13
+ export * from './block/sign.js';
14
+ export * from './lib/anvil.js';
15
+ export * from './lib/binary-data.js';
16
+ export * from './lib/bit-data.js';
17
+ export * from './lib/block-data.js';
18
+ export * from './lib/chunk.js';
19
+ export * from './nbt/nbt-base.js';
20
+ export * from './nbt/nbt-byte-array.js';
21
+ export * from './nbt/nbt-byte.js';
22
+ export * from './nbt/nbt-compound.js';
23
+ export * from './nbt/nbt-double.js';
24
+ export * from './nbt/nbt-end.js';
25
+ export * from './nbt/nbt-float.js';
26
+ export * from './nbt/nbt-int-array.js';
27
+ export * from './nbt/nbt-int.js';
28
+ export * from './nbt/nbt-list.js';
29
+ export * from './nbt/nbt-long-array.js';
30
+ export * from './nbt/nbt-long.js';
31
+ export * from './nbt/nbt-short.js';
32
+ export * from './nbt/nbt-string.js';
33
+ export * from './nbt/nbt-tag-type.js';
34
+ export * from './nbt/nbt.js';
35
+ export * from './nbt/snbt-data.js';
36
+ export * from './nbt/snbt-parse.js';
37
+ export * from './nbt/snbt-to-nbt.js';
38
+ export * from './types/coords.js';
39
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,39 +1,39 @@
1
- export * from './block/banner';
2
- export * from './block/barrel';
3
- export * from './block/beacon';
4
- export * from './block/bed';
5
- export * from './block/beehive';
6
- export * from './block/bell';
7
- export * from './block/block';
8
- export * from './block/generic';
9
- export * from './block/has-entity-data';
10
- export * from './block/mixins/custom-name';
11
- export * from './block/mixins/lock';
12
- export * from './block/mixins/mixin';
13
- export * from './block/sign';
14
- export * from './lib/anvil';
15
- export * from './lib/binary-data';
16
- export * from './lib/bit-data';
17
- export * from './lib/block-data';
18
- export * from './lib/chunk';
19
- export * from './nbt/nbt';
20
- export * from './nbt/nbt-base';
21
- export * from './nbt/nbt-byte';
22
- export * from './nbt/nbt-byte-array';
23
- export * from './nbt/nbt-compound';
24
- export * from './nbt/nbt-double';
25
- export * from './nbt/nbt-end';
26
- export * from './nbt/nbt-float';
27
- export * from './nbt/nbt-int';
28
- export * from './nbt/nbt-int-array';
29
- export * from './nbt/nbt-list';
30
- export * from './nbt/nbt-long';
31
- export * from './nbt/nbt-long-array';
32
- export * from './nbt/nbt-short';
33
- export * from './nbt/nbt-string';
34
- export * from './nbt/nbt-tag-type';
35
- export * from './nbt/snbt-data';
36
- export * from './nbt/snbt-parse';
37
- export * from './nbt/snbt-to-nbt';
38
- export * from './types/coords';
1
+ export * from './block/banner.js';
2
+ export * from './block/barrel.js';
3
+ export * from './block/beacon.js';
4
+ export * from './block/bed.js';
5
+ export * from './block/beehive.js';
6
+ export * from './block/bell.js';
7
+ export * from './block/block.js';
8
+ export * from './block/generic.js';
9
+ export * from './block/has-entity-data.js';
10
+ export * from './block/mixins/custom-name.js';
11
+ export * from './block/mixins/lock.js';
12
+ export * from './block/mixins/mixin.js';
13
+ export * from './block/sign.js';
14
+ export * from './lib/anvil.js';
15
+ export * from './lib/binary-data.js';
16
+ export * from './lib/bit-data.js';
17
+ export * from './lib/block-data.js';
18
+ export * from './lib/chunk.js';
19
+ export * from './nbt/nbt-base.js';
20
+ export * from './nbt/nbt-byte-array.js';
21
+ export * from './nbt/nbt-byte.js';
22
+ export * from './nbt/nbt-compound.js';
23
+ export * from './nbt/nbt-double.js';
24
+ export * from './nbt/nbt-end.js';
25
+ export * from './nbt/nbt-float.js';
26
+ export * from './nbt/nbt-int-array.js';
27
+ export * from './nbt/nbt-int.js';
28
+ export * from './nbt/nbt-list.js';
29
+ export * from './nbt/nbt-long-array.js';
30
+ export * from './nbt/nbt-long.js';
31
+ export * from './nbt/nbt-short.js';
32
+ export * from './nbt/nbt-string.js';
33
+ export * from './nbt/nbt-tag-type.js';
34
+ export * from './nbt/nbt.js';
35
+ export * from './nbt/snbt-data.js';
36
+ export * from './nbt/snbt-parse.js';
37
+ export * from './nbt/snbt-to-nbt.js';
38
+ export * from './types/coords.js';
39
39
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC","sourcesContent":["export * from './block/banner';\nexport * from './block/barrel';\nexport * from './block/beacon';\nexport * from './block/bed';\nexport * from './block/beehive';\nexport * from './block/bell';\nexport * from './block/block';\nexport * from './block/generic';\nexport * from './block/has-entity-data';\nexport * from './block/mixins/custom-name';\nexport * from './block/mixins/lock';\nexport * from './block/mixins/mixin';\nexport * from './block/sign';\nexport * from './lib/anvil';\nexport * from './lib/binary-data';\nexport * from './lib/bit-data';\nexport * from './lib/block-data';\nexport * from './lib/chunk';\nexport * from './nbt/nbt';\nexport * from './nbt/nbt-base';\nexport * from './nbt/nbt-byte';\nexport * from './nbt/nbt-byte-array';\nexport * from './nbt/nbt-compound';\nexport * from './nbt/nbt-double';\nexport * from './nbt/nbt-end';\nexport * from './nbt/nbt-float';\nexport * from './nbt/nbt-int';\nexport * from './nbt/nbt-int-array';\nexport * from './nbt/nbt-list';\nexport * from './nbt/nbt-long';\nexport * from './nbt/nbt-long-array';\nexport * from './nbt/nbt-short';\nexport * from './nbt/nbt-string';\nexport * from './nbt/nbt-tag-type';\nexport * from './nbt/snbt-data';\nexport * from './nbt/snbt-parse';\nexport * from './nbt/snbt-to-nbt';\nexport * from './types/coords';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC","sourcesContent":["export * from './block/banner.js';\nexport * from './block/barrel.js';\nexport * from './block/beacon.js';\nexport * from './block/bed.js';\nexport * from './block/beehive.js';\nexport * from './block/bell.js';\nexport * from './block/block.js';\nexport * from './block/generic.js';\nexport * from './block/has-entity-data.js';\nexport * from './block/mixins/custom-name.js';\nexport * from './block/mixins/lock.js';\nexport * from './block/mixins/mixin.js';\nexport * from './block/sign.js';\nexport * from './lib/anvil.js';\nexport * from './lib/binary-data.js';\nexport * from './lib/bit-data.js';\nexport * from './lib/block-data.js';\nexport * from './lib/chunk.js';\nexport * from './nbt/nbt-base.js';\nexport * from './nbt/nbt-byte-array.js';\nexport * from './nbt/nbt-byte.js';\nexport * from './nbt/nbt-compound.js';\nexport * from './nbt/nbt-double.js';\nexport * from './nbt/nbt-end.js';\nexport * from './nbt/nbt-float.js';\nexport * from './nbt/nbt-int-array.js';\nexport * from './nbt/nbt-int.js';\nexport * from './nbt/nbt-list.js';\nexport * from './nbt/nbt-long-array.js';\nexport * from './nbt/nbt-long.js';\nexport * from './nbt/nbt-short.js';\nexport * from './nbt/nbt-string.js';\nexport * from './nbt/nbt-tag-type.js';\nexport * from './nbt/nbt.js';\nexport * from './nbt/snbt-data.js';\nexport * from './nbt/snbt-parse.js';\nexport * from './nbt/snbt-to-nbt.js';\nexport * from './types/coords.js';\n"]}
@@ -1,6 +1,6 @@
1
- import { BinaryData } from './binary-data';
2
- import { Chunk } from './chunk';
3
- import { Coords2d } from '../types/coords';
1
+ import { BinaryData } from './binary-data.js';
2
+ import { Chunk } from './chunk.js';
3
+ import { Coords2d } from '../types/coords.js';
4
4
  type LocationEntry = {
5
5
  offset: number;
6
6
  sectorCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"anvil.d.ts","sourceRoot":"","sources":["../../src/lib/anvil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAI3C,KAAK,aAAa,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAWF;;GAEG;AACH,qBAAa,KAAK;IACd,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,KAAK;IAIjD,qBAAqB,EAAE,aAAa,EAAE,GAAG,IAAI,CAAQ;IACrD,IAAI,EAAE,UAAU,CAAC;gBAEL,IAAI,EAAE,eAAe;IAIjC;;OAEG;IACH,MAAM,IAAI,eAAe;IAIzB;;;OAGG;IACH,WAAW,CAAC,aAAa,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI;IAwBlD;;;;;OAKG;IACH,YAAY,IAAI,KAAK,EAAE;IAkBvB,QAAQ,CAAC,WAAW,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS;IAalD;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAqBxD;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,IAAI,aAAa,EAAE;CAmBlD"}
1
+ {"version":3,"file":"anvil.d.ts","sourceRoot":"","sources":["../../src/lib/anvil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI9C,KAAK,aAAa,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAWF;;GAEG;AACH,qBAAa,KAAK;IACd,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,KAAK;IAIjD,qBAAqB,EAAE,aAAa,EAAE,GAAG,IAAI,CAAQ;IACrD,IAAI,EAAE,UAAU,CAAC;gBAEL,IAAI,EAAE,eAAe;IAIjC;;OAEG;IACH,MAAM,IAAI,eAAe;IAIzB;;;OAGG;IACH,WAAW,CAAC,aAAa,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI;IAwBlD;;;;;OAKG;IACH,YAAY,IAAI,KAAK,EAAE;IAkBvB,QAAQ,CAAC,WAAW,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS;IAalD;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAqBxD;;;;OAIG;IACH,SAAS,CAAC,kBAAkB,IAAI,aAAa,EAAE;CAmBlD"}
package/dist/lib/anvil.js CHANGED
@@ -1,7 +1,7 @@
1
- import { BinaryData } from './binary-data';
2
- import { Chunk } from './chunk';
1
+ import { BinaryData } from './binary-data.js';
2
+ import { Chunk } from './chunk.js';
3
3
  import { inflate } from 'pako';
4
- import { Nbt } from '../nbt/nbt';
4
+ import { Nbt } from '../nbt/nbt.js';
5
5
  var CompressionType;
6
6
  (function (CompressionType) {
7
7
  CompressionType[CompressionType["GZIP"] = 1] = "GZIP";
@@ -1 +1 @@
1
- {"version":3,"file":"anvil.js","sourceRoot":"","sources":["../../src/lib/anvil.ts"],"names":[],"mappings":"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","sourcesContent":["import { BinaryData } from './binary-data';\nimport { Chunk } from './chunk';\nimport { Coords2d } from '../types/coords';\nimport { inflate } from 'pako';\nimport { Nbt } from '../nbt/nbt';\n\ntype LocationEntry = {\n offset: number; // 3 bytes\n sectorCount: number; // 1 byte\n};\n\nenum CompressionType {\n GZIP = 1,\n ZLIB = 2,\n NONE = 3,\n}\n\nconst LOCATION_ENTRIES_PER_FILE = 1024;\nconst SECTOR_SIZE = 4096;\n\n/**\n * Read and write Minecraft Anvil region files.\n */\nexport class Anvil {\n static fromBuffer(buffer: ArrayBufferLike): Anvil {\n return new Anvil(buffer);\n }\n\n cachedLocationEntries: LocationEntry[] | null = null;\n data: BinaryData;\n\n constructor(data: ArrayBufferLike) {\n this.data = new BinaryData(data);\n }\n\n /**\n * Returns the buffer that holds the Anvil data.\n */\n buffer(): ArrayBufferLike {\n return this.data.buffer();\n }\n\n /**\n * Delete a chunk. The location is either given in X,Z chunk coordinates or\n * passed in from a Chunk object.\n */\n deleteChunk(chunkLocation: Coords2d | Chunk): void {\n let index;\n\n if (Array.isArray(chunkLocation)) {\n index = this.chunkCoordinatesToIndex(chunkLocation);\n } else {\n const coords = chunkLocation.chunkCoordinates();\n\n if (!coords) {\n throw new Error('Chunk does not have coordinates');\n }\n\n index = this.chunkCoordinatesToIndex(coords);\n }\n\n // Clear cache before modifying location entries\n this.cachedLocationEntries = null;\n this.data.seek(index * 4); // Go to the pointer location for this chunk\n this.data.setNByteInteger(0, 3); // Erase the offset\n this.data.setByte(0); // Erase the sector count\n\n // The actual chunk data is still present in the file.\n }\n\n /**\n * Parses all chunks in the Anvil blob. Chunk objects are read in the order\n * they are stored in the location entry header sector.\n *\n * @returns Chunk[] a list of Chunk objects\n */\n getAllChunks(): Chunk[] {\n // Empty files can be written\n if (this.data.byteLength() === 0) {\n return [];\n }\n\n const chunks = this.getLocationEntries()\n .filter((x) => x.sectorCount > 0)\n .map((offset) => {\n const nbt = Nbt.fromBuffer(this.getChunkData(offset.offset));\n\n return new Chunk(nbt);\n });\n\n return chunks;\n }\n\n // Gets a chunk using chunk coordinates.\n getChunk(chunkCoords: Coords2d): Chunk | undefined {\n const locationEntries = this.getLocationEntries();\n const entry = locationEntries[this.chunkCoordinatesToIndex(chunkCoords)];\n\n if (entry?.sectorCount > 0) {\n const nbt = Nbt.fromBuffer(this.getChunkData(entry.offset));\n\n return new Chunk(nbt);\n }\n\n return;\n }\n\n /**\n * Convert from chunk coordinates to region-relative chunk coordinates, and\n * then to an index.\n */\n private chunkCoordinatesToIndex(chunkCoords: Coords2d): number {\n let regionChunkX = chunkCoords[0];\n let regionChunkZ = chunkCoords[1];\n const step = 4096 * 4096;\n\n while (regionChunkX < 0) {\n regionChunkX += step;\n }\n\n while (regionChunkZ < 0) {\n regionChunkZ += step;\n }\n\n return (regionChunkX % 32) + (regionChunkZ % 32) * 32;\n }\n\n /**\n * Extracts data for a chunk present at the given offset in the Anvil blob.\n * The offset is provided in sectors of SECTOR_SIZE bytes (as in the chunk\n * location entries from the blob's first header sector).\n *\n * @param offset the chunk's offset in number of sectors from the Anvil blob's start.\n */\n protected getChunkData(offset?: number): ArrayBufferLike {\n if (offset !== undefined) {\n this.data.seek(offset * SECTOR_SIZE);\n }\n\n const length = this.data.getUInt();\n const compressionType = this.data.getByte();\n const data = this.data.getArrayBuffer(length - 1); // First byte is the compression type\n\n if (\n compressionType === CompressionType.ZLIB ||\n compressionType === CompressionType.GZIP\n ) {\n // Could be SharedArrayBuffer, but it won't get used again after\n // inflation, so it being \"shared\" does not matter.\n return inflate(data as ArrayBuffer).buffer;\n }\n\n return data;\n }\n\n /**\n * Retrieves the full list of chunk location entries from this Anvil blob.\n * The pointer will be moved to the beginning of the first header sector at\n * the start of this method and advanced to the end during reading.\n */\n protected getLocationEntries(): LocationEntry[] {\n if (this.cachedLocationEntries) {\n return this.cachedLocationEntries;\n }\n\n this.data.seek(0);\n const result: LocationEntry[] = [];\n\n for (let i = 0; i < LOCATION_ENTRIES_PER_FILE; i += 1) {\n result.push({\n offset: this.data.getNByteInteger(3),\n sectorCount: this.data.getByte(),\n });\n }\n\n this.cachedLocationEntries = result;\n\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"anvil.js","sourceRoot":"","sources":["../../src/lib/anvil.ts"],"names":[],"mappings":"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","sourcesContent":["import { BinaryData } from './binary-data.js';\nimport { Chunk } from './chunk.js';\nimport { Coords2d } from '../types/coords.js';\nimport { inflate } from 'pako';\nimport { Nbt } from '../nbt/nbt.js';\n\ntype LocationEntry = {\n offset: number; // 3 bytes\n sectorCount: number; // 1 byte\n};\n\nenum CompressionType {\n GZIP = 1,\n ZLIB = 2,\n NONE = 3,\n}\n\nconst LOCATION_ENTRIES_PER_FILE = 1024;\nconst SECTOR_SIZE = 4096;\n\n/**\n * Read and write Minecraft Anvil region files.\n */\nexport class Anvil {\n static fromBuffer(buffer: ArrayBufferLike): Anvil {\n return new Anvil(buffer);\n }\n\n cachedLocationEntries: LocationEntry[] | null = null;\n data: BinaryData;\n\n constructor(data: ArrayBufferLike) {\n this.data = new BinaryData(data);\n }\n\n /**\n * Returns the buffer that holds the Anvil data.\n */\n buffer(): ArrayBufferLike {\n return this.data.buffer();\n }\n\n /**\n * Delete a chunk. The location is either given in X,Z chunk coordinates or\n * passed in from a Chunk object.\n */\n deleteChunk(chunkLocation: Coords2d | Chunk): void {\n let index;\n\n if (Array.isArray(chunkLocation)) {\n index = this.chunkCoordinatesToIndex(chunkLocation);\n } else {\n const coords = chunkLocation.chunkCoordinates();\n\n if (!coords) {\n throw new Error('Chunk does not have coordinates');\n }\n\n index = this.chunkCoordinatesToIndex(coords);\n }\n\n // Clear cache before modifying location entries\n this.cachedLocationEntries = null;\n this.data.seek(index * 4); // Go to the pointer location for this chunk\n this.data.setNByteInteger(0, 3); // Erase the offset\n this.data.setByte(0); // Erase the sector count\n\n // The actual chunk data is still present in the file.\n }\n\n /**\n * Parses all chunks in the Anvil blob. Chunk objects are read in the order\n * they are stored in the location entry header sector.\n *\n * @returns Chunk[] a list of Chunk objects\n */\n getAllChunks(): Chunk[] {\n // Empty files can be written\n if (this.data.byteLength() === 0) {\n return [];\n }\n\n const chunks = this.getLocationEntries()\n .filter((x) => x.sectorCount > 0)\n .map((offset) => {\n const nbt = Nbt.fromBuffer(this.getChunkData(offset.offset));\n\n return new Chunk(nbt);\n });\n\n return chunks;\n }\n\n // Gets a chunk using chunk coordinates.\n getChunk(chunkCoords: Coords2d): Chunk | undefined {\n const locationEntries = this.getLocationEntries();\n const entry = locationEntries[this.chunkCoordinatesToIndex(chunkCoords)];\n\n if (entry?.sectorCount > 0) {\n const nbt = Nbt.fromBuffer(this.getChunkData(entry.offset));\n\n return new Chunk(nbt);\n }\n\n return;\n }\n\n /**\n * Convert from chunk coordinates to region-relative chunk coordinates, and\n * then to an index.\n */\n private chunkCoordinatesToIndex(chunkCoords: Coords2d): number {\n let regionChunkX = chunkCoords[0];\n let regionChunkZ = chunkCoords[1];\n const step = 4096 * 4096;\n\n while (regionChunkX < 0) {\n regionChunkX += step;\n }\n\n while (regionChunkZ < 0) {\n regionChunkZ += step;\n }\n\n return (regionChunkX % 32) + (regionChunkZ % 32) * 32;\n }\n\n /**\n * Extracts data for a chunk present at the given offset in the Anvil blob.\n * The offset is provided in sectors of SECTOR_SIZE bytes (as in the chunk\n * location entries from the blob's first header sector).\n *\n * @param offset the chunk's offset in number of sectors from the Anvil blob's start.\n */\n protected getChunkData(offset?: number): ArrayBufferLike {\n if (offset !== undefined) {\n this.data.seek(offset * SECTOR_SIZE);\n }\n\n const length = this.data.getUInt();\n const compressionType = this.data.getByte();\n const data = this.data.getArrayBuffer(length - 1); // First byte is the compression type\n\n if (\n compressionType === CompressionType.ZLIB ||\n compressionType === CompressionType.GZIP\n ) {\n // Could be SharedArrayBuffer, but it won't get used again after\n // inflation, so it being \"shared\" does not matter.\n return inflate(data as ArrayBuffer).buffer;\n }\n\n return data;\n }\n\n /**\n * Retrieves the full list of chunk location entries from this Anvil blob.\n * The pointer will be moved to the beginning of the first header sector at\n * the start of this method and advanced to the end during reading.\n */\n protected getLocationEntries(): LocationEntry[] {\n if (this.cachedLocationEntries) {\n return this.cachedLocationEntries;\n }\n\n this.data.seek(0);\n const result: LocationEntry[] = [];\n\n for (let i = 0; i < LOCATION_ENTRIES_PER_FILE; i += 1) {\n result.push({\n offset: this.data.getNByteInteger(3),\n sectorCount: this.data.getByte(),\n });\n }\n\n this.cachedLocationEntries = result;\n\n return result;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { NbtLongArray } from '../nbt/nbt-long-array';
1
+ import { NbtLongArray } from '../nbt/nbt-long-array.js';
2
2
  export declare class BitData {
3
3
  static fromLongArrayTag(tag: NbtLongArray): BitData;
4
4
  private length;
@@ -1 +1 @@
1
- {"version":3,"file":"bit-data.d.ts","sourceRoot":"","sources":["../../src/lib/bit-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAOrD,qBAAa,OAAO;IAChB,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO;IAgBnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,IAAI,CAAW;gBAEX,IAAI,EAAE,WAAW;IAK7B,eAAe;IAIf,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAgC1B,eAAe;IAIf,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,SAAI;IAQvC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAgBnC"}
1
+ {"version":3,"file":"bit-data.d.ts","sourceRoot":"","sources":["../../src/lib/bit-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAOxD,qBAAa,OAAO;IAChB,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO;IAgBnD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,IAAI,CAAW;gBAEX,IAAI,EAAE,WAAW;IAK7B,eAAe;IAIf,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAgC1B,eAAe;IAIf,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,SAAI;IAQvC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;CAgBnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bit-data.js","sourceRoot":"","sources":["../../src/lib/bit-data.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport { NbtLongArray } from '../nbt/nbt-long-array';\n\nconst debugLog = debug('bit-data');\n\n// At most, we will have 8 bits to mask\nconst MASK = [0, 1, 3, 7, 15, 31, 63, 127, 255];\n\nexport class BitData {\n static fromLongArrayTag(tag: NbtLongArray): BitData {\n const arrayBuffer = new ArrayBuffer(tag.data.length * 8);\n const view = new DataView(arrayBuffer);\n let position = 0;\n\n for (const value of tag.data) {\n // Convert back to a byte stream. The source comes from\n // NbtLongArray.fromBinaryData(). Make sure the endianness is\n // correct and matches the reader.\n view.setBigInt64(position, value, true);\n position += 8;\n }\n\n return new BitData(arrayBuffer);\n }\n\n private length: number;\n private partial = 0;\n private partialCount = 0;\n private position = 0;\n private view: DataView;\n\n constructor(data: ArrayBuffer) {\n this.view = new DataView(data);\n this.length = data.byteLength;\n }\n\n currentPosition() {\n return this.position;\n }\n\n getBits(n: number): number {\n debugLog(\n `getBits(${n}), start, position ${this.position}, bits ${this.partial.toString(2).padStart(this.partialCount, '0').substr(-this.partialCount)}`\n );\n\n // Add extra bits to the left\n while (n > this.partialCount) {\n if (this.position >= this.length) {\n throw new Error('Out of data');\n }\n\n this.partial |=\n this.view.getUint8(this.position) << this.partialCount;\n debugLog(\n `getBits(${n}), add byte, position ${this.position}, bits ${this.partial.toString(2).padStart(this.partialCount, '0').substr(-this.partialCount)}`\n );\n this.position += 1;\n this.partialCount += 8;\n }\n\n // Return bits from the right\n const result = this.partial & MASK[n];\n this.partial >>= n;\n this.partialCount -= n;\n debugLog(\n `getBits(${n}), end, position ${this.position}, bits ${this.partial.toString(2).padStart(this.partialCount, '0').substr(-this.partialCount)}, result ${result.toString(2).padStart(n, '0')} (${result})`\n );\n\n return result;\n }\n\n // The amount of bytes left in the buffer\n remainingLength() {\n return this.length - this.position;\n }\n\n seek(position: number, partialCount = 0) {\n this.position = position;\n this.partial = 0;\n this.partialCount = partialCount;\n }\n\n // FIXME - need to figure out how this is written. Does it update just one byte?\n // FIXME - I don't see a flush method.\n setBits(n: number, value: number) {\n // Add the new bits to the right\n this.partial <<= n;\n this.partial |= value;\n this.partialCount += n;\n\n while (this.partialCount >= 8) {\n this.view.setUint8(\n this.position,\n this.partial >> (this.partialCount - 8)\n );\n this.position += 1;\n this.partialCount -= 8;\n this.partial &= MASK[this.partialCount];\n }\n }\n}\n"]}
1
+ {"version":3,"file":"bit-data.js","sourceRoot":"","sources":["../../src/lib/bit-data.ts"],"names":[],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport { NbtLongArray } from '../nbt/nbt-long-array.js';\n\nconst debugLog = debug('bit-data');\n\n// At most, we will have 8 bits to mask\nconst MASK = [0, 1, 3, 7, 15, 31, 63, 127, 255];\n\nexport class BitData {\n static fromLongArrayTag(tag: NbtLongArray): BitData {\n const arrayBuffer = new ArrayBuffer(tag.data.length * 8);\n const view = new DataView(arrayBuffer);\n let position = 0;\n\n for (const value of tag.data) {\n // Convert back to a byte stream. The source comes from\n // NbtLongArray.fromBinaryData(). Make sure the endianness is\n // correct and matches the reader.\n view.setBigInt64(position, value, true);\n position += 8;\n }\n\n return new BitData(arrayBuffer);\n }\n\n private length: number;\n private partial = 0;\n private partialCount = 0;\n private position = 0;\n private view: DataView;\n\n constructor(data: ArrayBuffer) {\n this.view = new DataView(data);\n this.length = data.byteLength;\n }\n\n currentPosition() {\n return this.position;\n }\n\n getBits(n: number): number {\n debugLog(\n `getBits(${n}), start, position ${this.position}, bits ${this.partial.toString(2).padStart(this.partialCount, '0').substr(-this.partialCount)}`\n );\n\n // Add extra bits to the left\n while (n > this.partialCount) {\n if (this.position >= this.length) {\n throw new Error('Out of data');\n }\n\n this.partial |=\n this.view.getUint8(this.position) << this.partialCount;\n debugLog(\n `getBits(${n}), add byte, position ${this.position}, bits ${this.partial.toString(2).padStart(this.partialCount, '0').substr(-this.partialCount)}`\n );\n this.position += 1;\n this.partialCount += 8;\n }\n\n // Return bits from the right\n const result = this.partial & MASK[n];\n this.partial >>= n;\n this.partialCount -= n;\n debugLog(\n `getBits(${n}), end, position ${this.position}, bits ${this.partial.toString(2).padStart(this.partialCount, '0').substr(-this.partialCount)}, result ${result.toString(2).padStart(n, '0')} (${result})`\n );\n\n return result;\n }\n\n // The amount of bytes left in the buffer\n remainingLength() {\n return this.length - this.position;\n }\n\n seek(position: number, partialCount = 0) {\n this.position = position;\n this.partial = 0;\n this.partialCount = partialCount;\n }\n\n // FIXME - need to figure out how this is written. Does it update just one byte?\n // FIXME - I don't see a flush method.\n setBits(n: number, value: number) {\n // Add the new bits to the right\n this.partial <<= n;\n this.partial |= value;\n this.partialCount += n;\n\n while (this.partialCount >= 8) {\n this.view.setUint8(\n this.position,\n this.partial >> (this.partialCount - 8)\n );\n this.position += 1;\n this.partialCount -= 8;\n this.partial &= MASK[this.partialCount];\n }\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { Coords3d } from '../types/coords';
2
- import { NbtCompound } from '../nbt/nbt-compound';
3
- import { NbtList } from '../nbt/nbt-list';
4
- import { NbtLongArray } from '../nbt/nbt-long-array';
1
+ import { Coords3d } from '../types/coords.js';
2
+ import { NbtCompound } from '../nbt/nbt-compound.js';
3
+ import { NbtList } from '../nbt/nbt-list.js';
4
+ import { NbtLongArray } from '../nbt/nbt-long-array.js';
5
5
  export declare class BlockData {
6
6
  paletteMap: Map<number, string>;
7
7
  blockIds: number[];
@@ -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,iBAAiB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAiDrD,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;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,5 +1,5 @@
1
1
  import debug from 'debug';
2
- import { BitData } from './bit-data';
2
+ import { BitData } from './bit-data.js';
3
3
  const BLOCKS_PER_CHUNK = 16 * 16 * 16;
4
4
  const debugLog = debug('block-data');
5
5
  function parseBlockData(blockIds, bitData, paletteMap) {
@@ -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';\nimport { Coords3d } from '../types/coords';\nimport { NbtCompound } from '../nbt/nbt-compound';\nimport { NbtList } from '../nbt/nbt-list';\nimport { NbtLongArray } from '../nbt/nbt-long-array';\nimport { NbtString } from '../nbt/nbt-string';\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 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"]}