amulet-core 2.0a8__cp311-cp311-win_amd64.whl → 2.0.1.0.1297307203.19.43.34808.0a0__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 (271) hide show
  1. amulet/core/__init__.py +36 -0
  2. amulet/core/__pyinstaller/hook-amulet.core.py +4 -0
  3. amulet/core/_amulet_core.cp311-win_amd64.pyd +0 -0
  4. amulet/core/_amulet_core.pyi +7 -0
  5. amulet/{_version.py → core/_version.py} +3 -3
  6. amulet/core/amulet_core.dll +0 -0
  7. amulet/core/amulet_core.lib +0 -0
  8. amulet/core/amulet_coreConfig.cmake +18 -0
  9. amulet/{biome.pyi → core/biome/__init__.pyi} +3 -3
  10. amulet/core/biome/biome.hpp +53 -0
  11. amulet/{block.pyi → core/block/__init__.pyi} +25 -26
  12. amulet/core/block/block.hpp +156 -0
  13. amulet/{block_entity.pyi → core/block_entity/__init__.pyi} +7 -7
  14. amulet/core/block_entity/block_entity.hpp +84 -0
  15. amulet/{errors.py → core/chunk/__init__.pyi} +37 -33
  16. amulet/core/chunk/chunk.hpp +126 -0
  17. amulet/core/chunk/component/__init__.pyi +18 -0
  18. amulet/core/chunk/component/biome_3d_component.hpp +96 -0
  19. amulet/core/chunk/component/block_component.hpp +101 -0
  20. amulet/core/chunk/component/block_component.pyi +28 -0
  21. amulet/core/chunk/component/block_entity_component.hpp +119 -0
  22. amulet/core/chunk/component/section_array_map.hpp +129 -0
  23. amulet/{chunk_components.pyi → core/chunk/component/section_array_map.pyi} +4 -24
  24. amulet/core/dll.hpp +21 -0
  25. amulet/core/entity/__init__.pyi +105 -0
  26. amulet/core/entity/entity.hpp +100 -0
  27. amulet/{palette → core/palette}/__init__.pyi +2 -2
  28. amulet/core/palette/biome_palette.hpp +65 -0
  29. amulet/{palette → core/palette}/biome_palette.pyi +8 -8
  30. amulet/core/palette/block_palette.hpp +71 -0
  31. amulet/{palette → core/palette}/block_palette.pyi +12 -10
  32. amulet/core/selection/__init__.pyi +8 -0
  33. amulet/core/selection/box.hpp +86 -0
  34. amulet/core/selection/box.pyi +215 -0
  35. amulet/core/selection/group.hpp +80 -0
  36. amulet/core/selection/group.pyi +213 -0
  37. amulet/{version.pyi → core/version/__init__.pyi} +58 -10
  38. amulet/core/version/version.hpp +204 -0
  39. {amulet_core-2.0a8.dist-info → amulet_core-2.0.1.0.1297307203.19.43.34808.0a0.dist-info}/METADATA +25 -20
  40. amulet_core-2.0.1.0.1297307203.19.43.34808.0a0.dist-info/RECORD +45 -0
  41. {amulet_core-2.0a8.dist-info → amulet_core-2.0.1.0.1297307203.19.43.34808.0a0.dist-info}/WHEEL +1 -1
  42. amulet_core-2.0.1.0.1297307203.19.43.34808.0a0.dist-info/entry_points.txt +2 -0
  43. amulet/__init__.cp311-win_amd64.pyd +0 -0
  44. amulet/__init__.py.cpp +0 -45
  45. amulet/__init__.pyi +0 -30
  46. amulet/__pyinstaller/hook-amulet.py +0 -4
  47. amulet/_init.py +0 -26
  48. amulet/biome.cpp +0 -36
  49. amulet/biome.hpp +0 -43
  50. amulet/biome.py.cpp +0 -122
  51. amulet/block.cpp +0 -435
  52. amulet/block.hpp +0 -119
  53. amulet/block.py.cpp +0 -377
  54. amulet/block_entity.cpp +0 -12
  55. amulet/block_entity.hpp +0 -56
  56. amulet/block_entity.py.cpp +0 -115
  57. amulet/chunk.cpp +0 -16
  58. amulet/chunk.hpp +0 -100
  59. amulet/chunk.py.cpp +0 -80
  60. amulet/chunk.pyi +0 -28
  61. amulet/chunk_components/biome_3d_component.cpp +0 -5
  62. amulet/chunk_components/biome_3d_component.hpp +0 -79
  63. amulet/chunk_components/block_component.cpp +0 -41
  64. amulet/chunk_components/block_component.hpp +0 -88
  65. amulet/chunk_components/block_entity_component.cpp +0 -5
  66. amulet/chunk_components/block_entity_component.hpp +0 -147
  67. amulet/chunk_components/section_array_map.cpp +0 -129
  68. amulet/chunk_components/section_array_map.hpp +0 -147
  69. amulet/collections/eq.py.hpp +0 -37
  70. amulet/collections/hash.py.hpp +0 -27
  71. amulet/collections/holder.py.hpp +0 -37
  72. amulet/collections/iterator.py.hpp +0 -80
  73. amulet/collections/mapping.py.hpp +0 -199
  74. amulet/collections/mutable_mapping.py.hpp +0 -226
  75. amulet/collections/sequence.py.hpp +0 -163
  76. amulet/collections.pyi +0 -40
  77. amulet/data_types.py +0 -29
  78. amulet/entity.py +0 -182
  79. amulet/game/__init__.py +0 -7
  80. amulet/game/_game.py +0 -152
  81. amulet/game/_universal/__init__.py +0 -1
  82. amulet/game/_universal/_biome.py +0 -17
  83. amulet/game/_universal/_block.py +0 -47
  84. amulet/game/_universal/_version.py +0 -68
  85. amulet/game/abc/__init__.py +0 -22
  86. amulet/game/abc/_block_specification.py +0 -150
  87. amulet/game/abc/biome.py +0 -213
  88. amulet/game/abc/block.py +0 -331
  89. amulet/game/abc/game_version_container.py +0 -25
  90. amulet/game/abc/json_interface.py +0 -27
  91. amulet/game/abc/version.py +0 -44
  92. amulet/game/bedrock/__init__.py +0 -1
  93. amulet/game/bedrock/_biome.py +0 -35
  94. amulet/game/bedrock/_block.py +0 -42
  95. amulet/game/bedrock/_version.py +0 -165
  96. amulet/game/java/__init__.py +0 -2
  97. amulet/game/java/_biome.py +0 -35
  98. amulet/game/java/_block.py +0 -60
  99. amulet/game/java/_version.py +0 -176
  100. amulet/game/translate/__init__.py +0 -12
  101. amulet/game/translate/_functions/__init__.py +0 -15
  102. amulet/game/translate/_functions/_code_functions/__init__.py +0 -0
  103. amulet/game/translate/_functions/_code_functions/_text.py +0 -553
  104. amulet/game/translate/_functions/_code_functions/banner_pattern.py +0 -67
  105. amulet/game/translate/_functions/_code_functions/bedrock_chest_connection.py +0 -152
  106. amulet/game/translate/_functions/_code_functions/bedrock_moving_block_pos.py +0 -88
  107. amulet/game/translate/_functions/_code_functions/bedrock_sign.py +0 -152
  108. amulet/game/translate/_functions/_code_functions/bedrock_skull_rotation.py +0 -16
  109. amulet/game/translate/_functions/_code_functions/custom_name.py +0 -146
  110. amulet/game/translate/_functions/_frozen.py +0 -66
  111. amulet/game/translate/_functions/_state.py +0 -54
  112. amulet/game/translate/_functions/_typing.py +0 -98
  113. amulet/game/translate/_functions/abc.py +0 -123
  114. amulet/game/translate/_functions/carry_nbt.py +0 -160
  115. amulet/game/translate/_functions/carry_properties.py +0 -80
  116. amulet/game/translate/_functions/code.py +0 -143
  117. amulet/game/translate/_functions/map_block_name.py +0 -66
  118. amulet/game/translate/_functions/map_nbt.py +0 -111
  119. amulet/game/translate/_functions/map_properties.py +0 -93
  120. amulet/game/translate/_functions/multiblock.py +0 -112
  121. amulet/game/translate/_functions/new_block.py +0 -42
  122. amulet/game/translate/_functions/new_entity.py +0 -43
  123. amulet/game/translate/_functions/new_nbt.py +0 -206
  124. amulet/game/translate/_functions/new_properties.py +0 -64
  125. amulet/game/translate/_functions/sequence.py +0 -51
  126. amulet/game/translate/_functions/walk_input_nbt.py +0 -331
  127. amulet/game/translate/_translator.py +0 -433
  128. amulet/img/__init__.py +0 -10
  129. amulet/img/missing_no.png +0 -0
  130. amulet/img/missing_pack.png +0 -0
  131. amulet/img/missing_world.png +0 -0
  132. amulet/io/binary_reader.hpp +0 -45
  133. amulet/io/binary_writer.hpp +0 -30
  134. amulet/item.py +0 -75
  135. amulet/level/__init__.pyi +0 -23
  136. amulet/level/_load.py +0 -100
  137. amulet/level/abc/__init__.py +0 -12
  138. amulet/level/abc/_chunk_handle.py +0 -358
  139. amulet/level/abc/_dimension.py +0 -86
  140. amulet/level/abc/_history/__init__.py +0 -1
  141. amulet/level/abc/_history/_cache.py +0 -224
  142. amulet/level/abc/_history/_history_manager.py +0 -291
  143. amulet/level/abc/_level/__init__.py +0 -5
  144. amulet/level/abc/_level/_compactable_level.py +0 -10
  145. amulet/level/abc/_level/_creatable_level.py +0 -28
  146. amulet/level/abc/_level/_disk_level.py +0 -17
  147. amulet/level/abc/_level/_level.py +0 -449
  148. amulet/level/abc/_level/_loadable_level.py +0 -42
  149. amulet/level/abc/_player_storage.py +0 -7
  150. amulet/level/abc/_raw_level.py +0 -187
  151. amulet/level/abc/_registry.py +0 -40
  152. amulet/level/java/__init__.pyi +0 -16
  153. amulet/level/java/_chunk_handle.py +0 -17
  154. amulet/level/java/_dimension.py +0 -20
  155. amulet/level/java/_level.py +0 -184
  156. amulet/level/java/_raw/__init__.pyi +0 -15
  157. amulet/level/java/_raw/_chunk.pyi +0 -23
  158. amulet/level/java/_raw/_constant.py +0 -9
  159. amulet/level/java/_raw/_data_pack/__init__.py +0 -2
  160. amulet/level/java/_raw/_data_pack/data_pack.py +0 -241
  161. amulet/level/java/_raw/_data_pack/data_pack_manager.py +0 -77
  162. amulet/level/java/_raw/_dimension.py +0 -86
  163. amulet/level/java/_raw/_level.py +0 -507
  164. amulet/level/java/_raw/_typing.py +0 -3
  165. amulet/level/java/_raw/java_chunk_decode.cpp +0 -531
  166. amulet/level/java/_raw/java_chunk_decode.hpp +0 -23
  167. amulet/level/java/_raw/java_chunk_encode.cpp +0 -25
  168. amulet/level/java/_raw/java_chunk_encode.hpp +0 -23
  169. amulet/level/java/anvil/__init__.py +0 -2
  170. amulet/level/java/anvil/_dimension.py +0 -170
  171. amulet/level/java/anvil/_region.py +0 -421
  172. amulet/level/java/anvil/_sector_manager.py +0 -223
  173. amulet/level/java/chunk.pyi +0 -81
  174. amulet/level/java/chunk_/_chunk.py +0 -260
  175. amulet/level/java/chunk_/components/inhabited_time.py +0 -12
  176. amulet/level/java/chunk_/components/last_update.py +0 -12
  177. amulet/level/java/chunk_/components/legacy_version.py +0 -12
  178. amulet/level/java/chunk_/components/light_populated.py +0 -12
  179. amulet/level/java/chunk_/components/named_height_2d.py +0 -37
  180. amulet/level/java/chunk_/components/status.py +0 -11
  181. amulet/level/java/chunk_/components/terrain_populated.py +0 -12
  182. amulet/level/java/chunk_components/data_version_component.cpp +0 -32
  183. amulet/level/java/chunk_components/data_version_component.hpp +0 -31
  184. amulet/level/java/chunk_components/java_raw_chunk_component.cpp +0 -56
  185. amulet/level/java/chunk_components/java_raw_chunk_component.hpp +0 -45
  186. amulet/level/java/chunk_components.pyi +0 -22
  187. amulet/level/java/java_chunk.cpp +0 -170
  188. amulet/level/java/java_chunk.hpp +0 -141
  189. amulet/level/java/long_array.hpp +0 -175
  190. amulet/level/java/long_array.pyi +0 -39
  191. amulet/level/temporary_level/__init__.py +0 -1
  192. amulet/level/temporary_level/_level.py +0 -16
  193. amulet/mesh/__init__.py +0 -0
  194. amulet/mesh/block/__init__.pyi +0 -301
  195. amulet/mesh/block/_cube.py +0 -198
  196. amulet/mesh/block/_missing_block.py +0 -20
  197. amulet/mesh/block/block_mesh.cpp +0 -107
  198. amulet/mesh/block/block_mesh.hpp +0 -207
  199. amulet/mesh/util.py +0 -17
  200. amulet/palette/biome_palette.hpp +0 -85
  201. amulet/palette/block_palette.cpp +0 -32
  202. amulet/palette/block_palette.hpp +0 -93
  203. amulet/player.py +0 -62
  204. amulet/pybind11/collections.hpp +0 -118
  205. amulet/pybind11/numpy.hpp +0 -26
  206. amulet/pybind11/py_module.hpp +0 -34
  207. amulet/pybind11/type_hints.hpp +0 -51
  208. amulet/pybind11/types.hpp +0 -25
  209. amulet/pybind11/typing.hpp +0 -7
  210. amulet/resource_pack/__init__.py +0 -63
  211. amulet/resource_pack/abc/__init__.py +0 -2
  212. amulet/resource_pack/abc/resource_pack.py +0 -38
  213. amulet/resource_pack/abc/resource_pack_manager.py +0 -85
  214. amulet/resource_pack/java/__init__.py +0 -2
  215. amulet/resource_pack/java/download_resources.py +0 -212
  216. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_black.png +0 -0
  217. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_blue.png +0 -0
  218. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_brown.png +0 -0
  219. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_cyan.png +0 -0
  220. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_gray.png +0 -0
  221. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_green.png +0 -0
  222. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_light_blue.png +0 -0
  223. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_light_gray.png +0 -0
  224. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_lime.png +0 -0
  225. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_magenta.png +0 -0
  226. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_orange.png +0 -0
  227. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_pink.png +0 -0
  228. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_purple.png +0 -0
  229. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_red.png +0 -0
  230. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_white.png +0 -0
  231. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_yellow.png +0 -0
  232. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/barrier.png +0 -0
  233. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/end_portal.png +0 -0
  234. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/grass.png +0 -0
  235. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/lava.png +0 -0
  236. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/structure_void.png +0 -0
  237. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/water.png +0 -0
  238. amulet/resource_pack/java/java_vanilla_fix/pack.png +0 -0
  239. amulet/resource_pack/java/resource_pack.py +0 -44
  240. amulet/resource_pack/java/resource_pack_manager.py +0 -563
  241. amulet/resource_pack/unknown_resource_pack.py +0 -10
  242. amulet/selection/__init__.py +0 -2
  243. amulet/selection/abstract_selection.py +0 -342
  244. amulet/selection/box.py +0 -852
  245. amulet/selection/group.py +0 -481
  246. amulet/utils/__init__.pyi +0 -23
  247. amulet/utils/call_spec/__init__.py +0 -24
  248. amulet/utils/call_spec/_call_spec.py +0 -257
  249. amulet/utils/cast.py +0 -10
  250. amulet/utils/comment_json.py +0 -188
  251. amulet/utils/format_utils.py +0 -41
  252. amulet/utils/generator.py +0 -18
  253. amulet/utils/matrix.py +0 -243
  254. amulet/utils/numpy.hpp +0 -36
  255. amulet/utils/numpy.pyi +0 -11
  256. amulet/utils/numpy_helpers.py +0 -19
  257. amulet/utils/shareable_lock.py +0 -335
  258. amulet/utils/signal/__init__.py +0 -10
  259. amulet/utils/signal/_signal.py +0 -228
  260. amulet/utils/task_manager.py +0 -235
  261. amulet/utils/typed_property.py +0 -111
  262. amulet/utils/weakref.py +0 -70
  263. amulet/utils/world_utils.py +0 -102
  264. amulet/version.cpp +0 -136
  265. amulet/version.hpp +0 -142
  266. amulet/version.py.cpp +0 -281
  267. amulet_core-2.0a8.dist-info/RECORD +0 -241
  268. amulet_core-2.0a8.dist-info/entry_points.txt +0 -2
  269. /amulet/{__pyinstaller → core/__pyinstaller}/__init__.py +0 -0
  270. /amulet/{py.typed → core/py.typed} +0 -0
  271. {amulet_core-2.0a8.dist-info → amulet_core-2.0.1.0.1297307203.19.43.34808.0a0.dist-info}/top_level.txt +0 -0
@@ -1,51 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import Self, Any
4
- from collections.abc import Sequence
5
-
6
- from .abc import (
7
- AbstractBaseTranslationFunction,
8
- translation_function_from_json,
9
- Data,
10
- )
11
- from amulet.game.abc import JSONCompatible, JSONList
12
- from ._state import SrcData, StateData, DstData
13
-
14
-
15
- class TranslationFunctionSequence(AbstractBaseTranslationFunction):
16
- # Class variables
17
- Name = "sequence"
18
- _instances = {}
19
-
20
- # Instance variables
21
- _functions: tuple[AbstractBaseTranslationFunction, ...]
22
-
23
- def __init__(self, functions: Sequence[AbstractBaseTranslationFunction]) -> None:
24
- super().__init__()
25
- self._functions = tuple(functions)
26
- if not all(
27
- isinstance(inst, AbstractBaseTranslationFunction)
28
- for inst in self._functions
29
- ):
30
- raise TypeError
31
-
32
- def __reduce__(self) -> Any:
33
- return TranslationFunctionSequence, (self._functions,)
34
-
35
- def _data(self) -> Data:
36
- return self._functions
37
-
38
- @classmethod
39
- def from_json(cls, data: JSONCompatible) -> Self:
40
- assert isinstance(data, Sequence)
41
- return cls([translation_function_from_json(func) for func in data])
42
-
43
- def to_json(self) -> JSONList:
44
- return [func.to_json() for func in self._functions]
45
-
46
- def __bool__(self) -> bool:
47
- return bool(self._functions)
48
-
49
- def run(self, src: SrcData, state: StateData, dst: DstData) -> None:
50
- for func in self._functions:
51
- func.run(src, state, dst)
@@ -1,331 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import Self, TypeVar, cast, Any
4
- from collections.abc import Mapping, Sequence, Iterable
5
- import logging
6
-
7
- from amulet_nbt import (
8
- AbstractBaseArrayTag,
9
- ByteTag,
10
- ShortTag,
11
- IntTag,
12
- LongTag,
13
- FloatTag,
14
- DoubleTag,
15
- ByteArrayTag,
16
- StringTag,
17
- ListTag,
18
- CompoundTag,
19
- IntArrayTag,
20
- LongArrayTag,
21
- )
22
-
23
- from .abc import (
24
- AbstractBaseTranslationFunction,
25
- Data,
26
- translation_function_from_json,
27
- follow_nbt_path,
28
- )
29
- from amulet.game.abc import JSONCompatible, JSONDict
30
- from ._typing import NBTClsToStr, StrToNBTCls, NBTPath, NBTPathElement, NBTTagClsT
31
- from ._frozen import FrozenMapping
32
- from ._state import SrcData, StateData, DstData
33
-
34
- log = logging.getLogger(__name__)
35
-
36
-
37
- NBTLookUp = [
38
- None,
39
- ByteTag,
40
- ShortTag,
41
- IntTag,
42
- LongTag,
43
- FloatTag,
44
- DoubleTag,
45
- ByteArrayTag,
46
- StringTag,
47
- ListTag,
48
- CompoundTag,
49
- IntArrayTag,
50
- LongArrayTag,
51
- ]
52
-
53
-
54
- KeyT = TypeVar("KeyT", str, int)
55
-
56
-
57
- class WalkInputNBTOptions(AbstractBaseTranslationFunction):
58
- # Class variables
59
- Name = "_walk_input_nbt"
60
- _instances = {}
61
-
62
- # Instance variables
63
- _nbt_cls: type[CompoundTag] | type[ListTag]
64
- _self_default: AbstractBaseTranslationFunction | None
65
- _functions: AbstractBaseTranslationFunction | None
66
- _keys: FrozenMapping[str, WalkInputNBTOptions] | None
67
- _index: FrozenMapping[int, WalkInputNBTOptions] | None
68
- _nested_default: AbstractBaseTranslationFunction | None
69
-
70
- def __init__(
71
- self,
72
- nbt_cls: type[CompoundTag] | type[ListTag],
73
- self_default: AbstractBaseTranslationFunction | None = None,
74
- functions: AbstractBaseTranslationFunction | None = None,
75
- keys: Mapping[str, WalkInputNBTOptions] | None = None,
76
- index: Mapping[int, WalkInputNBTOptions] | None = None,
77
- nested_default: AbstractBaseTranslationFunction | None = None,
78
- ) -> None:
79
- super().__init__()
80
- self._nbt_cls = nbt_cls
81
- self._self_default = self_default
82
- self._functions = functions
83
- self._keys = (
84
- None if keys is None else FrozenMapping[str, WalkInputNBTOptions](keys)
85
- )
86
- self._index = (
87
- None if index is None else FrozenMapping[int, WalkInputNBTOptions](index)
88
- )
89
- self._nested_default = nested_default
90
-
91
- def __reduce__(self) -> Any:
92
- return WalkInputNBTOptions, (
93
- self._nbt_cls,
94
- self._self_default,
95
- self._functions,
96
- self._keys,
97
- self._index,
98
- self._nested_default,
99
- )
100
-
101
- def _data(self) -> Data:
102
- return (
103
- self._nbt_cls,
104
- self._self_default,
105
- self._functions,
106
- self._keys,
107
- self._index,
108
- self._nested_default,
109
- )
110
-
111
- @classmethod
112
- def from_json(cls, data: JSONCompatible) -> Self:
113
- assert isinstance(data, dict)
114
- nbt_type = data["type"]
115
- assert isinstance(nbt_type, str)
116
- if "keys" in data:
117
- raw_keys = data["keys"]
118
- assert isinstance(raw_keys, dict)
119
- keys = {
120
- key: WalkInputNBTOptions.from_json(value)
121
- for key, value in raw_keys.items()
122
- }
123
- else:
124
- keys = None
125
- if "index" in data:
126
- raw_index = data["index"]
127
- assert isinstance(raw_index, dict)
128
- index = {
129
- int(key): WalkInputNBTOptions.from_json(value)
130
- for key, value in raw_index.items()
131
- }
132
- else:
133
- index = None
134
- return cls(
135
- StrToNBTCls[nbt_type],
136
- (
137
- translation_function_from_json(data["self_default"])
138
- if "self_default" in data
139
- else None
140
- ),
141
- (
142
- translation_function_from_json(data["functions"])
143
- if "functions" in data
144
- else None
145
- ),
146
- keys,
147
- index,
148
- (
149
- translation_function_from_json(data["nested_default"])
150
- if "nested_default" in data
151
- else None
152
- ),
153
- )
154
-
155
- def to_json(self) -> JSONDict:
156
- options: JSONDict = {
157
- "type": NBTClsToStr[self._nbt_cls],
158
- }
159
- if self._self_default is not None:
160
- options["self_default"] = self._self_default.to_json()
161
- if self._functions is not None:
162
- options["functions"] = self._functions.to_json()
163
- if self._keys is not None:
164
- options["keys"] = {
165
- key: value.to_json() for key, value in self._keys.items()
166
- }
167
- if self._index is not None:
168
- options["index"] = {
169
- str(key): value.to_json() for key, value in self._index.items()
170
- }
171
- if self._nested_default is not None:
172
- options["nested_default"] = self._nested_default.to_json()
173
- return options
174
-
175
- def run(self, src: SrcData, state: StateData, dst: DstData) -> None:
176
- if self._functions is not None:
177
- self._functions.run(src, state, dst)
178
-
179
- nbt = src.nbt
180
- if nbt is None:
181
- raise RuntimeError
182
- nbt_path_or_none = state.nbt_path
183
- if nbt_path_or_none is None:
184
- raise RuntimeError
185
- else:
186
- nbt_path = nbt_path_or_none
187
-
188
- tag_or_none = follow_nbt_path(nbt, nbt_path)
189
-
190
- nbt_cls = self._nbt_cls
191
- if tag_or_none is None:
192
- pass
193
- elif isinstance(tag_or_none, nbt_cls):
194
- tag = tag_or_none
195
-
196
- def run(
197
- keys: Iterable[KeyT],
198
- lut: Mapping[KeyT, WalkInputNBTOptions] | None,
199
- nested_dtype: NBTTagClsT | None,
200
- ) -> None:
201
- for key in keys:
202
- if lut is not None and key in lut:
203
- lut[key].run(src, StateData(), dst)
204
- elif self._nested_default is not None:
205
- outer_name, outer_type, path = nbt_path
206
- new_type: NBTTagClsT
207
- if nested_dtype is None:
208
- new_type = tag.__class__
209
- else:
210
- new_type = nested_dtype
211
- new_path: NBTPath = path + (
212
- (
213
- key,
214
- new_type,
215
- ),
216
- )
217
- self._nested_default.run(
218
- src,
219
- StateData(
220
- state.relative_location,
221
- (
222
- outer_name,
223
- outer_type,
224
- new_path,
225
- ),
226
- ),
227
- dst,
228
- )
229
-
230
- if isinstance(tag, CompoundTag):
231
- run(
232
- [key for key in tag.keys() if isinstance(key, str)],
233
- self._keys,
234
- None,
235
- )
236
- elif isinstance(tag, ListTag):
237
- dtype = NBTLookUp[tag.element_tag_id]
238
- assert dtype is not None
239
- run(range(len(tag)), self._index, dtype)
240
- elif isinstance(tag, AbstractBaseArrayTag):
241
- nested_dtype_: NBTTagClsT
242
- if isinstance(tag, ByteArrayTag):
243
- nested_dtype_ = ByteTag
244
- elif isinstance(tag, IntArrayTag):
245
- nested_dtype_ = IntTag
246
- elif isinstance(tag, LongArrayTag):
247
- nested_dtype_ = LongTag
248
- else:
249
- raise TypeError
250
- run(range(len(tag)), self._index, nested_dtype_)
251
- else:
252
- return
253
-
254
- elif self._self_default is not None:
255
- self._self_default.run(src, state, dst)
256
-
257
-
258
- class WalkInputNBT(AbstractBaseTranslationFunction):
259
- # Class variables
260
- Name = "walk_input_nbt"
261
- _instances = {}
262
-
263
- # Instance variables
264
- _walk_nbt: WalkInputNBTOptions
265
- _path: NBTPath | None
266
-
267
- def __init__(
268
- self,
269
- walk_nbt: WalkInputNBTOptions,
270
- path: Sequence[NBTPathElement] | None = None,
271
- ) -> None:
272
- super().__init__()
273
- self._walk_nbt = walk_nbt
274
- self._path = None if path is None else tuple(path)
275
-
276
- def __reduce__(self) -> Any:
277
- return WalkInputNBT, (self._walk_nbt, self._path)
278
-
279
- def _data(self) -> Data:
280
- return self._walk_nbt, self._path
281
-
282
- @classmethod
283
- def from_json(cls, data: JSONCompatible) -> Self:
284
- assert isinstance(data, dict)
285
- assert data.get("function") == "walk_input_nbt"
286
- raw_path = data.get("path", None)
287
- if raw_path is None:
288
- path = None
289
- elif isinstance(raw_path, list):
290
- path = []
291
- for item in raw_path:
292
- assert isinstance(item, list) and len(item) == 2
293
- key, cls_name = item
294
- assert isinstance(key, str | int)
295
- assert isinstance(cls_name, str)
296
- path.append((key, StrToNBTCls[cls_name]))
297
- else:
298
- raise TypeError
299
- return cls(
300
- WalkInputNBTOptions.from_json(data["options"]),
301
- path,
302
- )
303
-
304
- def to_json(self) -> JSONDict:
305
- data: JSONDict = {
306
- "function": "walk_input_nbt",
307
- "options": self._walk_nbt.to_json(),
308
- }
309
- if self._path is not None:
310
- data["path"] = [[key, NBTClsToStr[cls]] for key, cls in self._path]
311
- return data
312
-
313
- def run(self, src: SrcData, state: StateData, dst: DstData) -> None:
314
- dst.cacheable = False
315
- nbt = src.nbt
316
- if nbt is None:
317
- dst.extra_needed = True
318
- return
319
-
320
- if self._path is None:
321
- new_state = state
322
- else:
323
- path = ("", CompoundTag, self._path)
324
- # verify that the data exists at the path
325
- tag = follow_nbt_path(nbt, path)
326
- if not isinstance(tag, self._path[-1][1]):
327
- log.error(f"Tag at path {path} does not exist or has the wrong type.")
328
- return
329
- new_state = StateData(state.relative_location, path)
330
-
331
- self._walk_nbt.run(src, new_state, dst)