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
-
4
1
worldedit = worldedit or {}
5
2
6
3
--[[
@@ -20,6 +17,8 @@ Use `nil` for the `get_formspec` field to denote that the function does not have
20
17
Use `nil` for the `privs` field to denote that no special privileges are required to use the function.
21
18
22
19
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`
23
22
]]
24
23
25
24
worldedit .pages = {} -- mapping of identifiers to options
@@ -68,21 +67,47 @@ local get_formspec = function(name, identifier)
68
67
return worldedit .pages [" worldedit_gui" ].get_formspec (name ) -- default to showing main page if an unknown page is given
69
68
end
70
69
71
- worldedit .show_page = function (name , page )
72
- -- wip
73
- print (" not implemented" )
74
- end
75
70
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
78
95
minetest .register_on_joinplayer (function (player )
79
96
inventory_plus .register_button (player , " worldedit_gui" , " WorldEdit" )
80
97
end )
81
98
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 = {}
83
101
minetest .register_on_player_receive_fields (function (player , formname , fields )
102
+ local name = player :get_player_name ()
84
103
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
86
111
return true
87
112
end
88
113
return false
@@ -91,6 +116,11 @@ if inventory_plus then
91
116
worldedit .show_page = function (name , page )
92
117
inventory_plus .set_inventory_formspec (minetest .get_player_by_name (name ), get_formspec (name , page ))
93
118
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" )
94
124
end
95
125
96
126
worldedit .register_gui_function (" worldedit_gui" , {
@@ -117,16 +147,15 @@ worldedit.register_gui_function("worldedit_gui", {
117
147
y = y - height
118
148
end
119
149
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]" ..
121
151
" label[2,0;WorldEdit GUI]" ..
122
152
table.concat (buttons )
123
153
end ,
124
154
})
125
155
126
156
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
130
159
-- ensure player has permission to perform action
131
160
local has_privs , missing_privs = minetest .check_player_privs (name , entry .privs or {})
132
161
if not has_privs then
0 commit comments