Merge pull request #7 from TeTpaAka/sfinv

Create a proper sfinv page and remove the dependency to sfinv_buttons
master
Brett O'Donnell 2018-04-12 08:57:20 +09:30 committed by GitHub
commit bc87b45e30
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 114 additions and 79 deletions

View File

@ -1,3 +1,3 @@
default
inventory_plus?
sfinv_buttons?
sfinv?

View File

@ -10,90 +10,14 @@ License: BSD-3-Clause https://raw.github.com/cornernote/minetest-bags/master/LIC
local use_sfinv = false
if not core.global_exists("inventory_plus") and core.global_exists("sfinv_buttons") then
if not core.global_exists("inventory_plus") and core.global_exists("sfinv") then
use_sfinv = true
else
local use_sfinv = (core.global_exists("sfinv_buttons") and core.settings:get("inventory") == "sfinv") or false
end
-- get_formspec
local get_formspec = function(player,page)
if page=="bags" then
return "size[8,7.5]"
.."list[current_player;main;0,3.5;8,4;]"
.."button[0,0;2,0.5;main;Back]"
.."button[0,2;2,0.5;bag1;Bag 1]"
.."button[2,2;2,0.5;bag2;Bag 2]"
.."button[4,2;2,0.5;bag3;Bag 3]"
.."button[6,2;2,0.5;bag4;Bag 4]"
.."list[detached:"..player:get_player_name().."_bags;bag1;0.5,1;1,1;]"
.."list[detached:"..player:get_player_name().."_bags;bag2;2.5,1;1,1;]"
.."list[detached:"..player:get_player_name().."_bags;bag3;4.5,1;1,1;]"
.."list[detached:"..player:get_player_name().."_bags;bag4;6.5,1;1,1;]"
end
for i=1,4 do
if page=="bag"..i then
local image = player:get_inventory():get_stack("bag"..i, 1):get_definition().inventory_image
return "size[8,8.5]"
.."list[current_player;main;0,4.5;8,4;]"
.."button[0,0;2,0.5;main;Main]"
.."button[2,0;2,0.5;bags;Bags]"
.."image[7,0;1,1;"..image.."]"
.."list[current_player;bag"..i.."contents;0,1;8,3;]"
.."listring[current_name;bag"..i.."contents]"
.."listring[current_player;main]"
end
end
end
-- register_on_player_receive_fields
minetest.register_on_player_receive_fields(function(player, formname, fields)
if use_sfinv then
if fields.main then
return sfinv.set_page(player, "sfinv_buttons:buttons")
elseif fields.bags then
player:set_inventory_formspec(get_formspec(player, "bags"))
return
end
elseif fields.bags then
inventory_plus.set_inventory_formspec(player, get_formspec(player,"bags"))
return
end
for i=1,4 do
local page = "bag"..i
if fields[page] then
if player:get_inventory():get_stack(page, 1):get_definition().groups.bagslots==nil then
page = "bags"
end
if use_sfinv then
player:set_inventory_formspec(get_formspec(player, page))
else
inventory_plus.set_inventory_formspec(player, get_formspec(player,page))
end
return
end
end
end)
if use_sfinv then
sfinv_buttons.register_button("bags", {
title = "Bags",
action = function(player)
player:set_inventory_formspec(get_formspec(player, "bags"))
end,
image = "bags_small.png",
})
local use_sfinv = (core.global_exists("sfinv") and core.settings:get("inventory") == "sfinv") or false
end
-- register_on_joinplayer
minetest.register_on_joinplayer(function(player)
if not use_sfinv then
inventory_plus.register_button(player,"bags","Bags")
end
local player_inv = player:get_inventory()
local bags_inv = minetest.create_detached_inventory(player:get_player_name().."_bags",{
on_put = function(inv, listname, index, stack, player)
@ -170,6 +94,11 @@ minetest.register_craft({
{"bags:medium", "bags:medium"},
},
})
if use_sfinv then
dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/sfinv.lua")
else
dofile(minetest.get_modpath(minetest.get_current_modname()) .. "/inventory_plus.lua")
end
-- log that we started
minetest.log("action", "[MOD]"..minetest.get_current_modname().." -- loaded from "..minetest.get_modpath(minetest.get_current_modname()))

55
bags/inventory_plus.lua Normal file
View File

@ -0,0 +1,55 @@
-- get_formspec
local get_formspec = function(player,page)
if page=="bags" then
return "size[8,7.5]"
.."list[current_player;main;0,3.5;8,4;]"
.."button[0,0;2,0.5;main;Back]"
.."button[0,2;2,0.5;bag1;Bag 1]"
.."button[2,2;2,0.5;bag2;Bag 2]"
.."button[4,2;2,0.5;bag3;Bag 3]"
.."button[6,2;2,0.5;bag4;Bag 4]"
.."list[detached:"..player:get_player_name().."_bags;bag1;0.5,1;1,1;]"
.."list[detached:"..player:get_player_name().."_bags;bag2;2.5,1;1,1;]"
.."list[detached:"..player:get_player_name().."_bags;bag3;4.5,1;1,1;]"
.."list[detached:"..player:get_player_name().."_bags;bag4;6.5,1;1,1;]"
end
for i=1,4 do
if page=="bag"..i then
local image = player:get_inventory():get_stack("bag"..i, 1):get_definition().inventory_image
return "size[8,8.5]"
.."list[current_player;main;0,4.5;8,4;]"
.."button[0,0;2,0.5;main;Main]"
.."button[2,0;2,0.5;bags;Bags]"
.."image[7,0;1,1;"..image.."]"
.."list[current_player;bag"..i.."contents;0,1;8,3;]"
.."listring[current_name;bag"..i.."contents]"
.."listring[current_player;main]"
end
end
end
-- register_on_player_receive_fields
minetest.register_on_player_receive_fields(function(player, formname, fields)
if fields.bags then
inventory_plus.set_inventory_formspec(player, get_formspec(player,"bags"))
return
end
for i=1,4 do
local page = "bag"..i
if fields[page] then
if player:get_inventory():get_stack(page, 1):get_definition().groups.bagslots==nil then
page = "bags"
end
inventory_plus.set_inventory_formspec(player, get_formspec(player,page))
return
end
end
end)
-- register_on_joinplayer
minetest.register_on_joinplayer(function(player)
inventory_plus.register_button(player,"bags","Bags")
end)

51
bags/sfinv.lua Normal file
View File

@ -0,0 +1,51 @@
sfinv.register_page("bags:bags", {
title = "Bags",
get = function(self, player, context)
local bags_inv = ""
if context.bags_page == nil or context.bags_page == "bags" then
bags_inv = "button[0,2;2,0.5;bag1;Bag 1]"
.."button[2,2;2,0.5;bag2;Bag 2]"
.."button[4,2;2,0.5;bag3;Bag 3]"
.."button[6,2;2,0.5;bag4;Bag 4]"
.."list[detached:"..player:get_player_name().."_bags;bag1;0.5,1;1,1;]"
.."list[detached:"..player:get_player_name().."_bags;bag2;2.5,1;1,1;]"
.."list[detached:"..player:get_player_name().."_bags;bag3;4.5,1;1,1;]"
.."list[detached:"..player:get_player_name().."_bags;bag4;6.5,1;1,1;]"
else
for i=1,4 do
if context.bags_page=="bag"..i then
local image = player:get_inventory():get_stack("bag"..i, 1):get_definition().inventory_image
bags_inv = "button[2,0;2,0.5;bags_return;Return]"
.."image[7,0;1,1;"..image.."]"
.."list[current_player;bag"..i.."contents;0,1;8,3;]"
.."listring[current_name;bag"..i.."contents]"
.."listring[current_player;main]"
end
end
end
local formspec = sfinv.make_formspec(player, context, bags_inv, true)
return formspec
end,
on_player_receive_fields = function(self, player, context, fields)
if fields.bags_return then
context.bags_page = "bags"
sfinv.set_player_inventory_formspec(player)
return true
end
for i=1,4 do
local page = "bag"..i
if fields[page] then
if player:get_inventory():get_stack(page, 1):get_definition().groups.bagslots==nil then
context.bags_page = "bags"
else
context.bags_page = page
end
sfinv.set_player_inventory_formspec(player)
return true
end
end
return false
end
})