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,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
|