diff --git a/init.lua b/init.lua index 3bb658f..a5d7a2e 100644 --- a/init.lua +++ b/init.lua @@ -1,119 +1,134 @@ -minetest.register_craftitem("fakery:diamond", { - description = "Diamond", - inventory_image = "default_diamond.png", -}) -minetest.register_craftitem("fakery:mese", { - description = "Mese Crystal", - inventory_image = "default_mese_crystal.png", -}) -if minetest.get_modpath("moreores") then - minetest.register_craftitem("fakery:mithril", { - description = "Mithril Ingot", - inventory_image = "moreores_mithril_ingot.png", +local S, PS = core.get_translator("fakery") + +fakery = {} + +fakery.S = S +fakery.PS = PS + +local recipes = {} +fakery.recipes = recipes + +local items = core.registered_items +local register_fake = function(name, item, dye) + local def = items[item] + core.register_craftitem(name, { + description = def.description, + inventory_image = def.inventory_image, }) + recipes[dye] = name +end + +fakery.register = register_fake + +if core.get_modpath("default") then + register_fake("fakery:diamond","default:diamond","dye:cyan") + register_fake("fakery:mese","default:mese_crystal","dye:yellow") +end +if minetest.get_modpath("moreores") then + register_fake("fakery:mithril","moreores:mithril_ingot","dye:blue") end if minetest.get_modpath("cloud_items") then - minetest.register_craftitem("fakery:cloud", { - description = "Cloud Ingot", - inventory_image = "cloud_items_cloud_ingot.png", - }) + register_fake("fakery:cloud","cloud_items:cloud_ingot","dye:white") end if minetest.get_modpath("lavastuff") then - minetest.register_craftitem("fakery:lava", { - description = "Lava Ingot", - inventory_image = "lavastuff_ingot.png", - }) + register_fake("fakery:lava","lavastuff:ingot","dye:red") end if minetest.get_modpath("overpowered") then - minetest.register_craftitem("fakery:op", { - description = "OP Alloy Ingot", - inventory_image = "overpowered_ingot.png", - }) + --register_fake("fakery:op","overpowered:ingot","dye:green") end --formspecs if minetest.get_modpath("basic_materials") then - fake_item = "basic_materials:plastic_sheet" -else - fake_item = "default:steel_ingot" + fakery.base = "basic_materials:plastic_sheet" + fakery.base_image = "fakery_plastic.png" +elseif core.get_modpath("default") then + fakery.base = "default:steel_ingot" + fakery.base_image = "fakery_ingot.png" end -local function get_formspec_bench() - if fake_item == "basic_materials:plastic_sheet" then - return "size[10,10]".. +fakery.formspec = { + bench = "size[10,10]".. "image[4.5,2;1,1;sfinv_crafting_arrow.png]".. - "list[context;metal;2,1.5;1,1;1]".. - "image[2,1.5;1,1;fakery_plastic.png]".. - "list[context;dye;2,2.5;1,1;1]".. + "list[context;base;2,1.5;1,1]".. + "image[2,1.5;1,1;"..fakery.base_image.."]".. + "list[context;dye;2,2.5;1,1]".. "image[2,2.5;1,1;fakery_dye.png]".. - "list[context;dest;7,2;1,1;1]".. + "list[context;dest;7,2;1,1]".. + "list[current_player;main;1,5;8,4;]", + progress = "size[10,10]".. + "label[4,2;"..S("Forgery in progress...").."]".. "list[current_player;main;1,5;8,4;]" - else - return "size[10,10]".. +} + +function fakery.set_base_image(image) + fakery.base_image = image + fakery.formspec.bench = "size[10,10]".. "image[4.5,2;1,1;sfinv_crafting_arrow.png]".. - "list[context;metal;2,1.5;1,1;1]".. - "image[2,1.5;1,1;fakery_ingot.png]".. + "list[context;base;2,1.5;1,1;1]".. + "image[2,1.5;1,1;"..fakery.base_image.."]".. "list[context;dye;2,2.5;1,1;1]".. "image[2,2.5;1,1;fakery_dye.png]".. "list[context;dest;7,2;1,1;1]".. "list[current_player;main;1,5;8,4;]" - end -end -local function get_formspec_working() - return "size[10,10]".. - "label[4,2;Forgery in process...]".. - "list[current_player;main;1,5;8,4;]" end --workbench -local function register_recipe(dye,metal,result,pos) - local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - local timer = minetest.get_node_timer(pos) - if inv:contains_item("dye", dye) == true and inv:contains_item("metal", metal) == true and inv:is_empty("dest") then - inv:remove_item("dye", dye) - inv:remove_item("metal", metal) - local dye_s = inv:get_stack("dye", 2) - local metal_s = inv:get_stack("metal", 2) - inv:set_stack("dye", 2, dye_s) - inv:set_stack("metal", 2, metal_s) - inv:set_stack("dest", 2, result) - meta:set_string("formspec", get_formspec_working()) - timer:start(7) - end -end -local function craft(pos) - register_recipe("dye:yellow",fake_item,"fakery:mese",pos) - register_recipe("dye:cyan",fake_item,"fakery:diamond",pos) - if minetest.get_modpath("moreores") then register_recipe("dye:blue",fake_item,"fakery:mithril",pos) end - if minetest.get_modpath("cloud_items") then register_recipe("dye:white",fake_item,"fakery:cloud",pos) end - if minetest.get_modpath("lavastuff") then register_recipe("dye:red",fake_item,"fakery:lava",pos) end - if minetest.get_modpath("overpowered") then register_recipe("dye:green",fake_item,"fakery:op",pos) end +local function update(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local timer = minetest.get_node_timer(pos) + + local base_s = inv:get_stack("base", 1) + if base_s:is_empty() then return end + local dye_s = inv:get_stack("dye", 1) + if dye_s:is_empty() then return end + local out = recipes[dye_s:get_name()] + if not out then return end + local out_s = inv:get_stack("dest", 1) + if not out_s:is_empty() then return end + base_s:take_item(1) + inv:set_stack("base", 1, base_s) + inv:set_stack("dye", 1, ItemStack("")) + inv:set_stack("dest", 1, ItemStack(out)) + meta:set_string("formspec", fakery.formspec.progress) + timer:start(7) end minetest.register_node("fakery:table", { - description = "Forgery Workbench", + description = S("Forgery Workbench"), tiles = {"fakery_bench_top.png", "fakery_bench_top.png", "fakery_bench_side.png", "fakery_bench_side.png","fakery_bench_side.png", "fakery_bench_side.png"}, groups = {oddly_breakable_by_hand = 1}, on_construct = function(pos, node) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() - inv:set_size("dye", 2*1) - inv:set_size("metal", 2*1) - inv:set_size("dest", 2*1) - meta:set_string("formspec", get_formspec_bench()) + inv:set_size("dye", 1) + inv:set_size("base", 1) + inv:set_size("dest", 1) + meta:set_string("formspec", fakery.formspec.bench) end, on_timer = function(pos) local meta = minetest.get_meta(pos) - local inv = meta:get_inventory() - meta:set_string("formspec", get_formspec_bench()) + meta:set_string("formspec", fakery.formspec.bench) return false end, on_metadata_inventory_put = function(pos, listname, index, stack, player) - craft(pos) + update(pos) end, on_metadata_inventory_take = function(pos, listname, index, stack, player) - craft(pos) + update(pos) end, - on_metadata_inventory_move = function(pos, listname, index, stack, player) - craft(pos) - end + allow_metadata_inventory_move = function() + return 0 + end, + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if listname == "dest" then return 0 end + if listname == "dye" then + if not recipes[stack:get_name()] then return 0 end + if core.get_meta(pos):get_inventory():get_stack("dye", index):is_empty() then + return 1 + else + return 0 + end + end + if stack:get_name() ~= fakery.base then return 0 end + return stack:get_count() + end }) minetest.register_craft({ output = "fakery:table",