more_chests/utils/actions.lua
nxet 886108a1af Mod rewrite and new models (#21)
* Aliases moved to utils folder

* Method to generate two different formspec layouts, big and small

* Log Actions moved to separate module

* Added method to generate a chest definition

* Rewritten models

* Add Fridge model

* Add Toolbox models

* "Mod loaded" message; Updated localization template

* Add Italian localization

* Fridge now has both normal and big (2 blocks) models

* Fixed mixed indentation

* Rewritten README; improved IT and FR (thanks to @louisroyer) localizations.
2021-02-25 18:19:05 +01:00

91 lines
2.9 KiB
Lua

local function get_inventory_auth_string(player, meta, pos, label)
return player:get_player_name() .. " tried to access a locked " .. label .. " belonging to " .. meta:get_string("owner") .. " at " .. minetest.pos_to_string(pos)
end
function has_locked_chest_privilege(meta, player)
if player:get_player_name() ~= meta:get_string("owner") then
return false
end
return true
end
function get_allow_metadata_inventory_move(t)
setmetatable(t, {__index={check_privs=has_locked_chest_privilege}})
local label, check_privs = t[1], t.check_privs
return function(pos, from_list, from_index, to_list, to_index, count, player)
local meta = minetest.get_meta(pos)
if not check_privs(meta, player) then
minetest.log("action", get_inventory_auth_string(player, meta, pos, label))
return 0
end
return count
end
end
function get_allow_metadata_inventory_put(t)
setmetatable(t, {__index={check_privs=has_locked_chest_privilege}})
local label, check_privs = t[1], t.check_privs
return function(pos, listname, index, stack, player)
local meta = minetest.get_meta(pos)
if not check_privs(meta, player) then
minetest.log("action", get_inventory_auth_string(player, meta, pos, label))
return 0
end
return stack:get_count()
end
end
function get_allow_metadata_inventory_take(t)
setmetatable(t, {__index={check_privs=has_locked_chest_privilege}})
local label, check_privs = t[1], t.check_privs
return function(pos, listname, index, stack, player)
local meta = minetest.get_meta(pos)
if not check_privs(meta, player) then
minetest.log("action", get_inventory_auth_string(player, meta, pos, label))
return 0
end
return stack:get_count()
end
end
local function get_inventory_action_string(player, pos, action, label)
return player:get_player_name() .. " moves stuff " .. action .. " locked " .. label .. " at " .. minetest.pos_to_string(pos)
end
function get_on_metadata_inventory_move(label)
return function(pos, from_list, from_index, to_list, to_index, count, player)
minetest.log("action", get_inventory_action_string(player, pos, "in", label)
)
end
end
function get_on_metadata_inventory_put(label)
return function(pos, listname, index, stack, player)
minetest.log("action", get_inventory_action_string(player, pos, "to", label))
end
end
function get_on_metadata_inventory_take(label)
return function(pos, listname, index, stack, player)
minetest.log("action", get_inventory_action_string(player, pos, "from", label))
end
end
actions = {
has_locked_chest_privilege = has_locked_chest_privilege,
get_allow_metadata_inventory_move = get_allow_metadata_inventory_move,
get_allow_metadata_inventory_put = get_allow_metadata_inventory_put,
get_allow_metadata_inventory_take = get_allow_metadata_inventory_take,
get_on_metadata_inventory_move = get_on_metadata_inventory_move,
get_on_metadata_inventory_put = get_on_metadata_inventory_put,
get_on_metadata_inventory_take = get_on_metadata_inventory_take,
}
return actions