amulet-core 2.0a5__cp312-cp312-macosx_10_13_universal2.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__.cpython-312-darwin.so +0 -0
- amulet/__init__.pyi +30 -0
- amulet/__pyinstaller/__init__.py +2 -0
- amulet/__pyinstaller/hook-amulet.py +4 -0
- amulet/_init.py +28 -0
- amulet/_version.py +21 -0
- amulet/biome.cpp +36 -0
- amulet/biome.hpp +43 -0
- amulet/biome.pyi +77 -0
- amulet/block.cpp +435 -0
- amulet/block.hpp +119 -0
- amulet/block.pyi +273 -0
- amulet/block_entity.cpp +12 -0
- amulet/block_entity.hpp +56 -0
- amulet/block_entity.pyi +80 -0
- amulet/chunk.cpp +16 -0
- amulet/chunk.hpp +99 -0
- amulet/chunk.pyi +30 -0
- amulet/chunk_/components/biome.py +155 -0
- amulet/chunk_/components/block_entity.py +117 -0
- amulet/chunk_/components/entity.py +64 -0
- amulet/chunk_/components/height_2d.py +16 -0
- amulet/chunk_components.pyi +95 -0
- amulet/collections.pyi +37 -0
- amulet/data_types.py +29 -0
- amulet/entity.py +180 -0
- amulet/errors.py +63 -0
- amulet/game/__init__.py +7 -0
- amulet/game/_game.py +152 -0
- amulet/game/_universal/__init__.py +1 -0
- amulet/game/_universal/_biome.py +17 -0
- amulet/game/_universal/_block.py +47 -0
- amulet/game/_universal/_version.py +68 -0
- amulet/game/abc/__init__.py +22 -0
- amulet/game/abc/_block_specification.py +150 -0
- amulet/game/abc/biome.py +213 -0
- amulet/game/abc/block.py +331 -0
- amulet/game/abc/game_version_container.py +25 -0
- amulet/game/abc/json_interface.py +27 -0
- amulet/game/abc/version.py +44 -0
- amulet/game/bedrock/__init__.py +1 -0
- amulet/game/bedrock/_biome.py +35 -0
- amulet/game/bedrock/_block.py +42 -0
- amulet/game/bedrock/_version.py +165 -0
- amulet/game/java/__init__.py +2 -0
- amulet/game/java/_biome.py +35 -0
- amulet/game/java/_block.py +60 -0
- amulet/game/java/_version.py +176 -0
- amulet/game/translate/__init__.py +12 -0
- amulet/game/translate/_functions/__init__.py +15 -0
- amulet/game/translate/_functions/_code_functions/__init__.py +0 -0
- amulet/game/translate/_functions/_code_functions/_text.py +553 -0
- amulet/game/translate/_functions/_code_functions/banner_pattern.py +67 -0
- amulet/game/translate/_functions/_code_functions/bedrock_chest_connection.py +152 -0
- amulet/game/translate/_functions/_code_functions/bedrock_moving_block_pos.py +88 -0
- amulet/game/translate/_functions/_code_functions/bedrock_sign.py +152 -0
- amulet/game/translate/_functions/_code_functions/bedrock_skull_rotation.py +16 -0
- amulet/game/translate/_functions/_code_functions/custom_name.py +146 -0
- amulet/game/translate/_functions/_frozen.py +66 -0
- amulet/game/translate/_functions/_state.py +54 -0
- amulet/game/translate/_functions/_typing.py +98 -0
- amulet/game/translate/_functions/abc.py +116 -0
- amulet/game/translate/_functions/carry_nbt.py +160 -0
- amulet/game/translate/_functions/carry_properties.py +80 -0
- amulet/game/translate/_functions/code.py +143 -0
- amulet/game/translate/_functions/map_block_name.py +66 -0
- amulet/game/translate/_functions/map_nbt.py +111 -0
- amulet/game/translate/_functions/map_properties.py +93 -0
- amulet/game/translate/_functions/multiblock.py +112 -0
- amulet/game/translate/_functions/new_block.py +42 -0
- amulet/game/translate/_functions/new_entity.py +43 -0
- amulet/game/translate/_functions/new_nbt.py +206 -0
- amulet/game/translate/_functions/new_properties.py +64 -0
- amulet/game/translate/_functions/sequence.py +51 -0
- amulet/game/translate/_functions/walk_input_nbt.py +331 -0
- amulet/game/translate/_translator.py +433 -0
- amulet/item.py +75 -0
- amulet/level/__init__.pyi +27 -0
- amulet/level/_load.py +100 -0
- amulet/level/abc/__init__.py +12 -0
- amulet/level/abc/_chunk_handle.py +335 -0
- amulet/level/abc/_dimension.py +86 -0
- amulet/level/abc/_history/__init__.py +1 -0
- amulet/level/abc/_history/_cache.py +224 -0
- amulet/level/abc/_history/_history_manager.py +291 -0
- amulet/level/abc/_level/__init__.py +5 -0
- amulet/level/abc/_level/_compactable_level.py +10 -0
- amulet/level/abc/_level/_creatable_level.py +29 -0
- amulet/level/abc/_level/_disk_level.py +17 -0
- amulet/level/abc/_level/_level.py +453 -0
- amulet/level/abc/_level/_loadable_level.py +42 -0
- amulet/level/abc/_player_storage.py +7 -0
- amulet/level/abc/_raw_level.py +187 -0
- amulet/level/abc/_registry.py +40 -0
- amulet/level/bedrock/__init__.py +2 -0
- amulet/level/bedrock/_chunk_handle.py +19 -0
- amulet/level/bedrock/_dimension.py +22 -0
- amulet/level/bedrock/_level.py +187 -0
- amulet/level/bedrock/_raw/__init__.py +5 -0
- amulet/level/bedrock/_raw/_actor_counter.py +53 -0
- amulet/level/bedrock/_raw/_chunk.py +54 -0
- amulet/level/bedrock/_raw/_chunk_decode.py +668 -0
- amulet/level/bedrock/_raw/_chunk_encode.py +602 -0
- amulet/level/bedrock/_raw/_constant.py +9 -0
- amulet/level/bedrock/_raw/_dimension.py +343 -0
- amulet/level/bedrock/_raw/_level.py +463 -0
- amulet/level/bedrock/_raw/_level_dat.py +90 -0
- amulet/level/bedrock/_raw/_typing.py +6 -0
- amulet/level/bedrock/_raw/leveldb_chunk_versions.py +83 -0
- amulet/level/bedrock/chunk/__init__.py +1 -0
- amulet/level/bedrock/chunk/_chunk.py +126 -0
- amulet/level/bedrock/chunk/components/__init__.py +0 -0
- amulet/level/bedrock/chunk/components/chunk_version.py +12 -0
- amulet/level/bedrock/chunk/components/finalised_state.py +13 -0
- amulet/level/bedrock/chunk/components/raw_chunk.py +15 -0
- amulet/level/construction/__init__.py +0 -0
- amulet/level/java/__init__.pyi +21 -0
- amulet/level/java/_chunk_handle.py +17 -0
- amulet/level/java/_chunk_handle.pyi +15 -0
- amulet/level/java/_dimension.py +20 -0
- amulet/level/java/_dimension.pyi +13 -0
- amulet/level/java/_level.py +184 -0
- amulet/level/java/_level.pyi +120 -0
- amulet/level/java/_raw/__init__.pyi +19 -0
- amulet/level/java/_raw/_chunk.pyi +23 -0
- amulet/level/java/_raw/_chunk_decode.py +561 -0
- amulet/level/java/_raw/_chunk_encode.py +463 -0
- amulet/level/java/_raw/_constant.py +9 -0
- amulet/level/java/_raw/_constant.pyi +20 -0
- amulet/level/java/_raw/_data_pack/__init__.py +2 -0
- amulet/level/java/_raw/_data_pack/__init__.pyi +8 -0
- amulet/level/java/_raw/_data_pack/data_pack.py +241 -0
- amulet/level/java/_raw/_data_pack/data_pack.pyi +197 -0
- amulet/level/java/_raw/_data_pack/data_pack_manager.py +77 -0
- amulet/level/java/_raw/_data_pack/data_pack_manager.pyi +75 -0
- amulet/level/java/_raw/_dimension.py +86 -0
- amulet/level/java/_raw/_dimension.pyi +72 -0
- amulet/level/java/_raw/_level.py +507 -0
- amulet/level/java/_raw/_level.pyi +238 -0
- amulet/level/java/_raw/_typing.py +3 -0
- amulet/level/java/_raw/_typing.pyi +5 -0
- amulet/level/java/anvil/__init__.py +2 -0
- amulet/level/java/anvil/__init__.pyi +11 -0
- amulet/level/java/anvil/_dimension.py +170 -0
- amulet/level/java/anvil/_dimension.pyi +109 -0
- amulet/level/java/anvil/_region.py +421 -0
- amulet/level/java/anvil/_region.pyi +197 -0
- amulet/level/java/anvil/_sector_manager.py +223 -0
- amulet/level/java/anvil/_sector_manager.pyi +142 -0
- amulet/level/java/chunk.pyi +81 -0
- amulet/level/java/chunk_/_chunk.py +260 -0
- amulet/level/java/chunk_/components/inhabited_time.py +12 -0
- amulet/level/java/chunk_/components/last_update.py +12 -0
- amulet/level/java/chunk_/components/legacy_version.py +12 -0
- amulet/level/java/chunk_/components/light_populated.py +12 -0
- amulet/level/java/chunk_/components/named_height_2d.py +37 -0
- amulet/level/java/chunk_/components/status.py +11 -0
- amulet/level/java/chunk_/components/terrain_populated.py +12 -0
- amulet/level/java/chunk_components.pyi +22 -0
- amulet/level/java/long_array.pyi +38 -0
- amulet/level/java_forge/__init__.py +0 -0
- amulet/level/mcstructure/__init__.py +0 -0
- amulet/level/nbt/__init__.py +0 -0
- amulet/level/schematic/__init__.py +0 -0
- amulet/level/sponge_schematic/__init__.py +0 -0
- amulet/level/temporary_level/__init__.py +1 -0
- amulet/level/temporary_level/_level.py +16 -0
- amulet/palette/__init__.pyi +8 -0
- amulet/palette/biome_palette.pyi +45 -0
- amulet/palette/block_palette.pyi +45 -0
- amulet/player.py +64 -0
- amulet/py.typed +0 -0
- amulet/selection/__init__.py +2 -0
- amulet/selection/abstract_selection.py +342 -0
- amulet/selection/box.py +852 -0
- amulet/selection/group.py +481 -0
- amulet/utils/__init__.pyi +28 -0
- amulet/utils/call_spec/__init__.py +24 -0
- amulet/utils/call_spec/__init__.pyi +53 -0
- amulet/utils/call_spec/_call_spec.py +262 -0
- amulet/utils/call_spec/_call_spec.pyi +272 -0
- amulet/utils/format_utils.py +41 -0
- amulet/utils/generator.py +18 -0
- amulet/utils/matrix.py +243 -0
- amulet/utils/matrix.pyi +177 -0
- amulet/utils/numpy.pyi +11 -0
- amulet/utils/numpy_helpers.py +19 -0
- amulet/utils/shareable_lock.py +335 -0
- amulet/utils/shareable_lock.pyi +190 -0
- amulet/utils/signal/__init__.py +10 -0
- amulet/utils/signal/__init__.pyi +25 -0
- amulet/utils/signal/_signal.py +228 -0
- amulet/utils/signal/_signal.pyi +84 -0
- amulet/utils/task_manager.py +235 -0
- amulet/utils/task_manager.pyi +168 -0
- amulet/utils/typed_property.py +111 -0
- amulet/utils/typing.py +4 -0
- amulet/utils/typing.pyi +6 -0
- amulet/utils/weakref.py +70 -0
- amulet/utils/weakref.pyi +50 -0
- amulet/utils/world_utils.py +102 -0
- amulet/utils/world_utils.pyi +109 -0
- amulet/version.cpp +136 -0
- amulet/version.hpp +142 -0
- amulet/version.pyi +94 -0
- amulet_core-2.0a5.dist-info/METADATA +103 -0
- amulet_core-2.0a5.dist-info/RECORD +210 -0
- amulet_core-2.0a5.dist-info/WHEEL +5 -0
- amulet_core-2.0a5.dist-info/entry_points.txt +2 -0
- amulet_core-2.0a5.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TypeVar, Self, TypeAlias, cast
|
|
4
|
+
from types import UnionType
|
|
5
|
+
|
|
6
|
+
import numpy
|
|
7
|
+
|
|
8
|
+
from amulet.version import VersionNumber, VersionRange
|
|
9
|
+
from amulet.chunk import Chunk, ComponentDataMapping
|
|
10
|
+
from amulet.block import BlockStack, Block
|
|
11
|
+
from amulet.biome import Biome
|
|
12
|
+
|
|
13
|
+
from amulet.chunk.components.biome import (
|
|
14
|
+
Biome2DComponent,
|
|
15
|
+
Biome2DComponentData,
|
|
16
|
+
Biome3DComponent,
|
|
17
|
+
Biome3DComponentData,
|
|
18
|
+
)
|
|
19
|
+
from amulet.chunk.components.block import BlockComponent, BlockComponentData
|
|
20
|
+
from amulet.chunk.components.block_entity import (
|
|
21
|
+
BlockEntityComponent,
|
|
22
|
+
BlockEntityComponentData,
|
|
23
|
+
)
|
|
24
|
+
from amulet.chunk.components.entity import EntityComponent, EntityComponentData
|
|
25
|
+
from amulet.chunk.components.height_2d import Height2DComponent
|
|
26
|
+
|
|
27
|
+
from .components.finalised_state import FinalisedStateComponent
|
|
28
|
+
from .components.chunk_version import ChunkVersionComponent
|
|
29
|
+
from .components.raw_chunk import RawChunkComponent
|
|
30
|
+
|
|
31
|
+
T = TypeVar("T")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _get_components(
|
|
35
|
+
chunk_version: int,
|
|
36
|
+
version_range: VersionRange,
|
|
37
|
+
default_block: BlockStack,
|
|
38
|
+
default_biome: Biome,
|
|
39
|
+
) -> ComponentDataMapping:
|
|
40
|
+
components: ComponentDataMapping = {} # type: ignore
|
|
41
|
+
components[RawChunkComponent] = None
|
|
42
|
+
components[ChunkVersionComponent] = chunk_version
|
|
43
|
+
components[FinalisedStateComponent] = 2
|
|
44
|
+
components[BlockComponent] = BlockComponentData(
|
|
45
|
+
version_range, (16, 16, 16), default_block
|
|
46
|
+
)
|
|
47
|
+
components[BlockEntityComponent] = BlockEntityComponentData(version_range)
|
|
48
|
+
components[EntityComponent] = EntityComponentData(version_range)
|
|
49
|
+
if chunk_version >= 29:
|
|
50
|
+
components[Biome3DComponent] = Biome3DComponentData(
|
|
51
|
+
version_range, (16, 16, 16), default_biome
|
|
52
|
+
)
|
|
53
|
+
else:
|
|
54
|
+
components[Biome2DComponent] = Biome2DComponentData(
|
|
55
|
+
version_range, (16, 16), default_biome
|
|
56
|
+
)
|
|
57
|
+
components[Height2DComponent] = numpy.zeros((16, 16), dtype=numpy.int64)
|
|
58
|
+
return components
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class BedrockChunk0(Chunk):
|
|
62
|
+
components = frozenset(
|
|
63
|
+
_get_components(
|
|
64
|
+
0,
|
|
65
|
+
VersionRange(
|
|
66
|
+
"bedrock",
|
|
67
|
+
VersionNumber(1, 0, 0),
|
|
68
|
+
VersionNumber(1, 0, 0),
|
|
69
|
+
),
|
|
70
|
+
BlockStack(Block("bedrock", VersionNumber(1, 0, 0), "", "")),
|
|
71
|
+
Biome("bedrock", VersionNumber(1, 0, 0), "", ""),
|
|
72
|
+
)
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
@classmethod
|
|
76
|
+
def new(
|
|
77
|
+
cls, max_version: VersionNumber, default_block: BlockStack, default_biome: Biome
|
|
78
|
+
) -> Self:
|
|
79
|
+
return cls.from_component_data(
|
|
80
|
+
_get_components(
|
|
81
|
+
0,
|
|
82
|
+
VersionRange(
|
|
83
|
+
"bedrock",
|
|
84
|
+
VersionNumber(1, 0, 0),
|
|
85
|
+
max_version,
|
|
86
|
+
),
|
|
87
|
+
default_block,
|
|
88
|
+
default_biome,
|
|
89
|
+
)
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class BedrockChunk29(Chunk):
|
|
94
|
+
components = frozenset(
|
|
95
|
+
_get_components(
|
|
96
|
+
29,
|
|
97
|
+
VersionRange(
|
|
98
|
+
"bedrock",
|
|
99
|
+
VersionNumber(1, 0, 0),
|
|
100
|
+
VersionNumber(1, 0, 0),
|
|
101
|
+
),
|
|
102
|
+
BlockStack(Block("bedrock", VersionNumber(1, 0, 0), "", "")),
|
|
103
|
+
Biome("bedrock", VersionNumber(1, 0, 0), "", ""),
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
@classmethod
|
|
108
|
+
def new(
|
|
109
|
+
cls, max_version: VersionNumber, default_block: BlockStack, default_biome: Biome
|
|
110
|
+
) -> Self:
|
|
111
|
+
return cls.from_component_data(
|
|
112
|
+
_get_components(
|
|
113
|
+
29,
|
|
114
|
+
VersionRange(
|
|
115
|
+
"bedrock",
|
|
116
|
+
VersionNumber(1, 0, 0),
|
|
117
|
+
max_version,
|
|
118
|
+
),
|
|
119
|
+
default_block,
|
|
120
|
+
default_biome,
|
|
121
|
+
)
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
# TODO: Improve this if python/mypy#11673 gets fixed.
|
|
126
|
+
BedrockChunk: TypeAlias = cast(UnionType, BedrockChunk0 | BedrockChunk29)
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from amulet.chunk.components.abc import ChunkComponent
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ChunkVersionComponent(ChunkComponent[int, int]):
|
|
6
|
+
storage_key = b"bcv"
|
|
7
|
+
|
|
8
|
+
@staticmethod
|
|
9
|
+
def fix_set_data(old_obj: int, new_obj: int) -> int:
|
|
10
|
+
if not isinstance(new_obj, int):
|
|
11
|
+
raise TypeError
|
|
12
|
+
return new_obj
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from amulet.chunk.components.abc import ChunkComponent
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class FinalisedStateComponent(ChunkComponent[int, int]):
|
|
5
|
+
storage_key = b"bfs"
|
|
6
|
+
|
|
7
|
+
@staticmethod
|
|
8
|
+
def fix_set_data(old_obj: int, new_obj: int) -> int:
|
|
9
|
+
if not isinstance(new_obj, int):
|
|
10
|
+
raise TypeError
|
|
11
|
+
if new_obj < 0:
|
|
12
|
+
raise ValueError
|
|
13
|
+
return new_obj
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from amulet.level.bedrock._raw import BedrockRawChunk
|
|
3
|
+
from amulet.chunk.components.abc import ChunkComponent
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class RawChunkComponent(ChunkComponent[BedrockRawChunk | None, BedrockRawChunk | None]):
|
|
7
|
+
storage_key = b"brc"
|
|
8
|
+
|
|
9
|
+
@staticmethod
|
|
10
|
+
def fix_set_data(
|
|
11
|
+
old_obj: BedrockRawChunk | None, new_obj: BedrockRawChunk | None
|
|
12
|
+
) -> BedrockRawChunk | None:
|
|
13
|
+
if new_obj is None or isinstance(new_obj, BedrockRawChunk):
|
|
14
|
+
return new_obj
|
|
15
|
+
raise TypeError
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
from amulet.level.java._level import JavaLevel
|
|
6
|
+
|
|
7
|
+
from . import (
|
|
8
|
+
_chunk_handle,
|
|
9
|
+
_dimension,
|
|
10
|
+
_level,
|
|
11
|
+
_raw,
|
|
12
|
+
anvil,
|
|
13
|
+
chunk,
|
|
14
|
+
chunk_components,
|
|
15
|
+
long_array,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
__all__ = ["JavaLevel", "anvil", "chunk", "chunk_components", "long_array"]
|
|
19
|
+
|
|
20
|
+
def __dir__() -> typing.Any: ...
|
|
21
|
+
def __getattr__(arg0: typing.Any) -> typing.Any: ...
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
from typing import TYPE_CHECKING
|
|
3
|
+
|
|
4
|
+
from amulet.level.abc import ChunkHandle
|
|
5
|
+
from ..abc._chunk_handle import ChunkT
|
|
6
|
+
from .chunk import JavaChunk
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from ._level import JavaLevel
|
|
10
|
+
from ._raw import JavaRawDimension
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class JavaChunkHandle(ChunkHandle["JavaLevel", "JavaRawDimension", JavaChunk]):
|
|
14
|
+
@staticmethod
|
|
15
|
+
def _validate_chunk(chunk: ChunkT) -> None:
|
|
16
|
+
if not isinstance(chunk, JavaChunk):
|
|
17
|
+
raise TypeError
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import amulet.level.abc._chunk_handle
|
|
6
|
+
from amulet.level.abc._chunk_handle import ChunkHandle
|
|
7
|
+
from amulet.level.java.chunk import JavaChunk
|
|
8
|
+
|
|
9
|
+
__all__ = ["ChunkHandle", "ChunkT", "JavaChunk", "JavaChunkHandle"]
|
|
10
|
+
|
|
11
|
+
class JavaChunkHandle(amulet.level.abc._chunk_handle.ChunkHandle):
|
|
12
|
+
@staticmethod
|
|
13
|
+
def _validate_chunk(chunk: ChunkT) -> None: ...
|
|
14
|
+
|
|
15
|
+
ChunkT: typing.TypeVar # value = ~ChunkT
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
2
|
+
|
|
3
|
+
from amulet.level.abc import Dimension
|
|
4
|
+
from ._chunk_handle import JavaChunkHandle
|
|
5
|
+
|
|
6
|
+
if TYPE_CHECKING:
|
|
7
|
+
from ._level import JavaLevel
|
|
8
|
+
from ._raw import JavaRawDimension
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class JavaDimension(Dimension["JavaLevel", "JavaRawDimension", JavaChunkHandle]):
|
|
12
|
+
def _create_chunk_handle(self, cx: int, cz: int) -> JavaChunkHandle:
|
|
13
|
+
return JavaChunkHandle(
|
|
14
|
+
self._l_ref,
|
|
15
|
+
self._chunk_history,
|
|
16
|
+
self._chunk_data_history,
|
|
17
|
+
self.dimension_id,
|
|
18
|
+
cx,
|
|
19
|
+
cz,
|
|
20
|
+
)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import amulet.level.abc._dimension
|
|
4
|
+
import amulet.level.java._chunk_handle
|
|
5
|
+
from amulet.level.abc._dimension import Dimension
|
|
6
|
+
from amulet.level.java._chunk_handle import JavaChunkHandle
|
|
7
|
+
|
|
8
|
+
__all__ = ["Dimension", "JavaChunkHandle", "JavaDimension"]
|
|
9
|
+
|
|
10
|
+
class JavaDimension(amulet.level.abc._dimension.Dimension):
|
|
11
|
+
def _create_chunk_handle(
|
|
12
|
+
self, cx: int, cz: int
|
|
13
|
+
) -> amulet.level.java._chunk_handle.JavaChunkHandle: ...
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Any, Type, Callable
|
|
4
|
+
import os
|
|
5
|
+
import logging
|
|
6
|
+
|
|
7
|
+
from PIL import Image
|
|
8
|
+
from amulet_nbt import (
|
|
9
|
+
read_nbt,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
from amulet.data_types import DimensionId
|
|
13
|
+
from amulet.level.abc import (
|
|
14
|
+
DiskLevel,
|
|
15
|
+
CreatableLevel,
|
|
16
|
+
LoadableLevel,
|
|
17
|
+
CompactableLevel,
|
|
18
|
+
LevelOpenData,
|
|
19
|
+
PlayerStorage,
|
|
20
|
+
)
|
|
21
|
+
from amulet.utils.call_spec import (
|
|
22
|
+
StringArg,
|
|
23
|
+
IntArg,
|
|
24
|
+
CallableArg,
|
|
25
|
+
BoolArg,
|
|
26
|
+
DirectoryPathArg,
|
|
27
|
+
PositionalArgs,
|
|
28
|
+
method_spec,
|
|
29
|
+
)
|
|
30
|
+
from amulet.utils.weakref import DetachableWeakRef
|
|
31
|
+
from amulet.level import register_level_class
|
|
32
|
+
from amulet.version import VersionNumber, PlatformType
|
|
33
|
+
|
|
34
|
+
from ._dimension import JavaDimension
|
|
35
|
+
from ._raw import JavaCreateArgsV1, JavaRawLevel, InternalDimensionId
|
|
36
|
+
from amulet.chunk import Chunk
|
|
37
|
+
|
|
38
|
+
log = logging.getLogger(__name__)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class JavaLevelOpenData(LevelOpenData):
|
|
42
|
+
back_reference: Callable[[], JavaLevel | None]
|
|
43
|
+
detach_back_reference: Callable[[], None]
|
|
44
|
+
dimensions: dict[DimensionId | InternalDimensionId, JavaDimension]
|
|
45
|
+
|
|
46
|
+
def __init__(self, level: JavaLevel) -> None:
|
|
47
|
+
super().__init__()
|
|
48
|
+
self.back_reference, self.detach_back_reference = DetachableWeakRef.new(level)
|
|
49
|
+
self.dimensions = {}
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class JavaLevel(
|
|
53
|
+
DiskLevel[JavaLevelOpenData, JavaDimension, JavaRawLevel],
|
|
54
|
+
CreatableLevel,
|
|
55
|
+
LoadableLevel,
|
|
56
|
+
CompactableLevel,
|
|
57
|
+
):
|
|
58
|
+
__slots__ = ("_raw_level",)
|
|
59
|
+
|
|
60
|
+
def __init__(self, _ikwiad: bool = False) -> None:
|
|
61
|
+
if not _ikwiad:
|
|
62
|
+
raise RuntimeError(
|
|
63
|
+
"BedrockRawLevel must be constructed using the create or load classmethod."
|
|
64
|
+
)
|
|
65
|
+
super().__init__()
|
|
66
|
+
|
|
67
|
+
def __init(self, raw: JavaRawLevel) -> None:
|
|
68
|
+
self._raw_level = raw
|
|
69
|
+
self._raw_level.opened.connect(self.open)
|
|
70
|
+
self._raw_level.closed.connect(self.close)
|
|
71
|
+
|
|
72
|
+
@classmethod
|
|
73
|
+
@method_spec(
|
|
74
|
+
CallableArg(
|
|
75
|
+
JavaCreateArgsV1,
|
|
76
|
+
BoolArg(True),
|
|
77
|
+
DirectoryPathArg(),
|
|
78
|
+
CallableArg(
|
|
79
|
+
VersionNumber,
|
|
80
|
+
PositionalArgs(IntArg(min_value=0), (IntArg(1), IntArg(20))),
|
|
81
|
+
),
|
|
82
|
+
StringArg("New World"),
|
|
83
|
+
)
|
|
84
|
+
)
|
|
85
|
+
def create(cls, args: JavaCreateArgsV1) -> JavaLevel:
|
|
86
|
+
raw = JavaRawLevel.create(args)
|
|
87
|
+
self = cls(True)
|
|
88
|
+
self.__init(raw)
|
|
89
|
+
return self
|
|
90
|
+
|
|
91
|
+
@staticmethod
|
|
92
|
+
def can_load(token: Any) -> bool:
|
|
93
|
+
if (
|
|
94
|
+
isinstance(token, str)
|
|
95
|
+
and os.path.isdir(token)
|
|
96
|
+
and os.path.isfile(os.path.join(token, "level.dat"))
|
|
97
|
+
):
|
|
98
|
+
try:
|
|
99
|
+
level_dat_root = read_nbt(os.path.join(token, "level.dat")).compound
|
|
100
|
+
except Exception:
|
|
101
|
+
pass
|
|
102
|
+
else:
|
|
103
|
+
return "Data" in level_dat_root and "FML" not in level_dat_root
|
|
104
|
+
return False
|
|
105
|
+
|
|
106
|
+
@classmethod
|
|
107
|
+
def load(cls, path: str) -> JavaLevel:
|
|
108
|
+
raw = JavaRawLevel.load(path)
|
|
109
|
+
self = cls(True)
|
|
110
|
+
self.__init(raw)
|
|
111
|
+
return self
|
|
112
|
+
|
|
113
|
+
def reload(self) -> None:
|
|
114
|
+
self.raw.reload()
|
|
115
|
+
|
|
116
|
+
def _open(self) -> None:
|
|
117
|
+
self.raw.open()
|
|
118
|
+
self._open_data = JavaLevelOpenData(self)
|
|
119
|
+
|
|
120
|
+
def _close(self) -> None:
|
|
121
|
+
self._o.detach_back_reference()
|
|
122
|
+
self._open_data = None
|
|
123
|
+
self.raw.close()
|
|
124
|
+
|
|
125
|
+
def save(self) -> None:
|
|
126
|
+
raise NotImplementedError
|
|
127
|
+
|
|
128
|
+
@property
|
|
129
|
+
def platform(self) -> PlatformType:
|
|
130
|
+
return self.raw.platform
|
|
131
|
+
|
|
132
|
+
@property
|
|
133
|
+
def max_game_version(self) -> VersionNumber:
|
|
134
|
+
return self.raw.data_version
|
|
135
|
+
|
|
136
|
+
@property
|
|
137
|
+
def level_name(self) -> str:
|
|
138
|
+
return self.raw.level_name
|
|
139
|
+
|
|
140
|
+
@property
|
|
141
|
+
def modified_time(self) -> float:
|
|
142
|
+
return self.raw.modified_time
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def path(self) -> str:
|
|
146
|
+
return self.raw.path
|
|
147
|
+
|
|
148
|
+
@property
|
|
149
|
+
def thumbnail(self) -> Image.Image:
|
|
150
|
+
try:
|
|
151
|
+
return Image.open(os.path.join(self.path, "icon.png"))
|
|
152
|
+
except Exception:
|
|
153
|
+
return super().thumbnail
|
|
154
|
+
|
|
155
|
+
def dimension_ids(self) -> frozenset[DimensionId]:
|
|
156
|
+
return self.raw.dimension_ids()
|
|
157
|
+
|
|
158
|
+
def get_dimension(
|
|
159
|
+
self, dimension_id: DimensionId | InternalDimensionId
|
|
160
|
+
) -> JavaDimension:
|
|
161
|
+
if dimension_id not in self._o.dimensions:
|
|
162
|
+
raw_dimension = self.raw.get_dimension(dimension_id)
|
|
163
|
+
self._o.dimensions[raw_dimension.dimension_id] = self._o.dimensions[
|
|
164
|
+
raw_dimension.relative_path
|
|
165
|
+
] = JavaDimension(self._o.back_reference, raw_dimension.dimension_id)
|
|
166
|
+
return self._o.dimensions[dimension_id]
|
|
167
|
+
|
|
168
|
+
@property
|
|
169
|
+
def player(self) -> PlayerStorage:
|
|
170
|
+
raise NotImplementedError
|
|
171
|
+
|
|
172
|
+
@property
|
|
173
|
+
def native_chunk_class(self) -> Type[Chunk]:
|
|
174
|
+
raise NotImplementedError
|
|
175
|
+
|
|
176
|
+
@property
|
|
177
|
+
def raw(self) -> JavaRawLevel:
|
|
178
|
+
return self._raw_level
|
|
179
|
+
|
|
180
|
+
def compact(self) -> None:
|
|
181
|
+
self.raw.compact()
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
register_level_class(JavaLevel)
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import logging as logging
|
|
4
|
+
import os as os
|
|
5
|
+
import typing
|
|
6
|
+
from builtins import str as DimensionId
|
|
7
|
+
from builtins import str as InternalDimensionId
|
|
8
|
+
from builtins import str as PlatformType
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
import amulet.level.abc._level._compactable_level
|
|
12
|
+
import amulet.level.abc._level._creatable_level
|
|
13
|
+
import amulet.level.abc._level._disk_level
|
|
14
|
+
import amulet.level.abc._level._level
|
|
15
|
+
import amulet.level.abc._level._loadable_level
|
|
16
|
+
from amulet.chunk import Chunk
|
|
17
|
+
from amulet.level._load import register_level_class
|
|
18
|
+
from amulet.level.abc._level._compactable_level import CompactableLevel
|
|
19
|
+
from amulet.level.abc._level._creatable_level import CreatableLevel
|
|
20
|
+
from amulet.level.abc._level._disk_level import DiskLevel
|
|
21
|
+
from amulet.level.abc._level._level import LevelOpenData
|
|
22
|
+
from amulet.level.abc._level._loadable_level import LoadableLevel
|
|
23
|
+
from amulet.level.abc._player_storage import PlayerStorage
|
|
24
|
+
from amulet.level.java._dimension import JavaDimension
|
|
25
|
+
from amulet.level.java._raw._level import JavaCreateArgsV1, JavaRawLevel
|
|
26
|
+
from amulet.utils.call_spec._call_spec import (
|
|
27
|
+
BoolArg,
|
|
28
|
+
CallableArg,
|
|
29
|
+
DirectoryPathArg,
|
|
30
|
+
IntArg,
|
|
31
|
+
PositionalArgs,
|
|
32
|
+
StringArg,
|
|
33
|
+
method_spec,
|
|
34
|
+
)
|
|
35
|
+
from amulet.utils.weakref import DetachableWeakRef
|
|
36
|
+
from amulet.version import VersionNumber
|
|
37
|
+
from amulet_nbt import read_nbt
|
|
38
|
+
from PIL import Image
|
|
39
|
+
|
|
40
|
+
__all__ = [
|
|
41
|
+
"Any",
|
|
42
|
+
"BoolArg",
|
|
43
|
+
"CallableArg",
|
|
44
|
+
"Chunk",
|
|
45
|
+
"CompactableLevel",
|
|
46
|
+
"CreatableLevel",
|
|
47
|
+
"DetachableWeakRef",
|
|
48
|
+
"DimensionId",
|
|
49
|
+
"DirectoryPathArg",
|
|
50
|
+
"DiskLevel",
|
|
51
|
+
"Image",
|
|
52
|
+
"IntArg",
|
|
53
|
+
"InternalDimensionId",
|
|
54
|
+
"JavaCreateArgsV1",
|
|
55
|
+
"JavaDimension",
|
|
56
|
+
"JavaLevel",
|
|
57
|
+
"JavaLevelOpenData",
|
|
58
|
+
"JavaRawLevel",
|
|
59
|
+
"LevelOpenData",
|
|
60
|
+
"LoadableLevel",
|
|
61
|
+
"PlatformType",
|
|
62
|
+
"PlayerStorage",
|
|
63
|
+
"PositionalArgs",
|
|
64
|
+
"StringArg",
|
|
65
|
+
"VersionNumber",
|
|
66
|
+
"log",
|
|
67
|
+
"logging",
|
|
68
|
+
"method_spec",
|
|
69
|
+
"os",
|
|
70
|
+
"read_nbt",
|
|
71
|
+
"register_level_class",
|
|
72
|
+
]
|
|
73
|
+
|
|
74
|
+
class JavaLevel(
|
|
75
|
+
amulet.level.abc._level._disk_level.DiskLevel,
|
|
76
|
+
amulet.level.abc._level._creatable_level.CreatableLevel,
|
|
77
|
+
amulet.level.abc._level._loadable_level.LoadableLevel,
|
|
78
|
+
amulet.level.abc._level._compactable_level.CompactableLevel,
|
|
79
|
+
):
|
|
80
|
+
__slots__: typing.ClassVar[tuple] = "_raw_level"
|
|
81
|
+
@staticmethod
|
|
82
|
+
def can_load(token: typing.Any) -> bool: ...
|
|
83
|
+
@classmethod
|
|
84
|
+
def create(cls, args: JavaCreateArgsV1) -> JavaLevel: ...
|
|
85
|
+
@classmethod
|
|
86
|
+
def load(cls, path: str) -> JavaLevel: ...
|
|
87
|
+
def _JavaLevel__init(self, raw: JavaRawLevel) -> None: ...
|
|
88
|
+
def __init__(self, _ikwiad: bool = False) -> None: ...
|
|
89
|
+
def _close(self) -> None: ...
|
|
90
|
+
def _open(self) -> None: ...
|
|
91
|
+
def compact(self) -> None: ...
|
|
92
|
+
def dimension_ids(self) -> frozenset[DimensionId]: ...
|
|
93
|
+
def get_dimension(
|
|
94
|
+
self, dimension_id: DimensionId | InternalDimensionId
|
|
95
|
+
) -> JavaDimension: ...
|
|
96
|
+
def reload(self) -> None: ...
|
|
97
|
+
def save(self) -> None: ...
|
|
98
|
+
@property
|
|
99
|
+
def level_name(self) -> str: ...
|
|
100
|
+
@property
|
|
101
|
+
def max_game_version(self) -> VersionNumber: ...
|
|
102
|
+
@property
|
|
103
|
+
def modified_time(self) -> float: ...
|
|
104
|
+
@property
|
|
105
|
+
def native_chunk_class(self) -> Type[Chunk]: ...
|
|
106
|
+
@property
|
|
107
|
+
def path(self) -> str: ...
|
|
108
|
+
@property
|
|
109
|
+
def platform(self) -> PlatformType: ...
|
|
110
|
+
@property
|
|
111
|
+
def player(self) -> PlayerStorage: ...
|
|
112
|
+
@property
|
|
113
|
+
def raw(self) -> JavaRawLevel: ...
|
|
114
|
+
@property
|
|
115
|
+
def thumbnail(self) -> Image.Image: ...
|
|
116
|
+
|
|
117
|
+
class JavaLevelOpenData(amulet.level.abc._level._level.LevelOpenData):
|
|
118
|
+
def __init__(self, level: JavaLevel) -> None: ...
|
|
119
|
+
|
|
120
|
+
log: logging.Logger # value = <Logger amulet.level.java._level (INFO)>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
from builtins import str as InternalDimensionId
|
|
5
|
+
|
|
6
|
+
from amulet.level.java._raw._dimension import JavaRawDimension
|
|
7
|
+
from amulet.level.java._raw._level import JavaCreateArgsV1, JavaRawLevel
|
|
8
|
+
|
|
9
|
+
from . import _chunk, _constant, _data_pack, _dimension, _level, _typing
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"InternalDimensionId",
|
|
13
|
+
"JavaCreateArgsV1",
|
|
14
|
+
"JavaRawDimension",
|
|
15
|
+
"JavaRawLevel",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
def __dir__() -> typing.Any: ...
|
|
19
|
+
def __getattr__(arg0: typing.Any) -> typing.Any: ...
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import typing
|
|
4
|
+
|
|
5
|
+
import amulet.level.java.chunk
|
|
6
|
+
import amulet_nbt
|
|
7
|
+
|
|
8
|
+
__all__ = ["decode_chunk", "encode_chunk"]
|
|
9
|
+
|
|
10
|
+
def decode_chunk(
|
|
11
|
+
arg0: typing.Any,
|
|
12
|
+
arg1: typing.Any,
|
|
13
|
+
arg2: dict[str, amulet_nbt.NamedTag],
|
|
14
|
+
arg3: int,
|
|
15
|
+
arg4: int,
|
|
16
|
+
) -> amulet.level.java.chunk.JavaChunk: ...
|
|
17
|
+
def encode_chunk(
|
|
18
|
+
arg0: typing.Any,
|
|
19
|
+
arg1: typing.Any,
|
|
20
|
+
arg2: amulet.level.java.chunk.JavaChunk,
|
|
21
|
+
arg3: int,
|
|
22
|
+
arg4: int,
|
|
23
|
+
) -> dict[str, amulet_nbt.NamedTag]: ...
|