From 89bc723fca8c9fac375a1deaba3b40ca607a9784 Mon Sep 17 00:00:00 2001 From: Evert Prants Date: Fri, 10 Aug 2018 21:58:05 +0300 Subject: [PATCH] Composter --- elepower_farming/crafting.lua | 10 ++ elepower_farming/nodes/composter.lua | 145 ++++++++++++++++++ elepower_farming/nodes/init.lua | 1 + .../textures/elefarming_machine_top.png | Bin 0 -> 1310 bytes 4 files changed, 156 insertions(+) create mode 100644 elepower_farming/nodes/composter.lua create mode 100644 elepower_farming/textures/elefarming_machine_top.png diff --git a/elepower_farming/crafting.lua b/elepower_farming/crafting.lua index 3bc11f3..b1504e4 100644 --- a/elepower_farming/crafting.lua +++ b/elepower_farming/crafting.lua @@ -48,3 +48,13 @@ minetest.register_craft({ {"elepower_dynamics:copper_gear", "elepower_dynamics:servo_valve", "elepower_dynamics:copper_gear"}, } }) + +-- Composter +minetest.register_craft({ + output = "elepower_farming:composter", + recipe = { + {"elepower_dynamics:motor", "bucket:bucket_empty", "elepower_dynamics:motor"}, + {"elepower_dynamics:electrum_gear", "elepower_farming:device_frame", "elepower_dynamics:electrum_gear"}, + {"elepower_dynamics:copper_gear", "elepower_dynamics:servo_valve", "elepower_dynamics:copper_gear"}, + } +}) diff --git a/elepower_farming/nodes/composter.lua b/elepower_farming/nodes/composter.lua new file mode 100644 index 0000000..01c1eb4 --- /dev/null +++ b/elepower_farming/nodes/composter.lua @@ -0,0 +1,145 @@ + +local function get_formspec(timer, output_buffer) + return "size[8,8.5]".. + default.gui_bg.. + default.gui_bg_img.. + default.gui_slots.. + ele.formspec.fluid_bar(7, 0.75, output_buffer).. + "list[context;src;1,0.5;3,3;]".. + "image[5,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:".. + (timer)..":gui_furnace_arrow_fg.png^[transformR270]".. + "list[current_player;main;0,4.25;8,1;]".. + "list[current_player;main;0,5.5;8,3;8]".. + "listring[current_player;main]".. + "listring[context;src]".. + "listring[current_player;main]".. + default.get_hotbar_bg(0, 4.25) +end + +local function is_plant(itemname) + if ele.helpers.get_item_group(itemname, "seed") or ele.helpers.get_item_group(itemname, "plant") then + return true + end + + local node = itemname .. "_1" + if minetest.registered_nodes[node] then + if ele.helpers.get_item_group(node, "plant") then + return true + end + end + + return false +end + +local function get_biomass(list) + local list_new = {} + local amnt = 0 + + for i,stack in pairs(list) do + local sname = stack:get_name() + if is_plant(sname) then + stack:take_item(1) + list_new[i] = stack + amnt = amnt + 1 + else + list_new[i] = stack + end + end + + return amnt, list_new +end + +local function on_timer(pos, elapsed) + local refresh = false + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + local out_buffer = fluid_lib.get_buffer_data(pos, "output") + + local time = meta:get_int("src_time") + local time_max = meta:get_int("src_time_max") + + while true do + local amount,list_new = get_biomass(inv:get_list("src")) + + if amount == 0 or out_buffer.amount == out_buffer.capacity then + break + end + + if time_max == 0 then + time_max = 10 + refresh = true + break + end + + if time < time_max then + time = time + 1 + refresh = true + end + + if time ~= time_max then + break + end + + local amount_fluid = amount * 100 + out_buffer.amount = out_buffer.amount + amount_fluid + if out_buffer.amount > out_buffer.capacity then + out_buffer.amount = out_buffer.capacity + end + + inv:set_list("src", list_new) + + meta:set_int("output_fluid_storage", out_buffer.amount) + meta:set_string("output_fluid", "elepower_farming:biofuel_source") + + time = 0 + time_max = 0 + + refresh = true + break + end + + local timer = 0 + if time_max > 0 then + timer = math.floor(100 * time / time_max) + end + + meta:set_int("src_time", time) + meta:set_int("src_time_max", time_max) + + meta:set_string("formspec", get_formspec(timer, out_buffer)) + + return refresh +end + +ele.register_base_device("elepower_farming:composter", { + description = "Composter\nConvert plant matter to Biofuel", + groups = {oddly_breakable_by_hand = 1, cracky = 1, fluid_container = 1, tube = 1}, + fluid_buffers = { + output = { + capacity = 8000, + drainable = true, + } + }, + on_timer = on_timer, + on_construct = function (pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + + inv:set_size("src", 9) + + meta:set_string("formspec", get_formspec(0)) + end, + tiles = { + "elefarming_machine_top.png", "elefarming_machine_base.png", "elefarming_machine_side.png", + "elefarming_machine_side.png", "elefarming_machine_side.png", "elefarming_machine_side.png", + }, + + allow_metadata_inventory_put = ele.default.allow_metadata_inventory_put, + allow_metadata_inventory_move = ele.default.allow_metadata_inventory_move, + allow_metadata_inventory_take = ele.default.allow_metadata_inventory_take, + + on_metadata_inventory_move = ele.default.metadata_inventory_changed, + on_metadata_inventory_put = ele.default.metadata_inventory_changed, + on_metadata_inventory_take = ele.default.metadata_inventory_changed, +}) diff --git a/elepower_farming/nodes/init.lua b/elepower_farming/nodes/init.lua index e22814b..e8146a6 100644 --- a/elepower_farming/nodes/init.lua +++ b/elepower_farming/nodes/init.lua @@ -13,6 +13,7 @@ dofile(elefarm.modpath.."/nodes/planter.lua") dofile(elefarm.modpath.."/nodes/harvester.lua") dofile(elefarm.modpath.."/nodes/tree_extractor.lua") dofile(elefarm.modpath.."/nodes/tree_processor.lua") +dofile(elefarm.modpath.."/nodes/composter.lua") -- Mobs Redo support if minetest.get_modpath("mobs") ~= nil and mobs.mod and mobs.mod == "redo" then diff --git a/elepower_farming/textures/elefarming_machine_top.png b/elepower_farming/textures/elefarming_machine_top.png new file mode 100644 index 0000000000000000000000000000000000000000..048a5547f7b66e809b1737e1adefe71fb45d36c4 GIT binary patch literal 1310 zcmV+(1>yRMP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3vhcH=4xh5xgPS%M`Y1k1r-&Urg{%b$yloz!U) zHxqMeh`{Kg4?*4X|9{Q>!NXHx=hb3JAxwCD@`*DVaoV1|zG?F7d;FO8#uvLgIv6HF zE!)o+hJAsZF`kFLjCnHbdN)y8M#ucMBaewV4hOr(;Yet6FpY^_9uo-<&wl$oZ_AoO zigv$*GRC*jzlH&SuD`q(2MuH%Z_kriNN7i%ydiG23l&@aACAty-9D6|i5DT6@b+Dy zK)yuDsQbJ3bSt6F;_=3_DFrQdlcAmVxITZLDR;Z{f&2^7qeVa1??}5fpnHd$2!*5m z)=qk}yL+T7w>!@v9G<_}%gx0>&h7YGtFg6ZTV3`6OAcdE`%=~x#?3ui>sJBA@TXJk z!R{rYM5IIk&I*?^N})sySdBbY%G79C>p}$*JuhsinF~-B2V(?`#AU_pd!fcANh+|j z6l@29l@Benx=pLQLJ^KDMTgx(n2hkrKNWXnP-{J*h^BbN3c9%OY^dnuh}=XN1|rl( zP<0LPUd~VFDj=w9m?IXLr@7An{Ik++bIA%?Fi=r%c|=yn1PBonD8!I}z!XT70!_y3 zj0k~@0F)seNyIa-kSbS*WG@l`2U!5$_{L}*%F3G=2O&VH1SbYINitx0uh>84Blb{M zQLm~&O`|5wK|;^45G?c)HJg|>wP0q^l4Tbq`lvBPi!r8{6DPrms|op-VoE7zIL(+j z}Q?BY;&B`oC~`m#TPB1ScxT-T)9d`9@kK<#+qtgXu(!m{Gv-(Y>7)+ za>G_@(tOhvnzh)HYx$ryus)PuP@_SOS5keT9n@eo+ozy@oM>kTV(baPtrH+|%$?a3 z$$RePIx}2T$O>hM)DEXoCkBFkA=X9*yBj%m5 zJq>$MCqee%_~DrQB^i2^`-S;^?fAujtM!i)Eh&$dAEKtGwYyX8&&vpvy!NYf?v?gy zb*p*rNW);_^fbnNJv!yo_pEkT2Yz)nAI^3m?$&veX?rWA%P!nS4P;N$981GiKRVMJ zYI^N{r{;0_`zZGbH5X#^IyQTsJ9oaL=0%LIs;T=#w;lYhnkO;3s^%`&>;r0kh|#^8 zc6g*0$?ZO&=9?H@-!~80{|Pmx82xVFoVShpgqph;y+`UEl>3C5Jw-0Y=JB}s=fnTU zTjaTt-Et%r>*>1d2De)Fp1NO=^)#L2S9j*^I{MXh_}1Znom#^`Hp%@3zfgo3bodoi z00006VoOIv0LB2u0LFMTD{}w<010qNS#tmY3ljhU3ljkVnw%H_000McNliru;s^>7 z7$Sg76)yk)02y>eSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{005pzL_t(I z%cYai4TLZZL!Tp7DHE_Ld$B>KZbEY(5Oj!>4nn@FrimS=);!NHiEIp#7{?KJza%B$ z?nt8dP5{Myt(74j*IFMTmr^zc0KInrrfIrWye!LcHsB}ye-Sm76)*HK0JC(Tt-+f$ z+P8?03U}7&5dt*5h1VLKM#w~rFaWIUdii0u%@i7hp~5JEa!@rp8S2!awU!p~1K2=B UNS1nxF8}}l07*qoM6N<$g5il+-v9sr literal 0 HcmV?d00001