From fc249d46d5854af68eab77bf07533355ef1f830b Mon Sep 17 00:00:00 2001 From: mrkubax10 Date: Sat, 18 Mar 2023 11:32:20 +0100 Subject: [PATCH] Implement Macerator --- api.lua | 12 ++ compatibility.lua | 14 ++ crafts.lua | 59 ++++++ init.lua | 1 + machines.lua | 502 +++++++++++++++++++++++++--------------------- 5 files changed, 364 insertions(+), 224 deletions(-) create mode 100644 crafts.lua diff --git a/api.lua b/api.lua index 9056cdf..c5e957b 100644 --- a/api.lua +++ b/api.lua @@ -17,6 +17,7 @@ local S=minetest.get_translator("industrialtest") industrialtest.api={} +industrialtest.api.maceratorRecipes={} -- \brief Adds power storage to metadata -- \param capacity How much EU item/node can store @@ -241,3 +242,14 @@ industrialtest.api.isPowerOutput=function(meta,side) local mode=string.sub(ioConfig,side,side) return (mode=="o" or mode=="a") end +industrialtest.api.registerMaceratorRecipe=function(config) + local definition={ + output=config.output or "", + recipe=config.recipe or "", + time=config.time or 2 + } + industrialtest.api.maceratorRecipes[definition.recipe]=definition +end +industrialtest.api.getMaceratorRecipeResult=function(recipe) + return industrialtest.api.maceratorRecipes[recipe] +end diff --git a/compatibility.lua b/compatibility.lua index c8520b5..49aa587 100644 --- a/compatibility.lua +++ b/compatibility.lua @@ -480,13 +480,20 @@ if industrialtest.mclAvailable then -- assign element keys for elements that are required later industrialtest.elementKeys.stick="mcl_core:stick" industrialtest.elementKeys.flint="mcl_core:flint" + industrialtest.elementKeys.snowball="mcl_throwing:snowball" + industrialtest.elementKeys.string="mcl_mobitems:string" industrialtest.elementKeys.junglePlanks="mcl_core:junglewood" industrialtest.elementKeys.ironIngot="mcl_core:iron_ingot" industrialtest.elementKeys.copperIngot="mcl_copper:copper_ingot" industrialtest.elementKeys.powerCarrier="mesecons:mesecon" industrialtest.elementKeys.furnace="mcl_furnaces:furnace" + industrialtest.elementKeys.stone="mcl_core:stone" industrialtest.elementKeys.cobble="mcl_core:cobble" industrialtest.elementKeys.sand="mcl_core:sand" + industrialtest.elementKeys.gravel="mcl_core:gravel" + industrialtest.elementKeys.ice="mcl_core:ice" + industrialtest.elementKeys.sandstone="mcl_core:sandstone" + industrialtest.elementKeys.whiteWool="mcl_wool:white" -- register required minerals that are not available in MCL industrialtest.registerMetal("tin","Tin",3,3) @@ -650,11 +657,18 @@ elseif industrialtest.mtgAvailable then industrialtest.elementKeys.copperIngot="default:copper_ingot" industrialtest.elementKeys.stick="default:stick" industrialtest.elementKeys.flint="default:flint" + industrialtest.elementKeys.snowball="default:snow" + industrialtest.elementKeys.string="farming:string" industrialtest.elementKeys.junglePlanks="default:junglewood" industrialtest.elementKeys.powerCarrier="default:mese_crystal_fragment" industrialtest.elementKeys.furnace="default:furnace" + industrialtest.elementKeys.stone="default:stone" industrialtest.elementKeys.cobble="default:cobble" industrialtest.elementKeys.sand="default:sand" + industrialtest.elementKeys.gravel="default:gravel" + industrialtest.elementKeys.ice="default:ice" + industrialtest.elementKeys.sandstone="default:sandstone" + industrialtest.elementKeys.whiteWool="wool:white" else error("No compatible games found!") end diff --git a/crafts.lua b/crafts.lua new file mode 100644 index 0000000..f065156 --- /dev/null +++ b/crafts.lua @@ -0,0 +1,59 @@ +-- IndustrialTest +-- Copyright (C) 2023 mrkubax10 + +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. + +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. + +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +-- Macerator crafts +industrialtest.api.registerMaceratorRecipe({ + output=industrialtest.elementKeys.cobble, + recipe=industrialtest.elementKeys.stone +}) +industrialtest.api.registerMaceratorRecipe({ + output=industrialtest.elementKeys.sand, + recipe=industrialtest.elementKeys.cobble +}) +industrialtest.api.registerMaceratorRecipe({ + output=industrialtest.elementKeys.flint, + recipe=industrialtest.elementKeys.gravel +}) +industrialtest.api.registerMaceratorRecipe({ + output=industrialtest.elementKeys.snowball, + recipe=industrialtest.elementKeys.ice +}) +industrialtest.api.registerMaceratorRecipe({ + output=industrialtest.elementKeys.sand, + recipe=industrialtest.elementKeys.sandstone +}) +industrialtest.api.registerMaceratorRecipe({ + output=industrialtest.elementKeys.string.." 2", + recipe=industrialtest.elementKeys.whiteWool +}) +if industrialtest.mclAvailable then + industrialtest.api.registerMaceratorRecipe({ + output="mcl_mobitems:blaze_powder 5", + recipe="mcl_mobitems:blaze_rod" + }) + industrialtest.api.registerMaceratorRecipe({ + output="mesecons:mesecon 9", + recipe="mesecons_torch:redstoneblock" + }) + industrialtest.api.registerMaceratorRecipe({ + output="mcl_nether:quartz 4", + recipe="mcl_nether:quartz_block" + }) + industrialtest.api.registerMaceratorRecipe({ + output="mcl_bone_meal:bone_meal 4", + recipe="mcl_mobitems:bone" + }) +end diff --git a/init.lua b/init.lua index 4043132..bdc363e 100644 --- a/init.lua +++ b/init.lua @@ -40,3 +40,4 @@ end dofile(modpath.."/cables.lua") dofile(modpath.."/mapgen.lua") dofile(modpath.."/tools.lua") +dofile(modpath.."/crafts.lua") diff --git a/machines.lua b/machines.lua index 3277133..936aa83 100644 --- a/machines.lua +++ b/machines.lua @@ -218,6 +218,256 @@ minetest.register_craft({ }) -- Item processing machines +local function registerSimpleElectricItemProcessor(config) + local function getFormspec(powerPercent,srcPercent) + local formspec + if industrialtest.mtgAvailable then + formspec={ + "formspec_version[4]", + "size[10.8,12]", + "label[0.5,0.5;"..S(config.displayName).."]", + "list[context;src;3.4,1.8;1,1]", + "listring[context;src]", + (powerPercent>0 and "image[3.4,2.8;1,1;industrialtest_gui_electricity_bg.png^[lowpart:"..powerPercent..":industrialtest_gui_electricity_fg.png]" + or "image[3.4,2.8;1,1;industrialtest_gui_electricity_bg.png]"), + "list[context;powerStorage;3.4,3.9;1,1]", + "listring[context;powerStorage]", + (srcPercent>0 and "image[4.9,2.8;1,1;gui_furnace_arrow_bg.png^[lowpart:"..srcPercent..":gui_furnace_arrow_fg.png^[transformR270]" + or "image[4.9,2.8;1,1;gui_furnace_arrow_bg.png^[transformR270]"), + "list[context;dst;6.4,2.8;1,1]", + "listring[context;dst]", + "list[context;upgrades;9,0.9;1,4]", + "listring[context;upgrades]", + "list[current_player;main;0.5,6.25;8,1]", + "list[current_player;main;0.5,7.5;8,3;8]" + } + elseif industrialtest.mclAvailable then + formspec={ + "size[10.04,12]", + "label[0.25,0.25;"..S("Electric Furnace").."]", + "list[context;src;3.4,1.8;1,1]", + mcl_formspec.get_itemslot_bg(3.4,1.8,1,1), + "listring[context;src]", + (powerPercent>0 and "image[3.4,2.8;1,1;industrialtest_gui_electricity_bg.png^[lowpart:"..powerPercent..":industrialtest_gui_electricity_fg.png]" + or "image[3.4,2.8;1,1;industrialtest_gui_electricity_bg.png]"), + "list[context;powerStorage;3.4,3.9;1,1]", + mcl_formspec.get_itemslot_bg(3.4,3.9,1,1), + "listring[context;powerStorage]", + (srcPercent>0 and "image[4.9,2.8;1,1;gui_furnace_arrow_bg.png^[lowpart:"..srcPercent..":gui_furnace_arrow_fg.png^[transformR270]" + or "image[4.9,2.8;1,1;gui_furnace_arrow_bg.png^[transformR270]"), + "list[context;dst;6.4,2.8;1,1]", + mcl_formspec.get_itemslot_bg(6.4,2.8,1,1), + "listring[context;dst]", + "list[context;upgrades;9,0.9;1,4]", + mcl_formspec.get_itemslot_bg(9,0.9,1,4), + "listring[context;upgrades]", + "list[current_player;main;0.5,7;9,3;9]", + mcl_formspec.get_itemslot_bg(0.5,7,9,3), + "list[current_player;main;0.5,10.24;9,1]", + mcl_formspec.get_itemslot_bg(0.5,10.24,9,1) + } + end + return table.concat(formspec,"") + end + local function craftResultProxy(method,item) + if method=="cooking" then + local output,after=minetest.get_craft_result({ + method=method, + width=1, + items={item} + }) + return { + item=output.item, + time=output.time, + src=after.items[1] + } + elseif method=="industrialtest.macerating" then + local output=industrialtest.api.getMaceratorRecipeResult(item:get_name()) + if not output then + return { + item=ItemStack(), + time=0, + src=item + } + end + local srcAfter=ItemStack(item:get_name()) + srcAfter:set_count(item:get_count()-1) + return { + item=ItemStack(output.output), + time=output.time, + src=srcAfter + } + end + error("Unknown craft method passed to craftResultProxy") + end + definition={ + description=S(config.displayName), + tiles={ + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_machine_block.png", + "industrialtest_"..config.name.."_front.png", + "industrialtest_machine_block.png" + }, + paramtype2="facedir", + legacy_facedir_simple=true, + on_construct=function(pos) + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + inv:set_size("src",1) + inv:set_size("dst",1) + inv:set_size("powerStorage",1) + inv:set_size("upgrades",4) + meta:set_string("formspec",getFormspec(0,0)) + meta:set_float("srcTime",-1) + meta:set_float("maxSrcTime",0) + industrialtest.api.addPowerStorage(meta,config.capacity,config.flow,"iiiiii") + minetest.get_node_timer(pos):start(industrialtest.updateDelay) + end, + on_timer=function(pos,elapsed) + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + local srcSlot=inv:get_stack("src",1) + local powerStorageSlot=inv:get_stack("powerStorage",1) + local shouldUpdateFormspec=false + local shouldRerunTimer=false + local requiredPower=elapsed*config.opPower + + if powerStorageSlot:get_count()>0 then + local stackMeta=powerStorageSlot:get_meta() + if industrialtest.api.transferPower(stackMeta,meta,stackMeta:get_int("industrialtest.powerFlow"))>0 then + shouldUpdateFormspec=true + shouldRerunTimer=true + industrialtest.api.updateItemPowerText(powerStorageSlot) + inv:set_stack("powerStorage",1,powerStorageSlot) + end + end + if srcSlot:get_count()>0 and meta:get_float("maxSrcTime")<=0 and meta:get_int("industrialtest.powerAmount")>=requiredPower then + local output=craftResultProxy(config.method,srcSlot) + if output.time>0 and inv:room_for_item("dst",output.item) then + meta:set_float("srcTime",0) + meta:set_float("maxSrcTime",output.time*config.efficiency) + end + end + if meta:get_float("maxSrcTime")>0 then + if meta:get_int("industrialtest.powerAmount")>=requiredPower then + meta:set_int("industrialtest.powerAmount",meta:get_int("industrialtest.powerAmount")-requiredPower) + meta:set_float("srcTime",meta:get_float("srcTime")+elapsed) + shouldRerunTimer=true + end + shouldUpdateFormspec=true + end + if meta:get_float("srcTime")>=meta:get_float("maxSrcTime") then + local output=craftResultProxy(config.method,srcSlot) + if output.item:get_count()>0 then + inv:set_stack("src",1,output.src) + inv:add_item("dst",output.item) + meta:set_float("srcTime",-1) + meta:set_float("maxSrcTime",0) + end + end + if not industrialtest.api.isFullyCharged(meta) then + industrialtest.api.triggerNeighbours(pos) + end + + if shouldUpdateFormspec then + meta:set_string("formspec",getFormspec(meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*100,meta:get_float("srcTime")/meta:get_float("maxSrcTime")*100)) + end + + return shouldRerunTimer + end, + allow_metadata_inventory_move=function(pos,fromList,fromIndex,toList,count) + if toList=="dst" then + return 0 + elseif toList=="powerStorage" then + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + local stack=inv:get_stack(fromList,fromIndex) + return (industrialtest.api.hasPowerStorage(stack:get_meta()) and count or 0) + elseif toList=="upgrades" then + -- TODO: Add support for upgrades when they will be added + return 0 + end + return count + end, + allow_metadata_inventory_put=function(pos,listname,index,stack) + if listname=="dst" then + return 0 + elseif listname=="src" then + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + local srcSlot=inv:get_stack("src",1) + if srcSlot:get_name()~=stack:get_name() then + meta:set_float("srcTime",-1) + meta:set_float("maxSrcTime",0) + end + elseif listname=="powerStorage" then + return (industrialtest.api.hasPowerStorage(stack:get_meta()) and stack:get_count() or 0) + elseif listname=="upgrades" then + --TODO: See allow_metadata_inventory_move + return 0 + end + return stack:get_count() + end, + on_metadata_inventory_move=function(pos,fromList,fromIndex,toList,toIndex,count) + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + local srcSlot=inv:get_stack("src",1) + if fromList=="src" and count==srcSlot:get_count() then + meta:set_float("srcTime",-1) + meta:set_float("maxSrcTime",0) + if meta:get_int("industrialtest.powerAmount")>0 then + meta:set_string("formspec",getFormspec(meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*100,meta:get_float("srcTime")/meta:get_float("maxSrcTime")*100)) + end + end + end, + on_metadata_inventory_put=function(pos,listname) + if listname=="src" or listname=="powerStorage" then + minetest.get_node_timer(pos):start(industrialtest.updateDelay) + end + end, + on_metadata_inventory_take=function(pos,listname,index,stack) + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + local srcSlot=inv:get_stack("src",1) + if listname=="src" and stack:get_count()==srcSlot:get_count() then + meta:set_float("srcTime",-1) + meta:set_float("maxSrcTime",0) + if meta:get_int("industrialtest.powerAmount")>0 then + meta:set_string("formspec",getFormspec(meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*100,meta:get_float("srcTime")/meta:get_float("maxSrcTime")*100)) + end + end + end, + _industrialtest_updateFormspec=function(meta) + meta:set_string("formspec",getFormspec(meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*100,meta:get_float("srcTime")/meta:get_float("maxSrcTime")*100)) + end + } + if industrialtest.mtgAvailable then + definition.groups={ + cracky=1, + level=2 + } + definition.sounds=default.node_sound_metal_defaults() + definition.can_dig=function(pos) + local meta=minetest.get_meta(pos) + local inv=meta:get_inventory() + return not (inv:get_list("src")[1]:get_count()>0 or inv:get_list("powerStorage")[1]:get_count()>0 or inv:get_list("dst")[1]:get_count()>0) + end + elseif industrialtest.mclAvailable then + definition.after_dig_node=function(pos,oldnode,oldmeta) + mclAfterDigNode(pos,oldmeta,{"src","powerStorage","dst","upgrades"}) + end + definition.groups={pickaxey=1} + definition.sounds=mcl_sounds.node_sound_metal_defaults() + definition._mcl_blast_resistance=3 + definition._mcl_hardness=3.5 + end + definition.groups._industrialtest_hasPowerInput=1 + minetest.register_node("industrialtest:"..config.name,definition) +end + local function ironFurnaceFormspec(fuelPercent,srcPercent) local formspec if industrialtest.mtgAvailable then @@ -448,230 +698,15 @@ minetest.register_craft({ } }) -local function electricFurnaceFormspec(powerPercent,srcPercent) - local formspec - if industrialtest.mtgAvailable then - formspec={ - "formspec_version[4]", - "size[10.8,12]", - "label[0.5,0.5;"..S("Electric Furnace").."]", - "list[context;src;3.4,1.8;1,1]", - "listring[context;src]", - (powerPercent>0 and "image[3.4,2.8;1,1;industrialtest_gui_electricity_bg.png^[lowpart:"..powerPercent..":industrialtest_gui_electricity_fg.png]" - or "image[3.4,2.8;1,1;industrialtest_gui_electricity_bg.png]"), - "list[context;powerStorage;3.4,3.9;1,1]", - "listring[context;powerStorage]", - (srcPercent>0 and "image[4.9,2.8;1,1;gui_furnace_arrow_bg.png^[lowpart:"..srcPercent..":gui_furnace_arrow_fg.png^[transformR270]" - or "image[4.9,2.8;1,1;gui_furnace_arrow_bg.png^[transformR270]"), - "list[context;dst;6.4,2.8;1,1]", - "listring[context;dst]", - "list[context;upgrades;9,0.9;1,4]", - "listring[context;upgrades]", - "list[current_player;main;0.5,6.25;8,1]", - "list[current_player;main;0.5,7.5;8,3;8]" - } - elseif industrialtest.mclAvailable then - formspec={ - "size[10.04,12]", - "label[0.25,0.25;"..S("Electric Furnace").."]", - "list[context;src;3.4,1.8;1,1]", - mcl_formspec.get_itemslot_bg(3.4,1.8,1,1), - "listring[context;src]", - (powerPercent>0 and "image[3.4,2.8;1,1;industrialtest_gui_electricity_bg.png^[lowpart:"..powerPercent..":industrialtest_gui_electricity_fg.png]" - or "image[3.4,2.8;1,1;industrialtest_gui_electricity_bg.png]"), - "list[context;powerStorage;3.4,3.9;1,1]", - mcl_formspec.get_itemslot_bg(3.4,3.9,1,1), - "listring[context;powerStorage]", - (srcPercent>0 and "image[4.9,2.8;1,1;gui_furnace_arrow_bg.png^[lowpart:"..srcPercent..":gui_furnace_arrow_fg.png^[transformR270]" - or "image[4.9,2.8;1,1;gui_furnace_arrow_bg.png^[transformR270]"), - "list[context;dst;6.4,2.8;1,1]", - mcl_formspec.get_itemslot_bg(6.4,2.8,1,1), - "listring[context;dst]", - "list[context;upgrades;9,0.9;1,4]", - mcl_formspec.get_itemslot_bg(9,0.9,1,4), - "listring[context;upgrades]", - "list[current_player;main;0.5,7;9,3;9]", - mcl_formspec.get_itemslot_bg(0.5,7,9,3), - "list[current_player;main;0.5,10.24;9,1]", - mcl_formspec.get_itemslot_bg(0.5,10.24,9,1) - } - end - return table.concat(formspec,"") -end -definition={ - description=S("Electric Furnace"), - tiles={ - "industrialtest_machine_block.png", - "industrialtest_machine_block.png", - "industrialtest_machine_block.png", - "industrialtest_machine_block.png", - "industrialtest_machine_block.png", - "industrialtest_electric_furnace_front.png", - "industrialtest_machine_block.png" - }, - paramtype2="facedir", - legacy_facedir_simple=true, - on_construct=function(pos) - local meta=minetest.get_meta(pos) - local inv=meta:get_inventory() - inv:set_size("src",1) - inv:set_size("dst",1) - inv:set_size("powerStorage",1) - inv:set_size("upgrades",4) - meta:set_string("formspec",electricFurnaceFormspec(0,0)) - meta:set_float("srcTime",-1) - meta:set_float("maxSrcTime",0) - industrialtest.api.addPowerStorage(meta,416,390,"iiiiii") - minetest.get_node_timer(pos):start(industrialtest.updateDelay) - end, - on_timer=function(pos,elapsed) - local meta=minetest.get_meta(pos) - local inv=meta:get_inventory() - local srcSlot=inv:get_stack("src",1) - local powerStorageSlot=inv:get_stack("powerStorage",1) - local shouldUpdateFormspec=false - local shouldRerunTimer=false - local requiredPower=elapsed*60 - - if powerStorageSlot:get_count()>0 then - local stackMeta=powerStorageSlot:get_meta() - if industrialtest.api.transferPower(stackMeta,meta,stackMeta:get_int("industrialtest.powerFlow"))>0 then - shouldUpdateFormspec=true - shouldRerunTimer=true - industrialtest.api.updateItemPowerText(powerStorageSlot) - inv:set_stack("powerStorage",1,powerStorageSlot) - end - end - if srcSlot:get_count()>0 and meta:get_float("maxSrcTime")<=0 and meta:get_int("industrialtest.powerAmount")>=requiredPower then - local output,after=minetest.get_craft_result({ - method="cooking", - width=1, - items={srcSlot} - }) - if output.time>0 and inv:room_for_item("dst",output.item) then - meta:set_float("srcTime",0) - meta:set_float("maxSrcTime",output.time*0.5) - end - end - if meta:get_float("maxSrcTime")>0 then - if meta:get_int("industrialtest.powerAmount")>=requiredPower then - meta:set_int("industrialtest.powerAmount",meta:get_int("industrialtest.powerAmount")-requiredPower) - meta:set_float("srcTime",meta:get_float("srcTime")+elapsed) - shouldRerunTimer=true - end - shouldUpdateFormspec=true - end - if meta:get_float("srcTime")>=meta:get_float("maxSrcTime") then - local output,after=minetest.get_craft_result({ - method="cooking", - width=1, - items={srcSlot} - }) - if output.item:get_count()>0 then - inv:set_stack("src",1,after.items[1]) - inv:add_item("dst",output.item) - meta:set_float("srcTime",-1) - meta:set_float("maxSrcTime",0) - end - end - if not industrialtest.api.isFullyCharged(meta) then - industrialtest.api.triggerNeighbours(pos) - end - - if shouldUpdateFormspec then - meta:set_string("formspec",electricFurnaceFormspec(meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*100,meta:get_float("srcTime")/meta:get_float("maxSrcTime")*100)) - end - - return shouldRerunTimer - end, - allow_metadata_inventory_move=function(pos,fromList,fromIndex,toList,count) - if toList=="dst" then - return 0 - elseif toList=="powerStorage" then - local meta=minetest.get_meta(pos) - local inv=meta:get_inventory() - local stack=inv:get_stack(fromList,fromIndex) - return (industrialtest.api.hasPowerStorage(stack:get_meta()) and count or 0) - elseif toList=="upgrades" then - -- TODO: Add support for upgrades when they will be added - return 0 - end - return count - end, - allow_metadata_inventory_put=function(pos,listname,index,stack) - if listname=="dst" then - return 0 - elseif listname=="src" then - local meta=minetest.get_meta(pos) - local inv=meta:get_inventory() - local srcSlot=inv:get_stack("src",1) - if srcSlot:get_name()~=stack:get_name() then - meta:set_float("srcTime",-1) - meta:set_float("maxSrcTime",0) - end - elseif listname=="powerStorage" then - return (industrialtest.api.hasPowerStorage(stack:get_meta()) and stack:get_count() or 0) - elseif listname=="upgrades" then - --TODO: See allow_metadata_inventory_move - return 0 - end - return stack:get_count() - end, - on_metadata_inventory_move=function(pos,fromList,fromIndex,toList,toIndex,count) - local meta=minetest.get_meta(pos) - local inv=meta:get_inventory() - local srcSlot=inv:get_stack("src",1) - if fromList=="src" and count==srcSlot:get_count() then - meta:set_float("srcTime",-1) - meta:set_float("maxSrcTime",0) - if meta:get_int("industrialtest.powerAmount")>0 then - meta:set_string("formspec",electricFurnaceFormspec(meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*100,meta:get_float("srcTime")/meta:get_float("maxSrcTime")*100)) - end - end - end, - on_metadata_inventory_put=function(pos,listname) - if listname=="src" or listname=="powerStorage" then - minetest.get_node_timer(pos):start(industrialtest.updateDelay) - end - end, - on_metadata_inventory_take=function(pos,listname,index,stack) - local meta=minetest.get_meta(pos) - local inv=meta:get_inventory() - local srcSlot=inv:get_stack("src",1) - if listname=="src" and stack:get_count()==srcSlot:get_count() then - meta:set_float("srcTime",-1) - meta:set_float("maxSrcTime",0) - if meta:get_int("industrialtest.powerAmount")>0 then - meta:set_string("formspec",electricFurnaceFormspec(meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*100,meta:get_float("srcTime")/meta:get_float("maxSrcTime")*100)) - end - end - end, - _industrialtest_updateFormspec=function(meta) - meta:set_string("formspec",electricFurnaceFormspec(meta:get_int("industrialtest.powerAmount")/meta:get_int("industrialtest.powerCapacity")*100,meta:get_float("srcTime")/meta:get_float("maxSrcTime")*100)) - end -} -if industrialtest.mtgAvailable then - definition.groups={ - cracky=1, - level=2 - } - definition.sounds=default.node_sound_metal_defaults() - definition.can_dig=function(pos) - local meta=minetest.get_meta(pos) - local inv=meta:get_inventory() - return not (inv:get_list("src")[1]:get_count()>0 or inv:get_list("powerStorage")[1]:get_count()>0 or inv:get_list("dst")[1]:get_count()>0) - end -elseif industrialtest.mclAvailable then - definition.after_dig_node=function(pos,oldnode,oldmeta) - mclAfterDigNode(pos,oldmeta,{"src","powerStorage","dst","upgrades"}) - end - definition.groups={pickaxey=1} - definition.sounds=mcl_sounds.node_sound_metal_defaults() - definition._mcl_blast_resistance=3 - definition._mcl_hardness=3.5 -end -definition.groups._industrialtest_hasPowerInput=1 -minetest.register_node("industrialtest:electric_furnace",definition) +registerSimpleElectricItemProcessor({ + name="electric_furnace", + displayName="Electric Furnace", + capacity=416, + flow=390, + opPower=60, + method="cooking", + efficiency=0.5 +}) minetest.register_craft({ type="shaped", output="industrialtest:electric_furnace", @@ -690,3 +725,22 @@ minetest.register_craft({ {industrialtest.elementKeys.powerCarrier,"industrialtest:iron_furnace",industrialtest.elementKeys.powerCarrier} } }) + +registerSimpleElectricItemProcessor({ + name="macerator", + displayName="Macerator", + capacity=1200, + flow=600, + opPower=100, + method="industrialtest.macerating", + efficiency=1 +}) +minetest.register_craft({ + type="shaped", + output="industrialtest:macerator", + recipe={ + {industrialtest.elementKeys.flint,industrialtest.elementKeys.flint,industrialtest.elementKeys.flint}, + {industrialtest.elementKeys.cobble,"industrialtest:machine_block",industrialtest.elementKeys.cobble}, + {"","industrialtest:electronic_circuit",""} + } +})