ShellCommand icon

ShellCommand -----

Plugin that executes a shell script via a command line.



Présentation/Description

FR :

Bonjour à tous,

Je suis ravi de vous présenter une mise à jour majeure de mon plugin ShellMcPlugin. Comme j'ai modifié le nom du plugin, j'ai dû créer une nouvelle ressource.

Ce plugin permet d'exécuter facilement des scripts shell (.sh) directement via une commande dans Minecraft. Il est hautement configurable : vous pouvez définir la commande à exécuter, lancer un second script si besoin, personnaliser les messages affichés et gérer la permission requise pour utiliser la commande.

Grâce à ce plugin, j'ai pu, par exemple, automatiser le lancement d'un serveur via un menu en jeu. Après un compte à rebours intégré au plugin, il exécute également un second script après un délai prédéfini. Le plugin transmet trois arguments au script shell : le serveur Minecraft, le nom du joueur et, en option, le monde (ce dernier n'est pas modifiable pour le moment).

Veuillez noter que ce plugin est conçu pour la version Spigot API 1.21.1 et n'a pas été testé avec des versions antérieures.

N'hésitez pas à signaler tout bug ou incohérence rencontrés lors de l'utilisation du plugin. Je suis également ouvert à vos suggestions et conseils. Amusez-vous bien !


EN :

Hello everyone,

I am excited to introduce a major update to my plugin, ShellMcPlugin. Since I changed the name of the plugin, I had to create a new resource.

This plugin allows you to easily execute shell scripts (.sh) directly through a command in Minecraft. It is highly configurable: you can set the command to run, optionally execute a second script, customize the displayed messages, and manage the permissions required to use the command.

Thanks to this plugin, I was able to automate the launching of a server through an in-game menu. After a countdown integrated into the plugin, it also executes a second script after a predefined delay. The plugin passes three arguments to the shell script: the Minecraft server, the player's name, and optionally, the world (which is currently not modifiable).

Please note that this plugin is designed for Spigot API version 1.21.1 and has not been tested with earlier versions.

Feel free to report any bugs or inconsistencies you encounter while using the plugin. I am also open to your suggestions and advice. Have fun!

Configuration
Configuration File :

Code (YAML):
##################################################################
#                      Plugin de Lupulus                         #
#                        ShellCommand                            #
#                  V1.5.2 - Minecraft 1.21.1                     #
##################################################################
#Langue par défault : "fr" = french, "en" = english
default-language
: "fr"

log-info
: false     # Activer/désactiver les logs d'information (désactiver recommandé)
log-warning
: true   # Activer/désactiver les logs d'avertissement
log-severe
: true   # Activer/désactiver les logs sévères

# Mode d'envoie des messages (dans le dossier languages) "0"=Pas de message, "1"=Envoyé au joueur, "2"=Envoyé à la consols, "3"=Envoyé à tout les joueurs.
scripts
:
  send-mode
: 2

scripts-list
:
  # First script /!\ WARNING /!\ -> NameOfScripts-list = scriptname
  example1
:
    scriptname
: "example1"                 # Nom du script Shell présent dans /Scripts sans le ".sh"
    description
: "Script qui vérifie si serveur cible allumé et téléporte le joueur. Si le serveur est éteint, exécution du script example2.sh"
    arguments
:                           # Arguments de sortie du plugin, arguments envoyé au script Shell : ./script.sh %player% %server% %world%
      #Argument-X: "%player%", "%server%", "%world%", "customArg", "123" #CustomArgument
      Argument-1
: "%server%"
      Argument-2
: "%player%"
      Argument-3
: "%world%"
    permission
: "ShellCommand.example1"
    countdown
:
      enabled
: false                       # Active le countdown pour ce script
      countdown-time
: 20                   # Temps du countdown en seconde.
      countdown-message-mode
: 1           # "0" = Pas de message ; "1" = Message continu ; "2" = Message discontinue
      countdown-interval-time
: 5           # Intervalle de temps entre chaque message (si mode 2 choisi)
      countdown-send-mode
: 0               # "0" = Envoyé au joueur ; "1" = Envoyé au serveur ; "2" = envoyé à la console
      #countdown-msg: "%server%, %player%, %world%, %script%, %time%"
      countdown-msg
: "&4Lancement du script %script% dans %time% secondes"
    Father-of
:                           # Father-of : "Nom du/des script(s) à exécuter après l'exécution de celui-ci" //peut ne pas être présent ou vide
    #  - "script-2"
    #  - "script-3"
  # Second script
  example2
:
    scriptname
: "example2"
    description
: "Script qui lance le serveur cible."
    arguments
:
      Argument-1
: "%server%"
      Argument-2
: "%player%"
      Argument-3
: "%world%"
    permission
: "ShellCommand.example2"
    countdown
:
      enabled
: false
    Father-of
:
     - "example3"
  # More Script
  example3
:
    scriptname
: "example3"
    description
: "Script de téléportation final (countdown)."
    arguments
:                           # Arguments de sortie du plugin, arguments envoyé au script Shell : ./script.sh %server% %player% %world%
      Argument-1
: "%server%"
      Argument-2
: "%player%"
      Argument-3
: "1"
      Argument-4
: "ArgCustom"
    permission
: "ShellCommand.example3"
    countdown
:
      enabled
: true                       # Active le countdown pour ce script
      countdown-time
: 30                   # Temps du countdown en seconde.
      countdown-message-mode
: 2           # "0" = Pas de message ; "1" = Message continu ; "2" = Message discontinue
      countdown-interval-time
: 5           # Intervalle de temps entre chaque message (si mode 2 choisi)
      countdown-send-mode
: 1               # "0" = Envoyé au joueur ; "1" = Envoyé au serveur ; "2" = envoyé à la console
      #countdown-msg: "%server%, %player%, %world%, %script%, %time%"
      countdown-msg
: "&3Téléportation de &6%player%&3 sur le serveur &6%server%&3 d[SIZE=4]an[/SIZE]s &4&l%time%&3 secondes"
Code (YAML):
##################################################################
#                      Plugin of Lupulus                         #
#                        ShellCommand                            #
#                  V1.5.2 - Minecraft 1.21.1                     #
##################################################################
# Default language: "fr" = French, "en" = English
default-language
: "en"

log-info
: false     # Enable/disable info logs (disabling recommended)
log-warning
: true   # Enable/disable warning logs
log-severe
: true   # Enable/disable severe logs

# Message sending mode (in the languages folder) "0"=No message, "1"=Sent to player, "2"=Sent to console, "3"=Sent to all players.
scripts
:
  send-mode
: 2

scripts-list
:
  # First script /!\ WARNING /!\ -> NameOfScripts-list = scriptname
  example1
:
    scriptname
: "example1"                 # Name of the Shell script present in /Scripts without the ".sh"
    description
: "Script that checks if target server is on and teleports the player. If the server is off, execute the script example2.sh"
    arguments
:                           # Plugin output arguments, arguments sent to the Shell script: ./script.sh %player% %server% %world%
      #Argument-X: "%player%", "%server%", "%world%", "customArg", "123" #CustomArgument
      Argument-1
: "%server%"
      Argument-2
: "%player%"
      Argument-3
: "%world%"
    permission
: "ShellCommand.example1"
    countdown
:
      enabled
: false                       # Enable countdown for this script
      countdown-time
: 20                   # Countdown time in seconds
      countdown-message-mode
: 1           # "0" = No message; "1" = Continuous message; "2" = Discontinuous message
      countdown-interval-time
: 5           # Time interval between each message (if mode 2 is selected)
      countdown-send-mode
: 0               # "0" = Sent to player; "1" = Sent to server; "2" = Sent to console
      #countdown-msg: "%server%, %player%, %world%, %script%, %time%"
      countdown-msg
: "&4Launching script %script% in %time% seconds"
    Father-of
:                           # Father-of: "Name of the script(s) to execute after this one" //can be absent or empty
    #  - "script-2"
    #  - "script-3"
  # Second script
  example2
:
    scriptname
: "example2"
    description
: "Script that starts the target server."
    arguments
:
      Argument-1
: "%server%"
      Argument-2
: "%player%"
      Argument-3
: "%world%"
    permission
: "ShellCommand.example2"
    countdown
:
      enabled
: false
    Father-of
:
     - "example3"
  # More Script
  example3
:
    scriptname
: "example3"
    description
: "Final teleportation script (countdown)."
    arguments
:                           # Plugin output arguments, arguments sent to the Shell script: ./script.sh %server% %player% %world%
      Argument-1
: "%server%"
      Argument-2
: "%player%"
      Argument-3
: "1"
      Argument-4
: "ArgCustom"
    permission
: "ShellCommand.example3"
    countdown
:
      enabled
: true                       # Enable countdown for this script
      countdown-time
: 30                   # Countdown time in seconds
      countdown-message-mode
: 2           # "0" = No message; "1" = Continuous message; "2" = Discontinuous message
      countdown-interval-time
: 5           # Time interval between each message (if mode 2 is selected)
      countdown-send-mode
: 1               # "0" = Sent to player; "1" = Sent to server; "2" = Sent to console
      #countdown-msg: "%server%, %player%, %world%, %script%, %time%"
      countdown-msg
: "&3Teleporting &6%player%&3 to server &6%server%&3 in &4&l%time%&3 seconds"
 

Language File :
Code (YAML):
plugin.enabled : "Plugin activé"
plugin.disabled
: "Plugin désactivé"

command.no_permission
: "Vous n'avez pas la permission d'utiliser cette commande."
command.usage
: "Utilisation : /sc <sous-commande>"

commandscript.usage
: "Utilisation : /sc script <nom_du_script> -spw <server> <joueur> <monde>"
commandscript.option
: "Options possibles : -p <joueur>, -s <server>, -w <monde>"
commandscript.missing_argument
: "Il manque un argument pour l'option {option}"

command.info.usage
: "Utilisation : /script info <nom_du_script>"
command.info.not_found
: "Le script %scriptName% n'existe pas."
command.info.script_info.header
: "Informations sur le script %scriptName%:"
command.info.script_info.description
: "Description: %description%"
command.info.script_info.permission
: "Permission: %permission%"
command.info.script_info.countdown_enabled
: "Countdown activé: %countdown%"
command.info.script_info.child_scripts
: "Scripts fils: %childScripts%"
command.info.script_info.no_child_scripts
: "Pas de scripts fils."

command.help.header
: "=== Aide du plugin ShellCommand ==="
command.help.script_execute
: "/sc script <script_name> : Exécute un script."
command.help.info_script
: "/sc info <script_name> : Affiche les informations sur le script."
command.help.list_scripts
: "/sc list : Liste tous les scripts disponibles."
command.help.reload_config
: "/sc reload : Recharge la configuration."
command.help.help_plugin
: "/sc help : Affiche l'aide du Plugin."

script.not_found
: "Script {scriptName} introuvable."
script.no_scripts_found
: "Aucun script trouvé."
script.execution_success
: "Le script {scriptName} a été exécuté avec succès."
script.execution_failed
: "L'exécution du script {scriptName} a échoué."
script.execution_error
: "Erreur lors de l'exécution du script {scriptName}."

config.reloaded
: "Configuration rechargée."
Code (YAML):
plugin.enabled : "Plugin enabled"
plugin.disabled
: "Plugin disabled"

command.no_permission
: "You do not have permission to use this command."
command.usage
: "Usage: /sc <sub-command>"

commandscript.usage
: "Usage: /sc script <script_name> -spw <server> <player> <world>"
commandscript.option
: "Possible options: -p <player>, -s <server>, -w <world>"
commandscript.missing_argument
: "Missing an argument for option {option}"

command.info.usage
: "Usage: /script info <script_name>"
command.info.not_found
: "The script %scriptName% does not exist."
command.info.script_info.header
: "Information about the script %scriptName%:"
command.info.script_info.description
: "Description: %description%"
command.info.script_info.permission
: "Permission: %permission%"
command.info.script_info.countdown_enabled
: "Countdown enabled: %countdown%"
command.info.script_info.child_scripts
: "Child scripts: %childScripts%"
command.info.script_info.no_child_scripts
: "No child scripts."

command.help.header
: "=== ShellCommand Plugin Help ==="
command.help.script_execute
: "/sc script <script_name> : Executes a script."
command.help.info_script
: "/sc info <script_name> : Displays information about the script."
command.help.list_scripts
: "/sc list : Lists all available scripts."
command.help.reload_config
: "/sc reload : Reloads the configuration."
command.help.help_plugin
: "/sc help : Displays the plugin help."

script.not_found
: "Script {scriptName} not found."
script.no_scripts_found
: "No scripts found."
script.execution_success
: "The script {scriptName} has been executed successfully."
script.execution_failed
: "The execution of the script {scriptName} failed."
script.execution_error
: "Error executing the script {scriptName}."

config.reloaded
: "Configuration reloaded."

Commands
/sc script <script_name> <option> <server> <player> <world>
Possible options: -p <player>, -s <server>, -w <world> (-spw, -p, -wp...)
Example: /sc script example1 -sp survival Lupulus
Description: Executes the target shell script with the specified optional arguments. The order of the arguments based on the chosen options is important!

/sc info <script_name>
Example: /sc info example1
Description: Provide essential information about the target script.

/sc list
Description: List all available scripts in the Scripts folder

/sc reload
Description: Reloads the configuration and the Scripts !

/sc help
Description: Display the plugin help.


Scripts
FR : Voici trois scripts shell qui fonctionnent ensemble. Cet exemple d'utilisation est destiné à un environnement multi-serveur (BungeeCord) sur des machines virtuelles Linux (serveur Spigot). Je vous invite à vérifier la cohérence entre le fichier config.yml et le contenu des différents scripts pour bien comprendre l'ensemble de mon plugin. Ayant moi-même testé ces scripts, je vous confirme leur bon fonctionnement et leur utilité dans certaines situations.

EN : Here are three shell scripts that work together. This usage example is intended for a multi-server environment (BungeeCord) on Linux virtual machines (Spigot server). I encourage you to check the consistency between the config.yml file and the content of the various scripts to fully understand my plugin. Having tested these scripts myself, I can confirm their functionality and usefulness in certain scenarios.

Code (Text):
#!/bin/bash

# Récupération des arguments
server="$1"
player="$2"
world="$3"

# Chemin du dossier du script
Directory="/home/Lupulus/ServeurMinecraft/lobby/plugins/ShellCommand/Scripts/"

# Chemin du fichier log d'erreur du script
LOG_FILE="${Directory}log_example.txt"

# Supprimer le fichier de log s'il existe
[ -e "$LOG_FILE" ] && rm "$LOG_FILE"
# Créer le fichier de log
touch "$LOG_FILE"
echo "===== FICHIER LOG DES SCRIPTS 'example.sh' =====" >> "$LOG_FILE"
echo "Lancement du script d'ouverture le $(date)\n" >> "$LOG_FILE"

# Vérification des arguments
echo "Arguments reçus : $@" >> "$LOG_FILE"

if [ "$#" -lt 3 ]; then
    echo "Usage: $0 <server> <player> <world>" | tee -a "$LOG_FILE"
    exit 1
fi

# Vérifier si le serveur est en cours d'exécution
if screen -ls | grep -q "$server"; then
    echo "Le serveur $server est déjà lancé." >> "$LOG_FILE"
    sleep 1
    # Crée une commande à exécuter pour la téléportation
    command="send $player $server\r"

    screen -S bungeeCord -p 0 -X stuff "$command"
    echo "Téléportation du joueur $2 au serveur $1 via la commande : $command" >> "$LOG_FILE"
else
    echo "Le serveur $server n'est pas lancé, procédure de lancement en cours!" >> "$LOG_FILE"
    command="sc script example2 -spw $server $player $world\r"
 
    screen -S lobby -p 0 -X stuff "$command"
    echo "Exécution du script 'example2.sh' pour démarage du serveur $1 et téléportation du joueur $2 via la commande : $command" >> "$LOG_FILE"
fi
echo "===== FIN DU SCRIPT 'example1.sh'=====" >> "$LOG_FILE"
 
Code (Text):
#!/bin/bash

# Récupération des arguments
server="$1"
player="$2"
world="$3"

# Chemin du dossier du script
Directory="/home/Lupulus/ServeurMinecraft/lobby/plugins/ShellCommand/Scripts/"

# Chemin du fichier log d'erreur du script
LOG_FILE="${Directory}log_example.txt"

echo "----- FICHIER LOG DU SCRIPT 'example2.sh' -----" >> "$LOG_FILE"

# Vérification des arguments
echo "Arguments reçus : $@" >> "$LOG_FILE"

if [ "$#" -lt 3 ]; then
    echo "Usage: $0 <server> <player> <world>" | tee -a "$LOG_FILE"
    exit 1
fi

# Démarrer le serveur
if screen -ls | grep -q "$server"; then
    echo "Le serveur $server est déjà en cours d'exécution." >> "$LOG_FILE"
else
    echo "Démarrage du serveur $server..." >> "$LOG_FILE"
    cd "/home/Lupulus/ServeurMinecraft/$server" || exit 1
    ./start.sh 2>> "$LOG_FILE"
fi

# Vérifier si le serveur est en cours d'exécution
if screen -ls | grep -q "$server"; then
    echo "Le serveur $server s'est bien lancé." >> "$LOG_FILE"
    echo "Exécution du script 'example3.sh'pour la téléportation de $player" >> "$LOG_FILE"
else
    echo "Le serveur $server ne s'est pas lancé correctement, vérifiez les logs!" >> "$LOG_FILE"
    cat "/home/Lupulus/ServeurMinecraft/$server/logs/latest.log" >> "$LOG_FILE" 2>/dev/null
fi
echo "===== FIN DU SCRIPT 'example2.sh'=====" >> "$LOG_FILE"
 
Code (Text):
#!/bin/bash

# Récupération des arguments
server="$1"
player="$2"
sleep="$3"
customArg="$4"

# Chemin du dossier du script
Directory="/home/Lupulus/ServeurMinecraft/lobby/plugins/ShellCommand/Scripts/"

# Chemin du fichier log d'erreur du script
LOG_FILE="${Directory}log_example.txt"

echo "----- FICHIER LOG DU SCRIPT 'example3.sh' -----" >> "$LOG_FILE"

# Vérification des arguments
echo "Arguments reçus : $@" >> "$LOG_FILE"

if [ "$#" -lt 3 ]; then
    echo "Usage: $0 <server> <player> <custmmsg>" | tee -a "$LOG_FILE"
    exit 1
fi

sleep $3
# Crée une commande à exécuter pour la téléportation
# Crée une commande à exécuter pour la téléportation
command="msg $player $customArg\r"

screen -S lobby -p 0 -X stuff "$command"
echo "Envoie de l'ArgCustom en message privé au joueur $player via la command : $command" >> "$LOG_FILE"
command="send $player $server\r"

screen -S bungeeCord -p 0 -X stuff "$command"

echo "Téléportation du joueur $2 au serveur $1 après $3 seconde via la commande : $command" >> "$LOG_FILE"
echo "===== FIN DU SCRIPT DE TP =====" >> "$LOG_FILE"

Resource Information
Author:
----------
Total Downloads: 37
First Release: Oct 6, 2024
Last Update: Oct 13, 2024
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings