From 28ff1aeb22302d908b35ff7ef24c87f6282f7702 Mon Sep 17 00:00:00 2001 From: mrkubax10 Date: Tue, 11 Nov 2025 19:51:24 +0100 Subject: [PATCH] Introduce recipe override support for `SimpleElectricItemProcessor` --- machines/simple_electric_item_processor.lua | 56 +++++++++++++++------ 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/machines/simple_electric_item_processor.lua b/machines/simple_electric_item_processor.lua index 4c13bbb..e059410 100644 --- a/machines/simple_electric_item_processor.lua +++ b/machines/simple_electric_item_processor.lua @@ -14,6 +14,8 @@ -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . +local S=minetest.get_translator("industrialtest") + industrialtest.SimpleElectricItemProcessor=table.copy(industrialtest.ActivatedElectricMachine) industrialtest.internal.unpackTableInto(industrialtest.SimpleElectricItemProcessor,{ facedir=true, @@ -51,7 +53,9 @@ function industrialtest.SimpleElectricItemProcessor.getFormspec(self,pos) local meta=minetest.get_meta(pos) local powerPercent=meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*100 local srcPercent=meta:get_float("srcTime")/meta:get_float("maxSrcTime")*100 + local recipeOverride=self.isRecipeOverride(meta) local formspec={ + (recipeOverride and "label[3.4,1.5;"..S("Recipe override: @1", minetest.registered_items[recipeOverride].description).."]" or ""), "list[context;src;3.4,1.8;1,1]", industrialtest.internal.getItemSlotBg(3.4,1.8,1,1), (powerPercent>0 and "image[3.4,2.8;1,1;industrialtest_gui_electricity_bg.png^[lowpart:"..powerPercent..":industrialtest_gui_electricity_fg.png]" @@ -151,7 +155,8 @@ function industrialtest.SimpleElectricItemProcessor.shouldActivate(self,pos) local output=self:getCraftResult(srcSlot) return output and output.time>0 and inv:room_for_item("dst",output.item) end - return false + + return meta:contains("recipeOverride") and meta:contains("recipeOverrideMaxTime") and meta:get_string("recipeOverride")~="" end function industrialtest.SimpleElectricItemProcessor.shouldDeactivate(self,pos) @@ -164,6 +169,10 @@ function industrialtest.SimpleElectricItemProcessor.shouldDeactivate(self,pos) return true end + if meta:contains("recipeOverride") and meta:contains("recipeOverrideMaxTime") and meta:get_string("recipeOverride")~="" then + return false + end + local srcSlot=inv:get_stack("src",1) if srcSlot:is_empty() then return true @@ -179,11 +188,15 @@ function industrialtest.SimpleElectricItemProcessor.activeUpdate(self,pos,elapse local srcTime=0 local maxSrcTime if meta:get_float("maxSrcTime")<=0 then - local output=self:getCraftResult(srcSlot) - maxSrcTime=output.time*self.efficiency + local recipeOverride=self.isRecipeOverride(meta) + if recipeOverride then + maxSrcTime=meta:get_int("recipeOverrideMaxTime") + else + local output=self:getCraftResult(srcSlot) + maxSrcTime=output.time*self.efficiency + end meta:set_float("srcTime",0) meta:set_float("maxSrcTime",maxSrcTime) - shouldUpdateFormspec=true else srcTime=meta:get_float("srcTime") maxSrcTime=meta:get_float("maxSrcTime") @@ -196,25 +209,38 @@ function industrialtest.SimpleElectricItemProcessor.activeUpdate(self,pos,elapse meta:set_int("srcTime",srcTime) if srcTime>=maxSrcTime then - local output=self:getCraftResult(srcSlot) - local usedItems=srcSlot:get_count()-output.src:get_count() - local multiplier=1 - if srcSlot:get_count()>=speed*usedItems then - multiplier=speed - end - if output.item:get_count()>0 then - output.item:set_count(output.item:get_count()*multiplier) - inv:add_item("dst",output.item) + local recipeOverride=self.isRecipeOverride(meta) + if recipeOverride then + inv:add_item("dst",ItemStack(recipeOverride)) + meta:set_string("recipeOverride","") + else + local output=self:getCraftResult(srcSlot) + local usedItems=srcSlot:get_count()-output.src:get_count() + local multiplier=1 + if srcSlot:get_count()>=speed*usedItems then + multiplier=speed + end + if output.item:get_count()>0 then + output.item:set_count(output.item:get_count()*multiplier) + inv:add_item("dst",output.item) + end + srcSlot:set_count(srcSlot:get_count()-multiplier*usedItems) + inv:set_stack("src",1,srcSlot) end meta:set_float("srcTime",-1) meta:set_float("maxSrcTime",0) - srcSlot:set_count(srcSlot:get_count()-multiplier*usedItems) - inv:set_stack("src",1,srcSlot) end return true end +function industrialtest.SimpleElectricItemProcessor.isRecipeOverride(meta) + if meta:contains("recipeOverride") and meta:contains("recipeOverrideMaxTime") and meta:get_string("recipeOverride")~="" then + return meta:get_string("recipeOverride") + end + return false +end + function industrialtest.SimpleElectricItemProcessor.getCraftResult(self,itemstack) -- Dummy method end