amulet-core 1.9.19__py3-none-any.whl → 1.9.20__py3-none-any.whl

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.

Potentially problematic release.


This version of amulet-core might be problematic. Click here for more details.

Files changed (198) hide show
  1. amulet/__init__.py +27 -27
  2. amulet/__pyinstaller/__init__.py +2 -2
  3. amulet/__pyinstaller/hook-amulet.py +4 -4
  4. amulet/_version.py +21 -21
  5. amulet/api/__init__.py +2 -2
  6. amulet/api/abstract_base_entity.py +128 -128
  7. amulet/api/block.py +630 -630
  8. amulet/api/block_entity.py +71 -71
  9. amulet/api/cache.py +107 -107
  10. amulet/api/chunk/__init__.py +6 -6
  11. amulet/api/chunk/biomes.py +207 -207
  12. amulet/api/chunk/block_entity_dict.py +175 -175
  13. amulet/api/chunk/blocks.py +46 -46
  14. amulet/api/chunk/chunk.py +389 -389
  15. amulet/api/chunk/entity_list.py +75 -75
  16. amulet/api/chunk/status.py +167 -167
  17. amulet/api/data_types/__init__.py +4 -4
  18. amulet/api/data_types/generic_types.py +4 -4
  19. amulet/api/data_types/operation_types.py +16 -16
  20. amulet/api/data_types/world_types.py +49 -49
  21. amulet/api/data_types/wrapper_types.py +71 -71
  22. amulet/api/entity.py +74 -74
  23. amulet/api/errors.py +119 -119
  24. amulet/api/history/__init__.py +36 -36
  25. amulet/api/history/base/__init__.py +3 -3
  26. amulet/api/history/base/base_history.py +26 -26
  27. amulet/api/history/base/history_manager.py +63 -63
  28. amulet/api/history/base/revision_manager.py +73 -73
  29. amulet/api/history/changeable.py +15 -15
  30. amulet/api/history/data_types.py +7 -7
  31. amulet/api/history/history_manager/__init__.py +3 -3
  32. amulet/api/history/history_manager/container.py +102 -102
  33. amulet/api/history/history_manager/database.py +279 -279
  34. amulet/api/history/history_manager/meta.py +93 -93
  35. amulet/api/history/history_manager/object.py +116 -116
  36. amulet/api/history/revision_manager/__init__.py +2 -2
  37. amulet/api/history/revision_manager/disk.py +33 -33
  38. amulet/api/history/revision_manager/ram.py +12 -12
  39. amulet/api/item.py +75 -75
  40. amulet/api/level/__init__.py +4 -4
  41. amulet/api/level/base_level/__init__.py +1 -1
  42. amulet/api/level/base_level/base_level.py +1035 -1026
  43. amulet/api/level/base_level/chunk_manager.py +227 -227
  44. amulet/api/level/base_level/clone.py +389 -389
  45. amulet/api/level/base_level/player_manager.py +101 -101
  46. amulet/api/level/immutable_structure/__init__.py +1 -1
  47. amulet/api/level/immutable_structure/immutable_structure.py +94 -94
  48. amulet/api/level/immutable_structure/void_format_wrapper.py +117 -117
  49. amulet/api/level/structure.py +22 -22
  50. amulet/api/level/world.py +19 -19
  51. amulet/api/partial_3d_array/__init__.py +2 -2
  52. amulet/api/partial_3d_array/base_partial_3d_array.py +263 -263
  53. amulet/api/partial_3d_array/bounded_partial_3d_array.py +528 -528
  54. amulet/api/partial_3d_array/data_types.py +15 -15
  55. amulet/api/partial_3d_array/unbounded_partial_3d_array.py +229 -229
  56. amulet/api/partial_3d_array/util.py +152 -152
  57. amulet/api/player.py +65 -65
  58. amulet/api/registry/__init__.py +2 -2
  59. amulet/api/registry/base_registry.py +34 -34
  60. amulet/api/registry/biome_manager.py +153 -153
  61. amulet/api/registry/block_manager.py +156 -156
  62. amulet/api/selection/__init__.py +2 -2
  63. amulet/api/selection/abstract_selection.py +315 -315
  64. amulet/api/selection/box.py +805 -805
  65. amulet/api/selection/group.py +488 -488
  66. amulet/api/structure.py +37 -37
  67. amulet/api/wrapper/__init__.py +8 -8
  68. amulet/api/wrapper/chunk/interface.py +441 -441
  69. amulet/api/wrapper/chunk/translator.py +567 -567
  70. amulet/api/wrapper/format_wrapper.py +772 -772
  71. amulet/api/wrapper/structure_format_wrapper.py +116 -116
  72. amulet/api/wrapper/world_format_wrapper.py +63 -63
  73. amulet/level/__init__.py +1 -1
  74. amulet/level/formats/anvil_forge_world.py +40 -40
  75. amulet/level/formats/anvil_world/__init__.py +3 -3
  76. amulet/level/formats/anvil_world/_sector_manager.py +291 -384
  77. amulet/level/formats/anvil_world/data_pack/__init__.py +2 -2
  78. amulet/level/formats/anvil_world/data_pack/data_pack.py +224 -224
  79. amulet/level/formats/anvil_world/data_pack/data_pack_manager.py +77 -77
  80. amulet/level/formats/anvil_world/dimension.py +177 -177
  81. amulet/level/formats/anvil_world/format.py +769 -769
  82. amulet/level/formats/anvil_world/region.py +384 -384
  83. amulet/level/formats/construction/__init__.py +3 -3
  84. amulet/level/formats/construction/format_wrapper.py +515 -515
  85. amulet/level/formats/construction/interface.py +134 -134
  86. amulet/level/formats/construction/section.py +60 -60
  87. amulet/level/formats/construction/util.py +165 -165
  88. amulet/level/formats/leveldb_world/__init__.py +3 -3
  89. amulet/level/formats/leveldb_world/chunk.py +33 -33
  90. amulet/level/formats/leveldb_world/dimension.py +385 -419
  91. amulet/level/formats/leveldb_world/format.py +659 -641
  92. amulet/level/formats/leveldb_world/interface/chunk/__init__.py +36 -36
  93. amulet/level/formats/leveldb_world/interface/chunk/base_leveldb_interface.py +836 -836
  94. amulet/level/formats/leveldb_world/interface/chunk/generate_interface.py +31 -31
  95. amulet/level/formats/leveldb_world/interface/chunk/leveldb_0.py +30 -30
  96. amulet/level/formats/leveldb_world/interface/chunk/leveldb_1.py +12 -12
  97. amulet/level/formats/leveldb_world/interface/chunk/leveldb_10.py +12 -12
  98. amulet/level/formats/leveldb_world/interface/chunk/leveldb_11.py +12 -12
  99. amulet/level/formats/leveldb_world/interface/chunk/leveldb_12.py +12 -12
  100. amulet/level/formats/leveldb_world/interface/chunk/leveldb_13.py +12 -12
  101. amulet/level/formats/leveldb_world/interface/chunk/leveldb_14.py +12 -12
  102. amulet/level/formats/leveldb_world/interface/chunk/leveldb_15.py +12 -12
  103. amulet/level/formats/leveldb_world/interface/chunk/leveldb_16.py +12 -12
  104. amulet/level/formats/leveldb_world/interface/chunk/leveldb_17.py +12 -12
  105. amulet/level/formats/leveldb_world/interface/chunk/leveldb_18.py +12 -12
  106. amulet/level/formats/leveldb_world/interface/chunk/leveldb_19.py +12 -12
  107. amulet/level/formats/leveldb_world/interface/chunk/leveldb_2.py +12 -12
  108. amulet/level/formats/leveldb_world/interface/chunk/leveldb_20.py +12 -12
  109. amulet/level/formats/leveldb_world/interface/chunk/leveldb_21.py +12 -12
  110. amulet/level/formats/leveldb_world/interface/chunk/leveldb_22.py +12 -12
  111. amulet/level/formats/leveldb_world/interface/chunk/leveldb_23.py +10 -10
  112. amulet/level/formats/leveldb_world/interface/chunk/leveldb_24.py +10 -10
  113. amulet/level/formats/leveldb_world/interface/chunk/leveldb_25.py +24 -24
  114. amulet/level/formats/leveldb_world/interface/chunk/leveldb_26.py +10 -10
  115. amulet/level/formats/leveldb_world/interface/chunk/leveldb_27.py +10 -10
  116. amulet/level/formats/leveldb_world/interface/chunk/leveldb_28.py +10 -10
  117. amulet/level/formats/leveldb_world/interface/chunk/leveldb_29.py +33 -33
  118. amulet/level/formats/leveldb_world/interface/chunk/leveldb_3.py +57 -57
  119. amulet/level/formats/leveldb_world/interface/chunk/leveldb_30.py +10 -10
  120. amulet/level/formats/leveldb_world/interface/chunk/leveldb_31.py +10 -10
  121. amulet/level/formats/leveldb_world/interface/chunk/leveldb_32.py +10 -10
  122. amulet/level/formats/leveldb_world/interface/chunk/leveldb_33.py +10 -10
  123. amulet/level/formats/leveldb_world/interface/chunk/leveldb_34.py +10 -10
  124. amulet/level/formats/leveldb_world/interface/chunk/leveldb_35.py +10 -10
  125. amulet/level/formats/leveldb_world/interface/chunk/leveldb_36.py +10 -10
  126. amulet/level/formats/leveldb_world/interface/chunk/leveldb_37.py +10 -10
  127. amulet/level/formats/leveldb_world/interface/chunk/leveldb_38.py +10 -10
  128. amulet/level/formats/leveldb_world/interface/chunk/leveldb_39.py +12 -12
  129. amulet/level/formats/leveldb_world/interface/chunk/leveldb_4.py +12 -12
  130. amulet/level/formats/leveldb_world/interface/chunk/leveldb_40.py +16 -16
  131. amulet/level/formats/leveldb_world/interface/chunk/leveldb_5.py +12 -12
  132. amulet/level/formats/leveldb_world/interface/chunk/leveldb_6.py +12 -12
  133. amulet/level/formats/leveldb_world/interface/chunk/leveldb_7.py +12 -12
  134. amulet/level/formats/leveldb_world/interface/chunk/leveldb_8.py +180 -180
  135. amulet/level/formats/leveldb_world/interface/chunk/leveldb_9.py +18 -18
  136. amulet/level/formats/leveldb_world/interface/chunk/leveldb_chunk_versions.py +79 -79
  137. amulet/level/formats/mcstructure/__init__.py +3 -3
  138. amulet/level/formats/mcstructure/chunk.py +50 -50
  139. amulet/level/formats/mcstructure/format_wrapper.py +408 -408
  140. amulet/level/formats/mcstructure/interface.py +175 -175
  141. amulet/level/formats/schematic/__init__.py +3 -3
  142. amulet/level/formats/schematic/chunk.py +55 -55
  143. amulet/level/formats/schematic/data_types.py +4 -4
  144. amulet/level/formats/schematic/format_wrapper.py +373 -373
  145. amulet/level/formats/schematic/interface.py +142 -142
  146. amulet/level/formats/sponge_schem/__init__.py +4 -4
  147. amulet/level/formats/sponge_schem/chunk.py +62 -62
  148. amulet/level/formats/sponge_schem/format_wrapper.py +463 -463
  149. amulet/level/formats/sponge_schem/interface.py +118 -118
  150. amulet/level/formats/sponge_schem/varint/__init__.py +1 -1
  151. amulet/level/formats/sponge_schem/varint/varint.py +87 -87
  152. amulet/level/interfaces/chunk/anvil/anvil_0.py +72 -72
  153. amulet/level/interfaces/chunk/anvil/anvil_1444.py +336 -336
  154. amulet/level/interfaces/chunk/anvil/anvil_1466.py +94 -94
  155. amulet/level/interfaces/chunk/anvil/anvil_1467.py +37 -37
  156. amulet/level/interfaces/chunk/anvil/anvil_1484.py +20 -20
  157. amulet/level/interfaces/chunk/anvil/anvil_1503.py +20 -20
  158. amulet/level/interfaces/chunk/anvil/anvil_1519.py +34 -34
  159. amulet/level/interfaces/chunk/anvil/anvil_1901.py +20 -20
  160. amulet/level/interfaces/chunk/anvil/anvil_1908.py +20 -20
  161. amulet/level/interfaces/chunk/anvil/anvil_1912.py +21 -21
  162. amulet/level/interfaces/chunk/anvil/anvil_1934.py +20 -20
  163. amulet/level/interfaces/chunk/anvil/anvil_2203.py +69 -69
  164. amulet/level/interfaces/chunk/anvil/anvil_2529.py +19 -19
  165. amulet/level/interfaces/chunk/anvil/anvil_2681.py +76 -76
  166. amulet/level/interfaces/chunk/anvil/anvil_2709.py +19 -19
  167. amulet/level/interfaces/chunk/anvil/anvil_2844.py +267 -267
  168. amulet/level/interfaces/chunk/anvil/anvil_3463.py +19 -19
  169. amulet/level/interfaces/chunk/anvil/anvil_na.py +607 -607
  170. amulet/level/interfaces/chunk/anvil/base_anvil_interface.py +326 -326
  171. amulet/level/load.py +59 -59
  172. amulet/level/loader.py +95 -95
  173. amulet/level/translators/chunk/bedrock/__init__.py +267 -267
  174. amulet/level/translators/chunk/bedrock/bedrock_nbt_blockstate_translator.py +46 -46
  175. amulet/level/translators/chunk/bedrock/bedrock_numerical_translator.py +39 -39
  176. amulet/level/translators/chunk/bedrock/bedrock_psudo_numerical_translator.py +37 -37
  177. amulet/level/translators/chunk/java/java_1_18_translator.py +40 -40
  178. amulet/level/translators/chunk/java/java_blockstate_translator.py +94 -94
  179. amulet/level/translators/chunk/java/java_numerical_translator.py +62 -62
  180. amulet/libs/leveldb/__init__.py +7 -7
  181. amulet/operations/__init__.py +5 -5
  182. amulet/operations/clone.py +18 -18
  183. amulet/operations/delete_chunk.py +32 -32
  184. amulet/operations/fill.py +30 -30
  185. amulet/operations/paste.py +65 -65
  186. amulet/operations/replace.py +58 -58
  187. amulet/utils/__init__.py +14 -14
  188. amulet/utils/format_utils.py +41 -41
  189. amulet/utils/generator.py +15 -15
  190. amulet/utils/matrix.py +243 -243
  191. amulet/utils/numpy_helpers.py +46 -46
  192. amulet/utils/world_utils.py +349 -349
  193. {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/METADATA +97 -97
  194. amulet_core-1.9.20.dist-info/RECORD +208 -0
  195. amulet_core-1.9.19.dist-info/RECORD +0 -208
  196. {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/WHEEL +0 -0
  197. {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/entry_points.txt +0 -0
  198. {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/top_level.txt +0 -0
@@ -1,69 +1,69 @@
1
- from __future__ import annotations
2
-
3
- import logging
4
-
5
- import numpy
6
- from amulet_nbt import IntArrayTag
7
- from amulet.api.chunk import Chunk
8
- from .base_anvil_interface import ChunkDataType
9
- from .anvil_1934 import Anvil1934Interface as ParentInterface
10
-
11
- log = logging.getLogger(__name__)
12
-
13
-
14
- class Anvil2203Interface(ParentInterface):
15
- """
16
- Made biomes 3D
17
- """
18
-
19
- @staticmethod
20
- def minor_is_valid(key: int):
21
- return 2203 <= key < 2529
22
-
23
- def _decode_biomes(
24
- self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
25
- ):
26
- biomes = self.get_layer_obj(data, self.Biomes, pop_last=True)
27
- if isinstance(biomes, IntArrayTag):
28
- if (len(biomes) / 16) % 4:
29
- log.error(
30
- f"The biome array size must be 4x4x4xN but got an array of size {biomes.np_array.size}"
31
- )
32
- else:
33
- arr = numpy.transpose(
34
- biomes.np_array.astype(numpy.uint32).reshape((-1, 4, 4)),
35
- (2, 0, 1),
36
- ) # YZX -> XYZ
37
- chunk.biomes = {
38
- sy + floor_cy: arr
39
- for sy, arr in enumerate(
40
- numpy.split(
41
- arr,
42
- arr.shape[1] // 4,
43
- 1,
44
- )
45
- )
46
- }
47
-
48
- def _encode_biomes(
49
- self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
50
- ):
51
- if chunk.status.value > -0.7:
52
- chunk.biomes.convert_to_3d()
53
- self.set_layer_obj(
54
- data,
55
- self.Biomes,
56
- IntArrayTag(
57
- numpy.transpose(
58
- numpy.asarray(
59
- chunk.biomes[
60
- :, floor_cy * 4 : (floor_cy + height_cy) * 4, :
61
- ]
62
- ).astype(numpy.uint32),
63
- (1, 2, 0),
64
- ).ravel() # YZX -> XYZ
65
- ),
66
- )
67
-
68
-
69
- export = Anvil2203Interface
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+
5
+ import numpy
6
+ from amulet_nbt import IntArrayTag
7
+ from amulet.api.chunk import Chunk
8
+ from .base_anvil_interface import ChunkDataType
9
+ from .anvil_1934 import Anvil1934Interface as ParentInterface
10
+
11
+ log = logging.getLogger(__name__)
12
+
13
+
14
+ class Anvil2203Interface(ParentInterface):
15
+ """
16
+ Made biomes 3D
17
+ """
18
+
19
+ @staticmethod
20
+ def minor_is_valid(key: int):
21
+ return 2203 <= key < 2529
22
+
23
+ def _decode_biomes(
24
+ self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
25
+ ):
26
+ biomes = self.get_layer_obj(data, self.Biomes, pop_last=True)
27
+ if isinstance(biomes, IntArrayTag):
28
+ if (len(biomes) / 16) % 4:
29
+ log.error(
30
+ f"The biome array size must be 4x4x4xN but got an array of size {biomes.np_array.size}"
31
+ )
32
+ else:
33
+ arr = numpy.transpose(
34
+ biomes.np_array.astype(numpy.uint32).reshape((-1, 4, 4)),
35
+ (2, 0, 1),
36
+ ) # YZX -> XYZ
37
+ chunk.biomes = {
38
+ sy + floor_cy: arr
39
+ for sy, arr in enumerate(
40
+ numpy.split(
41
+ arr,
42
+ arr.shape[1] // 4,
43
+ 1,
44
+ )
45
+ )
46
+ }
47
+
48
+ def _encode_biomes(
49
+ self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
50
+ ):
51
+ if chunk.status.value > -0.7:
52
+ chunk.biomes.convert_to_3d()
53
+ self.set_layer_obj(
54
+ data,
55
+ self.Biomes,
56
+ IntArrayTag(
57
+ numpy.transpose(
58
+ numpy.asarray(
59
+ chunk.biomes[
60
+ :, floor_cy * 4 : (floor_cy + height_cy) * 4, :
61
+ ]
62
+ ).astype(numpy.uint32),
63
+ (1, 2, 0),
64
+ ).ravel() # YZX -> XYZ
65
+ ),
66
+ )
67
+
68
+
69
+ export = Anvil2203Interface
@@ -1,19 +1,19 @@
1
- from __future__ import annotations
2
-
3
- from .anvil_2203 import Anvil2203Interface as ParentInterface
4
-
5
-
6
- class Anvil2529Interface(ParentInterface):
7
- """
8
- Packed long arrays switched to a less dense format
9
- Before the long array was just a bit stream but it is now separate longs. The upper bits are unused in some cases.
10
- """
11
-
12
- LongArrayDense = False
13
-
14
- @staticmethod
15
- def minor_is_valid(key: int):
16
- return 2529 <= key < 2681
17
-
18
-
19
- export = Anvil2529Interface
1
+ from __future__ import annotations
2
+
3
+ from .anvil_2203 import Anvil2203Interface as ParentInterface
4
+
5
+
6
+ class Anvil2529Interface(ParentInterface):
7
+ """
8
+ Packed long arrays switched to a less dense format
9
+ Before the long array was just a bit stream but it is now separate longs. The upper bits are unused in some cases.
10
+ """
11
+
12
+ LongArrayDense = False
13
+
14
+ @staticmethod
15
+ def minor_is_valid(key: int):
16
+ return 2529 <= key < 2681
17
+
18
+
19
+ export = Anvil2529Interface
@@ -1,76 +1,76 @@
1
- from __future__ import annotations
2
-
3
- from typing import List, Tuple, TYPE_CHECKING
4
-
5
- if TYPE_CHECKING:
6
- from amulet.api.chunk import Chunk
7
-
8
- import amulet
9
- from amulet.api.entity import Entity
10
- from amulet_nbt import ListTag, IntTag
11
-
12
- from .base_anvil_interface import ChunkDataType, ChunkPathType
13
-
14
- from .anvil_2529 import Anvil2529Interface as ParentInterface
15
-
16
-
17
- class Anvil2681Interface(ParentInterface):
18
- """
19
- Entities moved to a different storage layer
20
- """
21
-
22
- EntitiesDataVersion: ChunkPathType = (
23
- "entities",
24
- [("DataVersion", IntTag)],
25
- IntTag,
26
- )
27
- EntityLayer: ChunkPathType = (
28
- "entities",
29
- [("Entities", ListTag)],
30
- ListTag,
31
- )
32
-
33
- @staticmethod
34
- def minor_is_valid(key: int):
35
- return 2681 <= key < 2709
36
-
37
- def _post_decode_data_version(
38
- self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
39
- ):
40
- super()._post_decode_data_version(chunk, data, floor_cy, height_cy)
41
- self.get_layer_obj(data, self.EntitiesDataVersion, pop_last=True)
42
-
43
- def _decode_entities(
44
- self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
45
- ):
46
- # TODO: it is possible the entity data version does not match the chunk data version
47
- ents = self._decode_entity_list(
48
- self.get_layer_obj(data, self.Entities, pop_last=True)
49
- ) + self._decode_entity_list(
50
- self.get_layer_obj(data, self.EntityLayer, pop_last=True)
51
- )
52
- if amulet.entity_support:
53
- chunk.entities = ents
54
- else:
55
- chunk._native_entities.extend(ents)
56
- chunk._native_version = (
57
- "java",
58
- self.get_layer_obj(data, self.EntitiesDataVersion),
59
- )
60
-
61
- def _encode_entities(
62
- self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
63
- ):
64
- try:
65
- platform, version = chunk._native_version
66
- except:
67
- pass
68
- else:
69
- if platform == "java" and isinstance(version, int):
70
- super()._encode_entities(chunk, data, floor_cy, height_cy)
71
- self.set_layer_obj(data, self.EntitiesDataVersion, IntTag(version))
72
- return
73
- data.pop(self.EntitiesDataVersion[0], None)
74
-
75
-
76
- export = Anvil2681Interface
1
+ from __future__ import annotations
2
+
3
+ from typing import List, Tuple, TYPE_CHECKING
4
+
5
+ if TYPE_CHECKING:
6
+ from amulet.api.chunk import Chunk
7
+
8
+ import amulet
9
+ from amulet.api.entity import Entity
10
+ from amulet_nbt import ListTag, IntTag
11
+
12
+ from .base_anvil_interface import ChunkDataType, ChunkPathType
13
+
14
+ from .anvil_2529 import Anvil2529Interface as ParentInterface
15
+
16
+
17
+ class Anvil2681Interface(ParentInterface):
18
+ """
19
+ Entities moved to a different storage layer
20
+ """
21
+
22
+ EntitiesDataVersion: ChunkPathType = (
23
+ "entities",
24
+ [("DataVersion", IntTag)],
25
+ IntTag,
26
+ )
27
+ EntityLayer: ChunkPathType = (
28
+ "entities",
29
+ [("Entities", ListTag)],
30
+ ListTag,
31
+ )
32
+
33
+ @staticmethod
34
+ def minor_is_valid(key: int):
35
+ return 2681 <= key < 2709
36
+
37
+ def _post_decode_data_version(
38
+ self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
39
+ ):
40
+ super()._post_decode_data_version(chunk, data, floor_cy, height_cy)
41
+ self.get_layer_obj(data, self.EntitiesDataVersion, pop_last=True)
42
+
43
+ def _decode_entities(
44
+ self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
45
+ ):
46
+ # TODO: it is possible the entity data version does not match the chunk data version
47
+ ents = self._decode_entity_list(
48
+ self.get_layer_obj(data, self.Entities, pop_last=True)
49
+ ) + self._decode_entity_list(
50
+ self.get_layer_obj(data, self.EntityLayer, pop_last=True)
51
+ )
52
+ if amulet.entity_support:
53
+ chunk.entities = ents
54
+ else:
55
+ chunk._native_entities.extend(ents)
56
+ chunk._native_version = (
57
+ "java",
58
+ self.get_layer_obj(data, self.EntitiesDataVersion),
59
+ )
60
+
61
+ def _encode_entities(
62
+ self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
63
+ ):
64
+ try:
65
+ platform, version = chunk._native_version
66
+ except:
67
+ pass
68
+ else:
69
+ if platform == "java" and isinstance(version, int):
70
+ super()._encode_entities(chunk, data, floor_cy, height_cy)
71
+ self.set_layer_obj(data, self.EntitiesDataVersion, IntTag(version))
72
+ return
73
+ data.pop(self.EntitiesDataVersion[0], None)
74
+
75
+
76
+ export = Anvil2681Interface
@@ -1,19 +1,19 @@
1
- from __future__ import annotations
2
-
3
- from .anvil_2681 import (
4
- Anvil2681Interface as ParentInterface,
5
- )
6
-
7
-
8
- class Anvil2709Interface(ParentInterface):
9
- """
10
- Made height bit depth variable to store increased heights
11
- Made the biome array size variable to handle the increased height
12
- """
13
-
14
- @staticmethod
15
- def minor_is_valid(key: int):
16
- return 2709 <= key < 2800
17
-
18
-
19
- export = Anvil2709Interface
1
+ from __future__ import annotations
2
+
3
+ from .anvil_2681 import (
4
+ Anvil2681Interface as ParentInterface,
5
+ )
6
+
7
+
8
+ class Anvil2709Interface(ParentInterface):
9
+ """
10
+ Made height bit depth variable to store increased heights
11
+ Made the biome array size variable to handle the increased height
12
+ """
13
+
14
+ @staticmethod
15
+ def minor_is_valid(key: int):
16
+ return 2709 <= key < 2800
17
+
18
+
19
+ export = Anvil2709Interface