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,69 +1,69 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
|
|
5
|
-
import numpy
|
|
6
|
-
from amulet_nbt import IntArrayTag
|
|
7
|
-
from amulet.api.chunk import Chunk
|
|
8
|
-
from .base_anvil_interface import ChunkDataType
|
|
9
|
-
from .anvil_1934 import Anvil1934Interface as ParentInterface
|
|
10
|
-
|
|
11
|
-
log = logging.getLogger(__name__)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class Anvil2203Interface(ParentInterface):
|
|
15
|
-
"""
|
|
16
|
-
Made biomes 3D
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
@staticmethod
|
|
20
|
-
def minor_is_valid(key: int):
|
|
21
|
-
return 2203 <= key < 2529
|
|
22
|
-
|
|
23
|
-
def _decode_biomes(
|
|
24
|
-
self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
|
|
25
|
-
):
|
|
26
|
-
biomes = self.get_layer_obj(data, self.Biomes, pop_last=True)
|
|
27
|
-
if isinstance(biomes, IntArrayTag):
|
|
28
|
-
if (len(biomes) / 16) % 4:
|
|
29
|
-
log.error(
|
|
30
|
-
f"The biome array size must be 4x4x4xN but got an array of size {biomes.np_array.size}"
|
|
31
|
-
)
|
|
32
|
-
else:
|
|
33
|
-
arr = numpy.transpose(
|
|
34
|
-
biomes.np_array.astype(numpy.uint32).reshape((-1, 4, 4)),
|
|
35
|
-
(2, 0, 1),
|
|
36
|
-
) # YZX -> XYZ
|
|
37
|
-
chunk.biomes = {
|
|
38
|
-
sy + floor_cy: arr
|
|
39
|
-
for sy, arr in enumerate(
|
|
40
|
-
numpy.split(
|
|
41
|
-
arr,
|
|
42
|
-
arr.shape[1] // 4,
|
|
43
|
-
1,
|
|
44
|
-
)
|
|
45
|
-
)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
def _encode_biomes(
|
|
49
|
-
self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
|
|
50
|
-
):
|
|
51
|
-
if chunk.status.value > -0.7:
|
|
52
|
-
chunk.biomes.convert_to_3d()
|
|
53
|
-
self.set_layer_obj(
|
|
54
|
-
data,
|
|
55
|
-
self.Biomes,
|
|
56
|
-
IntArrayTag(
|
|
57
|
-
numpy.transpose(
|
|
58
|
-
numpy.asarray(
|
|
59
|
-
chunk.biomes[
|
|
60
|
-
:, floor_cy * 4 : (floor_cy + height_cy) * 4, :
|
|
61
|
-
]
|
|
62
|
-
).astype(numpy.uint32),
|
|
63
|
-
(1, 2, 0),
|
|
64
|
-
).ravel() # YZX -> XYZ
|
|
65
|
-
),
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
export = Anvil2203Interface
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
import numpy
|
|
6
|
+
from amulet_nbt import IntArrayTag
|
|
7
|
+
from amulet.api.chunk import Chunk
|
|
8
|
+
from .base_anvil_interface import ChunkDataType
|
|
9
|
+
from .anvil_1934 import Anvil1934Interface as ParentInterface
|
|
10
|
+
|
|
11
|
+
log = logging.getLogger(__name__)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class Anvil2203Interface(ParentInterface):
|
|
15
|
+
"""
|
|
16
|
+
Made biomes 3D
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
@staticmethod
|
|
20
|
+
def minor_is_valid(key: int):
|
|
21
|
+
return 2203 <= key < 2529
|
|
22
|
+
|
|
23
|
+
def _decode_biomes(
|
|
24
|
+
self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
|
|
25
|
+
):
|
|
26
|
+
biomes = self.get_layer_obj(data, self.Biomes, pop_last=True)
|
|
27
|
+
if isinstance(biomes, IntArrayTag):
|
|
28
|
+
if (len(biomes) / 16) % 4:
|
|
29
|
+
log.error(
|
|
30
|
+
f"The biome array size must be 4x4x4xN but got an array of size {biomes.np_array.size}"
|
|
31
|
+
)
|
|
32
|
+
else:
|
|
33
|
+
arr = numpy.transpose(
|
|
34
|
+
biomes.np_array.astype(numpy.uint32).reshape((-1, 4, 4)),
|
|
35
|
+
(2, 0, 1),
|
|
36
|
+
) # YZX -> XYZ
|
|
37
|
+
chunk.biomes = {
|
|
38
|
+
sy + floor_cy: arr
|
|
39
|
+
for sy, arr in enumerate(
|
|
40
|
+
numpy.split(
|
|
41
|
+
arr,
|
|
42
|
+
arr.shape[1] // 4,
|
|
43
|
+
1,
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
def _encode_biomes(
|
|
49
|
+
self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
|
|
50
|
+
):
|
|
51
|
+
if chunk.status.value > -0.7:
|
|
52
|
+
chunk.biomes.convert_to_3d()
|
|
53
|
+
self.set_layer_obj(
|
|
54
|
+
data,
|
|
55
|
+
self.Biomes,
|
|
56
|
+
IntArrayTag(
|
|
57
|
+
numpy.transpose(
|
|
58
|
+
numpy.asarray(
|
|
59
|
+
chunk.biomes[
|
|
60
|
+
:, floor_cy * 4 : (floor_cy + height_cy) * 4, :
|
|
61
|
+
]
|
|
62
|
+
).astype(numpy.uint32),
|
|
63
|
+
(1, 2, 0),
|
|
64
|
+
).ravel() # YZX -> XYZ
|
|
65
|
+
),
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
export = Anvil2203Interface
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from .anvil_2203 import Anvil2203Interface as ParentInterface
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class Anvil2529Interface(ParentInterface):
|
|
7
|
-
"""
|
|
8
|
-
Packed long arrays switched to a less dense format
|
|
9
|
-
Before the long array was just a bit stream but it is now separate longs. The upper bits are unused in some cases.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
LongArrayDense = False
|
|
13
|
-
|
|
14
|
-
@staticmethod
|
|
15
|
-
def minor_is_valid(key: int):
|
|
16
|
-
return 2529 <= key < 2681
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export = Anvil2529Interface
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from .anvil_2203 import Anvil2203Interface as ParentInterface
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Anvil2529Interface(ParentInterface):
|
|
7
|
+
"""
|
|
8
|
+
Packed long arrays switched to a less dense format
|
|
9
|
+
Before the long array was just a bit stream but it is now separate longs. The upper bits are unused in some cases.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
LongArrayDense = False
|
|
13
|
+
|
|
14
|
+
@staticmethod
|
|
15
|
+
def minor_is_valid(key: int):
|
|
16
|
+
return 2529 <= key < 2681
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
export = Anvil2529Interface
|
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import List, Tuple, TYPE_CHECKING
|
|
4
|
-
|
|
5
|
-
if TYPE_CHECKING:
|
|
6
|
-
from amulet.api.chunk import Chunk
|
|
7
|
-
|
|
8
|
-
import amulet
|
|
9
|
-
from amulet.api.entity import Entity
|
|
10
|
-
from amulet_nbt import ListTag, IntTag
|
|
11
|
-
|
|
12
|
-
from .base_anvil_interface import ChunkDataType, ChunkPathType
|
|
13
|
-
|
|
14
|
-
from .anvil_2529 import Anvil2529Interface as ParentInterface
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class Anvil2681Interface(ParentInterface):
|
|
18
|
-
"""
|
|
19
|
-
Entities moved to a different storage layer
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
EntitiesDataVersion: ChunkPathType = (
|
|
23
|
-
"entities",
|
|
24
|
-
[("DataVersion", IntTag)],
|
|
25
|
-
IntTag,
|
|
26
|
-
)
|
|
27
|
-
EntityLayer: ChunkPathType = (
|
|
28
|
-
"entities",
|
|
29
|
-
[("Entities", ListTag)],
|
|
30
|
-
ListTag,
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
@staticmethod
|
|
34
|
-
def minor_is_valid(key: int):
|
|
35
|
-
return 2681 <= key < 2709
|
|
36
|
-
|
|
37
|
-
def _post_decode_data_version(
|
|
38
|
-
self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
|
|
39
|
-
):
|
|
40
|
-
super()._post_decode_data_version(chunk, data, floor_cy, height_cy)
|
|
41
|
-
self.get_layer_obj(data, self.EntitiesDataVersion, pop_last=True)
|
|
42
|
-
|
|
43
|
-
def _decode_entities(
|
|
44
|
-
self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
|
|
45
|
-
):
|
|
46
|
-
# TODO: it is possible the entity data version does not match the chunk data version
|
|
47
|
-
ents = self._decode_entity_list(
|
|
48
|
-
self.get_layer_obj(data, self.Entities, pop_last=True)
|
|
49
|
-
) + self._decode_entity_list(
|
|
50
|
-
self.get_layer_obj(data, self.EntityLayer, pop_last=True)
|
|
51
|
-
)
|
|
52
|
-
if amulet.entity_support:
|
|
53
|
-
chunk.entities = ents
|
|
54
|
-
else:
|
|
55
|
-
chunk._native_entities.extend(ents)
|
|
56
|
-
chunk._native_version = (
|
|
57
|
-
"java",
|
|
58
|
-
self.get_layer_obj(data, self.EntitiesDataVersion),
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
def _encode_entities(
|
|
62
|
-
self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
|
|
63
|
-
):
|
|
64
|
-
try:
|
|
65
|
-
platform, version = chunk._native_version
|
|
66
|
-
except:
|
|
67
|
-
pass
|
|
68
|
-
else:
|
|
69
|
-
if platform == "java" and isinstance(version, int):
|
|
70
|
-
super()._encode_entities(chunk, data, floor_cy, height_cy)
|
|
71
|
-
self.set_layer_obj(data, self.EntitiesDataVersion, IntTag(version))
|
|
72
|
-
return
|
|
73
|
-
data.pop(self.EntitiesDataVersion[0], None)
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
export = Anvil2681Interface
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import List, Tuple, TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
if TYPE_CHECKING:
|
|
6
|
+
from amulet.api.chunk import Chunk
|
|
7
|
+
|
|
8
|
+
import amulet
|
|
9
|
+
from amulet.api.entity import Entity
|
|
10
|
+
from amulet_nbt import ListTag, IntTag
|
|
11
|
+
|
|
12
|
+
from .base_anvil_interface import ChunkDataType, ChunkPathType
|
|
13
|
+
|
|
14
|
+
from .anvil_2529 import Anvil2529Interface as ParentInterface
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Anvil2681Interface(ParentInterface):
|
|
18
|
+
"""
|
|
19
|
+
Entities moved to a different storage layer
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
EntitiesDataVersion: ChunkPathType = (
|
|
23
|
+
"entities",
|
|
24
|
+
[("DataVersion", IntTag)],
|
|
25
|
+
IntTag,
|
|
26
|
+
)
|
|
27
|
+
EntityLayer: ChunkPathType = (
|
|
28
|
+
"entities",
|
|
29
|
+
[("Entities", ListTag)],
|
|
30
|
+
ListTag,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
@staticmethod
|
|
34
|
+
def minor_is_valid(key: int):
|
|
35
|
+
return 2681 <= key < 2709
|
|
36
|
+
|
|
37
|
+
def _post_decode_data_version(
|
|
38
|
+
self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
|
|
39
|
+
):
|
|
40
|
+
super()._post_decode_data_version(chunk, data, floor_cy, height_cy)
|
|
41
|
+
self.get_layer_obj(data, self.EntitiesDataVersion, pop_last=True)
|
|
42
|
+
|
|
43
|
+
def _decode_entities(
|
|
44
|
+
self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
|
|
45
|
+
):
|
|
46
|
+
# TODO: it is possible the entity data version does not match the chunk data version
|
|
47
|
+
ents = self._decode_entity_list(
|
|
48
|
+
self.get_layer_obj(data, self.Entities, pop_last=True)
|
|
49
|
+
) + self._decode_entity_list(
|
|
50
|
+
self.get_layer_obj(data, self.EntityLayer, pop_last=True)
|
|
51
|
+
)
|
|
52
|
+
if amulet.entity_support:
|
|
53
|
+
chunk.entities = ents
|
|
54
|
+
else:
|
|
55
|
+
chunk._native_entities.extend(ents)
|
|
56
|
+
chunk._native_version = (
|
|
57
|
+
"java",
|
|
58
|
+
self.get_layer_obj(data, self.EntitiesDataVersion),
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
def _encode_entities(
|
|
62
|
+
self, chunk: Chunk, data: ChunkDataType, floor_cy: int, height_cy: int
|
|
63
|
+
):
|
|
64
|
+
try:
|
|
65
|
+
platform, version = chunk._native_version
|
|
66
|
+
except:
|
|
67
|
+
pass
|
|
68
|
+
else:
|
|
69
|
+
if platform == "java" and isinstance(version, int):
|
|
70
|
+
super()._encode_entities(chunk, data, floor_cy, height_cy)
|
|
71
|
+
self.set_layer_obj(data, self.EntitiesDataVersion, IntTag(version))
|
|
72
|
+
return
|
|
73
|
+
data.pop(self.EntitiesDataVersion[0], None)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
export = Anvil2681Interface
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from .anvil_2681 import (
|
|
4
|
-
Anvil2681Interface as ParentInterface,
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class Anvil2709Interface(ParentInterface):
|
|
9
|
-
"""
|
|
10
|
-
Made height bit depth variable to store increased heights
|
|
11
|
-
Made the biome array size variable to handle the increased height
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
@staticmethod
|
|
15
|
-
def minor_is_valid(key: int):
|
|
16
|
-
return 2709 <= key < 2800
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export = Anvil2709Interface
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from .anvil_2681 import (
|
|
4
|
+
Anvil2681Interface as ParentInterface,
|
|
5
|
+
)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Anvil2709Interface(ParentInterface):
|
|
9
|
+
"""
|
|
10
|
+
Made height bit depth variable to store increased heights
|
|
11
|
+
Made the biome array size variable to handle the increased height
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
@staticmethod
|
|
15
|
+
def minor_is_valid(key: int):
|
|
16
|
+
return 2709 <= key < 2800
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
export = Anvil2709Interface
|