252 lines
5.9 KiB
Lua
252 lines
5.9 KiB
Lua
local blade = {}
|
|
local make_blade = false
|
|
local handle = {}
|
|
local make_handle = false
|
|
local sword = {}
|
|
local make_sword = false
|
|
|
|
|
|
|
|
|
|
minetest.register_node("mymagic_tools:forge_sword",{
|
|
description = "Sword Forge",
|
|
tiles = {
|
|
{name="mymagic_forge_top.png", animation={type="vertical_frames",aspect_w=16, aspect_h=16, length=0.3}},
|
|
"mymagic_forge_back.png",
|
|
"mymagic_forge_side.png^[transformFX",
|
|
"mymagic_forge_side.png",
|
|
"mymagic_forge_back.png",
|
|
{name="mymagic_forge_front_sword.png", animation={type="vertical_frames",aspect_w=16, aspect_h=16, length=0.3}},
|
|
},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
light_source = 14,
|
|
groups = {cracky=1},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.375, -0.375, 0.5, 0.375},
|
|
{-0.5, -0.5, 0.375, 0.5, 0.5, 0.5},
|
|
{0.375, -0.5, -0.375, 0.5, 0.5, 0.375},
|
|
{-0.5, -0.5, -0.5, 0.5, 0.25, -0.375},
|
|
{-0.375, -0.5, -0.375, 0.375, 0.3125, 0.375},
|
|
{-0.375, -0.5, -0.3125, 0.375, 0.375, 0.375},
|
|
}
|
|
},
|
|
|
|
after_place_node = function(pos, placer)
|
|
local meta = minetest.get_meta(pos);
|
|
meta:set_string("infotext", "Sword Forge");
|
|
end,
|
|
can_dig = function(pos,player)
|
|
local meta = minetest.get_meta(pos);
|
|
local inv = meta:get_inventory()
|
|
if not inv:is_empty("blade") then
|
|
return false
|
|
elseif not inv:is_empty("blade1") then
|
|
return false
|
|
elseif not inv:is_empty("blade2") then
|
|
return false
|
|
elseif not inv:is_empty("blade3") then
|
|
return false
|
|
elseif not inv:is_empty("handle") then
|
|
return false
|
|
elseif not inv:is_empty("handle1") then
|
|
return false
|
|
elseif not inv:is_empty("handle2") then
|
|
return false
|
|
elseif not inv:is_empty("handle3") then
|
|
return false
|
|
elseif not inv:is_empty("sword") then
|
|
return false
|
|
end
|
|
return true
|
|
end,
|
|
on_construct = function(pos)
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_string("formspec", "size[9,10;]"..
|
|
"background[-0.15,-0.25;9.40,10.75;mymagic_forge_bg.png]"..
|
|
"listcolors[#191515;#464545;#000000]"..
|
|
--Blade
|
|
"label[1,1.5;Blade]"..
|
|
"list[current_name;blade1;2,0.5;1,1;]"..
|
|
"list[current_name;blade2;2,1.5;1,1;]"..
|
|
"list[current_name;blade3;2,2.5;1,1;]"..
|
|
"button[2,3.5;1,1;bbutton;Make]"..
|
|
"list[current_name;blade;2,4.5;1,1;]"..
|
|
--Handle
|
|
"label[4.5,1.5;Handle]"..
|
|
"list[current_name;handle1;6,0.5;1,1;]"..
|
|
"list[current_name;handle2;6,1.5;1,1;]"..
|
|
"list[current_name;handle3;6,2.5;1,1;]"..
|
|
"button[6,3.5;1,1;hbutton;Make]"..
|
|
"list[current_name;handle;3,4.5;1,1;]"..
|
|
--Sword
|
|
"button[4,4.5;2,1;sbutton;Make]"..
|
|
"list[current_name;sword;6,4.5;1,1;]"..
|
|
--Show Inventory
|
|
"list[current_player;main;0.5,6;8,4;]")
|
|
meta:set_string("infotext", "Sword Forge")
|
|
local inv = meta:get_inventory()
|
|
inv:set_size("blade", 1)
|
|
inv:set_size("blade1", 1)
|
|
inv:set_size("blade2", 1)
|
|
inv:set_size("blade3", 1)
|
|
inv:set_size("handle", 1)
|
|
inv:set_size("handle1", 1)
|
|
inv:set_size("handle2", 1)
|
|
inv:set_size("handle3", 1)
|
|
inv:set_size("sword", 1)
|
|
end,
|
|
|
|
on_receive_fields = function(pos, formname, fields, sender)
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
|
|
if fields["bbutton"]then
|
|
make_blade = false
|
|
|
|
if inv:is_empty("blade1") or
|
|
inv:is_empty("blade2") or
|
|
inv:is_empty("blade3") then
|
|
return
|
|
end
|
|
|
|
local b1 = inv:get_stack("blade1", 1)
|
|
local b2 = inv:get_stack("blade2", 1)
|
|
local b3 = inv:get_stack("blade3", 1)
|
|
|
|
|
|
local blade_list = {
|
|
{"default:wood", "mymagic_tools:blade_wood"},
|
|
{"default:stone", "mymagic_tools:blade_stone"},
|
|
{"default:steel_ingot", "mymagic_tools:blade_steel"},
|
|
{"default:bronze_ingot", "mymagic_tools:blade_bronze"},
|
|
{"default:mese_crystal", "mymagic_tools:blade_mese"},
|
|
{"default:diamond", "mymagic_tools:blade_diamond"},
|
|
}
|
|
for i in ipairs (blade_list) do
|
|
local mat = blade_list[i][1]
|
|
local bld = blade_list[i][2]
|
|
|
|
if b1:get_name() == mat and
|
|
b2:get_name() == mat and
|
|
b3:get_name() == mat then
|
|
blade = bld
|
|
make_blade = true
|
|
end
|
|
end
|
|
if make_blade == true then
|
|
inv:add_item("blade",blade)
|
|
|
|
b1:take_item()
|
|
inv:set_stack("blade1",1,b1)
|
|
|
|
b2:take_item()
|
|
inv:set_stack("blade2",1,b2)
|
|
|
|
b3:take_item()
|
|
inv:set_stack("blade3",1,b3)
|
|
end
|
|
|
|
elseif fields["hbutton"]then
|
|
make_handle = false
|
|
|
|
if inv:is_empty("handle1") or
|
|
inv:is_empty("handle2") or
|
|
inv:is_empty("handle3") then
|
|
return
|
|
end
|
|
|
|
local h1 = inv:get_stack("handle1", 1)
|
|
local h2 = inv:get_stack("handle2", 1)
|
|
local h3 = inv:get_stack("handle3", 1)
|
|
|
|
|
|
local handle_list = {
|
|
{"default:stick", "mymagic_tools:handle_wood"},
|
|
{"default:steel_ingot", "mymagic_tools:handle_steel"},
|
|
}
|
|
for i in ipairs (handle_list) do
|
|
local mat = handle_list[i][1]
|
|
local bld = handle_list[i][2]
|
|
|
|
if h1:get_name() == mat and
|
|
h2:get_name() == mat and
|
|
h3:get_name() == mat then
|
|
handle = bld
|
|
make_handle = true
|
|
end
|
|
end
|
|
if make_handle == true then
|
|
inv:add_item("handle",handle)
|
|
|
|
h1:take_item()
|
|
inv:set_stack("handle1",1,h1)
|
|
|
|
h2:take_item()
|
|
inv:set_stack("handle2",1,h2)
|
|
|
|
h3:take_item()
|
|
inv:set_stack("handle3",1,h3)
|
|
end
|
|
|
|
elseif fields["sbutton"]then
|
|
make_sword = false
|
|
|
|
if inv:is_empty("blade") or
|
|
inv:is_empty("handle") then
|
|
return
|
|
end
|
|
|
|
local s1 = inv:get_stack("blade", 1)
|
|
local s2 = inv:get_stack("handle", 1)
|
|
|
|
local maters = {"wood","stone","steel","bronze","mese","diamond"}
|
|
|
|
for i=1,#maters do
|
|
local mater = maters[i]
|
|
|
|
if s1:get_name() == "mymagic_tools:blade_"..mater and
|
|
s2:get_name() == "mymagic_tools:handle_wood" then
|
|
sword = "default:sword_"..mater
|
|
make_sword = true
|
|
end
|
|
end
|
|
if make_sword == true then
|
|
inv:add_item("sword",sword)
|
|
|
|
s1:take_item()
|
|
inv:set_stack("blade",1,s1)
|
|
|
|
s2:take_item()
|
|
inv:set_stack("handle",1,s2)
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
minetest.register_craft({
|
|
output = "mymagic_tools:forge_sword",
|
|
recipe = {
|
|
{"default:steel_ingot","default:coalblock","default:steel_ingot"},
|
|
{"default:steel_ingot","default:brick","default:steel_ingot"},
|
|
{"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
|
|
},
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|