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.
- amulet/__init__.py +27 -27
- amulet/__pyinstaller/__init__.py +2 -2
- amulet/__pyinstaller/hook-amulet.py +4 -4
- amulet/_version.py +21 -21
- amulet/api/__init__.py +2 -2
- amulet/api/abstract_base_entity.py +128 -128
- amulet/api/block.py +630 -630
- amulet/api/block_entity.py +71 -71
- amulet/api/cache.py +107 -107
- amulet/api/chunk/__init__.py +6 -6
- amulet/api/chunk/biomes.py +207 -207
- amulet/api/chunk/block_entity_dict.py +175 -175
- amulet/api/chunk/blocks.py +46 -46
- amulet/api/chunk/chunk.py +389 -389
- amulet/api/chunk/entity_list.py +75 -75
- amulet/api/chunk/status.py +167 -167
- amulet/api/data_types/__init__.py +4 -4
- amulet/api/data_types/generic_types.py +4 -4
- amulet/api/data_types/operation_types.py +16 -16
- amulet/api/data_types/world_types.py +49 -49
- amulet/api/data_types/wrapper_types.py +71 -71
- amulet/api/entity.py +74 -74
- amulet/api/errors.py +119 -119
- amulet/api/history/__init__.py +36 -36
- amulet/api/history/base/__init__.py +3 -3
- amulet/api/history/base/base_history.py +26 -26
- amulet/api/history/base/history_manager.py +63 -63
- amulet/api/history/base/revision_manager.py +73 -73
- amulet/api/history/changeable.py +15 -15
- amulet/api/history/data_types.py +7 -7
- amulet/api/history/history_manager/__init__.py +3 -3
- amulet/api/history/history_manager/container.py +102 -102
- amulet/api/history/history_manager/database.py +279 -279
- amulet/api/history/history_manager/meta.py +93 -93
- amulet/api/history/history_manager/object.py +116 -116
- amulet/api/history/revision_manager/__init__.py +2 -2
- amulet/api/history/revision_manager/disk.py +33 -33
- amulet/api/history/revision_manager/ram.py +12 -12
- amulet/api/item.py +75 -75
- amulet/api/level/__init__.py +4 -4
- amulet/api/level/base_level/__init__.py +1 -1
- amulet/api/level/base_level/base_level.py +1035 -1026
- amulet/api/level/base_level/chunk_manager.py +227 -227
- amulet/api/level/base_level/clone.py +389 -389
- amulet/api/level/base_level/player_manager.py +101 -101
- amulet/api/level/immutable_structure/__init__.py +1 -1
- amulet/api/level/immutable_structure/immutable_structure.py +94 -94
- amulet/api/level/immutable_structure/void_format_wrapper.py +117 -117
- amulet/api/level/structure.py +22 -22
- amulet/api/level/world.py +19 -19
- amulet/api/partial_3d_array/__init__.py +2 -2
- amulet/api/partial_3d_array/base_partial_3d_array.py +263 -263
- amulet/api/partial_3d_array/bounded_partial_3d_array.py +528 -528
- amulet/api/partial_3d_array/data_types.py +15 -15
- amulet/api/partial_3d_array/unbounded_partial_3d_array.py +229 -229
- amulet/api/partial_3d_array/util.py +152 -152
- amulet/api/player.py +65 -65
- amulet/api/registry/__init__.py +2 -2
- amulet/api/registry/base_registry.py +34 -34
- amulet/api/registry/biome_manager.py +153 -153
- amulet/api/registry/block_manager.py +156 -156
- amulet/api/selection/__init__.py +2 -2
- amulet/api/selection/abstract_selection.py +315 -315
- amulet/api/selection/box.py +805 -805
- amulet/api/selection/group.py +488 -488
- amulet/api/structure.py +37 -37
- amulet/api/wrapper/__init__.py +8 -8
- amulet/api/wrapper/chunk/interface.py +441 -441
- amulet/api/wrapper/chunk/translator.py +567 -567
- amulet/api/wrapper/format_wrapper.py +772 -772
- amulet/api/wrapper/structure_format_wrapper.py +116 -116
- amulet/api/wrapper/world_format_wrapper.py +63 -63
- amulet/level/__init__.py +1 -1
- amulet/level/formats/anvil_forge_world.py +40 -40
- amulet/level/formats/anvil_world/__init__.py +3 -3
- amulet/level/formats/anvil_world/_sector_manager.py +291 -384
- amulet/level/formats/anvil_world/data_pack/__init__.py +2 -2
- amulet/level/formats/anvil_world/data_pack/data_pack.py +224 -224
- amulet/level/formats/anvil_world/data_pack/data_pack_manager.py +77 -77
- amulet/level/formats/anvil_world/dimension.py +177 -177
- amulet/level/formats/anvil_world/format.py +769 -769
- amulet/level/formats/anvil_world/region.py +384 -384
- amulet/level/formats/construction/__init__.py +3 -3
- amulet/level/formats/construction/format_wrapper.py +515 -515
- amulet/level/formats/construction/interface.py +134 -134
- amulet/level/formats/construction/section.py +60 -60
- amulet/level/formats/construction/util.py +165 -165
- amulet/level/formats/leveldb_world/__init__.py +3 -3
- amulet/level/formats/leveldb_world/chunk.py +33 -33
- amulet/level/formats/leveldb_world/dimension.py +385 -419
- amulet/level/formats/leveldb_world/format.py +659 -641
- amulet/level/formats/leveldb_world/interface/chunk/__init__.py +36 -36
- amulet/level/formats/leveldb_world/interface/chunk/base_leveldb_interface.py +836 -836
- amulet/level/formats/leveldb_world/interface/chunk/generate_interface.py +31 -31
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_0.py +30 -30
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_1.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_10.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_11.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_12.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_13.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_14.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_15.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_16.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_17.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_18.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_19.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_2.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_20.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_21.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_22.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_23.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_24.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_25.py +24 -24
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_26.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_27.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_28.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_29.py +33 -33
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_3.py +57 -57
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_30.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_31.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_32.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_33.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_34.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_35.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_36.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_37.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_38.py +10 -10
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_39.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_4.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_40.py +16 -16
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_5.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_6.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_7.py +12 -12
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_8.py +180 -180
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_9.py +18 -18
- amulet/level/formats/leveldb_world/interface/chunk/leveldb_chunk_versions.py +79 -79
- amulet/level/formats/mcstructure/__init__.py +3 -3
- amulet/level/formats/mcstructure/chunk.py +50 -50
- amulet/level/formats/mcstructure/format_wrapper.py +408 -408
- amulet/level/formats/mcstructure/interface.py +175 -175
- amulet/level/formats/schematic/__init__.py +3 -3
- amulet/level/formats/schematic/chunk.py +55 -55
- amulet/level/formats/schematic/data_types.py +4 -4
- amulet/level/formats/schematic/format_wrapper.py +373 -373
- amulet/level/formats/schematic/interface.py +142 -142
- amulet/level/formats/sponge_schem/__init__.py +4 -4
- amulet/level/formats/sponge_schem/chunk.py +62 -62
- amulet/level/formats/sponge_schem/format_wrapper.py +463 -463
- amulet/level/formats/sponge_schem/interface.py +118 -118
- amulet/level/formats/sponge_schem/varint/__init__.py +1 -1
- amulet/level/formats/sponge_schem/varint/varint.py +87 -87
- amulet/level/interfaces/chunk/anvil/anvil_0.py +72 -72
- amulet/level/interfaces/chunk/anvil/anvil_1444.py +336 -336
- amulet/level/interfaces/chunk/anvil/anvil_1466.py +94 -94
- amulet/level/interfaces/chunk/anvil/anvil_1467.py +37 -37
- amulet/level/interfaces/chunk/anvil/anvil_1484.py +20 -20
- amulet/level/interfaces/chunk/anvil/anvil_1503.py +20 -20
- amulet/level/interfaces/chunk/anvil/anvil_1519.py +34 -34
- amulet/level/interfaces/chunk/anvil/anvil_1901.py +20 -20
- amulet/level/interfaces/chunk/anvil/anvil_1908.py +20 -20
- amulet/level/interfaces/chunk/anvil/anvil_1912.py +21 -21
- amulet/level/interfaces/chunk/anvil/anvil_1934.py +20 -20
- amulet/level/interfaces/chunk/anvil/anvil_2203.py +69 -69
- amulet/level/interfaces/chunk/anvil/anvil_2529.py +19 -19
- amulet/level/interfaces/chunk/anvil/anvil_2681.py +76 -76
- amulet/level/interfaces/chunk/anvil/anvil_2709.py +19 -19
- amulet/level/interfaces/chunk/anvil/anvil_2844.py +267 -267
- amulet/level/interfaces/chunk/anvil/anvil_3463.py +19 -19
- amulet/level/interfaces/chunk/anvil/anvil_na.py +607 -607
- amulet/level/interfaces/chunk/anvil/base_anvil_interface.py +326 -326
- amulet/level/load.py +59 -59
- amulet/level/loader.py +95 -95
- amulet/level/translators/chunk/bedrock/__init__.py +267 -267
- amulet/level/translators/chunk/bedrock/bedrock_nbt_blockstate_translator.py +46 -46
- amulet/level/translators/chunk/bedrock/bedrock_numerical_translator.py +39 -39
- amulet/level/translators/chunk/bedrock/bedrock_psudo_numerical_translator.py +37 -37
- amulet/level/translators/chunk/java/java_1_18_translator.py +40 -40
- amulet/level/translators/chunk/java/java_blockstate_translator.py +94 -94
- amulet/level/translators/chunk/java/java_numerical_translator.py +62 -62
- amulet/libs/leveldb/__init__.py +7 -7
- amulet/operations/__init__.py +5 -5
- amulet/operations/clone.py +18 -18
- amulet/operations/delete_chunk.py +32 -32
- amulet/operations/fill.py +30 -30
- amulet/operations/paste.py +65 -65
- amulet/operations/replace.py +58 -58
- amulet/utils/__init__.py +14 -14
- amulet/utils/format_utils.py +41 -41
- amulet/utils/generator.py +15 -15
- amulet/utils/matrix.py +243 -243
- amulet/utils/numpy_helpers.py +46 -46
- amulet/utils/world_utils.py +349 -349
- {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/METADATA +97 -97
- amulet_core-1.9.20.dist-info/RECORD +208 -0
- amulet_core-1.9.19.dist-info/RECORD +0 -208
- {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/WHEEL +0 -0
- {amulet_core-1.9.19.dist-info → amulet_core-1.9.20.dist-info}/entry_points.txt +0 -0
- {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
|
amulet/libs/leveldb/__init__.py
CHANGED
|
@@ -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
|
amulet/operations/__init__.py
CHANGED
|
@@ -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
|
amulet/operations/clone.py
CHANGED
|
@@ -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)
|