mymagic_mp/mymagic_tools/forge_sword.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"},
},
})