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,94 +1,94 @@
1
- from __future__ import annotations
2
-
3
- from typing import Dict
4
- import logging
5
-
6
- import numpy
7
-
8
- from amulet_nbt import CompoundTag, LongArrayTag
9
- from amulet.api.chunk import Chunk
10
- from amulet.utils.world_utils import decode_long_array, encode_long_array
11
-
12
- from .base_anvil_interface import ChunkPathType, ChunkDataType
13
- from .anvil_1444 import Anvil1444Interface as ParentInterface
14
-
15
- log = logging.getLogger(__name__)
16
-
17
-
18
- class Anvil1466Interface(ParentInterface):
19
- """
20
- Added multiple height maps. Now stored in a compound.
21
- """
22
-
23
- HeightMap = None
24
- Heightmaps: ChunkPathType = (
25
- "region",
26
- [("Level", CompoundTag), ("Heightmaps", CompoundTag)],
27
- CompoundTag,
28
- )
29
-
30
- def __init__(self):
31
- super().__init__()
32
- self._set_feature("height_map", "C|V1")
33
-
34
- @staticmethod
35
- def minor_is_valid(key: int):
36
- return 1466 <= key < 1467
37
-
38
- def _decode_height(
39
- self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
40
- ):
41
- heights = self.get_layer_obj(data, self.Heightmaps, pop_last=True)
42
- chunk.misc["height_mapC"] = h = {}
43
- for key, value in heights.items():
44
- if isinstance(value, LongArrayTag):
45
- try:
46
- h[key] = decode_long_array(
47
- value.np_array,
48
- 256,
49
- (height_cy << 4).bit_length(),
50
- dense=self.LongArrayDense,
51
- ).reshape((16, 16)) + (floor_cy << 4)
52
- except Exception as e:
53
- log.warning(e)
54
-
55
- def _encode_height(
56
- self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
57
- ):
58
- maps = [
59
- "WORLD_SURFACE_WG",
60
- "OCEAN_FLOOR_WG",
61
- "MOTION_BLOCKING",
62
- "MOTION_BLOCKING_NO_LEAVES",
63
- "OCEAN_FLOOR",
64
- ]
65
- if self._features["height_map"] == "C|V1": # 1466
66
- maps = ("LIQUID", "SOLID", "LIGHT", "RAIN")
67
- elif self._features["height_map"] == "C|V2": # 1484
68
- maps.append("LIGHT_BLOCKING")
69
- elif self._features["height_map"] == "C|V3": # 1503
70
- maps.append("LIGHT_BLOCKING")
71
- maps.append("WORLD_SURFACE")
72
- elif self._features["height_map"] == "C|V4": # 1908
73
- maps.append("WORLD_SURFACE")
74
- else:
75
- raise Exception
76
- heightmaps_temp: Dict[str, numpy.ndarray] = chunk.misc.get("height_mapC", {})
77
- heightmaps = CompoundTag()
78
- for heightmap in maps:
79
- if (
80
- heightmap in heightmaps_temp
81
- and isinstance(heightmaps_temp[heightmap], numpy.ndarray)
82
- and heightmaps_temp[heightmap].size == 256
83
- ):
84
- heightmaps[heightmap] = LongArrayTag(
85
- encode_long_array(
86
- heightmaps_temp[heightmap].ravel() - (floor_cy << 4),
87
- (height_cy << 4).bit_length(),
88
- self.LongArrayDense,
89
- )
90
- )
91
- self.set_layer_obj(data, self.Heightmaps, heightmaps)
92
-
93
-
94
- export = Anvil1466Interface
1
+ from __future__ import annotations
2
+
3
+ from typing import Dict
4
+ import logging
5
+
6
+ import numpy
7
+
8
+ from amulet_nbt import CompoundTag, LongArrayTag
9
+ from amulet.api.chunk import Chunk
10
+ from amulet.utils.world_utils import decode_long_array, encode_long_array
11
+
12
+ from .base_anvil_interface import ChunkPathType, ChunkDataType
13
+ from .anvil_1444 import Anvil1444Interface as ParentInterface
14
+
15
+ log = logging.getLogger(__name__)
16
+
17
+
18
+ class Anvil1466Interface(ParentInterface):
19
+ """
20
+ Added multiple height maps. Now stored in a compound.
21
+ """
22
+
23
+ HeightMap = None
24
+ Heightmaps: ChunkPathType = (
25
+ "region",
26
+ [("Level", CompoundTag), ("Heightmaps", CompoundTag)],
27
+ CompoundTag,
28
+ )
29
+
30
+ def __init__(self):
31
+ super().__init__()
32
+ self._set_feature("height_map", "C|V1")
33
+
34
+ @staticmethod
35
+ def minor_is_valid(key: int):
36
+ return 1466 <= key < 1467
37
+
38
+ def _decode_height(
39
+ self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
40
+ ):
41
+ heights = self.get_layer_obj(data, self.Heightmaps, pop_last=True)
42
+ chunk.misc["height_mapC"] = h = {}
43
+ for key, value in heights.items():
44
+ if isinstance(value, LongArrayTag):
45
+ try:
46
+ h[key] = decode_long_array(
47
+ value.np_array,
48
+ 256,
49
+ (height_cy << 4).bit_length(),
50
+ dense=self.LongArrayDense,
51
+ ).reshape((16, 16)) + (floor_cy << 4)
52
+ except Exception as e:
53
+ log.warning(e)
54
+
55
+ def _encode_height(
56
+ self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
57
+ ):
58
+ maps = [
59
+ "WORLD_SURFACE_WG",
60
+ "OCEAN_FLOOR_WG",
61
+ "MOTION_BLOCKING",
62
+ "MOTION_BLOCKING_NO_LEAVES",
63
+ "OCEAN_FLOOR",
64
+ ]
65
+ if self._features["height_map"] == "C|V1": # 1466
66
+ maps = ("LIQUID", "SOLID", "LIGHT", "RAIN")
67
+ elif self._features["height_map"] == "C|V2": # 1484
68
+ maps.append("LIGHT_BLOCKING")
69
+ elif self._features["height_map"] == "C|V3": # 1503
70
+ maps.append("LIGHT_BLOCKING")
71
+ maps.append("WORLD_SURFACE")
72
+ elif self._features["height_map"] == "C|V4": # 1908
73
+ maps.append("WORLD_SURFACE")
74
+ else:
75
+ raise Exception
76
+ heightmaps_temp: Dict[str, numpy.ndarray] = chunk.misc.get("height_mapC", {})
77
+ heightmaps = CompoundTag()
78
+ for heightmap in maps:
79
+ if (
80
+ heightmap in heightmaps_temp
81
+ and isinstance(heightmaps_temp[heightmap], numpy.ndarray)
82
+ and heightmaps_temp[heightmap].size == 256
83
+ ):
84
+ heightmaps[heightmap] = LongArrayTag(
85
+ encode_long_array(
86
+ heightmaps_temp[heightmap].ravel() - (floor_cy << 4),
87
+ (height_cy << 4).bit_length(),
88
+ self.LongArrayDense,
89
+ )
90
+ )
91
+ self.set_layer_obj(data, self.Heightmaps, heightmaps)
92
+
93
+
94
+ export = Anvil1466Interface
@@ -1,37 +1,37 @@
1
- from __future__ import annotations
2
-
3
- import numpy
4
- from amulet_nbt import IntArrayTag, CompoundTag
5
- from amulet.api.chunk import Chunk
6
- from .base_anvil_interface import ChunkPathType, ChunkDataType
7
- from .anvil_1466 import Anvil1466Interface as ParentInterface
8
-
9
-
10
- class Anvil1467Interface(ParentInterface):
11
- """
12
- Biomes now stored in an int array
13
- """
14
-
15
- Biomes: ChunkPathType = (
16
- "region",
17
- [("Level", CompoundTag), ("Biomes", IntArrayTag)],
18
- None,
19
- )
20
-
21
- @staticmethod
22
- def minor_is_valid(key: int):
23
- return 1467 <= key < 1484
24
-
25
- def _encode_biomes(
26
- self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
27
- ):
28
- if chunk.status.value > -0.7:
29
- chunk.biomes.convert_to_2d()
30
- self.set_layer_obj(
31
- data,
32
- self.Biomes,
33
- IntArrayTag(chunk.biomes.astype(dtype=numpy.uint32).ravel()),
34
- )
35
-
36
-
37
- export = Anvil1467Interface
1
+ from __future__ import annotations
2
+
3
+ import numpy
4
+ from amulet_nbt import IntArrayTag, CompoundTag
5
+ from amulet.api.chunk import Chunk
6
+ from .base_anvil_interface import ChunkPathType, ChunkDataType
7
+ from .anvil_1466 import Anvil1466Interface as ParentInterface
8
+
9
+
10
+ class Anvil1467Interface(ParentInterface):
11
+ """
12
+ Biomes now stored in an int array
13
+ """
14
+
15
+ Biomes: ChunkPathType = (
16
+ "region",
17
+ [("Level", CompoundTag), ("Biomes", IntArrayTag)],
18
+ None,
19
+ )
20
+
21
+ @staticmethod
22
+ def minor_is_valid(key: int):
23
+ return 1467 <= key < 1484
24
+
25
+ def _encode_biomes(
26
+ self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
27
+ ):
28
+ if chunk.status.value > -0.7:
29
+ chunk.biomes.convert_to_2d()
30
+ self.set_layer_obj(
31
+ data,
32
+ self.Biomes,
33
+ IntArrayTag(chunk.biomes.astype(dtype=numpy.uint32).ravel()),
34
+ )
35
+
36
+
37
+ export = Anvil1467Interface
@@ -1,20 +1,20 @@
1
- from __future__ import annotations
2
-
3
- from .anvil_1467 import Anvil1467Interface as ParentInterface
4
-
5
-
6
- class Anvil1484Interface(ParentInterface):
7
- """
8
- Changed height keys
9
- """
10
-
11
- def __init__(self):
12
- super().__init__()
13
- self._set_feature("height_map", "C|V2")
14
-
15
- @staticmethod
16
- def minor_is_valid(key: int):
17
- return 1484 <= key < 1503
18
-
19
-
20
- export = Anvil1484Interface
1
+ from __future__ import annotations
2
+
3
+ from .anvil_1467 import Anvil1467Interface as ParentInterface
4
+
5
+
6
+ class Anvil1484Interface(ParentInterface):
7
+ """
8
+ Changed height keys
9
+ """
10
+
11
+ def __init__(self):
12
+ super().__init__()
13
+ self._set_feature("height_map", "C|V2")
14
+
15
+ @staticmethod
16
+ def minor_is_valid(key: int):
17
+ return 1484 <= key < 1503
18
+
19
+
20
+ export = Anvil1484Interface
@@ -1,20 +1,20 @@
1
- from __future__ import annotations
2
-
3
- from .anvil_1484 import Anvil1484Interface as ParentInterface
4
-
5
-
6
- class Anvil1503Interface(ParentInterface):
7
- """
8
- Changed height keys again
9
- """
10
-
11
- def __init__(self):
12
- super().__init__()
13
- self._set_feature("height_map", "C|V3")
14
-
15
- @staticmethod
16
- def minor_is_valid(key: int):
17
- return 1503 <= key < 1519
18
-
19
-
20
- export = Anvil1503Interface
1
+ from __future__ import annotations
2
+
3
+ from .anvil_1484 import Anvil1484Interface as ParentInterface
4
+
5
+
6
+ class Anvil1503Interface(ParentInterface):
7
+ """
8
+ Changed height keys again
9
+ """
10
+
11
+ def __init__(self):
12
+ super().__init__()
13
+ self._set_feature("height_map", "C|V3")
14
+
15
+ @staticmethod
16
+ def minor_is_valid(key: int):
17
+ return 1503 <= key < 1519
18
+
19
+
20
+ export = Anvil1503Interface
@@ -1,34 +1,34 @@
1
- from __future__ import annotations
2
-
3
- from amulet.api.chunk import Chunk
4
-
5
- from .base_anvil_interface import ChunkDataType
6
- from .anvil_1503 import Anvil1503Interface as ParentInterface
7
-
8
-
9
- class Anvil1519Interface(ParentInterface):
10
- """
11
- Sub-chunk sections must have a block array if defined
12
- """
13
-
14
- def __init__(self):
15
- super().__init__()
16
- self._register_post_encoder(self._post_encode_sections)
17
-
18
- @staticmethod
19
- def minor_is_valid(key: int):
20
- return 1519 <= key < 1901
21
-
22
- def _post_encode_sections(
23
- self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
24
- ):
25
- sections = self.get_layer_obj(data, self.Sections)
26
- for section_index in range(len(sections) - 1, -1, -1):
27
- if (
28
- "BlockStates" not in sections[section_index]
29
- or "Palette" not in sections[section_index]
30
- ):
31
- del sections[section_index]
32
-
33
-
34
- export = Anvil1519Interface
1
+ from __future__ import annotations
2
+
3
+ from amulet.api.chunk import Chunk
4
+
5
+ from .base_anvil_interface import ChunkDataType
6
+ from .anvil_1503 import Anvil1503Interface as ParentInterface
7
+
8
+
9
+ class Anvil1519Interface(ParentInterface):
10
+ """
11
+ Sub-chunk sections must have a block array if defined
12
+ """
13
+
14
+ def __init__(self):
15
+ super().__init__()
16
+ self._register_post_encoder(self._post_encode_sections)
17
+
18
+ @staticmethod
19
+ def minor_is_valid(key: int):
20
+ return 1519 <= key < 1901
21
+
22
+ def _post_encode_sections(
23
+ self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
24
+ ):
25
+ sections = self.get_layer_obj(data, self.Sections)
26
+ for section_index in range(len(sections) - 1, -1, -1):
27
+ if (
28
+ "BlockStates" not in sections[section_index]
29
+ or "Palette" not in sections[section_index]
30
+ ):
31
+ del sections[section_index]
32
+
33
+
34
+ export = Anvil1519Interface
@@ -1,20 +1,20 @@
1
- from __future__ import annotations
2
-
3
- from .anvil_1519 import Anvil1519Interface as ParentInterface
4
-
5
-
6
- class Anvil1901Interface(ParentInterface):
7
- """
8
- Block data in a section is optional
9
- """
10
-
11
- def __init__(self):
12
- super().__init__()
13
- self._unregister_post_encoder(self._post_encode_sections)
14
-
15
- @staticmethod
16
- def minor_is_valid(key: int):
17
- return 1901 <= key < 1908
18
-
19
-
20
- export = Anvil1901Interface
1
+ from __future__ import annotations
2
+
3
+ from .anvil_1519 import Anvil1519Interface as ParentInterface
4
+
5
+
6
+ class Anvil1901Interface(ParentInterface):
7
+ """
8
+ Block data in a section is optional
9
+ """
10
+
11
+ def __init__(self):
12
+ super().__init__()
13
+ self._unregister_post_encoder(self._post_encode_sections)
14
+
15
+ @staticmethod
16
+ def minor_is_valid(key: int):
17
+ return 1901 <= key < 1908
18
+
19
+
20
+ export = Anvil1901Interface
@@ -1,20 +1,20 @@
1
- from __future__ import annotations
2
-
3
- from .anvil_1901 import Anvil1901Interface as ParentInterface
4
-
5
-
6
- class Anvil1908Interface(ParentInterface):
7
- """
8
- Changed height keys again again
9
- """
10
-
11
- def __init__(self):
12
- super().__init__()
13
- self._set_feature("height_map", "C|V4")
14
-
15
- @staticmethod
16
- def minor_is_valid(key: int):
17
- return 1908 <= key < 1912
18
-
19
-
20
- export = Anvil1908Interface
1
+ from __future__ import annotations
2
+
3
+ from .anvil_1901 import Anvil1901Interface as ParentInterface
4
+
5
+
6
+ class Anvil1908Interface(ParentInterface):
7
+ """
8
+ Changed height keys again again
9
+ """
10
+
11
+ def __init__(self):
12
+ super().__init__()
13
+ self._set_feature("height_map", "C|V4")
14
+
15
+ @staticmethod
16
+ def minor_is_valid(key: int):
17
+ return 1908 <= key < 1912
18
+
19
+
20
+ export = Anvil1908Interface
@@ -1,21 +1,21 @@
1
- from __future__ import annotations
2
-
3
- from .anvil_1908 import Anvil1908Interface as ParentInterface
4
- from amulet.api.chunk import StatusFormats
5
-
6
-
7
- class Anvil1912Interface(ParentInterface):
8
- """
9
- Changed status enum values
10
- """
11
-
12
- def __init__(self):
13
- super().__init__()
14
- self._set_feature("status", StatusFormats.Java_14)
15
-
16
- @staticmethod
17
- def minor_is_valid(key: int):
18
- return 1912 <= key < 1934
19
-
20
-
21
- export = Anvil1912Interface
1
+ from __future__ import annotations
2
+
3
+ from .anvil_1908 import Anvil1908Interface as ParentInterface
4
+ from amulet.api.chunk import StatusFormats
5
+
6
+
7
+ class Anvil1912Interface(ParentInterface):
8
+ """
9
+ Changed status enum values
10
+ """
11
+
12
+ def __init__(self):
13
+ super().__init__()
14
+ self._set_feature("status", StatusFormats.Java_14)
15
+
16
+ @staticmethod
17
+ def minor_is_valid(key: int):
18
+ return 1912 <= key < 1934
19
+
20
+
21
+ export = Anvil1912Interface
@@ -1,20 +1,20 @@
1
- from __future__ import annotations
2
-
3
- from .anvil_1912 import Anvil1912Interface as ParentInterface
4
-
5
-
6
- class Anvil1934Interface(ParentInterface):
7
- """
8
- Made lighting optional
9
- """
10
-
11
- def __init__(self):
12
- super().__init__()
13
- self._set_feature("light_optional", "true")
14
-
15
- @staticmethod
16
- def minor_is_valid(key: int):
17
- return 1934 <= key < 2203
18
-
19
-
20
- export = Anvil1934Interface
1
+ from __future__ import annotations
2
+
3
+ from .anvil_1912 import Anvil1912Interface as ParentInterface
4
+
5
+
6
+ class Anvil1934Interface(ParentInterface):
7
+ """
8
+ Made lighting optional
9
+ """
10
+
11
+ def __init__(self):
12
+ super().__init__()
13
+ self._set_feature("light_optional", "true")
14
+
15
+ @staticmethod
16
+ def minor_is_valid(key: int):
17
+ return 1934 <= key < 2203
18
+
19
+
20
+ export = Anvil1934Interface