From 6c9c69a308ddb46d794f4f53ff2c696822852bc1 Mon Sep 17 00:00:00 2001 From: mrkubax10 Date: Thu, 27 Mar 2025 22:18:42 +0100 Subject: [PATCH] Prevent using items partially used by Rotary Macerator --- api/registration.lua | 31 ++++++++++++++++++++++++++++++- machines/rotary_macerator.lua | 8 ++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/api/registration.lua b/api/registration.lua index 94e6aae..0955181 100644 --- a/api/registration.lua +++ b/api/registration.lua @@ -272,8 +272,9 @@ end -- \brief Registers Rotary Macerator recipe modifier -- \param config table +-- \param omitPlaceholder bool, for internal use only -- \returns nil -function industrialtest.api.registerRotaryMaceratorModifier(config) +function industrialtest.api.registerRotaryMaceratorModifier(config,omitPlaceholder) local definition={ name=config.name or "", modifier=config.modifier or "", @@ -282,6 +283,19 @@ function industrialtest.api.registerRotaryMaceratorModifier(config) uses=config.uses or 1, modifierLeftover=config.modifierLeftover } + + if not omitPlaceholder and not config.modifierLeftover and string.len(definition.modifier)>0 then + local delimiter,_=string.find(definition.modifier,":") + definition.stackLeftover="industrialtest:"..string.sub(definition.modifier,1,delimiter-1).."_"..string.sub(definition.modifier,delimiter+1,-1).."_leftover" + industrialtest.api.registerRotaryMaceratorModifier({ + name=definition.name, + modifier=definition.stackLeftover, + output=definition.output, + time=definition.time, + uses=definition.uses + },true) + end + industrialtest.api.rotaryMaceratorModifiers[definition.name.." "..config.modifier]=definition end @@ -292,3 +306,18 @@ end function industrialtest.api.getRotaryMaceratorModifier(name,modifier) return industrialtest.api.rotaryMaceratorModifiers[name.." "..modifier] end + +minetest.register_on_mods_loaded(function() + for _,def in pairs(industrialtest.api.rotaryMaceratorModifiers) do + if def.stackLeftover then + local leftoverDef=table.copy(minetest.registered_items[def.modifier]) + leftoverDef.groups=leftoverDef.groups or {} + leftoverDef.groups.not_in_creative_inventory=1 + if industrialtest.mclAvailable then + leftoverDef._doc_items_create_entry=false + end + -- Item name starts with : to prevent name checks, because it seems to fail in on_mods_loaded + minetest.register_craftitem(":"..def.stackLeftover,leftoverDef) + end + end +end) diff --git a/machines/rotary_macerator.lua b/machines/rotary_macerator.lua index aa88b9c..5df1f52 100644 --- a/machines/rotary_macerator.lua +++ b/machines/rotary_macerator.lua @@ -237,8 +237,11 @@ function industrialtest.RotaryMacerator.activeUpdate(self,pos,elapsed,meta,inv) local modifierSlot=inv:get_stack("modifier",1) local modifierMeta=modifierSlot:get_meta() local uses=result.uses + local replace=false if modifierMeta:contains("uses") then uses=modifierMeta:get_int("uses") + else + replace=true end uses=math.max(uses-1,0) if uses==0 then @@ -250,7 +253,12 @@ function industrialtest.RotaryMacerator.activeUpdate(self,pos,elapsed,meta,inv) uses=result.uses end if not modifierSlot:is_empty() and not result.modifierLeftover then + local modifierDef=modifierSlot:get_definition() modifierMeta:set_int("uses",uses) + modifierMeta:set_string("description",string.format("%s (%s: %d)",modifierDef.description,S("Uses"),uses)) + end + if replace then + modifierSlot:set_name(result.stackLeftover) end inv:set_stack("modifier",1,modifierSlot) end