Added dev tool to simplify adding mods to the pack

Simply run ./mrpacktool [file url]
This commit is contained in:
Sergeant Acoustic 2025-11-26 19:00:52 +00:00
parent 91b0c616a6
commit cb45cd169a

64
mrpacktool.sh Executable file
View file

@ -0,0 +1,64 @@
#!/bin/bash
# User input error handling
if [[ $# -eq 0 ]]; then
echo "$0: A mod url is required."
exit 4
fi
# Do everything relative to this files path
parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
cd "$parent_path"
# Paths
mods_dir="/tmp/"
# Options parsing
mod_url="$1"
out_file="${2:-$parent_path/modrinth.index.json}"
if [ -n "$v" ]; then
echo "Verbose: $v, Mod url: $mod_url, Output: $out_file"
fi
# https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell#37840948
function urldecode() {
: "${*//+/ }"
echo -e "${_//%/\\x}"
}
# Get file name from url trimmed by slash and url decoded
mod_file="$(urldecode ${mod_url##*/})"
trap "rm ${mods_dir}/${mod_file}" HUP INT TERM EXIT
echo "Downloading file..."
wget -N --no-verbose --directory-prefix "$mods_dir" "$mod_url"
# Collect data required by modrinth.index.json
echo "Processing file info"
mod_path="${mods_dir}/${mod_file}"
modrinth_size="$(du --bytes "$mod_path" | cut -f -1)"
modrinth_sha1="$(sha1sum "$mod_path" | cut -d " " -f 1)"
modrinth_sha512="$(sha512sum "$mod_path" | cut -d " " -f -1)"
# Writing to file
echo "Writing to file"
jq ".files += [{ \
\"downloads\": [
\"${mod_url}\"
],
\"env\": {
\"client\": \"required\",
\"server\": \"required\"
},
\"fileSize\": ${modrinth_size},
\"hashes\": {
\"sha1\": \"${modrinth_sha1}\",
\"sha512\": \"${modrinth_sha512}\"
},
\"path\": \"mods/${mod_file}\"
}]" "$out_file" > "$out_file.tmp"
mv "$out_file.tmp" "$out_file"
[ $? -eq 0 ] && echo "Successfully appended mod to ${out_file}"