mirror of
https://github.com/minetest-mods/technic.git
synced 2024-12-22 05:42:33 +01:00
add the option for publicly shared machines via an upgrade item "default:chest
the upgrade slots remain protected this replaces the need for a few forks and also resolves #131 in the process, which is obsolete now
This commit is contained in:
parent
91e12c41fd
commit
a13e7b7ed1
@ -34,12 +34,28 @@ end
|
||||
|
||||
-- handles the machine upgrades when set or removed
|
||||
local function on_machine_upgrade(meta, stack)
|
||||
local stack_name = stack and stack:get_name()
|
||||
if stack_name ~= "technic:control_logic_unit"
|
||||
and stack_name ~= "technic:battery" then
|
||||
local stack_name = stack:get_name()
|
||||
if stack_name == "default:chest" then
|
||||
meta:set_int("public", 1)
|
||||
return 1
|
||||
elseif stack_name ~= "technic:control_logic_unit"
|
||||
and stack_name ~= "technic:battery" then
|
||||
return 0
|
||||
end
|
||||
return 1
|
||||
end
|
||||
|
||||
-- something is about to be removed
|
||||
local function on_machine_downgrade(meta, stack, list)
|
||||
if stack:get_name() == "default:chest" then
|
||||
local inv = meta:get_inventory()
|
||||
local upg1, upg2 = inv:get_stack("upgrade1", 1), inv:get_stack("upgrade2", 1)
|
||||
|
||||
-- only set 0 if theres not a nother chest in the other list too
|
||||
if (not upg1 or not upg2 or upg1:get_name() ~= upg2:get_name()) then
|
||||
meta:set_int("public", 0)
|
||||
end
|
||||
end
|
||||
return 1
|
||||
end
|
||||
|
||||
@ -140,20 +156,25 @@ end
|
||||
|
||||
local function inv_change(pos, player, count, from_list, to_list, stack)
|
||||
local playername = player:get_player_name()
|
||||
if minetest.is_protected(pos, playername) then
|
||||
local meta = minetest.get_meta(pos);
|
||||
local public = (meta:get_int("public") == 1)
|
||||
local to_upgrade = to_list == "upgrade1" or to_list == "upgrade2"
|
||||
local from_upgrade = from_list == "upgrade1" or from_list == "upgrade2"
|
||||
|
||||
if (not public or to_upgrade or from_upgrade) and minetest.is_protected(pos, playername) then
|
||||
minetest.chat_send_player(playername, S("Inventory move disallowed due to protection"))
|
||||
return 0
|
||||
end
|
||||
if to_list == "upgrade1" or to_list == "upgrade2" then
|
||||
if to_upgrade then
|
||||
-- only place a single item into it, if it's empty
|
||||
local meta = minetest.get_meta(pos);
|
||||
local empty = meta:get_inventory():is_empty(to_list)
|
||||
if empty then
|
||||
return on_machine_upgrade(meta, stack)
|
||||
end
|
||||
return 0
|
||||
elseif from_list == "upgrade1" or from_list == "upgrade2" then
|
||||
on_machine_upgrade(meta, nil)
|
||||
elseif from_upgrade then
|
||||
-- only called on take (not move)
|
||||
on_machine_downgrade(meta, stack, from_list)
|
||||
end
|
||||
return count
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user