forked from minetest-mods/technic
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
|
-- handles the machine upgrades when set or removed
|
||||||
local function on_machine_upgrade(meta, stack)
|
local function on_machine_upgrade(meta, stack)
|
||||||
local stack_name = stack and stack:get_name()
|
local stack_name = stack:get_name()
|
||||||
if stack_name ~= "technic:control_logic_unit"
|
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
|
and stack_name ~= "technic:battery" then
|
||||||
return 0
|
return 0
|
||||||
end
|
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
|
return 1
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -140,20 +156,25 @@ end
|
|||||||
|
|
||||||
local function inv_change(pos, player, count, from_list, to_list, stack)
|
local function inv_change(pos, player, count, from_list, to_list, stack)
|
||||||
local playername = player:get_player_name()
|
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"))
|
minetest.chat_send_player(playername, S("Inventory move disallowed due to protection"))
|
||||||
return 0
|
return 0
|
||||||
end
|
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
|
-- 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)
|
local empty = meta:get_inventory():is_empty(to_list)
|
||||||
if empty then
|
if empty then
|
||||||
return on_machine_upgrade(meta, stack)
|
return on_machine_upgrade(meta, stack)
|
||||||
end
|
end
|
||||||
return 0
|
return 0
|
||||||
elseif from_list == "upgrade1" or from_list == "upgrade2" then
|
elseif from_upgrade then
|
||||||
on_machine_upgrade(meta, nil)
|
-- only called on take (not move)
|
||||||
|
on_machine_downgrade(meta, stack, from_list)
|
||||||
end
|
end
|
||||||
return count
|
return count
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user