MinedMap/resource
2021-06-25 19:43:14 +02: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 Add Minecraft 1.17 block types, update all color values 2021-06-24 19:28:25 +02:00
extract.py Add correct foliage colors for birch and spruce 2020-06-19 00:00:30 +02:00
generate.py Rename .inc files to .inc.cpp for better language detection by editors and Github 2021-06-25 19:43:14 +02:00
README.md Rename .inc files to .inc.cpp for better language detection by editors and Github 2021-06-25 19:43:14 +02: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 BlockType.inc.cpp from colors.json

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/assets/minecraft/textures/block 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.

    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 ../src/Resource/BlockType.inc.cpp
    

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.