minerender 2.1.0-alpha.37 → 2.1.0-alpha.39

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.
@@ -125,6 +125,7 @@ var require_dist = __commonJS({
125
125
  var index_browser_exports = {};
126
126
  __export(index_browser_exports, {
127
127
  AXES: () => AXES,
128
+ AnvilParser: () => AnvilParser,
128
129
  ArchiveAssetSource: () => ArchiveAssetSource,
129
130
  AssetKey: () => AssetKey,
130
131
  AssetLoadError: () => AssetLoadError,
@@ -144,6 +145,7 @@ __export(index_browser_exports, {
144
145
  BrowserCache: () => BrowserCache,
145
146
  BrowserEnv: () => BrowserEnv,
146
147
  CUBE_FACES: () => CUBE_FACES,
148
+ CUBE_FACE_OFFSETS: () => CUBE_FACE_OFFSETS,
147
149
  Caching: () => Caching,
148
150
  CanvasImage: () => CanvasImage,
149
151
  Chunk: () => Chunk,
@@ -177,6 +179,7 @@ __export(index_browser_exports, {
177
179
  MineRenderWorld: () => MineRenderWorld,
178
180
  MinecraftCubeTexture: () => MinecraftCubeTexture,
179
181
  MinecraftFaceUV: () => MinecraftFaceUV,
182
+ ModelCulling: () => ModelCulling,
180
183
  ModelGenerator: () => ModelGenerator,
181
184
  ModelMerger: () => ModelMerger,
182
185
  ModelObject: () => ModelObject,
@@ -474,6 +477,14 @@ var CubeFaceIndex = /* @__PURE__ */ ((CubeFaceIndex2) => {
474
477
  return CubeFaceIndex2;
475
478
  })(CubeFaceIndex || {});
476
479
  var CUBE_FACES = Object.values(CubeFace);
480
+ var CUBE_FACE_OFFSETS = [
481
+ [1, 0, 0],
482
+ [-1, 0, 0],
483
+ [0, 1, 0],
484
+ [0, -1, 0],
485
+ [0, 0, 1],
486
+ [0, 0, -1]
487
+ ];
477
488
 
478
489
  // src/Disposable.ts
479
490
  function isDisposable(obj) {
@@ -1771,11 +1782,17 @@ function isOrthographicCamera(obj) {
1771
1782
  }
1772
1783
 
1773
1784
  // src/nbt/NBTHelper.ts
1785
+ var import_buffer2 = require("buffer");
1774
1786
  var NBTHelper = class {
1775
- static async fromBuffer(buffer) {
1787
+ static async fromBuffer(data, format) {
1788
+ const buffer = import_buffer2.Buffer.from(data instanceof Uint8Array ? data : new Uint8Array(data));
1776
1789
  const prismarineNbt = await import("prismarine-nbt");
1777
- const { parsed, type, metadata } = await prismarineNbt.parse(buffer);
1778
- return parsed;
1790
+ const { parsed, type, metadata } = await prismarineNbt.parse(buffer, format);
1791
+ return Object.assign(parsed, {
1792
+ format: type,
1793
+ metadata,
1794
+ compression: buffer[0] === 31 && buffer[1] === 139 ? "gzip" : "none"
1795
+ });
1779
1796
  }
1780
1797
  };
1781
1798
 
@@ -2543,6 +2560,9 @@ var UVMapper = class {
2543
2560
  const textureMap = {};
2544
2561
  const metaMap = {};
2545
2562
  const model = { ...originalModel };
2563
+ if (originalModel.elements) {
2564
+ model.elements = originalModel.elements.map((element) => ({ ...element }));
2565
+ }
2546
2566
  const isItemModel = !("elements" in model);
2547
2567
  console.debug(p5, "Creating Atlas for", model.key);
2548
2568
  if (model.textures) {
@@ -3962,6 +3982,42 @@ function isQuadArray(obj) {
3962
3982
  return Array.isArray(obj) && obj.length === 4;
3963
3983
  }
3964
3984
 
3985
+ // src/model/ModelCulling.ts
3986
+ var import_three16 = require("three");
3987
+ var ModelCulling = class {
3988
+ static toLocalMask(worldMask, rotation) {
3989
+ let localMask = 0;
3990
+ for (const [localFace, offset] of CUBE_FACE_OFFSETS.entries()) {
3991
+ const normal = new import_three16.Vector3(...offset).applyEuler(rotation);
3992
+ const worldFace = CUBE_FACE_OFFSETS.findIndex(([x, y, z]) => Math.abs(normal.x - x) < 1e-6 && Math.abs(normal.y - y) < 1e-6 && Math.abs(normal.z - z) < 1e-6);
3993
+ if (worldFace < 0) return 0;
3994
+ if (worldMask & 1 << worldFace) localMask |= 1 << localFace;
3995
+ }
3996
+ return localMask;
3997
+ }
3998
+ static isOpaqueFullCube(atlas) {
3999
+ if (!atlas || atlas.hasTransparency !== false || atlas.model.elements?.length !== 1) return false;
4000
+ const element = atlas.model.elements[0];
4001
+ if (element.from.length !== 3 || !element.from.every((value) => value === 0) || element.to.length !== 3 || !element.to.every((value) => value === 16) || element.rotation && element.rotation.angle !== 0 || element.mappedUv?.length !== 48 || !element.mappedUv.every(Number.isFinite)) return false;
4002
+ if (!(atlas.image.width > 0 && atlas.image.height > 0)) return false;
4003
+ return CUBE_FACES.every((face, faceIndex) => {
4004
+ const texture = element.faces[face]?.texture;
4005
+ if (!texture?.startsWith("#")) return false;
4006
+ const key = texture.slice(1);
4007
+ const position = atlas.positions[key];
4008
+ const size = atlas.sizes[key];
4009
+ if (position?.length !== 2 || !position.every(Number.isFinite) || size?.length !== 2 || !size.every((value) => value > 0 && Number.isFinite(value))) return false;
4010
+ for (let vertex = 0; vertex < 4; vertex++) {
4011
+ const uvIndex = (faceIndex * 4 + vertex) * 2;
4012
+ const x = element.mappedUv[uvIndex] * atlas.image.width;
4013
+ const y = (1 - element.mappedUv[uvIndex + 1]) * atlas.image.height;
4014
+ if (x < position[0] - 1e-6 || x > position[0] + size[0] + 1e-6 || y < position[1] - 1e-6 || y > position[1] + size[1] + 1e-6) return false;
4015
+ }
4016
+ return true;
4017
+ });
4018
+ }
4019
+ };
4020
+
3965
4021
  // src/model/block/blockTints.json
3966
4022
  var blockTints_default = {
3967
4023
  "minecraft:large_fern": { source: "grass" },
@@ -4048,10 +4104,10 @@ var BlockTints = class {
4048
4104
  };
4049
4105
 
4050
4106
  // src/model/scene/ModelObject.ts
4051
- var import_three17 = require("three");
4107
+ var import_three18 = require("three");
4052
4108
 
4053
4109
  // src/three/BufferGeometryUtils.js
4054
- var import_three16 = require("three");
4110
+ var import_three17 = require("three");
4055
4111
  function computeTangents(geometry) {
4056
4112
  geometry.computeTangents();
4057
4113
  console.warn("THREE.BufferGeometryUtils: .computeTangents() has been removed. Use BufferGeometry.computeTangents() instead.");
@@ -4063,7 +4119,7 @@ function mergeBufferGeometries(geometries, useGroups = false) {
4063
4119
  const attributes = {};
4064
4120
  const morphAttributes = {};
4065
4121
  const morphTargetsRelative = geometries[0].morphTargetsRelative;
4066
- const mergedGeometry = new import_three16.BufferGeometry();
4122
+ const mergedGeometry = new import_three17.BufferGeometry();
4067
4123
  let offset = 0;
4068
4124
  for (let i = 0; i < geometries.length; ++i) {
4069
4125
  const geometry = geometries[i];
@@ -4187,7 +4243,7 @@ function mergeBufferAttributes(attributes) {
4187
4243
  array.set(attributes[i].array, offset);
4188
4244
  offset += attributes[i].array.length;
4189
4245
  }
4190
- return new import_three16.BufferAttribute(array, itemSize, normalized);
4246
+ return new import_three17.BufferAttribute(array, itemSize, normalized);
4191
4247
  }
4192
4248
  function interleaveAttributes(attributes) {
4193
4249
  let TypedArray;
@@ -4203,7 +4259,7 @@ function interleaveAttributes(attributes) {
4203
4259
  arrayLength += attribute.array.length;
4204
4260
  stride += attribute.itemSize;
4205
4261
  }
4206
- const interleavedBuffer = new import_three16.InterleavedBuffer(new TypedArray(arrayLength), stride);
4262
+ const interleavedBuffer = new import_three17.InterleavedBuffer(new TypedArray(arrayLength), stride);
4207
4263
  let offset = 0;
4208
4264
  const res = [];
4209
4265
  const getters = ["getX", "getY", "getZ", "getW"];
@@ -4212,7 +4268,7 @@ function interleaveAttributes(attributes) {
4212
4268
  const attribute = attributes[j];
4213
4269
  const itemSize = attribute.itemSize;
4214
4270
  const count = attribute.count;
4215
- const iba = new import_three16.InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized);
4271
+ const iba = new import_three17.InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized);
4216
4272
  res.push(iba);
4217
4273
  offset += itemSize;
4218
4274
  for (let c = 0; c < count; c++) {
@@ -4296,13 +4352,13 @@ function mergeVertices(geometry, tolerance = 1e-4) {
4296
4352
  const name = attributeNames[i];
4297
4353
  const oldAttribute = geometry.getAttribute(name);
4298
4354
  const buffer = new oldAttribute.array.constructor(attrArrays[name]);
4299
- const attribute = new import_three16.BufferAttribute(buffer, oldAttribute.itemSize, oldAttribute.normalized);
4355
+ const attribute = new import_three17.BufferAttribute(buffer, oldAttribute.itemSize, oldAttribute.normalized);
4300
4356
  result.setAttribute(name, attribute);
4301
4357
  if (name in morphAttrsArrays) {
4302
4358
  for (let j = 0; j < morphAttrsArrays[name].length; j++) {
4303
4359
  const oldMorphAttribute = geometry.morphAttributes[name][j];
4304
4360
  const buffer2 = new oldMorphAttribute.array.constructor(morphAttrsArrays[name][j]);
4305
- const morphAttribute = new import_three16.BufferAttribute(buffer2, oldMorphAttribute.itemSize, oldMorphAttribute.normalized);
4361
+ const morphAttribute = new import_three17.BufferAttribute(buffer2, oldMorphAttribute.itemSize, oldMorphAttribute.normalized);
4306
4362
  result.morphAttributes[name][j] = morphAttribute;
4307
4363
  }
4308
4364
  }
@@ -4311,11 +4367,11 @@ function mergeVertices(geometry, tolerance = 1e-4) {
4311
4367
  return result;
4312
4368
  }
4313
4369
  function toTrianglesDrawMode(geometry, drawMode) {
4314
- if (drawMode === import_three16.TrianglesDrawMode) {
4370
+ if (drawMode === import_three17.TrianglesDrawMode) {
4315
4371
  console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.");
4316
4372
  return geometry;
4317
4373
  }
4318
- if (drawMode === import_three16.TriangleFanDrawMode || drawMode === import_three16.TriangleStripDrawMode) {
4374
+ if (drawMode === import_three17.TriangleFanDrawMode || drawMode === import_three17.TriangleStripDrawMode) {
4319
4375
  let index = geometry.getIndex();
4320
4376
  if (index === null) {
4321
4377
  const indices = [];
@@ -4333,7 +4389,7 @@ function toTrianglesDrawMode(geometry, drawMode) {
4333
4389
  }
4334
4390
  const numberOfTriangles = index.count - 2;
4335
4391
  const newIndices = [];
4336
- if (drawMode === import_three16.TriangleFanDrawMode) {
4392
+ if (drawMode === import_three17.TriangleFanDrawMode) {
4337
4393
  for (let i = 1; i <= numberOfTriangles; i++) {
4338
4394
  newIndices.push(index.getX(0));
4339
4395
  newIndices.push(index.getX(i));
@@ -4369,15 +4425,15 @@ function computeMorphedAttributes(object) {
4369
4425
  console.error("THREE.BufferGeometryUtils: Geometry is not of type BufferGeometry.");
4370
4426
  return null;
4371
4427
  }
4372
- const _vA = new import_three16.Vector3();
4373
- const _vB = new import_three16.Vector3();
4374
- const _vC = new import_three16.Vector3();
4375
- const _tempA = new import_three16.Vector3();
4376
- const _tempB = new import_three16.Vector3();
4377
- const _tempC = new import_three16.Vector3();
4378
- const _morphA = new import_three16.Vector3();
4379
- const _morphB = new import_three16.Vector3();
4380
- const _morphC = new import_three16.Vector3();
4428
+ const _vA = new import_three17.Vector3();
4429
+ const _vB = new import_three17.Vector3();
4430
+ const _vC = new import_three17.Vector3();
4431
+ const _tempA = new import_three17.Vector3();
4432
+ const _tempB = new import_three17.Vector3();
4433
+ const _tempC = new import_three17.Vector3();
4434
+ const _morphA = new import_three17.Vector3();
4435
+ const _morphB = new import_three17.Vector3();
4436
+ const _morphC = new import_three17.Vector3();
4381
4437
  function _calculateMorphedAttributeData(object2, material2, attribute, morphAttribute, morphTargetsRelative2, a2, b2, c2, modifiedAttributeArray) {
4382
4438
  _vA.fromBufferAttribute(attribute, a2);
4383
4439
  _vB.fromBufferAttribute(attribute, b2);
@@ -4572,8 +4628,8 @@ function computeMorphedAttributes(object) {
4572
4628
  }
4573
4629
  }
4574
4630
  }
4575
- const morphedPositionAttribute = new import_three16.Float32BufferAttribute(modifiedPosition, 3);
4576
- const morphedNormalAttribute = new import_three16.Float32BufferAttribute(modifiedNormal, 3);
4631
+ const morphedPositionAttribute = new import_three17.Float32BufferAttribute(modifiedPosition, 3);
4632
+ const morphedNormalAttribute = new import_three17.Float32BufferAttribute(modifiedNormal, 3);
4577
4633
  return {
4578
4634
  positionAttribute,
4579
4635
  normalAttribute,
@@ -4603,6 +4659,9 @@ var _ModelObject = class _ModelObject extends SceneObject {
4603
4659
  get textureAtlas() {
4604
4660
  return this.atlas;
4605
4661
  }
4662
+ get isOpaqueFullCube() {
4663
+ return !this.options.displayPosition && ModelCulling.isOpaqueFullCube(this.atlas);
4664
+ }
4606
4665
  //TODO: support for replacing textures
4607
4666
  async loadTextures() {
4608
4667
  this.atlas = await UVMapper.getAtlas(this.originalModel);
@@ -4616,8 +4675,17 @@ var _ModelObject = class _ModelObject extends SceneObject {
4616
4675
  if (this.atlas.model.elements) {
4617
4676
  this.atlas.model.elements?.forEach((el) => {
4618
4677
  const elGeo = this._getBoxGeometryFromElement(el).clone();
4678
+ if (this.options.cullMask) {
4679
+ const indices = Array.from(elGeo.getIndex().array);
4680
+ elGeo.setIndex(indices.filter((_, index) => {
4681
+ const face = CUBE_FACES[Math.floor(index / 6)];
4682
+ const direction = CUBE_FACES.findIndex((name) => name === el.faces[face]?.cullface);
4683
+ return direction < 0 || !(this.options.cullMask & 1 << direction);
4684
+ }));
4685
+ elGeo.clearGroups();
4686
+ }
4619
4687
  if (this.options.uvLockRotation) {
4620
- UVMapper.lockUvs(elGeo, el.faces, this.atlas, new import_three17.Euler(...this.options.uvLockRotation));
4688
+ UVMapper.lockUvs(elGeo, el.faces, this.atlas, new import_three18.Euler(...this.options.uvLockRotation));
4621
4689
  }
4622
4690
  if (this.options.tints) {
4623
4691
  const colors = new Float32Array(elGeo.getAttribute("position").count * 3).fill(1);
@@ -4626,19 +4694,19 @@ var _ModelObject = class _ModelObject extends SceneObject {
4626
4694
  if (tintIndex === void 0 || tintIndex < 0) continue;
4627
4695
  const tint = this.options.tints[tintIndex];
4628
4696
  if (tint === void 0) continue;
4629
- const color = new import_three17.Color(tint);
4697
+ const color = new import_three18.Color(tint);
4630
4698
  for (let vertex = 0; vertex < 4; vertex++) {
4631
4699
  color.toArray(colors, (faceIndex * 4 + vertex) * 3);
4632
4700
  }
4633
4701
  }
4634
- elGeo.setAttribute("color", new import_three17.BufferAttribute(colors, 3));
4702
+ elGeo.setAttribute("color", new import_three18.BufferAttribute(colors, 3));
4635
4703
  }
4636
- elGeo.applyMatrix4(new import_three17.Matrix4().makeTranslation((el.to[0] - el.from[0]) / 2, (el.to[1] - el.from[1]) / 2, (el.to[2] - el.from[2]) / 2));
4637
- elGeo.applyMatrix4(new import_three17.Matrix4().makeTranslation(el.from[0], el.from[1], el.from[2]));
4704
+ elGeo.applyMatrix4(new import_three18.Matrix4().makeTranslation((el.to[0] - el.from[0]) / 2, (el.to[1] - el.from[1]) / 2, (el.to[2] - el.from[2]) / 2));
4705
+ elGeo.applyMatrix4(new import_three18.Matrix4().makeTranslation(el.from[0], el.from[1], el.from[2]));
4638
4706
  if (el.rotation) {
4639
4707
  applyElementRotation(el.rotation, elGeo);
4640
4708
  }
4641
- elGeo.applyMatrix4(new import_three17.Matrix4().makeTranslation(-8, -8, -8));
4709
+ elGeo.applyMatrix4(new import_three18.Matrix4().makeTranslation(-8, -8, -8));
4642
4710
  if (displayTransform) DisplayTransforms.apply(elGeo, displayTransform);
4643
4711
  if (this.options.mergeMeshes) {
4644
4712
  allGeos.push(elGeo);
@@ -4660,7 +4728,7 @@ var _ModelObject = class _ModelObject extends SceneObject {
4660
4728
  if (allGeos.length > 0) {
4661
4729
  combinedGeo = mergeBufferGeometries(allGeos);
4662
4730
  } else {
4663
- combinedGeo = new import_three17.BoxGeometry(16, 16, 16);
4731
+ combinedGeo = new import_three18.BoxGeometry(16, 16, 16);
4664
4732
  if (displayTransform) DisplayTransforms.apply(combinedGeo, displayTransform);
4665
4733
  }
4666
4734
  combinedGeo.computeBoundingBox();
@@ -4715,7 +4783,7 @@ function isModelObject(obj) {
4715
4783
 
4716
4784
  // src/model/block/scene/BlockObject.ts
4717
4785
  var import_ts_deepmerge6 = __toESM(require_dist());
4718
- var import_three18 = require("three");
4786
+ var import_three19 = require("three");
4719
4787
  var p10 = prefix("BlockObject");
4720
4788
  function matchesCondition(condition, state) {
4721
4789
  return Object.entries(condition).every(([key, value]) => {
@@ -4740,6 +4808,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
4740
4808
  this._instanceModel = [];
4741
4809
  this._variants = [];
4742
4810
  this._models = [];
4811
+ this._cullMask = 0;
4743
4812
  this.options = (0, import_ts_deepmerge6.default)({}, _BlockObject.DEFAULT_OPTIONS, options ?? {});
4744
4813
  }
4745
4814
  async init() {
@@ -4773,12 +4842,69 @@ var _BlockObject = class _BlockObject extends SceneObject {
4773
4842
  super.removeFromScene();
4774
4843
  }
4775
4844
  clearModels() {
4776
- for (const model of this._models.splice(0)) {
4845
+ this.removeModels(this._models.splice(0));
4846
+ this._isInstanced = false;
4847
+ this._instanceCounter = 0;
4848
+ }
4849
+ removeModels(models) {
4850
+ for (const model of models) {
4777
4851
  model.removeFromScene();
4778
4852
  if (!isInstanceReference(model)) model.dispose();
4779
4853
  }
4780
- this._isInstanced = false;
4781
- this._instanceCounter = 0;
4854
+ }
4855
+ get isOccluding() {
4856
+ return this._models.some((model) => {
4857
+ const object = isInstanceReference(model) ? model.instanceable : model;
4858
+ return object.isOpaqueFullCube && this.getModelCullMask(model, 63) === 63;
4859
+ });
4860
+ }
4861
+ getModelMatrix(model) {
4862
+ if (isInstanceReference(model)) return model.getMatrix();
4863
+ if (model.matrixAutoUpdate) model.updateMatrix();
4864
+ return model.matrix.clone();
4865
+ }
4866
+ getModelCullMask(model, worldMask) {
4867
+ const object = isInstanceReference(model) ? model.instanceable : model;
4868
+ if (object.options.displayPosition) return 0;
4869
+ const position = new import_three19.Vector3();
4870
+ const rotation = new import_three19.Quaternion();
4871
+ const scale = new import_three19.Vector3();
4872
+ this.getModelMatrix(model).decompose(position, rotation, scale);
4873
+ if (position.distanceToSquared(this.position) > 1e-10 || scale.distanceToSquared(new import_three19.Vector3(1, 1, 1)) > 1e-10) return 0;
4874
+ return ModelCulling.toLocalMask(worldMask, new import_three19.Euler().setFromQuaternion(rotation));
4875
+ }
4876
+ async setCullMask(worldMask) {
4877
+ worldMask &= 63;
4878
+ const replacements = [];
4879
+ try {
4880
+ for (const model of this._models) {
4881
+ const object = isInstanceReference(model) ? model.instanceable : model;
4882
+ const cullMask = this.getModelCullMask(model, worldMask);
4883
+ if (cullMask === (object.options.cullMask ?? 0)) {
4884
+ replacements.push(model);
4885
+ continue;
4886
+ }
4887
+ const matrix = this.getModelMatrix(model);
4888
+ const replacement = await this.scene.addModel(object.originalModel, { ...object.options, cullMask });
4889
+ replacements.push(replacement);
4890
+ if (isInstanceReference(replacement)) {
4891
+ replacement.setMatrix(matrix);
4892
+ } else {
4893
+ replacement.matrix.copy(matrix);
4894
+ matrix.decompose(replacement.position, replacement.quaternion, replacement.scale);
4895
+ replacement.matrixAutoUpdate = object.matrixAutoUpdate;
4896
+ replacement.visible = object.visible;
4897
+ }
4898
+ }
4899
+ } catch (error) {
4900
+ this.removeModels(replacements.filter((model) => !this._models.includes(model)));
4901
+ throw error;
4902
+ }
4903
+ const previous = this._models;
4904
+ this._models = replacements;
4905
+ this._cullMask = worldMask;
4906
+ this.removeModels(previous.filter((model) => !replacements.includes(model)));
4907
+ this.notifyDirty();
4782
4908
  }
4783
4909
  get state() {
4784
4910
  return this._state;
@@ -4858,7 +4984,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
4858
4984
  await this.createVariant(variant);
4859
4985
  }
4860
4986
  async createVariant(variant) {
4861
- const rotation = new import_three18.Euler();
4987
+ const rotation = new import_three19.Euler();
4862
4988
  if (typeof variant.x !== "undefined") {
4863
4989
  rotation.x = toRadians(clampRotationDegrees(variant.x));
4864
4990
  }
@@ -4871,7 +4997,8 @@ var _BlockObject = class _BlockObject extends SceneObject {
4871
4997
  const options = {
4872
4998
  ...this.options,
4873
4999
  tints: model ? await BlockTints.get(this.blockState.key, this.state, model, this.options.tints) : this.options.tints,
4874
- uvLockRotation: variant.uvlock && (rotation.x !== 0 || rotation.y !== 0) ? [rotation.x, rotation.y, rotation.z] : void 0
5000
+ uvLockRotation: variant.uvlock && (rotation.x !== 0 || rotation.y !== 0) ? [rotation.x, rotation.y, rotation.z] : void 0,
5001
+ cullMask: this.options.displayPosition ? 0 : ModelCulling.toLocalMask(this._cullMask, rotation)
4875
5002
  };
4876
5003
  const obj = await this.scene.addModel(model, options);
4877
5004
  if (isInstanceReference(obj) || obj.isInstanced) {
@@ -4948,7 +5075,7 @@ var _BlockObject = class _BlockObject extends SceneObject {
4948
5075
  setPositionRotationScaleAt(index, position, rotation, scale) {
4949
5076
  super.setPositionRotationScaleAt(index, position, rotation, scale);
4950
5077
  }
4951
- getMatrixAt(index, matrix = new import_three18.Matrix4()) {
5078
+ getMatrixAt(index, matrix = new import_three19.Matrix4()) {
4952
5079
  if (!this.isInstanced) throw new MineRenderError("Object is not instanced");
4953
5080
  const child = this._models[0];
4954
5081
  if (child && isModelObject(child)) {
@@ -4986,12 +5113,1780 @@ function isBlockObject(obj) {
4986
5113
  return obj.isBlockObject;
4987
5114
  }
4988
5115
 
5116
+ // src/model/multiblock/legacyBlocks.json
5117
+ var legacyBlocks_default = {
5118
+ __comment: "Block mappings from res/idsToNames.json (WorldEdit legacy.json); block names and cauldrons updated for Minecraft 1.21.11. Source: https://github.com/sk89q/WorldEdit/blob/master/worldedit-core/src/main/resources/com/sk89q/worldedit/world/registry/legacy.json",
5119
+ blocks: {
5120
+ "0:0": "minecraft:air",
5121
+ "1:0": "minecraft:stone",
5122
+ "1:1": "minecraft:granite",
5123
+ "1:2": "minecraft:polished_granite",
5124
+ "1:3": "minecraft:diorite",
5125
+ "1:4": "minecraft:polished_diorite",
5126
+ "1:5": "minecraft:andesite",
5127
+ "1:6": "minecraft:polished_andesite",
5128
+ "2:0": "minecraft:grass_block[snowy=false]",
5129
+ "3:0": "minecraft:dirt",
5130
+ "3:1": "minecraft:coarse_dirt",
5131
+ "3:2": "minecraft:podzol[snowy=false]",
5132
+ "4:0": "minecraft:cobblestone",
5133
+ "5:0": "minecraft:oak_planks",
5134
+ "5:1": "minecraft:spruce_planks",
5135
+ "5:2": "minecraft:birch_planks",
5136
+ "5:3": "minecraft:jungle_planks",
5137
+ "5:4": "minecraft:acacia_planks",
5138
+ "5:5": "minecraft:dark_oak_planks",
5139
+ "6:0": "minecraft:oak_sapling[stage=0]",
5140
+ "6:1": "minecraft:spruce_sapling[stage=0]",
5141
+ "6:2": "minecraft:birch_sapling[stage=0]",
5142
+ "6:3": "minecraft:jungle_sapling[stage=0]",
5143
+ "6:4": "minecraft:acacia_sapling[stage=0]",
5144
+ "6:5": "minecraft:dark_oak_sapling[stage=0]",
5145
+ "6:8": "minecraft:oak_sapling[stage=1]",
5146
+ "6:9": "minecraft:spruce_sapling[stage=1]",
5147
+ "6:10": "minecraft:birch_sapling[stage=1]",
5148
+ "6:11": "minecraft:jungle_sapling[stage=1]",
5149
+ "6:12": "minecraft:acacia_sapling[stage=1]",
5150
+ "6:13": "minecraft:dark_oak_sapling[stage=1]",
5151
+ "7:0": "minecraft:bedrock",
5152
+ "8:0": "minecraft:water[level=0]",
5153
+ "8:1": "minecraft:water[level=1]",
5154
+ "8:2": "minecraft:water[level=2]",
5155
+ "8:3": "minecraft:water[level=3]",
5156
+ "8:4": "minecraft:water[level=4]",
5157
+ "8:5": "minecraft:water[level=5]",
5158
+ "8:6": "minecraft:water[level=6]",
5159
+ "8:7": "minecraft:water[level=7]",
5160
+ "8:8": "minecraft:water[level=8]",
5161
+ "8:9": "minecraft:water[level=9]",
5162
+ "8:10": "minecraft:water[level=10]",
5163
+ "8:11": "minecraft:water[level=11]",
5164
+ "8:12": "minecraft:water[level=12]",
5165
+ "8:13": "minecraft:water[level=13]",
5166
+ "8:14": "minecraft:water[level=14]",
5167
+ "8:15": "minecraft:water[level=15]",
5168
+ "9:0": "minecraft:water[level=0]",
5169
+ "9:1": "minecraft:water[level=1]",
5170
+ "9:2": "minecraft:water[level=2]",
5171
+ "9:3": "minecraft:water[level=3]",
5172
+ "9:4": "minecraft:water[level=4]",
5173
+ "9:5": "minecraft:water[level=5]",
5174
+ "9:6": "minecraft:water[level=6]",
5175
+ "9:7": "minecraft:water[level=7]",
5176
+ "9:8": "minecraft:water[level=8]",
5177
+ "9:9": "minecraft:water[level=9]",
5178
+ "9:10": "minecraft:water[level=10]",
5179
+ "9:11": "minecraft:water[level=11]",
5180
+ "9:12": "minecraft:water[level=12]",
5181
+ "9:13": "minecraft:water[level=13]",
5182
+ "9:14": "minecraft:water[level=14]",
5183
+ "9:15": "minecraft:water[level=15]",
5184
+ "10:0": "minecraft:lava[level=0]",
5185
+ "10:1": "minecraft:lava[level=1]",
5186
+ "10:2": "minecraft:lava[level=2]",
5187
+ "10:3": "minecraft:lava[level=3]",
5188
+ "10:4": "minecraft:lava[level=4]",
5189
+ "10:5": "minecraft:lava[level=5]",
5190
+ "10:6": "minecraft:lava[level=6]",
5191
+ "10:7": "minecraft:lava[level=7]",
5192
+ "10:8": "minecraft:lava[level=8]",
5193
+ "10:9": "minecraft:lava[level=9]",
5194
+ "10:10": "minecraft:lava[level=10]",
5195
+ "10:11": "minecraft:lava[level=11]",
5196
+ "10:12": "minecraft:lava[level=12]",
5197
+ "10:13": "minecraft:lava[level=13]",
5198
+ "10:14": "minecraft:lava[level=14]",
5199
+ "10:15": "minecraft:lava[level=15]",
5200
+ "11:0": "minecraft:lava[level=0]",
5201
+ "11:1": "minecraft:lava[level=1]",
5202
+ "11:2": "minecraft:lava[level=2]",
5203
+ "11:3": "minecraft:lava[level=3]",
5204
+ "11:4": "minecraft:lava[level=4]",
5205
+ "11:5": "minecraft:lava[level=5]",
5206
+ "11:6": "minecraft:lava[level=6]",
5207
+ "11:7": "minecraft:lava[level=7]",
5208
+ "11:8": "minecraft:lava[level=8]",
5209
+ "11:9": "minecraft:lava[level=9]",
5210
+ "11:10": "minecraft:lava[level=10]",
5211
+ "11:11": "minecraft:lava[level=11]",
5212
+ "11:12": "minecraft:lava[level=12]",
5213
+ "11:13": "minecraft:lava[level=13]",
5214
+ "11:14": "minecraft:lava[level=14]",
5215
+ "11:15": "minecraft:lava[level=15]",
5216
+ "12:0": "minecraft:sand",
5217
+ "12:1": "minecraft:red_sand",
5218
+ "13:0": "minecraft:gravel",
5219
+ "14:0": "minecraft:gold_ore",
5220
+ "15:0": "minecraft:iron_ore",
5221
+ "16:0": "minecraft:coal_ore",
5222
+ "17:0": "minecraft:oak_log[axis=y]",
5223
+ "17:1": "minecraft:spruce_log[axis=y]",
5224
+ "17:2": "minecraft:birch_log[axis=y]",
5225
+ "17:3": "minecraft:jungle_log[axis=y]",
5226
+ "17:4": "minecraft:oak_log[axis=x]",
5227
+ "17:5": "minecraft:spruce_log[axis=x]",
5228
+ "17:6": "minecraft:birch_log[axis=x]",
5229
+ "17:7": "minecraft:jungle_log[axis=x]",
5230
+ "17:8": "minecraft:oak_log[axis=z]",
5231
+ "17:9": "minecraft:spruce_log[axis=z]",
5232
+ "17:10": "minecraft:birch_log[axis=z]",
5233
+ "17:11": "minecraft:jungle_log[axis=z]",
5234
+ "17:12": "minecraft:oak_wood",
5235
+ "17:13": "minecraft:spruce_wood",
5236
+ "17:14": "minecraft:birch_wood",
5237
+ "17:15": "minecraft:jungle_wood",
5238
+ "18:0": "minecraft:oak_leaves[persistent=false,distance=1]",
5239
+ "18:1": "minecraft:spruce_leaves[persistent=false,distance=1]",
5240
+ "18:2": "minecraft:birch_leaves[persistent=false,distance=1]",
5241
+ "18:3": "minecraft:jungle_leaves[persistent=false,distance=1]",
5242
+ "18:4": "minecraft:oak_leaves[persistent=true,distance=1]",
5243
+ "18:5": "minecraft:spruce_leaves[persistent=true,distance=1]",
5244
+ "18:6": "minecraft:birch_leaves[persistent=true,distance=1]",
5245
+ "18:7": "minecraft:jungle_leaves[persistent=true,distance=1]",
5246
+ "18:8": "minecraft:oak_leaves[persistent=false,distance=1]",
5247
+ "18:9": "minecraft:spruce_leaves[persistent=false,distance=1]",
5248
+ "18:10": "minecraft:birch_leaves[persistent=false,distance=1]",
5249
+ "18:11": "minecraft:jungle_leaves[persistent=false,distance=1]",
5250
+ "18:12": "minecraft:oak_leaves[persistent=true,distance=1]",
5251
+ "18:13": "minecraft:spruce_leaves[persistent=true,distance=1]",
5252
+ "18:14": "minecraft:birch_leaves[persistent=true,distance=1]",
5253
+ "18:15": "minecraft:jungle_leaves[persistent=true,distance=1]",
5254
+ "19:0": "minecraft:sponge",
5255
+ "19:1": "minecraft:wet_sponge",
5256
+ "20:0": "minecraft:glass",
5257
+ "21:0": "minecraft:lapis_ore",
5258
+ "22:0": "minecraft:lapis_block",
5259
+ "23:0": "minecraft:dispenser[triggered=false,facing=down]",
5260
+ "23:1": "minecraft:dispenser[triggered=false,facing=up]",
5261
+ "23:2": "minecraft:dispenser[triggered=false,facing=north]",
5262
+ "23:3": "minecraft:dispenser[triggered=false,facing=south]",
5263
+ "23:4": "minecraft:dispenser[triggered=false,facing=west]",
5264
+ "23:5": "minecraft:dispenser[triggered=false,facing=east]",
5265
+ "23:8": "minecraft:dispenser[triggered=true,facing=down]",
5266
+ "23:9": "minecraft:dispenser[triggered=true,facing=up]",
5267
+ "23:10": "minecraft:dispenser[triggered=true,facing=north]",
5268
+ "23:11": "minecraft:dispenser[triggered=true,facing=south]",
5269
+ "23:12": "minecraft:dispenser[triggered=true,facing=west]",
5270
+ "23:13": "minecraft:dispenser[triggered=true,facing=east]",
5271
+ "24:0": "minecraft:sandstone",
5272
+ "24:1": "minecraft:chiseled_sandstone",
5273
+ "24:2": "minecraft:cut_sandstone",
5274
+ "25:0": "minecraft:note_block",
5275
+ "26:0": "minecraft:red_bed[part=foot,facing=south,occupied=false]",
5276
+ "26:1": "minecraft:red_bed[part=foot,facing=west,occupied=false]",
5277
+ "26:2": "minecraft:red_bed[part=foot,facing=north,occupied=false]",
5278
+ "26:3": "minecraft:red_bed[part=foot,facing=east,occupied=false]",
5279
+ "26:4": "minecraft:red_bed[part=foot,facing=south,occupied=true]",
5280
+ "26:5": "minecraft:red_bed[part=foot,facing=west,occupied=true]",
5281
+ "26:6": "minecraft:red_bed[part=foot,facing=north,occupied=true]",
5282
+ "26:7": "minecraft:red_bed[part=foot,facing=east,occupied=true]",
5283
+ "26:8": "minecraft:red_bed[part=head,facing=south,occupied=false]",
5284
+ "26:9": "minecraft:red_bed[part=head,facing=west,occupied=false]",
5285
+ "26:10": "minecraft:red_bed[part=head,facing=north,occupied=false]",
5286
+ "26:11": "minecraft:red_bed[part=head,facing=east,occupied=false]",
5287
+ "26:12": "minecraft:red_bed[part=head,facing=south,occupied=true]",
5288
+ "26:13": "minecraft:red_bed[part=head,facing=west,occupied=true]",
5289
+ "26:14": "minecraft:red_bed[part=head,facing=north,occupied=true]",
5290
+ "26:15": "minecraft:red_bed[part=head,facing=east,occupied=true]",
5291
+ "27:0": "minecraft:powered_rail[shape=north_south,powered=false]",
5292
+ "27:1": "minecraft:powered_rail[shape=east_west,powered=false]",
5293
+ "27:2": "minecraft:powered_rail[shape=ascending_east,powered=false]",
5294
+ "27:3": "minecraft:powered_rail[shape=ascending_west,powered=false]",
5295
+ "27:4": "minecraft:powered_rail[shape=ascending_north,powered=false]",
5296
+ "27:5": "minecraft:powered_rail[shape=ascending_south,powered=false]",
5297
+ "27:8": "minecraft:powered_rail[shape=north_south,powered=true]",
5298
+ "27:9": "minecraft:powered_rail[shape=east_west,powered=true]",
5299
+ "27:10": "minecraft:powered_rail[shape=ascending_east,powered=true]",
5300
+ "27:11": "minecraft:powered_rail[shape=ascending_west,powered=true]",
5301
+ "27:12": "minecraft:powered_rail[shape=ascending_north,powered=true]",
5302
+ "27:13": "minecraft:powered_rail[shape=ascending_south,powered=true]",
5303
+ "28:0": "minecraft:detector_rail[shape=north_south,powered=false]",
5304
+ "28:1": "minecraft:detector_rail[shape=east_west,powered=false]",
5305
+ "28:2": "minecraft:detector_rail[shape=ascending_east,powered=false]",
5306
+ "28:3": "minecraft:detector_rail[shape=ascending_west,powered=false]",
5307
+ "28:4": "minecraft:detector_rail[shape=ascending_north,powered=false]",
5308
+ "28:5": "minecraft:detector_rail[shape=ascending_south,powered=false]",
5309
+ "28:8": "minecraft:detector_rail[shape=north_south,powered=true]",
5310
+ "28:9": "minecraft:detector_rail[shape=east_west,powered=true]",
5311
+ "28:10": "minecraft:detector_rail[shape=ascending_east,powered=true]",
5312
+ "28:11": "minecraft:detector_rail[shape=ascending_west,powered=true]",
5313
+ "28:12": "minecraft:detector_rail[shape=ascending_north,powered=true]",
5314
+ "28:13": "minecraft:detector_rail[shape=ascending_south,powered=true]",
5315
+ "29:0": "minecraft:sticky_piston[facing=down,extended=false]",
5316
+ "29:1": "minecraft:sticky_piston[facing=up,extended=false]",
5317
+ "29:2": "minecraft:sticky_piston[facing=north,extended=false]",
5318
+ "29:3": "minecraft:sticky_piston[facing=south,extended=false]",
5319
+ "29:4": "minecraft:sticky_piston[facing=west,extended=false]",
5320
+ "29:5": "minecraft:sticky_piston[facing=east,extended=false]",
5321
+ "29:8": "minecraft:sticky_piston[facing=down,extended=true]",
5322
+ "29:9": "minecraft:sticky_piston[facing=up,extended=true]",
5323
+ "29:10": "minecraft:sticky_piston[facing=north,extended=true]",
5324
+ "29:11": "minecraft:sticky_piston[facing=south,extended=true]",
5325
+ "29:12": "minecraft:sticky_piston[facing=west,extended=true]",
5326
+ "29:13": "minecraft:sticky_piston[facing=east,extended=true]",
5327
+ "30:0": "minecraft:cobweb",
5328
+ "31:0": "minecraft:dead_bush",
5329
+ "31:1": "minecraft:short_grass",
5330
+ "31:2": "minecraft:fern",
5331
+ "32:0": "minecraft:dead_bush",
5332
+ "33:0": "minecraft:piston[facing=down,extended=false]",
5333
+ "33:1": "minecraft:piston[facing=up,extended=false]",
5334
+ "33:2": "minecraft:piston[facing=north,extended=false]",
5335
+ "33:3": "minecraft:piston[facing=south,extended=false]",
5336
+ "33:4": "minecraft:piston[facing=west,extended=false]",
5337
+ "33:5": "minecraft:piston[facing=east,extended=false]",
5338
+ "33:8": "minecraft:piston[facing=down,extended=true]",
5339
+ "33:9": "minecraft:piston[facing=up,extended=true]",
5340
+ "33:10": "minecraft:piston[facing=north,extended=true]",
5341
+ "33:11": "minecraft:piston[facing=south,extended=true]",
5342
+ "33:12": "minecraft:piston[facing=west,extended=true]",
5343
+ "33:13": "minecraft:piston[facing=east,extended=true]",
5344
+ "34:0": "minecraft:piston_head[short=false,facing=down,type=normal]",
5345
+ "34:1": "minecraft:piston_head[short=false,facing=up,type=normal]",
5346
+ "34:2": "minecraft:piston_head[short=false,facing=north,type=normal]",
5347
+ "34:3": "minecraft:piston_head[short=false,facing=south,type=normal]",
5348
+ "34:4": "minecraft:piston_head[short=false,facing=west,type=normal]",
5349
+ "34:5": "minecraft:piston_head[short=false,facing=east,type=normal]",
5350
+ "34:8": "minecraft:piston_head[short=false,facing=down,type=sticky]",
5351
+ "34:9": "minecraft:piston_head[short=false,facing=up,type=sticky]",
5352
+ "34:10": "minecraft:piston_head[short=false,facing=north,type=sticky]",
5353
+ "34:11": "minecraft:piston_head[short=false,facing=south,type=sticky]",
5354
+ "34:12": "minecraft:piston_head[short=false,facing=west,type=sticky]",
5355
+ "34:13": "minecraft:piston_head[short=false,facing=east,type=sticky]",
5356
+ "35:0": "minecraft:white_wool",
5357
+ "35:1": "minecraft:orange_wool",
5358
+ "35:2": "minecraft:magenta_wool",
5359
+ "35:3": "minecraft:light_blue_wool",
5360
+ "35:4": "minecraft:yellow_wool",
5361
+ "35:5": "minecraft:lime_wool",
5362
+ "35:6": "minecraft:pink_wool",
5363
+ "35:7": "minecraft:gray_wool",
5364
+ "35:8": "minecraft:light_gray_wool",
5365
+ "35:9": "minecraft:cyan_wool",
5366
+ "35:10": "minecraft:purple_wool",
5367
+ "35:11": "minecraft:blue_wool",
5368
+ "35:12": "minecraft:brown_wool",
5369
+ "35:13": "minecraft:green_wool",
5370
+ "35:14": "minecraft:red_wool",
5371
+ "35:15": "minecraft:black_wool",
5372
+ "36:0": "minecraft:moving_piston[facing=down,type=normal]",
5373
+ "36:1": "minecraft:moving_piston[facing=up,type=normal]",
5374
+ "36:2": "minecraft:moving_piston[facing=north,type=normal]",
5375
+ "36:3": "minecraft:moving_piston[facing=south,type=normal]",
5376
+ "36:4": "minecraft:moving_piston[facing=west,type=normal]",
5377
+ "36:5": "minecraft:moving_piston[facing=east,type=normal]",
5378
+ "36:8": "minecraft:moving_piston[facing=down,type=sticky]",
5379
+ "36:9": "minecraft:moving_piston[facing=up,type=sticky]",
5380
+ "36:10": "minecraft:moving_piston[facing=north,type=sticky]",
5381
+ "36:11": "minecraft:moving_piston[facing=south,type=sticky]",
5382
+ "36:12": "minecraft:moving_piston[facing=west,type=sticky]",
5383
+ "36:13": "minecraft:moving_piston[facing=east,type=sticky]",
5384
+ "37:0": "minecraft:dandelion",
5385
+ "38:0": "minecraft:poppy",
5386
+ "38:1": "minecraft:blue_orchid",
5387
+ "38:2": "minecraft:allium",
5388
+ "38:3": "minecraft:azure_bluet",
5389
+ "38:4": "minecraft:red_tulip",
5390
+ "38:5": "minecraft:orange_tulip",
5391
+ "38:6": "minecraft:white_tulip",
5392
+ "38:7": "minecraft:pink_tulip",
5393
+ "38:8": "minecraft:oxeye_daisy",
5394
+ "39:0": "minecraft:brown_mushroom",
5395
+ "40:0": "minecraft:red_mushroom",
5396
+ "41:0": "minecraft:gold_block",
5397
+ "42:0": "minecraft:iron_block",
5398
+ "43:0": "minecraft:stone_slab[type=double]",
5399
+ "43:1": "minecraft:sandstone_slab[type=double]",
5400
+ "43:2": "minecraft:petrified_oak_slab[type=double]",
5401
+ "43:3": "minecraft:cobblestone_slab[type=double]",
5402
+ "43:4": "minecraft:brick_slab[type=double]",
5403
+ "43:5": "minecraft:stone_brick_slab[type=double]",
5404
+ "43:6": "minecraft:nether_brick_slab[type=double]",
5405
+ "43:7": "minecraft:quartz_slab[type=double]",
5406
+ "43:8": "minecraft:smooth_stone",
5407
+ "43:9": "minecraft:smooth_sandstone",
5408
+ "43:10": "minecraft:petrified_oak_slab[type=double]",
5409
+ "43:11": "minecraft:cobblestone_slab[type=double]",
5410
+ "43:12": "minecraft:brick_slab[type=double]",
5411
+ "43:13": "minecraft:stone_brick_slab[type=double]",
5412
+ "43:14": "minecraft:nether_brick_slab[type=double]",
5413
+ "43:15": "minecraft:smooth_quartz",
5414
+ "44:0": "minecraft:stone_slab[type=bottom]",
5415
+ "44:1": "minecraft:sandstone_slab[type=bottom]",
5416
+ "44:2": "minecraft:petrified_oak_slab[type=bottom]",
5417
+ "44:3": "minecraft:cobblestone_slab[type=bottom]",
5418
+ "44:4": "minecraft:brick_slab[type=bottom]",
5419
+ "44:5": "minecraft:stone_brick_slab[type=bottom]",
5420
+ "44:6": "minecraft:nether_brick_slab[type=bottom]",
5421
+ "44:7": "minecraft:quartz_slab[type=bottom]",
5422
+ "44:8": "minecraft:stone_slab[type=top]",
5423
+ "44:9": "minecraft:sandstone_slab[type=top]",
5424
+ "44:10": "minecraft:petrified_oak_slab[type=top]",
5425
+ "44:11": "minecraft:cobblestone_slab[type=top]",
5426
+ "44:12": "minecraft:brick_slab[type=top]",
5427
+ "44:13": "minecraft:stone_brick_slab[type=top]",
5428
+ "44:14": "minecraft:nether_brick_slab[type=top]",
5429
+ "44:15": "minecraft:quartz_slab[type=top]",
5430
+ "45:0": "minecraft:bricks",
5431
+ "46:0": "minecraft:tnt[unstable=false]",
5432
+ "46:1": "minecraft:tnt[unstable=true]",
5433
+ "47:0": "minecraft:bookshelf",
5434
+ "48:0": "minecraft:mossy_cobblestone",
5435
+ "49:0": "minecraft:obsidian",
5436
+ "50:1": "minecraft:wall_torch[facing=east]",
5437
+ "50:2": "minecraft:wall_torch[facing=west]",
5438
+ "50:3": "minecraft:wall_torch[facing=south]",
5439
+ "50:4": "minecraft:wall_torch[facing=north]",
5440
+ "50:5": "minecraft:torch",
5441
+ "51:0": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=0]",
5442
+ "51:1": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=1]",
5443
+ "51:2": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=2]",
5444
+ "51:3": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=3]",
5445
+ "51:4": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=4]",
5446
+ "51:5": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=5]",
5447
+ "51:6": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=6]",
5448
+ "51:7": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=7]",
5449
+ "51:8": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=8]",
5450
+ "51:9": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=9]",
5451
+ "51:10": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=10]",
5452
+ "51:11": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=11]",
5453
+ "51:12": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=12]",
5454
+ "51:13": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=13]",
5455
+ "51:14": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=14]",
5456
+ "51:15": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=15]",
5457
+ "52:0": "minecraft:spawner",
5458
+ "53:0": "minecraft:oak_stairs[half=bottom,shape=outer_right,facing=east]",
5459
+ "53:1": "minecraft:oak_stairs[half=bottom,shape=outer_right,facing=west]",
5460
+ "53:2": "minecraft:oak_stairs[half=bottom,shape=outer_right,facing=south]",
5461
+ "53:3": "minecraft:oak_stairs[half=bottom,shape=outer_right,facing=north]",
5462
+ "53:4": "minecraft:oak_stairs[half=top,shape=outer_right,facing=east]",
5463
+ "53:5": "minecraft:oak_stairs[half=top,shape=outer_right,facing=west]",
5464
+ "53:6": "minecraft:oak_stairs[half=top,shape=outer_right,facing=south]",
5465
+ "53:7": "minecraft:oak_stairs[half=top,shape=outer_right,facing=north]",
5466
+ "54:2": "minecraft:chest[facing=north,type=single]",
5467
+ "54:3": "minecraft:chest[facing=south,type=single]",
5468
+ "54:4": "minecraft:chest[facing=west,type=single]",
5469
+ "54:5": "minecraft:chest[facing=east,type=single]",
5470
+ "55:0": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=0]",
5471
+ "55:1": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=1]",
5472
+ "55:2": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=2]",
5473
+ "55:3": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=3]",
5474
+ "55:4": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=4]",
5475
+ "55:5": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=5]",
5476
+ "55:6": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=6]",
5477
+ "55:7": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=7]",
5478
+ "55:8": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=8]",
5479
+ "55:9": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=9]",
5480
+ "55:10": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=10]",
5481
+ "55:11": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=11]",
5482
+ "55:12": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=12]",
5483
+ "55:13": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=13]",
5484
+ "55:14": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=14]",
5485
+ "55:15": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=15]",
5486
+ "56:0": "minecraft:diamond_ore",
5487
+ "57:0": "minecraft:diamond_block",
5488
+ "58:0": "minecraft:crafting_table",
5489
+ "59:0": "minecraft:wheat[age=0]",
5490
+ "59:1": "minecraft:wheat[age=1]",
5491
+ "59:2": "minecraft:wheat[age=2]",
5492
+ "59:3": "minecraft:wheat[age=3]",
5493
+ "59:4": "minecraft:wheat[age=4]",
5494
+ "59:5": "minecraft:wheat[age=5]",
5495
+ "59:6": "minecraft:wheat[age=6]",
5496
+ "59:7": "minecraft:wheat[age=7]",
5497
+ "60:0": "minecraft:farmland[moisture=0]",
5498
+ "60:1": "minecraft:farmland[moisture=1]",
5499
+ "60:2": "minecraft:farmland[moisture=2]",
5500
+ "60:3": "minecraft:farmland[moisture=3]",
5501
+ "60:4": "minecraft:farmland[moisture=4]",
5502
+ "60:5": "minecraft:farmland[moisture=5]",
5503
+ "60:6": "minecraft:farmland[moisture=6]",
5504
+ "60:7": "minecraft:farmland[moisture=7]",
5505
+ "61:2": "minecraft:furnace[facing=north,lit=false]",
5506
+ "61:3": "minecraft:furnace[facing=south,lit=false]",
5507
+ "61:4": "minecraft:furnace[facing=west,lit=false]",
5508
+ "61:5": "minecraft:furnace[facing=east,lit=false]",
5509
+ "62:2": "minecraft:furnace[facing=north,lit=true]",
5510
+ "62:3": "minecraft:furnace[facing=south,lit=true]",
5511
+ "62:4": "minecraft:furnace[facing=west,lit=true]",
5512
+ "62:5": "minecraft:furnace[facing=east,lit=true]",
5513
+ "63:0": "minecraft:oak_sign[rotation=0]",
5514
+ "63:1": "minecraft:oak_sign[rotation=1]",
5515
+ "63:2": "minecraft:oak_sign[rotation=2]",
5516
+ "63:3": "minecraft:oak_sign[rotation=3]",
5517
+ "63:4": "minecraft:oak_sign[rotation=4]",
5518
+ "63:5": "minecraft:oak_sign[rotation=5]",
5519
+ "63:6": "minecraft:oak_sign[rotation=6]",
5520
+ "63:7": "minecraft:oak_sign[rotation=7]",
5521
+ "63:8": "minecraft:oak_sign[rotation=8]",
5522
+ "63:9": "minecraft:oak_sign[rotation=9]",
5523
+ "63:10": "minecraft:oak_sign[rotation=10]",
5524
+ "63:11": "minecraft:oak_sign[rotation=11]",
5525
+ "63:12": "minecraft:oak_sign[rotation=12]",
5526
+ "63:13": "minecraft:oak_sign[rotation=13]",
5527
+ "63:14": "minecraft:oak_sign[rotation=14]",
5528
+ "63:15": "minecraft:oak_sign[rotation=15]",
5529
+ "64:0": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
5530
+ "64:1": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
5531
+ "64:2": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
5532
+ "64:3": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
5533
+ "64:4": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
5534
+ "64:5": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
5535
+ "64:6": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
5536
+ "64:7": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
5537
+ "64:8": "minecraft:oak_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
5538
+ "64:9": "minecraft:oak_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
5539
+ "64:10": "minecraft:oak_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
5540
+ "64:11": "minecraft:oak_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
5541
+ "65:2": "minecraft:ladder[facing=north]",
5542
+ "65:3": "minecraft:ladder[facing=south]",
5543
+ "65:4": "minecraft:ladder[facing=west]",
5544
+ "65:5": "minecraft:ladder[facing=east]",
5545
+ "66:0": "minecraft:rail[shape=north_south]",
5546
+ "66:1": "minecraft:rail[shape=east_west]",
5547
+ "66:2": "minecraft:rail[shape=ascending_east]",
5548
+ "66:3": "minecraft:rail[shape=ascending_west]",
5549
+ "66:4": "minecraft:rail[shape=ascending_north]",
5550
+ "66:5": "minecraft:rail[shape=ascending_south]",
5551
+ "66:6": "minecraft:rail[shape=south_east]",
5552
+ "66:7": "minecraft:rail[shape=south_west]",
5553
+ "66:8": "minecraft:rail[shape=north_west]",
5554
+ "66:9": "minecraft:rail[shape=north_east]",
5555
+ "67:0": "minecraft:cobblestone_stairs[half=bottom,shape=outer_right,facing=east]",
5556
+ "67:1": "minecraft:cobblestone_stairs[half=bottom,shape=outer_right,facing=west]",
5557
+ "67:2": "minecraft:cobblestone_stairs[half=bottom,shape=outer_right,facing=south]",
5558
+ "67:3": "minecraft:cobblestone_stairs[half=bottom,shape=outer_right,facing=north]",
5559
+ "67:4": "minecraft:cobblestone_stairs[half=top,shape=outer_right,facing=east]",
5560
+ "67:5": "minecraft:cobblestone_stairs[half=top,shape=outer_right,facing=west]",
5561
+ "67:6": "minecraft:cobblestone_stairs[half=top,shape=outer_right,facing=south]",
5562
+ "67:7": "minecraft:cobblestone_stairs[half=top,shape=outer_right,facing=north]",
5563
+ "68:2": "minecraft:oak_wall_sign[facing=north]",
5564
+ "68:3": "minecraft:oak_wall_sign[facing=south]",
5565
+ "68:4": "minecraft:oak_wall_sign[facing=west]",
5566
+ "68:5": "minecraft:oak_wall_sign[facing=east]",
5567
+ "69:0": "minecraft:lever[powered=false,facing=north,face=ceiling]",
5568
+ "69:1": "minecraft:lever[powered=false,facing=east,face=wall]",
5569
+ "69:2": "minecraft:lever[powered=false,facing=west,face=wall]",
5570
+ "69:3": "minecraft:lever[powered=false,facing=south,face=wall]",
5571
+ "69:4": "minecraft:lever[powered=false,facing=north,face=wall]",
5572
+ "69:5": "minecraft:lever[powered=false,facing=east,face=floor]",
5573
+ "69:6": "minecraft:lever[powered=false,facing=north,face=floor]",
5574
+ "69:7": "minecraft:lever[powered=false,facing=east,face=ceiling]",
5575
+ "69:8": "minecraft:lever[powered=true,facing=north,face=ceiling]",
5576
+ "69:9": "minecraft:lever[powered=true,facing=east,face=wall]",
5577
+ "69:10": "minecraft:lever[powered=true,facing=west,face=wall]",
5578
+ "69:11": "minecraft:lever[powered=true,facing=south,face=wall]",
5579
+ "69:12": "minecraft:lever[powered=true,facing=north,face=wall]",
5580
+ "69:13": "minecraft:lever[powered=true,facing=east,face=floor]",
5581
+ "69:14": "minecraft:lever[powered=true,facing=north,face=floor]",
5582
+ "69:15": "minecraft:lever[powered=true,facing=east,face=ceiling]",
5583
+ "70:0": "minecraft:stone_pressure_plate[powered=false]",
5584
+ "70:1": "minecraft:stone_pressure_plate[powered=true]",
5585
+ "71:0": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
5586
+ "71:1": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
5587
+ "71:2": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
5588
+ "71:3": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
5589
+ "71:4": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
5590
+ "71:5": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
5591
+ "71:6": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
5592
+ "71:7": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
5593
+ "71:8": "minecraft:iron_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
5594
+ "71:9": "minecraft:iron_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
5595
+ "71:10": "minecraft:iron_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
5596
+ "71:11": "minecraft:iron_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
5597
+ "72:0": "minecraft:oak_pressure_plate[powered=false]",
5598
+ "72:1": "minecraft:oak_pressure_plate[powered=true]",
5599
+ "73:0": "minecraft:redstone_ore[lit=false]",
5600
+ "74:0": "minecraft:redstone_ore[lit=true]",
5601
+ "75:1": "minecraft:redstone_wall_torch[facing=east,lit=false]",
5602
+ "75:2": "minecraft:redstone_wall_torch[facing=west,lit=false]",
5603
+ "75:3": "minecraft:redstone_wall_torch[facing=south,lit=false]",
5604
+ "75:4": "minecraft:redstone_wall_torch[facing=north,lit=false]",
5605
+ "75:5": "minecraft:redstone_torch[lit=false]",
5606
+ "76:1": "minecraft:redstone_wall_torch[facing=east,lit=true]",
5607
+ "76:2": "minecraft:redstone_wall_torch[facing=west,lit=true]",
5608
+ "76:3": "minecraft:redstone_wall_torch[facing=south,lit=true]",
5609
+ "76:4": "minecraft:redstone_wall_torch[facing=north,lit=true]",
5610
+ "76:5": "minecraft:redstone_torch[lit=true]",
5611
+ "77:0": "minecraft:stone_button[powered=false,facing=east,face=ceiling]",
5612
+ "77:1": "minecraft:stone_button[powered=false,facing=east,face=wall]",
5613
+ "77:2": "minecraft:stone_button[powered=false,facing=west,face=wall]",
5614
+ "77:3": "minecraft:stone_button[powered=false,facing=south,face=wall]",
5615
+ "77:4": "minecraft:stone_button[powered=false,facing=north,face=wall]",
5616
+ "77:5": "minecraft:stone_button[powered=false,facing=east,face=floor]",
5617
+ "77:8": "minecraft:stone_button[powered=true,facing=south,face=ceiling]",
5618
+ "77:9": "minecraft:stone_button[powered=true,facing=east,face=wall]",
5619
+ "77:10": "minecraft:stone_button[powered=true,facing=west,face=wall]",
5620
+ "77:11": "minecraft:stone_button[powered=true,facing=south,face=wall]",
5621
+ "77:12": "minecraft:stone_button[powered=true,facing=north,face=wall]",
5622
+ "77:13": "minecraft:stone_button[powered=true,facing=south,face=floor]",
5623
+ "78:0": "minecraft:snow[layers=1]",
5624
+ "78:1": "minecraft:snow[layers=2]",
5625
+ "78:2": "minecraft:snow[layers=3]",
5626
+ "78:3": "minecraft:snow[layers=4]",
5627
+ "78:4": "minecraft:snow[layers=5]",
5628
+ "78:5": "minecraft:snow[layers=6]",
5629
+ "78:6": "minecraft:snow[layers=7]",
5630
+ "78:7": "minecraft:snow[layers=8]",
5631
+ "79:0": "minecraft:ice",
5632
+ "80:0": "minecraft:snow_block",
5633
+ "81:0": "minecraft:cactus[age=0]",
5634
+ "81:1": "minecraft:cactus[age=1]",
5635
+ "81:2": "minecraft:cactus[age=2]",
5636
+ "81:3": "minecraft:cactus[age=3]",
5637
+ "81:4": "minecraft:cactus[age=4]",
5638
+ "81:5": "minecraft:cactus[age=5]",
5639
+ "81:6": "minecraft:cactus[age=6]",
5640
+ "81:7": "minecraft:cactus[age=7]",
5641
+ "81:8": "minecraft:cactus[age=8]",
5642
+ "81:9": "minecraft:cactus[age=9]",
5643
+ "81:10": "minecraft:cactus[age=10]",
5644
+ "81:11": "minecraft:cactus[age=11]",
5645
+ "81:12": "minecraft:cactus[age=12]",
5646
+ "81:13": "minecraft:cactus[age=13]",
5647
+ "81:14": "minecraft:cactus[age=14]",
5648
+ "81:15": "minecraft:cactus[age=15]",
5649
+ "82:0": "minecraft:clay",
5650
+ "83:0": "minecraft:sugar_cane[age=0]",
5651
+ "83:1": "minecraft:sugar_cane[age=1]",
5652
+ "83:2": "minecraft:sugar_cane[age=2]",
5653
+ "83:3": "minecraft:sugar_cane[age=3]",
5654
+ "83:4": "minecraft:sugar_cane[age=4]",
5655
+ "83:5": "minecraft:sugar_cane[age=5]",
5656
+ "83:6": "minecraft:sugar_cane[age=6]",
5657
+ "83:7": "minecraft:sugar_cane[age=7]",
5658
+ "83:8": "minecraft:sugar_cane[age=8]",
5659
+ "83:9": "minecraft:sugar_cane[age=9]",
5660
+ "83:10": "minecraft:sugar_cane[age=10]",
5661
+ "83:11": "minecraft:sugar_cane[age=11]",
5662
+ "83:12": "minecraft:sugar_cane[age=12]",
5663
+ "83:13": "minecraft:sugar_cane[age=13]",
5664
+ "83:14": "minecraft:sugar_cane[age=14]",
5665
+ "83:15": "minecraft:sugar_cane[age=15]",
5666
+ "84:0": "minecraft:jukebox[has_record=false]",
5667
+ "84:1": "minecraft:jukebox[has_record=true]",
5668
+ "85:0": "minecraft:oak_fence[east=false,south=false,north=false,west=false]",
5669
+ "86:0": "minecraft:carved_pumpkin[facing=south]",
5670
+ "86:1": "minecraft:carved_pumpkin[facing=west]",
5671
+ "86:2": "minecraft:carved_pumpkin[facing=north]",
5672
+ "86:3": "minecraft:carved_pumpkin[facing=east]",
5673
+ "87:0": "minecraft:netherrack",
5674
+ "88:0": "minecraft:soul_sand",
5675
+ "89:0": "minecraft:glowstone",
5676
+ "90:1": "minecraft:nether_portal[axis=x]",
5677
+ "90:2": "minecraft:nether_portal[axis=z]",
5678
+ "91:0": "minecraft:jack_o_lantern[facing=south]",
5679
+ "91:1": "minecraft:jack_o_lantern[facing=west]",
5680
+ "91:2": "minecraft:jack_o_lantern[facing=north]",
5681
+ "91:3": "minecraft:jack_o_lantern[facing=east]",
5682
+ "92:0": "minecraft:cake[bites=0]",
5683
+ "92:1": "minecraft:cake[bites=1]",
5684
+ "92:2": "minecraft:cake[bites=2]",
5685
+ "92:3": "minecraft:cake[bites=3]",
5686
+ "92:4": "minecraft:cake[bites=4]",
5687
+ "92:5": "minecraft:cake[bites=5]",
5688
+ "92:6": "minecraft:cake[bites=6]",
5689
+ "93:0": "minecraft:repeater[delay=1,facing=south,locked=false,powered=false]",
5690
+ "93:1": "minecraft:repeater[delay=1,facing=west,locked=false,powered=false]",
5691
+ "93:2": "minecraft:repeater[delay=1,facing=north,locked=false,powered=false]",
5692
+ "93:3": "minecraft:repeater[delay=1,facing=east,locked=false,powered=false]",
5693
+ "93:4": "minecraft:repeater[delay=2,facing=south,locked=false,powered=false]",
5694
+ "93:5": "minecraft:repeater[delay=2,facing=west,locked=false,powered=false]",
5695
+ "93:6": "minecraft:repeater[delay=2,facing=north,locked=false,powered=false]",
5696
+ "93:7": "minecraft:repeater[delay=2,facing=east,locked=false,powered=false]",
5697
+ "93:8": "minecraft:repeater[delay=3,facing=south,locked=false,powered=false]",
5698
+ "93:9": "minecraft:repeater[delay=3,facing=west,locked=false,powered=false]",
5699
+ "93:10": "minecraft:repeater[delay=3,facing=north,locked=false,powered=false]",
5700
+ "93:11": "minecraft:repeater[delay=3,facing=east,locked=false,powered=false]",
5701
+ "93:12": "minecraft:repeater[delay=4,facing=south,locked=false,powered=false]",
5702
+ "93:13": "minecraft:repeater[delay=4,facing=west,locked=false,powered=false]",
5703
+ "93:14": "minecraft:repeater[delay=4,facing=north,locked=false,powered=false]",
5704
+ "93:15": "minecraft:repeater[delay=4,facing=east,locked=false,powered=false]",
5705
+ "94:0": "minecraft:repeater[delay=1,facing=south,locked=false,powered=true]",
5706
+ "94:1": "minecraft:repeater[delay=1,facing=west,locked=false,powered=true]",
5707
+ "94:2": "minecraft:repeater[delay=1,facing=north,locked=false,powered=true]",
5708
+ "94:3": "minecraft:repeater[delay=1,facing=east,locked=false,powered=true]",
5709
+ "94:4": "minecraft:repeater[delay=2,facing=south,locked=false,powered=true]",
5710
+ "94:5": "minecraft:repeater[delay=2,facing=west,locked=false,powered=true]",
5711
+ "94:6": "minecraft:repeater[delay=2,facing=north,locked=false,powered=true]",
5712
+ "94:7": "minecraft:repeater[delay=2,facing=east,locked=false,powered=true]",
5713
+ "94:8": "minecraft:repeater[delay=3,facing=south,locked=false,powered=true]",
5714
+ "94:9": "minecraft:repeater[delay=3,facing=west,locked=false,powered=true]",
5715
+ "94:10": "minecraft:repeater[delay=3,facing=north,locked=false,powered=true]",
5716
+ "94:11": "minecraft:repeater[delay=3,facing=east,locked=false,powered=true]",
5717
+ "94:12": "minecraft:repeater[delay=4,facing=south,locked=false,powered=true]",
5718
+ "94:13": "minecraft:repeater[delay=4,facing=west,locked=false,powered=true]",
5719
+ "94:14": "minecraft:repeater[delay=4,facing=north,locked=false,powered=true]",
5720
+ "94:15": "minecraft:repeater[delay=4,facing=east,locked=false,powered=true]",
5721
+ "95:0": "minecraft:white_stained_glass",
5722
+ "95:1": "minecraft:orange_stained_glass",
5723
+ "95:2": "minecraft:magenta_stained_glass",
5724
+ "95:3": "minecraft:light_blue_stained_glass",
5725
+ "95:4": "minecraft:yellow_stained_glass",
5726
+ "95:5": "minecraft:lime_stained_glass",
5727
+ "95:6": "minecraft:pink_stained_glass",
5728
+ "95:7": "minecraft:gray_stained_glass",
5729
+ "95:8": "minecraft:light_gray_stained_glass",
5730
+ "95:9": "minecraft:cyan_stained_glass",
5731
+ "95:10": "minecraft:purple_stained_glass",
5732
+ "95:11": "minecraft:blue_stained_glass",
5733
+ "95:12": "minecraft:brown_stained_glass",
5734
+ "95:13": "minecraft:green_stained_glass",
5735
+ "95:14": "minecraft:red_stained_glass",
5736
+ "95:15": "minecraft:black_stained_glass",
5737
+ "96:0": "minecraft:oak_trapdoor[half=bottom,facing=north,open=false,powered=false]",
5738
+ "96:1": "minecraft:oak_trapdoor[half=bottom,facing=south,open=false,powered=false]",
5739
+ "96:2": "minecraft:oak_trapdoor[half=bottom,facing=west,open=false,powered=false]",
5740
+ "96:3": "minecraft:oak_trapdoor[half=bottom,facing=east,open=false,powered=false]",
5741
+ "96:4": "minecraft:oak_trapdoor[half=bottom,facing=north,open=true,powered=true]",
5742
+ "96:5": "minecraft:oak_trapdoor[half=bottom,facing=south,open=true,powered=true]",
5743
+ "96:6": "minecraft:oak_trapdoor[half=bottom,facing=west,open=true,powered=true]",
5744
+ "96:7": "minecraft:oak_trapdoor[half=bottom,facing=east,open=true,powered=true]",
5745
+ "96:8": "minecraft:oak_trapdoor[half=top,facing=north,open=false,powered=false]",
5746
+ "96:9": "minecraft:oak_trapdoor[half=top,facing=south,open=false,powered=false]",
5747
+ "96:10": "minecraft:oak_trapdoor[half=top,facing=west,open=false,powered=false]",
5748
+ "96:11": "minecraft:oak_trapdoor[half=top,facing=east,open=false,powered=false]",
5749
+ "96:12": "minecraft:oak_trapdoor[half=top,facing=north,open=true,powered=true]",
5750
+ "96:13": "minecraft:oak_trapdoor[half=top,facing=south,open=true,powered=true]",
5751
+ "96:14": "minecraft:oak_trapdoor[half=top,facing=west,open=true,powered=true]",
5752
+ "96:15": "minecraft:oak_trapdoor[half=top,facing=east,open=true,powered=true]",
5753
+ "97:0": "minecraft:infested_stone",
5754
+ "97:1": "minecraft:infested_cobblestone",
5755
+ "97:2": "minecraft:infested_stone_bricks",
5756
+ "97:3": "minecraft:infested_mossy_stone_bricks",
5757
+ "97:4": "minecraft:infested_cracked_stone_bricks",
5758
+ "97:5": "minecraft:infested_chiseled_stone_bricks",
5759
+ "98:0": "minecraft:stone_bricks",
5760
+ "98:1": "minecraft:mossy_stone_bricks",
5761
+ "98:2": "minecraft:cracked_stone_bricks",
5762
+ "98:3": "minecraft:chiseled_stone_bricks",
5763
+ "99:0": "minecraft:brown_mushroom_block[north=false,east=false,south=false,west=false,up=false,down=false]",
5764
+ "99:1": "minecraft:brown_mushroom_block[north=true,east=false,south=false,west=true,up=true,down=false]",
5765
+ "99:2": "minecraft:brown_mushroom_block[north=true,east=false,south=false,west=false,up=true,down=false]",
5766
+ "99:3": "minecraft:brown_mushroom_block[north=true,east=true,south=false,west=false,up=true,down=false]",
5767
+ "99:4": "minecraft:brown_mushroom_block[north=false,east=false,south=false,west=true,up=true,down=false]",
5768
+ "99:5": "minecraft:brown_mushroom_block[north=false,east=false,south=false,west=false,up=true,down=false]",
5769
+ "99:6": "minecraft:brown_mushroom_block[north=false,east=true,south=false,west=false,up=true,down=false]",
5770
+ "99:7": "minecraft:brown_mushroom_block[north=false,east=false,south=true,west=true,up=true,down=false]",
5771
+ "99:8": "minecraft:brown_mushroom_block[north=false,east=false,south=true,west=false,up=true,down=false]",
5772
+ "99:9": "minecraft:brown_mushroom_block[north=false,east=true,south=true,west=false,up=true,down=false]",
5773
+ "99:10": "minecraft:mushroom_stem[north=true,east=true,south=true,west=true,up=false,down=false]",
5774
+ "99:14": "minecraft:brown_mushroom_block[north=true,east=true,south=true,west=true,up=true,down=true]",
5775
+ "99:15": "minecraft:mushroom_stem[north=true,east=true,south=true,west=true,up=true,down=true]",
5776
+ "100:0": "minecraft:red_mushroom_block[north=false,east=false,south=false,west=false,up=false,down=false]",
5777
+ "100:1": "minecraft:red_mushroom_block[north=true,east=false,south=false,west=true,up=true,down=false]",
5778
+ "100:2": "minecraft:red_mushroom_block[north=true,east=false,south=false,west=false,up=true,down=false]",
5779
+ "100:3": "minecraft:red_mushroom_block[north=true,east=true,south=false,west=false,up=true,down=false]",
5780
+ "100:4": "minecraft:red_mushroom_block[north=false,east=false,south=false,west=true,up=true,down=false]",
5781
+ "100:5": "minecraft:red_mushroom_block[north=false,east=false,south=false,west=false,up=true,down=false]",
5782
+ "100:6": "minecraft:red_mushroom_block[north=false,east=true,south=false,west=false,up=true,down=false]",
5783
+ "100:7": "minecraft:red_mushroom_block[north=false,east=false,south=true,west=true,up=true,down=false]",
5784
+ "100:8": "minecraft:red_mushroom_block[north=false,east=false,south=true,west=false,up=true,down=false]",
5785
+ "100:9": "minecraft:red_mushroom_block[north=false,east=true,south=true,west=false,up=true,down=false]",
5786
+ "100:10": "minecraft:mushroom_stem[north=true,east=true,south=true,west=true,up=false,down=false]",
5787
+ "100:14": "minecraft:red_mushroom_block[north=true,east=true,south=true,west=true,up=true,down=true]",
5788
+ "100:15": "minecraft:mushroom_stem[north=true,east=true,south=true,west=true,up=true,down=true]",
5789
+ "101:0": "minecraft:iron_bars[east=false,south=false,north=false,west=false]",
5790
+ "102:0": "minecraft:glass_pane[east=false,south=false,north=false,west=false]",
5791
+ "103:0": "minecraft:melon",
5792
+ "104:0": "minecraft:pumpkin_stem[age=0]",
5793
+ "104:1": "minecraft:pumpkin_stem[age=1]",
5794
+ "104:2": "minecraft:pumpkin_stem[age=2]",
5795
+ "104:3": "minecraft:pumpkin_stem[age=3]",
5796
+ "104:4": "minecraft:pumpkin_stem[age=4]",
5797
+ "104:5": "minecraft:pumpkin_stem[age=5]",
5798
+ "104:6": "minecraft:pumpkin_stem[age=6]",
5799
+ "104:7": "minecraft:pumpkin_stem[age=7]",
5800
+ "105:0": "minecraft:melon_stem[age=0]",
5801
+ "105:1": "minecraft:melon_stem[age=1]",
5802
+ "105:2": "minecraft:melon_stem[age=2]",
5803
+ "105:3": "minecraft:melon_stem[age=3]",
5804
+ "105:4": "minecraft:melon_stem[age=4]",
5805
+ "105:5": "minecraft:melon_stem[age=5]",
5806
+ "105:6": "minecraft:melon_stem[age=6]",
5807
+ "105:7": "minecraft:melon_stem[age=7]",
5808
+ "106:0": "minecraft:vine[east=false,south=false,north=false,west=false,up=false]",
5809
+ "106:1": "minecraft:vine[east=false,south=true,north=false,west=false,up=false]",
5810
+ "106:2": "minecraft:vine[east=false,south=false,north=false,west=true,up=false]",
5811
+ "106:3": "minecraft:vine[east=false,south=true,north=false,west=true,up=false]",
5812
+ "106:4": "minecraft:vine[east=false,south=false,north=true,west=false,up=false]",
5813
+ "106:5": "minecraft:vine[east=false,south=true,north=true,west=false,up=false]",
5814
+ "106:6": "minecraft:vine[east=false,south=false,north=true,west=true,up=false]",
5815
+ "106:7": "minecraft:vine[east=false,south=true,north=true,west=true,up=false]",
5816
+ "106:8": "minecraft:vine[east=true,south=false,north=false,west=false,up=false]",
5817
+ "106:9": "minecraft:vine[east=true,south=true,north=false,west=false,up=false]",
5818
+ "106:10": "minecraft:vine[east=true,south=false,north=false,west=true,up=false]",
5819
+ "106:11": "minecraft:vine[east=true,south=true,north=false,west=true,up=false]",
5820
+ "106:12": "minecraft:vine[east=true,south=false,north=true,west=false,up=false]",
5821
+ "106:13": "minecraft:vine[east=true,south=true,north=true,west=false,up=false]",
5822
+ "106:14": "minecraft:vine[east=true,south=false,north=true,west=true,up=false]",
5823
+ "106:15": "minecraft:vine[east=true,south=true,north=true,west=true,up=false]",
5824
+ "107:0": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
5825
+ "107:1": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
5826
+ "107:2": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
5827
+ "107:3": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
5828
+ "107:4": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
5829
+ "107:5": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
5830
+ "107:6": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
5831
+ "107:7": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
5832
+ "107:8": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
5833
+ "107:9": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
5834
+ "107:10": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
5835
+ "107:11": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
5836
+ "107:12": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
5837
+ "107:13": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
5838
+ "107:14": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
5839
+ "107:15": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
5840
+ "108:0": "minecraft:brick_stairs[half=bottom,shape=outer_right,facing=east]",
5841
+ "108:1": "minecraft:brick_stairs[half=bottom,shape=outer_right,facing=west]",
5842
+ "108:2": "minecraft:brick_stairs[half=bottom,shape=outer_right,facing=south]",
5843
+ "108:3": "minecraft:brick_stairs[half=bottom,shape=outer_right,facing=north]",
5844
+ "108:4": "minecraft:brick_stairs[half=top,shape=outer_right,facing=east]",
5845
+ "108:5": "minecraft:brick_stairs[half=top,shape=outer_right,facing=west]",
5846
+ "108:6": "minecraft:brick_stairs[half=top,shape=outer_right,facing=south]",
5847
+ "108:7": "minecraft:brick_stairs[half=top,shape=outer_right,facing=north]",
5848
+ "109:0": "minecraft:stone_brick_stairs[half=bottom,shape=outer_right,facing=east]",
5849
+ "109:1": "minecraft:stone_brick_stairs[half=bottom,shape=outer_right,facing=west]",
5850
+ "109:2": "minecraft:stone_brick_stairs[half=bottom,shape=outer_right,facing=south]",
5851
+ "109:3": "minecraft:stone_brick_stairs[half=bottom,shape=outer_right,facing=north]",
5852
+ "109:4": "minecraft:stone_brick_stairs[half=top,shape=outer_right,facing=east]",
5853
+ "109:5": "minecraft:stone_brick_stairs[half=top,shape=outer_right,facing=west]",
5854
+ "109:6": "minecraft:stone_brick_stairs[half=top,shape=outer_right,facing=south]",
5855
+ "109:7": "minecraft:stone_brick_stairs[half=top,shape=outer_right,facing=north]",
5856
+ "110:0": "minecraft:mycelium[snowy=false]",
5857
+ "111:0": "minecraft:lily_pad",
5858
+ "112:0": "minecraft:nether_bricks",
5859
+ "113:0": "minecraft:nether_brick_fence[east=false,south=false,north=false,west=false]",
5860
+ "114:0": "minecraft:nether_brick_stairs[half=bottom,shape=outer_right,facing=east]",
5861
+ "114:1": "minecraft:nether_brick_stairs[half=bottom,shape=outer_right,facing=west]",
5862
+ "114:2": "minecraft:nether_brick_stairs[half=bottom,shape=outer_right,facing=south]",
5863
+ "114:3": "minecraft:nether_brick_stairs[half=bottom,shape=outer_right,facing=north]",
5864
+ "114:4": "minecraft:nether_brick_stairs[half=top,shape=outer_right,facing=east]",
5865
+ "114:5": "minecraft:nether_brick_stairs[half=top,shape=outer_right,facing=west]",
5866
+ "114:6": "minecraft:nether_brick_stairs[half=top,shape=outer_right,facing=south]",
5867
+ "114:7": "minecraft:nether_brick_stairs[half=top,shape=outer_right,facing=north]",
5868
+ "115:0": "minecraft:nether_wart[age=0]",
5869
+ "115:1": "minecraft:nether_wart[age=1]",
5870
+ "115:2": "minecraft:nether_wart[age=2]",
5871
+ "115:3": "minecraft:nether_wart[age=3]",
5872
+ "116:0": "minecraft:enchanting_table",
5873
+ "117:0": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=false,has_bottle_2=false]",
5874
+ "117:1": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=false,has_bottle_2=false]",
5875
+ "117:2": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=true,has_bottle_2=false]",
5876
+ "117:3": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=true,has_bottle_2=false]",
5877
+ "117:4": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=false,has_bottle_2=true]",
5878
+ "117:5": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=false,has_bottle_2=true]",
5879
+ "117:6": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=true,has_bottle_2=true]",
5880
+ "117:7": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=true,has_bottle_2=true]",
5881
+ "118:0": "minecraft:cauldron",
5882
+ "118:1": "minecraft:water_cauldron[level=1]",
5883
+ "118:2": "minecraft:water_cauldron[level=2]",
5884
+ "118:3": "minecraft:water_cauldron[level=3]",
5885
+ "119:0": "minecraft:end_portal",
5886
+ "120:0": "minecraft:end_portal_frame[eye=false,facing=south]",
5887
+ "120:1": "minecraft:end_portal_frame[eye=false,facing=west]",
5888
+ "120:2": "minecraft:end_portal_frame[eye=false,facing=north]",
5889
+ "120:3": "minecraft:end_portal_frame[eye=false,facing=east]",
5890
+ "120:4": "minecraft:end_portal_frame[eye=true,facing=south]",
5891
+ "120:5": "minecraft:end_portal_frame[eye=true,facing=west]",
5892
+ "120:6": "minecraft:end_portal_frame[eye=true,facing=north]",
5893
+ "120:7": "minecraft:end_portal_frame[eye=true,facing=east]",
5894
+ "121:0": "minecraft:end_stone",
5895
+ "122:0": "minecraft:dragon_egg",
5896
+ "123:0": "minecraft:redstone_lamp[lit=false]",
5897
+ "124:0": "minecraft:redstone_lamp[lit=true]",
5898
+ "125:0": "minecraft:oak_slab[type=double]",
5899
+ "125:1": "minecraft:spruce_slab[type=double]",
5900
+ "125:2": "minecraft:birch_slab[type=double]",
5901
+ "125:3": "minecraft:jungle_slab[type=double]",
5902
+ "125:4": "minecraft:acacia_slab[type=double]",
5903
+ "125:5": "minecraft:dark_oak_slab[type=double]",
5904
+ "126:0": "minecraft:oak_slab[type=bottom]",
5905
+ "126:1": "minecraft:spruce_slab[type=bottom]",
5906
+ "126:2": "minecraft:birch_slab[type=bottom]",
5907
+ "126:3": "minecraft:jungle_slab[type=bottom]",
5908
+ "126:4": "minecraft:acacia_slab[type=bottom]",
5909
+ "126:5": "minecraft:dark_oak_slab[type=bottom]",
5910
+ "126:8": "minecraft:oak_slab[type=top]",
5911
+ "126:9": "minecraft:spruce_slab[type=top]",
5912
+ "126:10": "minecraft:birch_slab[type=top]",
5913
+ "126:11": "minecraft:jungle_slab[type=top]",
5914
+ "126:12": "minecraft:acacia_slab[type=top]",
5915
+ "126:13": "minecraft:dark_oak_slab[type=top]",
5916
+ "127:0": "minecraft:cocoa[facing=south,age=0]",
5917
+ "127:1": "minecraft:cocoa[facing=west,age=0]",
5918
+ "127:2": "minecraft:cocoa[facing=north,age=0]",
5919
+ "127:3": "minecraft:cocoa[facing=east,age=0]",
5920
+ "127:4": "minecraft:cocoa[facing=south,age=1]",
5921
+ "127:5": "minecraft:cocoa[facing=west,age=1]",
5922
+ "127:6": "minecraft:cocoa[facing=north,age=1]",
5923
+ "127:7": "minecraft:cocoa[facing=east,age=1]",
5924
+ "127:8": "minecraft:cocoa[facing=south,age=2]",
5925
+ "127:9": "minecraft:cocoa[facing=west,age=2]",
5926
+ "127:10": "minecraft:cocoa[facing=north,age=2]",
5927
+ "127:11": "minecraft:cocoa[facing=east,age=2]",
5928
+ "128:0": "minecraft:sandstone_stairs[half=bottom,shape=outer_right,facing=east]",
5929
+ "128:1": "minecraft:sandstone_stairs[half=bottom,shape=outer_right,facing=west]",
5930
+ "128:2": "minecraft:sandstone_stairs[half=bottom,shape=outer_right,facing=south]",
5931
+ "128:3": "minecraft:sandstone_stairs[half=bottom,shape=outer_right,facing=north]",
5932
+ "128:4": "minecraft:sandstone_stairs[half=top,shape=outer_right,facing=east]",
5933
+ "128:5": "minecraft:sandstone_stairs[half=top,shape=outer_right,facing=west]",
5934
+ "128:6": "minecraft:sandstone_stairs[half=top,shape=outer_right,facing=south]",
5935
+ "128:7": "minecraft:sandstone_stairs[half=top,shape=outer_right,facing=north]",
5936
+ "129:0": "minecraft:emerald_ore",
5937
+ "130:2": "minecraft:ender_chest[facing=north]",
5938
+ "130:3": "minecraft:ender_chest[facing=south]",
5939
+ "130:4": "minecraft:ender_chest[facing=west]",
5940
+ "130:5": "minecraft:ender_chest[facing=east]",
5941
+ "131:0": "minecraft:tripwire_hook[powered=false,attached=false,facing=south]",
5942
+ "131:1": "minecraft:tripwire_hook[powered=false,attached=false,facing=west]",
5943
+ "131:2": "minecraft:tripwire_hook[powered=false,attached=false,facing=north]",
5944
+ "131:3": "minecraft:tripwire_hook[powered=false,attached=false,facing=east]",
5945
+ "131:4": "minecraft:tripwire_hook[powered=false,attached=true,facing=south]",
5946
+ "131:5": "minecraft:tripwire_hook[powered=false,attached=true,facing=west]",
5947
+ "131:6": "minecraft:tripwire_hook[powered=false,attached=true,facing=north]",
5948
+ "131:7": "minecraft:tripwire_hook[powered=false,attached=true,facing=east]",
5949
+ "131:8": "minecraft:tripwire_hook[powered=true,attached=false,facing=south]",
5950
+ "131:9": "minecraft:tripwire_hook[powered=true,attached=false,facing=west]",
5951
+ "131:10": "minecraft:tripwire_hook[powered=true,attached=false,facing=north]",
5952
+ "131:11": "minecraft:tripwire_hook[powered=true,attached=false,facing=east]",
5953
+ "131:12": "minecraft:tripwire_hook[powered=true,attached=true,facing=south]",
5954
+ "131:13": "minecraft:tripwire_hook[powered=true,attached=true,facing=west]",
5955
+ "131:14": "minecraft:tripwire_hook[powered=true,attached=true,facing=north]",
5956
+ "131:15": "minecraft:tripwire_hook[powered=true,attached=true,facing=east]",
5957
+ "132:0": "minecraft:tripwire[disarmed=false,east=false,powered=false,south=false,north=false,west=false,attached=false]",
5958
+ "132:1": "minecraft:tripwire[disarmed=false,east=false,powered=true,south=false,north=false,west=false,attached=false]",
5959
+ "132:4": "minecraft:tripwire[disarmed=false,east=false,powered=false,south=false,north=false,west=false,attached=true]",
5960
+ "132:5": "minecraft:tripwire[disarmed=false,east=false,powered=true,south=false,north=false,west=false,attached=true]",
5961
+ "132:8": "minecraft:tripwire[disarmed=true,east=false,powered=false,south=false,north=false,west=false,attached=false]",
5962
+ "132:9": "minecraft:tripwire[disarmed=true,east=false,powered=true,south=false,north=false,west=false,attached=false]",
5963
+ "132:12": "minecraft:tripwire[disarmed=true,east=false,powered=false,south=false,north=false,west=false,attached=true]",
5964
+ "132:13": "minecraft:tripwire[disarmed=true,east=false,powered=true,south=false,north=false,west=false,attached=true]",
5965
+ "133:0": "minecraft:emerald_block",
5966
+ "134:0": "minecraft:spruce_stairs[half=bottom,shape=outer_right,facing=east]",
5967
+ "134:1": "minecraft:spruce_stairs[half=bottom,shape=outer_right,facing=west]",
5968
+ "134:2": "minecraft:spruce_stairs[half=bottom,shape=outer_right,facing=south]",
5969
+ "134:3": "minecraft:spruce_stairs[half=bottom,shape=outer_right,facing=north]",
5970
+ "134:4": "minecraft:spruce_stairs[half=top,shape=outer_right,facing=east]",
5971
+ "134:5": "minecraft:spruce_stairs[half=top,shape=outer_right,facing=west]",
5972
+ "134:6": "minecraft:spruce_stairs[half=top,shape=outer_right,facing=south]",
5973
+ "134:7": "minecraft:spruce_stairs[half=top,shape=outer_right,facing=north]",
5974
+ "135:0": "minecraft:birch_stairs[half=bottom,shape=outer_right,facing=east]",
5975
+ "135:1": "minecraft:birch_stairs[half=bottom,shape=outer_right,facing=west]",
5976
+ "135:2": "minecraft:birch_stairs[half=bottom,shape=outer_right,facing=south]",
5977
+ "135:3": "minecraft:birch_stairs[half=bottom,shape=outer_right,facing=north]",
5978
+ "135:4": "minecraft:birch_stairs[half=top,shape=outer_right,facing=east]",
5979
+ "135:5": "minecraft:birch_stairs[half=top,shape=outer_right,facing=west]",
5980
+ "135:6": "minecraft:birch_stairs[half=top,shape=outer_right,facing=south]",
5981
+ "135:7": "minecraft:birch_stairs[half=top,shape=outer_right,facing=north]",
5982
+ "136:0": "minecraft:jungle_stairs[half=bottom,shape=outer_right,facing=east]",
5983
+ "136:1": "minecraft:jungle_stairs[half=bottom,shape=outer_right,facing=west]",
5984
+ "136:2": "minecraft:jungle_stairs[half=bottom,shape=outer_right,facing=south]",
5985
+ "136:3": "minecraft:jungle_stairs[half=bottom,shape=outer_right,facing=north]",
5986
+ "136:4": "minecraft:jungle_stairs[half=top,shape=outer_right,facing=east]",
5987
+ "136:5": "minecraft:jungle_stairs[half=top,shape=outer_right,facing=west]",
5988
+ "136:6": "minecraft:jungle_stairs[half=top,shape=outer_right,facing=south]",
5989
+ "136:7": "minecraft:jungle_stairs[half=top,shape=outer_right,facing=north]",
5990
+ "137:0": "minecraft:command_block[conditional=false,facing=down]",
5991
+ "137:1": "minecraft:command_block[conditional=false,facing=up]",
5992
+ "137:2": "minecraft:command_block[conditional=false,facing=north]",
5993
+ "137:3": "minecraft:command_block[conditional=false,facing=south]",
5994
+ "137:4": "minecraft:command_block[conditional=false,facing=west]",
5995
+ "137:5": "minecraft:command_block[conditional=false,facing=east]",
5996
+ "137:8": "minecraft:command_block[conditional=true,facing=down]",
5997
+ "137:9": "minecraft:command_block[conditional=true,facing=up]",
5998
+ "137:10": "minecraft:command_block[conditional=true,facing=north]",
5999
+ "137:11": "minecraft:command_block[conditional=true,facing=south]",
6000
+ "137:12": "minecraft:command_block[conditional=true,facing=west]",
6001
+ "137:13": "minecraft:command_block[conditional=true,facing=east]",
6002
+ "138:0": "minecraft:beacon",
6003
+ "139:0": "minecraft:cobblestone_wall[east=false,south=false,north=false,west=false,up=false]",
6004
+ "139:1": "minecraft:mossy_cobblestone_wall[east=false,south=false,north=false,west=false,up=false]",
6005
+ "140:0": "minecraft:flower_pot",
6006
+ "140:1": "minecraft:potted_poppy",
6007
+ "140:2": "minecraft:potted_dandelion",
6008
+ "140:3": "minecraft:potted_oak_sapling",
6009
+ "140:4": "minecraft:potted_spruce_sapling",
6010
+ "140:5": "minecraft:potted_birch_sapling",
6011
+ "140:6": "minecraft:potted_jungle_sapling",
6012
+ "140:7": "minecraft:potted_red_mushroom",
6013
+ "140:8": "minecraft:potted_brown_mushroom",
6014
+ "140:9": "minecraft:potted_cactus",
6015
+ "140:10": "minecraft:potted_dead_bush",
6016
+ "140:11": "minecraft:potted_fern",
6017
+ "140:12": "minecraft:potted_acacia_sapling",
6018
+ "140:13": "minecraft:potted_dark_oak_sapling",
6019
+ "140:14": "minecraft:potted_blue_orchid",
6020
+ "140:15": "minecraft:potted_allium",
6021
+ "141:0": "minecraft:carrots[age=0]",
6022
+ "141:1": "minecraft:carrots[age=1]",
6023
+ "141:2": "minecraft:carrots[age=2]",
6024
+ "141:3": "minecraft:carrots[age=3]",
6025
+ "141:4": "minecraft:carrots[age=4]",
6026
+ "141:5": "minecraft:carrots[age=5]",
6027
+ "141:6": "minecraft:carrots[age=6]",
6028
+ "141:7": "minecraft:carrots[age=7]",
6029
+ "142:0": "minecraft:potatoes[age=0]",
6030
+ "142:1": "minecraft:potatoes[age=1]",
6031
+ "142:2": "minecraft:potatoes[age=2]",
6032
+ "142:3": "minecraft:potatoes[age=3]",
6033
+ "142:4": "minecraft:potatoes[age=4]",
6034
+ "142:5": "minecraft:potatoes[age=5]",
6035
+ "142:6": "minecraft:potatoes[age=6]",
6036
+ "142:7": "minecraft:potatoes[age=7]",
6037
+ "143:0": "minecraft:oak_button[powered=false,facing=east,face=ceiling]",
6038
+ "143:1": "minecraft:oak_button[powered=false,facing=east,face=wall]",
6039
+ "143:2": "minecraft:oak_button[powered=false,facing=west,face=wall]",
6040
+ "143:3": "minecraft:oak_button[powered=false,facing=south,face=wall]",
6041
+ "143:4": "minecraft:oak_button[powered=false,facing=north,face=wall]",
6042
+ "143:5": "minecraft:oak_button[powered=false,facing=east,face=floor]",
6043
+ "143:8": "minecraft:oak_button[powered=true,facing=south,face=ceiling]",
6044
+ "143:9": "minecraft:oak_button[powered=true,facing=east,face=wall]",
6045
+ "143:10": "minecraft:oak_button[powered=true,facing=west,face=wall]",
6046
+ "143:11": "minecraft:oak_button[powered=true,facing=south,face=wall]",
6047
+ "143:12": "minecraft:oak_button[powered=true,facing=north,face=wall]",
6048
+ "143:13": "minecraft:oak_button[powered=true,facing=south,face=floor]",
6049
+ "144:0": "minecraft:skeleton_skull[rotation=0]",
6050
+ "144:1": "minecraft:skeleton_skull[rotation=4]",
6051
+ "144:2": "minecraft:skeleton_wall_skull[facing=north]",
6052
+ "144:3": "minecraft:skeleton_wall_skull[facing=south]",
6053
+ "144:4": "minecraft:skeleton_wall_skull[facing=west]",
6054
+ "144:5": "minecraft:skeleton_wall_skull[facing=east]",
6055
+ "144:8": "minecraft:skeleton_skull[rotation=8]",
6056
+ "144:9": "minecraft:skeleton_skull[rotation=12]",
6057
+ "144:10": "minecraft:skeleton_wall_skull[facing=north]",
6058
+ "144:11": "minecraft:skeleton_wall_skull[facing=south]",
6059
+ "144:12": "minecraft:skeleton_wall_skull[facing=west]",
6060
+ "144:13": "minecraft:skeleton_wall_skull[facing=east]",
6061
+ "145:0": "minecraft:anvil[facing=south]",
6062
+ "145:1": "minecraft:anvil[facing=west]",
6063
+ "145:2": "minecraft:anvil[facing=north]",
6064
+ "145:3": "minecraft:anvil[facing=east]",
6065
+ "145:4": "minecraft:chipped_anvil[facing=south]",
6066
+ "145:5": "minecraft:chipped_anvil[facing=west]",
6067
+ "145:6": "minecraft:chipped_anvil[facing=north]",
6068
+ "145:7": "minecraft:chipped_anvil[facing=east]",
6069
+ "145:8": "minecraft:damaged_anvil[facing=south]",
6070
+ "145:9": "minecraft:damaged_anvil[facing=west]",
6071
+ "145:10": "minecraft:damaged_anvil[facing=north]",
6072
+ "145:11": "minecraft:damaged_anvil[facing=east]",
6073
+ "146:2": "minecraft:trapped_chest[facing=north,type=single]",
6074
+ "146:3": "minecraft:trapped_chest[facing=south,type=single]",
6075
+ "146:4": "minecraft:trapped_chest[facing=west,type=single]",
6076
+ "146:5": "minecraft:trapped_chest[facing=east,type=single]",
6077
+ "147:0": "minecraft:light_weighted_pressure_plate[power=0]",
6078
+ "147:1": "minecraft:light_weighted_pressure_plate[power=1]",
6079
+ "147:2": "minecraft:light_weighted_pressure_plate[power=2]",
6080
+ "147:3": "minecraft:light_weighted_pressure_plate[power=3]",
6081
+ "147:4": "minecraft:light_weighted_pressure_plate[power=4]",
6082
+ "147:5": "minecraft:light_weighted_pressure_plate[power=5]",
6083
+ "147:6": "minecraft:light_weighted_pressure_plate[power=6]",
6084
+ "147:7": "minecraft:light_weighted_pressure_plate[power=7]",
6085
+ "147:8": "minecraft:light_weighted_pressure_plate[power=8]",
6086
+ "147:9": "minecraft:light_weighted_pressure_plate[power=9]",
6087
+ "147:10": "minecraft:light_weighted_pressure_plate[power=10]",
6088
+ "147:11": "minecraft:light_weighted_pressure_plate[power=11]",
6089
+ "147:12": "minecraft:light_weighted_pressure_plate[power=12]",
6090
+ "147:13": "minecraft:light_weighted_pressure_plate[power=13]",
6091
+ "147:14": "minecraft:light_weighted_pressure_plate[power=14]",
6092
+ "147:15": "minecraft:light_weighted_pressure_plate[power=15]",
6093
+ "148:0": "minecraft:heavy_weighted_pressure_plate[power=0]",
6094
+ "148:1": "minecraft:heavy_weighted_pressure_plate[power=1]",
6095
+ "148:2": "minecraft:heavy_weighted_pressure_plate[power=2]",
6096
+ "148:3": "minecraft:heavy_weighted_pressure_plate[power=3]",
6097
+ "148:4": "minecraft:heavy_weighted_pressure_plate[power=4]",
6098
+ "148:5": "minecraft:heavy_weighted_pressure_plate[power=5]",
6099
+ "148:6": "minecraft:heavy_weighted_pressure_plate[power=6]",
6100
+ "148:7": "minecraft:heavy_weighted_pressure_plate[power=7]",
6101
+ "148:8": "minecraft:heavy_weighted_pressure_plate[power=8]",
6102
+ "148:9": "minecraft:heavy_weighted_pressure_plate[power=9]",
6103
+ "148:10": "minecraft:heavy_weighted_pressure_plate[power=10]",
6104
+ "148:11": "minecraft:heavy_weighted_pressure_plate[power=11]",
6105
+ "148:12": "minecraft:heavy_weighted_pressure_plate[power=12]",
6106
+ "148:13": "minecraft:heavy_weighted_pressure_plate[power=13]",
6107
+ "148:14": "minecraft:heavy_weighted_pressure_plate[power=14]",
6108
+ "148:15": "minecraft:heavy_weighted_pressure_plate[power=15]",
6109
+ "149:0": "minecraft:comparator[mode=compare,powered=false,facing=south]",
6110
+ "149:1": "minecraft:comparator[mode=compare,powered=false,facing=west]",
6111
+ "149:2": "minecraft:comparator[mode=compare,powered=false,facing=north]",
6112
+ "149:3": "minecraft:comparator[mode=compare,powered=false,facing=east]",
6113
+ "149:4": "minecraft:comparator[mode=subtract,powered=false,facing=south]",
6114
+ "149:5": "minecraft:comparator[mode=subtract,powered=false,facing=west]",
6115
+ "149:6": "minecraft:comparator[mode=subtract,powered=false,facing=north]",
6116
+ "149:7": "minecraft:comparator[mode=subtract,powered=false,facing=east]",
6117
+ "149:8": "minecraft:comparator[mode=compare,powered=false,facing=south]",
6118
+ "149:9": "minecraft:comparator[mode=compare,powered=false,facing=west]",
6119
+ "149:10": "minecraft:comparator[mode=compare,powered=false,facing=north]",
6120
+ "149:11": "minecraft:comparator[mode=compare,powered=false,facing=east]",
6121
+ "149:12": "minecraft:comparator[mode=subtract,powered=false,facing=south]",
6122
+ "149:13": "minecraft:comparator[mode=subtract,powered=false,facing=west]",
6123
+ "149:14": "minecraft:comparator[mode=subtract,powered=false,facing=north]",
6124
+ "149:15": "minecraft:comparator[mode=subtract,powered=false,facing=east]",
6125
+ "150:0": "minecraft:comparator[mode=compare,powered=true,facing=south]",
6126
+ "150:1": "minecraft:comparator[mode=compare,powered=true,facing=west]",
6127
+ "150:2": "minecraft:comparator[mode=compare,powered=true,facing=north]",
6128
+ "150:3": "minecraft:comparator[mode=compare,powered=true,facing=east]",
6129
+ "150:4": "minecraft:comparator[mode=subtract,powered=true,facing=south]",
6130
+ "150:5": "minecraft:comparator[mode=subtract,powered=true,facing=west]",
6131
+ "150:6": "minecraft:comparator[mode=subtract,powered=true,facing=north]",
6132
+ "150:7": "minecraft:comparator[mode=subtract,powered=true,facing=east]",
6133
+ "150:8": "minecraft:comparator[mode=compare,powered=true,facing=south]",
6134
+ "150:9": "minecraft:comparator[mode=compare,powered=true,facing=west]",
6135
+ "150:10": "minecraft:comparator[mode=compare,powered=true,facing=north]",
6136
+ "150:11": "minecraft:comparator[mode=compare,powered=true,facing=east]",
6137
+ "150:12": "minecraft:comparator[mode=subtract,powered=true,facing=south]",
6138
+ "150:13": "minecraft:comparator[mode=subtract,powered=true,facing=west]",
6139
+ "150:14": "minecraft:comparator[mode=subtract,powered=true,facing=north]",
6140
+ "150:15": "minecraft:comparator[mode=subtract,powered=true,facing=east]",
6141
+ "151:0": "minecraft:daylight_detector[inverted=false,power=0]",
6142
+ "151:1": "minecraft:daylight_detector[inverted=false,power=1]",
6143
+ "151:2": "minecraft:daylight_detector[inverted=false,power=2]",
6144
+ "151:3": "minecraft:daylight_detector[inverted=false,power=3]",
6145
+ "151:4": "minecraft:daylight_detector[inverted=false,power=4]",
6146
+ "151:5": "minecraft:daylight_detector[inverted=false,power=5]",
6147
+ "151:6": "minecraft:daylight_detector[inverted=false,power=6]",
6148
+ "151:7": "minecraft:daylight_detector[inverted=false,power=7]",
6149
+ "151:8": "minecraft:daylight_detector[inverted=false,power=8]",
6150
+ "151:9": "minecraft:daylight_detector[inverted=false,power=9]",
6151
+ "151:10": "minecraft:daylight_detector[inverted=false,power=10]",
6152
+ "151:11": "minecraft:daylight_detector[inverted=false,power=11]",
6153
+ "151:12": "minecraft:daylight_detector[inverted=false,power=12]",
6154
+ "151:13": "minecraft:daylight_detector[inverted=false,power=13]",
6155
+ "151:14": "minecraft:daylight_detector[inverted=false,power=14]",
6156
+ "151:15": "minecraft:daylight_detector[inverted=false,power=15]",
6157
+ "152:0": "minecraft:redstone_block",
6158
+ "153:0": "minecraft:nether_quartz_ore",
6159
+ "154:0": "minecraft:hopper[facing=down,enabled=true]",
6160
+ "154:2": "minecraft:hopper[facing=north,enabled=true]",
6161
+ "154:3": "minecraft:hopper[facing=south,enabled=true]",
6162
+ "154:4": "minecraft:hopper[facing=west,enabled=true]",
6163
+ "154:5": "minecraft:hopper[facing=east,enabled=true]",
6164
+ "154:8": "minecraft:hopper[facing=down,enabled=false]",
6165
+ "154:10": "minecraft:hopper[facing=north,enabled=false]",
6166
+ "154:11": "minecraft:hopper[facing=south,enabled=false]",
6167
+ "154:12": "minecraft:hopper[facing=west,enabled=false]",
6168
+ "154:13": "minecraft:hopper[facing=east,enabled=false]",
6169
+ "155:0": "minecraft:quartz_block",
6170
+ "155:1": "minecraft:chiseled_quartz_block",
6171
+ "155:2": "minecraft:quartz_pillar[axis=y]",
6172
+ "155:3": "minecraft:quartz_pillar[axis=x]",
6173
+ "155:4": "minecraft:quartz_pillar[axis=z]",
6174
+ "155:6": "minecraft:quartz_pillar[axis=x]",
6175
+ "155:10": "minecraft:quartz_pillar[axis=z]",
6176
+ "156:0": "minecraft:quartz_stairs[half=bottom,shape=outer_right,facing=east]",
6177
+ "156:1": "minecraft:quartz_stairs[half=bottom,shape=outer_right,facing=west]",
6178
+ "156:2": "minecraft:quartz_stairs[half=bottom,shape=outer_right,facing=south]",
6179
+ "156:3": "minecraft:quartz_stairs[half=bottom,shape=outer_right,facing=north]",
6180
+ "156:4": "minecraft:quartz_stairs[half=top,shape=outer_right,facing=east]",
6181
+ "156:5": "minecraft:quartz_stairs[half=top,shape=outer_right,facing=west]",
6182
+ "156:6": "minecraft:quartz_stairs[half=top,shape=outer_right,facing=south]",
6183
+ "156:7": "minecraft:quartz_stairs[half=top,shape=outer_right,facing=north]",
6184
+ "157:0": "minecraft:activator_rail[shape=north_south,powered=false]",
6185
+ "157:1": "minecraft:activator_rail[shape=east_west,powered=false]",
6186
+ "157:2": "minecraft:activator_rail[shape=ascending_east,powered=false]",
6187
+ "157:3": "minecraft:activator_rail[shape=ascending_west,powered=false]",
6188
+ "157:4": "minecraft:activator_rail[shape=ascending_north,powered=false]",
6189
+ "157:5": "minecraft:activator_rail[shape=ascending_south,powered=false]",
6190
+ "157:8": "minecraft:activator_rail[shape=north_south,powered=true]",
6191
+ "157:9": "minecraft:activator_rail[shape=east_west,powered=true]",
6192
+ "157:10": "minecraft:activator_rail[shape=ascending_east,powered=true]",
6193
+ "157:11": "minecraft:activator_rail[shape=ascending_west,powered=true]",
6194
+ "157:12": "minecraft:activator_rail[shape=ascending_north,powered=true]",
6195
+ "157:13": "minecraft:activator_rail[shape=ascending_south,powered=true]",
6196
+ "158:0": "minecraft:dropper[triggered=false,facing=down]",
6197
+ "158:1": "minecraft:dropper[triggered=false,facing=up]",
6198
+ "158:2": "minecraft:dropper[triggered=false,facing=north]",
6199
+ "158:3": "minecraft:dropper[triggered=false,facing=south]",
6200
+ "158:4": "minecraft:dropper[triggered=false,facing=west]",
6201
+ "158:5": "minecraft:dropper[triggered=false,facing=east]",
6202
+ "158:8": "minecraft:dropper[triggered=true,facing=down]",
6203
+ "158:9": "minecraft:dropper[triggered=true,facing=up]",
6204
+ "158:10": "minecraft:dropper[triggered=true,facing=north]",
6205
+ "158:11": "minecraft:dropper[triggered=true,facing=south]",
6206
+ "158:12": "minecraft:dropper[triggered=true,facing=west]",
6207
+ "158:13": "minecraft:dropper[triggered=true,facing=east]",
6208
+ "159:0": "minecraft:white_terracotta",
6209
+ "159:1": "minecraft:orange_terracotta",
6210
+ "159:2": "minecraft:magenta_terracotta",
6211
+ "159:3": "minecraft:light_blue_terracotta",
6212
+ "159:4": "minecraft:yellow_terracotta",
6213
+ "159:5": "minecraft:lime_terracotta",
6214
+ "159:6": "minecraft:pink_terracotta",
6215
+ "159:7": "minecraft:gray_terracotta",
6216
+ "159:8": "minecraft:light_gray_terracotta",
6217
+ "159:9": "minecraft:cyan_terracotta",
6218
+ "159:10": "minecraft:purple_terracotta",
6219
+ "159:11": "minecraft:blue_terracotta",
6220
+ "159:12": "minecraft:brown_terracotta",
6221
+ "159:13": "minecraft:green_terracotta",
6222
+ "159:14": "minecraft:red_terracotta",
6223
+ "159:15": "minecraft:black_terracotta",
6224
+ "160:0": "minecraft:white_stained_glass_pane[east=false,south=false,north=false,west=false]",
6225
+ "160:1": "minecraft:orange_stained_glass_pane[east=false,south=false,north=false,west=false]",
6226
+ "160:2": "minecraft:magenta_stained_glass_pane[east=false,south=false,north=false,west=false]",
6227
+ "160:3": "minecraft:light_blue_stained_glass_pane[east=false,south=false,north=false,west=false]",
6228
+ "160:4": "minecraft:yellow_stained_glass_pane[east=false,south=false,north=false,west=false]",
6229
+ "160:5": "minecraft:lime_stained_glass_pane[east=false,south=false,north=false,west=false]",
6230
+ "160:6": "minecraft:pink_stained_glass_pane[east=false,south=false,north=false,west=false]",
6231
+ "160:7": "minecraft:gray_stained_glass_pane[east=false,south=false,north=false,west=false]",
6232
+ "160:8": "minecraft:light_gray_stained_glass_pane[east=false,south=false,north=false,west=false]",
6233
+ "160:9": "minecraft:cyan_stained_glass_pane[east=false,south=false,north=false,west=false]",
6234
+ "160:10": "minecraft:purple_stained_glass_pane[east=false,south=false,north=false,west=false]",
6235
+ "160:11": "minecraft:blue_stained_glass_pane[east=false,south=false,north=false,west=false]",
6236
+ "160:12": "minecraft:brown_stained_glass_pane[east=false,south=false,north=false,west=false]",
6237
+ "160:13": "minecraft:green_stained_glass_pane[east=false,south=false,north=false,west=false]",
6238
+ "160:14": "minecraft:red_stained_glass_pane[east=false,south=false,north=false,west=false]",
6239
+ "160:15": "minecraft:black_stained_glass_pane[east=false,south=false,north=false,west=false]",
6240
+ "161:0": "minecraft:acacia_leaves[persistent=false,distance=1]",
6241
+ "161:1": "minecraft:dark_oak_leaves[persistent=false,distance=1]",
6242
+ "161:4": "minecraft:acacia_leaves[persistent=true,distance=1]",
6243
+ "161:5": "minecraft:dark_oak_leaves[persistent=true,distance=1]",
6244
+ "161:8": "minecraft:acacia_leaves[persistent=false,distance=1]",
6245
+ "161:9": "minecraft:dark_oak_leaves[persistent=false,distance=1]",
6246
+ "161:12": "minecraft:acacia_leaves[persistent=true,distance=1]",
6247
+ "161:13": "minecraft:dark_oak_leaves[persistent=true,distance=1]",
6248
+ "162:0": "minecraft:acacia_log[axis=y]",
6249
+ "162:1": "minecraft:dark_oak_log[axis=y]",
6250
+ "162:4": "minecraft:acacia_log[axis=x]",
6251
+ "162:5": "minecraft:dark_oak_log[axis=x]",
6252
+ "162:8": "minecraft:acacia_log[axis=z]",
6253
+ "162:9": "minecraft:dark_oak_log[axis=z]",
6254
+ "162:12": "minecraft:acacia_wood",
6255
+ "162:13": "minecraft:dark_oak_wood",
6256
+ "163:0": "minecraft:acacia_stairs[half=bottom,shape=outer_right,facing=east]",
6257
+ "163:1": "minecraft:acacia_stairs[half=bottom,shape=outer_right,facing=west]",
6258
+ "163:2": "minecraft:acacia_stairs[half=bottom,shape=outer_right,facing=south]",
6259
+ "163:3": "minecraft:acacia_stairs[half=bottom,shape=outer_right,facing=north]",
6260
+ "163:4": "minecraft:acacia_stairs[half=top,shape=outer_right,facing=east]",
6261
+ "163:5": "minecraft:acacia_stairs[half=top,shape=outer_right,facing=west]",
6262
+ "163:6": "minecraft:acacia_stairs[half=top,shape=outer_right,facing=south]",
6263
+ "163:7": "minecraft:acacia_stairs[half=top,shape=outer_right,facing=north]",
6264
+ "164:0": "minecraft:dark_oak_stairs[half=bottom,shape=outer_right,facing=east]",
6265
+ "164:1": "minecraft:dark_oak_stairs[half=bottom,shape=outer_right,facing=west]",
6266
+ "164:2": "minecraft:dark_oak_stairs[half=bottom,shape=outer_right,facing=south]",
6267
+ "164:3": "minecraft:dark_oak_stairs[half=bottom,shape=outer_right,facing=north]",
6268
+ "164:4": "minecraft:dark_oak_stairs[half=top,shape=outer_right,facing=east]",
6269
+ "164:5": "minecraft:dark_oak_stairs[half=top,shape=outer_right,facing=west]",
6270
+ "164:6": "minecraft:dark_oak_stairs[half=top,shape=outer_right,facing=south]",
6271
+ "164:7": "minecraft:dark_oak_stairs[half=top,shape=outer_right,facing=north]",
6272
+ "165:0": "minecraft:slime_block",
6273
+ "166:0": "minecraft:barrier",
6274
+ "167:0": "minecraft:iron_trapdoor[half=bottom,facing=north,open=false]",
6275
+ "167:1": "minecraft:iron_trapdoor[half=bottom,facing=south,open=false]",
6276
+ "167:2": "minecraft:iron_trapdoor[half=bottom,facing=west,open=false]",
6277
+ "167:3": "minecraft:iron_trapdoor[half=bottom,facing=east,open=false]",
6278
+ "167:4": "minecraft:iron_trapdoor[half=bottom,facing=north,open=true]",
6279
+ "167:5": "minecraft:iron_trapdoor[half=bottom,facing=south,open=true]",
6280
+ "167:6": "minecraft:iron_trapdoor[half=bottom,facing=west,open=true]",
6281
+ "167:7": "minecraft:iron_trapdoor[half=bottom,facing=east,open=true]",
6282
+ "167:8": "minecraft:iron_trapdoor[half=top,facing=north,open=false]",
6283
+ "167:9": "minecraft:iron_trapdoor[half=top,facing=south,open=false]",
6284
+ "167:10": "minecraft:iron_trapdoor[half=top,facing=west,open=false]",
6285
+ "167:11": "minecraft:iron_trapdoor[half=top,facing=east,open=false]",
6286
+ "167:12": "minecraft:iron_trapdoor[half=top,facing=north,open=true]",
6287
+ "167:13": "minecraft:iron_trapdoor[half=top,facing=south,open=true]",
6288
+ "167:14": "minecraft:iron_trapdoor[half=top,facing=west,open=true]",
6289
+ "167:15": "minecraft:iron_trapdoor[half=top,facing=east,open=true]",
6290
+ "168:0": "minecraft:prismarine",
6291
+ "168:1": "minecraft:prismarine_bricks",
6292
+ "168:2": "minecraft:dark_prismarine",
6293
+ "169:0": "minecraft:sea_lantern",
6294
+ "170:0": "minecraft:hay_block[axis=y]",
6295
+ "170:4": "minecraft:hay_block[axis=x]",
6296
+ "170:8": "minecraft:hay_block[axis=z]",
6297
+ "171:0": "minecraft:white_carpet",
6298
+ "171:1": "minecraft:orange_carpet",
6299
+ "171:2": "minecraft:magenta_carpet",
6300
+ "171:3": "minecraft:light_blue_carpet",
6301
+ "171:4": "minecraft:yellow_carpet",
6302
+ "171:5": "minecraft:lime_carpet",
6303
+ "171:6": "minecraft:pink_carpet",
6304
+ "171:7": "minecraft:gray_carpet",
6305
+ "171:8": "minecraft:light_gray_carpet",
6306
+ "171:9": "minecraft:cyan_carpet",
6307
+ "171:10": "minecraft:purple_carpet",
6308
+ "171:11": "minecraft:blue_carpet",
6309
+ "171:12": "minecraft:brown_carpet",
6310
+ "171:13": "minecraft:green_carpet",
6311
+ "171:14": "minecraft:red_carpet",
6312
+ "171:15": "minecraft:black_carpet",
6313
+ "172:0": "minecraft:terracotta",
6314
+ "173:0": "minecraft:coal_block",
6315
+ "174:0": "minecraft:packed_ice",
6316
+ "175:0": "minecraft:sunflower[half=lower]",
6317
+ "175:1": "minecraft:lilac[half=lower]",
6318
+ "175:2": "minecraft:tall_grass[half=lower]",
6319
+ "175:3": "minecraft:large_fern[half=lower]",
6320
+ "175:4": "minecraft:rose_bush[half=lower]",
6321
+ "175:5": "minecraft:peony[half=lower]",
6322
+ "175:8": "minecraft:sunflower[half=upper]",
6323
+ "175:9": "minecraft:lilac[half=upper]",
6324
+ "175:10": "minecraft:tall_grass[half=upper]",
6325
+ "175:11": "minecraft:large_fern[half=upper]",
6326
+ "175:12": "minecraft:rose_bush[half=upper]",
6327
+ "175:13": "minecraft:peony[half=upper]",
6328
+ "176:0": "minecraft:white_banner[rotation=0]",
6329
+ "176:1": "minecraft:white_banner[rotation=1]",
6330
+ "176:2": "minecraft:white_banner[rotation=2]",
6331
+ "176:3": "minecraft:white_banner[rotation=3]",
6332
+ "176:4": "minecraft:white_banner[rotation=4]",
6333
+ "176:5": "minecraft:white_banner[rotation=5]",
6334
+ "176:6": "minecraft:white_banner[rotation=6]",
6335
+ "176:7": "minecraft:white_banner[rotation=7]",
6336
+ "176:8": "minecraft:white_banner[rotation=8]",
6337
+ "176:9": "minecraft:white_banner[rotation=9]",
6338
+ "176:10": "minecraft:white_banner[rotation=10]",
6339
+ "176:11": "minecraft:white_banner[rotation=11]",
6340
+ "176:12": "minecraft:white_banner[rotation=12]",
6341
+ "176:13": "minecraft:white_banner[rotation=13]",
6342
+ "176:14": "minecraft:white_banner[rotation=14]",
6343
+ "176:15": "minecraft:white_banner[rotation=15]",
6344
+ "177:2": "minecraft:white_wall_banner[facing=north]",
6345
+ "177:3": "minecraft:white_wall_banner[facing=south]",
6346
+ "177:4": "minecraft:white_wall_banner[facing=west]",
6347
+ "177:5": "minecraft:white_wall_banner[facing=east]",
6348
+ "178:0": "minecraft:daylight_detector[inverted=true,power=0]",
6349
+ "178:1": "minecraft:daylight_detector[inverted=true,power=1]",
6350
+ "178:2": "minecraft:daylight_detector[inverted=true,power=2]",
6351
+ "178:3": "minecraft:daylight_detector[inverted=true,power=3]",
6352
+ "178:4": "minecraft:daylight_detector[inverted=true,power=4]",
6353
+ "178:5": "minecraft:daylight_detector[inverted=true,power=5]",
6354
+ "178:6": "minecraft:daylight_detector[inverted=true,power=6]",
6355
+ "178:7": "minecraft:daylight_detector[inverted=true,power=7]",
6356
+ "178:8": "minecraft:daylight_detector[inverted=true,power=8]",
6357
+ "178:9": "minecraft:daylight_detector[inverted=true,power=9]",
6358
+ "178:10": "minecraft:daylight_detector[inverted=true,power=10]",
6359
+ "178:11": "minecraft:daylight_detector[inverted=true,power=11]",
6360
+ "178:12": "minecraft:daylight_detector[inverted=true,power=12]",
6361
+ "178:13": "minecraft:daylight_detector[inverted=true,power=13]",
6362
+ "178:14": "minecraft:daylight_detector[inverted=true,power=14]",
6363
+ "178:15": "minecraft:daylight_detector[inverted=true,power=15]",
6364
+ "179:0": "minecraft:red_sandstone",
6365
+ "179:1": "minecraft:chiseled_red_sandstone",
6366
+ "179:2": "minecraft:cut_red_sandstone",
6367
+ "180:0": "minecraft:red_sandstone_stairs[half=bottom,shape=outer_right,facing=east]",
6368
+ "180:1": "minecraft:red_sandstone_stairs[half=bottom,shape=outer_right,facing=west]",
6369
+ "180:2": "minecraft:red_sandstone_stairs[half=bottom,shape=outer_right,facing=south]",
6370
+ "180:3": "minecraft:red_sandstone_stairs[half=bottom,shape=outer_right,facing=north]",
6371
+ "180:4": "minecraft:red_sandstone_stairs[half=top,shape=outer_right,facing=east]",
6372
+ "180:5": "minecraft:red_sandstone_stairs[half=top,shape=outer_right,facing=west]",
6373
+ "180:6": "minecraft:red_sandstone_stairs[half=top,shape=outer_right,facing=south]",
6374
+ "180:7": "minecraft:red_sandstone_stairs[half=top,shape=outer_right,facing=north]",
6375
+ "181:0": "minecraft:red_sandstone_slab[type=double]",
6376
+ "181:8": "minecraft:smooth_red_sandstone",
6377
+ "182:0": "minecraft:red_sandstone_slab[type=bottom]",
6378
+ "182:8": "minecraft:red_sandstone_slab[type=top]",
6379
+ "183:0": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
6380
+ "183:1": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
6381
+ "183:2": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
6382
+ "183:3": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
6383
+ "183:4": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
6384
+ "183:5": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
6385
+ "183:6": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
6386
+ "183:7": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
6387
+ "183:8": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
6388
+ "183:9": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
6389
+ "183:10": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
6390
+ "183:11": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
6391
+ "183:12": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
6392
+ "183:13": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
6393
+ "183:14": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
6394
+ "183:15": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
6395
+ "184:0": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
6396
+ "184:1": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
6397
+ "184:2": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
6398
+ "184:3": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
6399
+ "184:4": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
6400
+ "184:5": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
6401
+ "184:6": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
6402
+ "184:7": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
6403
+ "184:8": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
6404
+ "184:9": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
6405
+ "184:10": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
6406
+ "184:11": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
6407
+ "184:12": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
6408
+ "184:13": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
6409
+ "184:14": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
6410
+ "184:15": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
6411
+ "185:0": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
6412
+ "185:1": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
6413
+ "185:2": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
6414
+ "185:3": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
6415
+ "185:4": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
6416
+ "185:5": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
6417
+ "185:6": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
6418
+ "185:7": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
6419
+ "185:8": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
6420
+ "185:9": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
6421
+ "185:10": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
6422
+ "185:11": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
6423
+ "185:12": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
6424
+ "185:13": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
6425
+ "185:14": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
6426
+ "185:15": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
6427
+ "186:0": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
6428
+ "186:1": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
6429
+ "186:2": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
6430
+ "186:3": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
6431
+ "186:4": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
6432
+ "186:5": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
6433
+ "186:6": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
6434
+ "186:7": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
6435
+ "186:8": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
6436
+ "186:9": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
6437
+ "186:10": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
6438
+ "186:11": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
6439
+ "186:12": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
6440
+ "186:13": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
6441
+ "186:14": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
6442
+ "186:15": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
6443
+ "187:0": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
6444
+ "187:1": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
6445
+ "187:2": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
6446
+ "187:3": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
6447
+ "187:4": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
6448
+ "187:5": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
6449
+ "187:6": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
6450
+ "187:7": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
6451
+ "187:8": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
6452
+ "187:9": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
6453
+ "187:10": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
6454
+ "187:11": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
6455
+ "187:12": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
6456
+ "187:13": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
6457
+ "187:14": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
6458
+ "187:15": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
6459
+ "188:0": "minecraft:spruce_fence[east=false,south=false,north=false,west=false]",
6460
+ "189:0": "minecraft:birch_fence[east=false,south=false,north=false,west=false]",
6461
+ "190:0": "minecraft:jungle_fence[east=false,south=false,north=false,west=false]",
6462
+ "191:0": "minecraft:dark_oak_fence[east=false,south=false,north=false,west=false]",
6463
+ "192:0": "minecraft:acacia_fence[east=false,south=false,north=false,west=false]",
6464
+ "193:0": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
6465
+ "193:1": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
6466
+ "193:2": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
6467
+ "193:3": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
6468
+ "193:4": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
6469
+ "193:5": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
6470
+ "193:6": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
6471
+ "193:7": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
6472
+ "193:8": "minecraft:spruce_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
6473
+ "193:9": "minecraft:spruce_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
6474
+ "193:10": "minecraft:spruce_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
6475
+ "193:11": "minecraft:spruce_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
6476
+ "194:0": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
6477
+ "194:1": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
6478
+ "194:2": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
6479
+ "194:3": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
6480
+ "194:4": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
6481
+ "194:5": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
6482
+ "194:6": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
6483
+ "194:7": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
6484
+ "194:8": "minecraft:birch_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
6485
+ "194:9": "minecraft:birch_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
6486
+ "194:10": "minecraft:birch_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
6487
+ "194:11": "minecraft:birch_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
6488
+ "195:0": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
6489
+ "195:1": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
6490
+ "195:2": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
6491
+ "195:3": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
6492
+ "195:4": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
6493
+ "195:5": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
6494
+ "195:6": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
6495
+ "195:7": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
6496
+ "195:8": "minecraft:jungle_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
6497
+ "195:9": "minecraft:jungle_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
6498
+ "195:10": "minecraft:jungle_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
6499
+ "195:11": "minecraft:jungle_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
6500
+ "196:0": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
6501
+ "196:1": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
6502
+ "196:2": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
6503
+ "196:3": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
6504
+ "196:4": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
6505
+ "196:5": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
6506
+ "196:6": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
6507
+ "196:7": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
6508
+ "196:8": "minecraft:acacia_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
6509
+ "196:9": "minecraft:acacia_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
6510
+ "196:10": "minecraft:acacia_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
6511
+ "196:11": "minecraft:acacia_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
6512
+ "197:0": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
6513
+ "197:1": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
6514
+ "197:2": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
6515
+ "197:3": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
6516
+ "197:4": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
6517
+ "197:5": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
6518
+ "197:6": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
6519
+ "197:7": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
6520
+ "197:8": "minecraft:dark_oak_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
6521
+ "197:9": "minecraft:dark_oak_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
6522
+ "197:10": "minecraft:dark_oak_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
6523
+ "197:11": "minecraft:dark_oak_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
6524
+ "198:0": "minecraft:end_rod[facing=down]",
6525
+ "198:1": "minecraft:end_rod[facing=up]",
6526
+ "198:2": "minecraft:end_rod[facing=north]",
6527
+ "198:3": "minecraft:end_rod[facing=south]",
6528
+ "198:4": "minecraft:end_rod[facing=west]",
6529
+ "198:5": "minecraft:end_rod[facing=east]",
6530
+ "199:0": "minecraft:chorus_plant[east=false,south=false,north=false,west=false,up=false,down=false]",
6531
+ "200:0": "minecraft:chorus_flower[age=0]",
6532
+ "200:1": "minecraft:chorus_flower[age=1]",
6533
+ "200:2": "minecraft:chorus_flower[age=2]",
6534
+ "200:3": "minecraft:chorus_flower[age=3]",
6535
+ "200:4": "minecraft:chorus_flower[age=4]",
6536
+ "200:5": "minecraft:chorus_flower[age=5]",
6537
+ "201:0": "minecraft:purpur_block",
6538
+ "202:0": "minecraft:purpur_pillar[axis=y]",
6539
+ "202:4": "minecraft:purpur_pillar[axis=x]",
6540
+ "202:8": "minecraft:purpur_pillar[axis=z]",
6541
+ "203:0": "minecraft:purpur_stairs[half=bottom,shape=outer_right,facing=east]",
6542
+ "203:1": "minecraft:purpur_stairs[half=bottom,shape=outer_right,facing=west]",
6543
+ "203:2": "minecraft:purpur_stairs[half=bottom,shape=outer_right,facing=south]",
6544
+ "203:3": "minecraft:purpur_stairs[half=bottom,shape=outer_right,facing=north]",
6545
+ "203:4": "minecraft:purpur_stairs[half=top,shape=outer_right,facing=east]",
6546
+ "203:5": "minecraft:purpur_stairs[half=top,shape=outer_right,facing=west]",
6547
+ "203:6": "minecraft:purpur_stairs[half=top,shape=outer_right,facing=south]",
6548
+ "203:7": "minecraft:purpur_stairs[half=top,shape=outer_right,facing=north]",
6549
+ "204:0": "minecraft:purpur_slab[type=double]",
6550
+ "205:0": "minecraft:purpur_slab[type=bottom]",
6551
+ "205:8": "minecraft:purpur_slab[type=top]",
6552
+ "206:0": "minecraft:end_stone_bricks",
6553
+ "207:0": "minecraft:beetroots[age=0]",
6554
+ "207:1": "minecraft:beetroots[age=1]",
6555
+ "207:2": "minecraft:beetroots[age=2]",
6556
+ "207:3": "minecraft:beetroots[age=3]",
6557
+ "208:0": "minecraft:dirt_path",
6558
+ "209:0": "minecraft:end_gateway",
6559
+ "210:0": "minecraft:repeating_command_block[conditional=false,facing=down]",
6560
+ "210:1": "minecraft:repeating_command_block[conditional=false,facing=up]",
6561
+ "210:2": "minecraft:repeating_command_block[conditional=false,facing=north]",
6562
+ "210:3": "minecraft:repeating_command_block[conditional=false,facing=south]",
6563
+ "210:4": "minecraft:repeating_command_block[conditional=false,facing=west]",
6564
+ "210:5": "minecraft:repeating_command_block[conditional=false,facing=east]",
6565
+ "210:8": "minecraft:repeating_command_block[conditional=true,facing=down]",
6566
+ "210:9": "minecraft:repeating_command_block[conditional=true,facing=up]",
6567
+ "210:10": "minecraft:repeating_command_block[conditional=true,facing=north]",
6568
+ "210:11": "minecraft:repeating_command_block[conditional=true,facing=south]",
6569
+ "210:12": "minecraft:repeating_command_block[conditional=true,facing=west]",
6570
+ "210:13": "minecraft:repeating_command_block[conditional=true,facing=east]",
6571
+ "211:0": "minecraft:chain_command_block[conditional=false,facing=down]",
6572
+ "211:1": "minecraft:chain_command_block[conditional=false,facing=up]",
6573
+ "211:2": "minecraft:chain_command_block[conditional=false,facing=north]",
6574
+ "211:3": "minecraft:chain_command_block[conditional=false,facing=south]",
6575
+ "211:4": "minecraft:chain_command_block[conditional=false,facing=west]",
6576
+ "211:5": "minecraft:chain_command_block[conditional=false,facing=east]",
6577
+ "211:8": "minecraft:chain_command_block[conditional=true,facing=down]",
6578
+ "211:9": "minecraft:chain_command_block[conditional=true,facing=up]",
6579
+ "211:10": "minecraft:chain_command_block[conditional=true,facing=north]",
6580
+ "211:11": "minecraft:chain_command_block[conditional=true,facing=south]",
6581
+ "211:12": "minecraft:chain_command_block[conditional=true,facing=west]",
6582
+ "211:13": "minecraft:chain_command_block[conditional=true,facing=east]",
6583
+ "212:0": "minecraft:frosted_ice[age=0]",
6584
+ "212:1": "minecraft:frosted_ice[age=1]",
6585
+ "212:2": "minecraft:frosted_ice[age=2]",
6586
+ "212:3": "minecraft:frosted_ice[age=3]",
6587
+ "213:0": "minecraft:magma_block",
6588
+ "214:0": "minecraft:nether_wart_block",
6589
+ "215:0": "minecraft:red_nether_bricks",
6590
+ "216:0": "minecraft:bone_block[axis=y]",
6591
+ "216:4": "minecraft:bone_block[axis=x]",
6592
+ "216:8": "minecraft:bone_block[axis=z]",
6593
+ "217:0": "minecraft:structure_void",
6594
+ "218:0": "minecraft:observer[powered=false,facing=down]",
6595
+ "218:1": "minecraft:observer[powered=false,facing=up]",
6596
+ "218:2": "minecraft:observer[powered=false,facing=north]",
6597
+ "218:3": "minecraft:observer[powered=false,facing=south]",
6598
+ "218:4": "minecraft:observer[powered=false,facing=west]",
6599
+ "218:5": "minecraft:observer[powered=false,facing=east]",
6600
+ "218:8": "minecraft:observer[powered=true,facing=down]",
6601
+ "218:9": "minecraft:observer[powered=true,facing=up]",
6602
+ "218:10": "minecraft:observer[powered=true,facing=north]",
6603
+ "218:11": "minecraft:observer[powered=true,facing=south]",
6604
+ "218:12": "minecraft:observer[powered=true,facing=west]",
6605
+ "218:13": "minecraft:observer[powered=true,facing=east]",
6606
+ "219:0": "minecraft:white_shulker_box[facing=down]",
6607
+ "219:1": "minecraft:white_shulker_box[facing=up]",
6608
+ "219:2": "minecraft:white_shulker_box[facing=north]",
6609
+ "219:3": "minecraft:white_shulker_box[facing=south]",
6610
+ "219:4": "minecraft:white_shulker_box[facing=west]",
6611
+ "219:5": "minecraft:white_shulker_box[facing=east]",
6612
+ "220:0": "minecraft:orange_shulker_box[facing=down]",
6613
+ "220:1": "minecraft:orange_shulker_box[facing=up]",
6614
+ "220:2": "minecraft:orange_shulker_box[facing=north]",
6615
+ "220:3": "minecraft:orange_shulker_box[facing=south]",
6616
+ "220:4": "minecraft:orange_shulker_box[facing=west]",
6617
+ "220:5": "minecraft:orange_shulker_box[facing=east]",
6618
+ "221:0": "minecraft:magenta_shulker_box[facing=down]",
6619
+ "221:1": "minecraft:magenta_shulker_box[facing=up]",
6620
+ "221:2": "minecraft:magenta_shulker_box[facing=north]",
6621
+ "221:3": "minecraft:magenta_shulker_box[facing=south]",
6622
+ "221:4": "minecraft:magenta_shulker_box[facing=west]",
6623
+ "221:5": "minecraft:magenta_shulker_box[facing=east]",
6624
+ "222:0": "minecraft:light_blue_shulker_box[facing=down]",
6625
+ "222:1": "minecraft:light_blue_shulker_box[facing=up]",
6626
+ "222:2": "minecraft:light_blue_shulker_box[facing=north]",
6627
+ "222:3": "minecraft:light_blue_shulker_box[facing=south]",
6628
+ "222:4": "minecraft:light_blue_shulker_box[facing=west]",
6629
+ "222:5": "minecraft:light_blue_shulker_box[facing=east]",
6630
+ "223:0": "minecraft:yellow_shulker_box[facing=down]",
6631
+ "223:1": "minecraft:yellow_shulker_box[facing=up]",
6632
+ "223:2": "minecraft:yellow_shulker_box[facing=north]",
6633
+ "223:3": "minecraft:yellow_shulker_box[facing=south]",
6634
+ "223:4": "minecraft:yellow_shulker_box[facing=west]",
6635
+ "223:5": "minecraft:yellow_shulker_box[facing=east]",
6636
+ "224:0": "minecraft:lime_shulker_box[facing=down]",
6637
+ "224:1": "minecraft:lime_shulker_box[facing=up]",
6638
+ "224:2": "minecraft:lime_shulker_box[facing=north]",
6639
+ "224:3": "minecraft:lime_shulker_box[facing=south]",
6640
+ "224:4": "minecraft:lime_shulker_box[facing=west]",
6641
+ "224:5": "minecraft:lime_shulker_box[facing=east]",
6642
+ "225:0": "minecraft:pink_shulker_box[facing=down]",
6643
+ "225:1": "minecraft:pink_shulker_box[facing=up]",
6644
+ "225:2": "minecraft:pink_shulker_box[facing=north]",
6645
+ "225:3": "minecraft:pink_shulker_box[facing=south]",
6646
+ "225:4": "minecraft:pink_shulker_box[facing=west]",
6647
+ "225:5": "minecraft:pink_shulker_box[facing=east]",
6648
+ "226:0": "minecraft:gray_shulker_box[facing=down]",
6649
+ "226:1": "minecraft:gray_shulker_box[facing=up]",
6650
+ "226:2": "minecraft:gray_shulker_box[facing=north]",
6651
+ "226:3": "minecraft:gray_shulker_box[facing=south]",
6652
+ "226:4": "minecraft:gray_shulker_box[facing=west]",
6653
+ "226:5": "minecraft:gray_shulker_box[facing=east]",
6654
+ "227:0": "minecraft:light_gray_shulker_box[facing=down]",
6655
+ "227:1": "minecraft:light_gray_shulker_box[facing=up]",
6656
+ "227:2": "minecraft:light_gray_shulker_box[facing=north]",
6657
+ "227:3": "minecraft:light_gray_shulker_box[facing=south]",
6658
+ "227:4": "minecraft:light_gray_shulker_box[facing=west]",
6659
+ "227:5": "minecraft:light_gray_shulker_box[facing=east]",
6660
+ "228:0": "minecraft:cyan_shulker_box[facing=down]",
6661
+ "228:1": "minecraft:cyan_shulker_box[facing=up]",
6662
+ "228:2": "minecraft:cyan_shulker_box[facing=north]",
6663
+ "228:3": "minecraft:cyan_shulker_box[facing=south]",
6664
+ "228:4": "minecraft:cyan_shulker_box[facing=west]",
6665
+ "228:5": "minecraft:cyan_shulker_box[facing=east]",
6666
+ "229:0": "minecraft:purple_shulker_box[facing=down]",
6667
+ "229:1": "minecraft:purple_shulker_box[facing=up]",
6668
+ "229:2": "minecraft:purple_shulker_box[facing=north]",
6669
+ "229:3": "minecraft:purple_shulker_box[facing=south]",
6670
+ "229:4": "minecraft:purple_shulker_box[facing=west]",
6671
+ "229:5": "minecraft:purple_shulker_box[facing=east]",
6672
+ "230:0": "minecraft:blue_shulker_box[facing=down]",
6673
+ "230:1": "minecraft:blue_shulker_box[facing=up]",
6674
+ "230:2": "minecraft:blue_shulker_box[facing=north]",
6675
+ "230:3": "minecraft:blue_shulker_box[facing=south]",
6676
+ "230:4": "minecraft:blue_shulker_box[facing=west]",
6677
+ "230:5": "minecraft:blue_shulker_box[facing=east]",
6678
+ "231:0": "minecraft:brown_shulker_box[facing=down]",
6679
+ "231:1": "minecraft:brown_shulker_box[facing=up]",
6680
+ "231:2": "minecraft:brown_shulker_box[facing=north]",
6681
+ "231:3": "minecraft:brown_shulker_box[facing=south]",
6682
+ "231:4": "minecraft:brown_shulker_box[facing=west]",
6683
+ "231:5": "minecraft:brown_shulker_box[facing=east]",
6684
+ "232:0": "minecraft:green_shulker_box[facing=down]",
6685
+ "232:1": "minecraft:green_shulker_box[facing=up]",
6686
+ "232:2": "minecraft:green_shulker_box[facing=north]",
6687
+ "232:3": "minecraft:green_shulker_box[facing=south]",
6688
+ "232:4": "minecraft:green_shulker_box[facing=west]",
6689
+ "232:5": "minecraft:green_shulker_box[facing=east]",
6690
+ "233:0": "minecraft:red_shulker_box[facing=down]",
6691
+ "233:1": "minecraft:red_shulker_box[facing=up]",
6692
+ "233:2": "minecraft:red_shulker_box[facing=north]",
6693
+ "233:3": "minecraft:red_shulker_box[facing=south]",
6694
+ "233:4": "minecraft:red_shulker_box[facing=west]",
6695
+ "233:5": "minecraft:red_shulker_box[facing=east]",
6696
+ "234:0": "minecraft:black_shulker_box[facing=down]",
6697
+ "234:1": "minecraft:black_shulker_box[facing=up]",
6698
+ "234:2": "minecraft:black_shulker_box[facing=north]",
6699
+ "234:3": "minecraft:black_shulker_box[facing=south]",
6700
+ "234:4": "minecraft:black_shulker_box[facing=west]",
6701
+ "234:5": "minecraft:black_shulker_box[facing=east]",
6702
+ "235:0": "minecraft:white_glazed_terracotta[facing=south]",
6703
+ "235:1": "minecraft:white_glazed_terracotta[facing=west]",
6704
+ "235:2": "minecraft:white_glazed_terracotta[facing=north]",
6705
+ "235:3": "minecraft:white_glazed_terracotta[facing=east]",
6706
+ "236:0": "minecraft:orange_glazed_terracotta[facing=south]",
6707
+ "236:1": "minecraft:orange_glazed_terracotta[facing=west]",
6708
+ "236:2": "minecraft:orange_glazed_terracotta[facing=north]",
6709
+ "236:3": "minecraft:orange_glazed_terracotta[facing=east]",
6710
+ "237:0": "minecraft:magenta_glazed_terracotta[facing=south]",
6711
+ "237:1": "minecraft:magenta_glazed_terracotta[facing=west]",
6712
+ "237:2": "minecraft:magenta_glazed_terracotta[facing=north]",
6713
+ "237:3": "minecraft:magenta_glazed_terracotta[facing=east]",
6714
+ "238:0": "minecraft:light_blue_glazed_terracotta[facing=south]",
6715
+ "238:1": "minecraft:light_blue_glazed_terracotta[facing=west]",
6716
+ "238:2": "minecraft:light_blue_glazed_terracotta[facing=north]",
6717
+ "238:3": "minecraft:light_blue_glazed_terracotta[facing=east]",
6718
+ "239:0": "minecraft:yellow_glazed_terracotta[facing=south]",
6719
+ "239:1": "minecraft:yellow_glazed_terracotta[facing=west]",
6720
+ "239:2": "minecraft:yellow_glazed_terracotta[facing=north]",
6721
+ "239:3": "minecraft:yellow_glazed_terracotta[facing=east]",
6722
+ "240:0": "minecraft:lime_glazed_terracotta[facing=south]",
6723
+ "240:1": "minecraft:lime_glazed_terracotta[facing=west]",
6724
+ "240:2": "minecraft:lime_glazed_terracotta[facing=north]",
6725
+ "240:3": "minecraft:lime_glazed_terracotta[facing=east]",
6726
+ "241:0": "minecraft:pink_glazed_terracotta[facing=south]",
6727
+ "241:1": "minecraft:pink_glazed_terracotta[facing=west]",
6728
+ "241:2": "minecraft:pink_glazed_terracotta[facing=north]",
6729
+ "241:3": "minecraft:pink_glazed_terracotta[facing=east]",
6730
+ "242:0": "minecraft:gray_glazed_terracotta[facing=south]",
6731
+ "242:1": "minecraft:gray_glazed_terracotta[facing=west]",
6732
+ "242:2": "minecraft:gray_glazed_terracotta[facing=north]",
6733
+ "242:3": "minecraft:gray_glazed_terracotta[facing=east]",
6734
+ "243:0": "minecraft:light_gray_glazed_terracotta[facing=south]",
6735
+ "243:1": "minecraft:light_gray_glazed_terracotta[facing=west]",
6736
+ "243:2": "minecraft:light_gray_glazed_terracotta[facing=north]",
6737
+ "243:3": "minecraft:light_gray_glazed_terracotta[facing=east]",
6738
+ "244:0": "minecraft:cyan_glazed_terracotta[facing=south]",
6739
+ "244:1": "minecraft:cyan_glazed_terracotta[facing=west]",
6740
+ "244:2": "minecraft:cyan_glazed_terracotta[facing=north]",
6741
+ "244:3": "minecraft:cyan_glazed_terracotta[facing=east]",
6742
+ "245:0": "minecraft:purple_glazed_terracotta[facing=south]",
6743
+ "245:1": "minecraft:purple_glazed_terracotta[facing=west]",
6744
+ "245:2": "minecraft:purple_glazed_terracotta[facing=north]",
6745
+ "245:3": "minecraft:purple_glazed_terracotta[facing=east]",
6746
+ "246:0": "minecraft:blue_glazed_terracotta[facing=south]",
6747
+ "246:1": "minecraft:blue_glazed_terracotta[facing=west]",
6748
+ "246:2": "minecraft:blue_glazed_terracotta[facing=north]",
6749
+ "246:3": "minecraft:blue_glazed_terracotta[facing=east]",
6750
+ "247:0": "minecraft:brown_glazed_terracotta[facing=south]",
6751
+ "247:1": "minecraft:brown_glazed_terracotta[facing=west]",
6752
+ "247:2": "minecraft:brown_glazed_terracotta[facing=north]",
6753
+ "247:3": "minecraft:brown_glazed_terracotta[facing=east]",
6754
+ "248:0": "minecraft:green_glazed_terracotta[facing=south]",
6755
+ "248:1": "minecraft:green_glazed_terracotta[facing=west]",
6756
+ "248:2": "minecraft:green_glazed_terracotta[facing=north]",
6757
+ "248:3": "minecraft:green_glazed_terracotta[facing=east]",
6758
+ "249:0": "minecraft:red_glazed_terracotta[facing=south]",
6759
+ "249:1": "minecraft:red_glazed_terracotta[facing=west]",
6760
+ "249:2": "minecraft:red_glazed_terracotta[facing=north]",
6761
+ "249:3": "minecraft:red_glazed_terracotta[facing=east]",
6762
+ "250:0": "minecraft:black_glazed_terracotta[facing=south]",
6763
+ "250:1": "minecraft:black_glazed_terracotta[facing=west]",
6764
+ "250:2": "minecraft:black_glazed_terracotta[facing=north]",
6765
+ "250:3": "minecraft:black_glazed_terracotta[facing=east]",
6766
+ "251:0": "minecraft:white_concrete",
6767
+ "251:1": "minecraft:orange_concrete",
6768
+ "251:2": "minecraft:magenta_concrete",
6769
+ "251:3": "minecraft:light_blue_concrete",
6770
+ "251:4": "minecraft:yellow_concrete",
6771
+ "251:5": "minecraft:lime_concrete",
6772
+ "251:6": "minecraft:pink_concrete",
6773
+ "251:7": "minecraft:gray_concrete",
6774
+ "251:8": "minecraft:light_gray_concrete",
6775
+ "251:9": "minecraft:cyan_concrete",
6776
+ "251:10": "minecraft:purple_concrete",
6777
+ "251:11": "minecraft:blue_concrete",
6778
+ "251:12": "minecraft:brown_concrete",
6779
+ "251:13": "minecraft:green_concrete",
6780
+ "251:14": "minecraft:red_concrete",
6781
+ "251:15": "minecraft:black_concrete",
6782
+ "252:0": "minecraft:white_concrete_powder",
6783
+ "252:1": "minecraft:orange_concrete_powder",
6784
+ "252:2": "minecraft:magenta_concrete_powder",
6785
+ "252:3": "minecraft:light_blue_concrete_powder",
6786
+ "252:4": "minecraft:yellow_concrete_powder",
6787
+ "252:5": "minecraft:lime_concrete_powder",
6788
+ "252:6": "minecraft:pink_concrete_powder",
6789
+ "252:7": "minecraft:gray_concrete_powder",
6790
+ "252:8": "minecraft:light_gray_concrete_powder",
6791
+ "252:9": "minecraft:cyan_concrete_powder",
6792
+ "252:10": "minecraft:purple_concrete_powder",
6793
+ "252:11": "minecraft:blue_concrete_powder",
6794
+ "252:12": "minecraft:brown_concrete_powder",
6795
+ "252:13": "minecraft:green_concrete_powder",
6796
+ "252:14": "minecraft:red_concrete_powder",
6797
+ "252:15": "minecraft:black_concrete_powder",
6798
+ "255:0": "minecraft:structure_block[mode=save]",
6799
+ "255:1": "minecraft:structure_block[mode=load]",
6800
+ "255:2": "minecraft:structure_block[mode=corner]",
6801
+ "255:3": "minecraft:structure_block[mode=data]"
6802
+ }
6803
+ };
6804
+
4989
6805
  // src/model/multiblock/SchematicParser.ts
4990
6806
  var SchematicParser = class {
4991
- static async parse() {
4992
- return Promise.resolve({});
6807
+ static async parse(nbt) {
6808
+ const tags = nbt.value;
6809
+ if (tags.Materials?.type !== "string" || tags.Materials.value !== "Alpha") {
6810
+ throw new MineRenderError("Schematic Materials must be Alpha");
6811
+ }
6812
+ const size = ["Width", "Height", "Length"].map((name) => {
6813
+ const tag = tags[name];
6814
+ if (tag?.type !== "short" || !Number.isInteger(tag.value) || tag.value <= 0 || tag.value > 32767) {
6815
+ throw new MineRenderError(`Schematic ${name} must be a positive short`);
6816
+ }
6817
+ return tag.value;
6818
+ });
6819
+ const [width, height, length] = size;
6820
+ const volume = width * height * length;
6821
+ const ids = tags.Blocks;
6822
+ const data = tags.Data;
6823
+ if (ids?.type !== "byteArray" || data?.type !== "byteArray" || !Array.isArray(ids.value) || !Array.isArray(data.value) || ids.value.length !== volume || data.value.length !== volume) {
6824
+ throw new MineRenderError(`Schematic Blocks and Data must contain ${volume} bytes`);
6825
+ }
6826
+ const addBlocks = tags.AddBlocks;
6827
+ if (addBlocks && (addBlocks.type !== "byteArray" || !Array.isArray(addBlocks.value))) {
6828
+ throw new MineRenderError("Schematic AddBlocks must be a byte array");
6829
+ }
6830
+ const tileEntities = /* @__PURE__ */ new Map();
6831
+ for (const tile of compoundList(tags, "TileEntities")) {
6832
+ const position = ["x", "y", "z"].map((axis, i) => {
6833
+ const coordinate = tile[axis];
6834
+ if (coordinate?.type !== "int" || !Number.isInteger(coordinate.value) || coordinate.value < 0 || coordinate.value >= size[i]) {
6835
+ throw new MineRenderError("Schematic TileEntities position is outside its dimensions");
6836
+ }
6837
+ return coordinate.value;
6838
+ });
6839
+ const [x, y, z] = position;
6840
+ tileEntities.set((y * length + z) * width + x, { type: "compound", value: tile });
6841
+ }
6842
+ const blocks = [];
6843
+ const mapping = legacyBlocks_default.blocks;
6844
+ for (let index = 0; index < volume; index++) {
6845
+ const packed = addBlocks?.value[index >> 1] ?? 0;
6846
+ const high = packed >> (index & 1) * 4 & 15;
6847
+ const id = high << 8 | ids.value[index] & 255;
6848
+ const metadata = data.value[index] & 255;
6849
+ const mapped = mapping[`${id}:${metadata}`];
6850
+ if (!mapped) throw new MineRenderError(`Unsupported legacy block ${id}:${metadata} at schematic index ${index}`);
6851
+ const [type, state] = mapped.split("[");
6852
+ if (type === "minecraft:air") continue;
6853
+ const properties = {};
6854
+ if (state) {
6855
+ for (const property of state.slice(0, -1).split(",")) {
6856
+ const [key, value] = property.split("=");
6857
+ properties[key] = value;
6858
+ }
6859
+ }
6860
+ blocks.push({
6861
+ type,
6862
+ properties,
6863
+ position: [index % width, Math.floor(index / (width * length)), Math.floor(index / width) % length],
6864
+ nbt: tileEntities.get(index)
6865
+ });
6866
+ }
6867
+ const entities = compoundList(tags, "Entities").map((entity) => {
6868
+ const pos = entity.Pos;
6869
+ if (pos?.type !== "list" || pos.value.type !== "double" || pos.value.value.length !== 3 || !pos.value.value.every(Number.isFinite)) {
6870
+ throw new MineRenderError("Schematic entity Pos must contain three doubles");
6871
+ }
6872
+ return { position: [...pos.value.value], nbt: { type: "compound", value: entity } };
6873
+ });
6874
+ const dataVersion = tags.DataVersion;
6875
+ if (dataVersion && (dataVersion.type !== "int" || !Number.isInteger(dataVersion.value))) {
6876
+ throw new MineRenderError("Schematic DataVersion must be an int");
6877
+ }
6878
+ return { size, blocks, entities, dataVersion: dataVersion?.value };
4993
6879
  }
4994
6880
  };
6881
+ function compoundList(tags, name) {
6882
+ const tag = tags[name];
6883
+ if (!tag) return [];
6884
+ if (tag.type === "list" && Array.isArray(tag.value.value)) {
6885
+ if (tag.value.value.length === 0) return [];
6886
+ if (tag.value.type === "compound") return tag.value.value;
6887
+ }
6888
+ throw new MineRenderError(`Schematic ${name} must be a compound list`);
6889
+ }
4995
6890
 
4996
6891
  // src/model/multiblock/StructureParser.ts
4997
6892
  var StructureParser = class {
@@ -5001,13 +6896,16 @@ var StructureParser = class {
5001
6896
  if ("palette" in nbt) {
5002
6897
  palette = nbt.palette;
5003
6898
  } else if ("palettes" in nbt) {
5004
- palette = nbt.palettes[paletteIndex ?? 0];
6899
+ const selected = nbt.palettes.value.value[paletteIndex ?? 0];
6900
+ if (!selected) throw new MineRenderError(`Structure palette ${paletteIndex ?? 0} does not exist`);
6901
+ palette = { type: "list", value: selected };
5005
6902
  } else {
5006
6903
  throw new MineRenderError("Structure does not have palette(s)");
5007
6904
  }
5008
6905
  const blocks = nbt.blocks.value.value.map((block) => {
5009
6906
  const state = palette.value.value[block.state.value];
5010
- if (state.Name.value === "minecraft:air") return void 0;
6907
+ if (!state) throw new MineRenderError(`Structure palette index ${block.state.value} does not exist`);
6908
+ if (["minecraft:air", "minecraft:cave_air", "minecraft:void_air"].includes(state.Name.value)) return void 0;
5011
6909
  const props = {};
5012
6910
  for (let k in state.Properties?.value) {
5013
6911
  props[k] = state.Properties.value[k].value;
@@ -5021,13 +6919,19 @@ var StructureParser = class {
5021
6919
  }).filter((m) => typeof m !== "undefined");
5022
6920
  return {
5023
6921
  blocks,
5024
- size: nbt.size.value.value
6922
+ size: nbt.size.value.value,
6923
+ dataVersion: nbt.DataVersion?.value,
6924
+ entities: (nbt.entities?.value.value ?? []).map((entity) => ({
6925
+ position: entity.pos.value.value,
6926
+ blockPosition: entity.blockPos.value.value,
6927
+ nbt: entity.nbt
6928
+ }))
5025
6929
  };
5026
6930
  }
5027
6931
  };
5028
6932
 
5029
6933
  // src/renderer/MineRenderScene.ts
5030
- var import_three20 = require("three");
6934
+ var import_three21 = require("three");
5031
6935
  var import_ts_deepmerge8 = __toESM(require_dist());
5032
6936
 
5033
6937
  // src/skin/SkinPart.ts
@@ -5752,7 +7656,7 @@ var slimSkinGeometries = {
5752
7656
  var import_ts_deepmerge7 = __toESM(require_dist());
5753
7657
 
5754
7658
  // src/skin/SkinTextures.ts
5755
- var import_three19 = require("three");
7659
+ var import_three20 = require("three");
5756
7660
 
5757
7661
  // src/skin/SkinImage.ts
5758
7662
  var SkinImage = class {
@@ -5829,11 +7733,11 @@ var SkinTextures = class {
5829
7733
  });
5830
7734
  }
5831
7735
  static createMaterial(pixels, width, height, transparent = true) {
5832
- const texture = Textures.initTextureProps(new import_three19.DataTexture(pixels, width, height));
5833
- texture.colorSpace = import_three19.SRGBColorSpace;
7736
+ const texture = Textures.initTextureProps(new import_three20.DataTexture(pixels, width, height));
7737
+ texture.colorSpace = import_three20.SRGBColorSpace;
5834
7738
  texture.flipY = true;
5835
7739
  texture.needsUpdate = true;
5836
- return new import_three19.MeshBasicMaterial({ map: texture, transparent, side: transparent ? import_three19.DoubleSide : import_three19.FrontSide, alphaTest: transparent ? 0.1 : 0 });
7740
+ return new import_three20.MeshBasicMaterial({ map: texture, transparent, side: transparent ? import_three20.DoubleSide : import_three20.FrontSide, alphaTest: transparent ? 0.1 : 0 });
5837
7741
  }
5838
7742
  static isSlim(image, scale) {
5839
7743
  for (const [x, y] of [[46, 52], [54, 20]]) {
@@ -6060,7 +7964,7 @@ var SkinObject = class extends SceneObject {
6060
7964
  };
6061
7965
 
6062
7966
  // src/renderer/MineRenderScene.ts
6063
- var _MineRenderScene = class _MineRenderScene extends import_three20.Scene {
7967
+ var _MineRenderScene = class _MineRenderScene extends import_three21.Scene {
6064
7968
  constructor(options) {
6065
7969
  super();
6066
7970
  this.isMineRenderScene = true;
@@ -6133,11 +8037,12 @@ var _MineRenderScene = class _MineRenderScene extends import_three20.Scene {
6133
8037
  console.log("instanceMeshes + key");
6134
8038
  let key = asset.key.serialize();
6135
8039
  if (isModelObject(obj)) {
6136
- const { displayPosition, uvLockRotation, tints } = obj.options;
8040
+ const { displayPosition, uvLockRotation, tints, cullMask } = obj.options;
6137
8041
  if (displayPosition) key += `|display:${displayPosition}`;
6138
8042
  if (uvLockRotation) key += `|uvlock:${uvLockRotation.join(",")}`;
6139
8043
  const palette = Object.entries(tints ?? {}).sort(([a], [b]) => Number(a) - Number(b));
6140
8044
  if (palette.length) key += `|tints:${JSON.stringify(palette)}`;
8045
+ if (cullMask) key += `|cull:${cullMask}`;
6141
8046
  }
6142
8047
  return this.instanceManager.getOrCreate(key, async () => {
6143
8048
  obj.scene = this;
@@ -6183,17 +8088,17 @@ function isMineRenderScene(obj) {
6183
8088
  }
6184
8089
 
6185
8090
  // src/renderer/Renderer.ts
6186
- var import_three22 = require("three");
8091
+ var import_three23 = require("three");
6187
8092
  var import_ts_deepmerge9 = __toESM(require_dist());
6188
8093
  var import_stats = __toESM(require("stats.js"));
6189
8094
  var import_postprocessing = require("postprocessing");
6190
8095
 
6191
8096
  // src/three/OrbitControls.js
6192
- var import_three21 = require("three");
8097
+ var import_three22 = require("three");
6193
8098
  var _changeEvent = { type: "change" };
6194
8099
  var _startEvent = { type: "start" };
6195
8100
  var _endEvent = { type: "end" };
6196
- var OrbitControls = class extends import_three21.EventDispatcher {
8101
+ var OrbitControls = class extends import_three22.EventDispatcher {
6197
8102
  constructor(object, domElement) {
6198
8103
  super();
6199
8104
  if (domElement === void 0) console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.');
@@ -6202,7 +8107,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6202
8107
  this.domElement = domElement;
6203
8108
  this.domElement.style.touchAction = "none";
6204
8109
  this.enabled = true;
6205
- this.target = new import_three21.Vector3();
8110
+ this.target = new import_three22.Vector3();
6206
8111
  this.minDistance = 0;
6207
8112
  this.maxDistance = Infinity;
6208
8113
  this.minZoom = 0;
@@ -6224,8 +8129,8 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6224
8129
  this.autoRotate = false;
6225
8130
  this.autoRotateSpeed = 2;
6226
8131
  this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" };
6227
- this.mouseButtons = { LEFT: import_three21.MOUSE.ROTATE, MIDDLE: import_three21.MOUSE.DOLLY, RIGHT: import_three21.MOUSE.PAN };
6228
- this.touches = { ONE: import_three21.TOUCH.ROTATE, TWO: import_three21.TOUCH.DOLLY_PAN };
8132
+ this.mouseButtons = { LEFT: import_three22.MOUSE.ROTATE, MIDDLE: import_three22.MOUSE.DOLLY, RIGHT: import_three22.MOUSE.PAN };
8133
+ this.touches = { ONE: import_three22.TOUCH.ROTATE, TWO: import_three22.TOUCH.DOLLY_PAN };
6229
8134
  this.target0 = this.target.clone();
6230
8135
  this.position0 = this.object.position.clone();
6231
8136
  this.zoom0 = this.object.zoom;
@@ -6254,11 +8159,11 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6254
8159
  state = STATE.NONE;
6255
8160
  };
6256
8161
  this.update = function() {
6257
- const offset = new import_three21.Vector3();
6258
- const quat = new import_three21.Quaternion().setFromUnitVectors(object.up, new import_three21.Vector3(0, 1, 0));
8162
+ const offset = new import_three22.Vector3();
8163
+ const quat = new import_three22.Quaternion().setFromUnitVectors(object.up, new import_three22.Vector3(0, 1, 0));
6259
8164
  const quatInverse = quat.clone().invert();
6260
- const lastPosition = new import_three21.Vector3();
6261
- const lastQuaternion = new import_three21.Quaternion();
8165
+ const lastPosition = new import_three22.Vector3();
8166
+ const lastQuaternion = new import_three22.Quaternion();
6262
8167
  const twoPI = 2 * Math.PI;
6263
8168
  return function update() {
6264
8169
  const position = scope.object.position;
@@ -6344,20 +8249,20 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6344
8249
  };
6345
8250
  let state = STATE.NONE;
6346
8251
  const EPS = 1e-6;
6347
- const spherical = new import_three21.Spherical();
6348
- const sphericalDelta = new import_three21.Spherical();
8252
+ const spherical = new import_three22.Spherical();
8253
+ const sphericalDelta = new import_three22.Spherical();
6349
8254
  let scale = 1;
6350
- const panOffset = new import_three21.Vector3();
8255
+ const panOffset = new import_three22.Vector3();
6351
8256
  let zoomChanged = false;
6352
- const rotateStart = new import_three21.Vector2();
6353
- const rotateEnd = new import_three21.Vector2();
6354
- const rotateDelta = new import_three21.Vector2();
6355
- const panStart = new import_three21.Vector2();
6356
- const panEnd = new import_three21.Vector2();
6357
- const panDelta = new import_three21.Vector2();
6358
- const dollyStart = new import_three21.Vector2();
6359
- const dollyEnd = new import_three21.Vector2();
6360
- const dollyDelta = new import_three21.Vector2();
8257
+ const rotateStart = new import_three22.Vector2();
8258
+ const rotateEnd = new import_three22.Vector2();
8259
+ const rotateDelta = new import_three22.Vector2();
8260
+ const panStart = new import_three22.Vector2();
8261
+ const panEnd = new import_three22.Vector2();
8262
+ const panDelta = new import_three22.Vector2();
8263
+ const dollyStart = new import_three22.Vector2();
8264
+ const dollyEnd = new import_three22.Vector2();
8265
+ const dollyDelta = new import_three22.Vector2();
6361
8266
  const pointers = [];
6362
8267
  const pointerPositions = {};
6363
8268
  function getAutoRotationAngle() {
@@ -6373,7 +8278,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6373
8278
  sphericalDelta.phi -= angle;
6374
8279
  }
6375
8280
  const panLeft = function() {
6376
- const v = new import_three21.Vector3();
8281
+ const v = new import_three22.Vector3();
6377
8282
  return function panLeft2(distance, objectMatrix) {
6378
8283
  v.setFromMatrixColumn(objectMatrix, 0);
6379
8284
  v.multiplyScalar(-distance);
@@ -6381,7 +8286,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6381
8286
  };
6382
8287
  }();
6383
8288
  const panUp = function() {
6384
- const v = new import_three21.Vector3();
8289
+ const v = new import_three22.Vector3();
6385
8290
  return function panUp2(distance, objectMatrix) {
6386
8291
  if (scope.screenSpacePanning === true) {
6387
8292
  v.setFromMatrixColumn(objectMatrix, 1);
@@ -6394,7 +8299,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6394
8299
  };
6395
8300
  }();
6396
8301
  const pan = function() {
6397
- const offset = new import_three21.Vector3();
8302
+ const offset = new import_three22.Vector3();
6398
8303
  return function pan2(deltaX, deltaY) {
6399
8304
  const element = scope.domElement;
6400
8305
  if (scope.object.isPerspectiveCamera) {
@@ -6643,12 +8548,12 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6643
8548
  mouseAction = -1;
6644
8549
  }
6645
8550
  switch (mouseAction) {
6646
- case import_three21.MOUSE.DOLLY:
8551
+ case import_three22.MOUSE.DOLLY:
6647
8552
  if (scope.enableZoom === false) return;
6648
8553
  handleMouseDownDolly(event);
6649
8554
  state = STATE.DOLLY;
6650
8555
  break;
6651
- case import_three21.MOUSE.ROTATE:
8556
+ case import_three22.MOUSE.ROTATE:
6652
8557
  if (event.ctrlKey || event.metaKey || event.shiftKey) {
6653
8558
  if (scope.enablePan === false) return;
6654
8559
  handleMouseDownPan(event);
@@ -6659,7 +8564,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6659
8564
  state = STATE.ROTATE;
6660
8565
  }
6661
8566
  break;
6662
- case import_three21.MOUSE.PAN:
8567
+ case import_three22.MOUSE.PAN:
6663
8568
  if (event.ctrlKey || event.metaKey || event.shiftKey) {
6664
8569
  if (scope.enableRotate === false) return;
6665
8570
  handleMouseDownRotate(event);
@@ -6715,12 +8620,12 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6715
8620
  switch (pointers.length) {
6716
8621
  case 1:
6717
8622
  switch (scope.touches.ONE) {
6718
- case import_three21.TOUCH.ROTATE:
8623
+ case import_three22.TOUCH.ROTATE:
6719
8624
  if (scope.enableRotate === false) return;
6720
8625
  handleTouchStartRotate();
6721
8626
  state = STATE.TOUCH_ROTATE;
6722
8627
  break;
6723
- case import_three21.TOUCH.PAN:
8628
+ case import_three22.TOUCH.PAN:
6724
8629
  if (scope.enablePan === false) return;
6725
8630
  handleTouchStartPan();
6726
8631
  state = STATE.TOUCH_PAN;
@@ -6731,12 +8636,12 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6731
8636
  break;
6732
8637
  case 2:
6733
8638
  switch (scope.touches.TWO) {
6734
- case import_three21.TOUCH.DOLLY_PAN:
8639
+ case import_three22.TOUCH.DOLLY_PAN:
6735
8640
  if (scope.enableZoom === false && scope.enablePan === false) return;
6736
8641
  handleTouchStartDollyPan();
6737
8642
  state = STATE.TOUCH_DOLLY_PAN;
6738
8643
  break;
6739
- case import_three21.TOUCH.DOLLY_ROTATE:
8644
+ case import_three22.TOUCH.DOLLY_ROTATE:
6740
8645
  if (scope.enableZoom === false && scope.enableRotate === false) return;
6741
8646
  handleTouchStartDollyRotate();
6742
8647
  state = STATE.TOUCH_DOLLY_ROTATE;
@@ -6803,7 +8708,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6803
8708
  function trackPointer(event) {
6804
8709
  let position = pointerPositions[event.pointerId];
6805
8710
  if (position === void 0) {
6806
- position = new import_three21.Vector2();
8711
+ position = new import_three22.Vector2();
6807
8712
  pointerPositions[event.pointerId] = position;
6808
8713
  }
6809
8714
  position.set(event.pageX, event.pageY);
@@ -6823,10 +8728,10 @@ var MapControls = class extends OrbitControls {
6823
8728
  constructor(object, domElement) {
6824
8729
  super(object, domElement);
6825
8730
  this.screenSpacePanning = false;
6826
- this.mouseButtons.LEFT = import_three21.MOUSE.PAN;
6827
- this.mouseButtons.RIGHT = import_three21.MOUSE.ROTATE;
6828
- this.touches.ONE = import_three21.TOUCH.PAN;
6829
- this.touches.TWO = import_three21.TOUCH.DOLLY_ROTATE;
8731
+ this.mouseButtons.LEFT = import_three22.MOUSE.PAN;
8732
+ this.mouseButtons.RIGHT = import_three22.MOUSE.ROTATE;
8733
+ this.touches.ONE = import_three22.TOUCH.PAN;
8734
+ this.touches.TWO = import_three22.TOUCH.DOLLY_ROTATE;
6830
8735
  }
6831
8736
  };
6832
8737
 
@@ -6863,14 +8768,14 @@ var _Renderer = class _Renderer {
6863
8768
  switch (this.options.camera.type) {
6864
8769
  case "perspective":
6865
8770
  default:
6866
- return new import_three22.PerspectiveCamera(
8771
+ return new import_three23.PerspectiveCamera(
6867
8772
  this.options.camera.perspective.fov,
6868
8773
  this.options.camera.perspective.aspect ?? this.viewWidth / this.viewHeight,
6869
8774
  this.options.camera.near,
6870
8775
  this.options.camera.far
6871
8776
  );
6872
8777
  case "orthographic":
6873
- return new import_three22.OrthographicCamera(
8778
+ return new import_three23.OrthographicCamera(
6874
8779
  this.options.camera.orthographic.left ?? this.viewWidth / -2,
6875
8780
  this.options.camera.orthographic.right ?? this.viewWidth / 2,
6876
8781
  this.options.camera.orthographic.top ?? this.viewHeight / 2,
@@ -6881,7 +8786,7 @@ var _Renderer = class _Renderer {
6881
8786
  }
6882
8787
  }
6883
8788
  createRenderer() {
6884
- const renderer = new import_three22.WebGLRenderer({
8789
+ const renderer = new import_three23.WebGLRenderer({
6885
8790
  antialias: this.options.render.antialias,
6886
8791
  alpha: true,
6887
8792
  powerPreference: "high-performance",
@@ -6889,8 +8794,8 @@ var _Renderer = class _Renderer {
6889
8794
  });
6890
8795
  renderer.setClearColor(0, 0);
6891
8796
  renderer.shadowMap.enabled = true;
6892
- renderer.shadowMap.type = import_three22.PCFSoftShadowMap;
6893
- renderer.outputColorSpace = import_three22.SRGBColorSpace;
8797
+ renderer.shadowMap.type = import_three23.PCFSoftShadowMap;
8798
+ renderer.outputColorSpace = import_three23.SRGBColorSpace;
6894
8799
  renderer.setSize(this.viewWidth, this.viewHeight);
6895
8800
  return renderer;
6896
8801
  }
@@ -6924,20 +8829,20 @@ var _Renderer = class _Renderer {
6924
8829
  window["__THREE_DEVTOOLS__"].dispatchEvent(new CustomEvent("observe", { detail: this.scene }));
6925
8830
  }
6926
8831
  if (this.options.debug.grid) {
6927
- const gridHelper = new import_three22.GridHelper(128, 16);
8832
+ const gridHelper = new import_three23.GridHelper(128, 16);
6928
8833
  this._debugHelpers.push(gridHelper);
6929
8834
  this.scene.add(gridHelper);
6930
- const gridHelper2 = new import_three22.GridHelper(128, 16);
8835
+ const gridHelper2 = new import_three23.GridHelper(128, 16);
6931
8836
  this._debugHelpers.push(gridHelper2);
6932
8837
  gridHelper2.rotation.x = 90 * (Math.PI / 180);
6933
8838
  this.scene.add(gridHelper2);
6934
- const gridHelper3 = new import_three22.GridHelper(128, 16);
8839
+ const gridHelper3 = new import_three23.GridHelper(128, 16);
6935
8840
  this._debugHelpers.push(gridHelper3);
6936
8841
  gridHelper3.rotation.z = 90 * (Math.PI / 180);
6937
8842
  this.scene.add(gridHelper3);
6938
8843
  }
6939
8844
  if (this.options.debug.axes) {
6940
- const axesHelper = new import_three22.AxesHelper(64);
8845
+ const axesHelper = new import_three23.AxesHelper(64);
6941
8846
  this._debugHelpers.push(axesHelper);
6942
8847
  this.scene.add(axesHelper);
6943
8848
  }
@@ -7141,8 +9046,8 @@ _Renderer.DEFAULT_OPTIONS = (0, import_ts_deepmerge9.default)({}, {
7141
9046
  top: void 0,
7142
9047
  bottom: void 0
7143
9048
  },
7144
- position: new import_three22.Vector3(50, 50, 50),
7145
- lookingAt: new import_three22.Vector3(0, 0, 0)
9049
+ position: new import_three23.Vector3(50, 50, 50),
9050
+ lookingAt: new import_three23.Vector3(0, 0, 0)
7146
9051
  },
7147
9052
  render: {
7148
9053
  fpsLimit: 60,
@@ -7329,9 +9234,6 @@ var Skins = class {
7329
9234
  //</editor-fold>
7330
9235
  };
7331
9236
 
7332
- // src/world/Chunk.ts
7333
- var import_three25 = require("three");
7334
-
7335
9237
  // src/world/ChunkData.ts
7336
9238
  var ChunkData = class _ChunkData {
7337
9239
  constructor() {
@@ -7413,29 +9315,204 @@ var ChunkData = class _ChunkData {
7413
9315
  }
7414
9316
  };
7415
9317
 
9318
+ // src/world/AnvilParser.ts
9319
+ var AnvilParser = class {
9320
+ static getChunkList(data) {
9321
+ return this.locations(this.bytes(data)).map(({ x, z }) => ({ x, z }));
9322
+ }
9323
+ static async parse(data) {
9324
+ const bytes = this.bytes(data);
9325
+ const chunks = [];
9326
+ for (const location of this.locations(bytes)) chunks.push(await this.readChunk(bytes, location));
9327
+ return { chunks };
9328
+ }
9329
+ static async parseChunk(data, localX, localZ) {
9330
+ if (![localX, localZ].every((value) => Number.isInteger(value) && value >= 0 && value < 32)) {
9331
+ throw new RangeError("Region-local chunk coordinates must be integers from 0 to 31");
9332
+ }
9333
+ const bytes = this.bytes(data);
9334
+ const location = this.locations(bytes).find(({ x, z }) => x === localX && z === localZ);
9335
+ return location ? this.readChunk(bytes, location) : void 0;
9336
+ }
9337
+ static bytes(data) {
9338
+ return data instanceof Uint8Array ? data : new Uint8Array(data);
9339
+ }
9340
+ static locations(data) {
9341
+ if (data.byteLength < 8192) throw new MineRenderError("Anvil region header is truncated");
9342
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
9343
+ const locations = [];
9344
+ for (let index = 0; index < 1024; index++) {
9345
+ const entry = view.getUint32(index * 4);
9346
+ if (entry === 0) continue;
9347
+ const sector = entry >>> 8;
9348
+ const count = entry & 255;
9349
+ if (sector < 2 || count === 0 || (sector + count) * 4096 > data.byteLength) {
9350
+ throw new MineRenderError(`Invalid Anvil sector allocation at chunk ${index % 32},${Math.floor(index / 32)}`);
9351
+ }
9352
+ const offset = sector * 4096;
9353
+ const length = view.getUint32(offset);
9354
+ if (length < 1 || length + 4 > count * 4096) {
9355
+ throw new MineRenderError(`Invalid Anvil chunk payload length at sector ${sector}`);
9356
+ }
9357
+ locations.push({ x: index % 32, z: Math.floor(index / 32), offset, length });
9358
+ }
9359
+ return locations;
9360
+ }
9361
+ static async readChunk(data, location) {
9362
+ const compression = data[location.offset + 4];
9363
+ if (compression & 128) throw new MineRenderError("External Anvil .mcc chunks are not supported");
9364
+ if (compression !== 1 && compression !== 2 && compression !== 3) {
9365
+ throw new MineRenderError(`Unsupported Anvil compression ${compression}${compression === 4 ? " (LZ4)" : ""}`);
9366
+ }
9367
+ let payload = data.subarray(location.offset + 5, location.offset + 4 + location.length);
9368
+ if (compression !== 3) {
9369
+ const stream = new Blob([payload]).stream().pipeThrough(new DecompressionStream(compression === 1 ? "gzip" : "deflate"));
9370
+ payload = new Uint8Array(await new Response(stream).arrayBuffer());
9371
+ }
9372
+ const nbt = await NBTHelper.fromBuffer(payload, "big");
9373
+ const root = nbt.value;
9374
+ const level = root.Level?.type === "compound" ? root.Level.value : root;
9375
+ const dataVersion = root.DataVersion?.type === "int" ? root.DataVersion.value : void 0;
9376
+ const chunk = {
9377
+ x: this.integer(level.xPos, "xPos"),
9378
+ z: this.integer(level.zPos, "zPos"),
9379
+ dataVersion,
9380
+ sections: []
9381
+ };
9382
+ if ((chunk.x % 32 + 32) % 32 !== location.x || (chunk.z % 32 + 32) % 32 !== location.z) {
9383
+ throw new MineRenderError("Anvil chunk coordinates do not match its region location");
9384
+ }
9385
+ for (const section of this.compounds(level.sections ?? level.Sections, "sections")) {
9386
+ const y = this.integer(section.Y, "section Y");
9387
+ if (section.Blocks || section.Data || section.Add) {
9388
+ throw new MineRenderError("Numeric Anvil block IDs before Minecraft 1.13 are not supported");
9389
+ }
9390
+ if (section.block_states && section.block_states.type !== "compound") {
9391
+ throw new MineRenderError("Anvil block_states must be a compound");
9392
+ }
9393
+ const modern = section.block_states?.type === "compound" ? section.block_states.value : void 0;
9394
+ const paletteTag = modern ? modern.palette : section.Palette;
9395
+ const palette = paletteTag?.type === "list" && paletteTag.value.type === "string" ? paletteTag.value.value : this.compounds(paletteTag, "block palette");
9396
+ const data2 = new ChunkData();
9397
+ if (palette.length) {
9398
+ const states = palette.map((entry) => this.block(entry));
9399
+ const indices = this.unpack(modern ? modern.data : section.BlockStates, states.length, !!modern, dataVersion);
9400
+ for (let index = 0; index < 4096; index++) {
9401
+ const state = states[indices[index]];
9402
+ if (!state) throw new MineRenderError(`Anvil palette index ${indices[index]} is out of range`);
9403
+ if (!ChunkData.isAir(state)) data2.set(index, state);
9404
+ }
9405
+ } else if (modern || section.Palette || section.BlockStates) {
9406
+ throw new MineRenderError("Anvil section has block states without a palette");
9407
+ }
9408
+ if (chunk.sections.some((section2) => section2.y === y)) throw new MineRenderError(`Duplicate Anvil section Y ${y}`);
9409
+ chunk.sections.push({ y, data: data2 });
9410
+ }
9411
+ for (const entry of this.compounds(level.block_entities ?? level.TileEntities, "block entities")) {
9412
+ const x = this.integer(entry.x, "block entity x") - chunk.x * 16;
9413
+ const y = this.integer(entry.y, "block entity y");
9414
+ const z = this.integer(entry.z, "block entity z") - chunk.z * 16;
9415
+ const sectionY = Math.floor(y / 16);
9416
+ const section = chunk.sections.find((section2) => section2.y === sectionY);
9417
+ if (!section || x < 0 || x >= 16 || z < 0 || z >= 16) continue;
9418
+ const index = x + z * 16 + (y - sectionY * 16) * 256;
9419
+ const block = section.data.get(index);
9420
+ if (block) section.data.set(index, { ...block, nbt: { type: "compound", value: entry } });
9421
+ }
9422
+ const entities = this.compounds(level.entities ?? level.Entities, "entities");
9423
+ if (entities.length) {
9424
+ chunk.entities = entities.map((value) => {
9425
+ const position = value.Pos;
9426
+ if (position?.type !== "list" || position.value.type !== "double" || position.value.value.length !== 3 || !position.value.value.every(Number.isFinite)) {
9427
+ throw new MineRenderError("Anvil entity Pos must contain three coordinates");
9428
+ }
9429
+ return { position: [...position.value.value], nbt: { type: "compound", value } };
9430
+ });
9431
+ }
9432
+ return chunk;
9433
+ }
9434
+ static compounds(tag, name) {
9435
+ if (!tag) return [];
9436
+ if (tag.type !== "list" || tag.value.type !== "compound" && tag.value.value.length !== 0) {
9437
+ throw new MineRenderError(`Anvil ${name} must be a compound list`);
9438
+ }
9439
+ return tag.value.value;
9440
+ }
9441
+ static integer(tag, name) {
9442
+ if (!tag || typeof tag.value !== "number" || !Number.isInteger(tag.value)) {
9443
+ throw new MineRenderError(`Anvil ${name} must be an integer`);
9444
+ }
9445
+ return tag.value;
9446
+ }
9447
+ static block(entry) {
9448
+ if (typeof entry === "string") entry = { id: { type: "string", value: entry } };
9449
+ if (Object.keys(entry).length === 1 && entry[""]?.type === "string") entry = { id: entry[""] };
9450
+ const name = entry.id ?? entry.Name;
9451
+ const properties = entry.properties ?? entry.Properties;
9452
+ if (name?.type !== "string" || !name.value) throw new MineRenderError("Anvil palette entry has no block name");
9453
+ const block = { type: name.value };
9454
+ if (properties?.type === "compound") {
9455
+ block.properties = {};
9456
+ for (const [key, value] of Object.entries(properties.value)) {
9457
+ if (value?.type !== "string") throw new MineRenderError("Anvil block properties must be strings");
9458
+ block.properties[key] = value.value;
9459
+ }
9460
+ }
9461
+ return block;
9462
+ }
9463
+ static unpack(tag, paletteSize, modern, dataVersion) {
9464
+ const indices = new Uint16Array(4096);
9465
+ if (paletteSize === 1 && (!tag || tag.type === "longArray" && tag.value.length === 0)) return indices;
9466
+ if (tag?.type !== "longArray") throw new MineRenderError("Anvil section is missing its block-state long array");
9467
+ const bits = Math.max(4, Math.ceil(Math.log2(paletteSize)));
9468
+ if (paletteSize > 4096) throw new MineRenderError("Anvil block palette exceeds 4096 entries");
9469
+ if (!modern && dataVersion === void 0 && 64 % bits !== 0) {
9470
+ throw new MineRenderError("Anvil DataVersion is required to decode this block-state layout");
9471
+ }
9472
+ const padded = modern || (dataVersion ?? 0) >= 2527;
9473
+ const perLong = Math.floor(64 / bits);
9474
+ const expected = padded ? Math.ceil(4096 / perLong) : Math.ceil(4096 * bits / 64);
9475
+ if (tag.value.length !== expected) throw new MineRenderError(`Invalid Anvil block-state array length: expected ${expected}`);
9476
+ const words = tag.value.map(([high, low]) => BigInt(high >>> 0) << 32n | BigInt(low >>> 0));
9477
+ const mask = (1n << BigInt(bits)) - 1n;
9478
+ for (let index = 0; index < 4096; index++) {
9479
+ const word = padded ? Math.floor(index / perLong) : Math.floor(index * bits / 64);
9480
+ const shift = padded ? index % perLong * bits : index * bits % 64;
9481
+ let value = words[word] >> BigInt(shift);
9482
+ if (!padded && shift + bits > 64) value |= words[word + 1] << BigInt(64 - shift);
9483
+ indices[index] = Number(value & mask);
9484
+ }
9485
+ return indices;
9486
+ }
9487
+ };
9488
+
9489
+ // src/world/Chunk.ts
9490
+ var import_three26 = require("three");
9491
+
7416
9492
  // src/world/MineRenderWorld.ts
7417
- var import_three24 = require("three");
9493
+ var import_three25 = require("three");
7418
9494
  var MineRenderWorld = class {
7419
9495
  constructor(scene) {
7420
9496
  this._chunks = /* @__PURE__ */ new Map();
9497
+ this.pendingCulling = /* @__PURE__ */ new Map();
7421
9498
  this.scene = scene;
7422
9499
  }
7423
9500
  getBlockAt(posOrX, y, z) {
7424
9501
  if (typeof posOrX == "number") {
7425
- return this.getBlockAt(new import_three24.Vector3(posOrX, y, z));
9502
+ return this.getBlockAt(new import_three25.Vector3(posOrX, y, z));
7426
9503
  }
7427
9504
  if (isTripleArray(posOrX)) {
7428
- return this.getBlockAt(new import_three24.Vector3(posOrX[0], posOrX[1], posOrX[2]));
9505
+ return this.getBlockAt(new import_three25.Vector3(posOrX[0], posOrX[1], posOrX[2]));
7429
9506
  }
7430
9507
  this.validatePosBounds(posOrX);
7431
9508
  return this.getChunkAt(posOrX)?.getBlockAt(posOrX);
7432
9509
  }
7433
9510
  async setBlockAt(posOrX, yOrBlock, z, block) {
7434
9511
  if (typeof posOrX == "number") {
7435
- return this.setBlockAt(new import_three24.Vector3(posOrX, yOrBlock, z), block);
9512
+ return this.setBlockAt(new import_three25.Vector3(posOrX, yOrBlock, z), block);
7436
9513
  }
7437
9514
  if (isTripleArray(posOrX)) {
7438
- return this.setBlockAt(new import_three24.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
9515
+ return this.setBlockAt(new import_three25.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
7439
9516
  }
7440
9517
  this.validatePosBounds(posOrX);
7441
9518
  const value = yOrBlock;
@@ -7477,17 +9554,78 @@ var MineRenderWorld = class {
7477
9554
  if (!executor) queue.stop();
7478
9555
  }
7479
9556
  }
9557
+ /** Replaces one chunk column's blocks. Entity NBT remains available on the parsed chunk. */
9558
+ async placeChunk(chunk, executor) {
9559
+ const previous = [...this._chunks.entries()].filter(([, section]) => section.x === chunk.x && section.z === chunk.z);
9560
+ for (const [key, section] of previous) {
9561
+ this._chunks.delete(key);
9562
+ await section.dispose();
9563
+ }
9564
+ for (const section of chunk.sections) {
9565
+ const blocks = [];
9566
+ for (let index = 0; index < 4096; index++) {
9567
+ const block = section.data.get(index);
9568
+ if (block) blocks.push({
9569
+ ...block,
9570
+ position: [
9571
+ chunk.x * 16 + index % 16,
9572
+ section.y * 16 + Math.floor(index / 256),
9573
+ chunk.z * 16 + Math.floor(index / 16) % 16
9574
+ ]
9575
+ });
9576
+ }
9577
+ await this.placeMultiBlock({ size: [16, 16, 16], blocks }, true, executor);
9578
+ }
9579
+ }
7480
9580
  async clear() {
7481
- for (const chunk of this._chunks.values()) {
9581
+ await this.culling;
9582
+ const chunks = [...this._chunks.values()];
9583
+ this._chunks.clear();
9584
+ for (const chunk of chunks) {
7482
9585
  await chunk.dispose();
7483
9586
  }
7484
- this._chunks.clear();
9587
+ }
9588
+ updateCulling(positions) {
9589
+ for (const pos of positions) {
9590
+ this.pendingCulling.set(pos.toArray().join(","), pos.clone());
9591
+ for (const offset of CUBE_FACE_OFFSETS) {
9592
+ const neighbor = pos.clone().add(new import_three25.Vector3(...offset));
9593
+ this.pendingCulling.set(neighbor.toArray().join(","), neighbor);
9594
+ }
9595
+ }
9596
+ return this.culling ?? (this.culling = Promise.resolve().then(async () => {
9597
+ try {
9598
+ while (this.pendingCulling.size) {
9599
+ const batch = [...this.pendingCulling.values()];
9600
+ this.pendingCulling.clear();
9601
+ for (const pos of batch) {
9602
+ const block = this.getBlockAt(pos)?.object;
9603
+ if (!block) continue;
9604
+ let mask = 0;
9605
+ for (const [face, offset] of CUBE_FACE_OFFSETS.entries()) {
9606
+ if (this.getBlockAt(pos.clone().add(new import_three25.Vector3(...offset)))?.object.isOccluding) {
9607
+ mask |= 1 << face;
9608
+ }
9609
+ }
9610
+ await block.setCullMask(mask);
9611
+ }
9612
+ }
9613
+ } finally {
9614
+ this.culling = void 0;
9615
+ }
9616
+ }));
7485
9617
  }
7486
9618
  getOrCreateChunkAt(pos) {
7487
9619
  const key = this.worldPosToChunkKey(pos);
7488
9620
  let chunk = this._chunks.get(key);
7489
9621
  if (typeof chunk === "undefined") {
7490
- chunk = new Chunk(this.scene, Math.floor(pos.x / 16), Math.floor(pos.y / 16), Math.floor(pos.z / 16));
9622
+ chunk = new Chunk(
9623
+ this.scene,
9624
+ Math.floor(pos.x / 16),
9625
+ Math.floor(pos.y / 16),
9626
+ Math.floor(pos.z / 16),
9627
+ (positions) => this.updateCulling(positions)
9628
+ );
7491
9629
  this._chunks.set(key, chunk);
7492
9630
  }
7493
9631
  return chunk;
@@ -7496,14 +9634,14 @@ var MineRenderWorld = class {
7496
9634
  return this._chunks.get(this.worldPosToChunkKey(pos));
7497
9635
  }
7498
9636
  static worldToScenePosition(pos) {
7499
- return new import_three24.Vector3(
9637
+ return new import_three25.Vector3(
7500
9638
  pos.x * 16,
7501
9639
  pos.y * 16,
7502
9640
  pos.z * 16
7503
9641
  );
7504
9642
  }
7505
9643
  static sceneToWorldPosition(pos) {
7506
- return new import_three24.Vector3(
9644
+ return new import_three25.Vector3(
7507
9645
  pos.x / 16,
7508
9646
  pos.y / 16,
7509
9647
  pos.z / 16
@@ -7524,7 +9662,8 @@ var MineRenderWorld = class {
7524
9662
 
7525
9663
  // src/world/Chunk.ts
7526
9664
  var Chunk = class _Chunk {
7527
- constructor(scene, x, y, z) {
9665
+ constructor(scene, x, y, z, onBlocksChanged) {
9666
+ this.onBlocksChanged = onBlocksChanged;
7528
9667
  this.data = new ChunkData();
7529
9668
  this.renderedBlocks = /* @__PURE__ */ new Map();
7530
9669
  this.scene = scene;
@@ -7534,10 +9673,10 @@ var Chunk = class _Chunk {
7534
9673
  }
7535
9674
  getBlockAt(posOrX, y, z) {
7536
9675
  if (typeof posOrX == "number") {
7537
- return this.getBlockAt(new import_three25.Vector3(posOrX, y, z));
9676
+ return this.getBlockAt(new import_three26.Vector3(posOrX, y, z));
7538
9677
  }
7539
9678
  if (isTripleArray(posOrX)) {
7540
- return this.getBlockAt(new import_three25.Vector3(posOrX[0], posOrX[1], posOrX[2]));
9679
+ return this.getBlockAt(new import_three26.Vector3(posOrX[0], posOrX[1], posOrX[2]));
7541
9680
  }
7542
9681
  const pos = this.worldPosToChunkPos(posOrX);
7543
9682
  const index = _Chunk.chunkPosToBlockIndex(pos);
@@ -7545,10 +9684,10 @@ var Chunk = class _Chunk {
7545
9684
  }
7546
9685
  async setBlockAt(posOrX, yOrBlock, z, block) {
7547
9686
  if (typeof posOrX == "number") {
7548
- return this.setBlockAt(new import_three25.Vector3(posOrX, yOrBlock, z), block);
9687
+ return this.setBlockAt(new import_three26.Vector3(posOrX, yOrBlock, z), block);
7549
9688
  }
7550
9689
  if (isTripleArray(posOrX)) {
7551
- return this.setBlockAt(new import_three25.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
9690
+ return this.setBlockAt(new import_three26.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
7552
9691
  }
7553
9692
  const worldPos = posOrX;
7554
9693
  const pos = this.worldPosToChunkPos(worldPos);
@@ -7567,10 +9706,10 @@ var Chunk = class _Chunk {
7567
9706
  const readBlock = this.data.snapshot(index);
7568
9707
  this.renderedBlocks.get(index)?.object.removeFromScene();
7569
9708
  this.renderedBlocks.delete(index);
7570
- if (!readBlock) return void 0;
7571
- const stored = readBlock();
7572
9709
  let object;
7573
9710
  try {
9711
+ if (!readBlock) return void 0;
9712
+ const stored = readBlock();
7574
9713
  const blockState = await BlockStates.get(AssetKey.parse("blockstates", stored.type));
7575
9714
  if (!blockState) {
7576
9715
  this.data.set(index, void 0);
@@ -7592,12 +9731,18 @@ var Chunk = class _Chunk {
7592
9731
  this.data.set(index, void 0);
7593
9732
  object?.removeFromScene();
7594
9733
  throw error;
9734
+ } finally {
9735
+ await this.onBlocksChanged?.([worldPos]);
7595
9736
  }
7596
9737
  }
7597
9738
  async clear() {
9739
+ const positions = [...this.renderedBlocks.keys()].map((index) => this.chunkPosToWorldPos(
9740
+ new import_three26.Vector3(index % 16, Math.floor(index / 256), Math.floor(index / 16) % 16)
9741
+ ));
7598
9742
  for (const info of this.renderedBlocks.values()) info.object.removeFromScene();
7599
9743
  this.renderedBlocks.clear();
7600
9744
  this.data.clear();
9745
+ await this.onBlocksChanged?.(positions);
7601
9746
  }
7602
9747
  async dispose() {
7603
9748
  await this.clear();
@@ -7612,14 +9757,14 @@ var Chunk = class _Chunk {
7612
9757
  return pos.y * 16 * 16 + pos.z * 16 + pos.x;
7613
9758
  }
7614
9759
  worldPosToChunkPos(pos) {
7615
- return new import_three25.Vector3(
9760
+ return new import_three26.Vector3(
7616
9761
  pos.x - this.x * 16,
7617
9762
  pos.y - this.y * 16,
7618
9763
  pos.z - this.z * 16
7619
9764
  );
7620
9765
  }
7621
9766
  chunkPosToWorldPos(pos) {
7622
- return new import_three25.Vector3(
9767
+ return new import_three26.Vector3(
7623
9768
  this.x * 16 + pos.x,
7624
9769
  this.y * 16 + pos.y,
7625
9770
  this.z * 16 + pos.z