diff --git a/init.lua b/init.lua index 719ac06..3c1f3ad 100644 --- a/init.lua +++ b/init.lua @@ -1,30 +1,389 @@ -local S = minetest.get_translator("chest_recovery") -- Récupérer le traducteur pour ce mod + local S = minetest.get_translator("chest_recovery") -- Récupérer le traducteur pour ce mod -minetest.register_node("chest_recovery:chest", { - drop = "", - description = S("Recovery Chest") .. "\n" .. S("32 slots"), - tiles = {"chest_chest.png^[sheet:2x2:0,0", "chest_chest.png^[sheet:2x2:0,0", - "chest_chest.png^[sheet:2x2:1,0", "chest_chest.png^[sheet:2x2:1,0", - "chest_chest.png^[sheet:2x2:1,0", "chest_chest.png^[sheet:2x2:0,1"}, - paramtype2 = "facedir", - groups = {dig_immediate = 2, choppy = 3, meta_is_privatizable = 1}, - is_ground_content = false, - on_construct = function(pos) - local meta = minetest.get_meta(pos) - meta:set_string("formspec", - "size[9,11]".. - "list[current_name;main;0,0;9,4;]".. --- Ligne 1 - mcl_formspec.get_itemslot_bg_v4(0, 0, 1, 1) .. - mcl_formspec.get_itemslot_bg_v4(1, 0, 1, 1) .. - mcl_formspec.get_itemslot_bg_v4(2, 0, 1, 1) .. - mcl_formspec.get_itemslot_bg_v4(3, 0, 1, 1) .. - mcl_formspec.get_itemslot_bg_v4(4, 0, 1, 1) .. - mcl_formspec.get_itemslot_bg_v4(5, 0, 1, 1) .. - mcl_formspec.get_itemslot_bg_v4(6, 0, 1, 1) .. - mcl_formspec.get_itemslot_bg_v4(7, 0, 1, 1) .. - mcl_formspec.get_itemslot_bg_v4(8, 0, 1, 1) .. --- Ligne 2 + minetest.register_node("chest_recovery:chest", { + drop = "", + description = S("Recovery Chest") .. "\n" .. S("32 slots"), + tiles = {"chest_chest.png^[sheet:2x2:0,0", "chest_chest.png^[sheet:2x2:0,0", + "chest_chest.png^[sheet:2x2:1,0", "chest_chest.png^[sheet:2x2:1,0", + "chest_chest.png^[sheet:2x2:1,0", "chest_chest.png^[sheet:2x2:0,1"}, + paramtype2 = "facedir", + groups = {dig_immediate = 2, choppy = 3, meta_is_privatizable = 1}, + is_ground_content = false, + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", + "size[9,11]".. + "list[current_name;main;0,0;9,4;]".. + -- Ligne 1 + mcl_formspec.get_itemslot_bg_v4(0, 0, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 0, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 0, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 0, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 0, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 0, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 0, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 0, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 0, 1, 1) .. + -- Ligne 2 + mcl_formspec.get_itemslot_bg_v4(0, 1, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 1, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 1, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 1, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 1, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 1, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 1, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 1, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 1, 1, 1) .. + + -- Ligne 3 + mcl_formspec.get_itemslot_bg_v4(0, 2, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 2, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 2, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 2, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 2, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 2, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 2, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 2, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 2, 1, 1) .. + + -- Ligne 4 + mcl_formspec.get_itemslot_bg_v4(0, 3, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 3, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 3, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 3, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 3, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 3, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 3, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 3, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 3, 1, 1) .. + + -- Ligne 5 + mcl_formspec.get_itemslot_bg_v4(1, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 4, 1, 1) .. + + -- Ligne 6 + + -- Ligne 7 + mcl_formspec.get_itemslot_bg_v4(1, 6, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 6, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 6, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 6, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 6, 1, 1) .. + + -- Ligne 8 + + mcl_formspec.get_itemslot_bg_v4(0, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 7, 1, 1) .. + + -- Ligne 9 + mcl_formspec.get_itemslot_bg_v4(0, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 8, 1, 1) .. + + -- Ligne 10 + mcl_formspec.get_itemslot_bg_v4(0, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 9, 1, 1) .. + + -- Ligne 11 + mcl_formspec.get_itemslot_bg_v4(0, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 10, 1, 1) .. + + + + "list[current_name;armor;0,4;5,1;]".. + "list[current_name;offhand;6,4;10,1;]" .. + "label[0,5;-------------------------------------------]".. + "list[current_player;offhand;6,6;9,1;]" .. + "list[current_player;armor;0,6;9,1;]".. + "list[current_player;main;0,7;9,4;]".. + "listring[]".. + "button[5,5;3,1;transfer;" .. S("Transfer All") .. "]") + meta:set_string("infotext", "Coffre") + local inv = meta:get_inventory() + inv:set_size("main", 9 * 4) + inv:set_size("armor", 9) + inv:set_size("offhand", 1) + end, + on_destruct = function(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local drop_items = {} + + for _, listname in ipairs({"main", "armor", "offhand", "craft"}) do + for i = 1, inv:get_size(listname) do + local stack = inv:get_stack(listname, i) + if not stack:is_empty() then + table.insert(drop_items, stack:to_table()) + end + end + end + + -- Lâcher tous les objets au-dessus du nœud du coffre + for _, item in ipairs(drop_items) do + minetest.add_item(pos, ItemStack(item)) + end + end, + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + -- Code à exécuter lorsque le joueur clique avec le bouton droit sur le coffre + --minetest.chat_send_player(player:get_player_name(), "Coffre ouvert!") + + -- Supprimer toutes les boussoles de récupération de l'inventaire du joueur + local player_inv = player:get_inventory() + + for i = 1, player_inv:get_size("main") do + local stack = player_inv:get_stack("main", i) + --minetest.chat_send_player(player:get_player_name(), "Nom de l'item : " .. stack:get_name()) + + if stack:get_name():find("mcl_compass:.*_recovery") then + -- Utilisez la méthode remove_item pour supprimer l'élément de l'inventaire + player_inv:remove_item("main", stack) + --minetest.chat_send_player(player:get_player_name(), "Coffre de récupération supprimé!") + end + end + end, + on_receive_fields = function(pos, formname, fields, sender) + if fields.transfer then + -- Transférer tout le contenu du coffre vers l'inventaire du joueur + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local player_inv = sender:get_inventory() + + + + -- Supprimer toutes les boussoles de récupération de l'inventaire du joueur + for i = 1, player_inv:get_size("main") do + local stack = player_inv:get_stack("main", i) + --.chat_send_player(sender:get_player_name(), "Nom de l'item : " .. stack:get_name()) + + if stack:get_name():find("mcl_compass:.*_recovery") then + -- Utilisez la méthode remove_item pour supprimer l'élément de l'inventaire + player_inv:remove_item("main", stack) + end + end + + + + + + + + -- Transférer l'armure + for i = 1, inv:get_size("armor") do + local stack = inv:get_stack("armor", i) + if i > 1 or not stack:is_empty() then + local player_armor_stack = player_inv:get_stack("armor", i) + if player_armor_stack:is_empty() then + player_inv:set_stack("armor", i, stack) + inv:set_stack("armor", i, ItemStack(nil)) + end + end + end + -- Mettre à jour l'armure du joueur + -- Vérifier si le joueur existe + -- Vérifier si le mod "mcl_armor" est chargé + if minetest.get_modpath("mcl_armor") then + -- Mettre à jour les informations du joueur avec le mod + local player_name = sender:get_player_name() + local player = minetest.get_player_by_name(player_name) + mcl_armor.update(player) + end + + + + + -- Transférer l'offhand + local offhand_stack = inv:get_stack("offhand", 1) + local leftover_offhand = player_inv:add_item("offhand", offhand_stack) + inv:set_stack("offhand", 1, leftover_offhand) + + -- Transférer le reste de l'inventaire principal + for i = 1, inv:get_size("main") do + local stack = inv:get_stack("main", i) + local leftover = player_inv:add_item("main", stack) + inv:set_stack("main", i, leftover) + end + -- Vérifier si le coffre est vide, puis le supprimer + if inv:is_empty("main") and inv:is_empty("armor") and inv:is_empty("offhand") then + minetest.remove_node(pos) + end + end + end, + }) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- Fonction appelée lorsqu'un joueur meurt + minetest.register_on_dieplayer(function(player) + -- Récupérer l'inventaire du joueur + local player_inv = player:get_inventory() + local pos = player:get_pos() + pos.y = pos.y -- Réglage de la coordonnée Y (elle semble inchangée) + + -- rendre les cordonner en entier + pos.x = math.floor(pos.x) + pos.y = math.floor(pos.y) + backuppos = pos.y + pos.z = math.floor(pos.z) + + + -- Envoyer un message au joueur indiquant ses coordonnées après la mort + minetest.chat_send_player(player:get_player_name(), "Vous êtes mort, aux coordonnées : " .. minetest.pos_to_string(pos)) + + + + --si y estentre -27000 et -28000 alors on met la position a -27000 + if pos.y < -27000 and pos.y > -28000 then + pos.y = -27001 + end + + + --detecter si la postion du pos est dans un bloc vide + local node = minetest.get_node(pos) + --si le node name n'est pas air alors on marque le message + -- Vérifie si le nom du nœud n'est pas "air" + if node.name ~= "air" then + -- Sauvegarde la position initiale de y + local backuppos = pos.y + + -- Recherche de la position d'un bloc vide au-dessus de la position + while node.name ~= "air" do + pos.y = pos.y + 1 + node = minetest.get_node(pos) + + if node.name == "mcl_core:bedrock" then + pos.y = pos.y - 1 + node = minetest.get_node(pos) + + if node.name == "mcl_nether:netherrack" or node.name == "mcl_blackstone:nether_gold" then + minetest.remove_node(pos) + pos.y = pos.y - 1 + else + pos.y = backuppos + + while node.name ~= "air" do -- tant que le nom du nœud n'est pas "air" + pos.y = pos.y - 1 + node = minetest.get_node(pos) + + if node.name == "mcl_core:bedrock" then + pos.y = backuppos + -- Casse le bloc pour poser le coffre + minetest.remove_node(pos) + pos.y = pos.y + 1 + end + end + + --pos.y = pos.y - 1 + end + end + end + + -- On marque le message avec la nouvelle position + end + + + + + + -- Placer un coffre de récupération à la position du joueur décédé + minetest.set_node(pos, {name = "chest_recovery:chest"}) + minetest.chat_send_player(player:get_player_name(), "votre coffre de récupération est à la position : " .. minetest.pos_to_string(pos)) + + + -- Obtenir les métadonnées et l'inventaire du coffre de récupération + local chest_meta = minetest.get_meta(pos) + local chest_inv = chest_meta:get_inventory() + + local is_empty = true + + -- Transférer les objets de l'inventaire du joueur au coffre de récupération + for _, listname in ipairs({"main", "armor", "offhand", "craft"}) do + for i = 1, player_inv:get_size(listname) do + local stack = player_inv:get_stack(listname, i) + chest_inv:set_stack(listname, i, stack) + player_inv:set_stack(listname, i, ItemStack(nil)) + if not stack:is_empty() then + is_empty = false + end + end + end + + -- Si l'inventaire du joueur était vide, supprimer le coffre + if is_empty then + minetest.remove_node(pos) + else + -- Mettre à jour le formulaire du coffre avec les emplacements d'objets + local chest_formspec = "size[9,12]".. + -- marque le speudo du joueur comme ca : recovery chest de "pseudo" avec l'option de traduction + "label[0,0; " .. S("Recovery Chest of") .. " " .. player:get_player_name() .. "]".. + "list[current_name;main;0,1;9,4;]".. + + -- Ligne 2 mcl_formspec.get_itemslot_bg_v4(0, 1, 1, 1) .. mcl_formspec.get_itemslot_bg_v4(1, 1, 1, 1) .. mcl_formspec.get_itemslot_bg_v4(2, 1, 1, 1) .. @@ -35,7 +394,7 @@ minetest.register_node("chest_recovery:chest", { mcl_formspec.get_itemslot_bg_v4(7, 1, 1, 1) .. mcl_formspec.get_itemslot_bg_v4(8, 1, 1, 1) .. --- Ligne 3 + -- Ligne 3 mcl_formspec.get_itemslot_bg_v4(0, 2, 1, 1) .. mcl_formspec.get_itemslot_bg_v4(1, 2, 1, 1) .. mcl_formspec.get_itemslot_bg_v4(2, 2, 1, 1) .. @@ -46,7 +405,7 @@ minetest.register_node("chest_recovery:chest", { mcl_formspec.get_itemslot_bg_v4(7, 2, 1, 1) .. mcl_formspec.get_itemslot_bg_v4(8, 2, 1, 1) .. --- Ligne 4 + -- Ligne 4 mcl_formspec.get_itemslot_bg_v4(0, 3, 1, 1) .. mcl_formspec.get_itemslot_bg_v4(1, 3, 1, 1) .. mcl_formspec.get_itemslot_bg_v4(2, 3, 1, 1) .. @@ -57,485 +416,158 @@ minetest.register_node("chest_recovery:chest", { mcl_formspec.get_itemslot_bg_v4(7, 3, 1, 1) .. mcl_formspec.get_itemslot_bg_v4(8, 3, 1, 1) .. --- Ligne 5 -mcl_formspec.get_itemslot_bg_v4(1, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 4, 1, 1) .. - --- Ligne 6 - --- Ligne 7 -mcl_formspec.get_itemslot_bg_v4(1, 6, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 6, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 6, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 6, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 6, 1, 1) .. - --- Ligne 8 - -mcl_formspec.get_itemslot_bg_v4(0, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 7, 1, 1) .. - --- Ligne 9 -mcl_formspec.get_itemslot_bg_v4(0, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 8, 1, 1) .. - --- Ligne 10 -mcl_formspec.get_itemslot_bg_v4(0, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 9, 1, 1) .. - --- Ligne 11 -mcl_formspec.get_itemslot_bg_v4(0, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 10, 1, 1) .. + --ligne 5 + mcl_formspec.get_itemslot_bg_v4(0, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 4, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 4, 1, 1) .. + -- Ligne 6 + mcl_formspec.get_itemslot_bg_v4(1, 5, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 5, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 5, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 5, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 5, 1, 1) .. - "list[current_name;armor;0,4;5,1;]".. - "list[current_name;offhand;6,4;10,1;]" .. - "label[0,5;-------------------------------------------]".. - "list[current_player;offhand;6,6;9,1;]" .. - "list[current_player;armor;0,6;9,1;]".. - "list[current_player;main;0,7;9,4;]".. + + + -- Ligne 8 + + mcl_formspec.get_itemslot_bg_v4(1, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 7, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 7, 1, 1) .. + + -- Ligne 9 + mcl_formspec.get_itemslot_bg_v4(0, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 8, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 8, 1, 1) .. + + -- Ligne 10 + mcl_formspec.get_itemslot_bg_v4(0, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 9, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 9, 1, 1) .. + + -- Ligne 11 + mcl_formspec.get_itemslot_bg_v4(0, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 10, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 10, 1, 1) .. + + --ligne 12 + mcl_formspec.get_itemslot_bg_v4(0, 11, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(1, 11, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(2, 11, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(3, 11, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(4, 11, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(5, 11, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(6, 11, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(7, 11, 1, 1) .. + mcl_formspec.get_itemslot_bg_v4(8, 11, 1, 1) .. + + + + + "list[current_name;armor;0,5;5,1;]".. + "list[current_name;offhand;6,5;10,1;]" .. + -- marque le speudo du joueur comme ca : recovery chest de "pseudo" avec l'option de traduction + "label[0,6; -------------------------------------------]".. + "list[current_player;offhand;6,7;9,1;]" .. + "list[current_player;armor;0,7;9,1;]".. + "list[current_player;main;0,8;9,4;]".. "listring[]".. - "button[5,5;3,1;transfer;" .. S("Transfer All") .. "]") - meta:set_string("infotext", "Coffre") - local inv = meta:get_inventory() - inv:set_size("main", 9 * 4) - inv:set_size("armor", 9) - inv:set_size("offhand", 1) - end, - on_destruct = function(pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local drop_items = {} + "button[5,6;3,1;transfer;" .. S("Transfer All") .. "]" + chest_meta:set_string("formspec", chest_formspec) + end + end) - for _, listname in ipairs({"main", "armor", "offhand", "craft"}) do - for i = 1, inv:get_size(listname) do - local stack = inv:get_stack(listname, i) - if not stack:is_empty() then - table.insert(drop_items, stack:to_table()) - end - end + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- Define compass_frames as a global variable + compass_frames = 32 + + minetest.register_on_respawnplayer(function(player) + -- Generate a new random frame for the recovery compass + local random_frame = math.random(0, compass_frames - 1) + + -- Create the recovery compass item + local recovery_compass = ItemStack("mcl_compass:" .. random_frame .. "_recovery") + local player_inv_2 = player:get_inventory() + + if player_inv_2 then + player_inv_2:add_item("main", recovery_compass) end - -- Lâcher tous les objets au-dessus du nœud du coffre - for _, item in ipairs(drop_items) do - minetest.add_item(pos, ItemStack(item)) - end - end, - on_rightclick = function(pos, node, player, itemstack, pointed_thing) - -- Code à exécuter lorsque le joueur clique avec le bouton droit sur le coffre - --minetest.chat_send_player(player:get_player_name(), "Coffre ouvert!") - - -- Supprimer toutes les boussoles de récupération de l'inventaire du joueur - local player_inv = player:get_inventory() - - for i = 1, player_inv:get_size("main") do - local stack = player_inv:get_stack("main", i) - --minetest.chat_send_player(player:get_player_name(), "Nom de l'item : " .. stack:get_name()) - - if stack:get_name():find("mcl_compass:.*_recovery") then - -- Utilisez la méthode remove_item pour supprimer l'élément de l'inventaire - player_inv:remove_item("main", stack) - --minetest.chat_send_player(player:get_player_name(), "Coffre de récupération supprimé!") - end - end - end, - on_receive_fields = function(pos, formname, fields, sender) - if fields.transfer then - -- Transférer tout le contenu du coffre vers l'inventaire du joueur - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local player_inv = sender:get_inventory() - - - - -- Supprimer toutes les boussoles de récupération de l'inventaire du joueur -for i = 1, player_inv:get_size("main") do - local stack = player_inv:get_stack("main", i) - --.chat_send_player(sender:get_player_name(), "Nom de l'item : " .. stack:get_name()) - - if stack:get_name():find("mcl_compass:.*_recovery") then - -- Utilisez la méthode remove_item pour supprimer l'élément de l'inventaire - player_inv:remove_item("main", stack) - end -end - - - - - - - - -- Transférer l'armure -for i = 1, inv:get_size("armor") do - local stack = inv:get_stack("armor", i) - if i > 1 or not stack:is_empty() then - local player_armor_stack = player_inv:get_stack("armor", i) - if player_armor_stack:is_empty() then - player_inv:set_stack("armor", i, stack) - inv:set_stack("armor", i, ItemStack(nil)) - end - end -end --- Mettre à jour l'armure du joueur --- Vérifier si le joueur existe - -- Vérifier si le mod "mcl_armor" est chargé - if minetest.get_modpath("mcl_armor") then - -- Mettre à jour les informations du joueur avec le mod - local player_name = sender:get_player_name() - local player = minetest.get_player_by_name(player_name) - mcl_armor.update(player) - end - - - - - -- Transférer l'offhand - local offhand_stack = inv:get_stack("offhand", 1) - local leftover_offhand = player_inv:add_item("offhand", offhand_stack) - inv:set_stack("offhand", 1, leftover_offhand) - - -- Transférer le reste de l'inventaire principal - for i = 1, inv:get_size("main") do - local stack = inv:get_stack("main", i) - local leftover = player_inv:add_item("main", stack) - inv:set_stack("main", i, leftover) - end - -- Vérifier si le coffre est vide, puis le supprimer - if inv:is_empty("main") and inv:is_empty("armor") and inv:is_empty("offhand") then - minetest.remove_node(pos) - end - end - end, -}) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --- Fonction appelée lorsqu'un joueur meurt -minetest.register_on_dieplayer(function(player) - -- Récupérer l'inventaire du joueur - local player_inv = player:get_inventory() - local pos = player:get_pos() - pos.y = pos.y -- Réglage de la coordonnée Y (elle semble inchangée) - - -- rendre les cordonner en entier - pos.x = math.floor(pos.x) - pos.y = math.floor(pos.y) - pos.z = math.floor(pos.z) - - - -- Envoyer un message au joueur indiquant ses coordonnées après la mort - minetest.chat_send_player(player:get_player_name(), "Vous êtes mort, aux coordonnées : " .. minetest.pos_to_string(pos)) - - - - --si y estentre -27000 et -28000 alors on met la position a -27000 - if pos.y < -27000 and pos.y > -28000 then - pos.y = -27001 - end - - - --detecter si la postion du pos est dans un bloc vide - local node = minetest.get_node(pos) - --si le node name n'est pas air alors on marque le message - if node.name ~= "air" then - --recherche de la position dun bloc vide au dessus du de la position - --temp que le node name n'est pas air alors on ajoute 1 a la position Y - while node.name ~= "air" do - pos.y = pos.y + 1 - node = minetest.get_node(pos) - end - --on marque le message avec la nouvelle position - end - - - - - -- Placer un coffre de récupération à la position du joueur décédé - minetest.set_node(pos, {name = "chest_recovery:chest"}) - minetest.chat_send_player(player:get_player_name(), "votre coffre de récupération est à la position : " .. minetest.pos_to_string(pos)) - - - -- Obtenir les métadonnées et l'inventaire du coffre de récupération - local chest_meta = minetest.get_meta(pos) - local chest_inv = chest_meta:get_inventory() - - local is_empty = true - - -- Transférer les objets de l'inventaire du joueur au coffre de récupération - for _, listname in ipairs({"main", "armor", "offhand", "craft"}) do - for i = 1, player_inv:get_size(listname) do - local stack = player_inv:get_stack(listname, i) - chest_inv:set_stack(listname, i, stack) - player_inv:set_stack(listname, i, ItemStack(nil)) - if not stack:is_empty() then - is_empty = false - end - end - end - - -- Si l'inventaire du joueur était vide, supprimer le coffre - if is_empty then - minetest.remove_node(pos) - else - -- Mettre à jour le formulaire du coffre avec les emplacements d'objets - local chest_formspec = "size[9,12]".. - -- marque le speudo du joueur comme ca : recovery chest de "pseudo" avec l'option de traduction - "label[0,0; " .. S("Recovery Chest of") .. " " .. player:get_player_name() .. "]".. - "list[current_name;main;0,1;9,4;]".. - --- Ligne 2 -mcl_formspec.get_itemslot_bg_v4(0, 1, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 1, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 1, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 1, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 1, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 1, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 1, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 1, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 1, 1, 1) .. - --- Ligne 3 -mcl_formspec.get_itemslot_bg_v4(0, 2, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 2, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 2, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 2, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 2, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 2, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 2, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 2, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 2, 1, 1) .. - --- Ligne 4 -mcl_formspec.get_itemslot_bg_v4(0, 3, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 3, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 3, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 3, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 3, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 3, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 3, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 3, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 3, 1, 1) .. - ---ligne 5 -mcl_formspec.get_itemslot_bg_v4(0, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 4, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 4, 1, 1) .. --- Ligne 6 -mcl_formspec.get_itemslot_bg_v4(1, 5, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 5, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 5, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 5, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 5, 1, 1) .. - - - - - --- Ligne 8 - -mcl_formspec.get_itemslot_bg_v4(1, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 7, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 7, 1, 1) .. - --- Ligne 9 -mcl_formspec.get_itemslot_bg_v4(0, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 8, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 8, 1, 1) .. - --- Ligne 10 -mcl_formspec.get_itemslot_bg_v4(0, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 9, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 9, 1, 1) .. - --- Ligne 11 -mcl_formspec.get_itemslot_bg_v4(0, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 10, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 10, 1, 1) .. - ---ligne 12 -mcl_formspec.get_itemslot_bg_v4(0, 11, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(1, 11, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(2, 11, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(3, 11, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(4, 11, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(5, 11, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(6, 11, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(7, 11, 1, 1) .. -mcl_formspec.get_itemslot_bg_v4(8, 11, 1, 1) .. - - - - - "list[current_name;armor;0,5;5,1;]".. - "list[current_name;offhand;6,5;10,1;]" .. - -- marque le speudo du joueur comme ca : recovery chest de "pseudo" avec l'option de traduction - "label[0,6; -------------------------------------------]".. - "list[current_player;offhand;6,7;9,1;]" .. - "list[current_player;armor;0,7;9,1;]".. - "list[current_player;main;0,8;9,4;]".. - "listring[]".. - "button[5,6;3,1;transfer;" .. S("Transfer All") .. "]" - chest_meta:set_string("formspec", chest_formspec) - end -end) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --- Define compass_frames as a global variable -compass_frames = 32 - -minetest.register_on_respawnplayer(function(player) - -- Generate a new random frame for the recovery compass - local random_frame = math.random(0, compass_frames - 1) - - -- Create the recovery compass item - local recovery_compass = ItemStack("mcl_compass:" .. random_frame .. "_recovery") - local player_inv_2 = player:get_inventory() - - if player_inv_2 then - player_inv_2:add_item("main", recovery_compass) - end - -end) + end)