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,39 +1,39 @@
1
- from __future__ import annotations
2
-
3
- import numpy
4
- from typing import TYPE_CHECKING
5
-
6
- from amulet.level.translators.chunk.bedrock import BaseBedrockTranslator
7
- from amulet.api.data_types import BlockNDArray, AnyNDArray
8
-
9
- if TYPE_CHECKING:
10
- from amulet.api.block import Block
11
- from PyMCTranslate import Version
12
-
13
-
14
- class BedrockNumericalTranslator(BaseBedrockTranslator):
15
- @staticmethod
16
- def is_valid(key):
17
- return key[0] == "bedrock" and key[1] < (1, 2, 13)
18
-
19
- def _pack_block_palette(
20
- self, version: "Version", palette: BlockNDArray
21
- ) -> AnyNDArray:
22
- """
23
- Packs a numpy array of Block objects into an object array containing version number, block ids and block data values.
24
- :param version:
25
- :param palette:
26
- :return: numpy.ndarray[Tuple[Tuple[Optional[VersionNumber], Tuple[int, int]]]]
27
- """
28
- palette_ = numpy.empty(len(palette), dtype=object)
29
- for palette_index, entry in enumerate(palette):
30
- entry: "Block"
31
- block_tuple = version.block.block_to_ints(entry)
32
- if block_tuple is None:
33
- block_tuple = (0, 0) # TODO: find some way for the user to specify this
34
- palette_[palette_index] = ((None, block_tuple),)
35
-
36
- return palette_
37
-
38
-
39
- export = BedrockNumericalTranslator
1
+ from __future__ import annotations
2
+
3
+ import numpy
4
+ from typing import TYPE_CHECKING
5
+
6
+ from amulet.level.translators.chunk.bedrock import BaseBedrockTranslator
7
+ from amulet.api.data_types import BlockNDArray, AnyNDArray
8
+
9
+ if TYPE_CHECKING:
10
+ from amulet.api.block import Block
11
+ from PyMCTranslate import Version
12
+
13
+
14
+ class BedrockNumericalTranslator(BaseBedrockTranslator):
15
+ @staticmethod
16
+ def is_valid(key):
17
+ return key[0] == "bedrock" and key[1] < (1, 2, 13)
18
+
19
+ def _pack_block_palette(
20
+ self, version: "Version", palette: BlockNDArray
21
+ ) -> AnyNDArray:
22
+ """
23
+ Packs a numpy array of Block objects into an object array containing version number, block ids and block data values.
24
+ :param version:
25
+ :param palette:
26
+ :return: numpy.ndarray[Tuple[Tuple[Optional[VersionNumber], Tuple[int, int]]]]
27
+ """
28
+ palette_ = numpy.empty(len(palette), dtype=object)
29
+ for palette_index, entry in enumerate(palette):
30
+ entry: "Block"
31
+ block_tuple = version.block.block_to_ints(entry)
32
+ if block_tuple is None:
33
+ block_tuple = (0, 0) # TODO: find some way for the user to specify this
34
+ palette_[palette_index] = ((None, block_tuple),)
35
+
36
+ return palette_
37
+
38
+
39
+ export = BedrockNumericalTranslator
@@ -1,37 +1,37 @@
1
- from __future__ import annotations
2
-
3
- import numpy
4
- from typing import TYPE_CHECKING
5
-
6
- from amulet.level.translators.chunk.bedrock import BaseBedrockTranslator
7
- from amulet.api.data_types import BlockNDArray, AnyNDArray
8
-
9
- if TYPE_CHECKING:
10
- from amulet.api.block import Block
11
- from PyMCTranslate import Version
12
-
13
-
14
- class BedrockPsudoNumericalTranslator(BaseBedrockTranslator):
15
- @staticmethod
16
- def is_valid(key):
17
- return key[0] == "bedrock" and (1, 2, 13) <= key[1] < (1, 13, 0)
18
-
19
- def _pack_block_palette(
20
- self, version: "Version", palette: BlockNDArray
21
- ) -> AnyNDArray:
22
- """
23
- Packs a numpy array of Block objects into an object array containing one pair of version number and Block objects.
24
- :param version:
25
- :param palette:
26
- :return: numpy.ndarray[Tuple[Tuple[Optional[VersionNumber], Block]]]
27
- """
28
- palette_ = numpy.empty(len(palette), dtype=object)
29
- for palette_index, block in enumerate(palette):
30
- block: "Block"
31
- # TODO: perhaps check that property 'block_data' exists and is IntTag user interaction if not
32
- palette_[palette_index] = tuple((None, b) for b in block.block_tuple)
33
-
34
- return palette_
35
-
36
-
37
- export = BedrockPsudoNumericalTranslator
1
+ from __future__ import annotations
2
+
3
+ import numpy
4
+ from typing import TYPE_CHECKING
5
+
6
+ from amulet.level.translators.chunk.bedrock import BaseBedrockTranslator
7
+ from amulet.api.data_types import BlockNDArray, AnyNDArray
8
+
9
+ if TYPE_CHECKING:
10
+ from amulet.api.block import Block
11
+ from PyMCTranslate import Version
12
+
13
+
14
+ class BedrockPsudoNumericalTranslator(BaseBedrockTranslator):
15
+ @staticmethod
16
+ def is_valid(key):
17
+ return key[0] == "bedrock" and (1, 2, 13) <= key[1] < (1, 13, 0)
18
+
19
+ def _pack_block_palette(
20
+ self, version: "Version", palette: BlockNDArray
21
+ ) -> AnyNDArray:
22
+ """
23
+ Packs a numpy array of Block objects into an object array containing one pair of version number and Block objects.
24
+ :param version:
25
+ :param palette:
26
+ :return: numpy.ndarray[Tuple[Tuple[Optional[VersionNumber], Block]]]
27
+ """
28
+ palette_ = numpy.empty(len(palette), dtype=object)
29
+ for palette_index, block in enumerate(palette):
30
+ block: "Block"
31
+ # TODO: perhaps check that property 'block_data' exists and is IntTag user interaction if not
32
+ palette_[palette_index] = tuple((None, b) for b in block.block_tuple)
33
+
34
+ return palette_
35
+
36
+
37
+ export = BedrockPsudoNumericalTranslator
@@ -1,40 +1,40 @@
1
- from __future__ import annotations
2
-
3
- from typing import TYPE_CHECKING
4
-
5
- from amulet.api.chunk import Chunk
6
- from amulet.api.data_types import (
7
- VersionIdentifierType,
8
- )
9
-
10
- if TYPE_CHECKING:
11
- from PyMCTranslate import Version, TranslationManager
12
-
13
- from .java_blockstate_translator import JavaBlockstateTranslator
14
-
15
-
16
- class Java118Translator(JavaBlockstateTranslator):
17
- # TODO: move this logic into the interface
18
-
19
- @staticmethod
20
- def is_valid(key):
21
- return key[0] == "java" and 2836 <= key[1]
22
-
23
- @staticmethod
24
- def _unpack_biomes(
25
- translation_manager: "TranslationManager",
26
- version_identifier: VersionIdentifierType,
27
- chunk: Chunk,
28
- ):
29
- pass
30
-
31
- @staticmethod
32
- def _pack_biomes(
33
- translation_manager: "TranslationManager",
34
- version_identifier: VersionIdentifierType,
35
- chunk: Chunk,
36
- ):
37
- pass
38
-
39
-
40
- export = Java118Translator
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from amulet.api.chunk import Chunk
6
+ from amulet.api.data_types import (
7
+ VersionIdentifierType,
8
+ )
9
+
10
+ if TYPE_CHECKING:
11
+ from PyMCTranslate import Version, TranslationManager
12
+
13
+ from .java_blockstate_translator import JavaBlockstateTranslator
14
+
15
+
16
+ class Java118Translator(JavaBlockstateTranslator):
17
+ # TODO: move this logic into the interface
18
+
19
+ @staticmethod
20
+ def is_valid(key):
21
+ return key[0] == "java" and 2836 <= key[1]
22
+
23
+ @staticmethod
24
+ def _unpack_biomes(
25
+ translation_manager: "TranslationManager",
26
+ version_identifier: VersionIdentifierType,
27
+ chunk: Chunk,
28
+ ):
29
+ pass
30
+
31
+ @staticmethod
32
+ def _pack_biomes(
33
+ translation_manager: "TranslationManager",
34
+ version_identifier: VersionIdentifierType,
35
+ chunk: Chunk,
36
+ ):
37
+ pass
38
+
39
+
40
+ export = Java118Translator
@@ -1,94 +1,94 @@
1
- from __future__ import annotations
2
-
3
- from typing import TYPE_CHECKING
4
- from amulet_nbt import StringTag
5
-
6
- from amulet.api.chunk import Chunk
7
- from amulet.api.wrapper import Translator
8
- from amulet.api.block import Block
9
- from amulet.api.registry import BlockManager
10
- from amulet.api.data_types import (
11
- VersionIdentifierType,
12
- AnyNDArray,
13
- BlockNDArray,
14
- )
15
-
16
- if TYPE_CHECKING:
17
- from PyMCTranslate import Version, TranslationManager
18
-
19
- water = Block.from_string_blockstate("minecraft:water[level=0]")
20
-
21
-
22
- class JavaBlockstateTranslator(Translator):
23
- def _translator_key(self, version_number: int) -> VersionIdentifierType:
24
- return "java", version_number
25
-
26
- @staticmethod
27
- def is_valid(key):
28
- return key[0] == "java" and 1444 <= key[1] < 2836
29
-
30
- @staticmethod
31
- def _unpack_blocks(
32
- translation_manager: "TranslationManager",
33
- version_identifier: VersionIdentifierType,
34
- chunk: Chunk,
35
- block_palette: AnyNDArray,
36
- ):
37
- """
38
- Unpack the version-specific block_palette into the stringified version where needed.
39
-
40
- :return: The block_palette converted to block objects.
41
- """
42
- version = translation_manager.get_version(*version_identifier)
43
- for index, block in enumerate(block_palette):
44
- block: Block
45
- if version.block.is_waterloggable(block.namespaced_name):
46
- properties = block.properties
47
- if "waterlogged" in properties:
48
- waterlogged = properties["waterlogged"]
49
- del properties["waterlogged"]
50
- block = Block(
51
- namespace=block.namespace,
52
- base_name=block.base_name,
53
- properties=properties,
54
- )
55
- else:
56
- waterlogged = StringTag("false")
57
-
58
- if waterlogged == StringTag("true"):
59
- block_palette[index] = block + water
60
- else:
61
- block_palette[index] = block
62
- elif version.block.is_waterloggable(block.namespaced_name, True):
63
- block_palette[index] = block + water
64
-
65
- chunk._block_palette = BlockManager(block_palette)
66
-
67
- def _pack_block_palette(
68
- self, version: "Version", palette: BlockNDArray
69
- ) -> AnyNDArray:
70
- """
71
- Translate the list of block objects into a version-specific block_palette.
72
- :return: The block_palette converted into version-specific blocks (ie id, data tuples for 1.12)
73
- """
74
- for index, block in enumerate(palette):
75
- block: Block
76
- if version.block.is_waterloggable(block.namespaced_name):
77
- properties = block.properties
78
- extra_blocks = block.extra_blocks
79
- if (
80
- extra_blocks
81
- and extra_blocks[0].namespaced_name == water.namespaced_name
82
- ):
83
- properties["waterlogged"] = StringTag("true")
84
- else:
85
- properties["waterlogged"] = StringTag("false")
86
- palette[index] = Block(
87
- namespace=block.namespace,
88
- base_name=block.base_name,
89
- properties=properties,
90
- )
91
- return palette
92
-
93
-
94
- export = JavaBlockstateTranslator
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+ from amulet_nbt import StringTag
5
+
6
+ from amulet.api.chunk import Chunk
7
+ from amulet.api.wrapper import Translator
8
+ from amulet.api.block import Block
9
+ from amulet.api.registry import BlockManager
10
+ from amulet.api.data_types import (
11
+ VersionIdentifierType,
12
+ AnyNDArray,
13
+ BlockNDArray,
14
+ )
15
+
16
+ if TYPE_CHECKING:
17
+ from PyMCTranslate import Version, TranslationManager
18
+
19
+ water = Block.from_string_blockstate("minecraft:water[level=0]")
20
+
21
+
22
+ class JavaBlockstateTranslator(Translator):
23
+ def _translator_key(self, version_number: int) -> VersionIdentifierType:
24
+ return "java", version_number
25
+
26
+ @staticmethod
27
+ def is_valid(key):
28
+ return key[0] == "java" and 1444 <= key[1] < 2836
29
+
30
+ @staticmethod
31
+ def _unpack_blocks(
32
+ translation_manager: "TranslationManager",
33
+ version_identifier: VersionIdentifierType,
34
+ chunk: Chunk,
35
+ block_palette: AnyNDArray,
36
+ ):
37
+ """
38
+ Unpack the version-specific block_palette into the stringified version where needed.
39
+
40
+ :return: The block_palette converted to block objects.
41
+ """
42
+ version = translation_manager.get_version(*version_identifier)
43
+ for index, block in enumerate(block_palette):
44
+ block: Block
45
+ if version.block.is_waterloggable(block.namespaced_name):
46
+ properties = block.properties
47
+ if "waterlogged" in properties:
48
+ waterlogged = properties["waterlogged"]
49
+ del properties["waterlogged"]
50
+ block = Block(
51
+ namespace=block.namespace,
52
+ base_name=block.base_name,
53
+ properties=properties,
54
+ )
55
+ else:
56
+ waterlogged = StringTag("false")
57
+
58
+ if waterlogged == StringTag("true"):
59
+ block_palette[index] = block + water
60
+ else:
61
+ block_palette[index] = block
62
+ elif version.block.is_waterloggable(block.namespaced_name, True):
63
+ block_palette[index] = block + water
64
+
65
+ chunk._block_palette = BlockManager(block_palette)
66
+
67
+ def _pack_block_palette(
68
+ self, version: "Version", palette: BlockNDArray
69
+ ) -> AnyNDArray:
70
+ """
71
+ Translate the list of block objects into a version-specific block_palette.
72
+ :return: The block_palette converted into version-specific blocks (ie id, data tuples for 1.12)
73
+ """
74
+ for index, block in enumerate(palette):
75
+ block: Block
76
+ if version.block.is_waterloggable(block.namespaced_name):
77
+ properties = block.properties
78
+ extra_blocks = block.extra_blocks
79
+ if (
80
+ extra_blocks
81
+ and extra_blocks[0].namespaced_name == water.namespaced_name
82
+ ):
83
+ properties["waterlogged"] = StringTag("true")
84
+ else:
85
+ properties["waterlogged"] = StringTag("false")
86
+ palette[index] = Block(
87
+ namespace=block.namespace,
88
+ base_name=block.base_name,
89
+ properties=properties,
90
+ )
91
+ return palette
92
+
93
+
94
+ export = JavaBlockstateTranslator
@@ -1,62 +1,62 @@
1
- from __future__ import annotations
2
-
3
- from typing import TYPE_CHECKING
4
- import numpy
5
-
6
- from amulet.api.chunk import Chunk
7
- from amulet.api.wrapper import Translator
8
- from amulet.api.data_types import VersionIdentifierType, AnyNDArray, BlockNDArray
9
- from amulet.api.registry import BlockManager
10
-
11
- if TYPE_CHECKING:
12
- from PyMCTranslate import Version, TranslationManager
13
-
14
-
15
- class JavaNumericalTranslator(Translator):
16
- def _translator_key(self, version_number: int) -> VersionIdentifierType:
17
- return "java", version_number
18
-
19
- @staticmethod
20
- def _unpack_blocks(
21
- translation_manager: "TranslationManager",
22
- version_identifier: VersionIdentifierType,
23
- chunk: Chunk,
24
- block_palette: AnyNDArray,
25
- ):
26
- """
27
- Unpacks an int array of block ids and block data values [[1, 0], [2, 0]] into a numpy array of Block objects.
28
- :param translation_manager:
29
- :param version_identifier:
30
- :param chunk:
31
- :param block_palette:
32
- :return:
33
- """
34
- version = translation_manager.get_version(*version_identifier)
35
- chunk._block_palette = BlockManager(
36
- [version.block.ints_to_block(*entry) for entry in block_palette]
37
- )
38
-
39
- def _pack_block_palette(
40
- self, version: "Version", palette: BlockNDArray
41
- ) -> AnyNDArray:
42
- """
43
- Packs a numpy array of Block objects into an int array of block ids and block data values [[1, 0], [2, 0]].
44
- :param version:
45
- :param palette:
46
- :return:
47
- """
48
- palette = [version.block.block_to_ints(entry) for entry in palette]
49
- for index, value in enumerate(palette):
50
- if value is None:
51
- palette[index] = (
52
- 0,
53
- 0,
54
- ) # TODO: find some way for the user to specify this
55
- return numpy.array(palette)
56
-
57
- @staticmethod
58
- def is_valid(key):
59
- return key[0] == "java" and key[1] <= 1343
60
-
61
-
62
- export = JavaNumericalTranslator
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+ import numpy
5
+
6
+ from amulet.api.chunk import Chunk
7
+ from amulet.api.wrapper import Translator
8
+ from amulet.api.data_types import VersionIdentifierType, AnyNDArray, BlockNDArray
9
+ from amulet.api.registry import BlockManager
10
+
11
+ if TYPE_CHECKING:
12
+ from PyMCTranslate import Version, TranslationManager
13
+
14
+
15
+ class JavaNumericalTranslator(Translator):
16
+ def _translator_key(self, version_number: int) -> VersionIdentifierType:
17
+ return "java", version_number
18
+
19
+ @staticmethod
20
+ def _unpack_blocks(
21
+ translation_manager: "TranslationManager",
22
+ version_identifier: VersionIdentifierType,
23
+ chunk: Chunk,
24
+ block_palette: AnyNDArray,
25
+ ):
26
+ """
27
+ Unpacks an int array of block ids and block data values [[1, 0], [2, 0]] into a numpy array of Block objects.
28
+ :param translation_manager:
29
+ :param version_identifier:
30
+ :param chunk:
31
+ :param block_palette:
32
+ :return:
33
+ """
34
+ version = translation_manager.get_version(*version_identifier)
35
+ chunk._block_palette = BlockManager(
36
+ [version.block.ints_to_block(*entry) for entry in block_palette]
37
+ )
38
+
39
+ def _pack_block_palette(
40
+ self, version: "Version", palette: BlockNDArray
41
+ ) -> AnyNDArray:
42
+ """
43
+ Packs a numpy array of Block objects into an int array of block ids and block data values [[1, 0], [2, 0]].
44
+ :param version:
45
+ :param palette:
46
+ :return:
47
+ """
48
+ palette = [version.block.block_to_ints(entry) for entry in palette]
49
+ for index, value in enumerate(palette):
50
+ if value is None:
51
+ palette[index] = (
52
+ 0,
53
+ 0,
54
+ ) # TODO: find some way for the user to specify this
55
+ return numpy.array(palette)
56
+
57
+ @staticmethod
58
+ def is_valid(key):
59
+ return key[0] == "java" and key[1] <= 1343
60
+
61
+
62
+ export = JavaNumericalTranslator
@@ -1,7 +1,7 @@
1
- import warnings
2
-
3
- warnings.warn(
4
- "`amulet.libs.leveldb` is depreciated and will be removed in the future. It is replaced by the `leveldb` package.",
5
- DeprecationWarning,
6
- )
7
- from leveldb import LevelDB, LevelDBException, LevelDBEncrypted
1
+ import warnings
2
+
3
+ warnings.warn(
4
+ "`amulet.libs.leveldb` is depreciated and will be removed in the future. It is replaced by the `leveldb` package.",
5
+ DeprecationWarning,
6
+ )
7
+ from leveldb import LevelDB, LevelDBException, LevelDBEncrypted
@@ -1,5 +1,5 @@
1
- from .clone import clone
2
- from .delete_chunk import delete_chunk
3
- from .fill import fill
4
- from .paste import paste
5
- from .replace import replace
1
+ from .clone import clone
2
+ from .delete_chunk import delete_chunk
3
+ from .fill import fill
4
+ from .paste import paste
5
+ from .replace import replace
@@ -1,18 +1,18 @@
1
- from amulet.api.selection import SelectionGroup
2
- from amulet.api.data_types import Dimension
3
- from typing import TYPE_CHECKING
4
-
5
- if TYPE_CHECKING:
6
- from amulet.api.level import BaseLevel
7
-
8
-
9
- def clone(
10
- world: "BaseLevel", dimension: Dimension, selection: SelectionGroup, target: dict
11
- ):
12
- offset_x, offset_y, offset_z = (selection.max_array - selection.min_array) // 2
13
- dst_location = (
14
- target.get("x", 0) + offset_x,
15
- target.get("y", 0) + offset_y,
16
- target.get("z", 0) + offset_y,
17
- )
18
- world.paste(world, dimension, selection, dimension, dst_location)
1
+ from amulet.api.selection import SelectionGroup
2
+ from amulet.api.data_types import Dimension
3
+ from typing import TYPE_CHECKING
4
+
5
+ if TYPE_CHECKING:
6
+ from amulet.api.level import BaseLevel
7
+
8
+
9
+ def clone(
10
+ world: "BaseLevel", dimension: Dimension, selection: SelectionGroup, target: dict
11
+ ):
12
+ offset_x, offset_y, offset_z = (selection.max_array - selection.min_array) // 2
13
+ dst_location = (
14
+ target.get("x", 0) + offset_x,
15
+ target.get("y", 0) + offset_y,
16
+ target.get("z", 0) + offset_y,
17
+ )
18
+ world.paste(world, dimension, selection, dimension, dst_location)