123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- 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,
- })
- ]]
|