diff --git a/mods/AGE0/backpack/README.txt b/mods/AGE0/backpack/README.txt new file mode 100644 index 000000000..59e63faca --- /dev/null +++ b/mods/AGE0/backpack/README.txt @@ -0,0 +1,2 @@ +Copy of Iron Backpacks https://github.com/gr8pefish/IronBackpacks +Art is used from there under GNU General Public License v3.0 \ No newline at end of file diff --git a/mods/AGE0/backpack/init.lua b/mods/AGE0/backpack/init.lua new file mode 100644 index 000000000..7a3b95a24 --- /dev/null +++ b/mods/AGE0/backpack/init.lua @@ -0,0 +1,202 @@ +local S = minetest.get_translator("backpack") + +local function getBackpackSize(stack) + if not stack:get_definition().groups.backpack_size then + return 0 + end + + return stack:get_definition().groups.backpack_size +end + +local function openBackpack(player, player_name, backapack_stack, context--[[opened equipped or inhand]]) + --minetest.chat_send_all("Enter") + local inv_name = player_name .. "_backpack_tmp" + --Chaeck if something is broken. To prevent item voiding + local inv = minetest.get_inventory({type="detached", name=inv_name}) + if inv ~= nil then + return false, "Backpack is already open!" + end + + minetest.create_detached_inventory(player_name .. "_backpack_tmp", { + --Forbids puting backpacks into backpacks + allow_put = function(inv, listname, index, stack, player) + if minetest.get_item_group(stack:get_name(), "backpack_size") > 0 then + return 0 + else + return stack:get_stack_max() + end + end, + }, player_name) + inv = minetest.get_inventory({type = "detached", name=inv_name}) + inv:set_size("main", getBackpackSize(backapack_stack) * 9) + + local meta = backapack_stack:get_meta() + --minetest.chat_send_all(dump(meta:to_table())) + local content = meta:get_string("backpack:content") + local list = content and minetest.deserialize(content) or {} + + for i,stack in ipairs(list) do + inv:set_stack("main", i, stack) + --[[if stack ~= nil then + minetest.chat_send_all(dump(stack:to_string())) + end]] + end + + local form = "size[9," .. (getBackpackSize(backapack_stack) + 6) .. "]" + .. mcl_formspec.get_itemslot_bg(0, 0, 9, getBackpackSize(backapack_stack)) + .. "list[detached:".. inv_name .. ";main;0,0;9," .. getBackpackSize(backapack_stack) .. ";]" + .. mcl_formspec.get_itemslot_bg(0, getBackpackSize(backapack_stack) + 1.5, 9, 3) + .. "list[current_player;main;0," .. (getBackpackSize(backapack_stack) + 1.5) .. ";9,3;9]" + .. mcl_formspec.get_itemslot_bg(0, getBackpackSize(backapack_stack) + 5, 9, 1) + .. "list[current_player;main;0," .. (getBackpackSize(backapack_stack) + 5) .. ";9,1;]" + .. "listring[current_player;main]" + .. "listring[detached:".. inv_name .. ";main]" + .. "listring[current_player;main]" + minetest.show_formspec(player_name, "backpack:" .. context, form) +end + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if formname == "backpack:equipped" and fields.quit then + --minetest.chat_send_all("Exit") + local player_inv = player:get_inventory() + local backapack_stack = player_inv:get_stack("backpack", 1) + + local inv_name = player:get_player_name() .. "_backpack_tmp" + local inv = minetest.get_inventory({type="detached", name=inv_name}) + local stacks = {} + for i = 0, inv:get_size("main"), 1 do + stacks[i] = inv:get_stack("main", i):to_string() + end + + backapack_stack:get_meta():set_string("backpack:content", minetest.serialize(stacks)) + player_inv:set_stack("backpack", 1, backapack_stack) + --minetest.chat_send_all(dump(meta:to_table())) + minetest.remove_detached_inventory(inv_name) + elseif formname == "backpack:inhand" and fields.quit then + local backapack_stack = player:get_wielded_item() + + local inv_name = player:get_player_name() .. "_backpack_tmp" + local inv = minetest.get_inventory({type="detached", name=inv_name}) + local stacks = {} + for i = 0, inv:get_size("main"), 1 do + stacks[i] = inv:get_stack("main", i):to_string() + end + + backapack_stack:get_meta():set_string("backpack:content", minetest.serialize(stacks)) + player:set_wielded_item(backapack_stack) + minetest.remove_detached_inventory(inv_name) + else + return + end + +end) + +--A chat command for now. Wonna change to hot-key later. +minetest.register_chatcommand("bag", { + func = function(player_name) + local player = minetest.get_player_by_name(player_name) + local player_inv = player:get_inventory() + local backapack_stack = player_inv:get_stack("backpack", 1) + if backapack_stack:is_empty() then + return false, "No backpack equiped!" + end + + openBackpack(player, player_name, backapack_stack, "equipped") + return true, "" + end, +}) + +local function on_backpack_place(itemstack, user, pointed_thing) + openBackpack(user, user:get_player_name(), itemstack, "inhand") + return nil +end + +minetest.register_allow_player_inventory_action(function(player, action, inventory, inventory_info) + if action == "move" and inventory_info.to_list == "backpack" then + local itemstack = inventory:get_stack(inventory_info.from_list, inventory_info.from_index) + if not (minetest.get_item_group(itemstack:get_name(), "backpack_size") > 0) then + return 0 + else + return itemstack:get_stack_max() + end + end +end) + +-- register backapack's +minetest.register_tool("backpack:leather", { + description = S("Leather backpack"), + inventory_image = "backpack_leather.png", + groups = {backpack_size = 1}, + on_place = on_backpack_place, + on_secondary_use = on_backpack_place, +}) + +minetest.register_craftitem("backpack:iron", { + description = S("Iron backpack"), + inventory_image = "backpack_iron.png", + groups = {backpack_size = 2}, + on_place = on_backpack_place, + on_secondary_use = on_backpack_place, +}) + +minetest.register_craftitem("backpack:gold", { + description = S("Gold backpack"), + inventory_image = "backpack_gold.png", + groups = {backpack_size = 3}, + on_place = on_backpack_place, + on_secondary_use = on_backpack_place, +}) + +minetest.register_craftitem("backpack:diamond", { + description = S("Diamond backpack"), + inventory_image = "backpack_diamond.png", + groups = {backpack_size = 4}, + on_place = on_backpack_place, + on_secondary_use = on_backpack_place, +}) + +-- register bag crafts +minetest.register_craft({ + output = "backpack:leather", + recipe = { + {"mcl_mobitems:leather", "mcl_mobitems:leather", "mcl_mobitems:leather"}, + {"mcl_mobitems:leather", "mcl_chests:chest", "mcl_mobitems:leather"}, + {"mcl_mobitems:leather", "mcl_mobitems:leather", "mcl_mobitems:leather"} + } +}) + +minetest.register_craft({ + output = "backpack:iron", + recipe = { + {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "backpack:leather", "mcl_core:iron_ingot"}, + {"mcl_core:iron_ingot", "mcl_core:iron_ingot", "mcl_core:iron_ingot"} + } +}) + +minetest.register_craft({ + output = "backpack:gold", + recipe = { + {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"}, + {"mcl_core:gold_ingot", "backpack:iron", "mcl_core:gold_ingot"}, + {"mcl_core:gold_ingot", "mcl_core:gold_ingot", "mcl_core:gold_ingot"} + } +}) + +minetest.register_craft({ + output = "backpack:diamond", + recipe = { + {"mcl_core:diamond", "mcl_core:diamond", "mcl_core:diamond"}, + {"mcl_core:diamond", "backpack:gold", "mcl_core:diamond"}, + {"mcl_core:diamond", "mcl_core:diamond", "mcl_core:diamond"} + } +}) + +--transfer content of backpack on craft +minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) + if minetest.get_item_group(itemstack:get_name(), "backpack_size") > 0 then + content = old_craft_grid[5]:get_meta():get_string("backpack:content") + itemstack:get_meta():set_string("backpack:content", content) + return itemstack + end +end) \ No newline at end of file diff --git a/mods/AGE0/backpack/locale/backpack.ua.tr b/mods/AGE0/backpack/locale/backpack.ua.tr new file mode 100644 index 000000000..887fa32f1 --- /dev/null +++ b/mods/AGE0/backpack/locale/backpack.ua.tr @@ -0,0 +1,6 @@ +# textdomain: backpack + +Leather backpack=Шкіряний наплічник +Iron backpack=Залізний наплічник +Gold backpack=Золотий наплічник +Diamond backpack=Діамантовий наплічник \ No newline at end of file diff --git a/mods/AGE0/backpack/mod.conf b/mods/AGE0/backpack/mod.conf new file mode 100644 index 000000000..a74f3d819 --- /dev/null +++ b/mods/AGE0/backpack/mod.conf @@ -0,0 +1,3 @@ +name = backpack +author = Morik666 +description = Mode to add backpacks diff --git a/mods/AGE0/backpack/textures/backpack_diamond.png b/mods/AGE0/backpack/textures/backpack_diamond.png new file mode 100644 index 000000000..e0acbb619 Binary files /dev/null and b/mods/AGE0/backpack/textures/backpack_diamond.png differ diff --git a/mods/AGE0/backpack/textures/backpack_gold.png b/mods/AGE0/backpack/textures/backpack_gold.png new file mode 100644 index 000000000..488821306 Binary files /dev/null and b/mods/AGE0/backpack/textures/backpack_gold.png differ diff --git a/mods/AGE0/backpack/textures/backpack_iron.png b/mods/AGE0/backpack/textures/backpack_iron.png new file mode 100644 index 000000000..73519fde8 Binary files /dev/null and b/mods/AGE0/backpack/textures/backpack_iron.png differ diff --git a/mods/AGE0/backpack/textures/backpack_leather.png b/mods/AGE0/backpack/textures/backpack_leather.png new file mode 100644 index 000000000..84cbf8803 Binary files /dev/null and b/mods/AGE0/backpack/textures/backpack_leather.png differ diff --git a/mods/AGE0/modpack.conf b/mods/AGE0/modpack.conf new file mode 100644 index 000000000..cc2d4e8a4 --- /dev/null +++ b/mods/AGE0/modpack.conf @@ -0,0 +1,2 @@ +name = AGE0 +description = Mode-pack for age 0 diff --git a/mods/HUD/mcl_inventory/init.lua b/mods/HUD/mcl_inventory/init.lua index cf484101c..dc1c6546d 100644 --- a/mods/HUD/mcl_inventory/init.lua +++ b/mods/HUD/mcl_inventory/init.lua @@ -100,6 +100,7 @@ minetest.register_on_joinplayer(function(player) inv:set_width("main", 9) inv:set_size("main", 36) inv:set_size("offhand", 1) + inv:set_size("backpack", 1) --set hotbar size player:hud_set_hotbar_itemcount(9) diff --git a/mods/HUD/mcl_inventory/survival.lua b/mods/HUD/mcl_inventory/survival.lua index 5b5c6032c..a0247f8ef 100644 --- a/mods/HUD/mcl_inventory/survival.lua +++ b/mods/HUD/mcl_inventory/survival.lua @@ -100,6 +100,10 @@ local main_page_static = table.concat({ --Player model background "image[1.57,0.343;3.62,4.85;mcl_inventory_background9.png;2]", + + --Backpack + mcl_formspec.get_itemslot_bg_v4(5.375, 2.875, 1, 1), + "list[current_player;backpack;5.375,2.875;1,1]", --Offhand mcl_formspec.get_itemslot_bg_v4(5.375, 4.125, 1, 1), @@ -158,9 +162,14 @@ mcl_inventory.register_survival_inventory_tab({ end end + if inv:get_stack("backpack", 1):is_empty() then + armor_slot_imgs = armor_slot_imgs .. "image[5.375,2.875;1,1;ta_inventory_empty_armor_slot_backpack.png]" + end + if inv:get_stack("offhand", 1):is_empty() then armor_slot_imgs = armor_slot_imgs .. "image[5.375,4.125;1,1;mcl_inventory_empty_armor_slot_shield.png]" end + return main_page_static .. armor_slot_imgs .. mcl_player.get_player_formspec_model(player, 1.57, 0.4, 3.62, 4.85, "") end, handle = function() end, diff --git a/mods/PLAYER/mcl_gamemode/init.lua b/mods/PLAYER/mcl_gamemode/init.lua index a43a9c1ff..8361649f4 100644 --- a/mods/PLAYER/mcl_gamemode/init.lua +++ b/mods/PLAYER/mcl_gamemode/init.lua @@ -60,7 +60,7 @@ end minetest.register_chatcommand("gamemode", { params = S("[] []"), description = S("Change gamemode (survival/creative) for yourself or player"), - privs = { server = true }, + --privs = { server = true }, func = function(n, param) -- Full input validation ( just for @erlehmann <3 ) local p = minetest.get_player_by_name(n) diff --git a/textures/ta_inventory_empty_armor_slot_backpack.png b/textures/ta_inventory_empty_armor_slot_backpack.png new file mode 100644 index 000000000..e043e5260 Binary files /dev/null and b/textures/ta_inventory_empty_armor_slot_backpack.png differ