Composter
This commit is contained in:
parent
39dd987e7e
commit
89bc723fca
@ -48,3 +48,13 @@ minetest.register_craft({
|
|||||||
{"elepower_dynamics:copper_gear", "elepower_dynamics:servo_valve", "elepower_dynamics:copper_gear"},
|
{"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"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
145
elepower_farming/nodes/composter.lua
Normal file
145
elepower_farming/nodes/composter.lua
Normal file
@ -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,
|
||||||
|
})
|
@ -13,6 +13,7 @@ dofile(elefarm.modpath.."/nodes/planter.lua")
|
|||||||
dofile(elefarm.modpath.."/nodes/harvester.lua")
|
dofile(elefarm.modpath.."/nodes/harvester.lua")
|
||||||
dofile(elefarm.modpath.."/nodes/tree_extractor.lua")
|
dofile(elefarm.modpath.."/nodes/tree_extractor.lua")
|
||||||
dofile(elefarm.modpath.."/nodes/tree_processor.lua")
|
dofile(elefarm.modpath.."/nodes/tree_processor.lua")
|
||||||
|
dofile(elefarm.modpath.."/nodes/composter.lua")
|
||||||
|
|
||||||
-- Mobs Redo support
|
-- Mobs Redo support
|
||||||
if minetest.get_modpath("mobs") ~= nil and mobs.mod and mobs.mod == "redo" then
|
if minetest.get_modpath("mobs") ~= nil and mobs.mod and mobs.mod == "redo" then
|
||||||
|
BIN
elepower_farming/textures/elefarming_machine_top.png
Normal file
BIN
elepower_farming/textures/elefarming_machine_top.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
Loading…
Reference in New Issue
Block a user