amulet-core 2.0a7__cp312-cp312-win_amd64.whl → 2.0.1a2.post250529084747__cp312-cp312-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 (325) hide show
  1. amulet/core/__init__.py +36 -0
  2. amulet/core/__pyinstaller/hook-amulet.core.py +4 -0
  3. amulet/core/_amulet_core.cp312-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.0a7.dist-info → amulet_core-2.0.1a2.post250529084747.dist-info}/METADATA +25 -20
  40. amulet_core-2.0.1a2.post250529084747.dist-info/RECORD +45 -0
  41. {amulet_core-2.0a7.dist-info → amulet_core-2.0.1a2.post250529084747.dist-info}/WHEEL +1 -1
  42. amulet_core-2.0.1a2.post250529084747.dist-info/entry_points.txt +2 -0
  43. amulet/__init__.cp312-win_amd64.pyd +0 -0
  44. amulet/__init__.py.cpp +0 -43
  45. amulet/__init__.pyi +0 -28
  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 -99
  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 -335
  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__.py +0 -1
  195. amulet/mesh/block/block_mesh.py +0 -369
  196. amulet/mesh/block/cube.py +0 -149
  197. amulet/mesh/block/missing_block.py +0 -20
  198. amulet/mesh/util.py +0 -17
  199. amulet/palette/biome_palette.hpp +0 -85
  200. amulet/palette/block_palette.cpp +0 -32
  201. amulet/palette/block_palette.hpp +0 -93
  202. amulet/player.py +0 -62
  203. amulet/pybind11/collections.hpp +0 -118
  204. amulet/pybind11/numpy.hpp +0 -26
  205. amulet/pybind11/py_module.hpp +0 -34
  206. amulet/pybind11/type_hints.hpp +0 -51
  207. amulet/pybind11/types.hpp +0 -25
  208. amulet/pybind11/typing.hpp +0 -7
  209. amulet/resource_pack/__init__.py +0 -62
  210. amulet/resource_pack/abc/__init__.py +0 -2
  211. amulet/resource_pack/abc/resource_pack.py +0 -38
  212. amulet/resource_pack/abc/resource_pack_manager.py +0 -87
  213. amulet/resource_pack/bedrock/__init__.py +0 -2
  214. amulet/resource_pack/bedrock/bedrock_vanilla_fix/pack_icon.png +0 -0
  215. amulet/resource_pack/bedrock/bedrock_vanilla_fix/textures/blocks/grass_carried.png +0 -0
  216. amulet/resource_pack/bedrock/bedrock_vanilla_fix/textures/blocks/grass_side_carried.png +0 -0
  217. amulet/resource_pack/bedrock/bedrock_vanilla_fix/textures/blocks/water.png +0 -0
  218. amulet/resource_pack/bedrock/blockshapes/__init__.py +0 -31
  219. amulet/resource_pack/bedrock/blockshapes/air.py +0 -35
  220. amulet/resource_pack/bedrock/blockshapes/base_blockshape.py +0 -29
  221. amulet/resource_pack/bedrock/blockshapes/bubble_column.py +0 -29
  222. amulet/resource_pack/bedrock/blockshapes/cake.py +0 -46
  223. amulet/resource_pack/bedrock/blockshapes/chest.py +0 -54
  224. amulet/resource_pack/bedrock/blockshapes/comparator.py +0 -51
  225. amulet/resource_pack/bedrock/blockshapes/cross_texture.py +0 -186
  226. amulet/resource_pack/bedrock/blockshapes/cross_texture0.py +0 -17
  227. amulet/resource_pack/bedrock/blockshapes/cross_texture_green.py +0 -16
  228. amulet/resource_pack/bedrock/blockshapes/cube.py +0 -38
  229. amulet/resource_pack/bedrock/blockshapes/default.py +0 -14
  230. amulet/resource_pack/bedrock/blockshapes/door.py +0 -38
  231. amulet/resource_pack/bedrock/blockshapes/door1.py +0 -14
  232. amulet/resource_pack/bedrock/blockshapes/door2.py +0 -14
  233. amulet/resource_pack/bedrock/blockshapes/door3.py +0 -14
  234. amulet/resource_pack/bedrock/blockshapes/door4.py +0 -14
  235. amulet/resource_pack/bedrock/blockshapes/door5.py +0 -14
  236. amulet/resource_pack/bedrock/blockshapes/door6.py +0 -14
  237. amulet/resource_pack/bedrock/blockshapes/double_plant.py +0 -40
  238. amulet/resource_pack/bedrock/blockshapes/enchanting_table.py +0 -22
  239. amulet/resource_pack/bedrock/blockshapes/farmland.py +0 -22
  240. amulet/resource_pack/bedrock/blockshapes/fence.py +0 -22
  241. amulet/resource_pack/bedrock/blockshapes/flat.py +0 -55
  242. amulet/resource_pack/bedrock/blockshapes/flat_wall.py +0 -55
  243. amulet/resource_pack/bedrock/blockshapes/furnace.py +0 -44
  244. amulet/resource_pack/bedrock/blockshapes/furnace_lit.py +0 -14
  245. amulet/resource_pack/bedrock/blockshapes/green_cube.py +0 -39
  246. amulet/resource_pack/bedrock/blockshapes/ladder.py +0 -36
  247. amulet/resource_pack/bedrock/blockshapes/lilypad.py +0 -14
  248. amulet/resource_pack/bedrock/blockshapes/partial_block.py +0 -57
  249. amulet/resource_pack/bedrock/blockshapes/piston.py +0 -44
  250. amulet/resource_pack/bedrock/blockshapes/piston_arm.py +0 -72
  251. amulet/resource_pack/bedrock/blockshapes/portal_frame.py +0 -22
  252. amulet/resource_pack/bedrock/blockshapes/pressure_plate.py +0 -29
  253. amulet/resource_pack/bedrock/blockshapes/pumpkin.py +0 -36
  254. amulet/resource_pack/bedrock/blockshapes/pumpkin_carved.py +0 -14
  255. amulet/resource_pack/bedrock/blockshapes/pumpkin_lit.py +0 -14
  256. amulet/resource_pack/bedrock/blockshapes/red_dust.py +0 -14
  257. amulet/resource_pack/bedrock/blockshapes/repeater.py +0 -53
  258. amulet/resource_pack/bedrock/blockshapes/slab.py +0 -33
  259. amulet/resource_pack/bedrock/blockshapes/slab_double.py +0 -15
  260. amulet/resource_pack/bedrock/blockshapes/tree.py +0 -41
  261. amulet/resource_pack/bedrock/blockshapes/turtle_egg.py +0 -15
  262. amulet/resource_pack/bedrock/blockshapes/vine.py +0 -52
  263. amulet/resource_pack/bedrock/blockshapes/wall.py +0 -22
  264. amulet/resource_pack/bedrock/blockshapes/water.py +0 -38
  265. amulet/resource_pack/bedrock/download_resources.py +0 -147
  266. amulet/resource_pack/bedrock/resource_pack.py +0 -40
  267. amulet/resource_pack/bedrock/resource_pack_manager.py +0 -361
  268. amulet/resource_pack/bedrock/sort_blockshapes.py +0 -15
  269. amulet/resource_pack/java/__init__.py +0 -2
  270. amulet/resource_pack/java/download_resources.py +0 -212
  271. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_black.png +0 -0
  272. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_blue.png +0 -0
  273. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_brown.png +0 -0
  274. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_cyan.png +0 -0
  275. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_gray.png +0 -0
  276. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_green.png +0 -0
  277. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_light_blue.png +0 -0
  278. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_light_gray.png +0 -0
  279. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_lime.png +0 -0
  280. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_magenta.png +0 -0
  281. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_orange.png +0 -0
  282. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_pink.png +0 -0
  283. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_purple.png +0 -0
  284. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_red.png +0 -0
  285. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_white.png +0 -0
  286. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/banner/banner_yellow.png +0 -0
  287. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/barrier.png +0 -0
  288. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/end_portal.png +0 -0
  289. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/grass.png +0 -0
  290. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/lava.png +0 -0
  291. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/structure_void.png +0 -0
  292. amulet/resource_pack/java/java_vanilla_fix/assets/minecraft/textures/block/water.png +0 -0
  293. amulet/resource_pack/java/java_vanilla_fix/pack.png +0 -0
  294. amulet/resource_pack/java/resource_pack.py +0 -44
  295. amulet/resource_pack/java/resource_pack_manager.py +0 -551
  296. amulet/resource_pack/unknown_resource_pack.py +0 -10
  297. amulet/selection/__init__.py +0 -2
  298. amulet/selection/abstract_selection.py +0 -342
  299. amulet/selection/box.py +0 -852
  300. amulet/selection/group.py +0 -481
  301. amulet/utils/__init__.pyi +0 -23
  302. amulet/utils/call_spec/__init__.py +0 -24
  303. amulet/utils/call_spec/_call_spec.py +0 -257
  304. amulet/utils/comment_json.py +0 -188
  305. amulet/utils/format_utils.py +0 -41
  306. amulet/utils/generator.py +0 -18
  307. amulet/utils/matrix.py +0 -243
  308. amulet/utils/numpy.hpp +0 -36
  309. amulet/utils/numpy.pyi +0 -11
  310. amulet/utils/numpy_helpers.py +0 -19
  311. amulet/utils/shareable_lock.py +0 -335
  312. amulet/utils/signal/__init__.py +0 -10
  313. amulet/utils/signal/_signal.py +0 -228
  314. amulet/utils/task_manager.py +0 -235
  315. amulet/utils/typed_property.py +0 -111
  316. amulet/utils/weakref.py +0 -70
  317. amulet/utils/world_utils.py +0 -102
  318. amulet/version.cpp +0 -136
  319. amulet/version.hpp +0 -142
  320. amulet/version.py.cpp +0 -281
  321. amulet_core-2.0a7.dist-info/RECORD +0 -295
  322. amulet_core-2.0a7.dist-info/entry_points.txt +0 -2
  323. /amulet/{__pyinstaller → core/__pyinstaller}/__init__.py +0 -0
  324. /amulet/{py.typed → core/py.typed} +0 -0
  325. {amulet_core-2.0a7.dist-info → amulet_core-2.0.1a2.post250529084747.dist-info}/top_level.txt +0 -0
@@ -1,531 +0,0 @@
1
- #include <memory>
2
- #include <map>
3
- #include <cstdint>
4
- #include <stdexcept>
5
- #include <type_traits>
6
- #include <string>
7
- #include <functional>
8
- #include <variant>
9
- #include <algorithm>
10
-
11
- #include <pybind11/pybind11.h>
12
-
13
- #include <amulet_nbt/tag/named_tag.hpp>
14
- #include <amulet_nbt/tag/compound.hpp>
15
-
16
- #include <amulet/version.hpp>
17
- #include <amulet/block.hpp>
18
- #include <amulet/chunk.hpp>
19
- #include <amulet/level/java/java_chunk.hpp>
20
- #include <amulet/level/java/long_array.hpp>
21
-
22
- namespace py = pybind11;
23
- using namespace AmuletNBT;
24
-
25
- namespace Amulet {
26
- template <typename tagT>
27
- tagT get_tag(const CompoundTag& compound, std::string name, std::function<tagT()> get_default) {
28
- const auto& it = compound.find(name);
29
- if (
30
- it != compound.end() &&
31
- std::holds_alternative<tagT>(it->second)
32
- ) {
33
- return std::get<tagT>(it->second);
34
- }
35
- return get_default();
36
- }
37
-
38
- template <typename tagT>
39
- tagT pop_tag(CompoundTag& compound, std::string name, std::function<tagT()> get_default) {
40
- auto node = compound.extract(name);
41
- if (
42
- node &&
43
- std::holds_alternative<tagT>(node.mapped())
44
- ) {
45
- return std::get<tagT>(node.mapped());
46
- }
47
- return get_default();
48
- }
49
-
50
- CompoundTagPtr get_region(const std::map<std::string, NamedTag>& raw_chunk) {
51
- const auto& it = raw_chunk.find("region");
52
- if (
53
- it != raw_chunk.end() &&
54
- std::holds_alternative<CompoundTagPtr>(it->second.tag_node)
55
- ) {
56
- return std::get<CompoundTagPtr>(it->second.tag_node);
57
- }
58
- return std::make_shared<CompoundTag>();
59
- }
60
-
61
- CompoundTagPtr get_level(const CompoundTag& region) {
62
- return get_tag<CompoundTagPtr>(
63
- region,
64
- "Level",
65
- []() { return std::make_shared<CompoundTag>(); }
66
- );
67
- }
68
-
69
- std::int64_t validate_coords(
70
- CompoundTag& level,
71
- std::int64_t cx,
72
- std::int64_t cz
73
- ) {
74
- if (
75
- pop_tag<IntTag>(level, "xPos", []() { return IntTag(); }).value != cx ||
76
- pop_tag<IntTag>(level, "zPos", []() { return IntTag(); }).value != cz
77
- ) {
78
- throw std::runtime_error("Chunk coord data is incorrect.");
79
- }
80
- std::int64_t cy = pop_tag<IntTag>(level, "yPos", []() { return IntTag(); }).value;
81
- return cy << 4;
82
- }
83
-
84
- template <typename chunkT>
85
- void decode_last_update(chunkT& chunk, CompoundTag& level) {
86
- // TODO
87
- //pop_tag<LongTag>(level, "LastUpdate", []() { return LongTag(); }).value;
88
- }
89
-
90
- template <typename chunkT>
91
- void decode_inhabited_time(chunkT& chunk, CompoundTag& level) {
92
- // TODO
93
- //pop_tag<LongTag>(level, "InhabitedTime", []() { return LongTag(); }).value;
94
- }
95
-
96
- template <typename chunkT>
97
- void decode_terrain_populated(chunkT& chunk, CompoundTag& level) {
98
- // TODO
99
- //pop_tag<ByteTag>(level, "TerrainPopulated", []() { return ByteTag(1); }).value;
100
- }
101
-
102
- template <typename chunkT>
103
- void decode_light_populated(chunkT& chunk, CompoundTag& level) {
104
- // TODO
105
- //pop_tag<ByteTag>(level, "LightPopulated", []() { return ByteTag(1); }).value;
106
- }
107
-
108
- template <typename chunkT>
109
- void decode_status(chunkT& chunk, CompoundTag& level, std::int64_t data_version) {
110
- // TODO
111
- /*std::string status = pop_tag<StringTag>(level, "Status", []() { return StringTag(); });
112
- if (!status.empty()) {
113
- chunk.set_status(status);
114
- }
115
- else if (data_version >= 3454) {
116
- chunk.set_status("minecraft:full");
117
- }
118
- else if (data_version >= 1912) {
119
- chunk.set_status("full");
120
- }
121
- else {
122
- chunk.set_status("postprocessed");
123
- }*/
124
- }
125
-
126
- template <typename chunkT>
127
- void decode_heightmap(chunkT& chunk, CompoundTag& level) {
128
- // TODO
129
- }
130
-
131
- template <typename chunkT>
132
- void decode_heightmaps_compound(chunkT& chunk, CompoundTag& level) {
133
- // TODO
134
- }
135
-
136
- template <int DataVersion>
137
- std::shared_ptr<JavaChunk> _decode_java_chunk(
138
- py::object game_version,
139
- std::map<std::string, NamedTag>& raw_chunk,
140
- CompoundTag& region,
141
- std::int64_t cx,
142
- std::int64_t cz,
143
- std::shared_ptr<VersionNumber> version,
144
- std::int64_t data_version,
145
- std::shared_ptr<BlockStack> default_block,
146
- std::shared_ptr<Biome> default_biome,
147
- std::function<std::shared_ptr<Block>()> get_water
148
- ) {
149
- // Validate coordinates
150
- CompoundTagPtr level_ptr;
151
- CompoundTag& level = [&]() -> CompoundTag& {
152
- if constexpr (DataVersion >= 2203) {
153
- return data_version >= 2844 ? region : *(level_ptr = get_level(region));
154
- }
155
- else {
156
- level_ptr = get_level(region);
157
- return *level_ptr;
158
-
159
- }
160
- }();
161
- auto floor_y = validate_coords(level, cx, cz);
162
-
163
- // Make the chunk
164
- auto chunk_ptr = [&]() {
165
- if constexpr (DataVersion >= 2203) {
166
- return std::make_shared<JavaChunk2203>(
167
- data_version,
168
- default_block,
169
- default_biome
170
- );
171
- }
172
- else if constexpr (DataVersion >= 1466) {
173
- return std::make_shared<JavaChunk1466>(
174
- data_version,
175
- default_block,
176
- default_biome
177
- );
178
- }
179
- else if constexpr (DataVersion >= 1444) {
180
- return std::make_shared<JavaChunk1444>(
181
- data_version,
182
- default_block,
183
- default_biome
184
- );
185
- }
186
- else if constexpr (DataVersion >= 0) {
187
- return std::make_shared<JavaChunk0>(
188
- data_version,
189
- default_block,
190
- default_biome
191
- );
192
- }
193
- else {
194
- return std::make_shared<JavaChunkNA>(
195
- default_block,
196
- default_biome
197
- );
198
- }
199
- }();
200
- auto& chunk = *chunk_ptr;
201
-
202
- if constexpr (DataVersion == -1) {
203
- // LegacyVersionComponent TODO
204
- //pop_tag<ByteTag>(*level, "V", []() { return ByteTag(1); });
205
- }
206
-
207
- decode_last_update(chunk, level);
208
- decode_inhabited_time(chunk, level);
209
-
210
- // Status
211
- if constexpr (DataVersion >= 1444) {
212
- decode_status(chunk, level, data_version);
213
- }
214
- else {
215
- decode_terrain_populated(chunk, level);
216
- decode_light_populated(chunk, level);
217
- }
218
-
219
- // Heightmaps
220
- if constexpr (DataVersion >= 1466) {
221
- decode_heightmaps_compound(chunk, level);
222
- }
223
- else {
224
- decode_heightmap(chunk, level);
225
- }
226
-
227
- // Sections
228
- ListTagPtr sections_ptr = get_tag<ListTagPtr>(level, "sections", []() { return std::make_shared<ListTag>(); });
229
- if (!std::holds_alternative<CompoundListTag>(*sections_ptr)) {
230
- throw std::invalid_argument("Chunk sections is not a list of compound tags.");
231
- }
232
- auto& sections = std::get<CompoundListTag>(*sections_ptr);
233
- std::map<std::int64_t, CompoundTagPtr> sections_map;
234
- for (auto& tag : sections) {
235
- sections_map.emplace(
236
- get_tag<ByteTag>(*tag, "Y", []() { return ByteTag(); }).value,
237
- tag
238
- );
239
- }
240
-
241
- // blocks
242
- auto block_component = chunk.get_block();
243
- auto block_palette = block_component->get_palette();
244
- auto block_sections = block_component->get_sections();
245
- if constexpr (DataVersion >= 1444) {
246
- // Palette format
247
- // if data_version >= 2844:
248
- // region.sections[].block_states.data
249
- // region.sections[].block_states.palette
250
- // elif data_version >= 2836:
251
- // region.Level.Sections[].block_states.data
252
- // region.Level.Sections[].block_states.palette
253
- // else:
254
- // region.Level.Sections[].BlockStates
255
- // region.Level.Sections[].Palette
256
-
257
- // TODO: move this to C++
258
- py::object Waterloggable = py::module::import("amulet.game.java").attr("Waterloggable");
259
- py::object WaterloggableYes = Waterloggable.attr("Yes");
260
- py::object WaterloggableAlways = Waterloggable.attr("Always");
261
-
262
- for (auto& [cy, section] : sections_map) {
263
- auto [palette_tag, data_tag] = [&]() {
264
- if (data_version >= 2836) {
265
- auto block_states_tag = pop_tag<CompoundTagPtr>(*section, "block_states", []() { return std::make_shared<CompoundTag>(); });
266
- return std::make_pair(
267
- pop_tag<ListTagPtr>(*block_states_tag, "palette", []() { return std::make_shared<ListTag>(); }),
268
- pop_tag<LongArrayTagPtr>(*block_states_tag, "data", []() { return std::make_shared<LongArrayTag>(); })
269
- );
270
- }
271
- else {
272
- return std::make_pair(
273
- pop_tag<ListTagPtr>(*section, "Palette", []() { return std::make_shared<ListTag>(); }),
274
- pop_tag<LongArrayTagPtr>(*section, "BlockStates", []() { return std::make_shared<LongArrayTag>(); })
275
- );
276
- }
277
- }();
278
- if (!std::holds_alternative<CompoundListTag>(*palette_tag)) { continue; }
279
- const auto& palette = std::get<CompoundListTag>(*palette_tag);
280
- size_t palette_size = palette.size();
281
- std::vector<std::uint32_t> lut;
282
- lut.reserve(palette_size);
283
- for (auto& block_tag : palette) {
284
- auto block_name = get_tag<StringTag>(*block_tag, "Name", []() -> StringTag { throw std::invalid_argument("Block has no Name attribute."); });
285
- auto colon_index = block_name.find(':');
286
- auto [block_namespace, block_base_name] = [&]() -> std::pair<std::string, std::string> {
287
- if (colon_index == std::string::npos) {
288
- return std::make_pair("", block_name);
289
- }
290
- else {
291
- return std::make_pair(
292
- block_name.substr(0, colon_index),
293
- block_name.substr(colon_index + 1)
294
- );
295
- }
296
- }();
297
- auto properties_tag = get_tag<CompoundTagPtr>(*block_tag, "Properties", []() { return std::make_shared<CompoundTag>(); });
298
- std::map<std::string, PropertyValueType> block_properties;
299
- for (const auto& [k, v] : *properties_tag) {
300
- std::visit([&block_properties, &k](auto&& arg) {
301
- using T = std::decay_t<decltype(arg)>;
302
- if constexpr (
303
- std::is_same_v<T, AmuletNBT::ByteTag> ||
304
- std::is_same_v<T, AmuletNBT::ShortTag> ||
305
- std::is_same_v<T, AmuletNBT::IntTag> ||
306
- std::is_same_v<T, AmuletNBT::LongTag> ||
307
- std::is_same_v<T, AmuletNBT::StringTag>
308
- ) {
309
- block_properties.emplace(k, arg);
310
- }
311
- }, v);
312
- }
313
- std::vector<std::shared_ptr<Block>> blocks;
314
-
315
- // TODO: convert this to C++
316
- py::object waterloggable = game_version.attr("block").attr("waterloggable")(block_namespace, block_base_name);
317
- if (waterloggable.equal(WaterloggableYes)) {
318
- auto waterlogged_it = block_properties.find("waterlogged");
319
- if (
320
- waterlogged_it != block_properties.end() and
321
- std::holds_alternative<StringTag>(waterlogged_it->second)
322
- ) {
323
- if (std::get<StringTag>(waterlogged_it->second) == "true") {
324
- blocks.push_back(get_water());
325
- }
326
- block_properties.erase(waterlogged_it);
327
- }
328
- }
329
- else if (waterloggable.equal(WaterloggableAlways)) {
330
- blocks.push_back(get_water());
331
- }
332
- blocks.insert(
333
- blocks.begin(),
334
- std::make_shared<Block>(
335
- "java",
336
- version,
337
- block_namespace,
338
- block_base_name,
339
- block_properties
340
- )
341
- );
342
-
343
- lut.push_back(
344
- block_palette->block_stack_to_index(
345
- std::make_shared<BlockStack>(blocks)
346
- )
347
- );
348
- }
349
-
350
- block_sections->set_section(
351
- cy,
352
- [&] {
353
- if (data_tag->empty()) {
354
- return std::make_shared<IndexArray3D>(
355
- std::make_tuple<std::uint16_t>(16, 16, 16),
356
- 0
357
- );
358
- }
359
- else {
360
- std::vector<std::uint32_t> decoded_vector(4096);
361
- std::span<std::uint32_t> decoded_span(decoded_vector);
362
- Amulet::decode_long_array(
363
- std::span<std::uint64_t>(reinterpret_cast<std::uint64_t*>(data_tag->data()), data_tag->size()),
364
- decoded_span,
365
- std::max<std::uint8_t>(4, std::bit_width(palette_size - 1)),
366
- data_version <= 2529
367
- );
368
- auto index_array = std::make_shared<IndexArray3D>(
369
- std::make_tuple<std::uint16_t>(16, 16, 16)
370
- );
371
- std::span<std::uint32_t> index_array_span(index_array->get_buffer(), index_array->get_size());
372
- // Convert YZX to XYZ and look up in lut.
373
- for (size_t y = 0; y < 16; y++) {
374
- for (size_t x = 0; x < 16; x++) {
375
- for (size_t z = 0; z < 16; z++) {
376
- auto& block_index = decoded_span[y * 256 + z * 16 + x];
377
- if (palette_size <= block_index) {
378
- throw std::runtime_error(
379
- "Block index at cx=" + std::to_string(cx) +
380
- ",cy=" + std::to_string(cy) +
381
- ",cz=" + std::to_string(cx) +
382
- ",dx=" + std::to_string(x) +
383
- ",dy=" + std::to_string(y) +
384
- ",dz=" + std::to_string(z) +
385
- " is larger than the block palette size."
386
- );
387
- }
388
- index_array_span[x * 256 + y * 16 + z] = lut[block_index];
389
- }
390
- }
391
- }
392
- return index_array;
393
- }
394
- }()
395
- );
396
- }
397
- }
398
- else {
399
- // Numerical format
400
- throw std::runtime_error("NotImplemented");
401
- }
402
-
403
- // TODO: biomes
404
-
405
- // Return the chunk
406
- return chunk_ptr;
407
- }
408
-
409
-
410
- // Get the default block for this dimension and version via the python API.
411
- std::shared_ptr<BlockStack> get_default_block(
412
- py::object dimension,
413
- const VersionRange& version_range
414
- ) {
415
- auto default_block = dimension.attr("default_block")().cast<std::shared_ptr<BlockStack>>();
416
- std::vector<std::shared_ptr<Block>> blocks;
417
- for (const auto& block : default_block->get_blocks()) {
418
- if (version_range.contains(block->get_platform(), *block->get_version())) {
419
- blocks.push_back(block);
420
- }
421
- else {
422
- py::object block_ = py::module::import("amulet.game").attr("get_game_version")(
423
- py::cast(block->get_platform()),
424
- py::cast(block->get_version())
425
- ).attr("block").attr("translate")(
426
- "java",
427
- py::cast(version_range.get_max_version()),
428
- py::cast(block)
429
- ).attr("__getitem__")(0);
430
- if (py::isinstance<Block>(block_)) {
431
- blocks.push_back(block_.cast<std::shared_ptr<Block>>());
432
- }
433
- }
434
- }
435
- if (blocks.empty()) {
436
- blocks.push_back(
437
- std::make_shared<Block>(
438
- version_range.get_platform(),
439
- version_range.get_max_version(),
440
- "minecraft",
441
- "air"
442
- )
443
- );
444
- }
445
- return std::make_shared<BlockStack>(blocks);
446
- }
447
-
448
- std::shared_ptr<Biome> get_default_biome(
449
- py::object dimension,
450
- const VersionRange& version_range
451
- ) {
452
- auto biome = dimension.attr("default_biome")().cast<std::shared_ptr<Biome>>();
453
- if (version_range.contains(biome->get_platform(), *biome->get_version())) {
454
- return biome;
455
- }
456
- else {
457
- return py::module::import("amulet.game").attr("get_game_version")(
458
- py::cast(biome->get_platform()),
459
- py::cast(biome->get_version())
460
- ).attr("biome").attr("translate")(
461
- "java",
462
- py::cast(version_range.get_max_version()),
463
- py::cast(biome)
464
- ).cast<std::shared_ptr<Biome>>();
465
- }
466
- }
467
-
468
- std::shared_ptr<JavaChunk> decode_java_chunk(
469
- py::object raw_level,
470
- py::object dimension,
471
- std::map<std::string, NamedTag>& raw_chunk,
472
- std::int64_t cx,
473
- std::int64_t cz
474
- ) {
475
- // Get the region compound tag
476
- CompoundTagPtr region = get_region(raw_chunk);
477
-
478
- std::int64_t data_version = pop_tag<IntTag>(
479
- *region,
480
- "DataVersion",
481
- []() { return IntTag(-1); }
482
- ).value;
483
-
484
- auto version = std::make_shared<VersionNumber>(std::initializer_list<std::int64_t>{ data_version });
485
- auto version_range = std::make_shared<VersionRange>("java", version, version);
486
- auto default_block = get_default_block(dimension, *version_range);
487
- auto default_biome = get_default_biome(dimension, *version_range);
488
- py::object game_version = py::module::import("amulet.game").attr("get_game_version")("java", py::cast(version));
489
-
490
- std::shared_ptr<Block> _water_block;
491
- auto get_water = [&version, &_water_block]() {
492
- if (!_water_block) {
493
- py::object block = py::module::import("amulet.game").attr("get_game_version")(
494
- "java",
495
- VersionNumber({ 3837 })
496
- ).attr("block").attr("translate")(
497
- "java",
498
- version,
499
- Block(
500
- "java",
501
- VersionNumber({ 3837 }),
502
- "minecraft",
503
- "water",
504
- std::initializer_list<BlockProperites::value_type>{ {"level", StringTag("0")} }
505
- )
506
- ).attr("__getitem__")(0);
507
- if (!py::isinstance<Block>(block)) {
508
- throw std::runtime_error("Water block did not convert to a block in version Java " + version->toString());
509
- }
510
- _water_block = block.cast<std::shared_ptr<Block>>();
511
- }
512
- return _water_block;
513
- };
514
-
515
- if (data_version >= 2203) {
516
- return _decode_java_chunk<2203>(game_version, raw_chunk, *region, cx, cz, version, data_version, default_block, default_biome, get_water);
517
- }
518
- else if (data_version >= 1466) {
519
- return _decode_java_chunk<1466>(game_version, raw_chunk, *region, cx, cz, version, data_version, default_block, default_biome, get_water);
520
- }
521
- else if (data_version >= 1444) {
522
- return _decode_java_chunk<1444>(game_version, raw_chunk, *region, cx, cz, version, data_version, default_block, default_biome, get_water);
523
- }
524
- else if (data_version >= 0) {
525
- return _decode_java_chunk<0>(game_version, raw_chunk, *region, cx, cz, version, data_version, default_block, default_biome, get_water);
526
- }
527
- else {
528
- return _decode_java_chunk<-1>(game_version, raw_chunk, *region, cx, cz, version, data_version, default_block, default_biome, get_water);
529
- }
530
- }
531
- }
@@ -1,23 +0,0 @@
1
- #pragma once
2
- #include <memory>
3
- #include <map>
4
- #include <cstdint>
5
-
6
- #include <pybind11/pybind11.h>
7
-
8
- #include <amulet_nbt/tag/named_tag.hpp>
9
-
10
- #include <amulet/chunk.hpp>
11
- #include <amulet/level/java/java_chunk.hpp>
12
-
13
- namespace py = pybind11;
14
-
15
- namespace Amulet {
16
- std::shared_ptr<Amulet::JavaChunk> decode_java_chunk(
17
- py::object raw_level,
18
- py::object dimension,
19
- std::map<std::string, AmuletNBT::NamedTag>& raw_chunk,
20
- std::int64_t cx,
21
- std::int64_t cz
22
- );
23
- }
@@ -1,25 +0,0 @@
1
- #include <memory>
2
- #include <map>
3
- #include <cstdint>
4
- #include <stdexcept>
5
-
6
- #include <pybind11/pybind11.h>
7
-
8
- #include <amulet_nbt/tag/named_tag.hpp>
9
-
10
- #include <amulet/chunk.hpp>
11
- #include <amulet/level/java/java_chunk.hpp>
12
-
13
- namespace py = pybind11;
14
-
15
- namespace Amulet {
16
- std::map<std::string, AmuletNBT::NamedTag> encode_java_chunk(
17
- py::object raw_level,
18
- py::object dimension,
19
- std::shared_ptr<Amulet::JavaChunk> chunk,
20
- std::int64_t cx,
21
- std::int64_t cz
22
- ) {
23
- throw std::runtime_error("");
24
- }
25
- }
@@ -1,23 +0,0 @@
1
- #pragma once
2
- #include <memory>
3
- #include <map>
4
- #include <cstdint>
5
-
6
- #include <pybind11/pybind11.h>
7
-
8
- #include <amulet_nbt/tag/named_tag.hpp>
9
-
10
- #include <amulet/chunk.hpp>
11
- #include <amulet/level/java/java_chunk.hpp>
12
-
13
- namespace py = pybind11;
14
-
15
- namespace Amulet {
16
- std::map<std::string, AmuletNBT::NamedTag> encode_java_chunk(
17
- py::object raw_level,
18
- py::object dimension,
19
- std::shared_ptr<Amulet::JavaChunk> chunk,
20
- std::int64_t cx,
21
- std::int64_t cz
22
- );
23
- }
@@ -1,2 +0,0 @@
1
- from ._region import AnvilRegion
2
- from ._dimension import AnvilDimension, AnvilDimensionLayer, RawChunkType