Skip to content

Commit 06cb293

Browse files
committedDec 21, 2013
Full unified_inventory and inventory_plus support!
1 parent c48cf3c commit 06cb293

File tree

1 file changed

+44
-15
lines changed

1 file changed

+44
-15
lines changed
 

‎worldedit_gui/init.lua

+44-15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
--wip: support unified_inventory, it even seems to have some sort of API now
2-
--wip: make it look good with image buttons and stuff
3-
41
worldedit = worldedit or {}
52

63
--[[
@@ -20,6 +17,8 @@ Use `nil` for the `get_formspec` field to denote that the function does not have
2017
Use `nil` for the `privs` field to denote that no special privileges are required to use the function.
2118
2219
If the identifier is already registered to another function, it will be replaced by the new one.
20+
21+
The `on_select` function must not call `worldedit.show_page`
2322
]]
2423

2524
worldedit.pages = {} --mapping of identifiers to options
@@ -68,21 +67,47 @@ local get_formspec = function(name, identifier)
6867
return worldedit.pages["worldedit_gui"].get_formspec(name) --default to showing main page if an unknown page is given
6968
end
7069

71-
worldedit.show_page = function(name, page)
72-
--wip
73-
print("not implemented")
74-
end
7570

76-
--add button to inventory_plus if it is installed
77-
if inventory_plus then
71+
if unified_inventory then
72+
local old_func = worldedit.register_gui_function
73+
worldedit.register_gui_function = function(identifier, options)
74+
old_func(identifier, options)
75+
unified_inventory.register_page(identifier, {get_formspec=function(player) return {formspec=options.get_formspec(player:get_player_by_name())} end})
76+
end
77+
78+
unified_inventory.register_button("worldedit_gui", {
79+
type = "image",
80+
image = "inventory_plus_worldedit_gui.png",
81+
})
82+
83+
minetest.register_on_player_receive_fields(function(player, formname, fields)
84+
if fields.worldedit_gui_exit then
85+
unified_inventory.set_inventory_formspec(minetest.get_player_by_name(name), "craft")
86+
return true
87+
end
88+
return false
89+
end)
90+
91+
worldedit.show_page = function(name, page)
92+
minetest.get_player_by_name(name):set_inventory_formspec(get_formspec(name, page))
93+
end
94+
elseif inventory_plus then
7895
minetest.register_on_joinplayer(function(player)
7996
inventory_plus.register_button(player, "worldedit_gui", "WorldEdit")
8097
end)
8198

82-
--show the form when the button is pressed
99+
--show the form when the button is pressed and hide it when done
100+
local gui_player_formspecs = {}
83101
minetest.register_on_player_receive_fields(function(player, formname, fields)
102+
local name = player:get_player_name()
84103
if fields.worldedit_gui then --main page
85-
worldedit.show_page(player:get_player_name(), "worldedit_gui")
104+
gui_player_formspecs[name] = player:get_inventory_formspec()
105+
worldedit.show_page(name, "worldedit_gui")
106+
return true
107+
elseif fields.worldedit_gui_exit then --return to original page
108+
if gui_player_formspecs[name] then
109+
inventory_plus.set_inventory_formspec(player, gui_player_formspecs[name])
110+
end
86111
return true
87112
end
88113
return false
@@ -91,6 +116,11 @@ if inventory_plus then
91116
worldedit.show_page = function(name, page)
92117
inventory_plus.set_inventory_formspec(minetest.get_player_by_name(name), get_formspec(name, page))
93118
end
119+
else
120+
worldedit.show_page = function(name, page)
121+
minetest.log("error", "WorldEdit GUI cannot be shown, requires unified_inventory or inventory_plus")
122+
end
123+
minetest.log("error", "WorldEdit GUI is unavailable, requires unified_inventory or inventory_plus")
94124
end
95125

96126
worldedit.register_gui_function("worldedit_gui", {
@@ -117,16 +147,15 @@ worldedit.register_gui_function("worldedit_gui", {
117147
y = y - height
118148
end
119149
return string.format("size[%g,%g]", math.max(columns * width, 5), math.max(y + 0.5, 3)) ..
120-
(inventory_plus and "button[0,0;2,0.5;main;Back]" or "button_exit[0,0;2,0.5;main;Exit]") ..
150+
"button[0,0;2,0.5;worldedit_gui_exit;Back]" ..
121151
"label[2,0;WorldEdit GUI]" ..
122152
table.concat(buttons)
123153
end,
124154
})
125155

126156
worldedit.register_gui_handler("worldedit_gui", function(name, fields)
127-
--check for WorldEdit GUI main formspec button selection
128-
for identifier, entry in pairs(worldedit.pages) do
129-
if fields[identifier] then
157+
for identifier, entry in pairs(worldedit.pages) do --check for WorldEdit GUI main formspec button selection
158+
if fields[identifier] and identifier ~= "worldedit_gui" then
130159
--ensure player has permission to perform action
131160
local has_privs, missing_privs = minetest.check_player_privs(name, entry.privs or {})
132161
if not has_privs then

0 commit comments

Comments
 (0)
Please sign in to comment.