mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-22 18:41:09 +01:00
Fixed compostable item comsumption.
This commit is contained in:
parent
91ef21c55b
commit
f61b072d39
1 changed files with 78 additions and 65 deletions
|
@ -415,71 +415,6 @@ minetest.register_abm({
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_abm({
|
|
||||||
label = "Hopper/composter integration",
|
|
||||||
nodenames = {"mcl_hoppers:hopper", "mcl_hoppers:hopper_side"},
|
|
||||||
neighbors = {"mcl_composters:composter", "mcl_composters:composter_1", "mcl_composters:composter_2",
|
|
||||||
"mcl_composters:composter_3", "mcl_composters:composter_4", "mcl_composters:composter_5",
|
|
||||||
"mcl_composters:composter_6", "mcl_composters:composter_7", "mcl_composters:composter_ready"},
|
|
||||||
interval = 1.0,
|
|
||||||
chance = 1,
|
|
||||||
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
||||||
local uppos = {x=pos.x,y=pos.y+1,z=pos.z}
|
|
||||||
local downpos = {x=pos.x,y=pos.y-1,z=pos.z}
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
-- Get bonemeal from composter above
|
|
||||||
local upnode = minetest.get_node(uppos)
|
|
||||||
if upnode.name == "mcl_composters:composter_ready" then
|
|
||||||
minetest.swap_node(uppos, {name="mcl_composters:composter"})
|
|
||||||
inv:add_item("main", "mcl_dye:white")
|
|
||||||
end
|
|
||||||
|
|
||||||
--Add compostable itens into composter below
|
|
||||||
local downnode = minetest.get_node(downpos)
|
|
||||||
if downnode.name == "mcl_composters:composter" or downnode.name == "mcl_composters:composter_1"
|
|
||||||
or downnode.name == "mcl_composters:composter_2" or downnode.name == "mcl_composters:composter_3"
|
|
||||||
or downnode.name == "mcl_composters:composter_4" or downnode.name == "mcl_composters:composter_5"
|
|
||||||
or downnode.name == "mcl_composters:composter_6" or downnode.name == "mcl_composters:composter_7" then
|
|
||||||
local itemcomp = inv:get_list("main")
|
|
||||||
for i, k in ipairs(itemcomp) do
|
|
||||||
local compchance = minetest.get_item_group(itemcomp[i]:get_name(), "compostability")
|
|
||||||
if compchance > 0 then
|
|
||||||
-- TODO: fix bug where take multiple compostable items
|
|
||||||
itemcomp[i]:take_item()
|
|
||||||
inv:set_list("main", itemcomp)
|
|
||||||
local rand = math.random(0,100)
|
|
||||||
if compchance >= rand then
|
|
||||||
local level = 0
|
|
||||||
if downnode.name == "mcl_composters:composter_1" then
|
|
||||||
level = 1
|
|
||||||
elseif downnode.name == "mcl_composters:composter_2" then
|
|
||||||
level = 2
|
|
||||||
elseif downnode.name == "mcl_composters:composter_3" then
|
|
||||||
level = 3
|
|
||||||
elseif downnode.name == "mcl_composters:composter_4" then
|
|
||||||
level = 4
|
|
||||||
elseif downnode.name == "mcl_composters:composter_5" then
|
|
||||||
level = 5
|
|
||||||
elseif downnode.name == "mcl_composters:composter_6" then
|
|
||||||
level = 6
|
|
||||||
elseif downnode.name == "mcl_composters:composter_7" then
|
|
||||||
level = 7
|
|
||||||
end
|
|
||||||
mcl_dye.add_bone_meal_particle(vector.offset(downpos, 0, level/8, 0))
|
|
||||||
if level < 7 then
|
|
||||||
level = level + 1
|
|
||||||
else
|
|
||||||
level = "ready"
|
|
||||||
end
|
|
||||||
minetest.swap_node(downpos, {name="mcl_composters:composter_" .. level})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
label = "Side-hopper/container item exchange",
|
label = "Side-hopper/container item exchange",
|
||||||
nodenames = {"mcl_hoppers:hopper_side"},
|
nodenames = {"mcl_hoppers:hopper_side"},
|
||||||
|
@ -534,6 +469,84 @@ minetest.register_abm({
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
label = "Bonemeal extraction from composter",
|
||||||
|
nodenames = {"mcl_hoppers:hopper", "mcl_hoppers:hopper_side"},
|
||||||
|
neighbors = {"mcl_composters:composter_ready"},
|
||||||
|
interval = 1.0,
|
||||||
|
chance = 1,
|
||||||
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
|
local uppos = {x=pos.x,y=pos.y+1,z=pos.z}
|
||||||
|
local downpos = {x=pos.x,y=pos.y-1,z=pos.z}
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
-- Get bonemeal from composter above
|
||||||
|
local upnode = minetest.get_node(uppos)
|
||||||
|
if upnode.name == "mcl_composters:composter_ready" then
|
||||||
|
minetest.swap_node(uppos, {name="mcl_composters:composter"})
|
||||||
|
inv:add_item("main", "mcl_dye:white")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
label = "Add compostable items on composter",
|
||||||
|
nodenames = {"mcl_hoppers:hopper"},
|
||||||
|
neighbors = {"mcl_composters:composter", "mcl_composters:composter_1", "mcl_composters:composter_2",
|
||||||
|
"mcl_composters:composter_3", "mcl_composters:composter_4", "mcl_composters:composter_5",
|
||||||
|
"mcl_composters:composter_6", "mcl_composters:composter_7",},
|
||||||
|
interval = 1.0,
|
||||||
|
chance = 1,
|
||||||
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
|
local uppos = {x=pos.x,y=pos.y+1,z=pos.z}
|
||||||
|
local downpos = {x=pos.x,y=pos.y-1,z=pos.z}
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
--Consume compostable items and update composter below
|
||||||
|
local downnode = minetest.get_node(downpos)
|
||||||
|
if downnode.name == "mcl_composters:composter" or downnode.name == "mcl_composters:composter_1"
|
||||||
|
or downnode.name == "mcl_composters:composter_2" or downnode.name == "mcl_composters:composter_3"
|
||||||
|
or downnode.name == "mcl_composters:composter_4" or downnode.name == "mcl_composters:composter_5"
|
||||||
|
or downnode.name == "mcl_composters:composter_6" or downnode.name == "mcl_composters:composter_7" then
|
||||||
|
local itemcomp = inv:get_list("main")
|
||||||
|
local hslot = mcl_util.get_first_occupied_inventory_slot(minetest.get_inventory({type="node", pos = pos}), "main")
|
||||||
|
if hslot == nil then return end
|
||||||
|
local compchance = minetest.get_item_group(itemcomp[hslot]:get_name(), "compostability")
|
||||||
|
-- TODO: make it go to next hslot if item isn't compostable
|
||||||
|
if compchance > 0 then
|
||||||
|
itemcomp[hslot]:take_item()
|
||||||
|
inv:set_list("main", itemcomp)
|
||||||
|
local rand = math.random(0,100)
|
||||||
|
if compchance >= rand then
|
||||||
|
local level = 0
|
||||||
|
if downnode.name == "mcl_composters:composter_1" then
|
||||||
|
level = 1
|
||||||
|
elseif downnode.name == "mcl_composters:composter_2" then
|
||||||
|
level = 2
|
||||||
|
elseif downnode.name == "mcl_composters:composter_3" then
|
||||||
|
level = 3
|
||||||
|
elseif downnode.name == "mcl_composters:composter_4" then
|
||||||
|
level = 4
|
||||||
|
elseif downnode.name == "mcl_composters:composter_5" then
|
||||||
|
level = 5
|
||||||
|
elseif downnode.name == "mcl_composters:composter_6" then
|
||||||
|
level = 6
|
||||||
|
elseif downnode.name == "mcl_composters:composter_7" then
|
||||||
|
level = 7
|
||||||
|
end
|
||||||
|
mcl_dye.add_bone_meal_particle(vector.offset(downpos, 0, level/8, 0))
|
||||||
|
if level < 7 then
|
||||||
|
level = level + 1
|
||||||
|
else
|
||||||
|
level = "ready"
|
||||||
|
end
|
||||||
|
minetest.swap_node(downpos, {name="mcl_composters:composter_" .. level})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "mcl_hoppers:hopper",
|
output = "mcl_hoppers:hopper",
|
||||||
recipe = {
|
recipe = {
|
||||||
|
|
Loading…
Reference in a new issue