minetest.register_node("castle:autocraft", { tiles = { -- Thanks to Eld's workbench texture "castle_autocrafter_top.png", "default_wood.png", "castle_autocrafter_side1.png", "castle_autocrafter_side1.png", "castle_autocrafter_side2.png", "castle_autocrafter_side2.png" }, description = "Automatic Crafting Table", groups = {choppy = 1, oddly_breakable_by_hand = 2}, paramtype = "light", paramtype2 = "facedir", sounds = default.node_sound_wood_defaults(), drop = "pipeworks:autocrafter", })--[[ on_construct = function(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() inv:set_size("craft", 9) inv:set_size("in", 6 * 4) -- was 8 * 3 meta:set_string("formspec", "size[10,9]" ..default.gui_bg..default.gui_bg_img..default.gui_slots .."list[context;craft;7,0.5;3,3]" .."list[context;in;0,0.5;6,4]" .."list[current_player;main;1,5;8,4]" .."listring[]" .."label[7,0;Recipe:]" .."label[0,0;Materials:") end, can_dig = function(pos,player) local meta = minetest.get_meta(pos) ; if not meta then return false end local inv = meta:get_inventory() return inv:is_empty("in") and inv:is_empty("craft") end, allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) if minetest.is_protected(pos, player:get_player_name()) then return 0 end return count end, allow_metadata_inventory_take = function(pos, listname, index, stack, player) if minetest.is_protected(pos, player:get_player_name()) then return 0 end return stack:get_count() end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) if minetest.is_protected(pos, player:get_player_name()) then return 0 end return stack:get_count() end, }) minetest.register_craft({ output = "castle:autocraft", recipe = { {"default:steel_ingot","default:steel_ingot","default:steel_ingot"}, {"group:wood", "group:wood","default:steel_ingot"}, {"group:tree", "group:tree","default:steel_ingot"}, } }) minetest.register_abm({ nodenames = {"castle:autocraft"}, interval = 5, chance = 1, catch_up = false, action = function(pos, node) local meta = minetest.get_meta(pos) ; if not meta then return end local inventory = meta:get_inventory() local recipe = inventory:get_list("craft") local result local new for i = 1, 9 do recipe[i] = ItemStack({ name = recipe[i]:get_name(), count = 1 }) end result, new = minetest.get_craft_result({ method = "normal", width = 3, items = recipe }) if result.item:is_empty() then return end result = result.item local input = inventory:get_list("in") if not inventory:room_for_item("in", result) then return end local to_use = {} for _,item in pairs(recipe) do if item ~= nil and not item:is_empty() then if to_use[item:get_name()] == nil then to_use[item:get_name()] = 1 else to_use[item:get_name()] = to_use[item:get_name()] + 1 end end end local stack for itemname, number in pairs(to_use) do stack = ItemStack({ name = itemname, count = number }) if not inventory:contains_item("in", stack) then return end end for itemname, number in pairs(to_use) do stack = ItemStack({ name = itemname, count = number }) inventory:remove_item("in", stack) end inventory:add_item("in", result) for i = 1, 9 do inventory:add_item("in", new.items[i]) end end, }) ]]