amulet-core 1.9.20__tar.gz → 1.9.22__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 (215) hide show
  1. {amulet-core-1.9.20 → amulet_core-1.9.22}/PKG-INFO +2 -1
  2. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/_version.py +3 -3
  3. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/history_manager/database.py +3 -3
  4. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/base_level/clone.py +6 -6
  5. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/partial_3d_array/bounded_partial_3d_array.py +5 -10
  6. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/partial_3d_array/unbounded_partial_3d_array.py +4 -4
  7. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/registry/biome_manager.py +3 -6
  8. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/registry/block_manager.py +5 -6
  9. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/selection/box.py +1 -3
  10. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/selection/group.py +2 -4
  11. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/wrapper/chunk/interface.py +4 -8
  12. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/wrapper/format_wrapper.py +2 -0
  13. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/anvil_world/format.py +2 -1
  14. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/anvil_world/region.py +48 -0
  15. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/construction/format_wrapper.py +3 -3
  16. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/dimension.py +3 -3
  17. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/base_leveldb_interface.py +6 -6
  18. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/mcstructure/format_wrapper.py +0 -5
  19. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/sponge_schem/format_wrapper.py +1 -3
  20. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_3463.py +1 -1
  21. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet_core.egg-info/PKG-INFO +2 -1
  22. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet_core.egg-info/requires.txt +1 -0
  23. {amulet-core-1.9.20 → amulet_core-1.9.22}/setup.cfg +1 -0
  24. {amulet-core-1.9.20 → amulet_core-1.9.22}/MANIFEST.in +0 -0
  25. {amulet-core-1.9.20 → amulet_core-1.9.22}/README.md +0 -0
  26. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/__init__.py +0 -0
  27. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/__pyinstaller/__init__.py +0 -0
  28. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/__pyinstaller/hook-amulet.py +0 -0
  29. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/__init__.py +0 -0
  30. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/abstract_base_entity.py +0 -0
  31. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/block.py +0 -0
  32. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/block_entity.py +0 -0
  33. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/cache.py +0 -0
  34. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/chunk/__init__.py +0 -0
  35. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/chunk/biomes.py +0 -0
  36. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/chunk/block_entity_dict.py +0 -0
  37. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/chunk/blocks.py +0 -0
  38. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/chunk/chunk.py +0 -0
  39. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/chunk/entity_list.py +0 -0
  40. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/chunk/status.py +0 -0
  41. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/data_types/__init__.py +0 -0
  42. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/data_types/generic_types.py +0 -0
  43. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/data_types/operation_types.py +0 -0
  44. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/data_types/world_types.py +0 -0
  45. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/data_types/wrapper_types.py +0 -0
  46. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/entity.py +0 -0
  47. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/errors.py +0 -0
  48. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/__init__.py +0 -0
  49. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/base/__init__.py +0 -0
  50. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/base/base_history.py +0 -0
  51. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/base/history_manager.py +0 -0
  52. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/base/revision_manager.py +0 -0
  53. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/changeable.py +0 -0
  54. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/data_types.py +0 -0
  55. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/history_manager/__init__.py +0 -0
  56. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/history_manager/container.py +0 -0
  57. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/history_manager/meta.py +0 -0
  58. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/history_manager/object.py +0 -0
  59. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/revision_manager/__init__.py +0 -0
  60. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/revision_manager/disk.py +0 -0
  61. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/history/revision_manager/ram.py +0 -0
  62. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/item.py +0 -0
  63. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/__init__.py +0 -0
  64. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/base_level/__init__.py +0 -0
  65. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/base_level/base_level.py +0 -0
  66. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/base_level/chunk_manager.py +0 -0
  67. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/base_level/player_manager.py +0 -0
  68. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/immutable_structure/__init__.py +0 -0
  69. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/immutable_structure/immutable_structure.py +0 -0
  70. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/immutable_structure/void_format_wrapper.py +0 -0
  71. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/structure.py +0 -0
  72. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/level/world.py +0 -0
  73. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/partial_3d_array/__init__.py +0 -0
  74. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/partial_3d_array/base_partial_3d_array.py +0 -0
  75. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/partial_3d_array/data_types.py +0 -0
  76. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/partial_3d_array/util.py +0 -0
  77. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/player.py +0 -0
  78. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/registry/__init__.py +0 -0
  79. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/registry/base_registry.py +0 -0
  80. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/selection/__init__.py +0 -0
  81. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/selection/abstract_selection.py +0 -0
  82. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/structure.py +0 -0
  83. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/wrapper/__init__.py +0 -0
  84. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/wrapper/chunk/__init__.py +0 -0
  85. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/wrapper/chunk/translator.py +0 -0
  86. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/wrapper/structure_format_wrapper.py +0 -0
  87. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/api/wrapper/world_format_wrapper.py +0 -0
  88. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/img/missing_world_icon.png +0 -0
  89. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/__init__.py +0 -0
  90. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/__init__.py +0 -0
  91. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/anvil_forge_world.py +0 -0
  92. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/anvil_world/__init__.py +0 -0
  93. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/anvil_world/_sector_manager.py +0 -0
  94. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/anvil_world/data_pack/__init__.py +0 -0
  95. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/anvil_world/data_pack/data_pack.py +0 -0
  96. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/anvil_world/data_pack/data_pack_manager.py +0 -0
  97. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/anvil_world/dimension.py +0 -0
  98. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/construction/__init__.py +0 -0
  99. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/construction/interface.py +0 -0
  100. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/construction/section.py +0 -0
  101. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/construction/util.py +0 -0
  102. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/__init__.py +0 -0
  103. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/chunk.py +0 -0
  104. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/format.py +0 -0
  105. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/__init__.py +0 -0
  106. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/__init__.py +0 -0
  107. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/generate_interface.py +0 -0
  108. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_0.py +0 -0
  109. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_1.py +0 -0
  110. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_10.py +0 -0
  111. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_11.py +0 -0
  112. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_12.py +0 -0
  113. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_13.py +0 -0
  114. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_14.py +0 -0
  115. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_15.py +0 -0
  116. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_16.py +0 -0
  117. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_17.py +0 -0
  118. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_18.py +0 -0
  119. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_19.py +0 -0
  120. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_2.py +0 -0
  121. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_20.py +0 -0
  122. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_21.py +0 -0
  123. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_22.py +0 -0
  124. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_23.py +0 -0
  125. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_24.py +0 -0
  126. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_25.py +0 -0
  127. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_26.py +0 -0
  128. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_27.py +0 -0
  129. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_28.py +0 -0
  130. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_29.py +0 -0
  131. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_3.py +0 -0
  132. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_30.py +0 -0
  133. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_31.py +0 -0
  134. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_32.py +0 -0
  135. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_33.py +0 -0
  136. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_34.py +0 -0
  137. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_35.py +0 -0
  138. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_36.py +0 -0
  139. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_37.py +0 -0
  140. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_38.py +0 -0
  141. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_39.py +0 -0
  142. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_4.py +0 -0
  143. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_40.py +0 -0
  144. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_5.py +0 -0
  145. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_6.py +0 -0
  146. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_7.py +0 -0
  147. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_8.py +0 -0
  148. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_9.py +0 -0
  149. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/leveldb_world/interface/chunk/leveldb_chunk_versions.py +0 -0
  150. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/mcstructure/__init__.py +0 -0
  151. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/mcstructure/chunk.py +0 -0
  152. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/mcstructure/interface.py +0 -0
  153. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/schematic/__init__.py +0 -0
  154. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/schematic/chunk.py +0 -0
  155. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/schematic/data_types.py +0 -0
  156. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/schematic/format_wrapper.py +0 -0
  157. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/schematic/interface.py +0 -0
  158. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/sponge_schem/__init__.py +0 -0
  159. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/sponge_schem/chunk.py +0 -0
  160. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/sponge_schem/interface.py +0 -0
  161. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/sponge_schem/varint/__init__.py +0 -0
  162. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/formats/sponge_schem/varint/varint.py +0 -0
  163. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/__init__.py +0 -0
  164. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/__init__.py +0 -0
  165. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/__init__.py +0 -0
  166. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_0.py +0 -0
  167. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_1444.py +0 -0
  168. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_1466.py +0 -0
  169. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_1467.py +0 -0
  170. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_1484.py +0 -0
  171. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_1503.py +0 -0
  172. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_1519.py +0 -0
  173. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_1901.py +0 -0
  174. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_1908.py +0 -0
  175. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_1912.py +0 -0
  176. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_1934.py +0 -0
  177. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_2203.py +0 -0
  178. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_2529.py +0 -0
  179. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_2681.py +0 -0
  180. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_2709.py +0 -0
  181. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_2844.py +0 -0
  182. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/anvil_na.py +0 -0
  183. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/interfaces/chunk/anvil/base_anvil_interface.py +0 -0
  184. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/load.py +0 -0
  185. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/loader.py +0 -0
  186. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/translators/__init__.py +0 -0
  187. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/translators/chunk/__init__.py +0 -0
  188. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/translators/chunk/bedrock/__init__.py +0 -0
  189. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/translators/chunk/bedrock/bedrock_nbt_blockstate_translator.py +0 -0
  190. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/translators/chunk/bedrock/bedrock_numerical_translator.py +0 -0
  191. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/translators/chunk/bedrock/bedrock_psudo_numerical_translator.py +0 -0
  192. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/translators/chunk/java/__init__.py +0 -0
  193. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/translators/chunk/java/java_1_18_translator.py +0 -0
  194. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/translators/chunk/java/java_blockstate_translator.py +0 -0
  195. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/level/translators/chunk/java/java_numerical_translator.py +0 -0
  196. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/libs/__init__.py +0 -0
  197. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/libs/leveldb/__init__.py +0 -0
  198. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/operations/__init__.py +0 -0
  199. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/operations/clone.py +0 -0
  200. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/operations/delete_chunk.py +0 -0
  201. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/operations/fill.py +0 -0
  202. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/operations/paste.py +0 -0
  203. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/operations/replace.py +0 -0
  204. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/utils/__init__.py +0 -0
  205. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/utils/format_utils.py +0 -0
  206. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/utils/generator.py +0 -0
  207. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/utils/matrix.py +0 -0
  208. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/utils/numpy_helpers.py +0 -0
  209. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet/utils/world_utils.py +0 -0
  210. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet_core.egg-info/SOURCES.txt +0 -0
  211. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet_core.egg-info/dependency_links.txt +0 -0
  212. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet_core.egg-info/entry_points.txt +0 -0
  213. {amulet-core-1.9.20 → amulet_core-1.9.22}/amulet_core.egg-info/top_level.txt +0 -0
  214. {amulet-core-1.9.20 → amulet_core-1.9.22}/pyproject.toml +0 -0
  215. {amulet-core-1.9.20 → amulet_core-1.9.22}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: amulet-core
3
- Version: 1.9.20
3
+ Version: 1.9.22
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.
@@ -16,6 +16,7 @@ Requires-Dist: pymctranslate~=1.2
16
16
  Requires-Dist: portalocker~=2.4
17
17
  Requires-Dist: amulet-leveldb~=1.0b0
18
18
  Requires-Dist: platformdirs~=3.1
19
+ Requires-Dist: lz4~=4.3
19
20
  Provides-Extra: docs
20
21
  Requires-Dist: Sphinx>=1.7.4; extra == "docs"
21
22
  Requires-Dist: sphinx-autodoc-typehints>=1.3.0; extra == "docs"
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2023-09-29T11:29:40+0100",
11
+ "date": "2024-04-29T13:55:26+0100",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "b673f749bf1c348e31bf0594e71ffa30f6ea8519",
15
- "version": "1.9.20"
14
+ "full-revisionid": "ac72c15417c9bd86d9332d7a6488311ad1cb30ab",
15
+ "version": "1.9.22"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -153,9 +153,9 @@ class DatabaseHistoryManager(ContainerHistoryManager):
153
153
  ].get_current_entry()
154
154
  else:
155
155
  # If it has not been loaded request it from the raw database.
156
- entry = self._temporary_database[
157
- key
158
- ] = self._get_register_original_entry(key)
156
+ entry = self._temporary_database[key] = (
157
+ self._get_register_original_entry(key)
158
+ )
159
159
  if entry is None:
160
160
  raise self.DoesNotExistError
161
161
  return entry
@@ -116,13 +116,13 @@ def clone(
116
116
  )
117
117
 
118
118
  last_src: Optional[Tuple[int, int]] = None
119
- src_chunk: Optional[
120
- Chunk
121
- ] = None # None here means the chunk does not exist or failed to load. Treat it as if it was air.
119
+ src_chunk: Optional[Chunk] = (
120
+ None # None here means the chunk does not exist or failed to load. Treat it as if it was air.
121
+ )
122
122
  last_dst: Optional[Tuple[int, int]] = None
123
- dst_chunk: Optional[
124
- Chunk
125
- ] = None # None here means the chunk failed to load. Do not modify it.
123
+ dst_chunk: Optional[Chunk] = (
124
+ None # None here means the chunk failed to load. Do not modify it.
125
+ )
126
126
 
127
127
  sum_progress = 0
128
128
  volumes = tuple(
@@ -252,8 +252,7 @@ class BoundedPartial3DArray(BasePartial3DArray):
252
252
  @overload
253
253
  def __getitem__(
254
254
  self, slices: Tuple[IntegerType, IntegerType, IntegerType]
255
- ) -> Union[int, bool]:
256
- ...
255
+ ) -> Union[int, bool]: ...
257
256
 
258
257
  @overload
259
258
  def __getitem__(
@@ -263,14 +262,12 @@ class BoundedPartial3DArray(BasePartial3DArray):
263
262
  Union[IntegerType, slice],
264
263
  Union[IntegerType, slice],
265
264
  ],
266
- ) -> "BoundedPartial3DArray":
267
- ...
265
+ ) -> "BoundedPartial3DArray": ...
268
266
 
269
267
  @overload
270
268
  def __getitem__(
271
269
  self, slices: Union[numpy.ndarray, "BoundedPartial3DArray"]
272
- ) -> numpy.ndarray:
273
- ...
270
+ ) -> numpy.ndarray: ...
274
271
 
275
272
  def __getitem__(self, item):
276
273
  """
@@ -386,16 +383,14 @@ class BoundedPartial3DArray(BasePartial3DArray):
386
383
  Union[IntegerType, slice],
387
384
  ],
388
385
  value: Union[int, bool, numpy.ndarray, "BoundedPartial3DArray"],
389
- ):
390
- ...
386
+ ): ...
391
387
 
392
388
  @overload
393
389
  def __setitem__(
394
390
  self,
395
391
  item: Union[numpy.ndarray, "BoundedPartial3DArray"],
396
392
  value: Union[int, bool, numpy.ndarray],
397
- ):
398
- ...
393
+ ): ...
399
394
 
400
395
  def __setitem__(self, item, value):
401
396
  """
@@ -141,8 +141,9 @@ class UnboundedPartial3DArray(BasePartial3DArray):
141
141
  self[slices][:, :, :] = value
142
142
 
143
143
  @overload
144
- def __getitem__(self, slices: Tuple[IntegerType, IntegerType, IntegerType]) -> int:
145
- ...
144
+ def __getitem__(
145
+ self, slices: Tuple[IntegerType, IntegerType, IntegerType]
146
+ ) -> int: ...
146
147
 
147
148
  @overload
148
149
  def __getitem__(
@@ -152,8 +153,7 @@ class UnboundedPartial3DArray(BasePartial3DArray):
152
153
  Union[IntegerType, slice],
153
154
  Union[IntegerType, slice],
154
155
  ],
155
- ) -> "BoundedPartial3DArray":
156
- ...
156
+ ) -> "BoundedPartial3DArray": ...
157
157
 
158
158
  def __getitem__(self, item):
159
159
  """
@@ -80,18 +80,15 @@ class BiomeManager(BaseRegistry):
80
80
  yield from enumerate(self._index_to_biome)
81
81
 
82
82
  @overload
83
- def __getitem__(self, item: BiomeType) -> int:
84
- ...
83
+ def __getitem__(self, item: BiomeType) -> int: ...
85
84
 
86
85
  @overload
87
- def __getitem__(self, item: Int) -> BiomeType:
88
- ...
86
+ def __getitem__(self, item: Int) -> BiomeType: ...
89
87
 
90
88
  @overload
91
89
  def __getitem__(
92
90
  self, item: Iterable[Union[Int, BiomeType]]
93
- ) -> List[Union[BiomeType, Int]]:
94
- ...
91
+ ) -> List[Union[BiomeType, Int]]: ...
95
92
 
96
93
  def __getitem__(self, item):
97
94
  """
@@ -82,16 +82,15 @@ class BlockManager(BaseRegistry):
82
82
  yield from enumerate(self._index_to_block)
83
83
 
84
84
  @overload
85
- def __getitem__(self, item: Block) -> int:
86
- ...
85
+ def __getitem__(self, item: Block) -> int: ...
87
86
 
88
87
  @overload
89
- def __getitem__(self, item: Int) -> Block:
90
- ...
88
+ def __getitem__(self, item: Int) -> Block: ...
91
89
 
92
90
  @overload
93
- def __getitem__(self, item: Iterable[Union[Int, Block]]) -> List[Union[Block, Int]]:
94
- ...
91
+ def __getitem__(
92
+ self, item: Iterable[Union[Int, Block]]
93
+ ) -> List[Union[Block, Int]]: ...
95
94
 
96
95
  def __getitem__(self, item):
97
96
  """
@@ -599,9 +599,7 @@ class SelectionBox(AbstractBaseSelection):
599
599
  points_array.T,
600
600
  ).T[:, :3]
601
601
 
602
- def _iter_transformed_boxes(
603
- self, transform: numpy.ndarray
604
- ) -> Generator[
602
+ def _iter_transformed_boxes(self, transform: numpy.ndarray) -> Generator[
605
603
  Tuple[
606
604
  float, # progress
607
605
  SelectionBox, # The sub-chunk box.
@@ -136,12 +136,10 @@ class SelectionGroup(AbstractBaseSelection):
136
136
  return bool(self._selection_boxes)
137
137
 
138
138
  @overload
139
- def __getitem__(self, item: int) -> SelectionBox:
140
- ...
139
+ def __getitem__(self, item: int) -> SelectionBox: ...
141
140
 
142
141
  @overload
143
- def __getitem__(self, item: slice) -> SelectionGroup:
144
- ...
142
+ def __getitem__(self, item: slice) -> SelectionGroup: ...
145
143
 
146
144
  def __getitem__(self, item):
147
145
  """Get the selection box at the given index."""
@@ -276,13 +276,11 @@ class Interface(ABC):
276
276
 
277
277
  @overload
278
278
  @staticmethod
279
- def check_type(obj: CompoundTag, key: str, dtype: Type[AnyNBT]) -> bool:
280
- ...
279
+ def check_type(obj: CompoundTag, key: str, dtype: Type[AnyNBT]) -> bool: ...
281
280
 
282
281
  @overload
283
282
  @staticmethod
284
- def check_type(obj: ListTag, key: int, dtype: Type[AnyNBT]) -> bool:
285
- ...
283
+ def check_type(obj: ListTag, key: int, dtype: Type[AnyNBT]) -> bool: ...
286
284
 
287
285
  @staticmethod
288
286
  def check_type(
@@ -298,8 +296,7 @@ class Interface(ABC):
298
296
  key: str,
299
297
  dtype: Type[AnyNBT],
300
298
  default: Optional[AnyNBT] = None,
301
- ) -> Optional[AnyNBT]:
302
- ...
299
+ ) -> Optional[AnyNBT]: ...
303
300
 
304
301
  @overload
305
302
  def get_obj(
@@ -308,8 +305,7 @@ class Interface(ABC):
308
305
  key: int,
309
306
  dtype: Type[AnyNBT],
310
307
  default: Optional[AnyNBT] = None,
311
- ) -> Optional[AnyNBT]:
312
- ...
308
+ ) -> Optional[AnyNBT]: ...
313
309
 
314
310
  def get_obj(
315
311
  self, obj, key, dtype: Type[AnyNBT], default: Optional[AnyNBT] = None
@@ -27,6 +27,7 @@ import PyMCTranslate
27
27
  from amulet.api import level as api_level, wrapper as api_wrapper
28
28
  from amulet.api.chunk import Chunk
29
29
  from amulet.api.registry import BlockManager
30
+ from amulet.api.block import UniversalAirBlock
30
31
  from amulet.api.errors import (
31
32
  ChunkLoadError,
32
33
  ChunkDoesNotExist,
@@ -621,6 +622,7 @@ class FormatWrapper(Generic[VersionNumberT], ABC):
621
622
  )
622
623
  else:
623
624
  chunk._block_palette = BlockManager()
625
+ chunk._block_palette.get_add_block(UniversalAirBlock)
624
626
 
625
627
  def get_chunk_callback(_: int, __: int) -> Chunk:
626
628
  # conversion from universal should not require any data outside the block
@@ -24,6 +24,7 @@ import portalocker
24
24
  from amulet_nbt import (
25
25
  IntTag,
26
26
  LongTag,
27
+ FloatTag,
27
28
  DoubleTag,
28
29
  StringTag,
29
30
  ListTag,
@@ -728,7 +729,7 @@ class AnvilFormat(WorldFormatWrapper[VersionNumberInt]):
728
729
  if (
729
730
  isinstance(rot_data, ListTag)
730
731
  and len(rot_data) == 2
731
- and rot_data.list_data_type == DoubleTag.tag_id
732
+ and rot_data.list_data_type == FloatTag.tag_id
732
733
  ):
733
734
  rotation = tuple(map(float, rot_data))
734
735
  rotation = tuple(
@@ -12,6 +12,7 @@ import re
12
12
  import threading
13
13
  import logging
14
14
  from enum import IntEnum
15
+ import lz4.block as lz4_block
15
16
 
16
17
  from amulet_nbt import NamedTag, load as load_nbt
17
18
 
@@ -33,6 +34,7 @@ class RegionFileVersion(IntEnum):
33
34
  VERSION_GZIP = 1
34
35
  VERSION_DEFLATE = 2
35
36
  VERSION_NONE = 3
37
+ VERSION_LZ4 = 4
36
38
 
37
39
 
38
40
  def _validate_region_coords(cx: int, cz: int):
@@ -47,6 +49,50 @@ def _compress(data: NamedTag) -> bytes:
47
49
  return b"\x02" + zlib.compress(data)
48
50
 
49
51
 
52
+ LZ4_HEADER = struct.Struct("<8sBiii")
53
+ LZ4_MAGIC = b"LZ4Block"
54
+ COMPRESSION_METHOD_RAW = 0x10
55
+ COMPRESSION_METHOD_LZ4 = 0x20
56
+
57
+
58
+ def _decompress_lz4(data: bytes) -> bytes:
59
+ """The LZ4 compression format is a sequence of LZ4 blocks with some header data."""
60
+ # https://github.com/lz4/lz4-java/blob/7c931bef32d179ec3d3286ee71638b23ebde3459/src/java/net/jpountz/lz4/LZ4BlockInputStream.java#L200
61
+ decompressed: list[bytes] = []
62
+ index = 0
63
+ while index < len(data):
64
+ magic, token, compressed_length, original_length, checksum = LZ4_HEADER.unpack(
65
+ data[index : index + LZ4_HEADER.size]
66
+ )
67
+ index += LZ4_HEADER.size
68
+ compression_method = token & 0xF0
69
+ if (
70
+ magic != LZ4_MAGIC
71
+ or original_length < 0
72
+ or compressed_length < 0
73
+ or (original_length == 0 and compressed_length != 0)
74
+ or (original_length != 0 and compressed_length == 0)
75
+ or (
76
+ compression_method == COMPRESSION_METHOD_RAW
77
+ and original_length != compressed_length
78
+ )
79
+ ):
80
+ raise ValueError("LZ4 compressed block is corrupted.")
81
+ if compression_method == COMPRESSION_METHOD_RAW:
82
+ decompressed.append(data[index : index + original_length])
83
+ index += original_length
84
+ elif compression_method == COMPRESSION_METHOD_LZ4:
85
+ decompressed.append(
86
+ lz4_block.decompress(
87
+ data[index : index + compressed_length], original_length
88
+ )
89
+ )
90
+ index += compressed_length
91
+ else:
92
+ raise ValueError("LZ4 compressed block is corrupted.")
93
+ return b"".join(decompressed)
94
+
95
+
50
96
  def _decompress(data: bytes) -> NamedTag:
51
97
  """Convert a bytes object into an NBTFile"""
52
98
  compress_type, data = data[0], data[1:]
@@ -56,6 +102,8 @@ def _decompress(data: bytes) -> NamedTag:
56
102
  return load_nbt(zlib.decompress(data), compressed=False)
57
103
  elif compress_type == RegionFileVersion.VERSION_NONE:
58
104
  return load_nbt(data, compressed=False)
105
+ elif compress_type == RegionFileVersion.VERSION_LZ4:
106
+ return load_nbt(_decompress_lz4(data), compressed=False)
59
107
  raise ChunkLoadError(f"Invalid compression type {compress_type}")
60
108
 
61
109
 
@@ -371,9 +371,9 @@ class ConstructionFormatWrapper(StructureFormatWrapper[VersionNumberTuple]):
371
371
  ),
372
372
  }
373
373
  )
374
- section_index_table: List[
375
- Tuple[int, int, int, int, int, int, int, int]
376
- ] = []
374
+ section_index_table: List[Tuple[int, int, int, int, int, int, int, int]] = (
375
+ []
376
+ )
377
377
  if self._section_version == 0:
378
378
  for section_list in self._chunk_to_section.values():
379
379
  for section in section_list:
@@ -172,9 +172,9 @@ class LevelDBDimensionManager:
172
172
  with suppress(KeyError):
173
173
  digp_key = b"digp" + prefix
174
174
  digp = self._db.get(digp_key)
175
- chunk_data[
176
- b"digp"
177
- ] = b"" # The presence of this key signals to the put method that this should be created and written
175
+ chunk_data[b"digp"] = (
176
+ b"" # The presence of this key signals to the put method that this should be created and written
177
+ )
178
178
  for i in range(0, (len(digp) // 8) * 8, 8):
179
179
  actor_key = b"actorprefix" + digp[i : i + 8]
180
180
  try:
@@ -135,9 +135,9 @@ class BaseLevelDBInterface(Interface):
135
135
  for key in chunk_data.copy().keys():
136
136
  if len(key) == 2 and key[0:1] == b"\x2F":
137
137
  cy = struct.unpack("b", key[1:2])[0]
138
- subchunks[
139
- self._chunk_key_to_sub_chunk(cy, bounds[0] >> 4)
140
- ] = chunk_data.pop(key)
138
+ subchunks[self._chunk_key_to_sub_chunk(cy, bounds[0] >> 4)] = (
139
+ chunk_data.pop(key)
140
+ )
141
141
  chunk.blocks, chunk_palette = self._load_subchunks(subchunks)
142
142
  elif self._features["terrain"] == "30array":
143
143
  section_data = chunk_data.pop(b"\x30", None)
@@ -274,9 +274,9 @@ class BaseLevelDBInterface(Interface):
274
274
  )
275
275
  min_y = bounds[0] // 16
276
276
  for cy, sub_chunk in terrain.items():
277
- chunk_data[
278
- b"\x2F" + self._get_sub_chunk_storage_byte(cy, min_y)
279
- ] = sub_chunk
277
+ chunk_data[b"\x2F" + self._get_sub_chunk_storage_byte(cy, min_y)] = (
278
+ sub_chunk
279
+ )
280
280
 
281
281
  # chunk status
282
282
  if self._features["finalised_state"] == "int0-2":
@@ -71,11 +71,6 @@ class MCStructureFormatWrapper(StructureFormatWrapper[VersionNumberTuple]):
71
71
  ):
72
72
  if not overwrite and os.path.isfile(self.path):
73
73
  raise ObjectWriteError(f"There is already a file at {self.path}")
74
- translator_version = self.translation_manager.get_version(
75
- "bedrock", (999, 999, 999)
76
- )
77
- self._platform = translator_version.platform
78
- self._version = translator_version.version_number
79
74
  self._chunks = {}
80
75
  self._set_selection(bounds)
81
76
  self._is_open = True
@@ -322,9 +322,7 @@ class SpongeSchemFormatWrapper(StructureFormatWrapper[VersionNumberInt]):
322
322
  raise SpongeSchemWriteError(
323
323
  "The structure is too large to be exported to a Sponge Schematic file. It must be 2^16 - 1 at most in each dimension."
324
324
  )
325
- overflowed_shape = [
326
- s if s < 2**15 else s - 2**16 for s in selection.shape
327
- ]
325
+ overflowed_shape = [s if s < 2**15 else s - 2**16 for s in selection.shape]
328
326
  tag = CompoundTag(
329
327
  {
330
328
  "Version": IntTag(2),
@@ -13,7 +13,7 @@ class Anvil3463Interface(ParentInterface):
13
13
 
14
14
  @staticmethod
15
15
  def minor_is_valid(key: int):
16
- return 3454 <= key < 3580
16
+ return 3454 <= key <= 3900
17
17
 
18
18
 
19
19
  export = Anvil3463Interface
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: amulet-core
3
- Version: 1.9.20
3
+ Version: 1.9.22
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.
@@ -16,6 +16,7 @@ Requires-Dist: pymctranslate~=1.2
16
16
  Requires-Dist: portalocker~=2.4
17
17
  Requires-Dist: amulet-leveldb~=1.0b0
18
18
  Requires-Dist: platformdirs~=3.1
19
+ Requires-Dist: lz4~=4.3
19
20
  Provides-Extra: docs
20
21
  Requires-Dist: Sphinx>=1.7.4; extra == "docs"
21
22
  Requires-Dist: sphinx-autodoc-typehints>=1.3.0; extra == "docs"
@@ -4,6 +4,7 @@ pymctranslate~=1.2
4
4
  portalocker~=2.4
5
5
  amulet-leveldb~=1.0b0
6
6
  platformdirs~=3.1
7
+ lz4~=4.3
7
8
 
8
9
  [dev]
9
10
  black>=22.3
@@ -21,6 +21,7 @@ install_requires =
21
21
  portalocker~=2.4
22
22
  amulet-leveldb~=1.0b0
23
23
  platformdirs~=3.1
24
+ lz4~=4.3
24
25
  packages = find:
25
26
 
26
27
  [options.packages.find]
File without changes
File without changes