diff --git a/mod.conf b/mod.conf index eca2bfc..071dd65 100644 --- a/mod.conf +++ b/mod.conf @@ -1,6 +1,6 @@ name = tech_additions description = Adds some block and recipes. depends = default, techage -optional_depends = bbq, bonemeal, craft_ingredients, ethereal, farming +optional_depends = bbq, bonemeal, craft_ingredients, ethereal, farming, smartshop min_minetest_version = 5.7 title = Tech additions \ No newline at end of file diff --git a/techage.lua b/techage.lua index 070d92f..db9d43e 100644 --- a/techage.lua +++ b/techage.lua @@ -68,3 +68,55 @@ techage.add_grinder_recipe({input="default:ice", output="default:snow 3"}) --add extra sieving dofile(minetest.get_modpath("tech_additions") .. "/sieving.lua") + +local OwnerCache = {} + +local function is_owner(pos, meta) + local owner = meta:get_string("owner") + local key = minetest.hash_node_position(pos) + if OwnerCache[key] ~= owner then + if not minetest.is_protected(pos, owner) then + OwnerCache[key] = owner + end + end + return OwnerCache[key] == owner +end + +if smartshop then + techage.register_node( + { + "smartshop:shop", + "smartshop:shop_full", + "smartshop:shop_empty", + "smartshop:shop_used", + "smartshop:storage", + "smartshop:storage_lacks_refill", + "smartshop:storage_has_send" + }, + { + on_inv_request = function(pos, in_dir, access_type) + local meta = minetest.get_meta(pos) + if is_owner(pos, meta) then + return meta:get_inventory(), "main" + end + end, + on_pull_item = function(pos, in_dir, num) + local meta = minetest.get_meta(pos) + if is_owner(pos, meta) then + local inv = meta:get_inventory() + return techage.get_items(pos, inv, "main", num) + end + end, + on_push_item = function(pos, in_dir, stack) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return techage.put_items(inv, "main", stack) + end, + on_unpull_item = function(pos, in_dir, stack) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return techage.put_items(inv, "main", stack) + end, + } + ) +end