amulet-core 2.0a5__cp311-cp311-win_amd64.whl → 2.0a7__cp311-cp311-win_amd64.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.

Files changed (232) hide show
  1. amulet/__init__.cp311-win_amd64.pyd +0 -0
  2. amulet/__init__.py.cpp +43 -0
  3. amulet/__init__.pyi +0 -2
  4. amulet/_init.py +0 -2
  5. amulet/_version.py +3 -3
  6. amulet/biome.py.cpp +122 -0
  7. amulet/biome.pyi +0 -2
  8. amulet/block.py.cpp +377 -0
  9. amulet/block.pyi +0 -2
  10. amulet/block_entity.py.cpp +115 -0
  11. amulet/block_entity.pyi +0 -2
  12. amulet/chunk.py.cpp +80 -0
  13. amulet/chunk.pyi +0 -2
  14. amulet/chunk_components/biome_3d_component.cpp +5 -0
  15. amulet/chunk_components/biome_3d_component.hpp +79 -0
  16. amulet/chunk_components/block_component.cpp +41 -0
  17. amulet/chunk_components/block_component.hpp +88 -0
  18. amulet/chunk_components/block_entity_component.cpp +5 -0
  19. amulet/chunk_components/block_entity_component.hpp +147 -0
  20. amulet/chunk_components/section_array_map.cpp +129 -0
  21. amulet/chunk_components/section_array_map.hpp +147 -0
  22. amulet/chunk_components.pyi +20 -18
  23. amulet/collections/eq.py.hpp +37 -0
  24. amulet/collections/hash.py.hpp +27 -0
  25. amulet/collections/holder.py.hpp +37 -0
  26. amulet/collections/iterator.py.hpp +80 -0
  27. amulet/collections/mapping.py.hpp +199 -0
  28. amulet/collections/mutable_mapping.py.hpp +226 -0
  29. amulet/collections/sequence.py.hpp +163 -0
  30. amulet/collections.pyi +8 -5
  31. amulet/entity.py +22 -20
  32. amulet/game/translate/_functions/_code_functions/_text.py +2 -2
  33. amulet/game/translate/_functions/abc.py +10 -3
  34. amulet/img/__init__.py +10 -0
  35. amulet/img/missing_no.png +0 -0
  36. amulet/img/missing_pack.png +0 -0
  37. amulet/img/missing_world.png +0 -0
  38. amulet/io/binary_reader.hpp +45 -0
  39. amulet/io/binary_writer.hpp +30 -0
  40. amulet/level/__init__.pyi +2 -6
  41. amulet/level/abc/_level/_creatable_level.py +1 -2
  42. amulet/level/abc/_level/_level.py +1 -5
  43. amulet/level/java/__init__.pyi +0 -5
  44. amulet/level/java/_raw/__init__.pyi +0 -4
  45. amulet/level/java/_raw/java_chunk_decode.cpp +531 -0
  46. amulet/level/java/_raw/java_chunk_decode.hpp +23 -0
  47. amulet/level/java/_raw/java_chunk_encode.cpp +25 -0
  48. amulet/level/java/_raw/java_chunk_encode.hpp +23 -0
  49. amulet/level/java/chunk_components/data_version_component.cpp +32 -0
  50. amulet/level/java/chunk_components/data_version_component.hpp +31 -0
  51. amulet/level/java/chunk_components/java_raw_chunk_component.cpp +56 -0
  52. amulet/level/java/chunk_components/java_raw_chunk_component.hpp +45 -0
  53. amulet/level/java/java_chunk.cpp +170 -0
  54. amulet/level/java/java_chunk.hpp +141 -0
  55. amulet/level/java/long_array.hpp +175 -0
  56. amulet/level/java/long_array.pyi +2 -1
  57. amulet/mesh/block/__init__.py +1 -0
  58. amulet/mesh/block/block_mesh.py +369 -0
  59. amulet/mesh/block/cube.py +149 -0
  60. amulet/mesh/block/missing_block.py +20 -0
  61. amulet/mesh/util.py +17 -0
  62. amulet/palette/biome_palette.hpp +85 -0
  63. amulet/palette/block_palette.cpp +32 -0
  64. amulet/palette/block_palette.hpp +93 -0
  65. amulet/player.py +4 -6
  66. amulet/pybind11/collections.hpp +118 -0
  67. amulet/pybind11/numpy.hpp +26 -0
  68. amulet/pybind11/py_module.hpp +34 -0
  69. amulet/pybind11/type_hints.hpp +51 -0
  70. amulet/pybind11/types.hpp +25 -0
  71. amulet/pybind11/typing.hpp +7 -0
  72. amulet/resource_pack/__init__.py +62 -0
  73. amulet/resource_pack/abc/__init__.py +2 -0
  74. amulet/resource_pack/abc/resource_pack.py +38 -0
  75. amulet/resource_pack/abc/resource_pack_manager.py +87 -0
  76. amulet/resource_pack/bedrock/__init__.py +2 -0
  77. amulet/resource_pack/bedrock/bedrock_vanilla_fix/pack_icon.png +0 -0
  78. amulet/resource_pack/bedrock/bedrock_vanilla_fix/textures/blocks/grass_carried.png +0 -0
  79. amulet/resource_pack/bedrock/bedrock_vanilla_fix/textures/blocks/grass_side_carried.png +0 -0
  80. amulet/resource_pack/bedrock/bedrock_vanilla_fix/textures/blocks/water.png +0 -0
  81. amulet/resource_pack/bedrock/blockshapes/__init__.py +31 -0
  82. amulet/resource_pack/bedrock/blockshapes/air.py +35 -0
  83. amulet/resource_pack/bedrock/blockshapes/base_blockshape.py +29 -0
  84. amulet/resource_pack/bedrock/blockshapes/bubble_column.py +29 -0
  85. amulet/resource_pack/bedrock/blockshapes/cake.py +46 -0
  86. amulet/resource_pack/bedrock/blockshapes/chest.py +54 -0
  87. amulet/resource_pack/bedrock/blockshapes/comparator.py +51 -0
  88. amulet/resource_pack/bedrock/blockshapes/cross_texture.py +186 -0
  89. amulet/resource_pack/bedrock/blockshapes/cross_texture0.py +17 -0
  90. amulet/resource_pack/bedrock/blockshapes/cross_texture_green.py +16 -0
  91. amulet/resource_pack/bedrock/blockshapes/cube.py +38 -0
  92. amulet/resource_pack/bedrock/blockshapes/default.py +14 -0
  93. amulet/resource_pack/bedrock/blockshapes/door.py +38 -0
  94. amulet/resource_pack/bedrock/blockshapes/door1.py +14 -0
  95. amulet/resource_pack/bedrock/blockshapes/door2.py +14 -0
  96. amulet/resource_pack/bedrock/blockshapes/door3.py +14 -0
  97. amulet/resource_pack/bedrock/blockshapes/door4.py +14 -0
  98. amulet/resource_pack/bedrock/blockshapes/door5.py +14 -0
  99. amulet/resource_pack/bedrock/blockshapes/door6.py +14 -0
  100. amulet/resource_pack/bedrock/blockshapes/double_plant.py +40 -0
  101. amulet/resource_pack/bedrock/blockshapes/enchanting_table.py +22 -0
  102. amulet/resource_pack/bedrock/blockshapes/farmland.py +22 -0
  103. amulet/resource_pack/bedrock/blockshapes/fence.py +22 -0
  104. amulet/resource_pack/bedrock/blockshapes/flat.py +55 -0
  105. amulet/resource_pack/bedrock/blockshapes/flat_wall.py +55 -0
  106. amulet/resource_pack/bedrock/blockshapes/furnace.py +44 -0
  107. amulet/resource_pack/bedrock/blockshapes/furnace_lit.py +14 -0
  108. amulet/resource_pack/bedrock/blockshapes/green_cube.py +39 -0
  109. amulet/resource_pack/bedrock/blockshapes/ladder.py +36 -0
  110. amulet/resource_pack/bedrock/blockshapes/lilypad.py +14 -0
  111. amulet/resource_pack/bedrock/blockshapes/partial_block.py +57 -0
  112. amulet/resource_pack/bedrock/blockshapes/piston.py +44 -0
  113. amulet/resource_pack/bedrock/blockshapes/piston_arm.py +72 -0
  114. amulet/resource_pack/bedrock/blockshapes/portal_frame.py +22 -0
  115. amulet/resource_pack/bedrock/blockshapes/pressure_plate.py +29 -0
  116. amulet/resource_pack/bedrock/blockshapes/pumpkin.py +36 -0
  117. amulet/resource_pack/bedrock/blockshapes/pumpkin_carved.py +14 -0
  118. amulet/resource_pack/bedrock/blockshapes/pumpkin_lit.py +14 -0
  119. amulet/resource_pack/bedrock/blockshapes/red_dust.py +14 -0
  120. amulet/resource_pack/bedrock/blockshapes/repeater.py +53 -0
  121. amulet/resource_pack/bedrock/blockshapes/slab.py +33 -0
  122. amulet/resource_pack/bedrock/blockshapes/slab_double.py +15 -0
  123. amulet/resource_pack/bedrock/blockshapes/tree.py +41 -0
  124. amulet/resource_pack/bedrock/blockshapes/turtle_egg.py +15 -0
  125. amulet/resource_pack/bedrock/blockshapes/vine.py +52 -0
  126. amulet/resource_pack/bedrock/blockshapes/wall.py +22 -0
  127. amulet/resource_pack/bedrock/blockshapes/water.py +38 -0
  128. amulet/resource_pack/bedrock/download_resources.py +147 -0
  129. amulet/resource_pack/bedrock/resource_pack.py +40 -0
  130. amulet/resource_pack/bedrock/resource_pack_manager.py +361 -0
  131. amulet/resource_pack/bedrock/sort_blockshapes.py +15 -0
  132. amulet/resource_pack/java/__init__.py +2 -0
  133. amulet/resource_pack/java/download_resources.py +212 -0
  134. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_black.png +0 -0
  135. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_blue.png +0 -0
  136. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_brown.png +0 -0
  137. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_cyan.png +0 -0
  138. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_gray.png +0 -0
  139. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_green.png +0 -0
  140. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_light_blue.png +0 -0
  141. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_light_gray.png +0 -0
  142. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_lime.png +0 -0
  143. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_magenta.png +0 -0
  144. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_orange.png +0 -0
  145. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_pink.png +0 -0
  146. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_purple.png +0 -0
  147. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_red.png +0 -0
  148. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_white.png +0 -0
  149. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_yellow.png +0 -0
  150. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/barrier.png +0 -0
  151. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/end_portal.png +0 -0
  152. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/grass.png +0 -0
  153. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/lava.png +0 -0
  154. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/structure_void.png +0 -0
  155. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/water.png +0 -0
  156. amulet/resource_pack/java/java_vanilla_fix/pack.png +0 -0
  157. amulet/resource_pack/java/resource_pack.py +44 -0
  158. amulet/resource_pack/java/resource_pack_manager.py +551 -0
  159. amulet/resource_pack/unknown_resource_pack.py +10 -0
  160. amulet/utils/__init__.pyi +0 -5
  161. amulet/utils/call_spec/_call_spec.py +2 -7
  162. amulet/utils/comment_json.py +188 -0
  163. amulet/utils/matrix.py +3 -3
  164. amulet/utils/numpy.hpp +36 -0
  165. amulet/utils/numpy_helpers.py +2 -2
  166. amulet/utils/world_utils.py +2 -2
  167. amulet/version.py.cpp +281 -0
  168. amulet/version.pyi +0 -8
  169. {amulet_core-2.0a5.dist-info → amulet_core-2.0a7.dist-info}/METADATA +3 -3
  170. amulet_core-2.0a7.dist-info/RECORD +295 -0
  171. amulet/chunk_/components/biome.py +0 -155
  172. amulet/chunk_/components/block_entity.py +0 -117
  173. amulet/chunk_/components/entity.py +0 -64
  174. amulet/chunk_/components/height_2d.py +0 -16
  175. amulet/level/bedrock/__init__.py +0 -2
  176. amulet/level/bedrock/_chunk_handle.py +0 -19
  177. amulet/level/bedrock/_dimension.py +0 -22
  178. amulet/level/bedrock/_level.py +0 -187
  179. amulet/level/bedrock/_raw/__init__.py +0 -5
  180. amulet/level/bedrock/_raw/_actor_counter.py +0 -53
  181. amulet/level/bedrock/_raw/_chunk.py +0 -54
  182. amulet/level/bedrock/_raw/_chunk_decode.py +0 -668
  183. amulet/level/bedrock/_raw/_chunk_encode.py +0 -602
  184. amulet/level/bedrock/_raw/_constant.py +0 -9
  185. amulet/level/bedrock/_raw/_dimension.py +0 -343
  186. amulet/level/bedrock/_raw/_level.py +0 -463
  187. amulet/level/bedrock/_raw/_level_dat.py +0 -90
  188. amulet/level/bedrock/_raw/_typing.py +0 -6
  189. amulet/level/bedrock/_raw/leveldb_chunk_versions.py +0 -83
  190. amulet/level/bedrock/chunk/__init__.py +0 -1
  191. amulet/level/bedrock/chunk/_chunk.py +0 -126
  192. amulet/level/bedrock/chunk/components/chunk_version.py +0 -12
  193. amulet/level/bedrock/chunk/components/finalised_state.py +0 -13
  194. amulet/level/bedrock/chunk/components/raw_chunk.py +0 -15
  195. amulet/level/construction/__init__.py +0 -0
  196. amulet/level/java/_chunk_handle.pyi +0 -15
  197. amulet/level/java/_dimension.pyi +0 -13
  198. amulet/level/java/_level.pyi +0 -120
  199. amulet/level/java/_raw/_chunk_decode.py +0 -561
  200. amulet/level/java/_raw/_chunk_encode.py +0 -463
  201. amulet/level/java/_raw/_constant.pyi +0 -20
  202. amulet/level/java/_raw/_data_pack/__init__.pyi +0 -8
  203. amulet/level/java/_raw/_data_pack/data_pack.pyi +0 -197
  204. amulet/level/java/_raw/_data_pack/data_pack_manager.pyi +0 -75
  205. amulet/level/java/_raw/_dimension.pyi +0 -72
  206. amulet/level/java/_raw/_level.pyi +0 -238
  207. amulet/level/java/_raw/_typing.pyi +0 -5
  208. amulet/level/java/anvil/__init__.pyi +0 -11
  209. amulet/level/java/anvil/_dimension.pyi +0 -109
  210. amulet/level/java/anvil/_region.pyi +0 -197
  211. amulet/level/java/anvil/_sector_manager.pyi +0 -142
  212. amulet/level/java_forge/__init__.py +0 -0
  213. amulet/level/mcstructure/__init__.py +0 -0
  214. amulet/level/nbt/__init__.py +0 -0
  215. amulet/level/schematic/__init__.py +0 -0
  216. amulet/level/sponge_schematic/__init__.py +0 -0
  217. amulet/utils/call_spec/__init__.pyi +0 -53
  218. amulet/utils/call_spec/_call_spec.pyi +0 -272
  219. amulet/utils/matrix.pyi +0 -177
  220. amulet/utils/shareable_lock.pyi +0 -190
  221. amulet/utils/signal/__init__.pyi +0 -25
  222. amulet/utils/signal/_signal.pyi +0 -84
  223. amulet/utils/task_manager.pyi +0 -168
  224. amulet/utils/typing.py +0 -4
  225. amulet/utils/typing.pyi +0 -6
  226. amulet/utils/weakref.pyi +0 -50
  227. amulet/utils/world_utils.pyi +0 -109
  228. amulet_core-2.0a5.dist-info/RECORD +0 -210
  229. /amulet/{level/bedrock/chunk/components → mesh}/__init__.py +0 -0
  230. {amulet_core-2.0a5.dist-info → amulet_core-2.0a7.dist-info}/WHEEL +0 -0
  231. {amulet_core-2.0a5.dist-info → amulet_core-2.0a7.dist-info}/entry_points.txt +0 -0
  232. {amulet_core-2.0a5.dist-info → amulet_core-2.0a7.dist-info}/top_level.txt +0 -0
@@ -1,16 +0,0 @@
1
- # import numpy
2
- # from numpy.typing import ArrayLike
3
- # from .abc import ChunkComponent
4
- #
5
- #
6
- # class Height2DComponent(ChunkComponent[numpy.ndarray, ArrayLike]):
7
- # storage_key = b"h2d"
8
- #
9
- # @staticmethod
10
- # def fix_set_data(old_obj: numpy.ndarray, new_obj: ArrayLike) -> numpy.ndarray:
11
- # new_obj = numpy.asarray(new_obj, numpy.int64)
12
- # if not isinstance(new_obj, numpy.ndarray):
13
- # raise TypeError
14
- # if new_obj.shape != old_obj.shape or new_obj.dtype != numpy.int64:
15
- # raise ValueError
16
- # return new_obj
@@ -1,2 +0,0 @@
1
- from ._level import BedrockLevel
2
- from ._raw import BedrockLevelDAT, BedrockCreateArgsV1
@@ -1,19 +0,0 @@
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 BedrockChunk
7
-
8
- if TYPE_CHECKING:
9
- from ._level import BedrockLevel
10
- from ._raw import BedrockRawDimension
11
-
12
-
13
- class BedrockChunkHandle(
14
- ChunkHandle["BedrockLevel", "BedrockRawDimension", BedrockChunk]
15
- ):
16
- @staticmethod
17
- def _validate_chunk(chunk: ChunkT) -> None:
18
- if not isinstance(chunk, BedrockChunk):
19
- raise TypeError
@@ -1,22 +0,0 @@
1
- from typing import TYPE_CHECKING
2
-
3
- from amulet.level.abc import Dimension
4
- from ._chunk_handle import BedrockChunkHandle
5
-
6
- if TYPE_CHECKING:
7
- from ._level import BedrockLevel
8
- from ._raw import BedrockRawDimension
9
-
10
-
11
- class BedrockDimension(
12
- Dimension["BedrockLevel", "BedrockRawDimension", BedrockChunkHandle]
13
- ):
14
- def _create_chunk_handle(self, cx: int, cz: int) -> BedrockChunkHandle:
15
- return BedrockChunkHandle(
16
- self._l_ref,
17
- self._chunk_history,
18
- self._chunk_data_history,
19
- self.dimension_id,
20
- cx,
21
- cz,
22
- )
@@ -1,187 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import Any, Union, Type, Callable
4
- import os
5
-
6
- from PIL import Image
7
-
8
- from amulet.version import VersionNumber, PlatformType
9
- from amulet.data_types import DimensionId
10
- from amulet.level import register_level_class
11
- from amulet.level.abc import (
12
- LevelOpenData,
13
- DiskLevel,
14
- CreatableLevel,
15
- LoadableLevel,
16
- CompactableLevel,
17
- PlayerStorage,
18
- )
19
- from amulet.utils.format_utils import check_all_exist
20
- from amulet.utils.call_spec import (
21
- StringArg,
22
- IntArg,
23
- CallableArg,
24
- BoolArg,
25
- DirectoryPathArg,
26
- PositionalArgs,
27
- method_spec,
28
- )
29
- from amulet.utils.weakref import DetachableWeakRef
30
-
31
- from ._raw import BedrockRawLevel, InternalDimension, BedrockCreateArgsV1
32
- from ._dimension import BedrockDimension
33
- from ...chunk import Chunk
34
-
35
-
36
- class BedrockLevelOpenData(LevelOpenData):
37
- back_reference: Callable[[], BedrockLevel | None]
38
- detach_back_reference: Callable[[], None]
39
- dimensions: dict[Union[DimensionId, InternalDimension], BedrockDimension]
40
-
41
- def __init__(self, level: BedrockLevel) -> None:
42
- super().__init__()
43
- self.back_reference, self.detach_back_reference = DetachableWeakRef.new(level)
44
- self.dimensions = {}
45
-
46
-
47
- class BedrockLevel(
48
- DiskLevel[BedrockLevelOpenData, BedrockDimension, BedrockRawLevel],
49
- CreatableLevel,
50
- LoadableLevel,
51
- CompactableLevel,
52
- ):
53
- def save(self) -> None:
54
- pass
55
-
56
- @property
57
- def native_chunk_class(self) -> Type[Chunk]:
58
- raise NotImplementedError
59
-
60
- _raw_level: BedrockRawLevel
61
-
62
- __slots__ = ("_raw_level",)
63
-
64
- def __init__(self, _ikwiad: bool = False) -> None:
65
- if not _ikwiad:
66
- raise RuntimeError(
67
- "BedrockLevel cannot be directly initialised. Use create or load classmethod."
68
- )
69
- super().__init__()
70
-
71
- def __init(self, raw: BedrockRawLevel) -> None:
72
- self._raw_level = raw
73
- self._raw_level.opened.connect(self.open)
74
- self._raw_level.closed.connect(self.close)
75
-
76
- @classmethod
77
- @method_spec(
78
- CallableArg(
79
- BedrockCreateArgsV1,
80
- BoolArg(True),
81
- DirectoryPathArg(),
82
- CallableArg(
83
- VersionNumber,
84
- PositionalArgs(IntArg(min_value=0), (IntArg(1), IntArg(20))),
85
- ),
86
- StringArg("New World"),
87
- )
88
- )
89
- def create(cls, args: BedrockCreateArgsV1) -> BedrockLevel:
90
- raw = BedrockRawLevel.create(args)
91
- self = cls(True)
92
- self.__init(raw)
93
- return self
94
-
95
- @staticmethod
96
- def can_load(token: Any) -> bool:
97
- return (
98
- isinstance(token, str)
99
- and os.path.isdir(token)
100
- and check_all_exist(token, "db", "level.dat", "levelname.txt")
101
- )
102
-
103
- @classmethod
104
- def load(cls, path: str) -> BedrockLevel:
105
- """Create a new instance from the level at the given directory."""
106
- raw = BedrockRawLevel.load(path)
107
- self = cls(True)
108
- self.__init(raw)
109
- return self
110
-
111
- def reload(self) -> None:
112
- """
113
- Reload the level metadata inplace.
114
- The level must be closed when this is called.
115
- """
116
- self.raw.reload()
117
-
118
- def _open(self) -> None:
119
- self.raw.open()
120
- self._open_data = BedrockLevelOpenData(self)
121
-
122
- def _close(self) -> None:
123
- self._o.detach_back_reference()
124
- self._open_data = None
125
- self.raw.close()
126
-
127
- @property
128
- def path(self) -> str:
129
- return self.raw.path
130
-
131
- @property
132
- def level_name(self) -> str:
133
- try:
134
- level_name_tag = self.raw.level_dat.compound.get_string("LevelName")
135
- assert level_name_tag is not None
136
- return level_name_tag.py_str
137
- except Exception:
138
- return "Unknown level name"
139
-
140
- @property
141
- def modified_time(self) -> float:
142
- return self.raw.modified_time
143
-
144
- @property
145
- def thumbnail(self) -> Image.Image:
146
- try:
147
- return Image.open(os.path.join(self.path, "world_icon.jpeg"))
148
- except Exception:
149
- return super().thumbnail
150
-
151
- @property
152
- def platform(self) -> PlatformType:
153
- return "bedrock"
154
-
155
- @property
156
- def max_game_version(self) -> VersionNumber:
157
- return self.raw.version
158
-
159
- def dimension_ids(self) -> frozenset[DimensionId]:
160
- return self.raw.dimension_ids()
161
-
162
- def get_dimension(
163
- self, dimension_id: Union[DimensionId, InternalDimension]
164
- ) -> BedrockDimension:
165
- dimensions = self._o.dimensions
166
- if dimension_id not in dimensions:
167
- raw_dimension = self.raw.get_dimension(dimension_id)
168
- public_dimension_id = raw_dimension.dimension_id
169
- internal_dimension_id = raw_dimension.internal_dimension_id
170
- dimensions[internal_dimension_id] = dimensions[public_dimension_id] = (
171
- BedrockDimension(self._o.back_reference, public_dimension_id)
172
- )
173
- return dimensions[dimension_id]
174
-
175
- @property
176
- def raw(self) -> BedrockRawLevel:
177
- return self._raw_level
178
-
179
- @property
180
- def player(self) -> PlayerStorage:
181
- raise NotImplementedError
182
-
183
- def compact(self) -> None:
184
- self.raw.level_db.compact()
185
-
186
-
187
- register_level_class(BedrockLevel)
@@ -1,5 +0,0 @@
1
- from ._chunk import BedrockRawChunk
2
- from ._dimension import BedrockRawDimension
3
- from ._level import BedrockRawLevel, BedrockCreateArgsV1
4
- from ._level_dat import BedrockLevelDAT
5
- from ._typing import InternalDimension
@@ -1,53 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import TYPE_CHECKING
4
- from threading import RLock
5
-
6
- from amulet_nbt import LongTag
7
-
8
- if TYPE_CHECKING:
9
- from ._level import BedrockRawLevel
10
-
11
-
12
- class ActorCounter:
13
- _lock: RLock
14
- _session: int
15
- _count: int
16
-
17
- def __init__(self) -> None:
18
- self._lock = RLock()
19
- self._session = -1
20
- self._count = 0
21
-
22
- def init(self, raw: BedrockRawLevel) -> None:
23
- """Initialise the session from the level.dat file.
24
- This must be run after the level has been opened so that the level.dat can be written.
25
- """
26
- level_dat = raw.level_dat
27
- session = level_dat.compound.get_long(
28
- "worldStartCount", LongTag(0xFFFFFFFF)
29
- ).py_int
30
- # for some reason this is a signed int stored in a signed long. Manually apply the sign correctly
31
- session -= (session & 0x80000000) << 1
32
-
33
- # create the counter object and set the session
34
- self._session = session
35
-
36
- # increment and write back so there are no conflicts
37
- session -= 1
38
- if session < 0:
39
- session += 0x100000000
40
- level_dat.compound["worldStartCount"] = LongTag(session)
41
- raw.level_dat = level_dat
42
-
43
- def next(self) -> tuple[int, int]:
44
- """
45
- Get the next unique session id and actor counter.
46
- Session id is usually negative
47
-
48
- :return: Tuple[session id, actor id]
49
- """
50
- with self._lock:
51
- count = self._count
52
- self._count += 1
53
- return self._session, count
@@ -1,54 +0,0 @@
1
- from typing import Iterable
2
- from collections.abc import Mapping
3
- from amulet_nbt import NamedTag
4
-
5
-
6
- class BedrockRawChunk:
7
- _keys: frozenset[bytes]
8
- _chunk_data: dict[bytes, bytes]
9
- _entity_actor: list[NamedTag]
10
- _unknown_actor: list[NamedTag]
11
-
12
- def __init__(
13
- self,
14
- *,
15
- chunk_keys: Iterable[bytes] = (),
16
- chunk_data: Mapping[bytes, bytes] | Iterable[tuple[bytes, bytes]] = (),
17
- entity_actor: Iterable[NamedTag] = (),
18
- unknown_actor: Iterable[NamedTag] = (),
19
- ) -> None:
20
- self._keys = frozenset(chunk_keys)
21
- self._chunk_data = dict(chunk_data)
22
- self._entity_actor = list(entity_actor)
23
- self._unknown_actor = list(unknown_actor)
24
-
25
- @property
26
- def keys(self) -> frozenset[bytes]:
27
- """All keys that make up this chunk data."""
28
- return self._keys
29
-
30
- @property
31
- def chunk_data(self) -> dict[bytes, bytes]:
32
- """
33
- A dictionary mapping all chunk data keys that have the XXXXZZZZ[DDDD] prefix (without the prefix) to the data
34
- stored in that key.
35
- """
36
- return self._chunk_data
37
-
38
- @property
39
- def entity_actor(self) -> list[NamedTag]:
40
- """
41
- A list of entity actor data.
42
- UniqueID is stripped out. internalComponents is stripped out if there is no other data.
43
- """
44
- return self._entity_actor
45
-
46
- @property
47
- def unknown_actor(self) -> list[NamedTag]:
48
- """
49
- A list of actor data that does not fit in the known actor types.
50
- UniqueID is stripped out.
51
- internalComponents.{StorageKeyComponent}.StorageKey is replaced with a blank string.
52
- All keys matching this pattern will get replaced with the real storage key when saving (at least one must exist)
53
- """
54
- return self._unknown_actor