The new age Minecraft world editor and converter that supports every version since Java 1.12 and Bedrock 1.7
Amulet is written in Python which means that you can manipulate world data with a bit of python knowledge.
The code behind Amulet is broken down into a number of parts to make it more modular.
Firstly there is Amulet-Map-Editor. This is the user interface that most users will interact with. Amulet Map Editor (usually shortened to just Amulet) has the ability to run code created by the user in the form of operations. These can be found in the operations tab of the 3D Editor. Users can create custom python programs placed in the 'plugins/operations' directory next to where the program is run from. The editor will display these in the operations list for the user to choose from. Note that you will need to press the refresh button within the operations tab to load/reload operations while the editor is running.
Some examples of the format can be found here and the operations that are distributed with Amulet can be found here.
Secondly there is Amulet-Core. This is a library which is used to manipulate the world data. A getting started guide and API documentation can be found on the readthedocs page. If you plan to modify world data you will need to interact with this so it would be helpful to get familiar with it.
PyMCTranslate is a library that handles block and biome translation between the different versions. It will in the future also support entity and item translation. This allows for data from a number of game versions to be edited interchangeably. This is also what enables Amulet to convert between the different world formats.
Minecraft-Model-Reader is a library to parse resource packs and load the block models into a consistent format for easier use. The 3D Editor uses this to generate the terrain that is show to the user.
Finally is Amulet-NBT which is a low level binary NBT and stringified NBT (SNBT) library. NBT is a storage system that most of Minecraft uses to save data. This exists to read and write that data. It is written in Cython to make it as fast as possible.