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_node_exports = {};
126
126
  __export(index_node_exports, {
127
127
  AXES: () => AXES,
128
+ AnvilParser: () => AnvilParser,
128
129
  ArchiveAssetSource: () => ArchiveAssetSource,
129
130
  AssetKey: () => AssetKey,
130
131
  AssetLoadError: () => AssetLoadError,
@@ -142,6 +143,7 @@ __export(index_node_exports, {
142
143
  BlockTints: () => BlockTints,
143
144
  BrowserArchiveProxy: () => BrowserArchiveProxy,
144
145
  CUBE_FACES: () => CUBE_FACES,
146
+ CUBE_FACE_OFFSETS: () => CUBE_FACE_OFFSETS,
145
147
  Caching: () => Caching,
146
148
  CanvasImage: () => CanvasImage,
147
149
  Chunk: () => Chunk,
@@ -175,6 +177,7 @@ __export(index_node_exports, {
175
177
  MineRenderWorld: () => MineRenderWorld,
176
178
  MinecraftCubeTexture: () => MinecraftCubeTexture,
177
179
  MinecraftFaceUV: () => MinecraftFaceUV,
180
+ ModelCulling: () => ModelCulling,
178
181
  ModelGenerator: () => ModelGenerator,
179
182
  ModelMerger: () => ModelMerger,
180
183
  ModelObject: () => ModelObject,
@@ -436,6 +439,14 @@ var CubeFaceIndex = /* @__PURE__ */ ((CubeFaceIndex2) => {
436
439
  return CubeFaceIndex2;
437
440
  })(CubeFaceIndex || {});
438
441
  var CUBE_FACES = Object.values(CubeFace);
442
+ var CUBE_FACE_OFFSETS = [
443
+ [1, 0, 0],
444
+ [-1, 0, 0],
445
+ [0, 1, 0],
446
+ [0, -1, 0],
447
+ [0, 0, 1],
448
+ [0, 0, -1]
449
+ ];
439
450
 
440
451
  // src/Disposable.ts
441
452
  function isDisposable(obj) {
@@ -1777,11 +1788,17 @@ function isOrthographicCamera(obj) {
1777
1788
  }
1778
1789
 
1779
1790
  // src/nbt/NBTHelper.ts
1791
+ var import_buffer2 = require("buffer");
1780
1792
  var NBTHelper = class {
1781
- static async fromBuffer(buffer) {
1793
+ static async fromBuffer(data, format) {
1794
+ const buffer = import_buffer2.Buffer.from(data instanceof Uint8Array ? data : new Uint8Array(data));
1782
1795
  const prismarineNbt = await import("prismarine-nbt");
1783
- const { parsed, type, metadata } = await prismarineNbt.parse(buffer);
1784
- return parsed;
1796
+ const { parsed, type, metadata } = await prismarineNbt.parse(buffer, format);
1797
+ return Object.assign(parsed, {
1798
+ format: type,
1799
+ metadata,
1800
+ compression: buffer[0] === 31 && buffer[1] === 139 ? "gzip" : "none"
1801
+ });
1785
1802
  }
1786
1803
  };
1787
1804
 
@@ -2586,6 +2603,9 @@ var UVMapper = class {
2586
2603
  const textureMap = {};
2587
2604
  const metaMap = {};
2588
2605
  const model = { ...originalModel };
2606
+ if (originalModel.elements) {
2607
+ model.elements = originalModel.elements.map((element) => ({ ...element }));
2608
+ }
2589
2609
  const isItemModel = !("elements" in model);
2590
2610
  console.debug(p5, "Creating Atlas for", model.key);
2591
2611
  if (model.textures) {
@@ -4007,6 +4027,42 @@ function isQuadArray(obj) {
4007
4027
  return Array.isArray(obj) && obj.length === 4;
4008
4028
  }
4009
4029
 
4030
+ // src/model/ModelCulling.ts
4031
+ var import_three16 = require("three");
4032
+ var ModelCulling = class {
4033
+ static toLocalMask(worldMask, rotation) {
4034
+ let localMask = 0;
4035
+ for (const [localFace, offset] of CUBE_FACE_OFFSETS.entries()) {
4036
+ const normal = new import_three16.Vector3(...offset).applyEuler(rotation);
4037
+ 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);
4038
+ if (worldFace < 0) return 0;
4039
+ if (worldMask & 1 << worldFace) localMask |= 1 << localFace;
4040
+ }
4041
+ return localMask;
4042
+ }
4043
+ static isOpaqueFullCube(atlas) {
4044
+ if (!atlas || atlas.hasTransparency !== false || atlas.model.elements?.length !== 1) return false;
4045
+ const element = atlas.model.elements[0];
4046
+ 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;
4047
+ if (!(atlas.image.width > 0 && atlas.image.height > 0)) return false;
4048
+ return CUBE_FACES.every((face, faceIndex) => {
4049
+ const texture = element.faces[face]?.texture;
4050
+ if (!texture?.startsWith("#")) return false;
4051
+ const key = texture.slice(1);
4052
+ const position = atlas.positions[key];
4053
+ const size = atlas.sizes[key];
4054
+ if (position?.length !== 2 || !position.every(Number.isFinite) || size?.length !== 2 || !size.every((value) => value > 0 && Number.isFinite(value))) return false;
4055
+ for (let vertex = 0; vertex < 4; vertex++) {
4056
+ const uvIndex = (faceIndex * 4 + vertex) * 2;
4057
+ const x = element.mappedUv[uvIndex] * atlas.image.width;
4058
+ const y = (1 - element.mappedUv[uvIndex + 1]) * atlas.image.height;
4059
+ 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;
4060
+ }
4061
+ return true;
4062
+ });
4063
+ }
4064
+ };
4065
+
4010
4066
  // src/model/block/blockTints.json
4011
4067
  var blockTints_default = {
4012
4068
  "minecraft:large_fern": { source: "grass" },
@@ -4093,10 +4149,10 @@ var BlockTints = class {
4093
4149
  };
4094
4150
 
4095
4151
  // src/model/scene/ModelObject.ts
4096
- var import_three17 = require("three");
4152
+ var import_three18 = require("three");
4097
4153
 
4098
4154
  // src/three/BufferGeometryUtils.js
4099
- var import_three16 = require("three");
4155
+ var import_three17 = require("three");
4100
4156
  function computeTangents(geometry) {
4101
4157
  geometry.computeTangents();
4102
4158
  console.warn("THREE.BufferGeometryUtils: .computeTangents() has been removed. Use BufferGeometry.computeTangents() instead.");
@@ -4108,7 +4164,7 @@ function mergeBufferGeometries(geometries, useGroups = false) {
4108
4164
  const attributes = {};
4109
4165
  const morphAttributes = {};
4110
4166
  const morphTargetsRelative = geometries[0].morphTargetsRelative;
4111
- const mergedGeometry = new import_three16.BufferGeometry();
4167
+ const mergedGeometry = new import_three17.BufferGeometry();
4112
4168
  let offset = 0;
4113
4169
  for (let i = 0; i < geometries.length; ++i) {
4114
4170
  const geometry = geometries[i];
@@ -4232,7 +4288,7 @@ function mergeBufferAttributes(attributes) {
4232
4288
  array.set(attributes[i].array, offset);
4233
4289
  offset += attributes[i].array.length;
4234
4290
  }
4235
- return new import_three16.BufferAttribute(array, itemSize, normalized);
4291
+ return new import_three17.BufferAttribute(array, itemSize, normalized);
4236
4292
  }
4237
4293
  function interleaveAttributes(attributes) {
4238
4294
  let TypedArray;
@@ -4248,7 +4304,7 @@ function interleaveAttributes(attributes) {
4248
4304
  arrayLength += attribute.array.length;
4249
4305
  stride += attribute.itemSize;
4250
4306
  }
4251
- const interleavedBuffer = new import_three16.InterleavedBuffer(new TypedArray(arrayLength), stride);
4307
+ const interleavedBuffer = new import_three17.InterleavedBuffer(new TypedArray(arrayLength), stride);
4252
4308
  let offset = 0;
4253
4309
  const res = [];
4254
4310
  const getters = ["getX", "getY", "getZ", "getW"];
@@ -4257,7 +4313,7 @@ function interleaveAttributes(attributes) {
4257
4313
  const attribute = attributes[j];
4258
4314
  const itemSize = attribute.itemSize;
4259
4315
  const count = attribute.count;
4260
- const iba = new import_three16.InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized);
4316
+ const iba = new import_three17.InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized);
4261
4317
  res.push(iba);
4262
4318
  offset += itemSize;
4263
4319
  for (let c = 0; c < count; c++) {
@@ -4341,13 +4397,13 @@ function mergeVertices(geometry, tolerance = 1e-4) {
4341
4397
  const name = attributeNames[i];
4342
4398
  const oldAttribute = geometry.getAttribute(name);
4343
4399
  const buffer = new oldAttribute.array.constructor(attrArrays[name]);
4344
- const attribute = new import_three16.BufferAttribute(buffer, oldAttribute.itemSize, oldAttribute.normalized);
4400
+ const attribute = new import_three17.BufferAttribute(buffer, oldAttribute.itemSize, oldAttribute.normalized);
4345
4401
  result.setAttribute(name, attribute);
4346
4402
  if (name in morphAttrsArrays) {
4347
4403
  for (let j = 0; j < morphAttrsArrays[name].length; j++) {
4348
4404
  const oldMorphAttribute = geometry.morphAttributes[name][j];
4349
4405
  const buffer2 = new oldMorphAttribute.array.constructor(morphAttrsArrays[name][j]);
4350
- const morphAttribute = new import_three16.BufferAttribute(buffer2, oldMorphAttribute.itemSize, oldMorphAttribute.normalized);
4406
+ const morphAttribute = new import_three17.BufferAttribute(buffer2, oldMorphAttribute.itemSize, oldMorphAttribute.normalized);
4351
4407
  result.morphAttributes[name][j] = morphAttribute;
4352
4408
  }
4353
4409
  }
@@ -4356,11 +4412,11 @@ function mergeVertices(geometry, tolerance = 1e-4) {
4356
4412
  return result;
4357
4413
  }
4358
4414
  function toTrianglesDrawMode(geometry, drawMode) {
4359
- if (drawMode === import_three16.TrianglesDrawMode) {
4415
+ if (drawMode === import_three17.TrianglesDrawMode) {
4360
4416
  console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.");
4361
4417
  return geometry;
4362
4418
  }
4363
- if (drawMode === import_three16.TriangleFanDrawMode || drawMode === import_three16.TriangleStripDrawMode) {
4419
+ if (drawMode === import_three17.TriangleFanDrawMode || drawMode === import_three17.TriangleStripDrawMode) {
4364
4420
  let index = geometry.getIndex();
4365
4421
  if (index === null) {
4366
4422
  const indices = [];
@@ -4378,7 +4434,7 @@ function toTrianglesDrawMode(geometry, drawMode) {
4378
4434
  }
4379
4435
  const numberOfTriangles = index.count - 2;
4380
4436
  const newIndices = [];
4381
- if (drawMode === import_three16.TriangleFanDrawMode) {
4437
+ if (drawMode === import_three17.TriangleFanDrawMode) {
4382
4438
  for (let i = 1; i <= numberOfTriangles; i++) {
4383
4439
  newIndices.push(index.getX(0));
4384
4440
  newIndices.push(index.getX(i));
@@ -4414,15 +4470,15 @@ function computeMorphedAttributes(object) {
4414
4470
  console.error("THREE.BufferGeometryUtils: Geometry is not of type BufferGeometry.");
4415
4471
  return null;
4416
4472
  }
4417
- const _vA = new import_three16.Vector3();
4418
- const _vB = new import_three16.Vector3();
4419
- const _vC = new import_three16.Vector3();
4420
- const _tempA = new import_three16.Vector3();
4421
- const _tempB = new import_three16.Vector3();
4422
- const _tempC = new import_three16.Vector3();
4423
- const _morphA = new import_three16.Vector3();
4424
- const _morphB = new import_three16.Vector3();
4425
- const _morphC = new import_three16.Vector3();
4473
+ const _vA = new import_three17.Vector3();
4474
+ const _vB = new import_three17.Vector3();
4475
+ const _vC = new import_three17.Vector3();
4476
+ const _tempA = new import_three17.Vector3();
4477
+ const _tempB = new import_three17.Vector3();
4478
+ const _tempC = new import_three17.Vector3();
4479
+ const _morphA = new import_three17.Vector3();
4480
+ const _morphB = new import_three17.Vector3();
4481
+ const _morphC = new import_three17.Vector3();
4426
4482
  function _calculateMorphedAttributeData(object2, material2, attribute, morphAttribute, morphTargetsRelative2, a2, b2, c2, modifiedAttributeArray) {
4427
4483
  _vA.fromBufferAttribute(attribute, a2);
4428
4484
  _vB.fromBufferAttribute(attribute, b2);
@@ -4617,8 +4673,8 @@ function computeMorphedAttributes(object) {
4617
4673
  }
4618
4674
  }
4619
4675
  }
4620
- const morphedPositionAttribute = new import_three16.Float32BufferAttribute(modifiedPosition, 3);
4621
- const morphedNormalAttribute = new import_three16.Float32BufferAttribute(modifiedNormal, 3);
4676
+ const morphedPositionAttribute = new import_three17.Float32BufferAttribute(modifiedPosition, 3);
4677
+ const morphedNormalAttribute = new import_three17.Float32BufferAttribute(modifiedNormal, 3);
4622
4678
  return {
4623
4679
  positionAttribute,
4624
4680
  normalAttribute,
@@ -4651,6 +4707,9 @@ var ModelObject = class _ModelObject extends SceneObject {
4651
4707
  get textureAtlas() {
4652
4708
  return this.atlas;
4653
4709
  }
4710
+ get isOpaqueFullCube() {
4711
+ return !this.options.displayPosition && ModelCulling.isOpaqueFullCube(this.atlas);
4712
+ }
4654
4713
  //TODO: support for replacing textures
4655
4714
  async loadTextures() {
4656
4715
  this.atlas = await UVMapper.getAtlas(this.originalModel);
@@ -4664,8 +4723,17 @@ var ModelObject = class _ModelObject extends SceneObject {
4664
4723
  if (this.atlas.model.elements) {
4665
4724
  this.atlas.model.elements?.forEach((el) => {
4666
4725
  const elGeo = this._getBoxGeometryFromElement(el).clone();
4726
+ if (this.options.cullMask) {
4727
+ const indices = Array.from(elGeo.getIndex().array);
4728
+ elGeo.setIndex(indices.filter((_, index) => {
4729
+ const face = CUBE_FACES[Math.floor(index / 6)];
4730
+ const direction = CUBE_FACES.findIndex((name) => name === el.faces[face]?.cullface);
4731
+ return direction < 0 || !(this.options.cullMask & 1 << direction);
4732
+ }));
4733
+ elGeo.clearGroups();
4734
+ }
4667
4735
  if (this.options.uvLockRotation) {
4668
- UVMapper.lockUvs(elGeo, el.faces, this.atlas, new import_three17.Euler(...this.options.uvLockRotation));
4736
+ UVMapper.lockUvs(elGeo, el.faces, this.atlas, new import_three18.Euler(...this.options.uvLockRotation));
4669
4737
  }
4670
4738
  if (this.options.tints) {
4671
4739
  const colors = new Float32Array(elGeo.getAttribute("position").count * 3).fill(1);
@@ -4674,19 +4742,19 @@ var ModelObject = class _ModelObject extends SceneObject {
4674
4742
  if (tintIndex === void 0 || tintIndex < 0) continue;
4675
4743
  const tint = this.options.tints[tintIndex];
4676
4744
  if (tint === void 0) continue;
4677
- const color = new import_three17.Color(tint);
4745
+ const color = new import_three18.Color(tint);
4678
4746
  for (let vertex = 0; vertex < 4; vertex++) {
4679
4747
  color.toArray(colors, (faceIndex * 4 + vertex) * 3);
4680
4748
  }
4681
4749
  }
4682
- elGeo.setAttribute("color", new import_three17.BufferAttribute(colors, 3));
4750
+ elGeo.setAttribute("color", new import_three18.BufferAttribute(colors, 3));
4683
4751
  }
4684
- 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));
4685
- elGeo.applyMatrix4(new import_three17.Matrix4().makeTranslation(el.from[0], el.from[1], el.from[2]));
4752
+ 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));
4753
+ elGeo.applyMatrix4(new import_three18.Matrix4().makeTranslation(el.from[0], el.from[1], el.from[2]));
4686
4754
  if (el.rotation) {
4687
4755
  applyElementRotation(el.rotation, elGeo);
4688
4756
  }
4689
- elGeo.applyMatrix4(new import_three17.Matrix4().makeTranslation(-8, -8, -8));
4757
+ elGeo.applyMatrix4(new import_three18.Matrix4().makeTranslation(-8, -8, -8));
4690
4758
  if (displayTransform) DisplayTransforms.apply(elGeo, displayTransform);
4691
4759
  if (this.options.mergeMeshes) {
4692
4760
  allGeos.push(elGeo);
@@ -4708,7 +4776,7 @@ var ModelObject = class _ModelObject extends SceneObject {
4708
4776
  if (allGeos.length > 0) {
4709
4777
  combinedGeo = mergeBufferGeometries(allGeos);
4710
4778
  } else {
4711
- combinedGeo = new import_three17.BoxGeometry(16, 16, 16);
4779
+ combinedGeo = new import_three18.BoxGeometry(16, 16, 16);
4712
4780
  if (displayTransform) DisplayTransforms.apply(combinedGeo, displayTransform);
4713
4781
  }
4714
4782
  combinedGeo.computeBoundingBox();
@@ -4761,7 +4829,7 @@ function isModelObject(obj) {
4761
4829
 
4762
4830
  // src/model/block/scene/BlockObject.ts
4763
4831
  var import_ts_deepmerge6 = __toESM(require_dist());
4764
- var import_three18 = require("three");
4832
+ var import_three19 = require("three");
4765
4833
  var p10 = prefix("BlockObject");
4766
4834
  function matchesCondition(condition, state) {
4767
4835
  return Object.entries(condition).every(([key, value]) => {
@@ -4786,6 +4854,7 @@ var BlockObject = class _BlockObject extends SceneObject {
4786
4854
  this._instanceModel = [];
4787
4855
  this._variants = [];
4788
4856
  this._models = [];
4857
+ this._cullMask = 0;
4789
4858
  this.options = (0, import_ts_deepmerge6.default)({}, _BlockObject.DEFAULT_OPTIONS, options ?? {});
4790
4859
  }
4791
4860
  static {
@@ -4824,12 +4893,69 @@ var BlockObject = class _BlockObject extends SceneObject {
4824
4893
  super.removeFromScene();
4825
4894
  }
4826
4895
  clearModels() {
4827
- for (const model of this._models.splice(0)) {
4896
+ this.removeModels(this._models.splice(0));
4897
+ this._isInstanced = false;
4898
+ this._instanceCounter = 0;
4899
+ }
4900
+ removeModels(models) {
4901
+ for (const model of models) {
4828
4902
  model.removeFromScene();
4829
4903
  if (!isInstanceReference(model)) model.dispose();
4830
4904
  }
4831
- this._isInstanced = false;
4832
- this._instanceCounter = 0;
4905
+ }
4906
+ get isOccluding() {
4907
+ return this._models.some((model) => {
4908
+ const object = isInstanceReference(model) ? model.instanceable : model;
4909
+ return object.isOpaqueFullCube && this.getModelCullMask(model, 63) === 63;
4910
+ });
4911
+ }
4912
+ getModelMatrix(model) {
4913
+ if (isInstanceReference(model)) return model.getMatrix();
4914
+ if (model.matrixAutoUpdate) model.updateMatrix();
4915
+ return model.matrix.clone();
4916
+ }
4917
+ getModelCullMask(model, worldMask) {
4918
+ const object = isInstanceReference(model) ? model.instanceable : model;
4919
+ if (object.options.displayPosition) return 0;
4920
+ const position = new import_three19.Vector3();
4921
+ const rotation = new import_three19.Quaternion();
4922
+ const scale = new import_three19.Vector3();
4923
+ this.getModelMatrix(model).decompose(position, rotation, scale);
4924
+ if (position.distanceToSquared(this.position) > 1e-10 || scale.distanceToSquared(new import_three19.Vector3(1, 1, 1)) > 1e-10) return 0;
4925
+ return ModelCulling.toLocalMask(worldMask, new import_three19.Euler().setFromQuaternion(rotation));
4926
+ }
4927
+ async setCullMask(worldMask) {
4928
+ worldMask &= 63;
4929
+ const replacements = [];
4930
+ try {
4931
+ for (const model of this._models) {
4932
+ const object = isInstanceReference(model) ? model.instanceable : model;
4933
+ const cullMask = this.getModelCullMask(model, worldMask);
4934
+ if (cullMask === (object.options.cullMask ?? 0)) {
4935
+ replacements.push(model);
4936
+ continue;
4937
+ }
4938
+ const matrix = this.getModelMatrix(model);
4939
+ const replacement = await this.scene.addModel(object.originalModel, { ...object.options, cullMask });
4940
+ replacements.push(replacement);
4941
+ if (isInstanceReference(replacement)) {
4942
+ replacement.setMatrix(matrix);
4943
+ } else {
4944
+ replacement.matrix.copy(matrix);
4945
+ matrix.decompose(replacement.position, replacement.quaternion, replacement.scale);
4946
+ replacement.matrixAutoUpdate = object.matrixAutoUpdate;
4947
+ replacement.visible = object.visible;
4948
+ }
4949
+ }
4950
+ } catch (error) {
4951
+ this.removeModels(replacements.filter((model) => !this._models.includes(model)));
4952
+ throw error;
4953
+ }
4954
+ const previous = this._models;
4955
+ this._models = replacements;
4956
+ this._cullMask = worldMask;
4957
+ this.removeModels(previous.filter((model) => !replacements.includes(model)));
4958
+ this.notifyDirty();
4833
4959
  }
4834
4960
  get state() {
4835
4961
  return this._state;
@@ -4909,7 +5035,7 @@ var BlockObject = class _BlockObject extends SceneObject {
4909
5035
  await this.createVariant(variant);
4910
5036
  }
4911
5037
  async createVariant(variant) {
4912
- const rotation = new import_three18.Euler();
5038
+ const rotation = new import_three19.Euler();
4913
5039
  if (typeof variant.x !== "undefined") {
4914
5040
  rotation.x = toRadians(clampRotationDegrees(variant.x));
4915
5041
  }
@@ -4922,7 +5048,8 @@ var BlockObject = class _BlockObject extends SceneObject {
4922
5048
  const options = {
4923
5049
  ...this.options,
4924
5050
  tints: model ? await BlockTints.get(this.blockState.key, this.state, model, this.options.tints) : this.options.tints,
4925
- uvLockRotation: variant.uvlock && (rotation.x !== 0 || rotation.y !== 0) ? [rotation.x, rotation.y, rotation.z] : void 0
5051
+ uvLockRotation: variant.uvlock && (rotation.x !== 0 || rotation.y !== 0) ? [rotation.x, rotation.y, rotation.z] : void 0,
5052
+ cullMask: this.options.displayPosition ? 0 : ModelCulling.toLocalMask(this._cullMask, rotation)
4926
5053
  };
4927
5054
  const obj = await this.scene.addModel(model, options);
4928
5055
  if (isInstanceReference(obj) || obj.isInstanced) {
@@ -4999,7 +5126,7 @@ var BlockObject = class _BlockObject extends SceneObject {
4999
5126
  setPositionRotationScaleAt(index, position, rotation, scale) {
5000
5127
  super.setPositionRotationScaleAt(index, position, rotation, scale);
5001
5128
  }
5002
- getMatrixAt(index, matrix = new import_three18.Matrix4()) {
5129
+ getMatrixAt(index, matrix = new import_three19.Matrix4()) {
5003
5130
  if (!this.isInstanced) throw new MineRenderError("Object is not instanced");
5004
5131
  const child = this._models[0];
5005
5132
  if (child && isModelObject(child)) {
@@ -5033,12 +5160,1780 @@ function isBlockObject(obj) {
5033
5160
  return obj.isBlockObject;
5034
5161
  }
5035
5162
 
5163
+ // src/model/multiblock/legacyBlocks.json
5164
+ var legacyBlocks_default = {
5165
+ __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",
5166
+ blocks: {
5167
+ "0:0": "minecraft:air",
5168
+ "1:0": "minecraft:stone",
5169
+ "1:1": "minecraft:granite",
5170
+ "1:2": "minecraft:polished_granite",
5171
+ "1:3": "minecraft:diorite",
5172
+ "1:4": "minecraft:polished_diorite",
5173
+ "1:5": "minecraft:andesite",
5174
+ "1:6": "minecraft:polished_andesite",
5175
+ "2:0": "minecraft:grass_block[snowy=false]",
5176
+ "3:0": "minecraft:dirt",
5177
+ "3:1": "minecraft:coarse_dirt",
5178
+ "3:2": "minecraft:podzol[snowy=false]",
5179
+ "4:0": "minecraft:cobblestone",
5180
+ "5:0": "minecraft:oak_planks",
5181
+ "5:1": "minecraft:spruce_planks",
5182
+ "5:2": "minecraft:birch_planks",
5183
+ "5:3": "minecraft:jungle_planks",
5184
+ "5:4": "minecraft:acacia_planks",
5185
+ "5:5": "minecraft:dark_oak_planks",
5186
+ "6:0": "minecraft:oak_sapling[stage=0]",
5187
+ "6:1": "minecraft:spruce_sapling[stage=0]",
5188
+ "6:2": "minecraft:birch_sapling[stage=0]",
5189
+ "6:3": "minecraft:jungle_sapling[stage=0]",
5190
+ "6:4": "minecraft:acacia_sapling[stage=0]",
5191
+ "6:5": "minecraft:dark_oak_sapling[stage=0]",
5192
+ "6:8": "minecraft:oak_sapling[stage=1]",
5193
+ "6:9": "minecraft:spruce_sapling[stage=1]",
5194
+ "6:10": "minecraft:birch_sapling[stage=1]",
5195
+ "6:11": "minecraft:jungle_sapling[stage=1]",
5196
+ "6:12": "minecraft:acacia_sapling[stage=1]",
5197
+ "6:13": "minecraft:dark_oak_sapling[stage=1]",
5198
+ "7:0": "minecraft:bedrock",
5199
+ "8:0": "minecraft:water[level=0]",
5200
+ "8:1": "minecraft:water[level=1]",
5201
+ "8:2": "minecraft:water[level=2]",
5202
+ "8:3": "minecraft:water[level=3]",
5203
+ "8:4": "minecraft:water[level=4]",
5204
+ "8:5": "minecraft:water[level=5]",
5205
+ "8:6": "minecraft:water[level=6]",
5206
+ "8:7": "minecraft:water[level=7]",
5207
+ "8:8": "minecraft:water[level=8]",
5208
+ "8:9": "minecraft:water[level=9]",
5209
+ "8:10": "minecraft:water[level=10]",
5210
+ "8:11": "minecraft:water[level=11]",
5211
+ "8:12": "minecraft:water[level=12]",
5212
+ "8:13": "minecraft:water[level=13]",
5213
+ "8:14": "minecraft:water[level=14]",
5214
+ "8:15": "minecraft:water[level=15]",
5215
+ "9:0": "minecraft:water[level=0]",
5216
+ "9:1": "minecraft:water[level=1]",
5217
+ "9:2": "minecraft:water[level=2]",
5218
+ "9:3": "minecraft:water[level=3]",
5219
+ "9:4": "minecraft:water[level=4]",
5220
+ "9:5": "minecraft:water[level=5]",
5221
+ "9:6": "minecraft:water[level=6]",
5222
+ "9:7": "minecraft:water[level=7]",
5223
+ "9:8": "minecraft:water[level=8]",
5224
+ "9:9": "minecraft:water[level=9]",
5225
+ "9:10": "minecraft:water[level=10]",
5226
+ "9:11": "minecraft:water[level=11]",
5227
+ "9:12": "minecraft:water[level=12]",
5228
+ "9:13": "minecraft:water[level=13]",
5229
+ "9:14": "minecraft:water[level=14]",
5230
+ "9:15": "minecraft:water[level=15]",
5231
+ "10:0": "minecraft:lava[level=0]",
5232
+ "10:1": "minecraft:lava[level=1]",
5233
+ "10:2": "minecraft:lava[level=2]",
5234
+ "10:3": "minecraft:lava[level=3]",
5235
+ "10:4": "minecraft:lava[level=4]",
5236
+ "10:5": "minecraft:lava[level=5]",
5237
+ "10:6": "minecraft:lava[level=6]",
5238
+ "10:7": "minecraft:lava[level=7]",
5239
+ "10:8": "minecraft:lava[level=8]",
5240
+ "10:9": "minecraft:lava[level=9]",
5241
+ "10:10": "minecraft:lava[level=10]",
5242
+ "10:11": "minecraft:lava[level=11]",
5243
+ "10:12": "minecraft:lava[level=12]",
5244
+ "10:13": "minecraft:lava[level=13]",
5245
+ "10:14": "minecraft:lava[level=14]",
5246
+ "10:15": "minecraft:lava[level=15]",
5247
+ "11:0": "minecraft:lava[level=0]",
5248
+ "11:1": "minecraft:lava[level=1]",
5249
+ "11:2": "minecraft:lava[level=2]",
5250
+ "11:3": "minecraft:lava[level=3]",
5251
+ "11:4": "minecraft:lava[level=4]",
5252
+ "11:5": "minecraft:lava[level=5]",
5253
+ "11:6": "minecraft:lava[level=6]",
5254
+ "11:7": "minecraft:lava[level=7]",
5255
+ "11:8": "minecraft:lava[level=8]",
5256
+ "11:9": "minecraft:lava[level=9]",
5257
+ "11:10": "minecraft:lava[level=10]",
5258
+ "11:11": "minecraft:lava[level=11]",
5259
+ "11:12": "minecraft:lava[level=12]",
5260
+ "11:13": "minecraft:lava[level=13]",
5261
+ "11:14": "minecraft:lava[level=14]",
5262
+ "11:15": "minecraft:lava[level=15]",
5263
+ "12:0": "minecraft:sand",
5264
+ "12:1": "minecraft:red_sand",
5265
+ "13:0": "minecraft:gravel",
5266
+ "14:0": "minecraft:gold_ore",
5267
+ "15:0": "minecraft:iron_ore",
5268
+ "16:0": "minecraft:coal_ore",
5269
+ "17:0": "minecraft:oak_log[axis=y]",
5270
+ "17:1": "minecraft:spruce_log[axis=y]",
5271
+ "17:2": "minecraft:birch_log[axis=y]",
5272
+ "17:3": "minecraft:jungle_log[axis=y]",
5273
+ "17:4": "minecraft:oak_log[axis=x]",
5274
+ "17:5": "minecraft:spruce_log[axis=x]",
5275
+ "17:6": "minecraft:birch_log[axis=x]",
5276
+ "17:7": "minecraft:jungle_log[axis=x]",
5277
+ "17:8": "minecraft:oak_log[axis=z]",
5278
+ "17:9": "minecraft:spruce_log[axis=z]",
5279
+ "17:10": "minecraft:birch_log[axis=z]",
5280
+ "17:11": "minecraft:jungle_log[axis=z]",
5281
+ "17:12": "minecraft:oak_wood",
5282
+ "17:13": "minecraft:spruce_wood",
5283
+ "17:14": "minecraft:birch_wood",
5284
+ "17:15": "minecraft:jungle_wood",
5285
+ "18:0": "minecraft:oak_leaves[persistent=false,distance=1]",
5286
+ "18:1": "minecraft:spruce_leaves[persistent=false,distance=1]",
5287
+ "18:2": "minecraft:birch_leaves[persistent=false,distance=1]",
5288
+ "18:3": "minecraft:jungle_leaves[persistent=false,distance=1]",
5289
+ "18:4": "minecraft:oak_leaves[persistent=true,distance=1]",
5290
+ "18:5": "minecraft:spruce_leaves[persistent=true,distance=1]",
5291
+ "18:6": "minecraft:birch_leaves[persistent=true,distance=1]",
5292
+ "18:7": "minecraft:jungle_leaves[persistent=true,distance=1]",
5293
+ "18:8": "minecraft:oak_leaves[persistent=false,distance=1]",
5294
+ "18:9": "minecraft:spruce_leaves[persistent=false,distance=1]",
5295
+ "18:10": "minecraft:birch_leaves[persistent=false,distance=1]",
5296
+ "18:11": "minecraft:jungle_leaves[persistent=false,distance=1]",
5297
+ "18:12": "minecraft:oak_leaves[persistent=true,distance=1]",
5298
+ "18:13": "minecraft:spruce_leaves[persistent=true,distance=1]",
5299
+ "18:14": "minecraft:birch_leaves[persistent=true,distance=1]",
5300
+ "18:15": "minecraft:jungle_leaves[persistent=true,distance=1]",
5301
+ "19:0": "minecraft:sponge",
5302
+ "19:1": "minecraft:wet_sponge",
5303
+ "20:0": "minecraft:glass",
5304
+ "21:0": "minecraft:lapis_ore",
5305
+ "22:0": "minecraft:lapis_block",
5306
+ "23:0": "minecraft:dispenser[triggered=false,facing=down]",
5307
+ "23:1": "minecraft:dispenser[triggered=false,facing=up]",
5308
+ "23:2": "minecraft:dispenser[triggered=false,facing=north]",
5309
+ "23:3": "minecraft:dispenser[triggered=false,facing=south]",
5310
+ "23:4": "minecraft:dispenser[triggered=false,facing=west]",
5311
+ "23:5": "minecraft:dispenser[triggered=false,facing=east]",
5312
+ "23:8": "minecraft:dispenser[triggered=true,facing=down]",
5313
+ "23:9": "minecraft:dispenser[triggered=true,facing=up]",
5314
+ "23:10": "minecraft:dispenser[triggered=true,facing=north]",
5315
+ "23:11": "minecraft:dispenser[triggered=true,facing=south]",
5316
+ "23:12": "minecraft:dispenser[triggered=true,facing=west]",
5317
+ "23:13": "minecraft:dispenser[triggered=true,facing=east]",
5318
+ "24:0": "minecraft:sandstone",
5319
+ "24:1": "minecraft:chiseled_sandstone",
5320
+ "24:2": "minecraft:cut_sandstone",
5321
+ "25:0": "minecraft:note_block",
5322
+ "26:0": "minecraft:red_bed[part=foot,facing=south,occupied=false]",
5323
+ "26:1": "minecraft:red_bed[part=foot,facing=west,occupied=false]",
5324
+ "26:2": "minecraft:red_bed[part=foot,facing=north,occupied=false]",
5325
+ "26:3": "minecraft:red_bed[part=foot,facing=east,occupied=false]",
5326
+ "26:4": "minecraft:red_bed[part=foot,facing=south,occupied=true]",
5327
+ "26:5": "minecraft:red_bed[part=foot,facing=west,occupied=true]",
5328
+ "26:6": "minecraft:red_bed[part=foot,facing=north,occupied=true]",
5329
+ "26:7": "minecraft:red_bed[part=foot,facing=east,occupied=true]",
5330
+ "26:8": "minecraft:red_bed[part=head,facing=south,occupied=false]",
5331
+ "26:9": "minecraft:red_bed[part=head,facing=west,occupied=false]",
5332
+ "26:10": "minecraft:red_bed[part=head,facing=north,occupied=false]",
5333
+ "26:11": "minecraft:red_bed[part=head,facing=east,occupied=false]",
5334
+ "26:12": "minecraft:red_bed[part=head,facing=south,occupied=true]",
5335
+ "26:13": "minecraft:red_bed[part=head,facing=west,occupied=true]",
5336
+ "26:14": "minecraft:red_bed[part=head,facing=north,occupied=true]",
5337
+ "26:15": "minecraft:red_bed[part=head,facing=east,occupied=true]",
5338
+ "27:0": "minecraft:powered_rail[shape=north_south,powered=false]",
5339
+ "27:1": "minecraft:powered_rail[shape=east_west,powered=false]",
5340
+ "27:2": "minecraft:powered_rail[shape=ascending_east,powered=false]",
5341
+ "27:3": "minecraft:powered_rail[shape=ascending_west,powered=false]",
5342
+ "27:4": "minecraft:powered_rail[shape=ascending_north,powered=false]",
5343
+ "27:5": "minecraft:powered_rail[shape=ascending_south,powered=false]",
5344
+ "27:8": "minecraft:powered_rail[shape=north_south,powered=true]",
5345
+ "27:9": "minecraft:powered_rail[shape=east_west,powered=true]",
5346
+ "27:10": "minecraft:powered_rail[shape=ascending_east,powered=true]",
5347
+ "27:11": "minecraft:powered_rail[shape=ascending_west,powered=true]",
5348
+ "27:12": "minecraft:powered_rail[shape=ascending_north,powered=true]",
5349
+ "27:13": "minecraft:powered_rail[shape=ascending_south,powered=true]",
5350
+ "28:0": "minecraft:detector_rail[shape=north_south,powered=false]",
5351
+ "28:1": "minecraft:detector_rail[shape=east_west,powered=false]",
5352
+ "28:2": "minecraft:detector_rail[shape=ascending_east,powered=false]",
5353
+ "28:3": "minecraft:detector_rail[shape=ascending_west,powered=false]",
5354
+ "28:4": "minecraft:detector_rail[shape=ascending_north,powered=false]",
5355
+ "28:5": "minecraft:detector_rail[shape=ascending_south,powered=false]",
5356
+ "28:8": "minecraft:detector_rail[shape=north_south,powered=true]",
5357
+ "28:9": "minecraft:detector_rail[shape=east_west,powered=true]",
5358
+ "28:10": "minecraft:detector_rail[shape=ascending_east,powered=true]",
5359
+ "28:11": "minecraft:detector_rail[shape=ascending_west,powered=true]",
5360
+ "28:12": "minecraft:detector_rail[shape=ascending_north,powered=true]",
5361
+ "28:13": "minecraft:detector_rail[shape=ascending_south,powered=true]",
5362
+ "29:0": "minecraft:sticky_piston[facing=down,extended=false]",
5363
+ "29:1": "minecraft:sticky_piston[facing=up,extended=false]",
5364
+ "29:2": "minecraft:sticky_piston[facing=north,extended=false]",
5365
+ "29:3": "minecraft:sticky_piston[facing=south,extended=false]",
5366
+ "29:4": "minecraft:sticky_piston[facing=west,extended=false]",
5367
+ "29:5": "minecraft:sticky_piston[facing=east,extended=false]",
5368
+ "29:8": "minecraft:sticky_piston[facing=down,extended=true]",
5369
+ "29:9": "minecraft:sticky_piston[facing=up,extended=true]",
5370
+ "29:10": "minecraft:sticky_piston[facing=north,extended=true]",
5371
+ "29:11": "minecraft:sticky_piston[facing=south,extended=true]",
5372
+ "29:12": "minecraft:sticky_piston[facing=west,extended=true]",
5373
+ "29:13": "minecraft:sticky_piston[facing=east,extended=true]",
5374
+ "30:0": "minecraft:cobweb",
5375
+ "31:0": "minecraft:dead_bush",
5376
+ "31:1": "minecraft:short_grass",
5377
+ "31:2": "minecraft:fern",
5378
+ "32:0": "minecraft:dead_bush",
5379
+ "33:0": "minecraft:piston[facing=down,extended=false]",
5380
+ "33:1": "minecraft:piston[facing=up,extended=false]",
5381
+ "33:2": "minecraft:piston[facing=north,extended=false]",
5382
+ "33:3": "minecraft:piston[facing=south,extended=false]",
5383
+ "33:4": "minecraft:piston[facing=west,extended=false]",
5384
+ "33:5": "minecraft:piston[facing=east,extended=false]",
5385
+ "33:8": "minecraft:piston[facing=down,extended=true]",
5386
+ "33:9": "minecraft:piston[facing=up,extended=true]",
5387
+ "33:10": "minecraft:piston[facing=north,extended=true]",
5388
+ "33:11": "minecraft:piston[facing=south,extended=true]",
5389
+ "33:12": "minecraft:piston[facing=west,extended=true]",
5390
+ "33:13": "minecraft:piston[facing=east,extended=true]",
5391
+ "34:0": "minecraft:piston_head[short=false,facing=down,type=normal]",
5392
+ "34:1": "minecraft:piston_head[short=false,facing=up,type=normal]",
5393
+ "34:2": "minecraft:piston_head[short=false,facing=north,type=normal]",
5394
+ "34:3": "minecraft:piston_head[short=false,facing=south,type=normal]",
5395
+ "34:4": "minecraft:piston_head[short=false,facing=west,type=normal]",
5396
+ "34:5": "minecraft:piston_head[short=false,facing=east,type=normal]",
5397
+ "34:8": "minecraft:piston_head[short=false,facing=down,type=sticky]",
5398
+ "34:9": "minecraft:piston_head[short=false,facing=up,type=sticky]",
5399
+ "34:10": "minecraft:piston_head[short=false,facing=north,type=sticky]",
5400
+ "34:11": "minecraft:piston_head[short=false,facing=south,type=sticky]",
5401
+ "34:12": "minecraft:piston_head[short=false,facing=west,type=sticky]",
5402
+ "34:13": "minecraft:piston_head[short=false,facing=east,type=sticky]",
5403
+ "35:0": "minecraft:white_wool",
5404
+ "35:1": "minecraft:orange_wool",
5405
+ "35:2": "minecraft:magenta_wool",
5406
+ "35:3": "minecraft:light_blue_wool",
5407
+ "35:4": "minecraft:yellow_wool",
5408
+ "35:5": "minecraft:lime_wool",
5409
+ "35:6": "minecraft:pink_wool",
5410
+ "35:7": "minecraft:gray_wool",
5411
+ "35:8": "minecraft:light_gray_wool",
5412
+ "35:9": "minecraft:cyan_wool",
5413
+ "35:10": "minecraft:purple_wool",
5414
+ "35:11": "minecraft:blue_wool",
5415
+ "35:12": "minecraft:brown_wool",
5416
+ "35:13": "minecraft:green_wool",
5417
+ "35:14": "minecraft:red_wool",
5418
+ "35:15": "minecraft:black_wool",
5419
+ "36:0": "minecraft:moving_piston[facing=down,type=normal]",
5420
+ "36:1": "minecraft:moving_piston[facing=up,type=normal]",
5421
+ "36:2": "minecraft:moving_piston[facing=north,type=normal]",
5422
+ "36:3": "minecraft:moving_piston[facing=south,type=normal]",
5423
+ "36:4": "minecraft:moving_piston[facing=west,type=normal]",
5424
+ "36:5": "minecraft:moving_piston[facing=east,type=normal]",
5425
+ "36:8": "minecraft:moving_piston[facing=down,type=sticky]",
5426
+ "36:9": "minecraft:moving_piston[facing=up,type=sticky]",
5427
+ "36:10": "minecraft:moving_piston[facing=north,type=sticky]",
5428
+ "36:11": "minecraft:moving_piston[facing=south,type=sticky]",
5429
+ "36:12": "minecraft:moving_piston[facing=west,type=sticky]",
5430
+ "36:13": "minecraft:moving_piston[facing=east,type=sticky]",
5431
+ "37:0": "minecraft:dandelion",
5432
+ "38:0": "minecraft:poppy",
5433
+ "38:1": "minecraft:blue_orchid",
5434
+ "38:2": "minecraft:allium",
5435
+ "38:3": "minecraft:azure_bluet",
5436
+ "38:4": "minecraft:red_tulip",
5437
+ "38:5": "minecraft:orange_tulip",
5438
+ "38:6": "minecraft:white_tulip",
5439
+ "38:7": "minecraft:pink_tulip",
5440
+ "38:8": "minecraft:oxeye_daisy",
5441
+ "39:0": "minecraft:brown_mushroom",
5442
+ "40:0": "minecraft:red_mushroom",
5443
+ "41:0": "minecraft:gold_block",
5444
+ "42:0": "minecraft:iron_block",
5445
+ "43:0": "minecraft:stone_slab[type=double]",
5446
+ "43:1": "minecraft:sandstone_slab[type=double]",
5447
+ "43:2": "minecraft:petrified_oak_slab[type=double]",
5448
+ "43:3": "minecraft:cobblestone_slab[type=double]",
5449
+ "43:4": "minecraft:brick_slab[type=double]",
5450
+ "43:5": "minecraft:stone_brick_slab[type=double]",
5451
+ "43:6": "minecraft:nether_brick_slab[type=double]",
5452
+ "43:7": "minecraft:quartz_slab[type=double]",
5453
+ "43:8": "minecraft:smooth_stone",
5454
+ "43:9": "minecraft:smooth_sandstone",
5455
+ "43:10": "minecraft:petrified_oak_slab[type=double]",
5456
+ "43:11": "minecraft:cobblestone_slab[type=double]",
5457
+ "43:12": "minecraft:brick_slab[type=double]",
5458
+ "43:13": "minecraft:stone_brick_slab[type=double]",
5459
+ "43:14": "minecraft:nether_brick_slab[type=double]",
5460
+ "43:15": "minecraft:smooth_quartz",
5461
+ "44:0": "minecraft:stone_slab[type=bottom]",
5462
+ "44:1": "minecraft:sandstone_slab[type=bottom]",
5463
+ "44:2": "minecraft:petrified_oak_slab[type=bottom]",
5464
+ "44:3": "minecraft:cobblestone_slab[type=bottom]",
5465
+ "44:4": "minecraft:brick_slab[type=bottom]",
5466
+ "44:5": "minecraft:stone_brick_slab[type=bottom]",
5467
+ "44:6": "minecraft:nether_brick_slab[type=bottom]",
5468
+ "44:7": "minecraft:quartz_slab[type=bottom]",
5469
+ "44:8": "minecraft:stone_slab[type=top]",
5470
+ "44:9": "minecraft:sandstone_slab[type=top]",
5471
+ "44:10": "minecraft:petrified_oak_slab[type=top]",
5472
+ "44:11": "minecraft:cobblestone_slab[type=top]",
5473
+ "44:12": "minecraft:brick_slab[type=top]",
5474
+ "44:13": "minecraft:stone_brick_slab[type=top]",
5475
+ "44:14": "minecraft:nether_brick_slab[type=top]",
5476
+ "44:15": "minecraft:quartz_slab[type=top]",
5477
+ "45:0": "minecraft:bricks",
5478
+ "46:0": "minecraft:tnt[unstable=false]",
5479
+ "46:1": "minecraft:tnt[unstable=true]",
5480
+ "47:0": "minecraft:bookshelf",
5481
+ "48:0": "minecraft:mossy_cobblestone",
5482
+ "49:0": "minecraft:obsidian",
5483
+ "50:1": "minecraft:wall_torch[facing=east]",
5484
+ "50:2": "minecraft:wall_torch[facing=west]",
5485
+ "50:3": "minecraft:wall_torch[facing=south]",
5486
+ "50:4": "minecraft:wall_torch[facing=north]",
5487
+ "50:5": "minecraft:torch",
5488
+ "51:0": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=0]",
5489
+ "51:1": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=1]",
5490
+ "51:2": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=2]",
5491
+ "51:3": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=3]",
5492
+ "51:4": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=4]",
5493
+ "51:5": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=5]",
5494
+ "51:6": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=6]",
5495
+ "51:7": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=7]",
5496
+ "51:8": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=8]",
5497
+ "51:9": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=9]",
5498
+ "51:10": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=10]",
5499
+ "51:11": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=11]",
5500
+ "51:12": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=12]",
5501
+ "51:13": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=13]",
5502
+ "51:14": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=14]",
5503
+ "51:15": "minecraft:fire[east=false,south=false,north=false,west=false,up=false,age=15]",
5504
+ "52:0": "minecraft:spawner",
5505
+ "53:0": "minecraft:oak_stairs[half=bottom,shape=outer_right,facing=east]",
5506
+ "53:1": "minecraft:oak_stairs[half=bottom,shape=outer_right,facing=west]",
5507
+ "53:2": "minecraft:oak_stairs[half=bottom,shape=outer_right,facing=south]",
5508
+ "53:3": "minecraft:oak_stairs[half=bottom,shape=outer_right,facing=north]",
5509
+ "53:4": "minecraft:oak_stairs[half=top,shape=outer_right,facing=east]",
5510
+ "53:5": "minecraft:oak_stairs[half=top,shape=outer_right,facing=west]",
5511
+ "53:6": "minecraft:oak_stairs[half=top,shape=outer_right,facing=south]",
5512
+ "53:7": "minecraft:oak_stairs[half=top,shape=outer_right,facing=north]",
5513
+ "54:2": "minecraft:chest[facing=north,type=single]",
5514
+ "54:3": "minecraft:chest[facing=south,type=single]",
5515
+ "54:4": "minecraft:chest[facing=west,type=single]",
5516
+ "54:5": "minecraft:chest[facing=east,type=single]",
5517
+ "55:0": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=0]",
5518
+ "55:1": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=1]",
5519
+ "55:2": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=2]",
5520
+ "55:3": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=3]",
5521
+ "55:4": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=4]",
5522
+ "55:5": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=5]",
5523
+ "55:6": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=6]",
5524
+ "55:7": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=7]",
5525
+ "55:8": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=8]",
5526
+ "55:9": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=9]",
5527
+ "55:10": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=10]",
5528
+ "55:11": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=11]",
5529
+ "55:12": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=12]",
5530
+ "55:13": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=13]",
5531
+ "55:14": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=14]",
5532
+ "55:15": "minecraft:redstone_wire[east=none,south=none,north=none,west=none,power=15]",
5533
+ "56:0": "minecraft:diamond_ore",
5534
+ "57:0": "minecraft:diamond_block",
5535
+ "58:0": "minecraft:crafting_table",
5536
+ "59:0": "minecraft:wheat[age=0]",
5537
+ "59:1": "minecraft:wheat[age=1]",
5538
+ "59:2": "minecraft:wheat[age=2]",
5539
+ "59:3": "minecraft:wheat[age=3]",
5540
+ "59:4": "minecraft:wheat[age=4]",
5541
+ "59:5": "minecraft:wheat[age=5]",
5542
+ "59:6": "minecraft:wheat[age=6]",
5543
+ "59:7": "minecraft:wheat[age=7]",
5544
+ "60:0": "minecraft:farmland[moisture=0]",
5545
+ "60:1": "minecraft:farmland[moisture=1]",
5546
+ "60:2": "minecraft:farmland[moisture=2]",
5547
+ "60:3": "minecraft:farmland[moisture=3]",
5548
+ "60:4": "minecraft:farmland[moisture=4]",
5549
+ "60:5": "minecraft:farmland[moisture=5]",
5550
+ "60:6": "minecraft:farmland[moisture=6]",
5551
+ "60:7": "minecraft:farmland[moisture=7]",
5552
+ "61:2": "minecraft:furnace[facing=north,lit=false]",
5553
+ "61:3": "minecraft:furnace[facing=south,lit=false]",
5554
+ "61:4": "minecraft:furnace[facing=west,lit=false]",
5555
+ "61:5": "minecraft:furnace[facing=east,lit=false]",
5556
+ "62:2": "minecraft:furnace[facing=north,lit=true]",
5557
+ "62:3": "minecraft:furnace[facing=south,lit=true]",
5558
+ "62:4": "minecraft:furnace[facing=west,lit=true]",
5559
+ "62:5": "minecraft:furnace[facing=east,lit=true]",
5560
+ "63:0": "minecraft:oak_sign[rotation=0]",
5561
+ "63:1": "minecraft:oak_sign[rotation=1]",
5562
+ "63:2": "minecraft:oak_sign[rotation=2]",
5563
+ "63:3": "minecraft:oak_sign[rotation=3]",
5564
+ "63:4": "minecraft:oak_sign[rotation=4]",
5565
+ "63:5": "minecraft:oak_sign[rotation=5]",
5566
+ "63:6": "minecraft:oak_sign[rotation=6]",
5567
+ "63:7": "minecraft:oak_sign[rotation=7]",
5568
+ "63:8": "minecraft:oak_sign[rotation=8]",
5569
+ "63:9": "minecraft:oak_sign[rotation=9]",
5570
+ "63:10": "minecraft:oak_sign[rotation=10]",
5571
+ "63:11": "minecraft:oak_sign[rotation=11]",
5572
+ "63:12": "minecraft:oak_sign[rotation=12]",
5573
+ "63:13": "minecraft:oak_sign[rotation=13]",
5574
+ "63:14": "minecraft:oak_sign[rotation=14]",
5575
+ "63:15": "minecraft:oak_sign[rotation=15]",
5576
+ "64:0": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
5577
+ "64:1": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
5578
+ "64:2": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
5579
+ "64:3": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
5580
+ "64:4": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
5581
+ "64:5": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
5582
+ "64:6": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
5583
+ "64:7": "minecraft:oak_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
5584
+ "64:8": "minecraft:oak_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
5585
+ "64:9": "minecraft:oak_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
5586
+ "64:10": "minecraft:oak_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
5587
+ "64:11": "minecraft:oak_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
5588
+ "65:2": "minecraft:ladder[facing=north]",
5589
+ "65:3": "minecraft:ladder[facing=south]",
5590
+ "65:4": "minecraft:ladder[facing=west]",
5591
+ "65:5": "minecraft:ladder[facing=east]",
5592
+ "66:0": "minecraft:rail[shape=north_south]",
5593
+ "66:1": "minecraft:rail[shape=east_west]",
5594
+ "66:2": "minecraft:rail[shape=ascending_east]",
5595
+ "66:3": "minecraft:rail[shape=ascending_west]",
5596
+ "66:4": "minecraft:rail[shape=ascending_north]",
5597
+ "66:5": "minecraft:rail[shape=ascending_south]",
5598
+ "66:6": "minecraft:rail[shape=south_east]",
5599
+ "66:7": "minecraft:rail[shape=south_west]",
5600
+ "66:8": "minecraft:rail[shape=north_west]",
5601
+ "66:9": "minecraft:rail[shape=north_east]",
5602
+ "67:0": "minecraft:cobblestone_stairs[half=bottom,shape=outer_right,facing=east]",
5603
+ "67:1": "minecraft:cobblestone_stairs[half=bottom,shape=outer_right,facing=west]",
5604
+ "67:2": "minecraft:cobblestone_stairs[half=bottom,shape=outer_right,facing=south]",
5605
+ "67:3": "minecraft:cobblestone_stairs[half=bottom,shape=outer_right,facing=north]",
5606
+ "67:4": "minecraft:cobblestone_stairs[half=top,shape=outer_right,facing=east]",
5607
+ "67:5": "minecraft:cobblestone_stairs[half=top,shape=outer_right,facing=west]",
5608
+ "67:6": "minecraft:cobblestone_stairs[half=top,shape=outer_right,facing=south]",
5609
+ "67:7": "minecraft:cobblestone_stairs[half=top,shape=outer_right,facing=north]",
5610
+ "68:2": "minecraft:oak_wall_sign[facing=north]",
5611
+ "68:3": "minecraft:oak_wall_sign[facing=south]",
5612
+ "68:4": "minecraft:oak_wall_sign[facing=west]",
5613
+ "68:5": "minecraft:oak_wall_sign[facing=east]",
5614
+ "69:0": "minecraft:lever[powered=false,facing=north,face=ceiling]",
5615
+ "69:1": "minecraft:lever[powered=false,facing=east,face=wall]",
5616
+ "69:2": "minecraft:lever[powered=false,facing=west,face=wall]",
5617
+ "69:3": "minecraft:lever[powered=false,facing=south,face=wall]",
5618
+ "69:4": "minecraft:lever[powered=false,facing=north,face=wall]",
5619
+ "69:5": "minecraft:lever[powered=false,facing=east,face=floor]",
5620
+ "69:6": "minecraft:lever[powered=false,facing=north,face=floor]",
5621
+ "69:7": "minecraft:lever[powered=false,facing=east,face=ceiling]",
5622
+ "69:8": "minecraft:lever[powered=true,facing=north,face=ceiling]",
5623
+ "69:9": "minecraft:lever[powered=true,facing=east,face=wall]",
5624
+ "69:10": "minecraft:lever[powered=true,facing=west,face=wall]",
5625
+ "69:11": "minecraft:lever[powered=true,facing=south,face=wall]",
5626
+ "69:12": "minecraft:lever[powered=true,facing=north,face=wall]",
5627
+ "69:13": "minecraft:lever[powered=true,facing=east,face=floor]",
5628
+ "69:14": "minecraft:lever[powered=true,facing=north,face=floor]",
5629
+ "69:15": "minecraft:lever[powered=true,facing=east,face=ceiling]",
5630
+ "70:0": "minecraft:stone_pressure_plate[powered=false]",
5631
+ "70:1": "minecraft:stone_pressure_plate[powered=true]",
5632
+ "71:0": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
5633
+ "71:1": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
5634
+ "71:2": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
5635
+ "71:3": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
5636
+ "71:4": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
5637
+ "71:5": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
5638
+ "71:6": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
5639
+ "71:7": "minecraft:iron_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
5640
+ "71:8": "minecraft:iron_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
5641
+ "71:9": "minecraft:iron_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
5642
+ "71:10": "minecraft:iron_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
5643
+ "71:11": "minecraft:iron_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
5644
+ "72:0": "minecraft:oak_pressure_plate[powered=false]",
5645
+ "72:1": "minecraft:oak_pressure_plate[powered=true]",
5646
+ "73:0": "minecraft:redstone_ore[lit=false]",
5647
+ "74:0": "minecraft:redstone_ore[lit=true]",
5648
+ "75:1": "minecraft:redstone_wall_torch[facing=east,lit=false]",
5649
+ "75:2": "minecraft:redstone_wall_torch[facing=west,lit=false]",
5650
+ "75:3": "minecraft:redstone_wall_torch[facing=south,lit=false]",
5651
+ "75:4": "minecraft:redstone_wall_torch[facing=north,lit=false]",
5652
+ "75:5": "minecraft:redstone_torch[lit=false]",
5653
+ "76:1": "minecraft:redstone_wall_torch[facing=east,lit=true]",
5654
+ "76:2": "minecraft:redstone_wall_torch[facing=west,lit=true]",
5655
+ "76:3": "minecraft:redstone_wall_torch[facing=south,lit=true]",
5656
+ "76:4": "minecraft:redstone_wall_torch[facing=north,lit=true]",
5657
+ "76:5": "minecraft:redstone_torch[lit=true]",
5658
+ "77:0": "minecraft:stone_button[powered=false,facing=east,face=ceiling]",
5659
+ "77:1": "minecraft:stone_button[powered=false,facing=east,face=wall]",
5660
+ "77:2": "minecraft:stone_button[powered=false,facing=west,face=wall]",
5661
+ "77:3": "minecraft:stone_button[powered=false,facing=south,face=wall]",
5662
+ "77:4": "minecraft:stone_button[powered=false,facing=north,face=wall]",
5663
+ "77:5": "minecraft:stone_button[powered=false,facing=east,face=floor]",
5664
+ "77:8": "minecraft:stone_button[powered=true,facing=south,face=ceiling]",
5665
+ "77:9": "minecraft:stone_button[powered=true,facing=east,face=wall]",
5666
+ "77:10": "minecraft:stone_button[powered=true,facing=west,face=wall]",
5667
+ "77:11": "minecraft:stone_button[powered=true,facing=south,face=wall]",
5668
+ "77:12": "minecraft:stone_button[powered=true,facing=north,face=wall]",
5669
+ "77:13": "minecraft:stone_button[powered=true,facing=south,face=floor]",
5670
+ "78:0": "minecraft:snow[layers=1]",
5671
+ "78:1": "minecraft:snow[layers=2]",
5672
+ "78:2": "minecraft:snow[layers=3]",
5673
+ "78:3": "minecraft:snow[layers=4]",
5674
+ "78:4": "minecraft:snow[layers=5]",
5675
+ "78:5": "minecraft:snow[layers=6]",
5676
+ "78:6": "minecraft:snow[layers=7]",
5677
+ "78:7": "minecraft:snow[layers=8]",
5678
+ "79:0": "minecraft:ice",
5679
+ "80:0": "minecraft:snow_block",
5680
+ "81:0": "minecraft:cactus[age=0]",
5681
+ "81:1": "minecraft:cactus[age=1]",
5682
+ "81:2": "minecraft:cactus[age=2]",
5683
+ "81:3": "minecraft:cactus[age=3]",
5684
+ "81:4": "minecraft:cactus[age=4]",
5685
+ "81:5": "minecraft:cactus[age=5]",
5686
+ "81:6": "minecraft:cactus[age=6]",
5687
+ "81:7": "minecraft:cactus[age=7]",
5688
+ "81:8": "minecraft:cactus[age=8]",
5689
+ "81:9": "minecraft:cactus[age=9]",
5690
+ "81:10": "minecraft:cactus[age=10]",
5691
+ "81:11": "minecraft:cactus[age=11]",
5692
+ "81:12": "minecraft:cactus[age=12]",
5693
+ "81:13": "minecraft:cactus[age=13]",
5694
+ "81:14": "minecraft:cactus[age=14]",
5695
+ "81:15": "minecraft:cactus[age=15]",
5696
+ "82:0": "minecraft:clay",
5697
+ "83:0": "minecraft:sugar_cane[age=0]",
5698
+ "83:1": "minecraft:sugar_cane[age=1]",
5699
+ "83:2": "minecraft:sugar_cane[age=2]",
5700
+ "83:3": "minecraft:sugar_cane[age=3]",
5701
+ "83:4": "minecraft:sugar_cane[age=4]",
5702
+ "83:5": "minecraft:sugar_cane[age=5]",
5703
+ "83:6": "minecraft:sugar_cane[age=6]",
5704
+ "83:7": "minecraft:sugar_cane[age=7]",
5705
+ "83:8": "minecraft:sugar_cane[age=8]",
5706
+ "83:9": "minecraft:sugar_cane[age=9]",
5707
+ "83:10": "minecraft:sugar_cane[age=10]",
5708
+ "83:11": "minecraft:sugar_cane[age=11]",
5709
+ "83:12": "minecraft:sugar_cane[age=12]",
5710
+ "83:13": "minecraft:sugar_cane[age=13]",
5711
+ "83:14": "minecraft:sugar_cane[age=14]",
5712
+ "83:15": "minecraft:sugar_cane[age=15]",
5713
+ "84:0": "minecraft:jukebox[has_record=false]",
5714
+ "84:1": "minecraft:jukebox[has_record=true]",
5715
+ "85:0": "minecraft:oak_fence[east=false,south=false,north=false,west=false]",
5716
+ "86:0": "minecraft:carved_pumpkin[facing=south]",
5717
+ "86:1": "minecraft:carved_pumpkin[facing=west]",
5718
+ "86:2": "minecraft:carved_pumpkin[facing=north]",
5719
+ "86:3": "minecraft:carved_pumpkin[facing=east]",
5720
+ "87:0": "minecraft:netherrack",
5721
+ "88:0": "minecraft:soul_sand",
5722
+ "89:0": "minecraft:glowstone",
5723
+ "90:1": "minecraft:nether_portal[axis=x]",
5724
+ "90:2": "minecraft:nether_portal[axis=z]",
5725
+ "91:0": "minecraft:jack_o_lantern[facing=south]",
5726
+ "91:1": "minecraft:jack_o_lantern[facing=west]",
5727
+ "91:2": "minecraft:jack_o_lantern[facing=north]",
5728
+ "91:3": "minecraft:jack_o_lantern[facing=east]",
5729
+ "92:0": "minecraft:cake[bites=0]",
5730
+ "92:1": "minecraft:cake[bites=1]",
5731
+ "92:2": "minecraft:cake[bites=2]",
5732
+ "92:3": "minecraft:cake[bites=3]",
5733
+ "92:4": "minecraft:cake[bites=4]",
5734
+ "92:5": "minecraft:cake[bites=5]",
5735
+ "92:6": "minecraft:cake[bites=6]",
5736
+ "93:0": "minecraft:repeater[delay=1,facing=south,locked=false,powered=false]",
5737
+ "93:1": "minecraft:repeater[delay=1,facing=west,locked=false,powered=false]",
5738
+ "93:2": "minecraft:repeater[delay=1,facing=north,locked=false,powered=false]",
5739
+ "93:3": "minecraft:repeater[delay=1,facing=east,locked=false,powered=false]",
5740
+ "93:4": "minecraft:repeater[delay=2,facing=south,locked=false,powered=false]",
5741
+ "93:5": "minecraft:repeater[delay=2,facing=west,locked=false,powered=false]",
5742
+ "93:6": "minecraft:repeater[delay=2,facing=north,locked=false,powered=false]",
5743
+ "93:7": "minecraft:repeater[delay=2,facing=east,locked=false,powered=false]",
5744
+ "93:8": "minecraft:repeater[delay=3,facing=south,locked=false,powered=false]",
5745
+ "93:9": "minecraft:repeater[delay=3,facing=west,locked=false,powered=false]",
5746
+ "93:10": "minecraft:repeater[delay=3,facing=north,locked=false,powered=false]",
5747
+ "93:11": "minecraft:repeater[delay=3,facing=east,locked=false,powered=false]",
5748
+ "93:12": "minecraft:repeater[delay=4,facing=south,locked=false,powered=false]",
5749
+ "93:13": "minecraft:repeater[delay=4,facing=west,locked=false,powered=false]",
5750
+ "93:14": "minecraft:repeater[delay=4,facing=north,locked=false,powered=false]",
5751
+ "93:15": "minecraft:repeater[delay=4,facing=east,locked=false,powered=false]",
5752
+ "94:0": "minecraft:repeater[delay=1,facing=south,locked=false,powered=true]",
5753
+ "94:1": "minecraft:repeater[delay=1,facing=west,locked=false,powered=true]",
5754
+ "94:2": "minecraft:repeater[delay=1,facing=north,locked=false,powered=true]",
5755
+ "94:3": "minecraft:repeater[delay=1,facing=east,locked=false,powered=true]",
5756
+ "94:4": "minecraft:repeater[delay=2,facing=south,locked=false,powered=true]",
5757
+ "94:5": "minecraft:repeater[delay=2,facing=west,locked=false,powered=true]",
5758
+ "94:6": "minecraft:repeater[delay=2,facing=north,locked=false,powered=true]",
5759
+ "94:7": "minecraft:repeater[delay=2,facing=east,locked=false,powered=true]",
5760
+ "94:8": "minecraft:repeater[delay=3,facing=south,locked=false,powered=true]",
5761
+ "94:9": "minecraft:repeater[delay=3,facing=west,locked=false,powered=true]",
5762
+ "94:10": "minecraft:repeater[delay=3,facing=north,locked=false,powered=true]",
5763
+ "94:11": "minecraft:repeater[delay=3,facing=east,locked=false,powered=true]",
5764
+ "94:12": "minecraft:repeater[delay=4,facing=south,locked=false,powered=true]",
5765
+ "94:13": "minecraft:repeater[delay=4,facing=west,locked=false,powered=true]",
5766
+ "94:14": "minecraft:repeater[delay=4,facing=north,locked=false,powered=true]",
5767
+ "94:15": "minecraft:repeater[delay=4,facing=east,locked=false,powered=true]",
5768
+ "95:0": "minecraft:white_stained_glass",
5769
+ "95:1": "minecraft:orange_stained_glass",
5770
+ "95:2": "minecraft:magenta_stained_glass",
5771
+ "95:3": "minecraft:light_blue_stained_glass",
5772
+ "95:4": "minecraft:yellow_stained_glass",
5773
+ "95:5": "minecraft:lime_stained_glass",
5774
+ "95:6": "minecraft:pink_stained_glass",
5775
+ "95:7": "minecraft:gray_stained_glass",
5776
+ "95:8": "minecraft:light_gray_stained_glass",
5777
+ "95:9": "minecraft:cyan_stained_glass",
5778
+ "95:10": "minecraft:purple_stained_glass",
5779
+ "95:11": "minecraft:blue_stained_glass",
5780
+ "95:12": "minecraft:brown_stained_glass",
5781
+ "95:13": "minecraft:green_stained_glass",
5782
+ "95:14": "minecraft:red_stained_glass",
5783
+ "95:15": "minecraft:black_stained_glass",
5784
+ "96:0": "minecraft:oak_trapdoor[half=bottom,facing=north,open=false,powered=false]",
5785
+ "96:1": "minecraft:oak_trapdoor[half=bottom,facing=south,open=false,powered=false]",
5786
+ "96:2": "minecraft:oak_trapdoor[half=bottom,facing=west,open=false,powered=false]",
5787
+ "96:3": "minecraft:oak_trapdoor[half=bottom,facing=east,open=false,powered=false]",
5788
+ "96:4": "minecraft:oak_trapdoor[half=bottom,facing=north,open=true,powered=true]",
5789
+ "96:5": "minecraft:oak_trapdoor[half=bottom,facing=south,open=true,powered=true]",
5790
+ "96:6": "minecraft:oak_trapdoor[half=bottom,facing=west,open=true,powered=true]",
5791
+ "96:7": "minecraft:oak_trapdoor[half=bottom,facing=east,open=true,powered=true]",
5792
+ "96:8": "minecraft:oak_trapdoor[half=top,facing=north,open=false,powered=false]",
5793
+ "96:9": "minecraft:oak_trapdoor[half=top,facing=south,open=false,powered=false]",
5794
+ "96:10": "minecraft:oak_trapdoor[half=top,facing=west,open=false,powered=false]",
5795
+ "96:11": "minecraft:oak_trapdoor[half=top,facing=east,open=false,powered=false]",
5796
+ "96:12": "minecraft:oak_trapdoor[half=top,facing=north,open=true,powered=true]",
5797
+ "96:13": "minecraft:oak_trapdoor[half=top,facing=south,open=true,powered=true]",
5798
+ "96:14": "minecraft:oak_trapdoor[half=top,facing=west,open=true,powered=true]",
5799
+ "96:15": "minecraft:oak_trapdoor[half=top,facing=east,open=true,powered=true]",
5800
+ "97:0": "minecraft:infested_stone",
5801
+ "97:1": "minecraft:infested_cobblestone",
5802
+ "97:2": "minecraft:infested_stone_bricks",
5803
+ "97:3": "minecraft:infested_mossy_stone_bricks",
5804
+ "97:4": "minecraft:infested_cracked_stone_bricks",
5805
+ "97:5": "minecraft:infested_chiseled_stone_bricks",
5806
+ "98:0": "minecraft:stone_bricks",
5807
+ "98:1": "minecraft:mossy_stone_bricks",
5808
+ "98:2": "minecraft:cracked_stone_bricks",
5809
+ "98:3": "minecraft:chiseled_stone_bricks",
5810
+ "99:0": "minecraft:brown_mushroom_block[north=false,east=false,south=false,west=false,up=false,down=false]",
5811
+ "99:1": "minecraft:brown_mushroom_block[north=true,east=false,south=false,west=true,up=true,down=false]",
5812
+ "99:2": "minecraft:brown_mushroom_block[north=true,east=false,south=false,west=false,up=true,down=false]",
5813
+ "99:3": "minecraft:brown_mushroom_block[north=true,east=true,south=false,west=false,up=true,down=false]",
5814
+ "99:4": "minecraft:brown_mushroom_block[north=false,east=false,south=false,west=true,up=true,down=false]",
5815
+ "99:5": "minecraft:brown_mushroom_block[north=false,east=false,south=false,west=false,up=true,down=false]",
5816
+ "99:6": "minecraft:brown_mushroom_block[north=false,east=true,south=false,west=false,up=true,down=false]",
5817
+ "99:7": "minecraft:brown_mushroom_block[north=false,east=false,south=true,west=true,up=true,down=false]",
5818
+ "99:8": "minecraft:brown_mushroom_block[north=false,east=false,south=true,west=false,up=true,down=false]",
5819
+ "99:9": "minecraft:brown_mushroom_block[north=false,east=true,south=true,west=false,up=true,down=false]",
5820
+ "99:10": "minecraft:mushroom_stem[north=true,east=true,south=true,west=true,up=false,down=false]",
5821
+ "99:14": "minecraft:brown_mushroom_block[north=true,east=true,south=true,west=true,up=true,down=true]",
5822
+ "99:15": "minecraft:mushroom_stem[north=true,east=true,south=true,west=true,up=true,down=true]",
5823
+ "100:0": "minecraft:red_mushroom_block[north=false,east=false,south=false,west=false,up=false,down=false]",
5824
+ "100:1": "minecraft:red_mushroom_block[north=true,east=false,south=false,west=true,up=true,down=false]",
5825
+ "100:2": "minecraft:red_mushroom_block[north=true,east=false,south=false,west=false,up=true,down=false]",
5826
+ "100:3": "minecraft:red_mushroom_block[north=true,east=true,south=false,west=false,up=true,down=false]",
5827
+ "100:4": "minecraft:red_mushroom_block[north=false,east=false,south=false,west=true,up=true,down=false]",
5828
+ "100:5": "minecraft:red_mushroom_block[north=false,east=false,south=false,west=false,up=true,down=false]",
5829
+ "100:6": "minecraft:red_mushroom_block[north=false,east=true,south=false,west=false,up=true,down=false]",
5830
+ "100:7": "minecraft:red_mushroom_block[north=false,east=false,south=true,west=true,up=true,down=false]",
5831
+ "100:8": "minecraft:red_mushroom_block[north=false,east=false,south=true,west=false,up=true,down=false]",
5832
+ "100:9": "minecraft:red_mushroom_block[north=false,east=true,south=true,west=false,up=true,down=false]",
5833
+ "100:10": "minecraft:mushroom_stem[north=true,east=true,south=true,west=true,up=false,down=false]",
5834
+ "100:14": "minecraft:red_mushroom_block[north=true,east=true,south=true,west=true,up=true,down=true]",
5835
+ "100:15": "minecraft:mushroom_stem[north=true,east=true,south=true,west=true,up=true,down=true]",
5836
+ "101:0": "minecraft:iron_bars[east=false,south=false,north=false,west=false]",
5837
+ "102:0": "minecraft:glass_pane[east=false,south=false,north=false,west=false]",
5838
+ "103:0": "minecraft:melon",
5839
+ "104:0": "minecraft:pumpkin_stem[age=0]",
5840
+ "104:1": "minecraft:pumpkin_stem[age=1]",
5841
+ "104:2": "minecraft:pumpkin_stem[age=2]",
5842
+ "104:3": "minecraft:pumpkin_stem[age=3]",
5843
+ "104:4": "minecraft:pumpkin_stem[age=4]",
5844
+ "104:5": "minecraft:pumpkin_stem[age=5]",
5845
+ "104:6": "minecraft:pumpkin_stem[age=6]",
5846
+ "104:7": "minecraft:pumpkin_stem[age=7]",
5847
+ "105:0": "minecraft:melon_stem[age=0]",
5848
+ "105:1": "minecraft:melon_stem[age=1]",
5849
+ "105:2": "minecraft:melon_stem[age=2]",
5850
+ "105:3": "minecraft:melon_stem[age=3]",
5851
+ "105:4": "minecraft:melon_stem[age=4]",
5852
+ "105:5": "minecraft:melon_stem[age=5]",
5853
+ "105:6": "minecraft:melon_stem[age=6]",
5854
+ "105:7": "minecraft:melon_stem[age=7]",
5855
+ "106:0": "minecraft:vine[east=false,south=false,north=false,west=false,up=false]",
5856
+ "106:1": "minecraft:vine[east=false,south=true,north=false,west=false,up=false]",
5857
+ "106:2": "minecraft:vine[east=false,south=false,north=false,west=true,up=false]",
5858
+ "106:3": "minecraft:vine[east=false,south=true,north=false,west=true,up=false]",
5859
+ "106:4": "minecraft:vine[east=false,south=false,north=true,west=false,up=false]",
5860
+ "106:5": "minecraft:vine[east=false,south=true,north=true,west=false,up=false]",
5861
+ "106:6": "minecraft:vine[east=false,south=false,north=true,west=true,up=false]",
5862
+ "106:7": "minecraft:vine[east=false,south=true,north=true,west=true,up=false]",
5863
+ "106:8": "minecraft:vine[east=true,south=false,north=false,west=false,up=false]",
5864
+ "106:9": "minecraft:vine[east=true,south=true,north=false,west=false,up=false]",
5865
+ "106:10": "minecraft:vine[east=true,south=false,north=false,west=true,up=false]",
5866
+ "106:11": "minecraft:vine[east=true,south=true,north=false,west=true,up=false]",
5867
+ "106:12": "minecraft:vine[east=true,south=false,north=true,west=false,up=false]",
5868
+ "106:13": "minecraft:vine[east=true,south=true,north=true,west=false,up=false]",
5869
+ "106:14": "minecraft:vine[east=true,south=false,north=true,west=true,up=false]",
5870
+ "106:15": "minecraft:vine[east=true,south=true,north=true,west=true,up=false]",
5871
+ "107:0": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
5872
+ "107:1": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
5873
+ "107:2": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
5874
+ "107:3": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
5875
+ "107:4": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
5876
+ "107:5": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
5877
+ "107:6": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
5878
+ "107:7": "minecraft:oak_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
5879
+ "107:8": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
5880
+ "107:9": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
5881
+ "107:10": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
5882
+ "107:11": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
5883
+ "107:12": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
5884
+ "107:13": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
5885
+ "107:14": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
5886
+ "107:15": "minecraft:oak_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
5887
+ "108:0": "minecraft:brick_stairs[half=bottom,shape=outer_right,facing=east]",
5888
+ "108:1": "minecraft:brick_stairs[half=bottom,shape=outer_right,facing=west]",
5889
+ "108:2": "minecraft:brick_stairs[half=bottom,shape=outer_right,facing=south]",
5890
+ "108:3": "minecraft:brick_stairs[half=bottom,shape=outer_right,facing=north]",
5891
+ "108:4": "minecraft:brick_stairs[half=top,shape=outer_right,facing=east]",
5892
+ "108:5": "minecraft:brick_stairs[half=top,shape=outer_right,facing=west]",
5893
+ "108:6": "minecraft:brick_stairs[half=top,shape=outer_right,facing=south]",
5894
+ "108:7": "minecraft:brick_stairs[half=top,shape=outer_right,facing=north]",
5895
+ "109:0": "minecraft:stone_brick_stairs[half=bottom,shape=outer_right,facing=east]",
5896
+ "109:1": "minecraft:stone_brick_stairs[half=bottom,shape=outer_right,facing=west]",
5897
+ "109:2": "minecraft:stone_brick_stairs[half=bottom,shape=outer_right,facing=south]",
5898
+ "109:3": "minecraft:stone_brick_stairs[half=bottom,shape=outer_right,facing=north]",
5899
+ "109:4": "minecraft:stone_brick_stairs[half=top,shape=outer_right,facing=east]",
5900
+ "109:5": "minecraft:stone_brick_stairs[half=top,shape=outer_right,facing=west]",
5901
+ "109:6": "minecraft:stone_brick_stairs[half=top,shape=outer_right,facing=south]",
5902
+ "109:7": "minecraft:stone_brick_stairs[half=top,shape=outer_right,facing=north]",
5903
+ "110:0": "minecraft:mycelium[snowy=false]",
5904
+ "111:0": "minecraft:lily_pad",
5905
+ "112:0": "minecraft:nether_bricks",
5906
+ "113:0": "minecraft:nether_brick_fence[east=false,south=false,north=false,west=false]",
5907
+ "114:0": "minecraft:nether_brick_stairs[half=bottom,shape=outer_right,facing=east]",
5908
+ "114:1": "minecraft:nether_brick_stairs[half=bottom,shape=outer_right,facing=west]",
5909
+ "114:2": "minecraft:nether_brick_stairs[half=bottom,shape=outer_right,facing=south]",
5910
+ "114:3": "minecraft:nether_brick_stairs[half=bottom,shape=outer_right,facing=north]",
5911
+ "114:4": "minecraft:nether_brick_stairs[half=top,shape=outer_right,facing=east]",
5912
+ "114:5": "minecraft:nether_brick_stairs[half=top,shape=outer_right,facing=west]",
5913
+ "114:6": "minecraft:nether_brick_stairs[half=top,shape=outer_right,facing=south]",
5914
+ "114:7": "minecraft:nether_brick_stairs[half=top,shape=outer_right,facing=north]",
5915
+ "115:0": "minecraft:nether_wart[age=0]",
5916
+ "115:1": "minecraft:nether_wart[age=1]",
5917
+ "115:2": "minecraft:nether_wart[age=2]",
5918
+ "115:3": "minecraft:nether_wart[age=3]",
5919
+ "116:0": "minecraft:enchanting_table",
5920
+ "117:0": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=false,has_bottle_2=false]",
5921
+ "117:1": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=false,has_bottle_2=false]",
5922
+ "117:2": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=true,has_bottle_2=false]",
5923
+ "117:3": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=true,has_bottle_2=false]",
5924
+ "117:4": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=false,has_bottle_2=true]",
5925
+ "117:5": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=false,has_bottle_2=true]",
5926
+ "117:6": "minecraft:brewing_stand[has_bottle_0=false,has_bottle_1=true,has_bottle_2=true]",
5927
+ "117:7": "minecraft:brewing_stand[has_bottle_0=true,has_bottle_1=true,has_bottle_2=true]",
5928
+ "118:0": "minecraft:cauldron",
5929
+ "118:1": "minecraft:water_cauldron[level=1]",
5930
+ "118:2": "minecraft:water_cauldron[level=2]",
5931
+ "118:3": "minecraft:water_cauldron[level=3]",
5932
+ "119:0": "minecraft:end_portal",
5933
+ "120:0": "minecraft:end_portal_frame[eye=false,facing=south]",
5934
+ "120:1": "minecraft:end_portal_frame[eye=false,facing=west]",
5935
+ "120:2": "minecraft:end_portal_frame[eye=false,facing=north]",
5936
+ "120:3": "minecraft:end_portal_frame[eye=false,facing=east]",
5937
+ "120:4": "minecraft:end_portal_frame[eye=true,facing=south]",
5938
+ "120:5": "minecraft:end_portal_frame[eye=true,facing=west]",
5939
+ "120:6": "minecraft:end_portal_frame[eye=true,facing=north]",
5940
+ "120:7": "minecraft:end_portal_frame[eye=true,facing=east]",
5941
+ "121:0": "minecraft:end_stone",
5942
+ "122:0": "minecraft:dragon_egg",
5943
+ "123:0": "minecraft:redstone_lamp[lit=false]",
5944
+ "124:0": "minecraft:redstone_lamp[lit=true]",
5945
+ "125:0": "minecraft:oak_slab[type=double]",
5946
+ "125:1": "minecraft:spruce_slab[type=double]",
5947
+ "125:2": "minecraft:birch_slab[type=double]",
5948
+ "125:3": "minecraft:jungle_slab[type=double]",
5949
+ "125:4": "minecraft:acacia_slab[type=double]",
5950
+ "125:5": "minecraft:dark_oak_slab[type=double]",
5951
+ "126:0": "minecraft:oak_slab[type=bottom]",
5952
+ "126:1": "minecraft:spruce_slab[type=bottom]",
5953
+ "126:2": "minecraft:birch_slab[type=bottom]",
5954
+ "126:3": "minecraft:jungle_slab[type=bottom]",
5955
+ "126:4": "minecraft:acacia_slab[type=bottom]",
5956
+ "126:5": "minecraft:dark_oak_slab[type=bottom]",
5957
+ "126:8": "minecraft:oak_slab[type=top]",
5958
+ "126:9": "minecraft:spruce_slab[type=top]",
5959
+ "126:10": "minecraft:birch_slab[type=top]",
5960
+ "126:11": "minecraft:jungle_slab[type=top]",
5961
+ "126:12": "minecraft:acacia_slab[type=top]",
5962
+ "126:13": "minecraft:dark_oak_slab[type=top]",
5963
+ "127:0": "minecraft:cocoa[facing=south,age=0]",
5964
+ "127:1": "minecraft:cocoa[facing=west,age=0]",
5965
+ "127:2": "minecraft:cocoa[facing=north,age=0]",
5966
+ "127:3": "minecraft:cocoa[facing=east,age=0]",
5967
+ "127:4": "minecraft:cocoa[facing=south,age=1]",
5968
+ "127:5": "minecraft:cocoa[facing=west,age=1]",
5969
+ "127:6": "minecraft:cocoa[facing=north,age=1]",
5970
+ "127:7": "minecraft:cocoa[facing=east,age=1]",
5971
+ "127:8": "minecraft:cocoa[facing=south,age=2]",
5972
+ "127:9": "minecraft:cocoa[facing=west,age=2]",
5973
+ "127:10": "minecraft:cocoa[facing=north,age=2]",
5974
+ "127:11": "minecraft:cocoa[facing=east,age=2]",
5975
+ "128:0": "minecraft:sandstone_stairs[half=bottom,shape=outer_right,facing=east]",
5976
+ "128:1": "minecraft:sandstone_stairs[half=bottom,shape=outer_right,facing=west]",
5977
+ "128:2": "minecraft:sandstone_stairs[half=bottom,shape=outer_right,facing=south]",
5978
+ "128:3": "minecraft:sandstone_stairs[half=bottom,shape=outer_right,facing=north]",
5979
+ "128:4": "minecraft:sandstone_stairs[half=top,shape=outer_right,facing=east]",
5980
+ "128:5": "minecraft:sandstone_stairs[half=top,shape=outer_right,facing=west]",
5981
+ "128:6": "minecraft:sandstone_stairs[half=top,shape=outer_right,facing=south]",
5982
+ "128:7": "minecraft:sandstone_stairs[half=top,shape=outer_right,facing=north]",
5983
+ "129:0": "minecraft:emerald_ore",
5984
+ "130:2": "minecraft:ender_chest[facing=north]",
5985
+ "130:3": "minecraft:ender_chest[facing=south]",
5986
+ "130:4": "minecraft:ender_chest[facing=west]",
5987
+ "130:5": "minecraft:ender_chest[facing=east]",
5988
+ "131:0": "minecraft:tripwire_hook[powered=false,attached=false,facing=south]",
5989
+ "131:1": "minecraft:tripwire_hook[powered=false,attached=false,facing=west]",
5990
+ "131:2": "minecraft:tripwire_hook[powered=false,attached=false,facing=north]",
5991
+ "131:3": "minecraft:tripwire_hook[powered=false,attached=false,facing=east]",
5992
+ "131:4": "minecraft:tripwire_hook[powered=false,attached=true,facing=south]",
5993
+ "131:5": "minecraft:tripwire_hook[powered=false,attached=true,facing=west]",
5994
+ "131:6": "minecraft:tripwire_hook[powered=false,attached=true,facing=north]",
5995
+ "131:7": "minecraft:tripwire_hook[powered=false,attached=true,facing=east]",
5996
+ "131:8": "minecraft:tripwire_hook[powered=true,attached=false,facing=south]",
5997
+ "131:9": "minecraft:tripwire_hook[powered=true,attached=false,facing=west]",
5998
+ "131:10": "minecraft:tripwire_hook[powered=true,attached=false,facing=north]",
5999
+ "131:11": "minecraft:tripwire_hook[powered=true,attached=false,facing=east]",
6000
+ "131:12": "minecraft:tripwire_hook[powered=true,attached=true,facing=south]",
6001
+ "131:13": "minecraft:tripwire_hook[powered=true,attached=true,facing=west]",
6002
+ "131:14": "minecraft:tripwire_hook[powered=true,attached=true,facing=north]",
6003
+ "131:15": "minecraft:tripwire_hook[powered=true,attached=true,facing=east]",
6004
+ "132:0": "minecraft:tripwire[disarmed=false,east=false,powered=false,south=false,north=false,west=false,attached=false]",
6005
+ "132:1": "minecraft:tripwire[disarmed=false,east=false,powered=true,south=false,north=false,west=false,attached=false]",
6006
+ "132:4": "minecraft:tripwire[disarmed=false,east=false,powered=false,south=false,north=false,west=false,attached=true]",
6007
+ "132:5": "minecraft:tripwire[disarmed=false,east=false,powered=true,south=false,north=false,west=false,attached=true]",
6008
+ "132:8": "minecraft:tripwire[disarmed=true,east=false,powered=false,south=false,north=false,west=false,attached=false]",
6009
+ "132:9": "minecraft:tripwire[disarmed=true,east=false,powered=true,south=false,north=false,west=false,attached=false]",
6010
+ "132:12": "minecraft:tripwire[disarmed=true,east=false,powered=false,south=false,north=false,west=false,attached=true]",
6011
+ "132:13": "minecraft:tripwire[disarmed=true,east=false,powered=true,south=false,north=false,west=false,attached=true]",
6012
+ "133:0": "minecraft:emerald_block",
6013
+ "134:0": "minecraft:spruce_stairs[half=bottom,shape=outer_right,facing=east]",
6014
+ "134:1": "minecraft:spruce_stairs[half=bottom,shape=outer_right,facing=west]",
6015
+ "134:2": "minecraft:spruce_stairs[half=bottom,shape=outer_right,facing=south]",
6016
+ "134:3": "minecraft:spruce_stairs[half=bottom,shape=outer_right,facing=north]",
6017
+ "134:4": "minecraft:spruce_stairs[half=top,shape=outer_right,facing=east]",
6018
+ "134:5": "minecraft:spruce_stairs[half=top,shape=outer_right,facing=west]",
6019
+ "134:6": "minecraft:spruce_stairs[half=top,shape=outer_right,facing=south]",
6020
+ "134:7": "minecraft:spruce_stairs[half=top,shape=outer_right,facing=north]",
6021
+ "135:0": "minecraft:birch_stairs[half=bottom,shape=outer_right,facing=east]",
6022
+ "135:1": "minecraft:birch_stairs[half=bottom,shape=outer_right,facing=west]",
6023
+ "135:2": "minecraft:birch_stairs[half=bottom,shape=outer_right,facing=south]",
6024
+ "135:3": "minecraft:birch_stairs[half=bottom,shape=outer_right,facing=north]",
6025
+ "135:4": "minecraft:birch_stairs[half=top,shape=outer_right,facing=east]",
6026
+ "135:5": "minecraft:birch_stairs[half=top,shape=outer_right,facing=west]",
6027
+ "135:6": "minecraft:birch_stairs[half=top,shape=outer_right,facing=south]",
6028
+ "135:7": "minecraft:birch_stairs[half=top,shape=outer_right,facing=north]",
6029
+ "136:0": "minecraft:jungle_stairs[half=bottom,shape=outer_right,facing=east]",
6030
+ "136:1": "minecraft:jungle_stairs[half=bottom,shape=outer_right,facing=west]",
6031
+ "136:2": "minecraft:jungle_stairs[half=bottom,shape=outer_right,facing=south]",
6032
+ "136:3": "minecraft:jungle_stairs[half=bottom,shape=outer_right,facing=north]",
6033
+ "136:4": "minecraft:jungle_stairs[half=top,shape=outer_right,facing=east]",
6034
+ "136:5": "minecraft:jungle_stairs[half=top,shape=outer_right,facing=west]",
6035
+ "136:6": "minecraft:jungle_stairs[half=top,shape=outer_right,facing=south]",
6036
+ "136:7": "minecraft:jungle_stairs[half=top,shape=outer_right,facing=north]",
6037
+ "137:0": "minecraft:command_block[conditional=false,facing=down]",
6038
+ "137:1": "minecraft:command_block[conditional=false,facing=up]",
6039
+ "137:2": "minecraft:command_block[conditional=false,facing=north]",
6040
+ "137:3": "minecraft:command_block[conditional=false,facing=south]",
6041
+ "137:4": "minecraft:command_block[conditional=false,facing=west]",
6042
+ "137:5": "minecraft:command_block[conditional=false,facing=east]",
6043
+ "137:8": "minecraft:command_block[conditional=true,facing=down]",
6044
+ "137:9": "minecraft:command_block[conditional=true,facing=up]",
6045
+ "137:10": "minecraft:command_block[conditional=true,facing=north]",
6046
+ "137:11": "minecraft:command_block[conditional=true,facing=south]",
6047
+ "137:12": "minecraft:command_block[conditional=true,facing=west]",
6048
+ "137:13": "minecraft:command_block[conditional=true,facing=east]",
6049
+ "138:0": "minecraft:beacon",
6050
+ "139:0": "minecraft:cobblestone_wall[east=false,south=false,north=false,west=false,up=false]",
6051
+ "139:1": "minecraft:mossy_cobblestone_wall[east=false,south=false,north=false,west=false,up=false]",
6052
+ "140:0": "minecraft:flower_pot",
6053
+ "140:1": "minecraft:potted_poppy",
6054
+ "140:2": "minecraft:potted_dandelion",
6055
+ "140:3": "minecraft:potted_oak_sapling",
6056
+ "140:4": "minecraft:potted_spruce_sapling",
6057
+ "140:5": "minecraft:potted_birch_sapling",
6058
+ "140:6": "minecraft:potted_jungle_sapling",
6059
+ "140:7": "minecraft:potted_red_mushroom",
6060
+ "140:8": "minecraft:potted_brown_mushroom",
6061
+ "140:9": "minecraft:potted_cactus",
6062
+ "140:10": "minecraft:potted_dead_bush",
6063
+ "140:11": "minecraft:potted_fern",
6064
+ "140:12": "minecraft:potted_acacia_sapling",
6065
+ "140:13": "minecraft:potted_dark_oak_sapling",
6066
+ "140:14": "minecraft:potted_blue_orchid",
6067
+ "140:15": "minecraft:potted_allium",
6068
+ "141:0": "minecraft:carrots[age=0]",
6069
+ "141:1": "minecraft:carrots[age=1]",
6070
+ "141:2": "minecraft:carrots[age=2]",
6071
+ "141:3": "minecraft:carrots[age=3]",
6072
+ "141:4": "minecraft:carrots[age=4]",
6073
+ "141:5": "minecraft:carrots[age=5]",
6074
+ "141:6": "minecraft:carrots[age=6]",
6075
+ "141:7": "minecraft:carrots[age=7]",
6076
+ "142:0": "minecraft:potatoes[age=0]",
6077
+ "142:1": "minecraft:potatoes[age=1]",
6078
+ "142:2": "minecraft:potatoes[age=2]",
6079
+ "142:3": "minecraft:potatoes[age=3]",
6080
+ "142:4": "minecraft:potatoes[age=4]",
6081
+ "142:5": "minecraft:potatoes[age=5]",
6082
+ "142:6": "minecraft:potatoes[age=6]",
6083
+ "142:7": "minecraft:potatoes[age=7]",
6084
+ "143:0": "minecraft:oak_button[powered=false,facing=east,face=ceiling]",
6085
+ "143:1": "minecraft:oak_button[powered=false,facing=east,face=wall]",
6086
+ "143:2": "minecraft:oak_button[powered=false,facing=west,face=wall]",
6087
+ "143:3": "minecraft:oak_button[powered=false,facing=south,face=wall]",
6088
+ "143:4": "minecraft:oak_button[powered=false,facing=north,face=wall]",
6089
+ "143:5": "minecraft:oak_button[powered=false,facing=east,face=floor]",
6090
+ "143:8": "minecraft:oak_button[powered=true,facing=south,face=ceiling]",
6091
+ "143:9": "minecraft:oak_button[powered=true,facing=east,face=wall]",
6092
+ "143:10": "minecraft:oak_button[powered=true,facing=west,face=wall]",
6093
+ "143:11": "minecraft:oak_button[powered=true,facing=south,face=wall]",
6094
+ "143:12": "minecraft:oak_button[powered=true,facing=north,face=wall]",
6095
+ "143:13": "minecraft:oak_button[powered=true,facing=south,face=floor]",
6096
+ "144:0": "minecraft:skeleton_skull[rotation=0]",
6097
+ "144:1": "minecraft:skeleton_skull[rotation=4]",
6098
+ "144:2": "minecraft:skeleton_wall_skull[facing=north]",
6099
+ "144:3": "minecraft:skeleton_wall_skull[facing=south]",
6100
+ "144:4": "minecraft:skeleton_wall_skull[facing=west]",
6101
+ "144:5": "minecraft:skeleton_wall_skull[facing=east]",
6102
+ "144:8": "minecraft:skeleton_skull[rotation=8]",
6103
+ "144:9": "minecraft:skeleton_skull[rotation=12]",
6104
+ "144:10": "minecraft:skeleton_wall_skull[facing=north]",
6105
+ "144:11": "minecraft:skeleton_wall_skull[facing=south]",
6106
+ "144:12": "minecraft:skeleton_wall_skull[facing=west]",
6107
+ "144:13": "minecraft:skeleton_wall_skull[facing=east]",
6108
+ "145:0": "minecraft:anvil[facing=south]",
6109
+ "145:1": "minecraft:anvil[facing=west]",
6110
+ "145:2": "minecraft:anvil[facing=north]",
6111
+ "145:3": "minecraft:anvil[facing=east]",
6112
+ "145:4": "minecraft:chipped_anvil[facing=south]",
6113
+ "145:5": "minecraft:chipped_anvil[facing=west]",
6114
+ "145:6": "minecraft:chipped_anvil[facing=north]",
6115
+ "145:7": "minecraft:chipped_anvil[facing=east]",
6116
+ "145:8": "minecraft:damaged_anvil[facing=south]",
6117
+ "145:9": "minecraft:damaged_anvil[facing=west]",
6118
+ "145:10": "minecraft:damaged_anvil[facing=north]",
6119
+ "145:11": "minecraft:damaged_anvil[facing=east]",
6120
+ "146:2": "minecraft:trapped_chest[facing=north,type=single]",
6121
+ "146:3": "minecraft:trapped_chest[facing=south,type=single]",
6122
+ "146:4": "minecraft:trapped_chest[facing=west,type=single]",
6123
+ "146:5": "minecraft:trapped_chest[facing=east,type=single]",
6124
+ "147:0": "minecraft:light_weighted_pressure_plate[power=0]",
6125
+ "147:1": "minecraft:light_weighted_pressure_plate[power=1]",
6126
+ "147:2": "minecraft:light_weighted_pressure_plate[power=2]",
6127
+ "147:3": "minecraft:light_weighted_pressure_plate[power=3]",
6128
+ "147:4": "minecraft:light_weighted_pressure_plate[power=4]",
6129
+ "147:5": "minecraft:light_weighted_pressure_plate[power=5]",
6130
+ "147:6": "minecraft:light_weighted_pressure_plate[power=6]",
6131
+ "147:7": "minecraft:light_weighted_pressure_plate[power=7]",
6132
+ "147:8": "minecraft:light_weighted_pressure_plate[power=8]",
6133
+ "147:9": "minecraft:light_weighted_pressure_plate[power=9]",
6134
+ "147:10": "minecraft:light_weighted_pressure_plate[power=10]",
6135
+ "147:11": "minecraft:light_weighted_pressure_plate[power=11]",
6136
+ "147:12": "minecraft:light_weighted_pressure_plate[power=12]",
6137
+ "147:13": "minecraft:light_weighted_pressure_plate[power=13]",
6138
+ "147:14": "minecraft:light_weighted_pressure_plate[power=14]",
6139
+ "147:15": "minecraft:light_weighted_pressure_plate[power=15]",
6140
+ "148:0": "minecraft:heavy_weighted_pressure_plate[power=0]",
6141
+ "148:1": "minecraft:heavy_weighted_pressure_plate[power=1]",
6142
+ "148:2": "minecraft:heavy_weighted_pressure_plate[power=2]",
6143
+ "148:3": "minecraft:heavy_weighted_pressure_plate[power=3]",
6144
+ "148:4": "minecraft:heavy_weighted_pressure_plate[power=4]",
6145
+ "148:5": "minecraft:heavy_weighted_pressure_plate[power=5]",
6146
+ "148:6": "minecraft:heavy_weighted_pressure_plate[power=6]",
6147
+ "148:7": "minecraft:heavy_weighted_pressure_plate[power=7]",
6148
+ "148:8": "minecraft:heavy_weighted_pressure_plate[power=8]",
6149
+ "148:9": "minecraft:heavy_weighted_pressure_plate[power=9]",
6150
+ "148:10": "minecraft:heavy_weighted_pressure_plate[power=10]",
6151
+ "148:11": "minecraft:heavy_weighted_pressure_plate[power=11]",
6152
+ "148:12": "minecraft:heavy_weighted_pressure_plate[power=12]",
6153
+ "148:13": "minecraft:heavy_weighted_pressure_plate[power=13]",
6154
+ "148:14": "minecraft:heavy_weighted_pressure_plate[power=14]",
6155
+ "148:15": "minecraft:heavy_weighted_pressure_plate[power=15]",
6156
+ "149:0": "minecraft:comparator[mode=compare,powered=false,facing=south]",
6157
+ "149:1": "minecraft:comparator[mode=compare,powered=false,facing=west]",
6158
+ "149:2": "minecraft:comparator[mode=compare,powered=false,facing=north]",
6159
+ "149:3": "minecraft:comparator[mode=compare,powered=false,facing=east]",
6160
+ "149:4": "minecraft:comparator[mode=subtract,powered=false,facing=south]",
6161
+ "149:5": "minecraft:comparator[mode=subtract,powered=false,facing=west]",
6162
+ "149:6": "minecraft:comparator[mode=subtract,powered=false,facing=north]",
6163
+ "149:7": "minecraft:comparator[mode=subtract,powered=false,facing=east]",
6164
+ "149:8": "minecraft:comparator[mode=compare,powered=false,facing=south]",
6165
+ "149:9": "minecraft:comparator[mode=compare,powered=false,facing=west]",
6166
+ "149:10": "minecraft:comparator[mode=compare,powered=false,facing=north]",
6167
+ "149:11": "minecraft:comparator[mode=compare,powered=false,facing=east]",
6168
+ "149:12": "minecraft:comparator[mode=subtract,powered=false,facing=south]",
6169
+ "149:13": "minecraft:comparator[mode=subtract,powered=false,facing=west]",
6170
+ "149:14": "minecraft:comparator[mode=subtract,powered=false,facing=north]",
6171
+ "149:15": "minecraft:comparator[mode=subtract,powered=false,facing=east]",
6172
+ "150:0": "minecraft:comparator[mode=compare,powered=true,facing=south]",
6173
+ "150:1": "minecraft:comparator[mode=compare,powered=true,facing=west]",
6174
+ "150:2": "minecraft:comparator[mode=compare,powered=true,facing=north]",
6175
+ "150:3": "minecraft:comparator[mode=compare,powered=true,facing=east]",
6176
+ "150:4": "minecraft:comparator[mode=subtract,powered=true,facing=south]",
6177
+ "150:5": "minecraft:comparator[mode=subtract,powered=true,facing=west]",
6178
+ "150:6": "minecraft:comparator[mode=subtract,powered=true,facing=north]",
6179
+ "150:7": "minecraft:comparator[mode=subtract,powered=true,facing=east]",
6180
+ "150:8": "minecraft:comparator[mode=compare,powered=true,facing=south]",
6181
+ "150:9": "minecraft:comparator[mode=compare,powered=true,facing=west]",
6182
+ "150:10": "minecraft:comparator[mode=compare,powered=true,facing=north]",
6183
+ "150:11": "minecraft:comparator[mode=compare,powered=true,facing=east]",
6184
+ "150:12": "minecraft:comparator[mode=subtract,powered=true,facing=south]",
6185
+ "150:13": "minecraft:comparator[mode=subtract,powered=true,facing=west]",
6186
+ "150:14": "minecraft:comparator[mode=subtract,powered=true,facing=north]",
6187
+ "150:15": "minecraft:comparator[mode=subtract,powered=true,facing=east]",
6188
+ "151:0": "minecraft:daylight_detector[inverted=false,power=0]",
6189
+ "151:1": "minecraft:daylight_detector[inverted=false,power=1]",
6190
+ "151:2": "minecraft:daylight_detector[inverted=false,power=2]",
6191
+ "151:3": "minecraft:daylight_detector[inverted=false,power=3]",
6192
+ "151:4": "minecraft:daylight_detector[inverted=false,power=4]",
6193
+ "151:5": "minecraft:daylight_detector[inverted=false,power=5]",
6194
+ "151:6": "minecraft:daylight_detector[inverted=false,power=6]",
6195
+ "151:7": "minecraft:daylight_detector[inverted=false,power=7]",
6196
+ "151:8": "minecraft:daylight_detector[inverted=false,power=8]",
6197
+ "151:9": "minecraft:daylight_detector[inverted=false,power=9]",
6198
+ "151:10": "minecraft:daylight_detector[inverted=false,power=10]",
6199
+ "151:11": "minecraft:daylight_detector[inverted=false,power=11]",
6200
+ "151:12": "minecraft:daylight_detector[inverted=false,power=12]",
6201
+ "151:13": "minecraft:daylight_detector[inverted=false,power=13]",
6202
+ "151:14": "minecraft:daylight_detector[inverted=false,power=14]",
6203
+ "151:15": "minecraft:daylight_detector[inverted=false,power=15]",
6204
+ "152:0": "minecraft:redstone_block",
6205
+ "153:0": "minecraft:nether_quartz_ore",
6206
+ "154:0": "minecraft:hopper[facing=down,enabled=true]",
6207
+ "154:2": "minecraft:hopper[facing=north,enabled=true]",
6208
+ "154:3": "minecraft:hopper[facing=south,enabled=true]",
6209
+ "154:4": "minecraft:hopper[facing=west,enabled=true]",
6210
+ "154:5": "minecraft:hopper[facing=east,enabled=true]",
6211
+ "154:8": "minecraft:hopper[facing=down,enabled=false]",
6212
+ "154:10": "minecraft:hopper[facing=north,enabled=false]",
6213
+ "154:11": "minecraft:hopper[facing=south,enabled=false]",
6214
+ "154:12": "minecraft:hopper[facing=west,enabled=false]",
6215
+ "154:13": "minecraft:hopper[facing=east,enabled=false]",
6216
+ "155:0": "minecraft:quartz_block",
6217
+ "155:1": "minecraft:chiseled_quartz_block",
6218
+ "155:2": "minecraft:quartz_pillar[axis=y]",
6219
+ "155:3": "minecraft:quartz_pillar[axis=x]",
6220
+ "155:4": "minecraft:quartz_pillar[axis=z]",
6221
+ "155:6": "minecraft:quartz_pillar[axis=x]",
6222
+ "155:10": "minecraft:quartz_pillar[axis=z]",
6223
+ "156:0": "minecraft:quartz_stairs[half=bottom,shape=outer_right,facing=east]",
6224
+ "156:1": "minecraft:quartz_stairs[half=bottom,shape=outer_right,facing=west]",
6225
+ "156:2": "minecraft:quartz_stairs[half=bottom,shape=outer_right,facing=south]",
6226
+ "156:3": "minecraft:quartz_stairs[half=bottom,shape=outer_right,facing=north]",
6227
+ "156:4": "minecraft:quartz_stairs[half=top,shape=outer_right,facing=east]",
6228
+ "156:5": "minecraft:quartz_stairs[half=top,shape=outer_right,facing=west]",
6229
+ "156:6": "minecraft:quartz_stairs[half=top,shape=outer_right,facing=south]",
6230
+ "156:7": "minecraft:quartz_stairs[half=top,shape=outer_right,facing=north]",
6231
+ "157:0": "minecraft:activator_rail[shape=north_south,powered=false]",
6232
+ "157:1": "minecraft:activator_rail[shape=east_west,powered=false]",
6233
+ "157:2": "minecraft:activator_rail[shape=ascending_east,powered=false]",
6234
+ "157:3": "minecraft:activator_rail[shape=ascending_west,powered=false]",
6235
+ "157:4": "minecraft:activator_rail[shape=ascending_north,powered=false]",
6236
+ "157:5": "minecraft:activator_rail[shape=ascending_south,powered=false]",
6237
+ "157:8": "minecraft:activator_rail[shape=north_south,powered=true]",
6238
+ "157:9": "minecraft:activator_rail[shape=east_west,powered=true]",
6239
+ "157:10": "minecraft:activator_rail[shape=ascending_east,powered=true]",
6240
+ "157:11": "minecraft:activator_rail[shape=ascending_west,powered=true]",
6241
+ "157:12": "minecraft:activator_rail[shape=ascending_north,powered=true]",
6242
+ "157:13": "minecraft:activator_rail[shape=ascending_south,powered=true]",
6243
+ "158:0": "minecraft:dropper[triggered=false,facing=down]",
6244
+ "158:1": "minecraft:dropper[triggered=false,facing=up]",
6245
+ "158:2": "minecraft:dropper[triggered=false,facing=north]",
6246
+ "158:3": "minecraft:dropper[triggered=false,facing=south]",
6247
+ "158:4": "minecraft:dropper[triggered=false,facing=west]",
6248
+ "158:5": "minecraft:dropper[triggered=false,facing=east]",
6249
+ "158:8": "minecraft:dropper[triggered=true,facing=down]",
6250
+ "158:9": "minecraft:dropper[triggered=true,facing=up]",
6251
+ "158:10": "minecraft:dropper[triggered=true,facing=north]",
6252
+ "158:11": "minecraft:dropper[triggered=true,facing=south]",
6253
+ "158:12": "minecraft:dropper[triggered=true,facing=west]",
6254
+ "158:13": "minecraft:dropper[triggered=true,facing=east]",
6255
+ "159:0": "minecraft:white_terracotta",
6256
+ "159:1": "minecraft:orange_terracotta",
6257
+ "159:2": "minecraft:magenta_terracotta",
6258
+ "159:3": "minecraft:light_blue_terracotta",
6259
+ "159:4": "minecraft:yellow_terracotta",
6260
+ "159:5": "minecraft:lime_terracotta",
6261
+ "159:6": "minecraft:pink_terracotta",
6262
+ "159:7": "minecraft:gray_terracotta",
6263
+ "159:8": "minecraft:light_gray_terracotta",
6264
+ "159:9": "minecraft:cyan_terracotta",
6265
+ "159:10": "minecraft:purple_terracotta",
6266
+ "159:11": "minecraft:blue_terracotta",
6267
+ "159:12": "minecraft:brown_terracotta",
6268
+ "159:13": "minecraft:green_terracotta",
6269
+ "159:14": "minecraft:red_terracotta",
6270
+ "159:15": "minecraft:black_terracotta",
6271
+ "160:0": "minecraft:white_stained_glass_pane[east=false,south=false,north=false,west=false]",
6272
+ "160:1": "minecraft:orange_stained_glass_pane[east=false,south=false,north=false,west=false]",
6273
+ "160:2": "minecraft:magenta_stained_glass_pane[east=false,south=false,north=false,west=false]",
6274
+ "160:3": "minecraft:light_blue_stained_glass_pane[east=false,south=false,north=false,west=false]",
6275
+ "160:4": "minecraft:yellow_stained_glass_pane[east=false,south=false,north=false,west=false]",
6276
+ "160:5": "minecraft:lime_stained_glass_pane[east=false,south=false,north=false,west=false]",
6277
+ "160:6": "minecraft:pink_stained_glass_pane[east=false,south=false,north=false,west=false]",
6278
+ "160:7": "minecraft:gray_stained_glass_pane[east=false,south=false,north=false,west=false]",
6279
+ "160:8": "minecraft:light_gray_stained_glass_pane[east=false,south=false,north=false,west=false]",
6280
+ "160:9": "minecraft:cyan_stained_glass_pane[east=false,south=false,north=false,west=false]",
6281
+ "160:10": "minecraft:purple_stained_glass_pane[east=false,south=false,north=false,west=false]",
6282
+ "160:11": "minecraft:blue_stained_glass_pane[east=false,south=false,north=false,west=false]",
6283
+ "160:12": "minecraft:brown_stained_glass_pane[east=false,south=false,north=false,west=false]",
6284
+ "160:13": "minecraft:green_stained_glass_pane[east=false,south=false,north=false,west=false]",
6285
+ "160:14": "minecraft:red_stained_glass_pane[east=false,south=false,north=false,west=false]",
6286
+ "160:15": "minecraft:black_stained_glass_pane[east=false,south=false,north=false,west=false]",
6287
+ "161:0": "minecraft:acacia_leaves[persistent=false,distance=1]",
6288
+ "161:1": "minecraft:dark_oak_leaves[persistent=false,distance=1]",
6289
+ "161:4": "minecraft:acacia_leaves[persistent=true,distance=1]",
6290
+ "161:5": "minecraft:dark_oak_leaves[persistent=true,distance=1]",
6291
+ "161:8": "minecraft:acacia_leaves[persistent=false,distance=1]",
6292
+ "161:9": "minecraft:dark_oak_leaves[persistent=false,distance=1]",
6293
+ "161:12": "minecraft:acacia_leaves[persistent=true,distance=1]",
6294
+ "161:13": "minecraft:dark_oak_leaves[persistent=true,distance=1]",
6295
+ "162:0": "minecraft:acacia_log[axis=y]",
6296
+ "162:1": "minecraft:dark_oak_log[axis=y]",
6297
+ "162:4": "minecraft:acacia_log[axis=x]",
6298
+ "162:5": "minecraft:dark_oak_log[axis=x]",
6299
+ "162:8": "minecraft:acacia_log[axis=z]",
6300
+ "162:9": "minecraft:dark_oak_log[axis=z]",
6301
+ "162:12": "minecraft:acacia_wood",
6302
+ "162:13": "minecraft:dark_oak_wood",
6303
+ "163:0": "minecraft:acacia_stairs[half=bottom,shape=outer_right,facing=east]",
6304
+ "163:1": "minecraft:acacia_stairs[half=bottom,shape=outer_right,facing=west]",
6305
+ "163:2": "minecraft:acacia_stairs[half=bottom,shape=outer_right,facing=south]",
6306
+ "163:3": "minecraft:acacia_stairs[half=bottom,shape=outer_right,facing=north]",
6307
+ "163:4": "minecraft:acacia_stairs[half=top,shape=outer_right,facing=east]",
6308
+ "163:5": "minecraft:acacia_stairs[half=top,shape=outer_right,facing=west]",
6309
+ "163:6": "minecraft:acacia_stairs[half=top,shape=outer_right,facing=south]",
6310
+ "163:7": "minecraft:acacia_stairs[half=top,shape=outer_right,facing=north]",
6311
+ "164:0": "minecraft:dark_oak_stairs[half=bottom,shape=outer_right,facing=east]",
6312
+ "164:1": "minecraft:dark_oak_stairs[half=bottom,shape=outer_right,facing=west]",
6313
+ "164:2": "minecraft:dark_oak_stairs[half=bottom,shape=outer_right,facing=south]",
6314
+ "164:3": "minecraft:dark_oak_stairs[half=bottom,shape=outer_right,facing=north]",
6315
+ "164:4": "minecraft:dark_oak_stairs[half=top,shape=outer_right,facing=east]",
6316
+ "164:5": "minecraft:dark_oak_stairs[half=top,shape=outer_right,facing=west]",
6317
+ "164:6": "minecraft:dark_oak_stairs[half=top,shape=outer_right,facing=south]",
6318
+ "164:7": "minecraft:dark_oak_stairs[half=top,shape=outer_right,facing=north]",
6319
+ "165:0": "minecraft:slime_block",
6320
+ "166:0": "minecraft:barrier",
6321
+ "167:0": "minecraft:iron_trapdoor[half=bottom,facing=north,open=false]",
6322
+ "167:1": "minecraft:iron_trapdoor[half=bottom,facing=south,open=false]",
6323
+ "167:2": "minecraft:iron_trapdoor[half=bottom,facing=west,open=false]",
6324
+ "167:3": "minecraft:iron_trapdoor[half=bottom,facing=east,open=false]",
6325
+ "167:4": "minecraft:iron_trapdoor[half=bottom,facing=north,open=true]",
6326
+ "167:5": "minecraft:iron_trapdoor[half=bottom,facing=south,open=true]",
6327
+ "167:6": "minecraft:iron_trapdoor[half=bottom,facing=west,open=true]",
6328
+ "167:7": "minecraft:iron_trapdoor[half=bottom,facing=east,open=true]",
6329
+ "167:8": "minecraft:iron_trapdoor[half=top,facing=north,open=false]",
6330
+ "167:9": "minecraft:iron_trapdoor[half=top,facing=south,open=false]",
6331
+ "167:10": "minecraft:iron_trapdoor[half=top,facing=west,open=false]",
6332
+ "167:11": "minecraft:iron_trapdoor[half=top,facing=east,open=false]",
6333
+ "167:12": "minecraft:iron_trapdoor[half=top,facing=north,open=true]",
6334
+ "167:13": "minecraft:iron_trapdoor[half=top,facing=south,open=true]",
6335
+ "167:14": "minecraft:iron_trapdoor[half=top,facing=west,open=true]",
6336
+ "167:15": "minecraft:iron_trapdoor[half=top,facing=east,open=true]",
6337
+ "168:0": "minecraft:prismarine",
6338
+ "168:1": "minecraft:prismarine_bricks",
6339
+ "168:2": "minecraft:dark_prismarine",
6340
+ "169:0": "minecraft:sea_lantern",
6341
+ "170:0": "minecraft:hay_block[axis=y]",
6342
+ "170:4": "minecraft:hay_block[axis=x]",
6343
+ "170:8": "minecraft:hay_block[axis=z]",
6344
+ "171:0": "minecraft:white_carpet",
6345
+ "171:1": "minecraft:orange_carpet",
6346
+ "171:2": "minecraft:magenta_carpet",
6347
+ "171:3": "minecraft:light_blue_carpet",
6348
+ "171:4": "minecraft:yellow_carpet",
6349
+ "171:5": "minecraft:lime_carpet",
6350
+ "171:6": "minecraft:pink_carpet",
6351
+ "171:7": "minecraft:gray_carpet",
6352
+ "171:8": "minecraft:light_gray_carpet",
6353
+ "171:9": "minecraft:cyan_carpet",
6354
+ "171:10": "minecraft:purple_carpet",
6355
+ "171:11": "minecraft:blue_carpet",
6356
+ "171:12": "minecraft:brown_carpet",
6357
+ "171:13": "minecraft:green_carpet",
6358
+ "171:14": "minecraft:red_carpet",
6359
+ "171:15": "minecraft:black_carpet",
6360
+ "172:0": "minecraft:terracotta",
6361
+ "173:0": "minecraft:coal_block",
6362
+ "174:0": "minecraft:packed_ice",
6363
+ "175:0": "minecraft:sunflower[half=lower]",
6364
+ "175:1": "minecraft:lilac[half=lower]",
6365
+ "175:2": "minecraft:tall_grass[half=lower]",
6366
+ "175:3": "minecraft:large_fern[half=lower]",
6367
+ "175:4": "minecraft:rose_bush[half=lower]",
6368
+ "175:5": "minecraft:peony[half=lower]",
6369
+ "175:8": "minecraft:sunflower[half=upper]",
6370
+ "175:9": "minecraft:lilac[half=upper]",
6371
+ "175:10": "minecraft:tall_grass[half=upper]",
6372
+ "175:11": "minecraft:large_fern[half=upper]",
6373
+ "175:12": "minecraft:rose_bush[half=upper]",
6374
+ "175:13": "minecraft:peony[half=upper]",
6375
+ "176:0": "minecraft:white_banner[rotation=0]",
6376
+ "176:1": "minecraft:white_banner[rotation=1]",
6377
+ "176:2": "minecraft:white_banner[rotation=2]",
6378
+ "176:3": "minecraft:white_banner[rotation=3]",
6379
+ "176:4": "minecraft:white_banner[rotation=4]",
6380
+ "176:5": "minecraft:white_banner[rotation=5]",
6381
+ "176:6": "minecraft:white_banner[rotation=6]",
6382
+ "176:7": "minecraft:white_banner[rotation=7]",
6383
+ "176:8": "minecraft:white_banner[rotation=8]",
6384
+ "176:9": "minecraft:white_banner[rotation=9]",
6385
+ "176:10": "minecraft:white_banner[rotation=10]",
6386
+ "176:11": "minecraft:white_banner[rotation=11]",
6387
+ "176:12": "minecraft:white_banner[rotation=12]",
6388
+ "176:13": "minecraft:white_banner[rotation=13]",
6389
+ "176:14": "minecraft:white_banner[rotation=14]",
6390
+ "176:15": "minecraft:white_banner[rotation=15]",
6391
+ "177:2": "minecraft:white_wall_banner[facing=north]",
6392
+ "177:3": "minecraft:white_wall_banner[facing=south]",
6393
+ "177:4": "minecraft:white_wall_banner[facing=west]",
6394
+ "177:5": "minecraft:white_wall_banner[facing=east]",
6395
+ "178:0": "minecraft:daylight_detector[inverted=true,power=0]",
6396
+ "178:1": "minecraft:daylight_detector[inverted=true,power=1]",
6397
+ "178:2": "minecraft:daylight_detector[inverted=true,power=2]",
6398
+ "178:3": "minecraft:daylight_detector[inverted=true,power=3]",
6399
+ "178:4": "minecraft:daylight_detector[inverted=true,power=4]",
6400
+ "178:5": "minecraft:daylight_detector[inverted=true,power=5]",
6401
+ "178:6": "minecraft:daylight_detector[inverted=true,power=6]",
6402
+ "178:7": "minecraft:daylight_detector[inverted=true,power=7]",
6403
+ "178:8": "minecraft:daylight_detector[inverted=true,power=8]",
6404
+ "178:9": "minecraft:daylight_detector[inverted=true,power=9]",
6405
+ "178:10": "minecraft:daylight_detector[inverted=true,power=10]",
6406
+ "178:11": "minecraft:daylight_detector[inverted=true,power=11]",
6407
+ "178:12": "minecraft:daylight_detector[inverted=true,power=12]",
6408
+ "178:13": "minecraft:daylight_detector[inverted=true,power=13]",
6409
+ "178:14": "minecraft:daylight_detector[inverted=true,power=14]",
6410
+ "178:15": "minecraft:daylight_detector[inverted=true,power=15]",
6411
+ "179:0": "minecraft:red_sandstone",
6412
+ "179:1": "minecraft:chiseled_red_sandstone",
6413
+ "179:2": "minecraft:cut_red_sandstone",
6414
+ "180:0": "minecraft:red_sandstone_stairs[half=bottom,shape=outer_right,facing=east]",
6415
+ "180:1": "minecraft:red_sandstone_stairs[half=bottom,shape=outer_right,facing=west]",
6416
+ "180:2": "minecraft:red_sandstone_stairs[half=bottom,shape=outer_right,facing=south]",
6417
+ "180:3": "minecraft:red_sandstone_stairs[half=bottom,shape=outer_right,facing=north]",
6418
+ "180:4": "minecraft:red_sandstone_stairs[half=top,shape=outer_right,facing=east]",
6419
+ "180:5": "minecraft:red_sandstone_stairs[half=top,shape=outer_right,facing=west]",
6420
+ "180:6": "minecraft:red_sandstone_stairs[half=top,shape=outer_right,facing=south]",
6421
+ "180:7": "minecraft:red_sandstone_stairs[half=top,shape=outer_right,facing=north]",
6422
+ "181:0": "minecraft:red_sandstone_slab[type=double]",
6423
+ "181:8": "minecraft:smooth_red_sandstone",
6424
+ "182:0": "minecraft:red_sandstone_slab[type=bottom]",
6425
+ "182:8": "minecraft:red_sandstone_slab[type=top]",
6426
+ "183:0": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
6427
+ "183:1": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
6428
+ "183:2": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
6429
+ "183:3": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
6430
+ "183:4": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
6431
+ "183:5": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
6432
+ "183:6": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
6433
+ "183:7": "minecraft:spruce_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
6434
+ "183:8": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
6435
+ "183:9": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
6436
+ "183:10": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
6437
+ "183:11": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
6438
+ "183:12": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
6439
+ "183:13": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
6440
+ "183:14": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
6441
+ "183:15": "minecraft:spruce_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
6442
+ "184:0": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
6443
+ "184:1": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
6444
+ "184:2": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
6445
+ "184:3": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
6446
+ "184:4": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
6447
+ "184:5": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
6448
+ "184:6": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
6449
+ "184:7": "minecraft:birch_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
6450
+ "184:8": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
6451
+ "184:9": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
6452
+ "184:10": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
6453
+ "184:11": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
6454
+ "184:12": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
6455
+ "184:13": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
6456
+ "184:14": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
6457
+ "184:15": "minecraft:birch_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
6458
+ "185:0": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
6459
+ "185:1": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
6460
+ "185:2": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
6461
+ "185:3": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
6462
+ "185:4": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
6463
+ "185:5": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
6464
+ "185:6": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
6465
+ "185:7": "minecraft:jungle_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
6466
+ "185:8": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
6467
+ "185:9": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
6468
+ "185:10": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
6469
+ "185:11": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
6470
+ "185:12": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
6471
+ "185:13": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
6472
+ "185:14": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
6473
+ "185:15": "minecraft:jungle_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
6474
+ "186:0": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
6475
+ "186:1": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
6476
+ "186:2": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
6477
+ "186:3": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
6478
+ "186:4": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
6479
+ "186:5": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
6480
+ "186:6": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
6481
+ "186:7": "minecraft:dark_oak_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
6482
+ "186:8": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
6483
+ "186:9": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
6484
+ "186:10": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
6485
+ "186:11": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
6486
+ "186:12": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
6487
+ "186:13": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
6488
+ "186:14": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
6489
+ "186:15": "minecraft:dark_oak_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
6490
+ "187:0": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=south,open=false]",
6491
+ "187:1": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=west,open=false]",
6492
+ "187:2": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=north,open=false]",
6493
+ "187:3": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=east,open=false]",
6494
+ "187:4": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=south,open=true]",
6495
+ "187:5": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=west,open=true]",
6496
+ "187:6": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=north,open=true]",
6497
+ "187:7": "minecraft:acacia_fence_gate[in_wall=false,powered=false,facing=east,open=true]",
6498
+ "187:8": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=south,open=false]",
6499
+ "187:9": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=west,open=false]",
6500
+ "187:10": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=north,open=false]",
6501
+ "187:11": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=east,open=false]",
6502
+ "187:12": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=south,open=true]",
6503
+ "187:13": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=west,open=true]",
6504
+ "187:14": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=north,open=true]",
6505
+ "187:15": "minecraft:acacia_fence_gate[in_wall=false,powered=true,facing=east,open=true]",
6506
+ "188:0": "minecraft:spruce_fence[east=false,south=false,north=false,west=false]",
6507
+ "189:0": "minecraft:birch_fence[east=false,south=false,north=false,west=false]",
6508
+ "190:0": "minecraft:jungle_fence[east=false,south=false,north=false,west=false]",
6509
+ "191:0": "minecraft:dark_oak_fence[east=false,south=false,north=false,west=false]",
6510
+ "192:0": "minecraft:acacia_fence[east=false,south=false,north=false,west=false]",
6511
+ "193:0": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
6512
+ "193:1": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
6513
+ "193:2": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
6514
+ "193:3": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
6515
+ "193:4": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
6516
+ "193:5": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
6517
+ "193:6": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
6518
+ "193:7": "minecraft:spruce_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
6519
+ "193:8": "minecraft:spruce_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
6520
+ "193:9": "minecraft:spruce_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
6521
+ "193:10": "minecraft:spruce_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
6522
+ "193:11": "minecraft:spruce_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
6523
+ "194:0": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
6524
+ "194:1": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
6525
+ "194:2": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
6526
+ "194:3": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
6527
+ "194:4": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
6528
+ "194:5": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
6529
+ "194:6": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
6530
+ "194:7": "minecraft:birch_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
6531
+ "194:8": "minecraft:birch_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
6532
+ "194:9": "minecraft:birch_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
6533
+ "194:10": "minecraft:birch_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
6534
+ "194:11": "minecraft:birch_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
6535
+ "195:0": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
6536
+ "195:1": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
6537
+ "195:2": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
6538
+ "195:3": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
6539
+ "195:4": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
6540
+ "195:5": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
6541
+ "195:6": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
6542
+ "195:7": "minecraft:jungle_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
6543
+ "195:8": "minecraft:jungle_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
6544
+ "195:9": "minecraft:jungle_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
6545
+ "195:10": "minecraft:jungle_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
6546
+ "195:11": "minecraft:jungle_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
6547
+ "196:0": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
6548
+ "196:1": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
6549
+ "196:2": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
6550
+ "196:3": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
6551
+ "196:4": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
6552
+ "196:5": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
6553
+ "196:6": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
6554
+ "196:7": "minecraft:acacia_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
6555
+ "196:8": "minecraft:acacia_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
6556
+ "196:9": "minecraft:acacia_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
6557
+ "196:10": "minecraft:acacia_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
6558
+ "196:11": "minecraft:acacia_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
6559
+ "197:0": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=east,open=false]",
6560
+ "197:1": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=south,open=false]",
6561
+ "197:2": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=west,open=false]",
6562
+ "197:3": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=north,open=false]",
6563
+ "197:4": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=east,open=true]",
6564
+ "197:5": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=south,open=true]",
6565
+ "197:6": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=west,open=true]",
6566
+ "197:7": "minecraft:dark_oak_door[hinge=right,half=lower,powered=false,facing=north,open=true]",
6567
+ "197:8": "minecraft:dark_oak_door[hinge=left,half=upper,powered=false,facing=east,open=false]",
6568
+ "197:9": "minecraft:dark_oak_door[hinge=right,half=upper,powered=false,facing=east,open=false]",
6569
+ "197:10": "minecraft:dark_oak_door[hinge=left,half=upper,powered=true,facing=east,open=false]",
6570
+ "197:11": "minecraft:dark_oak_door[hinge=right,half=upper,powered=true,facing=east,open=false]",
6571
+ "198:0": "minecraft:end_rod[facing=down]",
6572
+ "198:1": "minecraft:end_rod[facing=up]",
6573
+ "198:2": "minecraft:end_rod[facing=north]",
6574
+ "198:3": "minecraft:end_rod[facing=south]",
6575
+ "198:4": "minecraft:end_rod[facing=west]",
6576
+ "198:5": "minecraft:end_rod[facing=east]",
6577
+ "199:0": "minecraft:chorus_plant[east=false,south=false,north=false,west=false,up=false,down=false]",
6578
+ "200:0": "minecraft:chorus_flower[age=0]",
6579
+ "200:1": "minecraft:chorus_flower[age=1]",
6580
+ "200:2": "minecraft:chorus_flower[age=2]",
6581
+ "200:3": "minecraft:chorus_flower[age=3]",
6582
+ "200:4": "minecraft:chorus_flower[age=4]",
6583
+ "200:5": "minecraft:chorus_flower[age=5]",
6584
+ "201:0": "minecraft:purpur_block",
6585
+ "202:0": "minecraft:purpur_pillar[axis=y]",
6586
+ "202:4": "minecraft:purpur_pillar[axis=x]",
6587
+ "202:8": "minecraft:purpur_pillar[axis=z]",
6588
+ "203:0": "minecraft:purpur_stairs[half=bottom,shape=outer_right,facing=east]",
6589
+ "203:1": "minecraft:purpur_stairs[half=bottom,shape=outer_right,facing=west]",
6590
+ "203:2": "minecraft:purpur_stairs[half=bottom,shape=outer_right,facing=south]",
6591
+ "203:3": "minecraft:purpur_stairs[half=bottom,shape=outer_right,facing=north]",
6592
+ "203:4": "minecraft:purpur_stairs[half=top,shape=outer_right,facing=east]",
6593
+ "203:5": "minecraft:purpur_stairs[half=top,shape=outer_right,facing=west]",
6594
+ "203:6": "minecraft:purpur_stairs[half=top,shape=outer_right,facing=south]",
6595
+ "203:7": "minecraft:purpur_stairs[half=top,shape=outer_right,facing=north]",
6596
+ "204:0": "minecraft:purpur_slab[type=double]",
6597
+ "205:0": "minecraft:purpur_slab[type=bottom]",
6598
+ "205:8": "minecraft:purpur_slab[type=top]",
6599
+ "206:0": "minecraft:end_stone_bricks",
6600
+ "207:0": "minecraft:beetroots[age=0]",
6601
+ "207:1": "minecraft:beetroots[age=1]",
6602
+ "207:2": "minecraft:beetroots[age=2]",
6603
+ "207:3": "minecraft:beetroots[age=3]",
6604
+ "208:0": "minecraft:dirt_path",
6605
+ "209:0": "minecraft:end_gateway",
6606
+ "210:0": "minecraft:repeating_command_block[conditional=false,facing=down]",
6607
+ "210:1": "minecraft:repeating_command_block[conditional=false,facing=up]",
6608
+ "210:2": "minecraft:repeating_command_block[conditional=false,facing=north]",
6609
+ "210:3": "minecraft:repeating_command_block[conditional=false,facing=south]",
6610
+ "210:4": "minecraft:repeating_command_block[conditional=false,facing=west]",
6611
+ "210:5": "minecraft:repeating_command_block[conditional=false,facing=east]",
6612
+ "210:8": "minecraft:repeating_command_block[conditional=true,facing=down]",
6613
+ "210:9": "minecraft:repeating_command_block[conditional=true,facing=up]",
6614
+ "210:10": "minecraft:repeating_command_block[conditional=true,facing=north]",
6615
+ "210:11": "minecraft:repeating_command_block[conditional=true,facing=south]",
6616
+ "210:12": "minecraft:repeating_command_block[conditional=true,facing=west]",
6617
+ "210:13": "minecraft:repeating_command_block[conditional=true,facing=east]",
6618
+ "211:0": "minecraft:chain_command_block[conditional=false,facing=down]",
6619
+ "211:1": "minecraft:chain_command_block[conditional=false,facing=up]",
6620
+ "211:2": "minecraft:chain_command_block[conditional=false,facing=north]",
6621
+ "211:3": "minecraft:chain_command_block[conditional=false,facing=south]",
6622
+ "211:4": "minecraft:chain_command_block[conditional=false,facing=west]",
6623
+ "211:5": "minecraft:chain_command_block[conditional=false,facing=east]",
6624
+ "211:8": "minecraft:chain_command_block[conditional=true,facing=down]",
6625
+ "211:9": "minecraft:chain_command_block[conditional=true,facing=up]",
6626
+ "211:10": "minecraft:chain_command_block[conditional=true,facing=north]",
6627
+ "211:11": "minecraft:chain_command_block[conditional=true,facing=south]",
6628
+ "211:12": "minecraft:chain_command_block[conditional=true,facing=west]",
6629
+ "211:13": "minecraft:chain_command_block[conditional=true,facing=east]",
6630
+ "212:0": "minecraft:frosted_ice[age=0]",
6631
+ "212:1": "minecraft:frosted_ice[age=1]",
6632
+ "212:2": "minecraft:frosted_ice[age=2]",
6633
+ "212:3": "minecraft:frosted_ice[age=3]",
6634
+ "213:0": "minecraft:magma_block",
6635
+ "214:0": "minecraft:nether_wart_block",
6636
+ "215:0": "minecraft:red_nether_bricks",
6637
+ "216:0": "minecraft:bone_block[axis=y]",
6638
+ "216:4": "minecraft:bone_block[axis=x]",
6639
+ "216:8": "minecraft:bone_block[axis=z]",
6640
+ "217:0": "minecraft:structure_void",
6641
+ "218:0": "minecraft:observer[powered=false,facing=down]",
6642
+ "218:1": "minecraft:observer[powered=false,facing=up]",
6643
+ "218:2": "minecraft:observer[powered=false,facing=north]",
6644
+ "218:3": "minecraft:observer[powered=false,facing=south]",
6645
+ "218:4": "minecraft:observer[powered=false,facing=west]",
6646
+ "218:5": "minecraft:observer[powered=false,facing=east]",
6647
+ "218:8": "minecraft:observer[powered=true,facing=down]",
6648
+ "218:9": "minecraft:observer[powered=true,facing=up]",
6649
+ "218:10": "minecraft:observer[powered=true,facing=north]",
6650
+ "218:11": "minecraft:observer[powered=true,facing=south]",
6651
+ "218:12": "minecraft:observer[powered=true,facing=west]",
6652
+ "218:13": "minecraft:observer[powered=true,facing=east]",
6653
+ "219:0": "minecraft:white_shulker_box[facing=down]",
6654
+ "219:1": "minecraft:white_shulker_box[facing=up]",
6655
+ "219:2": "minecraft:white_shulker_box[facing=north]",
6656
+ "219:3": "minecraft:white_shulker_box[facing=south]",
6657
+ "219:4": "minecraft:white_shulker_box[facing=west]",
6658
+ "219:5": "minecraft:white_shulker_box[facing=east]",
6659
+ "220:0": "minecraft:orange_shulker_box[facing=down]",
6660
+ "220:1": "minecraft:orange_shulker_box[facing=up]",
6661
+ "220:2": "minecraft:orange_shulker_box[facing=north]",
6662
+ "220:3": "minecraft:orange_shulker_box[facing=south]",
6663
+ "220:4": "minecraft:orange_shulker_box[facing=west]",
6664
+ "220:5": "minecraft:orange_shulker_box[facing=east]",
6665
+ "221:0": "minecraft:magenta_shulker_box[facing=down]",
6666
+ "221:1": "minecraft:magenta_shulker_box[facing=up]",
6667
+ "221:2": "minecraft:magenta_shulker_box[facing=north]",
6668
+ "221:3": "minecraft:magenta_shulker_box[facing=south]",
6669
+ "221:4": "minecraft:magenta_shulker_box[facing=west]",
6670
+ "221:5": "minecraft:magenta_shulker_box[facing=east]",
6671
+ "222:0": "minecraft:light_blue_shulker_box[facing=down]",
6672
+ "222:1": "minecraft:light_blue_shulker_box[facing=up]",
6673
+ "222:2": "minecraft:light_blue_shulker_box[facing=north]",
6674
+ "222:3": "minecraft:light_blue_shulker_box[facing=south]",
6675
+ "222:4": "minecraft:light_blue_shulker_box[facing=west]",
6676
+ "222:5": "minecraft:light_blue_shulker_box[facing=east]",
6677
+ "223:0": "minecraft:yellow_shulker_box[facing=down]",
6678
+ "223:1": "minecraft:yellow_shulker_box[facing=up]",
6679
+ "223:2": "minecraft:yellow_shulker_box[facing=north]",
6680
+ "223:3": "minecraft:yellow_shulker_box[facing=south]",
6681
+ "223:4": "minecraft:yellow_shulker_box[facing=west]",
6682
+ "223:5": "minecraft:yellow_shulker_box[facing=east]",
6683
+ "224:0": "minecraft:lime_shulker_box[facing=down]",
6684
+ "224:1": "minecraft:lime_shulker_box[facing=up]",
6685
+ "224:2": "minecraft:lime_shulker_box[facing=north]",
6686
+ "224:3": "minecraft:lime_shulker_box[facing=south]",
6687
+ "224:4": "minecraft:lime_shulker_box[facing=west]",
6688
+ "224:5": "minecraft:lime_shulker_box[facing=east]",
6689
+ "225:0": "minecraft:pink_shulker_box[facing=down]",
6690
+ "225:1": "minecraft:pink_shulker_box[facing=up]",
6691
+ "225:2": "minecraft:pink_shulker_box[facing=north]",
6692
+ "225:3": "minecraft:pink_shulker_box[facing=south]",
6693
+ "225:4": "minecraft:pink_shulker_box[facing=west]",
6694
+ "225:5": "minecraft:pink_shulker_box[facing=east]",
6695
+ "226:0": "minecraft:gray_shulker_box[facing=down]",
6696
+ "226:1": "minecraft:gray_shulker_box[facing=up]",
6697
+ "226:2": "minecraft:gray_shulker_box[facing=north]",
6698
+ "226:3": "minecraft:gray_shulker_box[facing=south]",
6699
+ "226:4": "minecraft:gray_shulker_box[facing=west]",
6700
+ "226:5": "minecraft:gray_shulker_box[facing=east]",
6701
+ "227:0": "minecraft:light_gray_shulker_box[facing=down]",
6702
+ "227:1": "minecraft:light_gray_shulker_box[facing=up]",
6703
+ "227:2": "minecraft:light_gray_shulker_box[facing=north]",
6704
+ "227:3": "minecraft:light_gray_shulker_box[facing=south]",
6705
+ "227:4": "minecraft:light_gray_shulker_box[facing=west]",
6706
+ "227:5": "minecraft:light_gray_shulker_box[facing=east]",
6707
+ "228:0": "minecraft:cyan_shulker_box[facing=down]",
6708
+ "228:1": "minecraft:cyan_shulker_box[facing=up]",
6709
+ "228:2": "minecraft:cyan_shulker_box[facing=north]",
6710
+ "228:3": "minecraft:cyan_shulker_box[facing=south]",
6711
+ "228:4": "minecraft:cyan_shulker_box[facing=west]",
6712
+ "228:5": "minecraft:cyan_shulker_box[facing=east]",
6713
+ "229:0": "minecraft:purple_shulker_box[facing=down]",
6714
+ "229:1": "minecraft:purple_shulker_box[facing=up]",
6715
+ "229:2": "minecraft:purple_shulker_box[facing=north]",
6716
+ "229:3": "minecraft:purple_shulker_box[facing=south]",
6717
+ "229:4": "minecraft:purple_shulker_box[facing=west]",
6718
+ "229:5": "minecraft:purple_shulker_box[facing=east]",
6719
+ "230:0": "minecraft:blue_shulker_box[facing=down]",
6720
+ "230:1": "minecraft:blue_shulker_box[facing=up]",
6721
+ "230:2": "minecraft:blue_shulker_box[facing=north]",
6722
+ "230:3": "minecraft:blue_shulker_box[facing=south]",
6723
+ "230:4": "minecraft:blue_shulker_box[facing=west]",
6724
+ "230:5": "minecraft:blue_shulker_box[facing=east]",
6725
+ "231:0": "minecraft:brown_shulker_box[facing=down]",
6726
+ "231:1": "minecraft:brown_shulker_box[facing=up]",
6727
+ "231:2": "minecraft:brown_shulker_box[facing=north]",
6728
+ "231:3": "minecraft:brown_shulker_box[facing=south]",
6729
+ "231:4": "minecraft:brown_shulker_box[facing=west]",
6730
+ "231:5": "minecraft:brown_shulker_box[facing=east]",
6731
+ "232:0": "minecraft:green_shulker_box[facing=down]",
6732
+ "232:1": "minecraft:green_shulker_box[facing=up]",
6733
+ "232:2": "minecraft:green_shulker_box[facing=north]",
6734
+ "232:3": "minecraft:green_shulker_box[facing=south]",
6735
+ "232:4": "minecraft:green_shulker_box[facing=west]",
6736
+ "232:5": "minecraft:green_shulker_box[facing=east]",
6737
+ "233:0": "minecraft:red_shulker_box[facing=down]",
6738
+ "233:1": "minecraft:red_shulker_box[facing=up]",
6739
+ "233:2": "minecraft:red_shulker_box[facing=north]",
6740
+ "233:3": "minecraft:red_shulker_box[facing=south]",
6741
+ "233:4": "minecraft:red_shulker_box[facing=west]",
6742
+ "233:5": "minecraft:red_shulker_box[facing=east]",
6743
+ "234:0": "minecraft:black_shulker_box[facing=down]",
6744
+ "234:1": "minecraft:black_shulker_box[facing=up]",
6745
+ "234:2": "minecraft:black_shulker_box[facing=north]",
6746
+ "234:3": "minecraft:black_shulker_box[facing=south]",
6747
+ "234:4": "minecraft:black_shulker_box[facing=west]",
6748
+ "234:5": "minecraft:black_shulker_box[facing=east]",
6749
+ "235:0": "minecraft:white_glazed_terracotta[facing=south]",
6750
+ "235:1": "minecraft:white_glazed_terracotta[facing=west]",
6751
+ "235:2": "minecraft:white_glazed_terracotta[facing=north]",
6752
+ "235:3": "minecraft:white_glazed_terracotta[facing=east]",
6753
+ "236:0": "minecraft:orange_glazed_terracotta[facing=south]",
6754
+ "236:1": "minecraft:orange_glazed_terracotta[facing=west]",
6755
+ "236:2": "minecraft:orange_glazed_terracotta[facing=north]",
6756
+ "236:3": "minecraft:orange_glazed_terracotta[facing=east]",
6757
+ "237:0": "minecraft:magenta_glazed_terracotta[facing=south]",
6758
+ "237:1": "minecraft:magenta_glazed_terracotta[facing=west]",
6759
+ "237:2": "minecraft:magenta_glazed_terracotta[facing=north]",
6760
+ "237:3": "minecraft:magenta_glazed_terracotta[facing=east]",
6761
+ "238:0": "minecraft:light_blue_glazed_terracotta[facing=south]",
6762
+ "238:1": "minecraft:light_blue_glazed_terracotta[facing=west]",
6763
+ "238:2": "minecraft:light_blue_glazed_terracotta[facing=north]",
6764
+ "238:3": "minecraft:light_blue_glazed_terracotta[facing=east]",
6765
+ "239:0": "minecraft:yellow_glazed_terracotta[facing=south]",
6766
+ "239:1": "minecraft:yellow_glazed_terracotta[facing=west]",
6767
+ "239:2": "minecraft:yellow_glazed_terracotta[facing=north]",
6768
+ "239:3": "minecraft:yellow_glazed_terracotta[facing=east]",
6769
+ "240:0": "minecraft:lime_glazed_terracotta[facing=south]",
6770
+ "240:1": "minecraft:lime_glazed_terracotta[facing=west]",
6771
+ "240:2": "minecraft:lime_glazed_terracotta[facing=north]",
6772
+ "240:3": "minecraft:lime_glazed_terracotta[facing=east]",
6773
+ "241:0": "minecraft:pink_glazed_terracotta[facing=south]",
6774
+ "241:1": "minecraft:pink_glazed_terracotta[facing=west]",
6775
+ "241:2": "minecraft:pink_glazed_terracotta[facing=north]",
6776
+ "241:3": "minecraft:pink_glazed_terracotta[facing=east]",
6777
+ "242:0": "minecraft:gray_glazed_terracotta[facing=south]",
6778
+ "242:1": "minecraft:gray_glazed_terracotta[facing=west]",
6779
+ "242:2": "minecraft:gray_glazed_terracotta[facing=north]",
6780
+ "242:3": "minecraft:gray_glazed_terracotta[facing=east]",
6781
+ "243:0": "minecraft:light_gray_glazed_terracotta[facing=south]",
6782
+ "243:1": "minecraft:light_gray_glazed_terracotta[facing=west]",
6783
+ "243:2": "minecraft:light_gray_glazed_terracotta[facing=north]",
6784
+ "243:3": "minecraft:light_gray_glazed_terracotta[facing=east]",
6785
+ "244:0": "minecraft:cyan_glazed_terracotta[facing=south]",
6786
+ "244:1": "minecraft:cyan_glazed_terracotta[facing=west]",
6787
+ "244:2": "minecraft:cyan_glazed_terracotta[facing=north]",
6788
+ "244:3": "minecraft:cyan_glazed_terracotta[facing=east]",
6789
+ "245:0": "minecraft:purple_glazed_terracotta[facing=south]",
6790
+ "245:1": "minecraft:purple_glazed_terracotta[facing=west]",
6791
+ "245:2": "minecraft:purple_glazed_terracotta[facing=north]",
6792
+ "245:3": "minecraft:purple_glazed_terracotta[facing=east]",
6793
+ "246:0": "minecraft:blue_glazed_terracotta[facing=south]",
6794
+ "246:1": "minecraft:blue_glazed_terracotta[facing=west]",
6795
+ "246:2": "minecraft:blue_glazed_terracotta[facing=north]",
6796
+ "246:3": "minecraft:blue_glazed_terracotta[facing=east]",
6797
+ "247:0": "minecraft:brown_glazed_terracotta[facing=south]",
6798
+ "247:1": "minecraft:brown_glazed_terracotta[facing=west]",
6799
+ "247:2": "minecraft:brown_glazed_terracotta[facing=north]",
6800
+ "247:3": "minecraft:brown_glazed_terracotta[facing=east]",
6801
+ "248:0": "minecraft:green_glazed_terracotta[facing=south]",
6802
+ "248:1": "minecraft:green_glazed_terracotta[facing=west]",
6803
+ "248:2": "minecraft:green_glazed_terracotta[facing=north]",
6804
+ "248:3": "minecraft:green_glazed_terracotta[facing=east]",
6805
+ "249:0": "minecraft:red_glazed_terracotta[facing=south]",
6806
+ "249:1": "minecraft:red_glazed_terracotta[facing=west]",
6807
+ "249:2": "minecraft:red_glazed_terracotta[facing=north]",
6808
+ "249:3": "minecraft:red_glazed_terracotta[facing=east]",
6809
+ "250:0": "minecraft:black_glazed_terracotta[facing=south]",
6810
+ "250:1": "minecraft:black_glazed_terracotta[facing=west]",
6811
+ "250:2": "minecraft:black_glazed_terracotta[facing=north]",
6812
+ "250:3": "minecraft:black_glazed_terracotta[facing=east]",
6813
+ "251:0": "minecraft:white_concrete",
6814
+ "251:1": "minecraft:orange_concrete",
6815
+ "251:2": "minecraft:magenta_concrete",
6816
+ "251:3": "minecraft:light_blue_concrete",
6817
+ "251:4": "minecraft:yellow_concrete",
6818
+ "251:5": "minecraft:lime_concrete",
6819
+ "251:6": "minecraft:pink_concrete",
6820
+ "251:7": "minecraft:gray_concrete",
6821
+ "251:8": "minecraft:light_gray_concrete",
6822
+ "251:9": "minecraft:cyan_concrete",
6823
+ "251:10": "minecraft:purple_concrete",
6824
+ "251:11": "minecraft:blue_concrete",
6825
+ "251:12": "minecraft:brown_concrete",
6826
+ "251:13": "minecraft:green_concrete",
6827
+ "251:14": "minecraft:red_concrete",
6828
+ "251:15": "minecraft:black_concrete",
6829
+ "252:0": "minecraft:white_concrete_powder",
6830
+ "252:1": "minecraft:orange_concrete_powder",
6831
+ "252:2": "minecraft:magenta_concrete_powder",
6832
+ "252:3": "minecraft:light_blue_concrete_powder",
6833
+ "252:4": "minecraft:yellow_concrete_powder",
6834
+ "252:5": "minecraft:lime_concrete_powder",
6835
+ "252:6": "minecraft:pink_concrete_powder",
6836
+ "252:7": "minecraft:gray_concrete_powder",
6837
+ "252:8": "minecraft:light_gray_concrete_powder",
6838
+ "252:9": "minecraft:cyan_concrete_powder",
6839
+ "252:10": "minecraft:purple_concrete_powder",
6840
+ "252:11": "minecraft:blue_concrete_powder",
6841
+ "252:12": "minecraft:brown_concrete_powder",
6842
+ "252:13": "minecraft:green_concrete_powder",
6843
+ "252:14": "minecraft:red_concrete_powder",
6844
+ "252:15": "minecraft:black_concrete_powder",
6845
+ "255:0": "minecraft:structure_block[mode=save]",
6846
+ "255:1": "minecraft:structure_block[mode=load]",
6847
+ "255:2": "minecraft:structure_block[mode=corner]",
6848
+ "255:3": "minecraft:structure_block[mode=data]"
6849
+ }
6850
+ };
6851
+
5036
6852
  // src/model/multiblock/SchematicParser.ts
5037
6853
  var SchematicParser = class {
5038
- static async parse() {
5039
- return Promise.resolve({});
6854
+ static async parse(nbt) {
6855
+ const tags = nbt.value;
6856
+ if (tags.Materials?.type !== "string" || tags.Materials.value !== "Alpha") {
6857
+ throw new MineRenderError("Schematic Materials must be Alpha");
6858
+ }
6859
+ const size = ["Width", "Height", "Length"].map((name) => {
6860
+ const tag = tags[name];
6861
+ if (tag?.type !== "short" || !Number.isInteger(tag.value) || tag.value <= 0 || tag.value > 32767) {
6862
+ throw new MineRenderError(`Schematic ${name} must be a positive short`);
6863
+ }
6864
+ return tag.value;
6865
+ });
6866
+ const [width, height, length] = size;
6867
+ const volume = width * height * length;
6868
+ const ids = tags.Blocks;
6869
+ const data = tags.Data;
6870
+ if (ids?.type !== "byteArray" || data?.type !== "byteArray" || !Array.isArray(ids.value) || !Array.isArray(data.value) || ids.value.length !== volume || data.value.length !== volume) {
6871
+ throw new MineRenderError(`Schematic Blocks and Data must contain ${volume} bytes`);
6872
+ }
6873
+ const addBlocks = tags.AddBlocks;
6874
+ if (addBlocks && (addBlocks.type !== "byteArray" || !Array.isArray(addBlocks.value))) {
6875
+ throw new MineRenderError("Schematic AddBlocks must be a byte array");
6876
+ }
6877
+ const tileEntities = /* @__PURE__ */ new Map();
6878
+ for (const tile of compoundList(tags, "TileEntities")) {
6879
+ const position = ["x", "y", "z"].map((axis, i) => {
6880
+ const coordinate = tile[axis];
6881
+ if (coordinate?.type !== "int" || !Number.isInteger(coordinate.value) || coordinate.value < 0 || coordinate.value >= size[i]) {
6882
+ throw new MineRenderError("Schematic TileEntities position is outside its dimensions");
6883
+ }
6884
+ return coordinate.value;
6885
+ });
6886
+ const [x, y, z] = position;
6887
+ tileEntities.set((y * length + z) * width + x, { type: "compound", value: tile });
6888
+ }
6889
+ const blocks = [];
6890
+ const mapping = legacyBlocks_default.blocks;
6891
+ for (let index = 0; index < volume; index++) {
6892
+ const packed = addBlocks?.value[index >> 1] ?? 0;
6893
+ const high = packed >> (index & 1) * 4 & 15;
6894
+ const id = high << 8 | ids.value[index] & 255;
6895
+ const metadata = data.value[index] & 255;
6896
+ const mapped = mapping[`${id}:${metadata}`];
6897
+ if (!mapped) throw new MineRenderError(`Unsupported legacy block ${id}:${metadata} at schematic index ${index}`);
6898
+ const [type, state] = mapped.split("[");
6899
+ if (type === "minecraft:air") continue;
6900
+ const properties = {};
6901
+ if (state) {
6902
+ for (const property of state.slice(0, -1).split(",")) {
6903
+ const [key, value] = property.split("=");
6904
+ properties[key] = value;
6905
+ }
6906
+ }
6907
+ blocks.push({
6908
+ type,
6909
+ properties,
6910
+ position: [index % width, Math.floor(index / (width * length)), Math.floor(index / width) % length],
6911
+ nbt: tileEntities.get(index)
6912
+ });
6913
+ }
6914
+ const entities = compoundList(tags, "Entities").map((entity) => {
6915
+ const pos = entity.Pos;
6916
+ if (pos?.type !== "list" || pos.value.type !== "double" || pos.value.value.length !== 3 || !pos.value.value.every(Number.isFinite)) {
6917
+ throw new MineRenderError("Schematic entity Pos must contain three doubles");
6918
+ }
6919
+ return { position: [...pos.value.value], nbt: { type: "compound", value: entity } };
6920
+ });
6921
+ const dataVersion = tags.DataVersion;
6922
+ if (dataVersion && (dataVersion.type !== "int" || !Number.isInteger(dataVersion.value))) {
6923
+ throw new MineRenderError("Schematic DataVersion must be an int");
6924
+ }
6925
+ return { size, blocks, entities, dataVersion: dataVersion?.value };
5040
6926
  }
5041
6927
  };
6928
+ function compoundList(tags, name) {
6929
+ const tag = tags[name];
6930
+ if (!tag) return [];
6931
+ if (tag.type === "list" && Array.isArray(tag.value.value)) {
6932
+ if (tag.value.value.length === 0) return [];
6933
+ if (tag.value.type === "compound") return tag.value.value;
6934
+ }
6935
+ throw new MineRenderError(`Schematic ${name} must be a compound list`);
6936
+ }
5042
6937
 
5043
6938
  // src/model/multiblock/StructureParser.ts
5044
6939
  var StructureParser = class {
@@ -5048,13 +6943,16 @@ var StructureParser = class {
5048
6943
  if ("palette" in nbt) {
5049
6944
  palette = nbt.palette;
5050
6945
  } else if ("palettes" in nbt) {
5051
- palette = nbt.palettes[paletteIndex ?? 0];
6946
+ const selected = nbt.palettes.value.value[paletteIndex ?? 0];
6947
+ if (!selected) throw new MineRenderError(`Structure palette ${paletteIndex ?? 0} does not exist`);
6948
+ palette = { type: "list", value: selected };
5052
6949
  } else {
5053
6950
  throw new MineRenderError("Structure does not have palette(s)");
5054
6951
  }
5055
6952
  const blocks = nbt.blocks.value.value.map((block) => {
5056
6953
  const state = palette.value.value[block.state.value];
5057
- if (state.Name.value === "minecraft:air") return void 0;
6954
+ if (!state) throw new MineRenderError(`Structure palette index ${block.state.value} does not exist`);
6955
+ if (["minecraft:air", "minecraft:cave_air", "minecraft:void_air"].includes(state.Name.value)) return void 0;
5058
6956
  const props = {};
5059
6957
  for (let k in state.Properties?.value) {
5060
6958
  props[k] = state.Properties.value[k].value;
@@ -5068,13 +6966,19 @@ var StructureParser = class {
5068
6966
  }).filter((m) => typeof m !== "undefined");
5069
6967
  return {
5070
6968
  blocks,
5071
- size: nbt.size.value.value
6969
+ size: nbt.size.value.value,
6970
+ dataVersion: nbt.DataVersion?.value,
6971
+ entities: (nbt.entities?.value.value ?? []).map((entity) => ({
6972
+ position: entity.pos.value.value,
6973
+ blockPosition: entity.blockPos.value.value,
6974
+ nbt: entity.nbt
6975
+ }))
5072
6976
  };
5073
6977
  }
5074
6978
  };
5075
6979
 
5076
6980
  // src/renderer/MineRenderScene.ts
5077
- var import_three20 = require("three");
6981
+ var import_three21 = require("three");
5078
6982
  var import_ts_deepmerge8 = __toESM(require_dist());
5079
6983
 
5080
6984
  // src/skin/SkinPart.ts
@@ -5799,7 +7703,7 @@ var slimSkinGeometries = {
5799
7703
  var import_ts_deepmerge7 = __toESM(require_dist());
5800
7704
 
5801
7705
  // src/skin/SkinTextures.ts
5802
- var import_three19 = require("three");
7706
+ var import_three20 = require("three");
5803
7707
 
5804
7708
  // src/skin/SkinImage.ts
5805
7709
  var SkinImage = class {
@@ -5876,11 +7780,11 @@ var SkinTextures = class {
5876
7780
  });
5877
7781
  }
5878
7782
  static createMaterial(pixels, width, height, transparent = true) {
5879
- const texture = Textures.initTextureProps(new import_three19.DataTexture(pixels, width, height));
5880
- texture.colorSpace = import_three19.SRGBColorSpace;
7783
+ const texture = Textures.initTextureProps(new import_three20.DataTexture(pixels, width, height));
7784
+ texture.colorSpace = import_three20.SRGBColorSpace;
5881
7785
  texture.flipY = true;
5882
7786
  texture.needsUpdate = true;
5883
- return new import_three19.MeshBasicMaterial({ map: texture, transparent, side: transparent ? import_three19.DoubleSide : import_three19.FrontSide, alphaTest: transparent ? 0.1 : 0 });
7787
+ return new import_three20.MeshBasicMaterial({ map: texture, transparent, side: transparent ? import_three20.DoubleSide : import_three20.FrontSide, alphaTest: transparent ? 0.1 : 0 });
5884
7788
  }
5885
7789
  static isSlim(image, scale) {
5886
7790
  for (const [x, y] of [[46, 52], [54, 20]]) {
@@ -6107,7 +8011,7 @@ var SkinObject = class extends SceneObject {
6107
8011
  };
6108
8012
 
6109
8013
  // src/renderer/MineRenderScene.ts
6110
- var MineRenderScene = class _MineRenderScene extends import_three20.Scene {
8014
+ var MineRenderScene = class _MineRenderScene extends import_three21.Scene {
6111
8015
  constructor(options) {
6112
8016
  super();
6113
8017
  this.isMineRenderScene = true;
@@ -6183,11 +8087,12 @@ var MineRenderScene = class _MineRenderScene extends import_three20.Scene {
6183
8087
  console.log("instanceMeshes + key");
6184
8088
  let key = asset.key.serialize();
6185
8089
  if (isModelObject(obj)) {
6186
- const { displayPosition, uvLockRotation, tints } = obj.options;
8090
+ const { displayPosition, uvLockRotation, tints, cullMask } = obj.options;
6187
8091
  if (displayPosition) key += `|display:${displayPosition}`;
6188
8092
  if (uvLockRotation) key += `|uvlock:${uvLockRotation.join(",")}`;
6189
8093
  const palette = Object.entries(tints ?? {}).sort(([a], [b]) => Number(a) - Number(b));
6190
8094
  if (palette.length) key += `|tints:${JSON.stringify(palette)}`;
8095
+ if (cullMask) key += `|cull:${cullMask}`;
6191
8096
  }
6192
8097
  return this.instanceManager.getOrCreate(key, async () => {
6193
8098
  obj.scene = this;
@@ -6231,17 +8136,17 @@ function isMineRenderScene(obj) {
6231
8136
  }
6232
8137
 
6233
8138
  // src/renderer/Renderer.ts
6234
- var import_three22 = require("three");
8139
+ var import_three23 = require("three");
6235
8140
  var import_ts_deepmerge9 = __toESM(require_dist());
6236
8141
  var import_stats = __toESM(require("stats.js"));
6237
8142
  var import_postprocessing = require("postprocessing");
6238
8143
 
6239
8144
  // src/three/OrbitControls.js
6240
- var import_three21 = require("three");
8145
+ var import_three22 = require("three");
6241
8146
  var _changeEvent = { type: "change" };
6242
8147
  var _startEvent = { type: "start" };
6243
8148
  var _endEvent = { type: "end" };
6244
- var OrbitControls = class extends import_three21.EventDispatcher {
8149
+ var OrbitControls = class extends import_three22.EventDispatcher {
6245
8150
  constructor(object, domElement) {
6246
8151
  super();
6247
8152
  if (domElement === void 0) console.warn('THREE.OrbitControls: The second parameter "domElement" is now mandatory.');
@@ -6250,7 +8155,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6250
8155
  this.domElement = domElement;
6251
8156
  this.domElement.style.touchAction = "none";
6252
8157
  this.enabled = true;
6253
- this.target = new import_three21.Vector3();
8158
+ this.target = new import_three22.Vector3();
6254
8159
  this.minDistance = 0;
6255
8160
  this.maxDistance = Infinity;
6256
8161
  this.minZoom = 0;
@@ -6272,8 +8177,8 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6272
8177
  this.autoRotate = false;
6273
8178
  this.autoRotateSpeed = 2;
6274
8179
  this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" };
6275
- this.mouseButtons = { LEFT: import_three21.MOUSE.ROTATE, MIDDLE: import_three21.MOUSE.DOLLY, RIGHT: import_three21.MOUSE.PAN };
6276
- this.touches = { ONE: import_three21.TOUCH.ROTATE, TWO: import_three21.TOUCH.DOLLY_PAN };
8180
+ this.mouseButtons = { LEFT: import_three22.MOUSE.ROTATE, MIDDLE: import_three22.MOUSE.DOLLY, RIGHT: import_three22.MOUSE.PAN };
8181
+ this.touches = { ONE: import_three22.TOUCH.ROTATE, TWO: import_three22.TOUCH.DOLLY_PAN };
6277
8182
  this.target0 = this.target.clone();
6278
8183
  this.position0 = this.object.position.clone();
6279
8184
  this.zoom0 = this.object.zoom;
@@ -6302,11 +8207,11 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6302
8207
  state = STATE.NONE;
6303
8208
  };
6304
8209
  this.update = function() {
6305
- const offset = new import_three21.Vector3();
6306
- const quat = new import_three21.Quaternion().setFromUnitVectors(object.up, new import_three21.Vector3(0, 1, 0));
8210
+ const offset = new import_three22.Vector3();
8211
+ const quat = new import_three22.Quaternion().setFromUnitVectors(object.up, new import_three22.Vector3(0, 1, 0));
6307
8212
  const quatInverse = quat.clone().invert();
6308
- const lastPosition = new import_three21.Vector3();
6309
- const lastQuaternion = new import_three21.Quaternion();
8213
+ const lastPosition = new import_three22.Vector3();
8214
+ const lastQuaternion = new import_three22.Quaternion();
6310
8215
  const twoPI = 2 * Math.PI;
6311
8216
  return function update() {
6312
8217
  const position = scope.object.position;
@@ -6392,20 +8297,20 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6392
8297
  };
6393
8298
  let state = STATE.NONE;
6394
8299
  const EPS = 1e-6;
6395
- const spherical = new import_three21.Spherical();
6396
- const sphericalDelta = new import_three21.Spherical();
8300
+ const spherical = new import_three22.Spherical();
8301
+ const sphericalDelta = new import_three22.Spherical();
6397
8302
  let scale = 1;
6398
- const panOffset = new import_three21.Vector3();
8303
+ const panOffset = new import_three22.Vector3();
6399
8304
  let zoomChanged = false;
6400
- const rotateStart = new import_three21.Vector2();
6401
- const rotateEnd = new import_three21.Vector2();
6402
- const rotateDelta = new import_three21.Vector2();
6403
- const panStart = new import_three21.Vector2();
6404
- const panEnd = new import_three21.Vector2();
6405
- const panDelta = new import_three21.Vector2();
6406
- const dollyStart = new import_three21.Vector2();
6407
- const dollyEnd = new import_three21.Vector2();
6408
- const dollyDelta = new import_three21.Vector2();
8305
+ const rotateStart = new import_three22.Vector2();
8306
+ const rotateEnd = new import_three22.Vector2();
8307
+ const rotateDelta = new import_three22.Vector2();
8308
+ const panStart = new import_three22.Vector2();
8309
+ const panEnd = new import_three22.Vector2();
8310
+ const panDelta = new import_three22.Vector2();
8311
+ const dollyStart = new import_three22.Vector2();
8312
+ const dollyEnd = new import_three22.Vector2();
8313
+ const dollyDelta = new import_three22.Vector2();
6409
8314
  const pointers = [];
6410
8315
  const pointerPositions = {};
6411
8316
  function getAutoRotationAngle() {
@@ -6421,7 +8326,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6421
8326
  sphericalDelta.phi -= angle;
6422
8327
  }
6423
8328
  const panLeft = function() {
6424
- const v = new import_three21.Vector3();
8329
+ const v = new import_three22.Vector3();
6425
8330
  return function panLeft2(distance, objectMatrix) {
6426
8331
  v.setFromMatrixColumn(objectMatrix, 0);
6427
8332
  v.multiplyScalar(-distance);
@@ -6429,7 +8334,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6429
8334
  };
6430
8335
  }();
6431
8336
  const panUp = function() {
6432
- const v = new import_three21.Vector3();
8337
+ const v = new import_three22.Vector3();
6433
8338
  return function panUp2(distance, objectMatrix) {
6434
8339
  if (scope.screenSpacePanning === true) {
6435
8340
  v.setFromMatrixColumn(objectMatrix, 1);
@@ -6442,7 +8347,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6442
8347
  };
6443
8348
  }();
6444
8349
  const pan = function() {
6445
- const offset = new import_three21.Vector3();
8350
+ const offset = new import_three22.Vector3();
6446
8351
  return function pan2(deltaX, deltaY) {
6447
8352
  const element = scope.domElement;
6448
8353
  if (scope.object.isPerspectiveCamera) {
@@ -6691,12 +8596,12 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6691
8596
  mouseAction = -1;
6692
8597
  }
6693
8598
  switch (mouseAction) {
6694
- case import_three21.MOUSE.DOLLY:
8599
+ case import_three22.MOUSE.DOLLY:
6695
8600
  if (scope.enableZoom === false) return;
6696
8601
  handleMouseDownDolly(event);
6697
8602
  state = STATE.DOLLY;
6698
8603
  break;
6699
- case import_three21.MOUSE.ROTATE:
8604
+ case import_three22.MOUSE.ROTATE:
6700
8605
  if (event.ctrlKey || event.metaKey || event.shiftKey) {
6701
8606
  if (scope.enablePan === false) return;
6702
8607
  handleMouseDownPan(event);
@@ -6707,7 +8612,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6707
8612
  state = STATE.ROTATE;
6708
8613
  }
6709
8614
  break;
6710
- case import_three21.MOUSE.PAN:
8615
+ case import_three22.MOUSE.PAN:
6711
8616
  if (event.ctrlKey || event.metaKey || event.shiftKey) {
6712
8617
  if (scope.enableRotate === false) return;
6713
8618
  handleMouseDownRotate(event);
@@ -6763,12 +8668,12 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6763
8668
  switch (pointers.length) {
6764
8669
  case 1:
6765
8670
  switch (scope.touches.ONE) {
6766
- case import_three21.TOUCH.ROTATE:
8671
+ case import_three22.TOUCH.ROTATE:
6767
8672
  if (scope.enableRotate === false) return;
6768
8673
  handleTouchStartRotate();
6769
8674
  state = STATE.TOUCH_ROTATE;
6770
8675
  break;
6771
- case import_three21.TOUCH.PAN:
8676
+ case import_three22.TOUCH.PAN:
6772
8677
  if (scope.enablePan === false) return;
6773
8678
  handleTouchStartPan();
6774
8679
  state = STATE.TOUCH_PAN;
@@ -6779,12 +8684,12 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6779
8684
  break;
6780
8685
  case 2:
6781
8686
  switch (scope.touches.TWO) {
6782
- case import_three21.TOUCH.DOLLY_PAN:
8687
+ case import_three22.TOUCH.DOLLY_PAN:
6783
8688
  if (scope.enableZoom === false && scope.enablePan === false) return;
6784
8689
  handleTouchStartDollyPan();
6785
8690
  state = STATE.TOUCH_DOLLY_PAN;
6786
8691
  break;
6787
- case import_three21.TOUCH.DOLLY_ROTATE:
8692
+ case import_three22.TOUCH.DOLLY_ROTATE:
6788
8693
  if (scope.enableZoom === false && scope.enableRotate === false) return;
6789
8694
  handleTouchStartDollyRotate();
6790
8695
  state = STATE.TOUCH_DOLLY_ROTATE;
@@ -6851,7 +8756,7 @@ var OrbitControls = class extends import_three21.EventDispatcher {
6851
8756
  function trackPointer(event) {
6852
8757
  let position = pointerPositions[event.pointerId];
6853
8758
  if (position === void 0) {
6854
- position = new import_three21.Vector2();
8759
+ position = new import_three22.Vector2();
6855
8760
  pointerPositions[event.pointerId] = position;
6856
8761
  }
6857
8762
  position.set(event.pageX, event.pageY);
@@ -6871,10 +8776,10 @@ var MapControls = class extends OrbitControls {
6871
8776
  constructor(object, domElement) {
6872
8777
  super(object, domElement);
6873
8778
  this.screenSpacePanning = false;
6874
- this.mouseButtons.LEFT = import_three21.MOUSE.PAN;
6875
- this.mouseButtons.RIGHT = import_three21.MOUSE.ROTATE;
6876
- this.touches.ONE = import_three21.TOUCH.PAN;
6877
- this.touches.TWO = import_three21.TOUCH.DOLLY_ROTATE;
8779
+ this.mouseButtons.LEFT = import_three22.MOUSE.PAN;
8780
+ this.mouseButtons.RIGHT = import_three22.MOUSE.ROTATE;
8781
+ this.touches.ONE = import_three22.TOUCH.PAN;
8782
+ this.touches.TWO = import_three22.TOUCH.DOLLY_ROTATE;
6878
8783
  }
6879
8784
  };
6880
8785
 
@@ -6919,8 +8824,8 @@ var Renderer = class _Renderer {
6919
8824
  top: void 0,
6920
8825
  bottom: void 0
6921
8826
  },
6922
- position: new import_three22.Vector3(50, 50, 50),
6923
- lookingAt: new import_three22.Vector3(0, 0, 0)
8827
+ position: new import_three23.Vector3(50, 50, 50),
8828
+ lookingAt: new import_three23.Vector3(0, 0, 0)
6924
8829
  },
6925
8830
  render: {
6926
8831
  fpsLimit: 60,
@@ -6950,14 +8855,14 @@ var Renderer = class _Renderer {
6950
8855
  switch (this.options.camera.type) {
6951
8856
  case "perspective":
6952
8857
  default:
6953
- return new import_three22.PerspectiveCamera(
8858
+ return new import_three23.PerspectiveCamera(
6954
8859
  this.options.camera.perspective.fov,
6955
8860
  this.options.camera.perspective.aspect ?? this.viewWidth / this.viewHeight,
6956
8861
  this.options.camera.near,
6957
8862
  this.options.camera.far
6958
8863
  );
6959
8864
  case "orthographic":
6960
- return new import_three22.OrthographicCamera(
8865
+ return new import_three23.OrthographicCamera(
6961
8866
  this.options.camera.orthographic.left ?? this.viewWidth / -2,
6962
8867
  this.options.camera.orthographic.right ?? this.viewWidth / 2,
6963
8868
  this.options.camera.orthographic.top ?? this.viewHeight / 2,
@@ -6968,7 +8873,7 @@ var Renderer = class _Renderer {
6968
8873
  }
6969
8874
  }
6970
8875
  createRenderer() {
6971
- const renderer = new import_three22.WebGLRenderer({
8876
+ const renderer = new import_three23.WebGLRenderer({
6972
8877
  antialias: this.options.render.antialias,
6973
8878
  alpha: true,
6974
8879
  powerPreference: "high-performance",
@@ -6976,8 +8881,8 @@ var Renderer = class _Renderer {
6976
8881
  });
6977
8882
  renderer.setClearColor(0, 0);
6978
8883
  renderer.shadowMap.enabled = true;
6979
- renderer.shadowMap.type = import_three22.PCFSoftShadowMap;
6980
- renderer.outputColorSpace = import_three22.SRGBColorSpace;
8884
+ renderer.shadowMap.type = import_three23.PCFSoftShadowMap;
8885
+ renderer.outputColorSpace = import_three23.SRGBColorSpace;
6981
8886
  renderer.setSize(this.viewWidth, this.viewHeight);
6982
8887
  return renderer;
6983
8888
  }
@@ -7011,20 +8916,20 @@ var Renderer = class _Renderer {
7011
8916
  window["__THREE_DEVTOOLS__"].dispatchEvent(new CustomEvent("observe", { detail: this.scene }));
7012
8917
  }
7013
8918
  if (this.options.debug.grid) {
7014
- const gridHelper = new import_three22.GridHelper(128, 16);
8919
+ const gridHelper = new import_three23.GridHelper(128, 16);
7015
8920
  this._debugHelpers.push(gridHelper);
7016
8921
  this.scene.add(gridHelper);
7017
- const gridHelper2 = new import_three22.GridHelper(128, 16);
8922
+ const gridHelper2 = new import_three23.GridHelper(128, 16);
7018
8923
  this._debugHelpers.push(gridHelper2);
7019
8924
  gridHelper2.rotation.x = 90 * (Math.PI / 180);
7020
8925
  this.scene.add(gridHelper2);
7021
- const gridHelper3 = new import_three22.GridHelper(128, 16);
8926
+ const gridHelper3 = new import_three23.GridHelper(128, 16);
7022
8927
  this._debugHelpers.push(gridHelper3);
7023
8928
  gridHelper3.rotation.z = 90 * (Math.PI / 180);
7024
8929
  this.scene.add(gridHelper3);
7025
8930
  }
7026
8931
  if (this.options.debug.axes) {
7027
- const axesHelper = new import_three22.AxesHelper(64);
8932
+ const axesHelper = new import_three23.AxesHelper(64);
7028
8933
  this._debugHelpers.push(axesHelper);
7029
8934
  this.scene.add(axesHelper);
7030
8935
  }
@@ -7378,9 +9283,6 @@ var Skins = class {
7378
9283
  //</editor-fold>
7379
9284
  };
7380
9285
 
7381
- // src/world/Chunk.ts
7382
- var import_three25 = require("three");
7383
-
7384
9286
  // src/world/ChunkData.ts
7385
9287
  var ChunkData = class _ChunkData {
7386
9288
  constructor() {
@@ -7462,29 +9364,204 @@ var ChunkData = class _ChunkData {
7462
9364
  }
7463
9365
  };
7464
9366
 
9367
+ // src/world/AnvilParser.ts
9368
+ var AnvilParser = class {
9369
+ static getChunkList(data) {
9370
+ return this.locations(this.bytes(data)).map(({ x, z }) => ({ x, z }));
9371
+ }
9372
+ static async parse(data) {
9373
+ const bytes = this.bytes(data);
9374
+ const chunks = [];
9375
+ for (const location of this.locations(bytes)) chunks.push(await this.readChunk(bytes, location));
9376
+ return { chunks };
9377
+ }
9378
+ static async parseChunk(data, localX, localZ) {
9379
+ if (![localX, localZ].every((value) => Number.isInteger(value) && value >= 0 && value < 32)) {
9380
+ throw new RangeError("Region-local chunk coordinates must be integers from 0 to 31");
9381
+ }
9382
+ const bytes = this.bytes(data);
9383
+ const location = this.locations(bytes).find(({ x, z }) => x === localX && z === localZ);
9384
+ return location ? this.readChunk(bytes, location) : void 0;
9385
+ }
9386
+ static bytes(data) {
9387
+ return data instanceof Uint8Array ? data : new Uint8Array(data);
9388
+ }
9389
+ static locations(data) {
9390
+ if (data.byteLength < 8192) throw new MineRenderError("Anvil region header is truncated");
9391
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
9392
+ const locations = [];
9393
+ for (let index = 0; index < 1024; index++) {
9394
+ const entry = view.getUint32(index * 4);
9395
+ if (entry === 0) continue;
9396
+ const sector = entry >>> 8;
9397
+ const count = entry & 255;
9398
+ if (sector < 2 || count === 0 || (sector + count) * 4096 > data.byteLength) {
9399
+ throw new MineRenderError(`Invalid Anvil sector allocation at chunk ${index % 32},${Math.floor(index / 32)}`);
9400
+ }
9401
+ const offset = sector * 4096;
9402
+ const length = view.getUint32(offset);
9403
+ if (length < 1 || length + 4 > count * 4096) {
9404
+ throw new MineRenderError(`Invalid Anvil chunk payload length at sector ${sector}`);
9405
+ }
9406
+ locations.push({ x: index % 32, z: Math.floor(index / 32), offset, length });
9407
+ }
9408
+ return locations;
9409
+ }
9410
+ static async readChunk(data, location) {
9411
+ const compression = data[location.offset + 4];
9412
+ if (compression & 128) throw new MineRenderError("External Anvil .mcc chunks are not supported");
9413
+ if (compression !== 1 && compression !== 2 && compression !== 3) {
9414
+ throw new MineRenderError(`Unsupported Anvil compression ${compression}${compression === 4 ? " (LZ4)" : ""}`);
9415
+ }
9416
+ let payload = data.subarray(location.offset + 5, location.offset + 4 + location.length);
9417
+ if (compression !== 3) {
9418
+ const stream = new Blob([payload]).stream().pipeThrough(new DecompressionStream(compression === 1 ? "gzip" : "deflate"));
9419
+ payload = new Uint8Array(await new Response(stream).arrayBuffer());
9420
+ }
9421
+ const nbt = await NBTHelper.fromBuffer(payload, "big");
9422
+ const root = nbt.value;
9423
+ const level = root.Level?.type === "compound" ? root.Level.value : root;
9424
+ const dataVersion = root.DataVersion?.type === "int" ? root.DataVersion.value : void 0;
9425
+ const chunk = {
9426
+ x: this.integer(level.xPos, "xPos"),
9427
+ z: this.integer(level.zPos, "zPos"),
9428
+ dataVersion,
9429
+ sections: []
9430
+ };
9431
+ if ((chunk.x % 32 + 32) % 32 !== location.x || (chunk.z % 32 + 32) % 32 !== location.z) {
9432
+ throw new MineRenderError("Anvil chunk coordinates do not match its region location");
9433
+ }
9434
+ for (const section of this.compounds(level.sections ?? level.Sections, "sections")) {
9435
+ const y = this.integer(section.Y, "section Y");
9436
+ if (section.Blocks || section.Data || section.Add) {
9437
+ throw new MineRenderError("Numeric Anvil block IDs before Minecraft 1.13 are not supported");
9438
+ }
9439
+ if (section.block_states && section.block_states.type !== "compound") {
9440
+ throw new MineRenderError("Anvil block_states must be a compound");
9441
+ }
9442
+ const modern = section.block_states?.type === "compound" ? section.block_states.value : void 0;
9443
+ const paletteTag = modern ? modern.palette : section.Palette;
9444
+ const palette = paletteTag?.type === "list" && paletteTag.value.type === "string" ? paletteTag.value.value : this.compounds(paletteTag, "block palette");
9445
+ const data2 = new ChunkData();
9446
+ if (palette.length) {
9447
+ const states = palette.map((entry) => this.block(entry));
9448
+ const indices = this.unpack(modern ? modern.data : section.BlockStates, states.length, !!modern, dataVersion);
9449
+ for (let index = 0; index < 4096; index++) {
9450
+ const state = states[indices[index]];
9451
+ if (!state) throw new MineRenderError(`Anvil palette index ${indices[index]} is out of range`);
9452
+ if (!ChunkData.isAir(state)) data2.set(index, state);
9453
+ }
9454
+ } else if (modern || section.Palette || section.BlockStates) {
9455
+ throw new MineRenderError("Anvil section has block states without a palette");
9456
+ }
9457
+ if (chunk.sections.some((section2) => section2.y === y)) throw new MineRenderError(`Duplicate Anvil section Y ${y}`);
9458
+ chunk.sections.push({ y, data: data2 });
9459
+ }
9460
+ for (const entry of this.compounds(level.block_entities ?? level.TileEntities, "block entities")) {
9461
+ const x = this.integer(entry.x, "block entity x") - chunk.x * 16;
9462
+ const y = this.integer(entry.y, "block entity y");
9463
+ const z = this.integer(entry.z, "block entity z") - chunk.z * 16;
9464
+ const sectionY = Math.floor(y / 16);
9465
+ const section = chunk.sections.find((section2) => section2.y === sectionY);
9466
+ if (!section || x < 0 || x >= 16 || z < 0 || z >= 16) continue;
9467
+ const index = x + z * 16 + (y - sectionY * 16) * 256;
9468
+ const block = section.data.get(index);
9469
+ if (block) section.data.set(index, { ...block, nbt: { type: "compound", value: entry } });
9470
+ }
9471
+ const entities = this.compounds(level.entities ?? level.Entities, "entities");
9472
+ if (entities.length) {
9473
+ chunk.entities = entities.map((value) => {
9474
+ const position = value.Pos;
9475
+ if (position?.type !== "list" || position.value.type !== "double" || position.value.value.length !== 3 || !position.value.value.every(Number.isFinite)) {
9476
+ throw new MineRenderError("Anvil entity Pos must contain three coordinates");
9477
+ }
9478
+ return { position: [...position.value.value], nbt: { type: "compound", value } };
9479
+ });
9480
+ }
9481
+ return chunk;
9482
+ }
9483
+ static compounds(tag, name) {
9484
+ if (!tag) return [];
9485
+ if (tag.type !== "list" || tag.value.type !== "compound" && tag.value.value.length !== 0) {
9486
+ throw new MineRenderError(`Anvil ${name} must be a compound list`);
9487
+ }
9488
+ return tag.value.value;
9489
+ }
9490
+ static integer(tag, name) {
9491
+ if (!tag || typeof tag.value !== "number" || !Number.isInteger(tag.value)) {
9492
+ throw new MineRenderError(`Anvil ${name} must be an integer`);
9493
+ }
9494
+ return tag.value;
9495
+ }
9496
+ static block(entry) {
9497
+ if (typeof entry === "string") entry = { id: { type: "string", value: entry } };
9498
+ if (Object.keys(entry).length === 1 && entry[""]?.type === "string") entry = { id: entry[""] };
9499
+ const name = entry.id ?? entry.Name;
9500
+ const properties = entry.properties ?? entry.Properties;
9501
+ if (name?.type !== "string" || !name.value) throw new MineRenderError("Anvil palette entry has no block name");
9502
+ const block = { type: name.value };
9503
+ if (properties?.type === "compound") {
9504
+ block.properties = {};
9505
+ for (const [key, value] of Object.entries(properties.value)) {
9506
+ if (value?.type !== "string") throw new MineRenderError("Anvil block properties must be strings");
9507
+ block.properties[key] = value.value;
9508
+ }
9509
+ }
9510
+ return block;
9511
+ }
9512
+ static unpack(tag, paletteSize, modern, dataVersion) {
9513
+ const indices = new Uint16Array(4096);
9514
+ if (paletteSize === 1 && (!tag || tag.type === "longArray" && tag.value.length === 0)) return indices;
9515
+ if (tag?.type !== "longArray") throw new MineRenderError("Anvil section is missing its block-state long array");
9516
+ const bits = Math.max(4, Math.ceil(Math.log2(paletteSize)));
9517
+ if (paletteSize > 4096) throw new MineRenderError("Anvil block palette exceeds 4096 entries");
9518
+ if (!modern && dataVersion === void 0 && 64 % bits !== 0) {
9519
+ throw new MineRenderError("Anvil DataVersion is required to decode this block-state layout");
9520
+ }
9521
+ const padded = modern || (dataVersion ?? 0) >= 2527;
9522
+ const perLong = Math.floor(64 / bits);
9523
+ const expected = padded ? Math.ceil(4096 / perLong) : Math.ceil(4096 * bits / 64);
9524
+ if (tag.value.length !== expected) throw new MineRenderError(`Invalid Anvil block-state array length: expected ${expected}`);
9525
+ const words = tag.value.map(([high, low]) => BigInt(high >>> 0) << 32n | BigInt(low >>> 0));
9526
+ const mask = (1n << BigInt(bits)) - 1n;
9527
+ for (let index = 0; index < 4096; index++) {
9528
+ const word = padded ? Math.floor(index / perLong) : Math.floor(index * bits / 64);
9529
+ const shift = padded ? index % perLong * bits : index * bits % 64;
9530
+ let value = words[word] >> BigInt(shift);
9531
+ if (!padded && shift + bits > 64) value |= words[word + 1] << BigInt(64 - shift);
9532
+ indices[index] = Number(value & mask);
9533
+ }
9534
+ return indices;
9535
+ }
9536
+ };
9537
+
9538
+ // src/world/Chunk.ts
9539
+ var import_three26 = require("three");
9540
+
7465
9541
  // src/world/MineRenderWorld.ts
7466
- var import_three24 = require("three");
9542
+ var import_three25 = require("three");
7467
9543
  var MineRenderWorld = class {
7468
9544
  constructor(scene) {
7469
9545
  this._chunks = /* @__PURE__ */ new Map();
9546
+ this.pendingCulling = /* @__PURE__ */ new Map();
7470
9547
  this.scene = scene;
7471
9548
  }
7472
9549
  getBlockAt(posOrX, y, z) {
7473
9550
  if (typeof posOrX == "number") {
7474
- return this.getBlockAt(new import_three24.Vector3(posOrX, y, z));
9551
+ return this.getBlockAt(new import_three25.Vector3(posOrX, y, z));
7475
9552
  }
7476
9553
  if (isTripleArray(posOrX)) {
7477
- return this.getBlockAt(new import_three24.Vector3(posOrX[0], posOrX[1], posOrX[2]));
9554
+ return this.getBlockAt(new import_three25.Vector3(posOrX[0], posOrX[1], posOrX[2]));
7478
9555
  }
7479
9556
  this.validatePosBounds(posOrX);
7480
9557
  return this.getChunkAt(posOrX)?.getBlockAt(posOrX);
7481
9558
  }
7482
9559
  async setBlockAt(posOrX, yOrBlock, z, block) {
7483
9560
  if (typeof posOrX == "number") {
7484
- return this.setBlockAt(new import_three24.Vector3(posOrX, yOrBlock, z), block);
9561
+ return this.setBlockAt(new import_three25.Vector3(posOrX, yOrBlock, z), block);
7485
9562
  }
7486
9563
  if (isTripleArray(posOrX)) {
7487
- return this.setBlockAt(new import_three24.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
9564
+ return this.setBlockAt(new import_three25.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
7488
9565
  }
7489
9566
  this.validatePosBounds(posOrX);
7490
9567
  const value = yOrBlock;
@@ -7526,17 +9603,78 @@ var MineRenderWorld = class {
7526
9603
  if (!executor) queue.stop();
7527
9604
  }
7528
9605
  }
9606
+ /** Replaces one chunk column's blocks. Entity NBT remains available on the parsed chunk. */
9607
+ async placeChunk(chunk, executor) {
9608
+ const previous = [...this._chunks.entries()].filter(([, section]) => section.x === chunk.x && section.z === chunk.z);
9609
+ for (const [key, section] of previous) {
9610
+ this._chunks.delete(key);
9611
+ await section.dispose();
9612
+ }
9613
+ for (const section of chunk.sections) {
9614
+ const blocks = [];
9615
+ for (let index = 0; index < 4096; index++) {
9616
+ const block = section.data.get(index);
9617
+ if (block) blocks.push({
9618
+ ...block,
9619
+ position: [
9620
+ chunk.x * 16 + index % 16,
9621
+ section.y * 16 + Math.floor(index / 256),
9622
+ chunk.z * 16 + Math.floor(index / 16) % 16
9623
+ ]
9624
+ });
9625
+ }
9626
+ await this.placeMultiBlock({ size: [16, 16, 16], blocks }, true, executor);
9627
+ }
9628
+ }
7529
9629
  async clear() {
7530
- for (const chunk of this._chunks.values()) {
9630
+ await this.culling;
9631
+ const chunks = [...this._chunks.values()];
9632
+ this._chunks.clear();
9633
+ for (const chunk of chunks) {
7531
9634
  await chunk.dispose();
7532
9635
  }
7533
- this._chunks.clear();
9636
+ }
9637
+ updateCulling(positions) {
9638
+ for (const pos of positions) {
9639
+ this.pendingCulling.set(pos.toArray().join(","), pos.clone());
9640
+ for (const offset of CUBE_FACE_OFFSETS) {
9641
+ const neighbor = pos.clone().add(new import_three25.Vector3(...offset));
9642
+ this.pendingCulling.set(neighbor.toArray().join(","), neighbor);
9643
+ }
9644
+ }
9645
+ return this.culling ??= Promise.resolve().then(async () => {
9646
+ try {
9647
+ while (this.pendingCulling.size) {
9648
+ const batch = [...this.pendingCulling.values()];
9649
+ this.pendingCulling.clear();
9650
+ for (const pos of batch) {
9651
+ const block = this.getBlockAt(pos)?.object;
9652
+ if (!block) continue;
9653
+ let mask = 0;
9654
+ for (const [face, offset] of CUBE_FACE_OFFSETS.entries()) {
9655
+ if (this.getBlockAt(pos.clone().add(new import_three25.Vector3(...offset)))?.object.isOccluding) {
9656
+ mask |= 1 << face;
9657
+ }
9658
+ }
9659
+ await block.setCullMask(mask);
9660
+ }
9661
+ }
9662
+ } finally {
9663
+ this.culling = void 0;
9664
+ }
9665
+ });
7534
9666
  }
7535
9667
  getOrCreateChunkAt(pos) {
7536
9668
  const key = this.worldPosToChunkKey(pos);
7537
9669
  let chunk = this._chunks.get(key);
7538
9670
  if (typeof chunk === "undefined") {
7539
- chunk = new Chunk(this.scene, Math.floor(pos.x / 16), Math.floor(pos.y / 16), Math.floor(pos.z / 16));
9671
+ chunk = new Chunk(
9672
+ this.scene,
9673
+ Math.floor(pos.x / 16),
9674
+ Math.floor(pos.y / 16),
9675
+ Math.floor(pos.z / 16),
9676
+ (positions) => this.updateCulling(positions)
9677
+ );
7540
9678
  this._chunks.set(key, chunk);
7541
9679
  }
7542
9680
  return chunk;
@@ -7545,14 +9683,14 @@ var MineRenderWorld = class {
7545
9683
  return this._chunks.get(this.worldPosToChunkKey(pos));
7546
9684
  }
7547
9685
  static worldToScenePosition(pos) {
7548
- return new import_three24.Vector3(
9686
+ return new import_three25.Vector3(
7549
9687
  pos.x * 16,
7550
9688
  pos.y * 16,
7551
9689
  pos.z * 16
7552
9690
  );
7553
9691
  }
7554
9692
  static sceneToWorldPosition(pos) {
7555
- return new import_three24.Vector3(
9693
+ return new import_three25.Vector3(
7556
9694
  pos.x / 16,
7557
9695
  pos.y / 16,
7558
9696
  pos.z / 16
@@ -7573,7 +9711,8 @@ var MineRenderWorld = class {
7573
9711
 
7574
9712
  // src/world/Chunk.ts
7575
9713
  var Chunk = class _Chunk {
7576
- constructor(scene, x, y, z) {
9714
+ constructor(scene, x, y, z, onBlocksChanged) {
9715
+ this.onBlocksChanged = onBlocksChanged;
7577
9716
  this.data = new ChunkData();
7578
9717
  this.renderedBlocks = /* @__PURE__ */ new Map();
7579
9718
  this.scene = scene;
@@ -7583,10 +9722,10 @@ var Chunk = class _Chunk {
7583
9722
  }
7584
9723
  getBlockAt(posOrX, y, z) {
7585
9724
  if (typeof posOrX == "number") {
7586
- return this.getBlockAt(new import_three25.Vector3(posOrX, y, z));
9725
+ return this.getBlockAt(new import_three26.Vector3(posOrX, y, z));
7587
9726
  }
7588
9727
  if (isTripleArray(posOrX)) {
7589
- return this.getBlockAt(new import_three25.Vector3(posOrX[0], posOrX[1], posOrX[2]));
9728
+ return this.getBlockAt(new import_three26.Vector3(posOrX[0], posOrX[1], posOrX[2]));
7590
9729
  }
7591
9730
  const pos = this.worldPosToChunkPos(posOrX);
7592
9731
  const index = _Chunk.chunkPosToBlockIndex(pos);
@@ -7594,10 +9733,10 @@ var Chunk = class _Chunk {
7594
9733
  }
7595
9734
  async setBlockAt(posOrX, yOrBlock, z, block) {
7596
9735
  if (typeof posOrX == "number") {
7597
- return this.setBlockAt(new import_three25.Vector3(posOrX, yOrBlock, z), block);
9736
+ return this.setBlockAt(new import_three26.Vector3(posOrX, yOrBlock, z), block);
7598
9737
  }
7599
9738
  if (isTripleArray(posOrX)) {
7600
- return this.setBlockAt(new import_three25.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
9739
+ return this.setBlockAt(new import_three26.Vector3(posOrX[0], posOrX[1], posOrX[2]), yOrBlock);
7601
9740
  }
7602
9741
  const worldPos = posOrX;
7603
9742
  const pos = this.worldPosToChunkPos(worldPos);
@@ -7616,10 +9755,10 @@ var Chunk = class _Chunk {
7616
9755
  const readBlock = this.data.snapshot(index);
7617
9756
  this.renderedBlocks.get(index)?.object.removeFromScene();
7618
9757
  this.renderedBlocks.delete(index);
7619
- if (!readBlock) return void 0;
7620
- const stored = readBlock();
7621
9758
  let object;
7622
9759
  try {
9760
+ if (!readBlock) return void 0;
9761
+ const stored = readBlock();
7623
9762
  const blockState = await BlockStates.get(AssetKey.parse("blockstates", stored.type));
7624
9763
  if (!blockState) {
7625
9764
  this.data.set(index, void 0);
@@ -7641,12 +9780,18 @@ var Chunk = class _Chunk {
7641
9780
  this.data.set(index, void 0);
7642
9781
  object?.removeFromScene();
7643
9782
  throw error;
9783
+ } finally {
9784
+ await this.onBlocksChanged?.([worldPos]);
7644
9785
  }
7645
9786
  }
7646
9787
  async clear() {
9788
+ const positions = [...this.renderedBlocks.keys()].map((index) => this.chunkPosToWorldPos(
9789
+ new import_three26.Vector3(index % 16, Math.floor(index / 256), Math.floor(index / 16) % 16)
9790
+ ));
7647
9791
  for (const info of this.renderedBlocks.values()) info.object.removeFromScene();
7648
9792
  this.renderedBlocks.clear();
7649
9793
  this.data.clear();
9794
+ await this.onBlocksChanged?.(positions);
7650
9795
  }
7651
9796
  async dispose() {
7652
9797
  await this.clear();
@@ -7661,14 +9806,14 @@ var Chunk = class _Chunk {
7661
9806
  return pos.y * 16 * 16 + pos.z * 16 + pos.x;
7662
9807
  }
7663
9808
  worldPosToChunkPos(pos) {
7664
- return new import_three25.Vector3(
9809
+ return new import_three26.Vector3(
7665
9810
  pos.x - this.x * 16,
7666
9811
  pos.y - this.y * 16,
7667
9812
  pos.z - this.z * 16
7668
9813
  );
7669
9814
  }
7670
9815
  chunkPosToWorldPos(pos) {
7671
- return new import_three25.Vector3(
9816
+ return new import_three26.Vector3(
7672
9817
  this.x * 16 + pos.x,
7673
9818
  this.y * 16 + pos.y,
7674
9819
  this.z * 16 + pos.z
@@ -7678,6 +9823,7 @@ var Chunk = class _Chunk {
7678
9823
  // Annotate the CommonJS export names for ESM import in node:
7679
9824
  0 && (module.exports = {
7680
9825
  AXES,
9826
+ AnvilParser,
7681
9827
  ArchiveAssetSource,
7682
9828
  AssetKey,
7683
9829
  AssetLoadError,
@@ -7695,6 +9841,7 @@ var Chunk = class _Chunk {
7695
9841
  BlockTints,
7696
9842
  BrowserArchiveProxy,
7697
9843
  CUBE_FACES,
9844
+ CUBE_FACE_OFFSETS,
7698
9845
  Caching,
7699
9846
  CanvasImage,
7700
9847
  Chunk,
@@ -7728,6 +9875,7 @@ var Chunk = class _Chunk {
7728
9875
  MineRenderWorld,
7729
9876
  MinecraftCubeTexture,
7730
9877
  MinecraftFaceUV,
9878
+ ModelCulling,
7731
9879
  ModelGenerator,
7732
9880
  ModelMerger,
7733
9881
  ModelObject,