forked from Reload/techage_modpack
102 lines
2.6 KiB
Lua
102 lines
2.6 KiB
Lua
--[[
|
|
|
|
Signs Bot
|
|
=========
|
|
|
|
Copyright (C) 2019-2021 Joachim Stolberg
|
|
|
|
GPL v3
|
|
See LICENSE.txt for more information
|
|
|
|
Signs Bot: Commands for the compost mod
|
|
|
|
]]--
|
|
|
|
-- Load support for I18n.
|
|
local S = signs_bot.S
|
|
|
|
local NUM_LEAVES = 2
|
|
|
|
-- we reuse the minecart hopper API here
|
|
local function additem(mem, stack)
|
|
local pos = signs_bot.lib.next_pos(mem.robot_pos, mem.robot_param2)
|
|
local node = minetest.get_node(pos)
|
|
local ndef = minetest.registered_nodes[node.name]
|
|
if ndef.minecart_hopper_additem then
|
|
return ndef.minecart_hopper_additem(pos, stack)
|
|
end
|
|
|
|
pos = {x = pos.x, y = pos.y - 1, z = pos.z}
|
|
node = minetest.get_node(pos)
|
|
ndef = minetest.registered_nodes[node.name]
|
|
if ndef and ndef.minecart_hopper_additem then
|
|
return ndef.minecart_hopper_additem(pos, stack)
|
|
end
|
|
|
|
return stack
|
|
end
|
|
|
|
local function takeitem(mem)
|
|
local pos = signs_bot.lib.next_pos(mem.robot_pos, mem.robot_param2)
|
|
local node = minetest.get_node(pos)
|
|
local ndef = minetest.registered_nodes[node.name]
|
|
if ndef.minecart_hopper_takeitem then
|
|
return ndef.minecart_hopper_takeitem(pos, 1)
|
|
end
|
|
|
|
pos = {x = pos.x, y = pos.y - 1, z = pos.z}
|
|
node = minetest.get_node(pos)
|
|
ndef = minetest.registered_nodes[node.name]
|
|
if ndef and ndef.minecart_hopper_takeitem then
|
|
return ndef.minecart_hopper_takeitem(pos, 1)
|
|
end
|
|
end
|
|
|
|
|
|
if minetest.global_exists("signs_bot") then
|
|
|
|
signs_bot.register_botcommand("add_compost", {
|
|
mod = "compost",
|
|
params = "<slot>",
|
|
num_param = 1,
|
|
description = S("Put 2 leaves into the compost barrel\n"..
|
|
"<slot> is the bot inventory slot (1..8)\n"..
|
|
"with the leaves."),
|
|
check = function(slot)
|
|
slot = tonumber(slot) or 0
|
|
return slot > 0 and slot < 9
|
|
end,
|
|
cmnd = function(base_pos, mem, slot)
|
|
slot = tonumber(slot) or 0
|
|
local taken = signs_bot.bot_inv_take_item(base_pos, slot, NUM_LEAVES)
|
|
local leftover = additem(mem, taken)
|
|
if leftover and leftover:get_count() > 0 then
|
|
signs_bot.bot_inv_put_item(base_pos, slot, leftover)
|
|
end
|
|
return signs_bot.DONE
|
|
end,
|
|
})
|
|
|
|
signs_bot.register_botcommand("take_compost", {
|
|
mod = "compost",
|
|
params = "<slot>",
|
|
num_param = 1,
|
|
description = S("Take a compost item from the barrel.\n"..
|
|
"<slot> (1..8 or 0 for the first free slot) is the bot\n"..
|
|
"slot for the compost item."),
|
|
check = function(num, slot)
|
|
slot = tonumber(slot) or 0
|
|
return slot >= 0 and slot < 9
|
|
end,
|
|
cmnd = function(base_pos, mem, slot)
|
|
slot = tonumber(slot) or 0
|
|
local taken = takeitem(mem)
|
|
local leftover = signs_bot.bot_inv_put_item(base_pos, slot, taken)
|
|
if leftover and leftover:get_count() > 0 then
|
|
signs_bot.lib.drop_items(mem.robot_pos, leftover)
|
|
end
|
|
return signs_bot.DONE
|
|
end,
|
|
})
|
|
end
|