Harvester node

This commit is contained in:
Evert Prants 2018-06-19 15:48:57 +03:00
parent caf62e2b9c
commit 9d32873abb
Signed by: evert
GPG Key ID: 1688DA83D222D0B5
10 changed files with 409 additions and 0 deletions

View File

@ -23,3 +23,17 @@ function elefarm.formspec.planter_formspec(timer, power)
default.get_hotbar_bg(0, 5.75) default.get_hotbar_bg(0, 5.75)
end end
function elefarm.formspec.harvester_formspec(timer, power)
return "size[8,8.5]"..
default.gui_bg..
default.gui_bg_img..
default.gui_slots..
ele.formspec.power_meter(power)..
bar(1, 0, 100-timer)..
"list[context;dst;1.5,0.25;6,2;]"..
"list[current_player;main;0,4.25;8,1;]"..
"list[current_player;main;0,5.5;8,3;8]"..
"listring[context;dst]"..
"listring[current_player;main]"..
default.get_hotbar_bg(0, 4.25)
end

View File

@ -0,0 +1,238 @@
-- Tree Sap
minetest.register_node("elepower_farming:tree_sap_source", {
description = "Tree Sap Source",
drawtype = "liquid",
tiles = {"elefarming_tree_sap.png"},
alpha = 200,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "source",
liquid_alternative_source = "elepower_farming:tree_sap_source",
liquid_alternative_flowing = "elepower_farming:tree_sap_flowing",
liquid_viscosity = 7,
post_effect_color = {a = 103, r = 84, g = 34, b = 0},
groups = {tree_sap = 3, liquid = 3},
sounds = default.node_sound_water_defaults(),
})
minetest.register_node("elepower_farming:tree_sap_flowing", {
description = "Flowing Tree Sap",
drawtype = "flowingliquid",
tiles = {"elefarming_tree_sap.png"},
special_tiles = {"elefarming_tree_sap.png"},
alpha = 200,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "flowing",
liquid_alternative_flowing = "elepower_farming:tree_sap_flowing",
liquid_alternative_source = "elepower_farming:tree_sap_source",
liquid_viscosity = 7,
post_effect_color = {a = 103, r = 84, g = 34, b = 0},
groups = {tree_sap = 3, liquid = 3, not_in_creative_inventory = 1},
sounds = default.node_sound_water_defaults(),
})
-- Biomass
minetest.register_node("elepower_farming:biomass_source", {
description = "Biomass Source",
drawtype = "liquid",
tiles = {"elefarming_biomass.png"},
alpha = 200,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "source",
liquid_alternative_source = "elepower_farming:biomass_source",
liquid_alternative_flowing = "elepower_farming:biomass_flowing",
liquid_viscosity = 7,
post_effect_color = {a = 103, r = 0, g = 42, b = 0},
groups = {biomass = 3, liquid = 3},
sounds = default.node_sound_water_defaults(),
})
minetest.register_node("elepower_farming:biomass_flowing", {
description = "Flowing Biomass",
drawtype = "flowingliquid",
tiles = {"elefarming_biomass.png"},
special_tiles = {"elefarming_biomass.png"},
alpha = 200,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "flowing",
liquid_alternative_flowing = "elepower_farming:biomass_flowing",
liquid_alternative_source = "elepower_farming:biomass_source",
liquid_viscosity = 7,
post_effect_color = {a = 103, r = 0, g = 42, b = 0},
groups = {biomass = 3, liquid = 3, not_in_creative_inventory = 1},
sounds = default.node_sound_water_defaults(),
})
-- Biofuel
minetest.register_node("elepower_farming:biofuel_source", {
description = "Biomass Source",
drawtype = "liquid",
tiles = {"elefarming_biofuel.png"},
alpha = 200,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "source",
liquid_alternative_source = "elepower_farming:biofuel_source",
liquid_alternative_flowing = "elepower_farming:biofuel_flowing",
liquid_viscosity = 7,
post_effect_color = {a = 103, r = 255, g = 163, b = 0},
groups = {biofuel = 3, liquid = 3},
sounds = default.node_sound_water_defaults(),
})
minetest.register_node("elepower_farming:biofuel_flowing", {
description = "Flowing Biomass",
drawtype = "flowingliquid",
tiles = {"elefarming_biofuel.png"},
special_tiles = {"elefarming_biofuel.png"},
alpha = 200,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "flowing",
liquid_alternative_flowing = "elepower_farming:biofuel_flowing",
liquid_alternative_source = "elepower_farming:biofuel_source",
liquid_viscosity = 7,
post_effect_color = {a = 103, r = 255, g = 163, b = 0},
groups = {biofuel = 3, liquid = 3, not_in_creative_inventory = 1},
sounds = default.node_sound_water_defaults(),
})
-- Biofuel
minetest.register_node("elepower_farming:biofuel_source", {
description = "Biofuel Source",
drawtype = "liquid",
tiles = {"elefarming_biofuel.png"},
alpha = 200,
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "source",
liquid_alternative_source = "elepower_farming:biofuel_source",
liquid_alternative_flowing = "elepower_farming:biofuel_flowing",
liquid_viscosity = 7,
post_effect_color = {a = 103, r = 255, g = 163, b = 0},
groups = {biofuel = 3, liquid = 3},
sounds = default.node_sound_water_defaults(),
})
minetest.register_node("elepower_farming:biofuel_flowing", {
description = "Flowing Biofuel",
drawtype = "flowingliquid",
tiles = {"elefarming_biofuel.png"},
special_tiles = {"elefarming_biofuel.png"},
alpha = 200,
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "flowing",
liquid_alternative_flowing = "elepower_farming:biofuel_flowing",
liquid_alternative_source = "elepower_farming:biofuel_source",
liquid_viscosity = 7,
post_effect_color = {a = 103, r = 255, g = 163, b = 0},
groups = {biofuel = 3, liquid = 3, not_in_creative_inventory = 1},
sounds = default.node_sound_water_defaults(),
})
-- Sludge
minetest.register_node("elepower_farming:sludge_source", {
description = "Sludge Source",
drawtype = "liquid",
tiles = {"elefarming_tar.png"},
paramtype = "light",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "source",
liquid_alternative_source = "elepower_farming:sludge_source",
liquid_alternative_flowing = "elepower_farming:sludge_flowing",
liquid_viscosity = 8,
post_effect_color = {a = 50, r = 0, g = 0, b = 0},
groups = {sludge = 3, liquid = 3},
sounds = default.node_sound_water_defaults(),
})
minetest.register_node("elepower_farming:sludge_flowing", {
description = "Flowing Sludge",
drawtype = "flowingliquid",
tiles = {"elefarming_tar.png"},
special_tiles = {"elefarming_tar.png"},
paramtype = "light",
paramtype2 = "flowingliquid",
walkable = false,
pointable = false,
diggable = false,
buildable_to = true,
is_ground_content = false,
drop = "",
drowning = 1,
liquidtype = "flowing",
liquid_alternative_flowing = "elepower_farming:sludge_flowing",
liquid_alternative_source = "elepower_farming:sludge_source",
liquid_viscosity = 8,
post_effect_color = {a = 50, r = 0, g = 0, b = 0},
groups = {sludge = 3, liquid = 3, not_in_creative_inventory = 1},
sounds = default.node_sound_water_defaults(),
})

View File

@ -0,0 +1,155 @@
local HARVESTER_TICK = 10
local function can_dig(pos, player)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:is_empty("dst")
end
local fdir_areas = {
{ -- NEG Z (0)
{x = -4, z = -8, y = 0},
{x = 4, z = 0, y = 0},
},
{ -- NEG X (1)
{x = -8, z = -4, y = 0},
{x = 0, z = 4, y = 0},
},
{ -- POS Z (2)
{x = -4, z = 0, y = 0},
{x = 4, z = 8, y = 0},
},
{ -- POS X (3)
{x = 0, z = -4, y = 0},
{x = 8, z = 4, y = 0},
},
nil, nil
}
local function harvest(pos, harvested, fdir)
local front = ele.helpers.face_front(pos, fdir)
local ranges = fdir_areas[fdir + 1]
local range_st = vector.add(front, ranges[1])
local range_end = vector.add(front, ranges[2])
local shots = 9
for x = range_st.x, range_end.x do
for z = range_st.z, range_end.z do
if shots == 0 then break end
local check_pos = {x = x, y = range_st.y, z = z}
local check_node = minetest.get_node_or_nil(check_pos)
if check_node and ele.helpers.get_item_group(check_node.name, "plant") then
local nodedef = minetest.registered_nodes[check_node.name]
if not nodedef['next_plant'] or not minetest.registered_nodes[nodedef.next_plant] then
-- Can harvest
local drop = minetest.get_node_drops(check_node.name)
if drop then
for _,item in ipairs(drop) do
harvested[#harvested + 1] = item
end
minetest.remove_node(check_pos)
shots = shots - 1
end
end
end
end
end
return harvested
end
local function on_timer(pos, elapsed)
local refresh = false
local meta = minetest.get_meta(pos)
local node = minetest.get_node(pos)
local inv = meta:get_inventory()
local capacity = ele.helpers.get_node_property(meta, pos, "capacity")
local usage = ele.helpers.get_node_property(meta, pos, "usage")
local storage = ele.helpers.get_node_property(meta, pos, "storage")
local work = meta:get_int("src_time")
if storage > usage then
if work == HARVESTER_TICK then
local harvested = {}
harvest(pos, harvested, node.param2)
work = 0
if #harvested > 0 then
storage = storage - usage
for _,itm in ipairs(harvested) do
local stack = ItemStack(itm)
if inv:room_for_item("dst", stack) then
inv:add_item("dst", stack)
end
end
end
else
work = work + 1
end
refresh = true
ele.helpers.swap_node(pos, "elepower_farming:harvester_active")
else
ele.helpers.swap_node(pos, "elepower_farming:harvester")
end
local power_percent = math.floor((storage / capacity)*100)
local work_percent = math.floor((work / HARVESTER_TICK)*100)
meta:set_string("formspec", elefarm.formspec.harvester_formspec(work_percent, power_percent))
meta:set_int("storage", storage)
meta:set_int("src_time", work)
return refresh
end
ele.register_machine("elepower_farming:harvester", {
description = "Automatic Harvester",
ele_capacity = 12000,
ele_inrush = 288,
ele_usage = 128,
tiles = {
"elefarming_machine_base.png", "elefarming_machine_base.png", "elefarming_machine_side.png",
"elefarming_machine_side.png", "elefarming_machine_side.png", "elefarming_machine_harvester.png",
},
groups = {
oddly_breakable_by_hand = 1,
ele_machine = 1,
ele_user = 1,
cracky = 1,
},
on_construct = function (pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("layout", 9)
inv:set_size("dst", 12)
meta:set_int("src_time", 0)
meta:set_string("formspec", elefarm.formspec.harvester_formspec(0,0))
local node = minetest.get_node(pos)
end,
ele_active_node = true,
ele_active_nodedef = {
tiles = {
"elefarming_machine_base.png", "elefarming_machine_base.png", "elefarming_machine_side.png",
"elefarming_machine_side.png", "elefarming_machine_side.png", {
name = "elefarming_machine_harvester_animated.png",
animation = {
aspect_w = 16,
aspect_h = 16,
type = "vertical_frames",
length = 0.25,
},
},
}
},
can_dig = can_dig,
on_timer = on_timer,
})

View File

@ -1,2 +1,4 @@
dofile(elefarm.modpath.."/nodes/planter.lua") dofile(elefarm.modpath.."/nodes/planter.lua")
dofile(elefarm.modpath.."/nodes/harvester.lua")
dofile(elefarm.modpath.."/nodes/fluids.lua")

Binary file not shown.

After

Width:  |  Height:  |  Size: 898 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 894 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 B