amulet-core 1.9.21__py3-none-any.whl → 1.9.22__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.
- amulet/_version.py +3 -3
- amulet/api/history/history_manager/database.py +3 -3
- amulet/api/level/base_level/clone.py +6 -6
- amulet/api/partial_3d_array/bounded_partial_3d_array.py +5 -10
- amulet/api/partial_3d_array/unbounded_partial_3d_array.py +4 -4
- amulet/api/registry/biome_manager.py +3 -6
- amulet/api/registry/block_manager.py +5 -6
- amulet/api/selection/box.py +1 -3
- amulet/api/selection/group.py +2 -4
- amulet/api/wrapper/chunk/interface.py +4 -8
- amulet/api/wrapper/format_wrapper.py +2 -0
- amulet/level/formats/anvil_world/region.py +48 -0
- amulet/level/formats/construction/format_wrapper.py +3 -3
- amulet/level/formats/leveldb_world/dimension.py +3 -3
- amulet/level/formats/leveldb_world/interface/chunk/base_leveldb_interface.py +6 -6
- amulet/level/formats/mcstructure/format_wrapper.py +0 -5
- amulet/level/formats/sponge_schem/format_wrapper.py +1 -3
- amulet/level/interfaces/chunk/anvil/anvil_3463.py +1 -1
- {amulet_core-1.9.21.dist-info → amulet_core-1.9.22.dist-info}/METADATA +2 -1
- {amulet_core-1.9.21.dist-info → amulet_core-1.9.22.dist-info}/RECORD +23 -23
- {amulet_core-1.9.21.dist-info → amulet_core-1.9.22.dist-info}/WHEEL +1 -1
- {amulet_core-1.9.21.dist-info → amulet_core-1.9.22.dist-info}/entry_points.txt +0 -0
- {amulet_core-1.9.21.dist-info → amulet_core-1.9.22.dist-info}/top_level.txt +0 -0
amulet/_version.py
CHANGED
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "
|
|
11
|
+
"date": "2024-04-29T13:55:26+0100",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.9.
|
|
14
|
+
"full-revisionid": "ac72c15417c9bd86d9332d7a6488311ad1cb30ab",
|
|
15
|
+
"version": "1.9.22"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -153,9 +153,9 @@ class DatabaseHistoryManager(ContainerHistoryManager):
|
|
|
153
153
|
].get_current_entry()
|
|
154
154
|
else:
|
|
155
155
|
# If it has not been loaded request it from the raw database.
|
|
156
|
-
entry = self._temporary_database[
|
|
157
|
-
key
|
|
158
|
-
|
|
156
|
+
entry = self._temporary_database[key] = (
|
|
157
|
+
self._get_register_original_entry(key)
|
|
158
|
+
)
|
|
159
159
|
if entry is None:
|
|
160
160
|
raise self.DoesNotExistError
|
|
161
161
|
return entry
|
|
@@ -116,13 +116,13 @@ def clone(
|
|
|
116
116
|
)
|
|
117
117
|
|
|
118
118
|
last_src: Optional[Tuple[int, int]] = None
|
|
119
|
-
src_chunk: Optional[
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
src_chunk: Optional[Chunk] = (
|
|
120
|
+
None # None here means the chunk does not exist or failed to load. Treat it as if it was air.
|
|
121
|
+
)
|
|
122
122
|
last_dst: Optional[Tuple[int, int]] = None
|
|
123
|
-
dst_chunk: Optional[
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
dst_chunk: Optional[Chunk] = (
|
|
124
|
+
None # None here means the chunk failed to load. Do not modify it.
|
|
125
|
+
)
|
|
126
126
|
|
|
127
127
|
sum_progress = 0
|
|
128
128
|
volumes = tuple(
|
|
@@ -252,8 +252,7 @@ class BoundedPartial3DArray(BasePartial3DArray):
|
|
|
252
252
|
@overload
|
|
253
253
|
def __getitem__(
|
|
254
254
|
self, slices: Tuple[IntegerType, IntegerType, IntegerType]
|
|
255
|
-
) -> Union[int, bool]:
|
|
256
|
-
...
|
|
255
|
+
) -> Union[int, bool]: ...
|
|
257
256
|
|
|
258
257
|
@overload
|
|
259
258
|
def __getitem__(
|
|
@@ -263,14 +262,12 @@ class BoundedPartial3DArray(BasePartial3DArray):
|
|
|
263
262
|
Union[IntegerType, slice],
|
|
264
263
|
Union[IntegerType, slice],
|
|
265
264
|
],
|
|
266
|
-
) -> "BoundedPartial3DArray":
|
|
267
|
-
...
|
|
265
|
+
) -> "BoundedPartial3DArray": ...
|
|
268
266
|
|
|
269
267
|
@overload
|
|
270
268
|
def __getitem__(
|
|
271
269
|
self, slices: Union[numpy.ndarray, "BoundedPartial3DArray"]
|
|
272
|
-
) -> numpy.ndarray:
|
|
273
|
-
...
|
|
270
|
+
) -> numpy.ndarray: ...
|
|
274
271
|
|
|
275
272
|
def __getitem__(self, item):
|
|
276
273
|
"""
|
|
@@ -386,16 +383,14 @@ class BoundedPartial3DArray(BasePartial3DArray):
|
|
|
386
383
|
Union[IntegerType, slice],
|
|
387
384
|
],
|
|
388
385
|
value: Union[int, bool, numpy.ndarray, "BoundedPartial3DArray"],
|
|
389
|
-
):
|
|
390
|
-
...
|
|
386
|
+
): ...
|
|
391
387
|
|
|
392
388
|
@overload
|
|
393
389
|
def __setitem__(
|
|
394
390
|
self,
|
|
395
391
|
item: Union[numpy.ndarray, "BoundedPartial3DArray"],
|
|
396
392
|
value: Union[int, bool, numpy.ndarray],
|
|
397
|
-
):
|
|
398
|
-
...
|
|
393
|
+
): ...
|
|
399
394
|
|
|
400
395
|
def __setitem__(self, item, value):
|
|
401
396
|
"""
|
|
@@ -141,8 +141,9 @@ class UnboundedPartial3DArray(BasePartial3DArray):
|
|
|
141
141
|
self[slices][:, :, :] = value
|
|
142
142
|
|
|
143
143
|
@overload
|
|
144
|
-
def __getitem__(
|
|
145
|
-
|
|
144
|
+
def __getitem__(
|
|
145
|
+
self, slices: Tuple[IntegerType, IntegerType, IntegerType]
|
|
146
|
+
) -> int: ...
|
|
146
147
|
|
|
147
148
|
@overload
|
|
148
149
|
def __getitem__(
|
|
@@ -152,8 +153,7 @@ class UnboundedPartial3DArray(BasePartial3DArray):
|
|
|
152
153
|
Union[IntegerType, slice],
|
|
153
154
|
Union[IntegerType, slice],
|
|
154
155
|
],
|
|
155
|
-
) -> "BoundedPartial3DArray":
|
|
156
|
-
...
|
|
156
|
+
) -> "BoundedPartial3DArray": ...
|
|
157
157
|
|
|
158
158
|
def __getitem__(self, item):
|
|
159
159
|
"""
|
|
@@ -80,18 +80,15 @@ class BiomeManager(BaseRegistry):
|
|
|
80
80
|
yield from enumerate(self._index_to_biome)
|
|
81
81
|
|
|
82
82
|
@overload
|
|
83
|
-
def __getitem__(self, item: BiomeType) -> int:
|
|
84
|
-
...
|
|
83
|
+
def __getitem__(self, item: BiomeType) -> int: ...
|
|
85
84
|
|
|
86
85
|
@overload
|
|
87
|
-
def __getitem__(self, item: Int) -> BiomeType:
|
|
88
|
-
...
|
|
86
|
+
def __getitem__(self, item: Int) -> BiomeType: ...
|
|
89
87
|
|
|
90
88
|
@overload
|
|
91
89
|
def __getitem__(
|
|
92
90
|
self, item: Iterable[Union[Int, BiomeType]]
|
|
93
|
-
) -> List[Union[BiomeType, Int]]:
|
|
94
|
-
...
|
|
91
|
+
) -> List[Union[BiomeType, Int]]: ...
|
|
95
92
|
|
|
96
93
|
def __getitem__(self, item):
|
|
97
94
|
"""
|
|
@@ -82,16 +82,15 @@ class BlockManager(BaseRegistry):
|
|
|
82
82
|
yield from enumerate(self._index_to_block)
|
|
83
83
|
|
|
84
84
|
@overload
|
|
85
|
-
def __getitem__(self, item: Block) -> int:
|
|
86
|
-
...
|
|
85
|
+
def __getitem__(self, item: Block) -> int: ...
|
|
87
86
|
|
|
88
87
|
@overload
|
|
89
|
-
def __getitem__(self, item: Int) -> Block:
|
|
90
|
-
...
|
|
88
|
+
def __getitem__(self, item: Int) -> Block: ...
|
|
91
89
|
|
|
92
90
|
@overload
|
|
93
|
-
def __getitem__(
|
|
94
|
-
|
|
91
|
+
def __getitem__(
|
|
92
|
+
self, item: Iterable[Union[Int, Block]]
|
|
93
|
+
) -> List[Union[Block, Int]]: ...
|
|
95
94
|
|
|
96
95
|
def __getitem__(self, item):
|
|
97
96
|
"""
|
amulet/api/selection/box.py
CHANGED
|
@@ -599,9 +599,7 @@ class SelectionBox(AbstractBaseSelection):
|
|
|
599
599
|
points_array.T,
|
|
600
600
|
).T[:, :3]
|
|
601
601
|
|
|
602
|
-
def _iter_transformed_boxes(
|
|
603
|
-
self, transform: numpy.ndarray
|
|
604
|
-
) -> Generator[
|
|
602
|
+
def _iter_transformed_boxes(self, transform: numpy.ndarray) -> Generator[
|
|
605
603
|
Tuple[
|
|
606
604
|
float, # progress
|
|
607
605
|
SelectionBox, # The sub-chunk box.
|
amulet/api/selection/group.py
CHANGED
|
@@ -136,12 +136,10 @@ class SelectionGroup(AbstractBaseSelection):
|
|
|
136
136
|
return bool(self._selection_boxes)
|
|
137
137
|
|
|
138
138
|
@overload
|
|
139
|
-
def __getitem__(self, item: int) -> SelectionBox:
|
|
140
|
-
...
|
|
139
|
+
def __getitem__(self, item: int) -> SelectionBox: ...
|
|
141
140
|
|
|
142
141
|
@overload
|
|
143
|
-
def __getitem__(self, item: slice) -> SelectionGroup:
|
|
144
|
-
...
|
|
142
|
+
def __getitem__(self, item: slice) -> SelectionGroup: ...
|
|
145
143
|
|
|
146
144
|
def __getitem__(self, item):
|
|
147
145
|
"""Get the selection box at the given index."""
|
|
@@ -276,13 +276,11 @@ class Interface(ABC):
|
|
|
276
276
|
|
|
277
277
|
@overload
|
|
278
278
|
@staticmethod
|
|
279
|
-
def check_type(obj: CompoundTag, key: str, dtype: Type[AnyNBT]) -> bool:
|
|
280
|
-
...
|
|
279
|
+
def check_type(obj: CompoundTag, key: str, dtype: Type[AnyNBT]) -> bool: ...
|
|
281
280
|
|
|
282
281
|
@overload
|
|
283
282
|
@staticmethod
|
|
284
|
-
def check_type(obj: ListTag, key: int, dtype: Type[AnyNBT]) -> bool:
|
|
285
|
-
...
|
|
283
|
+
def check_type(obj: ListTag, key: int, dtype: Type[AnyNBT]) -> bool: ...
|
|
286
284
|
|
|
287
285
|
@staticmethod
|
|
288
286
|
def check_type(
|
|
@@ -298,8 +296,7 @@ class Interface(ABC):
|
|
|
298
296
|
key: str,
|
|
299
297
|
dtype: Type[AnyNBT],
|
|
300
298
|
default: Optional[AnyNBT] = None,
|
|
301
|
-
) -> Optional[AnyNBT]:
|
|
302
|
-
...
|
|
299
|
+
) -> Optional[AnyNBT]: ...
|
|
303
300
|
|
|
304
301
|
@overload
|
|
305
302
|
def get_obj(
|
|
@@ -308,8 +305,7 @@ class Interface(ABC):
|
|
|
308
305
|
key: int,
|
|
309
306
|
dtype: Type[AnyNBT],
|
|
310
307
|
default: Optional[AnyNBT] = None,
|
|
311
|
-
) -> Optional[AnyNBT]:
|
|
312
|
-
...
|
|
308
|
+
) -> Optional[AnyNBT]: ...
|
|
313
309
|
|
|
314
310
|
def get_obj(
|
|
315
311
|
self, obj, key, dtype: Type[AnyNBT], default: Optional[AnyNBT] = None
|
|
@@ -27,6 +27,7 @@ import PyMCTranslate
|
|
|
27
27
|
from amulet.api import level as api_level, wrapper as api_wrapper
|
|
28
28
|
from amulet.api.chunk import Chunk
|
|
29
29
|
from amulet.api.registry import BlockManager
|
|
30
|
+
from amulet.api.block import UniversalAirBlock
|
|
30
31
|
from amulet.api.errors import (
|
|
31
32
|
ChunkLoadError,
|
|
32
33
|
ChunkDoesNotExist,
|
|
@@ -621,6 +622,7 @@ class FormatWrapper(Generic[VersionNumberT], ABC):
|
|
|
621
622
|
)
|
|
622
623
|
else:
|
|
623
624
|
chunk._block_palette = BlockManager()
|
|
625
|
+
chunk._block_palette.get_add_block(UniversalAirBlock)
|
|
624
626
|
|
|
625
627
|
def get_chunk_callback(_: int, __: int) -> Chunk:
|
|
626
628
|
# conversion from universal should not require any data outside the block
|
|
@@ -12,6 +12,7 @@ import re
|
|
|
12
12
|
import threading
|
|
13
13
|
import logging
|
|
14
14
|
from enum import IntEnum
|
|
15
|
+
import lz4.block as lz4_block
|
|
15
16
|
|
|
16
17
|
from amulet_nbt import NamedTag, load as load_nbt
|
|
17
18
|
|
|
@@ -33,6 +34,7 @@ class RegionFileVersion(IntEnum):
|
|
|
33
34
|
VERSION_GZIP = 1
|
|
34
35
|
VERSION_DEFLATE = 2
|
|
35
36
|
VERSION_NONE = 3
|
|
37
|
+
VERSION_LZ4 = 4
|
|
36
38
|
|
|
37
39
|
|
|
38
40
|
def _validate_region_coords(cx: int, cz: int):
|
|
@@ -47,6 +49,50 @@ def _compress(data: NamedTag) -> bytes:
|
|
|
47
49
|
return b"\x02" + zlib.compress(data)
|
|
48
50
|
|
|
49
51
|
|
|
52
|
+
LZ4_HEADER = struct.Struct("<8sBiii")
|
|
53
|
+
LZ4_MAGIC = b"LZ4Block"
|
|
54
|
+
COMPRESSION_METHOD_RAW = 0x10
|
|
55
|
+
COMPRESSION_METHOD_LZ4 = 0x20
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _decompress_lz4(data: bytes) -> bytes:
|
|
59
|
+
"""The LZ4 compression format is a sequence of LZ4 blocks with some header data."""
|
|
60
|
+
# https://github.com/lz4/lz4-java/blob/7c931bef32d179ec3d3286ee71638b23ebde3459/src/java/net/jpountz/lz4/LZ4BlockInputStream.java#L200
|
|
61
|
+
decompressed: list[bytes] = []
|
|
62
|
+
index = 0
|
|
63
|
+
while index < len(data):
|
|
64
|
+
magic, token, compressed_length, original_length, checksum = LZ4_HEADER.unpack(
|
|
65
|
+
data[index : index + LZ4_HEADER.size]
|
|
66
|
+
)
|
|
67
|
+
index += LZ4_HEADER.size
|
|
68
|
+
compression_method = token & 0xF0
|
|
69
|
+
if (
|
|
70
|
+
magic != LZ4_MAGIC
|
|
71
|
+
or original_length < 0
|
|
72
|
+
or compressed_length < 0
|
|
73
|
+
or (original_length == 0 and compressed_length != 0)
|
|
74
|
+
or (original_length != 0 and compressed_length == 0)
|
|
75
|
+
or (
|
|
76
|
+
compression_method == COMPRESSION_METHOD_RAW
|
|
77
|
+
and original_length != compressed_length
|
|
78
|
+
)
|
|
79
|
+
):
|
|
80
|
+
raise ValueError("LZ4 compressed block is corrupted.")
|
|
81
|
+
if compression_method == COMPRESSION_METHOD_RAW:
|
|
82
|
+
decompressed.append(data[index : index + original_length])
|
|
83
|
+
index += original_length
|
|
84
|
+
elif compression_method == COMPRESSION_METHOD_LZ4:
|
|
85
|
+
decompressed.append(
|
|
86
|
+
lz4_block.decompress(
|
|
87
|
+
data[index : index + compressed_length], original_length
|
|
88
|
+
)
|
|
89
|
+
)
|
|
90
|
+
index += compressed_length
|
|
91
|
+
else:
|
|
92
|
+
raise ValueError("LZ4 compressed block is corrupted.")
|
|
93
|
+
return b"".join(decompressed)
|
|
94
|
+
|
|
95
|
+
|
|
50
96
|
def _decompress(data: bytes) -> NamedTag:
|
|
51
97
|
"""Convert a bytes object into an NBTFile"""
|
|
52
98
|
compress_type, data = data[0], data[1:]
|
|
@@ -56,6 +102,8 @@ def _decompress(data: bytes) -> NamedTag:
|
|
|
56
102
|
return load_nbt(zlib.decompress(data), compressed=False)
|
|
57
103
|
elif compress_type == RegionFileVersion.VERSION_NONE:
|
|
58
104
|
return load_nbt(data, compressed=False)
|
|
105
|
+
elif compress_type == RegionFileVersion.VERSION_LZ4:
|
|
106
|
+
return load_nbt(_decompress_lz4(data), compressed=False)
|
|
59
107
|
raise ChunkLoadError(f"Invalid compression type {compress_type}")
|
|
60
108
|
|
|
61
109
|
|
|
@@ -371,9 +371,9 @@ class ConstructionFormatWrapper(StructureFormatWrapper[VersionNumberTuple]):
|
|
|
371
371
|
),
|
|
372
372
|
}
|
|
373
373
|
)
|
|
374
|
-
section_index_table: List[
|
|
375
|
-
|
|
376
|
-
|
|
374
|
+
section_index_table: List[Tuple[int, int, int, int, int, int, int, int]] = (
|
|
375
|
+
[]
|
|
376
|
+
)
|
|
377
377
|
if self._section_version == 0:
|
|
378
378
|
for section_list in self._chunk_to_section.values():
|
|
379
379
|
for section in section_list:
|
|
@@ -172,9 +172,9 @@ class LevelDBDimensionManager:
|
|
|
172
172
|
with suppress(KeyError):
|
|
173
173
|
digp_key = b"digp" + prefix
|
|
174
174
|
digp = self._db.get(digp_key)
|
|
175
|
-
chunk_data[
|
|
176
|
-
b"
|
|
177
|
-
|
|
175
|
+
chunk_data[b"digp"] = (
|
|
176
|
+
b"" # The presence of this key signals to the put method that this should be created and written
|
|
177
|
+
)
|
|
178
178
|
for i in range(0, (len(digp) // 8) * 8, 8):
|
|
179
179
|
actor_key = b"actorprefix" + digp[i : i + 8]
|
|
180
180
|
try:
|
|
@@ -135,9 +135,9 @@ class BaseLevelDBInterface(Interface):
|
|
|
135
135
|
for key in chunk_data.copy().keys():
|
|
136
136
|
if len(key) == 2 and key[0:1] == b"\x2F":
|
|
137
137
|
cy = struct.unpack("b", key[1:2])[0]
|
|
138
|
-
subchunks[
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
subchunks[self._chunk_key_to_sub_chunk(cy, bounds[0] >> 4)] = (
|
|
139
|
+
chunk_data.pop(key)
|
|
140
|
+
)
|
|
141
141
|
chunk.blocks, chunk_palette = self._load_subchunks(subchunks)
|
|
142
142
|
elif self._features["terrain"] == "30array":
|
|
143
143
|
section_data = chunk_data.pop(b"\x30", None)
|
|
@@ -274,9 +274,9 @@ class BaseLevelDBInterface(Interface):
|
|
|
274
274
|
)
|
|
275
275
|
min_y = bounds[0] // 16
|
|
276
276
|
for cy, sub_chunk in terrain.items():
|
|
277
|
-
chunk_data[
|
|
278
|
-
|
|
279
|
-
|
|
277
|
+
chunk_data[b"\x2F" + self._get_sub_chunk_storage_byte(cy, min_y)] = (
|
|
278
|
+
sub_chunk
|
|
279
|
+
)
|
|
280
280
|
|
|
281
281
|
# chunk status
|
|
282
282
|
if self._features["finalised_state"] == "int0-2":
|
|
@@ -71,11 +71,6 @@ class MCStructureFormatWrapper(StructureFormatWrapper[VersionNumberTuple]):
|
|
|
71
71
|
):
|
|
72
72
|
if not overwrite and os.path.isfile(self.path):
|
|
73
73
|
raise ObjectWriteError(f"There is already a file at {self.path}")
|
|
74
|
-
translator_version = self.translation_manager.get_version(
|
|
75
|
-
"bedrock", (999, 999, 999)
|
|
76
|
-
)
|
|
77
|
-
self._platform = translator_version.platform
|
|
78
|
-
self._version = translator_version.version_number
|
|
79
74
|
self._chunks = {}
|
|
80
75
|
self._set_selection(bounds)
|
|
81
76
|
self._is_open = True
|
|
@@ -322,9 +322,7 @@ class SpongeSchemFormatWrapper(StructureFormatWrapper[VersionNumberInt]):
|
|
|
322
322
|
raise SpongeSchemWriteError(
|
|
323
323
|
"The structure is too large to be exported to a Sponge Schematic file. It must be 2^16 - 1 at most in each dimension."
|
|
324
324
|
)
|
|
325
|
-
overflowed_shape = [
|
|
326
|
-
s if s < 2**15 else s - 2**16 for s in selection.shape
|
|
327
|
-
]
|
|
325
|
+
overflowed_shape = [s if s < 2**15 else s - 2**16 for s in selection.shape]
|
|
328
326
|
tag = CompoundTag(
|
|
329
327
|
{
|
|
330
328
|
"Version": IntTag(2),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: amulet-core
|
|
3
|
-
Version: 1.9.
|
|
3
|
+
Version: 1.9.22
|
|
4
4
|
Summary: A Python library for reading/writing Minecraft's various save formats.
|
|
5
5
|
Home-page: https://www.amuletmc.com
|
|
6
6
|
Author: James Clare, Ben Gothard et al.
|
|
@@ -16,6 +16,7 @@ Requires-Dist: pymctranslate ~=1.2
|
|
|
16
16
|
Requires-Dist: portalocker ~=2.4
|
|
17
17
|
Requires-Dist: amulet-leveldb ~=1.0b0
|
|
18
18
|
Requires-Dist: platformdirs ~=3.1
|
|
19
|
+
Requires-Dist: lz4 ~=4.3
|
|
19
20
|
Provides-Extra: dev
|
|
20
21
|
Requires-Dist: black >=22.3 ; extra == 'dev'
|
|
21
22
|
Requires-Dist: pre-commit >=1.11.1 ; extra == 'dev'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
amulet/__init__.py,sha256=sWKAqhofjzTINMJB22nXeBTITznt4H9rM3ZaaAn2SB4,866
|
|
2
|
-
amulet/_version.py,sha256=
|
|
2
|
+
amulet/_version.py,sha256=twBWv29M0ARlZrctWSYbZAh4QkCPN47RVvdbf3-7MD8,498
|
|
3
3
|
amulet/__pyinstaller/__init__.py,sha256=JJOm9J0BoU_vwoYyoHgd8vwSdiO5SGlHHWH6EQK6sc4,41
|
|
4
4
|
amulet/__pyinstaller/hook-amulet.py,sha256=5s6LZxxd47zNsrsJi-PORR7Q6QC079D7pcTkSn1uzCs,158
|
|
5
5
|
amulet/api/__init__.py,sha256=HJ88KU13JNYES9sptkz0la0OsoRvBGUavuOanaZ_RyM,46
|
|
@@ -33,7 +33,7 @@ amulet/api/history/base/history_manager.py,sha256=_0jpO_mDABXYsEuNui5m7SQ4cAt-rB
|
|
|
33
33
|
amulet/api/history/base/revision_manager.py,sha256=pfIUWG-0jb6m_EV4ZTs_Eblr_OP01YCFA0uaitrtezo,2816
|
|
34
34
|
amulet/api/history/history_manager/__init__.py,sha256=iM4WgmNwRNevkPVWJysjhkDEyVNnU4iMronoDpyRwKk,123
|
|
35
35
|
amulet/api/history/history_manager/container.py,sha256=AJ4k2B927UYI3phKrgXv8gNIjLBRYyzuc4itTgYIVGQ,3480
|
|
36
|
-
amulet/api/history/history_manager/database.py,sha256=
|
|
36
|
+
amulet/api/history/history_manager/database.py,sha256=8rl-dkx0TJjUPG1f8UsZ50VIqL8f-DJfZYywtm_Bly0,11329
|
|
37
37
|
amulet/api/history/history_manager/meta.py,sha256=zCbQ4HwzK5xMl9PkNwFqva-ED4YSz9X2IdO7BXHIXGc,3023
|
|
38
38
|
amulet/api/history/history_manager/object.py,sha256=qieOnvxa06RW_qm_LJqKtoH1AD45V3ikrKeZvptheAo,4064
|
|
39
39
|
amulet/api/history/revision_manager/__init__.py,sha256=SkjICZ_KMwQO_uALB9Zs17457L29yhwgGLAPY5MLI54,72
|
|
@@ -45,31 +45,31 @@ amulet/api/level/world.py,sha256=HpKe4uvV5Ar2RaNf59wuP5tsxJmComMMNHpnjYAT7_Y,613
|
|
|
45
45
|
amulet/api/level/base_level/__init__.py,sha256=Gix697NJxsR4zuYf-Q5Rj2IgrWWMpKvqQTfSc4TVuEY,34
|
|
46
46
|
amulet/api/level/base_level/base_level.py,sha256=Sfd0Qgu-xGasJO9aLpMFmf68DjMSt6J3w6nmTIsOcSU,43619
|
|
47
47
|
amulet/api/level/base_level/chunk_manager.py,sha256=Dru933TSAmH3bklVulVvwxyp4VGFa2CHZvjmkDzmLZM,8921
|
|
48
|
-
amulet/api/level/base_level/clone.py,sha256=
|
|
48
|
+
amulet/api/level/base_level/clone.py,sha256=9EZ2XYdSHoTjuKUDv-RfVj3TMy_laZUqYIME4XH-3CM,19547
|
|
49
49
|
amulet/api/level/base_level/player_manager.py,sha256=ecx4AXAWGxuVG5zaQ_lS2Mr-O0VQu685n3KneTkV4nA,3226
|
|
50
50
|
amulet/api/level/immutable_structure/__init__.py,sha256=26iNSRV6Aj-XNpDQtLVURtVks9ogFnl1fTfsysUjDQ0,52
|
|
51
51
|
amulet/api/level/immutable_structure/immutable_structure.py,sha256=Z8Pu6zblG3wVK3jjtppPZeey3r91822vI3Y4uMmpC10,3302
|
|
52
52
|
amulet/api/level/immutable_structure/void_format_wrapper.py,sha256=D82pR6wQDgHtLFlV5L5JcPuGJPtzJzsbbTc_YjQj2uc,3065
|
|
53
53
|
amulet/api/partial_3d_array/__init__.py,sha256=CFPK3ac8yspJwe5UfoPiohjZjIO1jN3amaNnKbga-5Q,124
|
|
54
54
|
amulet/api/partial_3d_array/base_partial_3d_array.py,sha256=qQGH500EJCnwt4umyF6iwUkzOBoSwTuX8SjTDQLunD8,9215
|
|
55
|
-
amulet/api/partial_3d_array/bounded_partial_3d_array.py,sha256=
|
|
55
|
+
amulet/api/partial_3d_array/bounded_partial_3d_array.py,sha256=nnRo7iT16FmDWUc7kfXtep_PxGUlx61Kr7EuYdYvoUk,21713
|
|
56
56
|
amulet/api/partial_3d_array/data_types.py,sha256=hqNDQvSqczOpk8qFTBhAJCu4pPqvZqgUNb6S9zewDUc,547
|
|
57
|
-
amulet/api/partial_3d_array/unbounded_partial_3d_array.py,sha256=
|
|
57
|
+
amulet/api/partial_3d_array/unbounded_partial_3d_array.py,sha256=TsApbeiSOxU-u3xbOWOgVPx3fSmkJ5ori1bJ55kXAv0,9268
|
|
58
58
|
amulet/api/partial_3d_array/util.py,sha256=ItvIsiF8aX9LBgQPTi0zD2gwfrnr_pi7gN5cqBG8TdQ,3969
|
|
59
59
|
amulet/api/registry/__init__.py,sha256=Rc8owvBGLoc9MIxcFH9AQ-Cf7oerxsrM27asvgPynK8,80
|
|
60
60
|
amulet/api/registry/base_registry.py,sha256=45B-Odw11xMuPRx3j3cEDwvuen4tFgyzJrpXE--P6HQ,835
|
|
61
|
-
amulet/api/registry/biome_manager.py,sha256=
|
|
62
|
-
amulet/api/registry/block_manager.py,sha256=
|
|
61
|
+
amulet/api/registry/biome_manager.py,sha256=H5YV91AXFKvGZ813Hk2eb01EAxULYSpWkLgDbhWoJC0,5133
|
|
62
|
+
amulet/api/registry/block_manager.py,sha256=kDPb33gq3Vrc_ruUx1JGJNaUDok6AzwjNllLZkoavvQ,4947
|
|
63
63
|
amulet/api/selection/__init__.py,sha256=1Jz5hMJ-4nQIYHq0hsz-rFighmjIILC4hwVNsrJZ5X0,64
|
|
64
64
|
amulet/api/selection/abstract_selection.py,sha256=yv1PdZdE5TWv0FlsDv-5IrodgBS2vfolDtVEqh8sRcY,8433
|
|
65
|
-
amulet/api/selection/box.py,sha256=
|
|
66
|
-
amulet/api/selection/group.py,sha256
|
|
65
|
+
amulet/api/selection/box.py,sha256=RqTPU5lDGutjoRJpGK4P8j50QYHjqMpbZQO4DLFqU-s,30052
|
|
66
|
+
amulet/api/selection/group.py,sha256=agDjy1g8D-CsCZZBf7h3GKZRoVEkoxxWUZBwVVzRWTk,18497
|
|
67
67
|
amulet/api/wrapper/__init__.py,sha256=5xZQbBkJOHZlaWf3uutlXWGBCUnTH-FfbeJ8JqScTl8,388
|
|
68
|
-
amulet/api/wrapper/format_wrapper.py,sha256=
|
|
68
|
+
amulet/api/wrapper/format_wrapper.py,sha256=nhCMtiaLpfGgSVB0aMSPRFrBIilWHA429_yYZIbUD1I,26122
|
|
69
69
|
amulet/api/wrapper/structure_format_wrapper.py,sha256=RRLcsZxDl56PHXnU-_MsE47okKZWlafvtXWcVNGBFUs,3674
|
|
70
70
|
amulet/api/wrapper/world_format_wrapper.py,sha256=KH4eEuWIk2dapE17qQEW1hUhQPLp8CfxHVgF89nHeqk,1646
|
|
71
71
|
amulet/api/wrapper/chunk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
|
-
amulet/api/wrapper/chunk/interface.py,sha256=
|
|
72
|
+
amulet/api/wrapper/chunk/interface.py,sha256=DKmhHDfQIh2MkU45VzBklXp59it2kJsD5BzYItDVepE,14660
|
|
73
73
|
amulet/api/wrapper/chunk/translator.py,sha256=jKG6Dsel1FNycQ4KE5vvZJDuAsw1QHahLaFEtnsm6n8,22232
|
|
74
74
|
amulet/img/missing_world_icon.png,sha256=CbkqmFIKvdlDRIYrr_DpGtdlaabJGFbT5pmFYUzocTg,32841
|
|
75
75
|
amulet/level/__init__.py,sha256=BlvUUE_JQPg8P10UqY_twyu_kDZNW9dcnsNs1a0sNL4,42
|
|
@@ -81,22 +81,22 @@ amulet/level/formats/anvil_world/__init__.py,sha256=QlLF_96Ub9ceibhR8J1CVfkSaAqX
|
|
|
81
81
|
amulet/level/formats/anvil_world/_sector_manager.py,sha256=QK-M9C4j_QfcpBxd_GwmUeQbwpnTgc6TC6egqtB4ZP8,11080
|
|
82
82
|
amulet/level/formats/anvil_world/dimension.py,sha256=Ft38XWSjJ7mRjHqF-XjEIR7uJFTB_oBaWQIPNaMrsgQ,6069
|
|
83
83
|
amulet/level/formats/anvil_world/format.py,sha256=wBP2yesGNwNL5Xl-WmYWoWV2aMJTL6Vs2ky13EzCzro,27515
|
|
84
|
-
amulet/level/formats/anvil_world/region.py,sha256
|
|
84
|
+
amulet/level/formats/anvil_world/region.py,sha256=KzwvmQHbxYMQdps43Iwy6ruOufQst4GmyF2P3GLzuHc,15995
|
|
85
85
|
amulet/level/formats/anvil_world/data_pack/__init__.py,sha256=L-He67mqDNWp0boI1VDyIz92BfBZqSKLnBcR0bYxQUA,79
|
|
86
86
|
amulet/level/formats/anvil_world/data_pack/data_pack.py,sha256=N7WwzdQuqmIsjInIqhk-I0UGV67wCFc_ysQMYh0UXYU,6161
|
|
87
87
|
amulet/level/formats/anvil_world/data_pack/data_pack_manager.py,sha256=1cJwn4hKT6NFoolQrx_vTeXDwWIMcENAjBw5uZHz2SA,2250
|
|
88
88
|
amulet/level/formats/construction/__init__.py,sha256=HLCN4IvfSSQHAQdmZqXBpRKXi-fzjY1SvuxiSm7_4-A,90
|
|
89
|
-
amulet/level/formats/construction/format_wrapper.py,sha256=
|
|
89
|
+
amulet/level/formats/construction/format_wrapper.py,sha256=HDJ6o6rlyNZSFeXmUhDkIZ8gBR5VeFPHW3reF_wDT1o,18747
|
|
90
90
|
amulet/level/formats/construction/interface.py,sha256=Nd7MqTebOZY1VpDtE-ctEoQcK7-CyaxWqODVbclpTHU,4951
|
|
91
91
|
amulet/level/formats/construction/section.py,sha256=_LdEQTLpaWnFhFCsmrzEFKRvXl7kKGV7dR225t1WpAc,1672
|
|
92
92
|
amulet/level/formats/construction/util.py,sha256=dBBITNfxUocxxzVnUpRUetr0KuLtMVGjk0-o6iAUKBs,4930
|
|
93
93
|
amulet/level/formats/leveldb_world/__init__.py,sha256=dXo6jIok-_suB3KSrhb5NZS7CicGQj-HCLiGpD76QDY,58
|
|
94
94
|
amulet/level/formats/leveldb_world/chunk.py,sha256=iNMwNs09Kyj9fUo3dFZxdtLyW_uh11aXgDUqe_MKoQo,1202
|
|
95
|
-
amulet/level/formats/leveldb_world/dimension.py,sha256=
|
|
95
|
+
amulet/level/formats/leveldb_world/dimension.py,sha256=LdrhL6xO9Kk3xMsYMzo3dWcVgTldzymlItC-YlQ6HHU,14728
|
|
96
96
|
amulet/level/formats/leveldb_world/format.py,sha256=PsnpNE778q83wKw_6bbH06V9Q1avIpyh3U8pj0iTMlw,23401
|
|
97
97
|
amulet/level/formats/leveldb_world/interface/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
98
|
amulet/level/formats/leveldb_world/interface/chunk/__init__.py,sha256=S606IgGmRqdQfv223yciHil3qqna8r5DiW8gsrNHyf0,1180
|
|
99
|
-
amulet/level/formats/leveldb_world/interface/chunk/base_leveldb_interface.py,sha256=
|
|
99
|
+
amulet/level/formats/leveldb_world/interface/chunk/base_leveldb_interface.py,sha256=jvbFITofMtWpU_g_NV_nkEcr0aZ28vibjAkFCHDSQAQ,32474
|
|
100
100
|
amulet/level/formats/leveldb_world/interface/chunk/generate_interface.py,sha256=izp5uJPzNoSM9k-EkbqN6RMsmUSTEyhuqxF7S3v-Szw,738
|
|
101
101
|
amulet/level/formats/leveldb_world/interface/chunk/leveldb_0.py,sha256=48MN18o9MLY2DBI3fOwb6etSc30eBLTVXfiXFVigygs,879
|
|
102
102
|
amulet/level/formats/leveldb_world/interface/chunk/leveldb_1.py,sha256=9xgQfC-nF4GqV0pW1tFEXGgu66Jhbmyu0X0xARSUsUo,183
|
|
@@ -142,7 +142,7 @@ amulet/level/formats/leveldb_world/interface/chunk/leveldb_9.py,sha256=i4hAlxvCm
|
|
|
142
142
|
amulet/level/formats/leveldb_world/interface/chunk/leveldb_chunk_versions.py,sha256=ovG24Ci6PNSlNnQqh-Qh9c8v_3ulFzDJG5khYbWG9bA,3656
|
|
143
143
|
amulet/level/formats/mcstructure/__init__.py,sha256=cRwoW6W93uFFmGHJgYOr8w5Z05b2zYWsMKx-qf_Cjao,88
|
|
144
144
|
amulet/level/formats/mcstructure/chunk.py,sha256=rqdfWsNt8CtCBzxgs_8Gkjbc1WUHrab-pQ37_F5DPWU,1378
|
|
145
|
-
amulet/level/formats/mcstructure/format_wrapper.py,sha256=
|
|
145
|
+
amulet/level/formats/mcstructure/format_wrapper.py,sha256=2DazC0Rrl9QpensHj0f1UrVq2wXP05itY7D7RCvIrF0,14833
|
|
146
146
|
amulet/level/formats/mcstructure/interface.py,sha256=b9Y3e8_eoDK0rTbLPuinYxkao5ydJ_uLPA3Re484K1Q,6467
|
|
147
147
|
amulet/level/formats/schematic/__init__.py,sha256=BwYlVsVEm8zJrMvBLx4txutBMDl4uMxYjVIJBDH278g,84
|
|
148
148
|
amulet/level/formats/schematic/chunk.py,sha256=0R2voXU3EaYod8S63caRgJvwKsTx3GHw6RlurEK7xj8,1566
|
|
@@ -151,7 +151,7 @@ amulet/level/formats/schematic/format_wrapper.py,sha256=qfhk3B8GsdubRDkBkCL9_mqJ
|
|
|
151
151
|
amulet/level/formats/schematic/interface.py,sha256=SrdUezAbJfVIPf4riDm29L-xkvT4nuc3oZfLzrg6ycM,5265
|
|
152
152
|
amulet/level/formats/sponge_schem/__init__.py,sha256=LbmzUuNjMTtT1966euIBhLUzW_SrTdmisOBPQNmkfH0,102
|
|
153
153
|
amulet/level/formats/sponge_schem/chunk.py,sha256=PyX4GO1KUwlmaRnVdybD0NgRHW1612r2muWcwCV2rD8,1715
|
|
154
|
-
amulet/level/formats/sponge_schem/format_wrapper.py,sha256=
|
|
154
|
+
amulet/level/formats/sponge_schem/format_wrapper.py,sha256=BcDO-UProUOVahRxCJJIsfImNaXqKOwUh8_V1fTTBCw,17016
|
|
155
155
|
amulet/level/formats/sponge_schem/interface.py,sha256=5VipfVc8AqcP6mk8xbf63Q9fNE4-a3fXHK8da2Mdog8,4508
|
|
156
156
|
amulet/level/formats/sponge_schem/varint/__init__.py,sha256=IaKmhRtL0rfj7E0ZJXSXiW20qADQ3e5WyrQqYm57TtE,81
|
|
157
157
|
amulet/level/formats/sponge_schem/varint/varint.py,sha256=2XZ7IocfYqeCYalCr7WHb5OE4PnmGq3dV4oThg9Kb3I,2361
|
|
@@ -174,7 +174,7 @@ amulet/level/interfaces/chunk/anvil/anvil_2529.py,sha256=UTtQkxcM3jUdSWpy02gehEh
|
|
|
174
174
|
amulet/level/interfaces/chunk/anvil/anvil_2681.py,sha256=w9lz9014E3yNFdsLUFvF4UP1IE_OzdwFp8lZ0Zl5tCg,2319
|
|
175
175
|
amulet/level/interfaces/chunk/anvil/anvil_2709.py,sha256=qRvOb67bjyh-HcSEUiqlf1YKMqPfZjeW98Aid92YQy8,417
|
|
176
176
|
amulet/level/interfaces/chunk/anvil/anvil_2844.py,sha256=0jqoRhw5kRgDUfmm6dF18lxpIsDvm0eSL2rckVFhCCY,10216
|
|
177
|
-
amulet/level/interfaces/chunk/anvil/anvil_3463.py,sha256=
|
|
177
|
+
amulet/level/interfaces/chunk/anvil/anvil_3463.py,sha256=DXduuopYNspAjxmHuQkPzeJo7_ZGPQkV6IxEWktJLEM,423
|
|
178
178
|
amulet/level/interfaces/chunk/anvil/anvil_na.py,sha256=9E9Jd9sQQqG_osfYmIg50hbMpZ0c9Dhi1N1ZDurC2VI,22007
|
|
179
179
|
amulet/level/interfaces/chunk/anvil/base_anvil_interface.py,sha256=fG3nEkRxY9O-yvlBPFJW1abTb8Vw6Lhh7rjMJf7c1SA,11979
|
|
180
180
|
amulet/level/translators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -201,8 +201,8 @@ amulet/utils/generator.py,sha256=2pKToghl8irYozX5hBJYtjTQVzhljznPCi42hQKRGDQ,364
|
|
|
201
201
|
amulet/utils/matrix.py,sha256=KSqluO0H6oHUfe0pU4Esv67pOmHFurK2BDOrZAeNxg8,7665
|
|
202
202
|
amulet/utils/numpy_helpers.py,sha256=fM0rjZxbUqoTMTrFooZEVVhHfsqv0j_7KPGsjVq4ReM,1232
|
|
203
203
|
amulet/utils/world_utils.py,sha256=xb6JPrrbwDF0_y4ZYjTJ1ieydL3COzzLosTgcxDDyRc,12559
|
|
204
|
-
amulet_core-1.9.
|
|
205
|
-
amulet_core-1.9.
|
|
206
|
-
amulet_core-1.9.
|
|
207
|
-
amulet_core-1.9.
|
|
208
|
-
amulet_core-1.9.
|
|
204
|
+
amulet_core-1.9.22.dist-info/METADATA,sha256=sGrR7pkSs401NZnBcdzVggpTqxkKLta95d0O-7ojTjM,4287
|
|
205
|
+
amulet_core-1.9.22.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
206
|
+
amulet_core-1.9.22.dist-info/entry_points.txt,sha256=53zFNThTPzI8f9ertsyU2DoUpxdWU8rjOA_Cu4YH5Vk,63
|
|
207
|
+
amulet_core-1.9.22.dist-info/top_level.txt,sha256=3ZqHzNDiIb9kV8TwSeeXxK_9haSrsu631Qe4ndDo0rc,7
|
|
208
|
+
amulet_core-1.9.22.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|