MinedMap/resource
Matthias Schiffer e18761a3e4
resource: extract.py: pass directory of unpacked Minecraft JAR, not full path to assets
Make the script easier to use, and more consistent with sign_textures.py.
2024-01-11 12:44:42 +01:00
..
blocklist.py resource: add blocklist tool to list and diff the supported block IDs of a Minecraft version 2021-06-23 21:34:45 +02:00
blocks.json resource: make regular signs transparent 2024-01-10 22:56:29 +01:00
extract.py resource: extract.py: pass directory of unpacked Minecraft JAR, not full path to assets 2024-01-11 12:44:42 +01:00
generate.py resource: add WallSign flag to block types 2024-01-10 22:56:29 +01:00
README.md resource: extract.py: pass directory of unpacked Minecraft JAR, not full path to assets 2024-01-11 12:44:42 +01:00
sign_textures.py viewer: add sign images 2024-01-10 22:56:31 +01:00

Resource management

Scripts

The following scripts can be found in the resource directory of this Git repository. Python 3.8 should be sufficient, older versions may or may not work.

  • blocklist.py: Lists all supported block IDs of an unpacked Minecraft JAR, or diffs the ID lists of two different versions
  • extract.py: Takes the block type information from blocks.json and texture data from an unpacked Minecraft JAR, storing the result in colors.json
  • generate.py: Generates block_types.rs from colors.json
  • sign_textures.py: Generates all needed sign graphics from Minecraft assets

In addition to these scripts, the JSON processor jq is a useful tool to work with MinedMap's resource metadata.

How to add support for block IDs of a new Minecraft version

  1. Download the Minecraft version you want to support as well as the previous version currently supported by MinedMap. You can use the Minecraft launcher to do so. On Linux the downloaded JAR archive can be found at ~/.minecraft/versions/.

  2. Unpack both versions to different directories. The next part assumes that the unpacked data is stored in resource/data/old and resource/data/new; using the respective Minecraft version numbers instead of old and new is advisable.

  3. Check the added and removed block types using blocklist.py:

    ./blocklist.py diff data/old data/new
    
  4. Append all new block types to blocks.json. The following command can be used to generate the basic JSON structure:

    ./blocklist.py added data/old data/new | jq -R -n -S --tab '[inputs] | map({key: ., value: {}}) | from_entries'
    
  5. Edit blocks.json until the following command passes without errors:

    ./extract.py blocks.json data/new colors.json
    

    If possible, the top texture of blocks should be used where different sides exist. Block types that should not be visible on the map are just set to null in the JSON (or have a null texture field when other flags need to be set, like for sign blocks).

    The water, grass and foliage flags control biome-dependent texture color modifiers.

  6. When colors.json builds successfully, use the following command to sort blocks.json by block ID:

    jq --tab -S < blocks.json > blocks.json.new && mv blocks.json.new blocks.json
    

    Then regenerate colors.json one last time, so it is sorted as well.

  7. Update the source code with the new block colors:

    ./generate.py colors.json ../crates/resource/src/block_types.rs
    cargo fmt --all
    

After the update, the new version should be tested with old savegames (both before and after migration by the new version) as well as newly generated worlds. Use creative mode to add the new block types to your test world.