Skip to content

Commit b6ccb9e

Browse files
committed
Move the button checks to the formspec callback
This backwards-compatible change simplifies the button callback logic.
1 parent dd23622 commit b6ccb9e

File tree

2 files changed

+28
-54
lines changed

2 files changed

+28
-54
lines changed

callbacks.lua

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,15 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
128128

129129
for i, def in pairs(unified_inventory.buttons) do
130130
if fields[def.name] then
131-
def.action(player)
132-
minetest.sound_play("ui_click",
133-
{to_player=player_name, gain = 0.1})
131+
if def.condition == nil or def.condition(player) then
132+
def.action(player)
133+
minetest.sound_play("ui_click",
134+
{to_player=player_name, gain = 0.1})
135+
else
136+
-- This branch may be executed if relevant permissions were revoked.
137+
core.chat_send_player(player_name, "Action disallowed. Preconditions not met.")
138+
ui.set_inventory_formspec(player, ui.current_page[player_name])
139+
end
134140
return
135141
end
136142
end

register.lua

Lines changed: 19 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,13 @@ ui.register_button("home_gui_set", {
4848
hide_lite=true,
4949
action = function(player)
5050
local player_name = player:get_player_name()
51-
if minetest.check_player_privs(player_name, {home=true}) then
52-
ui.set_home(player, player:get_pos())
53-
local home = ui.home_pos[player_name]
54-
if home ~= nil then
55-
minetest.sound_play("dingdong",
56-
{to_player=player_name, gain = 1.0})
57-
minetest.chat_send_player(player_name,
58-
S("Home position set to: @1", minetest.pos_to_string(home)))
59-
end
60-
else
51+
ui.set_home(player, player:get_pos())
52+
local home = ui.home_pos[player_name]
53+
if home ~= nil then
54+
minetest.sound_play("dingdong",
55+
{to_player=player_name, gain = 1.0})
6156
minetest.chat_send_player(player_name,
62-
S("You don't have the \"home\" privilege!"))
63-
ui.set_inventory_formspec(player, ui.current_page[player_name])
57+
S("Home position set to: @1", minetest.pos_to_string(home)))
6458
end
6559
end,
6660
condition = function(player)
@@ -75,14 +69,8 @@ ui.register_button("home_gui_go", {
7569
hide_lite=true,
7670
action = function(player)
7771
local player_name = player:get_player_name()
78-
if minetest.check_player_privs(player_name, {home=true}) then
79-
if ui.go_home(player) then
80-
minetest.sound_play("teleport", {to_player = player_name})
81-
end
82-
else
83-
minetest.chat_send_player(player_name,
84-
S("You don't have the \"home\" privilege!"))
85-
ui.set_inventory_formspec(player, ui.current_page[player_name])
72+
if ui.go_home(player) then
73+
minetest.sound_play("teleport", {to_player = player_name})
8674
end
8775
end,
8876
condition = function(player)
@@ -97,17 +85,11 @@ ui.register_button("misc_set_day", {
9785
hide_lite=true,
9886
action = function(player)
9987
local player_name = player:get_player_name()
100-
if minetest.check_player_privs(player_name, {settime=true}) then
101-
minetest.sound_play("ui_morning",
102-
{to_player=player_name, gain = 1.0})
103-
minetest.set_timeofday((6000 % 24000) / 24000)
104-
minetest.chat_send_player(player_name,
105-
S("Time of day set to 6am"))
106-
else
107-
minetest.chat_send_player(player_name,
108-
S("You don't have the settime privilege!"))
109-
ui.set_inventory_formspec(player, ui.current_page[player_name])
110-
end
88+
minetest.sound_play("ui_morning",
89+
{to_player=player_name, gain = 1.0})
90+
minetest.set_timeofday((6000 % 24000) / 24000)
91+
minetest.chat_send_player(player_name,
92+
S("Time of day set to 6am"))
11193
end,
11294
condition = function(player)
11395
return minetest.check_player_privs(player:get_player_name(), {settime=true})
@@ -121,17 +103,11 @@ ui.register_button("misc_set_night", {
121103
hide_lite=true,
122104
action = function(player)
123105
local player_name = player:get_player_name()
124-
if minetest.check_player_privs(player_name, {settime=true}) then
125-
minetest.sound_play("ui_owl",
126-
{to_player=player_name, gain = 1.0})
127-
minetest.set_timeofday((21000 % 24000) / 24000)
128-
minetest.chat_send_player(player_name,
129-
S("Time of day set to 9pm"))
130-
else
131-
minetest.chat_send_player(player_name,
132-
S("You don't have the settime privilege!"))
133-
ui.set_inventory_formspec(player, ui.current_page[player_name])
134-
end
106+
minetest.sound_play("ui_owl",
107+
{to_player=player_name, gain = 1.0})
108+
minetest.set_timeofday((21000 % 24000) / 24000)
109+
minetest.chat_send_player(player_name,
110+
S("Time of day set to 9pm"))
135111
end,
136112
condition = function(player)
137113
return minetest.check_player_privs(player:get_player_name(), {settime=true})
@@ -144,21 +120,13 @@ ui.register_button("clear_inv", {
144120
tooltip = S("Clear inventory"),
145121
action = function(player)
146122
local player_name = player:get_player_name()
147-
if not ui.is_creative(player_name) then
148-
minetest.chat_send_player(player_name,
149-
S("This button has been disabled outside"
150-
.." of creative mode to prevent"
151-
.." accidental inventory trashing."
152-
.."\nUse the trash slot instead."))
153-
ui.set_inventory_formspec(player, ui.current_page[player_name])
154-
return
155-
end
156123
player:get_inventory():set_list("main", {})
157124
minetest.chat_send_player(player_name, S('Inventory cleared!'))
158125
minetest.sound_play("trash_all",
159126
{to_player=player_name, gain = 1.0})
160127
end,
161128
condition = function(player)
129+
-- Disabled to prevent accidental inventory trashing.
162130
return ui.is_creative(player:get_player_name())
163131
end,
164132
})

0 commit comments

Comments
 (0)