# Minecraft Server Manager: Bash Completion script # ================================================ # # This script provides tab completion support for the # Minecraft Server Manager command. # # http://marcuswhybrow.net/minecraft-server-manager/ # # Source, if it exists, the msm profile.d script if [ -f "/etc/profile.d/msm.sh" ]; then source "/etc/profile.d/msm.sh" fi ### Utility Functions MSM="${MSM_SCRIPT:-/etc/init.d/msm}" # # Loads server variables # # $1: The name of a server # __init_server() { # # Load some useful defaults # SERVER_NAME="$1" # SERVER_CONF="$SETTINGS_SERVER_STORAGE_PATH/$SERVER_NAME/$SETTINGS_SERVER_PROPERTIES" # SERVER_PATH="$SETTINGS_SERVER_STORAGE_PATH/$SERVER_NAME" # WORLD_STORAGE_PATH="$SERVER_PATH/$SETTINGS_DEFAULT_WORLD_STORAGE_PATH" # WORLD_STORAGE_INACTIVE_PATH="$SERVER_PATH/$SETTINGS_DEFAULT_WORLD_STORAGE_INACTIVE_PATH" # WHITELIST_PATH="$SERVER_PATH/$SETTINGS_DEFAULT_WHITELIST_PATH" # BANNED_PLAYERS_PATH="$SERVER_PATH/$SETTINGS_DEFAULT_BANNED_PLAYERS_PATH" # BANNED_IPS_PATH="$SERVER_PATH/$SETTINGS_DEFAULT_BANNED_IPS_PATH" # OPS_PATH="$SERVER_PATH/$SETTINGS_DEFAULT_OPS_PATH" # if [[ -f "$SERVER_CONF" ]]; then # local name value name_upper_case # while read line; do # # ignore comment lines # if [[ "$line" =~ ^# ]]; then # continue # fi # if [[ "$line" =~ ^msm-([\-\_a-zA-Z0-9]+)\=(\"(.*)\"|\'(.*)\'|(.*)$) ]]; then # name="${BASH_REMATCH[1]}" # value="${BASH_REMATCH[3]}${BASH_REMATCH[4]}${BASH_REMATCH[5]}" # if is_bash_version 4; then # name="${name//-/_}" # name="${name//./_}" # name="${name^^}" # else # name="$(echo "$name" | tr '[\-\.a-z]' '[\_\_A-Z]')" # fi # # Make relative paths absolute by combining with server directory # if [[ "$name" =~ \-path$ ]] && [[ ! "$value" =~ ^\/ ]]; then # value="${SERVER_PATH[$1]}/$value" # fi # # Create the variable # eval ${name}=\"$value\" # fi # done < "$SERVER_CONF" # fi # } ### Auto Completion Function _msm() { source "$MSM" local base current options COMPREPLY=() current="${COMP_WORDS[$COMP_CWORD]}" manager_property SERVER_STORAGE_PATH if [[ $COMP_CWORD == 1 ]]; then if [ -d "$SETTINGS_SERVER_STORAGE_PATH" ]; then local servers="$(ls -1 "$SETTINGS_SERVER_STORAGE_PATH")" fi options="help start stop restart version server jargroup all config $servers" else case "${COMP_WORDS[1]}" in stop|restart) if [[ $COMP_CWORD == 2 ]]; then options="now" fi ;; server) if [[ $COMP_CWORD == 2 ]]; then options="list create delete rename" else case "${COMP_WORDS[2]}" in delete|rename) if [[ $COMP_CWORD == 3 && -d "$SETTINGS_SERVER_STORAGE_PATH" ]]; then options="$(ls -1 "$SETTINGS_SERVER_STORAGE_PATH")" fi ;; esac fi ;; jargroup) if [[ $COMP_CWORD == 2 ]]; then options="list create delete rename changeurl getlatest" else case "${COMP_WORDS[2]}" in delete|rename|changeurl|getlatest) manager_property JAR_STORAGE_PATH if [[ $COMP_CWORD == 3 && -d "$SETTINGS_JAR_STORAGE_PATH" ]]; then options="$(ls -1 "$SETTINGS_JAR_STORAGE_PATH")" fi ;; esac fi ;; *) # Server options local server_path="$SETTINGS_SERVER_STORAGE_PATH/${COMP_WORDS[1]}" if [[ "${COMP_WORDS[1]}" == "all" ]] || [ -e "$server_path" ]; then # If the server exists server_get_id "${COMP_WORDS[1]}" local sid="$RETURN" if [[ $COMP_CWORD == 2 ]]; then options="start stop restart status connected worlds logroll backup jar whitelist blacklist operator gamemode kick say time toggledownfall give xp save cmd cmdlog console config" else case "${COMP_WORDS[2]}" in stop|restart) if [[ $COMP_CWORD == 3 ]]; then options="now" fi ;; worlds) if [[ $COMP_CWORD == 3 ]]; then options="list load ram todisk backup on off" else case "${COMP_WORDS[3]}" in ram) if [[ $COMP_CWORD == 4 ]]; then server_property "$sid" WORLD_STORAGE_PATH if [ -d "${SERVER_WORLD_STORAGE_PATH[$sid]}" ]; then options="$(ls -1 "${SERVER_WORLD_STORAGE_PATH[$sid]}")" fi fi ;; on) if [[ $COMP_CWORD == 4 ]]; then server_property "$sid" WORLD_STORAGE_INACTIVE_PATH if [ -d "${SERVER_WORLD_STORAGE_INACTIVE_PATH[$sid]}" ]; then options="$(ls -1 "${SERVER_WORLD_STORAGE_INACTIVE_PATH[$sid]}")" fi fi ;; off) if [[ $COMP_CWORD == 4 ]]; then server_property "$sid" WORLD_STORAGE_PATH if [ -d "${SERVER_WORLD_STORAGE_PATH[$sid]}" ]; then options="$(ls -1 "${SERVER_WORLD_STORAGE_PATH[$sid]}")" fi fi ;; esac fi ;; jar) manager_property JAR_STORAGE_PATH if [[ $COMP_CWORD == 3 && -d "$SETTINGS_JAR_STORAGE_PATH" ]]; then options="$(ls -1 "$SETTINGS_JAR_STORAGE_PATH")" fi if [[ $COMP_CWORD == 4 && -d "$SETTINGS_JAR_STORAGE_PATH/${COMP_WORDS[3]}" ]]; then options="$(find "$SETTINGS_JAR_STORAGE_PATH/${COMP_WORDS[3]}" -type f -name "*.jar" -exec basename {} \;)" fi ;; whitelist|wl) if [[ $COMP_CWORD == 3 ]]; then options="on off add remove list" else case "${COMP_WORDS[3]}" in remove) if [[ $COMP_CWORD -ge 4 ]]; then server_property "$sid" WHITELIST_PATH if [ -f "${SERVER_WHITELIST_PATH[$sid]}" ]; then options="$(cat "${SERVER_WHITELIST_PATH[$sid]}")" fi fi ;; esac fi ;; blacklist|bl) if [[ $COMP_CWORD == 3 ]]; then options="player ip list" else case "${COMP_WORDS[3]}" in player) if [[ $COMP_CWORD == 4 ]]; then options="add remove" else case "${COMP_WORDS[4]}" in remove) if [[ $COMP_CWORD -ge 5 ]]; then server_property "$sid" BANNED_PLAYERS_PATH if [ -f "${SERVER_BANNED_PLAYERS_PATH[$sid]}" ]; then options="$(cat "${SERVER_BANNED_PLAYERS_PATH[$sid]}")" fi fi ;; esac fi ;; ip) if [[ $COMP_CWORD == 4 ]]; then options="add remove" else case "${COMP_WORDS[4]}" in remove) if [[ $COMP_CWORD -ge 5 ]]; then server_property "$sid" BANNED_PLAYERS_PATH if [ -f "${SERVER_BANNED_IPS_PATH[$sid]}" ]; then options="$(cat "${SERVER_BANNED_IPS_PATH[$sid]}")" fi fi ;; esac fi ;; esac fi ;; operator|op) if [[ $COMP_CWORD == 3 ]]; then options="add remove list" else case "${COMP_WORDS[3]}" in remove) if [[ $COMP_CWORD -ge 4 ]]; then server_property "$sid" OPS_PATH if [ -f "${SERVER_OPS_PATH[$sid]}" ]; then options="$(cat "${SERVER_OPS_PATH[$sid]}")" fi fi ;; esac fi ;; gamemode|gm) if [[ $COMP_CWORD == 3 ]]; then options="survival creative" fi ;; time) if [[ $COMP_CWORD == 3 ]]; then options="set add" fi ;; save) if [[ $COMP_CWORD == 3 ]]; then options="on off all" fi ;; config) if [[ $COMP_CWORD == 3 ]]; then server_property "$sid" SERVER_CONF options="$(more "${SERVER_CONF[$sid]}" | sed 's/=.*$//' | grep -v '#')"; fi ;; esac fi fi ;; esac fi COMPREPLY=( $(compgen -W "${options}" -- ${current}) ) return 0 } complete -F _msm msm