75 lines
1.7 KiB
Lua
75 lines
1.7 KiB
Lua
--[[
|
|
|
|
TechAge
|
|
=======
|
|
|
|
Copyright (C) 2019-2023 Joachim Stolberg
|
|
|
|
AGPL v3
|
|
See LICENSE.txt for more information
|
|
|
|
Library for shared inventories
|
|
|
|
]]--
|
|
|
|
-- for lazy programmers
|
|
local S2P = minetest.string_to_pos
|
|
local P2S = minetest.pos_to_string
|
|
local M = minetest.get_meta
|
|
local S = techage.S
|
|
|
|
techage.shared_inv = {}
|
|
|
|
local hyperloop = techage.hyperloop
|
|
local remote_pos = techage.hyperloop.remote_pos
|
|
|
|
local function copy_inventory_list(from_pos, to_pos, listname)
|
|
local inv1 = minetest.get_inventory({type="node", pos=from_pos})
|
|
local inv2 = minetest.get_inventory({type="node", pos=to_pos})
|
|
inv2:set_list(listname, inv1:get_list(listname))
|
|
end
|
|
|
|
function techage.shared_inv.node_timer(pos, elapsed)
|
|
local rmt_pos = remote_pos(pos)
|
|
if rmt_pos and techage.is_activeformspec(pos) then
|
|
copy_inventory_list(rmt_pos, pos, "main")
|
|
return true
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- Synchronize the client inventory with the server one
|
|
function techage.shared_inv.before_inv_access(pos, listname)
|
|
if hyperloop.is_client(pos) then
|
|
local rmt_pos = remote_pos(pos)
|
|
if rmt_pos then
|
|
copy_inventory_list(rmt_pos, pos, listname)
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
-- Synchronize the client inventory with the server one
|
|
function techage.shared_inv.after_inv_access(pos, listname)
|
|
if hyperloop.is_client(pos) then
|
|
local rmt_pos = remote_pos(pos)
|
|
if rmt_pos then
|
|
copy_inventory_list(pos, rmt_pos, listname)
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function techage.shared_inv.on_rightclick(pos, clicker, listname)
|
|
if hyperloop.is_client(pos) then
|
|
local rmt_pos = remote_pos(pos)
|
|
if rmt_pos then
|
|
copy_inventory_list(rmt_pos, pos, listname)
|
|
techage.set_activeformspec(pos, clicker)
|
|
minetest.get_node_timer(pos):start(2)
|
|
end
|
|
end
|
|
end
|