From 193d900a7bcad373394b836835c79a157664e9e1 Mon Sep 17 00:00:00 2001 From: sys4-fr Date: Wed, 21 Mar 2018 01:28:29 +0100 Subject: [PATCH] Add custom mods - nalc modpack containing: - nalc_lib: functions accessible by other mods - nalc_hardtrees: Trees and other nodes becomes not hand breakable --- custom/mods/nalc/modpack.txt | 0 custom/mods/nalc/nalc_hardtrees/depends.txt | 2 + custom/mods/nalc/nalc_hardtrees/init.lua | 46 ++++ custom/mods/nalc/nalc_lib/depends.txt | 0 custom/mods/nalc/nalc_lib/init.lua | 28 +++ install.sh | 222 +++++++++++++++----- upgrade.sh | 26 ++- 7 files changed, 270 insertions(+), 54 deletions(-) create mode 100644 custom/mods/nalc/modpack.txt create mode 100644 custom/mods/nalc/nalc_hardtrees/depends.txt create mode 100644 custom/mods/nalc/nalc_hardtrees/init.lua create mode 100644 custom/mods/nalc/nalc_lib/depends.txt create mode 100644 custom/mods/nalc/nalc_lib/init.lua diff --git a/custom/mods/nalc/modpack.txt b/custom/mods/nalc/modpack.txt new file mode 100644 index 0000000..e69de29 diff --git a/custom/mods/nalc/nalc_hardtrees/depends.txt b/custom/mods/nalc/nalc_hardtrees/depends.txt new file mode 100644 index 0000000..496304f --- /dev/null +++ b/custom/mods/nalc/nalc_hardtrees/depends.txt @@ -0,0 +1,2 @@ +nalc_lib +default diff --git a/custom/mods/nalc/nalc_hardtrees/init.lua b/custom/mods/nalc/nalc_hardtrees/init.lua new file mode 100644 index 0000000..2234f7c --- /dev/null +++ b/custom/mods/nalc/nalc_hardtrees/init.lua @@ -0,0 +1,46 @@ +--[[ Auteur : sys4 + + Ce mod permet de : + - Ne plus casser les arbres à la main + - Supprimer haches et pioches en bois. + - Fabriquer les outils en pierre avec du silex trouvé dans le gravier + + Remarque : Les sticks sont obtenables grâce au mod youngtrees de plantlife_modpack +]] + +-- Suppression des haches et pioches en bois +minetest.unregister_item("default:axe_wood") +minetest.unregister_item("default:pick_wood") + +-- Suppression du groupe oddly_breakable_by_hand pour les nodes en bois du mod default +local wood_nodes = {} +wood_nodes["default"] = { + "tree", "pine_tree", "jungletree", "acacia_tree", "aspen_tree", + "bush_stem", "acacia_bush_stem", + "wood", "pine_wood", "junglewood", "acacia_wood", "aspen_wood", +} + +for mod, nodes in pairs(wood_nodes) do + for _,name in ipairs(nodes) do + nalc.not_hand_breakable(mod..":"..name) + end +end + +-- Recette de craft pour pioche et hache avec du silex +minetest.register_craft({ + output = "default:axe_stone", + recipe = { + {"default:flint", "default:flint", ""}, + {"default:flint", "default:stick", ""}, + {"", "default:stick", ""}, + } +}) + +minetest.register_craft({ + output = "default:pick_stone", + recipe = { + {"default:flint", "default:flint", "default:flint"}, + {"", "default:stick", ""}, + {"", "default:stick", ""}, + } +}) diff --git a/custom/mods/nalc/nalc_lib/depends.txt b/custom/mods/nalc/nalc_lib/depends.txt new file mode 100644 index 0000000..e69de29 diff --git a/custom/mods/nalc/nalc_lib/init.lua b/custom/mods/nalc/nalc_lib/init.lua new file mode 100644 index 0000000..49cf47f --- /dev/null +++ b/custom/mods/nalc/nalc_lib/init.lua @@ -0,0 +1,28 @@ +nalc = {} + +-- Remove node from a group +local function remove_group(name, group) + local node = minetest.registered_nodes[name] + + if node then + local groups = node.groups + if groups then + for g in pairs(groups) do + if g == group then + groups[g] = 0 + minetest.log("action", "[nalc_lib] "..name.." removed from group "..group..".") + end + end + minetest.override_item(name, {groups = groups}) + else + minetest.log("warning", "[nalc_lib] "..name.." has no groups, could not remove group "..group..".") + end + else + minetest.log("warning", "[nalc_lib] "..name.." not registered, could not remove group "..group..".") + end +end + +-- Remove node from group "oddly_breakable_by_hand" +function nalc.not_hand_breakable(name) + remove_group(name, "oddly_breakable_by_hand") +end diff --git a/install.sh b/install.sh index 9602c25..21fe6f3 100755 --- a/install.sh +++ b/install.sh @@ -1,25 +1,184 @@ #!/bin/bash +# Fonctions +strip() { + echo $1 | cut -d \' -f 2 +} + verif() { - if [[ $? -gt 0 ]]; then - echo "Erreur ! Arrêt du script." - exit 1 - fi + if [[ $? -gt 0 ]]; then + echo "Erreur ! Arrêt du script." + exit 1 + fi } error() { - echo "ERREUR : paramètres invalides !" >&2 - echo "utilisez l'option -h pour en savoir plus" >&2 - exit 1 + echo "ERREUR : Vérifiez vos paramètres !" >&2 + echo "Utilisez l'option -h pour en savoir plus" >&2 + exit 1 } usage() { - echo "Usage : ./install.sh [options]" - echo "--help ou -h : Afficher l'aide" - echo "--ssh : Authentification par ssh" - echo "--https : Authentification publique anonyme" + echo "Usage: ./install.sh [options] [--] " + echo "Options :" + echo "--help | -h : Affiche l'aide." + echo "--verbose | -v : Be verbose !" + echo "--ssh : Identifiants ssh." + echo "--url : URL distante personnalisée." + echo -e "\tSi l'option --ssh est passée en option, il s'agira du chemin distant." + echo "Commandes :" + echo -e "\tinit : Installation par défaut. Suivez les instructions..." + echo -e "\t\tSi une installation précédente est détectée alors le script s'arrête." + echo -e "\tupgrade : Met à jour le serveur tout en sauvegardant la version précédente au cas où." + echo -e "\tclean_install : /!\ Permet de faire une installation qui supprime toute installation précédente (Perte de la map et des paramètres définitif...)." + echo -e "\tuninstall : /!\ Permet de supprimer l'installation courante (Perte de données...)." + exit 0 } +ssh() { + ssh=$(strip $1) + echo "Installation avec identifiants ssh : $ssh" +} + +url() { + url=$(strip $1) +} + +makeopt() { + makeopt=$(strip $1) +} + +full() { + if [[ -n $URL ]]; then + echo "Full install... with "$URL + else + echo "ERREUR: Vous devez choisir l'option --ssh ou --https avec cette commande !" + usage + fi +} + +clean() { + echo "clean install..." +} + +install_minetest() { + if [[ -z $makeopt ]]; then + local makeopt=1 + fi + + if [[ -d minetest ]]; then + echo "Installation précédente de Minetest détecté." + read -p "Mettre à jour ? (y,n,clean,cancel) : " continue + if [[ $continue == "clean" ]]; then + echo "Attention ! Cela va supprimer définitivement toutes les données." + read -p "Êtes-vous certains de vouloir continuer ? (y or n) : " continue + if [[ $continue == "y" ]]; then + echo "rm -rf minetest" + echo "Répertoire minetest supprimé." + else + echo "Installation annulée. Fin" + exit 0 + fi + elif [[ $continue == "y" ]]; then + echo "cd minetest" + echo "git pull" + echo "cd .." + elif [[ $continue == "cancel" ]]; then + echo "Installation annulée. Fin" + exit 0 + fi + fi + + if [[ ! -d minetest ]]; then + echo "git clone $URL/minetest.git" + fi + + echo "Minetest va être recompilé..." + sleep 3 + echo "cd minetest" + echo "cmake ." + echo "make -j$makeopt" + echo "Installation de Minetest terminé." + echo "cd .." +} + +install_minetest_game() { + if [[ -d minetest/games/minetest_game ]]; then + echo "Installation précédente du jeux Minetest détecté." + read -p "Mettre à jour ? (y,n,clean,cancel)" continue + fi +} + +init() { + if [[ -n $ssh && -n $url ]]; then + URL=$ssh\:$url + elif [[ -n $url ]]; then + URL=$url + else + URL="https://github.com/sys4-fr" + fi + + read -p "L'installation va démarrer. Continuer ? (y or n) : " continue + if [[ $continue == "y" ]]; then + install_minetest + install_minetest_game + install_mods + post_configuration + + echo "L'installation est terminé. Bravo !" + else + echo "Installation annulée. Fin." + fi +} + +action() { + local arg=$(strip $1) + if [[ $arg == "init" ]]; then + init + elif [[ $arg == "clean" ]]; then + clean + else + error + fi + exit 0 +} + +# Pas de paramètre +#[[ $# -lt 1 ]] && error +# ou +[[ $# -lt 1 ]] && usage + +# -o : Options courtes +# -l : options longues +OPT=$(getopt -o h,v,j: -l verbose,help,url:,ssh:,makeopt: -- "$@") + +# éclatement de $options en $1, $2... +set -- $OPT + +while true; do + case "$1" in + -v|--verbose) + # TODO + shift;; + -h|--help) + usage;; + --ssh) + ssh $2 + shift 2;; + --url) + url $2 + shift 2;; + -j|--makeopt) + makeopt $2 + shift 2;; + --) + shift;; + *) + action $1 + shift;; + esac +done + install() { if [[ $1 == "ssh" ]]; then read -p "Please enter @ : " ident @@ -47,6 +206,7 @@ install() { # On créé les liens symboliques nécessaires cd .. ln -s $(pwd)/minetest_game minetest/games/minetest_game + ln -s $(pwd)/custom/mods/nalc nalc-server-mods/nalc while read -r mod do ln -s $(pwd)/nalc-server-mods/$mod minetest/mods/$mod @@ -69,43 +229,3 @@ install() { echo "Mise à jour des mods..." exec ./upgrade.sh --mods-link } - -sshinstall() { - if [[ -z `pidof ssh-agent` ]]; then - echo "Exécutez les commandes suivantes :" - echo "$ eval \`ssh-agent -s\`" - echo "$ ssh-add " - echo "Relancez de nouveau le script : ./install.sh --ssh" - exit 0 - fi - - install "ssh" -} - -# Pas de paramètre -[[ $# -lt 1 ]] && error - -# -o : Options courtes -# -l : options longues -options=$(getopt -o h -l help,https,ssh -- "$@") - -# éclatement de $options en $1, $2... -set -- $options - -while true; do - case "$1" in - --ssh) sshinstall - #shift 2;; - exit 0;; - --https) install - #shift;; - exit 0;; - -h|--help) usage - exit 0;; - --) - shift - break;; - *) error - shift;; - esac -done diff --git a/upgrade.sh b/upgrade.sh index 9af1480..d743142 100755 --- a/upgrade.sh +++ b/upgrade.sh @@ -23,6 +23,7 @@ usage() { echo "--mods-link : Met à jour les liens symboliques des mods et le fichier world.mt" echo "--mods : Met à jour le(s) mod(s) depuis le dépôt distant" echo "--minetest : Met à jour le moteur du jeux depuis le dépot distant" + echo "--game : Met à jour le jeux minetest depuis le dépot distant" } modslink() { @@ -78,14 +79,14 @@ modsupgrade() { # On met à jour le dépot local des mods cd nalc-server-mods git pull - git submodule update --init --recursive + git submodule update --remote --recursive verif cd .. else # Mise à jour du mod spécifié en ligne de commande cd nalc-server-mods git pull - git submodule update --init --recursive $1 + git submodule update --remote --recursive $1 verif cd .. fi @@ -101,8 +102,23 @@ minetestupgrade() { cmake . -DRUN_IN_PLACE=true -DENABLE_GETTEXT=true make -j33 cd .. + echo "Upgrade du moteur Minetest terminé." } +gameupgrade() { + cd minetest/games/minetest_game + git pull + cd ../../.. + echo "Upgrade du jeux Minetest terminé." +} + +upgradeall() { + gameupgrade + modsupgrade "all" + minetestupgrade +} + + sshauth() { if [[ -z `pidof ssh-agent` ]]; then echo "Exécutez les commandes suivantes :" @@ -126,7 +142,7 @@ httpauth() { # -o : Options courtes # -l : Options longues -options=$(getopt -o h -l help,https,ssh,mods-link,minetest,mods: -- "$@") +options=$(getopt -o h -l help,https,ssh,mods-link,minetest,game,mods: -- "$@") # Éclatement de $options en $1, $2... set -- $options @@ -143,6 +159,10 @@ while true; do shift 2;; --minetest) minetestupgrade shift;; + --game) gameupgrade + shift;; + --all) upgradeall + shift;; -h|--help) usage exit 0;; --)