Skip to content
This repository was archived by the owner on Jul 20, 2025. It is now read-only.
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
173 changes: 94 additions & 79 deletions init.lua
Original file line number Diff line number Diff line change
@@ -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",
Expand Down