amulet-core 2.0a6__tar.gz → 2.0a8__tar.gz

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 (331) hide show
  1. {amulet_core-2.0a6/src/amulet_core.egg-info → amulet_core-2.0a8}/PKG-INFO +2 -2
  2. {amulet_core-2.0a6 → amulet_core-2.0a8}/pyproject.toml +1 -1
  3. {amulet_core-2.0a6 → amulet_core-2.0a8}/setup.cfg +1 -1
  4. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/__init__.py.cpp +6 -0
  5. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/__init__.pyi +2 -2
  6. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/_init.py +0 -2
  7. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/_version.py +3 -3
  8. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/biome.pyi +0 -2
  9. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/block.pyi +0 -2
  10. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/block_entity.pyi +0 -2
  11. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk.hpp +2 -1
  12. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk.pyi +0 -2
  13. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/section_array_map.py.cpp +9 -8
  14. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components.pyi +20 -18
  15. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/eq.py.hpp +1 -1
  16. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/mapping.py.hpp +18 -11
  17. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/mutable_mapping.py.hpp +17 -6
  18. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/sequence.py.hpp +5 -6
  19. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections.pyi +8 -5
  20. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/entity.py +22 -20
  21. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_code_functions/_text.py +2 -2
  22. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/abc.py +10 -3
  23. amulet_core-2.0a8/src/amulet/img/__init__.py +10 -0
  24. amulet_core-2.0a8/src/amulet/img/missing_no.png +0 -0
  25. amulet_core-2.0a8/src/amulet/img/missing_pack.png +0 -0
  26. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/__init__.pyi +2 -6
  27. amulet_core-2.0a8/src/amulet/level/_init_level.py.cpp +25 -0
  28. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_chunk_handle.py +45 -22
  29. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_level/_creatable_level.py +1 -2
  30. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_level/_level.py +1 -5
  31. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/__init__.pyi +0 -5
  32. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/__init_java.py.cpp +6 -9
  33. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/__init__.pyi +0 -4
  34. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/__init_java_raw.py.cpp +6 -11
  35. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/java_chunk_decode.cpp +2 -4
  36. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_components/java_raw_chunk_component.py.cpp +2 -2
  37. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/long_array.py.cpp +4 -3
  38. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/long_array.pyi +2 -1
  39. amulet_core-2.0a8/src/amulet/mesh/block/__init__.pyi +301 -0
  40. amulet_core-2.0a8/src/amulet/mesh/block/_cube.py +198 -0
  41. amulet_core-2.0a8/src/amulet/mesh/block/_missing_block.py +20 -0
  42. amulet_core-2.0a8/src/amulet/mesh/block/block_mesh.cpp +107 -0
  43. amulet_core-2.0a8/src/amulet/mesh/block/block_mesh.hpp +207 -0
  44. amulet_core-2.0a8/src/amulet/mesh/block/block_mesh.py.cpp +167 -0
  45. amulet_core-2.0a8/src/amulet/mesh/util.py +17 -0
  46. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/player.py +4 -6
  47. amulet_core-2.0a8/src/amulet/pybind11/collections.hpp +118 -0
  48. amulet_core-2.0a8/src/amulet/pybind11/numpy.hpp +26 -0
  49. amulet_core-2.0a8/src/amulet/pybind11/py_module.hpp +34 -0
  50. amulet_core-2.0a8/src/amulet/pybind11/type_hints.hpp +51 -0
  51. amulet_core-2.0a8/src/amulet/pybind11/types.hpp +25 -0
  52. amulet_core-2.0a8/src/amulet/pybind11/typing.hpp +7 -0
  53. amulet_core-2.0a8/src/amulet/resource_pack/__init__.py +63 -0
  54. amulet_core-2.0a8/src/amulet/resource_pack/abc/__init__.py +2 -0
  55. amulet_core-2.0a8/src/amulet/resource_pack/abc/resource_pack.py +38 -0
  56. amulet_core-2.0a8/src/amulet/resource_pack/abc/resource_pack_manager.py +85 -0
  57. amulet_core-2.0a8/src/amulet/resource_pack/java/__init__.py +2 -0
  58. amulet_core-2.0a8/src/amulet/resource_pack/java/download_resources.py +212 -0
  59. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_black.png +0 -0
  60. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_blue.png +0 -0
  61. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_brown.png +0 -0
  62. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_cyan.png +0 -0
  63. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_gray.png +0 -0
  64. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_green.png +0 -0
  65. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_light_blue.png +0 -0
  66. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_light_gray.png +0 -0
  67. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_lime.png +0 -0
  68. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_magenta.png +0 -0
  69. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_orange.png +0 -0
  70. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_pink.png +0 -0
  71. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_purple.png +0 -0
  72. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_red.png +0 -0
  73. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_white.png +0 -0
  74. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_yellow.png +0 -0
  75. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/barrier.png +0 -0
  76. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/end_portal.png +0 -0
  77. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/grass.png +0 -0
  78. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/lava.png +0 -0
  79. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/structure_void.png +0 -0
  80. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/water.png +0 -0
  81. amulet_core-2.0a8/src/amulet/resource_pack/java/java_vanilla_fix/pack.png +0 -0
  82. amulet_core-2.0a8/src/amulet/resource_pack/java/resource_pack.py +44 -0
  83. amulet_core-2.0a8/src/amulet/resource_pack/java/resource_pack_manager.py +563 -0
  84. amulet_core-2.0a8/src/amulet/resource_pack/unknown_resource_pack.py +10 -0
  85. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/__init__.pyi +0 -5
  86. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/_init_utils.py.cpp +1 -8
  87. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/call_spec/_call_spec.py +2 -7
  88. amulet_core-2.0a8/src/amulet/utils/cast.py +10 -0
  89. amulet_core-2.0a8/src/amulet/utils/comment_json.py +188 -0
  90. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/matrix.py +3 -3
  91. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/numpy.py.cpp +4 -9
  92. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/numpy_helpers.py +2 -2
  93. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/shareable_lock.py +2 -2
  94. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/world_utils.py +2 -2
  95. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/version.pyi +0 -8
  96. {amulet_core-2.0a6 → amulet_core-2.0a8/src/amulet_core.egg-info}/PKG-INFO +2 -2
  97. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet_core.egg-info/SOURCES.txt +57 -68
  98. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet_core.egg-info/requires.txt +1 -1
  99. amulet_core-2.0a6/src/amulet/chunk_/components/biome.py +0 -155
  100. amulet_core-2.0a6/src/amulet/chunk_/components/block_entity.py +0 -117
  101. amulet_core-2.0a6/src/amulet/chunk_/components/entity.py +0 -64
  102. amulet_core-2.0a6/src/amulet/chunk_/components/height_2d.py +0 -16
  103. amulet_core-2.0a6/src/amulet/level/_init_level.py.cpp +0 -30
  104. amulet_core-2.0a6/src/amulet/level/bedrock/__init__.py +0 -2
  105. amulet_core-2.0a6/src/amulet/level/bedrock/_chunk_handle.py +0 -19
  106. amulet_core-2.0a6/src/amulet/level/bedrock/_dimension.py +0 -22
  107. amulet_core-2.0a6/src/amulet/level/bedrock/_level.py +0 -187
  108. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/__init__.py +0 -5
  109. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/_actor_counter.py +0 -53
  110. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/_chunk.py +0 -54
  111. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/_chunk_decode.py +0 -668
  112. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/_chunk_encode.py +0 -602
  113. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/_constant.py +0 -9
  114. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/_dimension.py +0 -343
  115. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/_level.py +0 -463
  116. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/_level_dat.py +0 -90
  117. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/_typing.py +0 -6
  118. amulet_core-2.0a6/src/amulet/level/bedrock/_raw/leveldb_chunk_versions.py +0 -83
  119. amulet_core-2.0a6/src/amulet/level/bedrock/chunk/__init__.py +0 -1
  120. amulet_core-2.0a6/src/amulet/level/bedrock/chunk/_chunk.py +0 -126
  121. amulet_core-2.0a6/src/amulet/level/bedrock/chunk/components/chunk_version.py +0 -12
  122. amulet_core-2.0a6/src/amulet/level/bedrock/chunk/components/finalised_state.py +0 -13
  123. amulet_core-2.0a6/src/amulet/level/bedrock/chunk/components/raw_chunk.py +0 -15
  124. amulet_core-2.0a6/src/amulet/level/construction/__init__.py +0 -0
  125. amulet_core-2.0a6/src/amulet/level/java/_chunk_handle.pyi +0 -15
  126. amulet_core-2.0a6/src/amulet/level/java/_dimension.pyi +0 -13
  127. amulet_core-2.0a6/src/amulet/level/java/_level.pyi +0 -120
  128. amulet_core-2.0a6/src/amulet/level/java/_raw/_chunk_decode.py +0 -561
  129. amulet_core-2.0a6/src/amulet/level/java/_raw/_chunk_encode.py +0 -463
  130. amulet_core-2.0a6/src/amulet/level/java/_raw/_constant.pyi +0 -20
  131. amulet_core-2.0a6/src/amulet/level/java/_raw/_data_pack/__init__.pyi +0 -8
  132. amulet_core-2.0a6/src/amulet/level/java/_raw/_data_pack/data_pack.pyi +0 -197
  133. amulet_core-2.0a6/src/amulet/level/java/_raw/_data_pack/data_pack_manager.pyi +0 -75
  134. amulet_core-2.0a6/src/amulet/level/java/_raw/_dimension.pyi +0 -72
  135. amulet_core-2.0a6/src/amulet/level/java/_raw/_level.pyi +0 -238
  136. amulet_core-2.0a6/src/amulet/level/java/_raw/_typing.pyi +0 -5
  137. amulet_core-2.0a6/src/amulet/level/java/anvil/__init__.pyi +0 -11
  138. amulet_core-2.0a6/src/amulet/level/java/anvil/_dimension.pyi +0 -109
  139. amulet_core-2.0a6/src/amulet/level/java/anvil/_region.pyi +0 -197
  140. amulet_core-2.0a6/src/amulet/level/java/anvil/_sector_manager.pyi +0 -142
  141. amulet_core-2.0a6/src/amulet/level/java_forge/__init__.py +0 -0
  142. amulet_core-2.0a6/src/amulet/level/mcstructure/__init__.py +0 -0
  143. amulet_core-2.0a6/src/amulet/level/nbt/__init__.py +0 -0
  144. amulet_core-2.0a6/src/amulet/level/schematic/__init__.py +0 -0
  145. amulet_core-2.0a6/src/amulet/level/sponge_schematic/__init__.py +0 -0
  146. amulet_core-2.0a6/src/amulet/pybind11/collections.hpp +0 -76
  147. amulet_core-2.0a6/src/amulet/pybind11/py_module.hpp +0 -69
  148. amulet_core-2.0a6/src/amulet/pybind11/python.hpp +0 -14
  149. amulet_core-2.0a6/src/amulet/pybind11/types.hpp +0 -17
  150. amulet_core-2.0a6/src/amulet/utils/call_spec/__init__.pyi +0 -53
  151. amulet_core-2.0a6/src/amulet/utils/call_spec/_call_spec.pyi +0 -272
  152. amulet_core-2.0a6/src/amulet/utils/matrix.pyi +0 -177
  153. amulet_core-2.0a6/src/amulet/utils/shareable_lock.pyi +0 -190
  154. amulet_core-2.0a6/src/amulet/utils/signal/__init__.pyi +0 -25
  155. amulet_core-2.0a6/src/amulet/utils/signal/_signal.pyi +0 -84
  156. amulet_core-2.0a6/src/amulet/utils/task_manager.pyi +0 -168
  157. amulet_core-2.0a6/src/amulet/utils/typing.py +0 -4
  158. amulet_core-2.0a6/src/amulet/utils/typing.pyi +0 -6
  159. amulet_core-2.0a6/src/amulet/utils/weakref.pyi +0 -50
  160. amulet_core-2.0a6/src/amulet/utils/world_utils.pyi +0 -109
  161. {amulet_core-2.0a6 → amulet_core-2.0a8}/MANIFEST.in +0 -0
  162. {amulet_core-2.0a6 → amulet_core-2.0a8}/README.md +0 -0
  163. {amulet_core-2.0a6 → amulet_core-2.0a8}/setup.py +0 -0
  164. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/__pyinstaller/__init__.py +0 -0
  165. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/__pyinstaller/hook-amulet.py +0 -0
  166. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/biome.cpp +0 -0
  167. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/biome.hpp +0 -0
  168. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/biome.py.cpp +0 -0
  169. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/block.cpp +0 -0
  170. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/block.hpp +0 -0
  171. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/block.py.cpp +0 -0
  172. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/block_entity.cpp +0 -0
  173. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/block_entity.hpp +0 -0
  174. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/block_entity.py.cpp +0 -0
  175. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk.cpp +0 -0
  176. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk.py.cpp +0 -0
  177. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/_init_chunk_components.py.cpp +0 -0
  178. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/biome_3d_component.cpp +0 -0
  179. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/biome_3d_component.hpp +0 -0
  180. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/block_component.cpp +0 -0
  181. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/block_component.hpp +0 -0
  182. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/block_component.py.cpp +0 -0
  183. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/block_entity_component.cpp +0 -0
  184. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/block_entity_component.hpp +0 -0
  185. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/section_array_map.cpp +0 -0
  186. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/chunk_components/section_array_map.hpp +0 -0
  187. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/collections.py.cpp +0 -0
  188. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/hash.py.hpp +0 -0
  189. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/holder.py.cpp +0 -0
  190. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/holder.py.hpp +0 -0
  191. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/iterator.py.cpp +0 -0
  192. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/iterator.py.hpp +0 -0
  193. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/mapping.py.cpp +0 -0
  194. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/collections/mutable_mapping.py.cpp +0 -0
  195. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/data_types.py +0 -0
  196. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/errors.py +0 -0
  197. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/__init__.py +0 -0
  198. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/_game.py +0 -0
  199. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/_universal/__init__.py +0 -0
  200. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/_universal/_biome.py +0 -0
  201. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/_universal/_block.py +0 -0
  202. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/_universal/_version.py +0 -0
  203. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/abc/__init__.py +0 -0
  204. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/abc/_block_specification.py +0 -0
  205. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/abc/biome.py +0 -0
  206. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/abc/block.py +0 -0
  207. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/abc/game_version_container.py +0 -0
  208. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/abc/json_interface.py +0 -0
  209. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/abc/version.py +0 -0
  210. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/bedrock/__init__.py +0 -0
  211. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/bedrock/_biome.py +0 -0
  212. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/bedrock/_block.py +0 -0
  213. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/bedrock/_version.py +0 -0
  214. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/java/__init__.py +0 -0
  215. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/java/_biome.py +0 -0
  216. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/java/_block.py +0 -0
  217. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/java/_version.py +0 -0
  218. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/__init__.py +0 -0
  219. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/__init__.py +0 -0
  220. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_code_functions/__init__.py +0 -0
  221. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_code_functions/banner_pattern.py +0 -0
  222. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_code_functions/bedrock_chest_connection.py +0 -0
  223. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_code_functions/bedrock_moving_block_pos.py +0 -0
  224. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_code_functions/bedrock_sign.py +0 -0
  225. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_code_functions/bedrock_skull_rotation.py +0 -0
  226. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_code_functions/custom_name.py +0 -0
  227. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_frozen.py +0 -0
  228. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_state.py +0 -0
  229. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/_typing.py +0 -0
  230. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/carry_nbt.py +0 -0
  231. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/carry_properties.py +0 -0
  232. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/code.py +0 -0
  233. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/map_block_name.py +0 -0
  234. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/map_nbt.py +0 -0
  235. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/map_properties.py +0 -0
  236. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/multiblock.py +0 -0
  237. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/new_block.py +0 -0
  238. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/new_entity.py +0 -0
  239. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/new_nbt.py +0 -0
  240. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/new_properties.py +0 -0
  241. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/sequence.py +0 -0
  242. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_functions/walk_input_nbt.py +0 -0
  243. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/game/translate/_translator.py +0 -0
  244. /amulet_core-2.0a6/src/amulet/img/missing_world_icon.png → /amulet_core-2.0a8/src/amulet/img/missing_world.png +0 -0
  245. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/io/binary_reader.hpp +0 -0
  246. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/io/binary_writer.hpp +0 -0
  247. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/item.py +0 -0
  248. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/_load.py +0 -0
  249. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/__init__.py +0 -0
  250. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_dimension.py +0 -0
  251. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_history/__init__.py +0 -0
  252. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_history/_cache.py +0 -0
  253. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_history/_history_manager.py +0 -0
  254. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_level/__init__.py +0 -0
  255. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_level/_compactable_level.py +0 -0
  256. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_level/_disk_level.py +0 -0
  257. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_level/_loadable_level.py +0 -0
  258. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_player_storage.py +0 -0
  259. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_raw_level.py +0 -0
  260. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/abc/_registry.py +0 -0
  261. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_chunk_handle.py +0 -0
  262. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_dimension.py +0 -0
  263. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_level.py +0 -0
  264. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/_chunk.pyi +0 -0
  265. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/_constant.py +0 -0
  266. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/_data_pack/__init__.py +0 -0
  267. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/_data_pack/data_pack.py +0 -0
  268. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/_data_pack/data_pack_manager.py +0 -0
  269. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/_dimension.py +0 -0
  270. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/_level.py +0 -0
  271. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/_typing.py +0 -0
  272. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/java_chunk_decode.hpp +0 -0
  273. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/java_chunk_encode.cpp +0 -0
  274. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/_raw/java_chunk_encode.hpp +0 -0
  275. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/anvil/__init__.py +0 -0
  276. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/anvil/_dimension.py +0 -0
  277. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/anvil/_region.py +0 -0
  278. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/anvil/_sector_manager.py +0 -0
  279. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk.pyi +0 -0
  280. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_/_chunk.py +0 -0
  281. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_/components/inhabited_time.py +0 -0
  282. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_/components/last_update.py +0 -0
  283. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_/components/legacy_version.py +0 -0
  284. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_/components/light_populated.py +0 -0
  285. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_/components/named_height_2d.py +0 -0
  286. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_/components/status.py +0 -0
  287. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_/components/terrain_populated.py +0 -0
  288. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_components/_init_java_chunk_components.py.cpp +0 -0
  289. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_components/data_version_component.cpp +0 -0
  290. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_components/data_version_component.hpp +0 -0
  291. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_components/data_version_component.py.cpp +0 -0
  292. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_components/java_raw_chunk_component.cpp +0 -0
  293. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_components/java_raw_chunk_component.hpp +0 -0
  294. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/chunk_components.pyi +0 -0
  295. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/java_chunk.cpp +0 -0
  296. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/java_chunk.hpp +0 -0
  297. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/java_chunk.py.cpp +0 -0
  298. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/java/long_array.hpp +0 -0
  299. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/temporary_level/__init__.py +0 -0
  300. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/level/temporary_level/_level.py +0 -0
  301. {amulet_core-2.0a6/src/amulet/level/bedrock/chunk/components → amulet_core-2.0a8/src/amulet/mesh}/__init__.py +0 -0
  302. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/palette/__init__.pyi +0 -0
  303. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/palette/_init_palette.py.cpp +0 -0
  304. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/palette/biome_palette.hpp +0 -0
  305. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/palette/biome_palette.py.cpp +0 -0
  306. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/palette/biome_palette.pyi +0 -0
  307. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/palette/block_palette.cpp +0 -0
  308. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/palette/block_palette.hpp +0 -0
  309. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/palette/block_palette.py.cpp +0 -0
  310. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/palette/block_palette.pyi +0 -0
  311. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/py.typed +0 -0
  312. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/selection/__init__.py +0 -0
  313. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/selection/abstract_selection.py +0 -0
  314. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/selection/box.py +0 -0
  315. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/selection/group.py +0 -0
  316. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/call_spec/__init__.py +0 -0
  317. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/format_utils.py +0 -0
  318. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/generator.py +0 -0
  319. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/numpy.hpp +0 -0
  320. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/numpy.pyi +0 -0
  321. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/signal/__init__.py +0 -0
  322. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/signal/_signal.py +0 -0
  323. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/task_manager.py +0 -0
  324. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/typed_property.py +0 -0
  325. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/utils/weakref.py +0 -0
  326. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/version.cpp +0 -0
  327. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/version.hpp +0 -0
  328. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet/version.py.cpp +0 -0
  329. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet_core.egg-info/dependency_links.txt +0 -0
  330. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet_core.egg-info/entry_points.txt +0 -0
  331. {amulet_core-2.0a6 → amulet_core-2.0a8}/src/amulet_core.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: amulet-core
3
- Version: 2.0a6
3
+ Version: 2.0a8
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.
@@ -11,7 +11,7 @@ Classifier: Operating System :: OS Independent
11
11
  Requires-Python: >=3.11
12
12
  Description-Content-Type: text/markdown
13
13
  Requires-Dist: numpy~=2.0
14
- Requires-Dist: amulet-nbt~=4.0a2
14
+ Requires-Dist: amulet-nbt~=4.0a6
15
15
  Requires-Dist: portalocker~=2.4
16
16
  Requires-Dist: amulet-leveldb~=1.0b0
17
17
  Requires-Dist: platformdirs~=3.1
@@ -4,6 +4,6 @@ requires = [
4
4
  "wheel",
5
5
  "versioneer",
6
6
  "pybind11 ~= 2.12",
7
- "amulet_nbt ~= 4.0a2"
7
+ "amulet_nbt ~= 4.0a6"
8
8
  ]
9
9
  build-backend = "setuptools.build_meta"
@@ -18,7 +18,7 @@ packages = find_namespace:
18
18
  python_requires = >=3.11
19
19
  install_requires =
20
20
  numpy~=2.0
21
- amulet-nbt~=4.0a2
21
+ amulet-nbt~=4.0a6
22
22
  portalocker~=2.4
23
23
  amulet-leveldb~=1.0b0
24
24
  platformdirs~=3.1
@@ -11,6 +11,7 @@ void init_palette(py::module);
11
11
  void init_chunk(py::module);
12
12
  void init_chunk_components(py::module);
13
13
  void init_level(py::module);
14
+ void init_block_mesh(py::module);
14
15
 
15
16
  static bool init_run = false;
16
17
 
@@ -18,6 +19,10 @@ void init_amulet(py::module m){
18
19
  if (init_run){ return; }
19
20
  init_run = true;
20
21
 
22
+ // This is normally added after initilsation but we need it to pass to subpackages.
23
+ // This may cause issues with frozen installs.
24
+ m.attr("__path__") = py::module::import("importlib.util").attr("find_spec")("amulet").attr("submodule_search_locations");
25
+
21
26
  py::module::import("amulet_nbt");
22
27
 
23
28
  py::module::import("amulet._init").attr("init")(m);
@@ -33,6 +38,7 @@ void init_amulet(py::module m){
33
38
  init_chunk(m);
34
39
  init_chunk_components(m);
35
40
  init_level(m);
41
+ init_block_mesh(m);
36
42
  }
37
43
 
38
44
  PYBIND11_MODULE(__init__, m) { init_amulet(m); }
@@ -8,13 +8,13 @@ from . import (
8
8
  chunk_components,
9
9
  collections,
10
10
  level,
11
+ mesh,
11
12
  palette,
12
13
  utils,
13
14
  version,
14
15
  )
15
16
 
16
17
  __all__ = [
17
- "IMG_DIRECTORY",
18
18
  "biome",
19
19
  "block",
20
20
  "block_entity",
@@ -22,9 +22,9 @@ __all__ = [
22
22
  "chunk_components",
23
23
  "collections",
24
24
  "level",
25
+ "mesh",
25
26
  "palette",
26
27
  "utils",
27
28
  "version",
28
29
  ]
29
- IMG_DIRECTORY: str
30
30
  __version__: str
@@ -12,8 +12,6 @@ def init(m: Any) -> None:
12
12
 
13
13
  # m.entity_support = False
14
14
 
15
- m.IMG_DIRECTORY = os.path.join(os.path.dirname(__file__), "img")
16
-
17
15
  # Initialise default paths. Applications should override these environment variables.
18
16
  # os.environ.setdefault("DATA_DIR", platformdirs.user_data_dir("AmuletTeam", "AmuletTeam"))
19
17
  # os.environ.setdefault("CONFIG_DIR", platformdirs.user_config_dir("AmuletTeam", "AmuletTeam"))
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2024-09-18T10:56:38+0100",
11
+ "date": "2024-10-27T10:30:17+0000",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "6ed1d429cbd7c4f21d779c7e4ac65ddc90512b80",
15
- "version": "2.0a6"
14
+ "full-revisionid": "7844bec50b93c8711ae703840b1a0e43b8283df6",
15
+ "version": "2.0a8"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -29,7 +29,6 @@ class Biome(amulet.version.PlatformVersionContainer):
29
29
  @typing.overload
30
30
  def __eq__(self, arg0: typing.Any) -> bool | types.NotImplementedType: ...
31
31
  def __ge__(self, arg0: Biome) -> bool: ...
32
- def __getstate__(self) -> bytes: ...
33
32
  def __gt__(self, arg0: Biome) -> bool: ...
34
33
  def __hash__(self) -> int: ...
35
34
  def __init__(
@@ -42,7 +41,6 @@ class Biome(amulet.version.PlatformVersionContainer):
42
41
  def __le__(self, arg0: Biome) -> bool: ...
43
42
  def __lt__(self, arg0: Biome) -> bool: ...
44
43
  def __repr__(self) -> str: ...
45
- def __setstate__(self, arg0: bytes) -> None: ...
46
44
  @property
47
45
  def base_name(self) -> str:
48
46
  """
@@ -74,7 +74,6 @@ class Block(amulet.version.PlatformVersionContainer):
74
74
  @typing.overload
75
75
  def __eq__(self, arg0: typing.Any) -> bool | types.NotImplementedType: ...
76
76
  def __ge__(self, arg0: Block) -> bool: ...
77
- def __getstate__(self) -> bytes: ...
78
77
  def __gt__(self, arg0: Block) -> bool: ...
79
78
  def __hash__(self) -> int: ...
80
79
  def __init__(
@@ -95,7 +94,6 @@ class Block(amulet.version.PlatformVersionContainer):
95
94
  def __le__(self, arg0: Block) -> bool: ...
96
95
  def __lt__(self, arg0: Block) -> bool: ...
97
96
  def __repr__(self) -> str: ...
98
- def __setstate__(self, arg0: bytes) -> None: ...
99
97
  @property
100
98
  def base_name(self) -> str:
101
99
  """
@@ -17,7 +17,6 @@ class BlockEntity(amulet.version.PlatformVersionContainer):
17
17
  def __eq__(self, arg0: BlockEntity) -> bool: ...
18
18
  @typing.overload
19
19
  def __eq__(self, arg0: typing.Any) -> bool | types.NotImplementedType: ...
20
- def __getstate__(self) -> bytes: ...
21
20
  def __hash__(self) -> int: ...
22
21
  def __init__(
23
22
  self,
@@ -28,7 +27,6 @@ class BlockEntity(amulet.version.PlatformVersionContainer):
28
27
  nbt: amulet_nbt.NamedTag,
29
28
  ) -> None: ...
30
29
  def __repr__(self) -> str: ...
31
- def __setstate__(self, arg0: bytes) -> None: ...
32
30
  @property
33
31
  def base_name(self) -> str:
34
32
  """
@@ -90,7 +90,8 @@ namespace Amulet {
90
90
  void reconstruct_chunk(SerialisedComponents component_data) override {
91
91
  (
92
92
  [&]{
93
- Components::deserialise(component_data.extract(Components::ComponentID).mapped());
93
+ auto node = component_data.extract(Components::ComponentID);
94
+ Components::deserialise(node ? node.mapped() : std::nullopt);
94
95
  }(),
95
96
  ...
96
97
  );
@@ -7,8 +7,6 @@ class Chunk:
7
7
  A base class for all chunk classes.
8
8
  """
9
9
 
10
- def __getstate__(self) -> tuple: ...
11
- def __setstate__(self, arg0: tuple) -> None: ...
12
10
  def reconstruct_chunk(self, arg0: dict[str, bytes | None]) -> None:
13
11
  """
14
12
  This is private. Do not use this. It will be removed in the future.
@@ -7,6 +7,7 @@
7
7
  #include <pybind11/stl.h>
8
8
  #include <pybind11/operators.h>
9
9
  #include <pybind11/numpy.h>
10
+ #include <amulet/pybind11/numpy.hpp>
10
11
 
11
12
  #include <amulet/collections/iterator.py.hpp>
12
13
  #include <amulet/collections/mapping.py.hpp>
@@ -227,7 +228,7 @@ void init_section_array_map(py::module section_array_map_module) {
227
228
  );
228
229
  SectionArrayMap.def(
229
230
  "__getitem__",
230
- [asarray](const Amulet::SectionArrayMap& self, std::int64_t cy){
231
+ [asarray](const Amulet::SectionArrayMap& self, std::int64_t cy) -> Amulet::pybind11::numpy::array_t<std::uint32_t> {
231
232
  try {
232
233
  return asarray(py::cast(self.get_section(cy)));
233
234
  }
@@ -254,15 +255,15 @@ void init_section_array_map(py::module section_array_map_module) {
254
255
  "__contains__",
255
256
  &Amulet::SectionArrayMap::contains_section
256
257
  );
257
- Amulet::collections::PyMapping_keys(SectionArrayMap);
258
- Amulet::collections::PyMapping_values(SectionArrayMap);
259
- Amulet::collections::PyMapping_items(SectionArrayMap);
260
- Amulet::collections::PyMapping_get(SectionArrayMap);
258
+ Amulet::collections::PyMapping_keys<std::int64_t>(SectionArrayMap);
259
+ Amulet::collections::PyMapping_values<Amulet::pybind11::numpy::array_t<std::uint32_t>>(SectionArrayMap);
260
+ Amulet::collections::PyMapping_items<std::int64_t, Amulet::pybind11::numpy::array_t<std::uint32_t>>(SectionArrayMap);
261
+ Amulet::collections::PyMapping_get<std::int64_t, Amulet::pybind11::numpy::array_t<std::uint32_t>>(SectionArrayMap);
261
262
  Amulet::collections::PyMapping_eq(SectionArrayMap);
262
263
  Amulet::collections::PyMapping_hash(SectionArrayMap);
263
- Amulet::collections::PyMutableMapping_pop(SectionArrayMap);
264
- Amulet::collections::PyMutableMapping_popitem(SectionArrayMap);
264
+ Amulet::collections::PyMutableMapping_pop<std::int64_t, Amulet::pybind11::numpy::array_t<std::uint32_t>>(SectionArrayMap);
265
+ Amulet::collections::PyMutableMapping_popitem<std::int64_t, Amulet::pybind11::numpy::array_t<std::uint32_t>>(SectionArrayMap);
265
266
  Amulet::collections::PyMutableMapping_update(SectionArrayMap);
266
- Amulet::collections::PyMutableMapping_setdefault(SectionArrayMap);
267
+ Amulet::collections::PyMutableMapping_setdefault<std::int64_t, Amulet::pybind11::numpy::array_t<std::uint32_t>>(SectionArrayMap);
267
268
  Amulet::collections::PyMutableMapping_register(SectionArrayMap);
268
269
  }
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import collections.abc
3
4
  import types
4
5
  import typing
5
6
 
@@ -8,6 +9,7 @@ import amulet.collections
8
9
  import amulet.palette.block_palette
9
10
  import amulet.version
10
11
  import numpy
12
+ import numpy.typing
11
13
  import typing_extensions
12
14
 
13
15
  __all__ = ["BlockComponent", "BlockComponentData", "IndexArray3D", "SectionArrayMap"]
@@ -33,11 +35,6 @@ class IndexArray3D:
33
35
  A 3D index array.
34
36
  """
35
37
 
36
- def __buffer__(self, flags):
37
- """
38
- Return a buffer object that exposes the underlying memory of the object.
39
- """
40
-
41
38
  @typing.overload
42
39
  def __init__(self, shape: tuple[int, int, int]) -> None: ...
43
40
  @typing.overload
@@ -46,11 +43,6 @@ class IndexArray3D:
46
43
  def __init__(self, other: IndexArray3D) -> None: ...
47
44
  @typing.overload
48
45
  def __init__(self, arg0: typing_extensions.Buffer) -> None: ...
49
- def __release_buffer__(self, buffer):
50
- """
51
- Release the buffer object that exposes the underlying memory of the object.
52
- """
53
-
54
46
  @property
55
47
  def shape(self) -> tuple[int, int, int]: ...
56
48
  @property
@@ -64,7 +56,7 @@ class SectionArrayMap:
64
56
  def __contains__(self, arg0: int) -> bool: ...
65
57
  def __delitem__(self, arg0: int) -> None: ...
66
58
  def __eq__(self, arg0: typing.Any) -> bool | types.NotImplementedType: ...
67
- def __getitem__(self, arg0: int) -> typing.Any: ...
59
+ def __getitem__(self, arg0: int) -> numpy.typing.NDArray[numpy.uint32]: ...
68
60
  def __hash__(self) -> int: ...
69
61
  def __init__(
70
62
  self,
@@ -76,15 +68,25 @@ class SectionArrayMap:
76
68
  def __setitem__(
77
69
  self, arg0: int, arg1: IndexArray3D | typing_extensions.Buffer
78
70
  ) -> None: ...
79
- def get(self, arg0: typing.Any, arg1: typing.Any) -> typing.Any: ...
80
- def items(self) -> typing.Any: ...
81
- def keys(self) -> typing.Any: ...
82
- def pop(self, key: typing.Any, default: typing.Any = ...) -> typing.Any: ...
83
- def popitem(self) -> tuple[typing.Any, typing.Any]: ...
71
+ def get(
72
+ self, arg0: int, arg1: numpy.typing.NDArray[numpy.uint32] | None
73
+ ) -> numpy.typing.NDArray[numpy.uint32] | None: ...
74
+ def items(
75
+ self,
76
+ ) -> collections.abc.ItemsView[int, numpy.typing.NDArray[numpy.uint32]]: ...
77
+ def keys(self) -> collections.abc.KeysView[int]: ...
78
+ def pop(
79
+ self, key: int, default: numpy.typing.NDArray[numpy.uint32] = ...
80
+ ) -> numpy.typing.NDArray[numpy.uint32]: ...
81
+ def popitem(self) -> tuple[int, numpy.typing.NDArray[numpy.uint32]]: ...
84
82
  def populate(self, arg0: int) -> None: ...
85
- def setdefault(self, arg0: typing.Any, arg1: typing.Any) -> typing.Any: ...
83
+ def setdefault(
84
+ self, arg0: int, arg1: numpy.typing.NDArray[numpy.uint32] | None
85
+ ) -> numpy.typing.NDArray[numpy.uint32] | None: ...
86
86
  def update(self, other: typing.Any = (), **kwargs) -> None: ...
87
- def values(self) -> typing.Any: ...
87
+ def values(
88
+ self,
89
+ ) -> collections.abc.ValuesView[numpy.typing.NDArray[numpy.uint32]]: ...
88
90
  @property
89
91
  def array_shape(self) -> tuple[int, int, int]: ...
90
92
  @property
@@ -30,7 +30,7 @@ void Eq_default(clsT cls) {
30
30
  py::object NotImplemented = py::module::import("builtins").attr("NotImplemented");
31
31
  cls.def(
32
32
  "__eq__",
33
- [NotImplemented](const typename clsT::type& self, py::object other) -> std::variant<bool, py::types::NotImplementedType> {
33
+ [NotImplemented](const typename clsT::type& self, py::object other) -> std::variant<bool, Amulet::pybind11::types::NotImplementedType> {
34
34
  return NotImplemented;
35
35
  }
36
36
  );
@@ -3,8 +3,11 @@
3
3
  #include <memory>
4
4
 
5
5
  #include <pybind11/pybind11.h>
6
+ #include <pybind11/typing.h>
6
7
 
7
8
  #include <amulet/pybind11/types.hpp>
9
+ #include <amulet/pybind11/type_hints.hpp>
10
+ #include <amulet/pybind11/collections.hpp>
8
11
  #include "iterator.py.hpp"
9
12
 
10
13
  namespace py = pybind11;
@@ -35,11 +38,11 @@ namespace collections {
35
38
  );
36
39
  }
37
40
 
38
- template <typename clsT>
41
+ template <typename KT = py::object, typename clsT>
39
42
  void PyMapping_contains(clsT cls) {
40
43
  cls.def(
41
44
  "__contains__",
42
- [](py::object self, py::object key) {
45
+ [](py::object self, Amulet::pybind11::type_hints::PyObjectCpp<KT> key) {
43
46
  try {
44
47
  self.attr("__getitem__")(key);
45
48
  return true;
@@ -56,38 +59,42 @@ namespace collections {
56
59
  );
57
60
  }
58
61
 
59
- template <typename clsT>
62
+ template <typename KT = py::object, typename clsT>
60
63
  void PyMapping_keys(clsT cls) {
61
64
  py::object KeysView = py::module::import("collections.abc").attr("KeysView");
62
65
  cls.def(
63
66
  "keys",
64
- [KeysView](py::object self) { return KeysView(self); }
67
+ [KeysView](py::object self) -> Amulet::pybind11::collections::KeysView<KT> { return KeysView(self); }
65
68
  );
66
69
  }
67
70
 
68
- template <typename clsT>
71
+ template <typename VT = py::object, typename clsT>
69
72
  void PyMapping_values(clsT cls) {
70
73
  py::object ValuesView = py::module::import("collections.abc").attr("ValuesView");
71
74
  cls.def(
72
75
  "values",
73
- [ValuesView](py::object self) { return ValuesView(self); }
76
+ [ValuesView](py::object self) -> Amulet::pybind11::collections::ValuesView<VT> { return ValuesView(self); }
74
77
  );
75
78
  }
76
79
 
77
- template <typename clsT>
80
+ template <typename KT = py::object, typename VT = py::object, typename clsT>
78
81
  void PyMapping_items(clsT cls) {
79
82
  py::object ItemsView = py::module::import("collections.abc").attr("ItemsView");
80
83
  cls.def(
81
84
  "items",
82
- [ItemsView](py::object self) { return ItemsView(self); }
85
+ [ItemsView](py::object self) -> Amulet::pybind11::collections::ItemsView<KT, VT> { return ItemsView(self); }
83
86
  );
84
87
  }
85
88
 
86
- template <typename clsT>
89
+ template <typename KT = py::object, typename VT = py::object, typename clsT>
87
90
  void PyMapping_get(clsT cls) {
88
91
  cls.def(
89
92
  "get",
90
- [](py::object self, py::object key, py::object default_ = py::none()) {
93
+ [](
94
+ py::object self,
95
+ Amulet::pybind11::type_hints::PyObjectCpp<KT> key,
96
+ py::typing::Optional<VT> default_ = py::none()
97
+ ) -> py::typing::Optional<VT> {
91
98
  try {
92
99
  return self.attr("__getitem__")(key);
93
100
  }
@@ -119,7 +126,7 @@ namespace collections {
119
126
  ](
120
127
  py::object self,
121
128
  py::object other
122
- ) -> std::variant<bool, py::types::NotImplementedType> {
129
+ ) -> std::variant<bool, Amulet::pybind11::types::NotImplementedType> {
123
130
  if (!isinstance(other, PyMapping)) {
124
131
  return NotImplemented;
125
132
  }
@@ -10,12 +10,16 @@ namespace py = pybind11;
10
10
 
11
11
  namespace Amulet {
12
12
  namespace collections {
13
- template <typename clsT>
13
+ template <typename KT = py::object, typename VT = py::object, typename clsT>
14
14
  void PyMutableMapping_pop(clsT cls) {
15
15
  py::object marker = py::module::import("builtins").attr("Ellipsis");
16
16
  cls.def(
17
17
  "pop",
18
- [marker](py::object self, py::object key, py::object default_) {
18
+ [marker](
19
+ py::object self,
20
+ Amulet::pybind11::type_hints::PyObjectCpp<KT> key,
21
+ Amulet::pybind11::type_hints::PyObjectCpp<VT> default_
22
+ ) -> Amulet::pybind11::type_hints::PyObjectCpp<VT> {
19
23
  py::object value;
20
24
  try {
21
25
  value = self.attr("__getitem__")(key);
@@ -39,13 +43,16 @@ namespace collections {
39
43
  );
40
44
  }
41
45
 
42
- template <typename clsT>
46
+ template <typename KT = py::object, typename VT = py::object, typename clsT>
43
47
  void PyMutableMapping_popitem(clsT cls) {
44
48
  py::object iter = py::module::import("builtins").attr("iter");
45
49
  py::object next = py::module::import("builtins").attr("next");
46
50
  cls.def(
47
51
  "popitem",
48
- [iter, next](py::object self) {
52
+ [iter, next](py::object self) -> std::pair<
53
+ Amulet::pybind11::type_hints::PyObjectCpp<KT>,
54
+ Amulet::pybind11::type_hints::PyObjectCpp<VT>
55
+ > {
49
56
  py::object key;
50
57
  try {
51
58
  key = next(iter(self));
@@ -132,11 +139,15 @@ namespace collections {
132
139
  );
133
140
  }
134
141
 
135
- template <typename clsT>
142
+ template <typename KT = py::object, typename VT = py::object, typename clsT>
136
143
  void PyMutableMapping_setdefault(clsT cls) {
137
144
  cls.def(
138
145
  "setdefault",
139
- [](py::object self, py::object key, py::object default_ = py::none()) {
146
+ [](
147
+ py::object self,
148
+ Amulet::pybind11::type_hints::PyObjectCpp<KT> key,
149
+ py::typing::Optional<VT> default_ = py::none()
150
+ ) -> py::typing::Optional<VT> {
140
151
  try {
141
152
  return self.attr("__getitem__")(key);
142
153
  }
@@ -7,7 +7,6 @@
7
7
  #include <pybind11/pybind11.h>
8
8
  #include "iterator.py.hpp"
9
9
  #include <amulet/pybind11/collections.hpp>
10
- #include <amulet/pybind11/python.hpp>
11
10
 
12
11
  namespace py = pybind11;
13
12
 
@@ -41,7 +40,7 @@ namespace Amulet {
41
40
  [](py::object self, py::object value) {
42
41
  py::iterator it = py::iter(self);
43
42
  while (it != py::iterator::sentinel()) {
44
- if (py::equals(*it, value)) {
43
+ if (it->equal(value)) {
45
44
  return true;
46
45
  }
47
46
  ++it;
@@ -55,7 +54,7 @@ namespace Amulet {
55
54
  void Sequence_iter(clsT cls) {
56
55
  cls.def(
57
56
  "__iter__",
58
- [](py::object self) -> py::collections::Iterator<elemT> {
57
+ [](py::object self) -> Amulet::pybind11::collections::Iterator<elemT> {
59
58
  return py::cast(
60
59
  static_cast<std::shared_ptr<Amulet::collections::Iterator>>(
61
60
  std::make_shared<PySequenceIterator>(self, 0, 1)
@@ -69,7 +68,7 @@ namespace Amulet {
69
68
  void Sequence_reversed(clsT cls) {
70
69
  cls.def(
71
70
  "__reversed__",
72
- [](py::object self) -> py::collections::Iterator<elemT> {
71
+ [](py::object self) -> Amulet::pybind11::collections::Iterator<elemT> {
73
72
  return py::cast(
74
73
  static_cast<std::shared_ptr<Amulet::collections::Iterator>>(
75
74
  std::make_shared<PySequenceIterator>(self, py::len(self) - 1, -1)
@@ -114,7 +113,7 @@ namespace Amulet {
114
113
  }
115
114
  }
116
115
 
117
- if (py::equals(value, obj)) {
116
+ if (value.equal(obj)) {
118
117
  return start;
119
118
  }
120
119
 
@@ -135,7 +134,7 @@ namespace Amulet {
135
134
  size_t size = py::len(self);
136
135
  py::object getitem = self.attr("__getitem__");
137
136
  for (size_t i = 0; i < size; ++i) {
138
- if (py::equals(value, getitem(i))) {
137
+ if (value.equal(getitem(i))) {
139
138
  count++;
140
139
  }
141
140
  }
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import collections.abc
3
4
  import types
4
5
  import typing
5
6
 
@@ -22,10 +23,10 @@ class Mapping:
22
23
  def __iter__(self) -> typing.Iterator: ...
23
24
  def __len__(self) -> int: ...
24
25
  def __repr__(self) -> str: ...
25
- def get(self, arg0: typing.Any, arg1: typing.Any) -> typing.Any: ...
26
- def items(self) -> typing.Any: ...
27
- def keys(self) -> typing.Any: ...
28
- def values(self) -> typing.Any: ...
26
+ def get(self, arg0: typing.Any, arg1: typing.Any | None) -> typing.Any | None: ...
27
+ def items(self) -> collections.abc.ItemsView[typing.Any, typing.Any]: ...
28
+ def keys(self) -> collections.abc.KeysView[typing.Any]: ...
29
+ def values(self) -> collections.abc.ValuesView[typing.Any]: ...
29
30
 
30
31
  class MutableMapping(Mapping):
31
32
  def __delitem__(self, arg0: typing.Any) -> None: ...
@@ -33,5 +34,7 @@ class MutableMapping(Mapping):
33
34
  def clear(self) -> None: ...
34
35
  def pop(self, key: typing.Any, default: typing.Any = ...) -> typing.Any: ...
35
36
  def popitem(self) -> tuple[typing.Any, typing.Any]: ...
36
- def setdefault(self, arg0: typing.Any, arg1: typing.Any) -> typing.Any: ...
37
+ def setdefault(
38
+ self, arg0: typing.Any, arg1: typing.Any | None
39
+ ) -> typing.Any | None: ...
37
40
  def update(self, other: typing.Any = (), **kwargs) -> None: ...
@@ -54,28 +54,30 @@ class Entity(PlatformVersionContainer):
54
54
  self._nbt = nbt
55
55
 
56
56
  def __getstate__(self) -> tuple[tuple[str, VersionNumber], tuple[str, str, float, float, float, NamedTag]]: # type: ignore[override]
57
- return (
58
- super().__getstate__(),
59
- (
60
- self._namespace,
61
- self._base_name,
62
- self._x,
63
- self._y,
64
- self._z,
65
- self._nbt,
66
- ),
67
- )
57
+ raise NotImplementedError
58
+ # return (
59
+ # super().__getstate__(),
60
+ # (
61
+ # self._namespace,
62
+ # self._base_name,
63
+ # self._x,
64
+ # self._y,
65
+ # self._z,
66
+ # self._nbt,
67
+ # ),
68
+ # )
68
69
 
69
70
  def __setstate__(self, state: tuple[tuple[str, VersionNumber], tuple[str, str, float, float, float, NamedTag]]) -> None: # type: ignore[override]
70
- super().__setstate__(state[0])
71
- (
72
- self._namespace,
73
- self._base_name,
74
- self._x,
75
- self._y,
76
- self._z,
77
- self._nbt,
78
- ) = state[1]
71
+ raise NotImplementedError
72
+ # super().__setstate__(state[0])
73
+ # (
74
+ # self._namespace,
75
+ # self._base_name,
76
+ # self._x,
77
+ # self._y,
78
+ # self._z,
79
+ # self._nbt,
80
+ # ) = state[1]
79
81
 
80
82
  def __eq__(self, other: Any) -> bool:
81
83
  if not isinstance(other, Entity):
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from typing import List, overload, Literal, TypeVar
2
+ from typing import overload, Literal, TypeVar
3
3
  from dataclasses import dataclass, field
4
4
  from copy import deepcopy
5
5
  from enum import Enum
@@ -336,7 +336,7 @@ class RawTextComponent:
336
336
  section_text: str,
337
337
  section_parser: type[AbstractSectionParser],
338
338
  split_newline: Literal[True],
339
- ) -> List[RawTextComponent]: ...
339
+ ) -> list[RawTextComponent]: ...
340
340
 
341
341
  @classmethod
342
342
  def from_section_text(
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
- from typing import Any, Protocol, cast, Self, ClassVar
4
- from abc import ABC, abstractmethod, ABCMeta
3
+ from typing import Any, Protocol, cast, Self, ClassVar, TypeVar
4
+ from abc import abstractmethod, ABCMeta
5
5
 
6
6
  from amulet_nbt import (
7
7
  read_snbt,
@@ -65,10 +65,17 @@ class Data(Protocol):
65
65
  def __eq__(self, other: Any) -> bool: ...
66
66
 
67
67
 
68
+ class TranslationFunctionProtocol(Protocol):
69
+ _instances: ClassVar[dict[Self, Self]]
70
+
71
+
72
+ T = TypeVar("T", bound=TranslationFunctionProtocol)
73
+
74
+
68
75
  class CacheMeta(ABCMeta):
69
76
  """This modifies the construction of the instance to always return a cached instance, if one exists."""
70
77
 
71
- def __call__(cls: type[AbstractBaseTranslationFunction], *args: Any, **kwargs: Any) -> AbstractBaseTranslationFunction: # type: ignore
78
+ def __call__(cls: type[T], *args: Any, **kwargs: Any) -> T: # type: ignore
72
79
  obj = cls.__new__(cls)
73
80
  obj.__init__(*args, **kwargs) # type: ignore
74
81
  return cls._instances.setdefault(obj, obj)
@@ -0,0 +1,10 @@
1
+ import os
2
+
3
+
4
+ def _get_path(file: str) -> str:
5
+ return os.path.abspath(os.path.join(os.path.dirname(__file__), file))
6
+
7
+
8
+ missing_no_icon_path = _get_path("missing_no.png")
9
+ missing_pack_icon_path = _get_path("missing_pack.png")
10
+ missing_world_icon_path = _get_path("missing_world.png")