From d68e90f017bb28294d420687d336af1e0d281f4f Mon Sep 17 00:00:00 2001 From: nixnoxus <87639406+nixnoxus@users.noreply.github.com> Date: Fri, 4 Feb 2022 00:40:38 +0100 Subject: [PATCH] add `hopper` support (#18) --- homedecor_common/furnaces.lua | 6 ++++-- homedecor_common/inventory.lua | 24 ++++++++++++++++++++++++ homedecor_common/mod.conf | 2 +- homedecor_common/registration.lua | 2 ++ 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/homedecor_common/furnaces.lua b/homedecor_common/furnaces.lua index 86e54015..f0f7a2d1 100644 --- a/homedecor_common/furnaces.lua +++ b/homedecor_common/furnaces.lua @@ -148,7 +148,8 @@ function homedecor.register_furnace(name, furnacedef) can_dig = furnace_can_dig, allow_metadata_inventory_put = furnace_allow_put, allow_metadata_inventory_move = furnace_allow_move, - inventory = { lockable = true } + inventory = { lockable = true }, + is_furnace = true } local def_active = { @@ -162,7 +163,8 @@ function homedecor.register_furnace(name, furnacedef) can_dig = furnace_can_dig, allow_metadata_inventory_put = furnace_allow_put, allow_metadata_inventory_move = furnace_allow_move, - inventory = { lockable = true } + inventory = { lockable = true }, + is_furnace = true } if furnacedef.extra_nodedef_fields then diff --git a/homedecor_common/inventory.lua b/homedecor_common/inventory.lua index 30e4c2cb..94956c68 100644 --- a/homedecor_common/inventory.lua +++ b/homedecor_common/inventory.lua @@ -1,5 +1,12 @@ local S = minetest.get_translator("homedecor_common") +local has_hopper = minetest.get_modpath("hopper") +local has_safe_hopper = has_hopper and + -- mod from https://github.com/minetest-mods/hopper respects the owner + (hopper.neighbors or + -- mod from https://notabug.org/TenPlus1/hopper respects the owner since 20220123 + (hopper.version and hopper.version >= "20220123")) + local default_can_dig = function(pos,player) local meta = minetest.get_meta(pos) return meta:get_inventory():is_empty("main") @@ -97,6 +104,23 @@ function homedecor.handle_inventory(name, def, original_def) end local locked = inventory.locked + + if has_hopper and (not locked or has_safe_hopper) then + if inventory.size then + hopper:add_container({ + {"top", "homedecor:"..name, "main"}, + {"bottom", "homedecor:"..name, "main"}, + {"side", "homedecor:"..name, "main"}, + }) + elseif original_def.is_furnace then + hopper:add_container({ + {"top", "homedecor:"..name, "dst"}, + {"bottom", "homedecor:"..name, "src"}, + {"side", "homedecor:"..name, "fuel"}, + }) + end + end + if locked then local after_place_node = def.after_place_node def.after_place_node = function(pos, placer) diff --git a/homedecor_common/mod.conf b/homedecor_common/mod.conf index ab7c4320..1a62348c 100644 --- a/homedecor_common/mod.conf +++ b/homedecor_common/mod.conf @@ -1,4 +1,4 @@ name = homedecor_common description = Homedecor mod: common depends = default, creative -optional_depends = screwdriver +optional_depends = screwdriver, hopper diff --git a/homedecor_common/registration.lua b/homedecor_common/registration.lua index f31eee0d..04f5ab38 100644 --- a/homedecor_common/registration.lua +++ b/homedecor_common/registration.lua @@ -6,6 +6,8 @@ local placeholder_node = "homedecor:expansion_placeholder" function homedecor.register(name, original_def) local def = table.copy(original_def) + def.is_furnace = nil + def.drawtype = def.drawtype or (def.mesh and "mesh") or (def.node_box and "nodebox")