214 lines
7.1 KiB
Lua
214 lines
7.1 KiB
Lua
local enchanted_tool = {}
|
|
local enchant = false
|
|
|
|
|
|
|
|
|
|
minetest.register_node("mymagic:enchantment_table",{
|
|
description = "Enchantment Table",
|
|
tiles = {
|
|
{name="mymagic_enchantment_table_top_ani.png", animation={type="vertical_frames",aspect_w=16, aspect_h=16, length=0.3}},
|
|
"mymagic_enchantment_table_bottom.png",
|
|
{name="mymagic_enchantment_table_side_ani.png", animation={type="vertical_frames",aspect_w=16, aspect_h=16, length=0.3}},
|
|
{name="mymagic_enchantment_table_side_ani.png", animation={type="vertical_frames",aspect_w=16, aspect_h=16, length=0.3}},
|
|
{name="mymagic_enchantment_table_side_ani.png", animation={type="vertical_frames",aspect_w=16, aspect_h=16, length=0.3}},
|
|
{name="mymagic_enchantment_table_side_ani.png", animation={type="vertical_frames",aspect_w=16, aspect_h=16, length=0.3}},
|
|
},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
light_source = 7,
|
|
groups = {choppy = 2},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.4375, -0.5, 0.25, -0.25, 0.125, 0.4375},
|
|
{0.25, -0.5, 0.25, 0.4375, 0.125, 0.4375},
|
|
{-0.4375, -0.5, -0.4375, -0.25, 0.125, -0.25},
|
|
{0.25, -0.5, -0.4375, 0.4375, 0.125, -0.25},
|
|
{-0.5, 0.125, -0.5, 0.5, 0.25, 0.5},
|
|
{-0.375, -0.0625, -0.375, 0.375, 0.125, 0.375},
|
|
{-0.4375, 0.25, 0.125, -0.375, 0.5, 0.1875},
|
|
{0.375, 0.25, 0.125, 0.4375, 0.5, 0.1875},
|
|
{-0.0625, 0.25, 0.375, 0, 0.5, 0.4375},
|
|
{-0.25, 0.25, -0.375, -0.1875, 0.5, -0.3125},
|
|
{0.1875, 0.25, -0.375, 0.25, 0.5, -0.3125},
|
|
}
|
|
},
|
|
|
|
after_place_node = function(pos, placer)
|
|
local meta = minetest.env:get_meta(pos);
|
|
meta:set_string("infotext", "Enchantment Table");
|
|
end,
|
|
can_dig = function(pos,player)
|
|
local meta = minetest.get_meta(pos);
|
|
local inv = meta:get_inventory()
|
|
if not inv:is_empty("tool") then
|
|
return false
|
|
elseif not inv:is_empty("orb1") then
|
|
return false
|
|
elseif not inv:is_empty("orb2") then
|
|
return false
|
|
elseif not inv:is_empty("orb3") then
|
|
return false
|
|
elseif not inv:is_empty("orb4") then
|
|
return false
|
|
elseif not inv:is_empty("output") then
|
|
return false
|
|
end
|
|
return true
|
|
end,
|
|
on_construct = function(pos)
|
|
local meta = minetest.env:get_meta(pos)
|
|
meta:set_string("formspec", "size[10,8;]"..
|
|
"background[-2,-2;13,12;mymagic_enchantment_table_bg.png]"..
|
|
"listcolors[#00000000;#00000000;#000000]"..
|
|
--top row
|
|
"label[1,0.5;Tool]"..
|
|
"label[3,0.5;Orbs]"..
|
|
"list[current_name;tool;1,1;1,1;]"..
|
|
"list[current_name;orb1;3,1;1,1;]"..
|
|
"list[current_name;orb2;4,1;1,1;]"..
|
|
--bottom row
|
|
"list[current_name;orb3;3,2;1,1;]"..
|
|
"list[current_name;orb4;4,2;1,1;]"..
|
|
--Output
|
|
"button[5.5,1;2,1;button;Enchant]"..
|
|
--"label[6,1.5;Enchanted Tool]"..
|
|
"list[current_name;output;6,2;1,1;]"..
|
|
--Show Inventory
|
|
"list[current_player;main;0.5,4;8,4;]")
|
|
meta:set_string("infotext", "Tool Upgrade")
|
|
local inv = meta:get_inventory()
|
|
inv:set_size("tool", 1)
|
|
inv:set_size("orb1", 1)
|
|
inv:set_size("orb2", 1)
|
|
inv:set_size("orb3", 1)
|
|
inv:set_size("orb4", 1)
|
|
inv:set_size("output", 1)
|
|
end,
|
|
|
|
on_receive_fields = function(pos, formname, fields, sender)
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
|
|
if fields["button"]
|
|
then
|
|
enchant = false
|
|
|
|
if inv:is_empty("tool") or
|
|
inv:is_empty("orb1") or
|
|
inv:is_empty("orb2") or
|
|
inv:is_empty("orb3") or
|
|
inv:is_empty("orb4") then
|
|
return
|
|
end
|
|
|
|
local tool = inv:get_stack("tool", 1)
|
|
local orba = inv:get_stack("orb1", 1)
|
|
local orbb = inv:get_stack("orb2", 1)
|
|
local orbc = inv:get_stack("orb3", 1)
|
|
local orbd = inv:get_stack("orb4", 1)
|
|
local t = {"pick","axe","shovel","sword"}
|
|
local c = {"orange","green","blue","red"}
|
|
local m = {"wood","stone","steel","bronze","mese","diamond"}
|
|
for i, tls in pairs(t) do
|
|
--for i, clr in pairs(c) do
|
|
for i, mtr in pairs(m) do
|
|
local tool_list = {
|
|
{"default:"..tls.."_"..mtr, "orange", "mymagic_tools:"..tls.."_enchanted_"..mtr.."_orange"},
|
|
{"mymagic_tools:"..tls.."_enchanted_"..mtr.."_orange", "green", "mymagic_tools:"..tls.."_enchanted_"..mtr.."_green"},
|
|
{"mymagic_tools:"..tls.."_enchanted_"..mtr.."_green", "blue", "mymagic_tools:"..tls.."_enchanted_"..mtr.."_blue"},
|
|
{"mymagic_tools:"..tls.."_enchanted_"..mtr.."_blue", "red", "mymagic_tools:"..tls.."_enchanted_"..mtr.."_red"},
|
|
|
|
{"mymagic_tools:knife_"..mtr, "orange", "mymagic_tools:knife_enchanted_"..mtr.."_orange"},
|
|
{"mymagic_tools:knife_enchanted_"..mtr.."_orange", "green", "mymagic_tools:knife_enchanted_"..mtr.."_green"},
|
|
{"mymagic_tools:knife_enchanted_"..mtr.."_green", "blue", "mymagic_tools:knife_enchanted_"..mtr.."_blue"},
|
|
{"mymagic_tools:knife_enchanted_"..mtr.."_blue", "red", "mymagic_tools:knife_enchanted_"..mtr.."_red"},
|
|
|
|
{"3d_armor:helmet_diamond", "orange", "mymagic_tools:diamond_helmet_orange"},
|
|
{"3d_armor:chestplate_diamond", "orange", "mymagic_tools:diamond_chestplate_orange"},
|
|
{"3d_armor:leggings_diamond", "orange", "mymagic_tools:diamond_leggings_orange"},
|
|
{"3d_armor:boots_diamond", "orange", "mymagic_tools:diamond_boots_orange"},
|
|
|
|
{"mymagic_tools:diamond_helmet_orange", "green", "mymagic_tools:diamond_helmet_green"},
|
|
{"mymagic_tools:diamond_chestplate_orange", "green", "mymagic_tools:diamond_chestplate_green"},
|
|
{"mymagic_tools:diamond_leggings_orange", "green", "mymagic_tools:diamond_leggings_green"},
|
|
{"mymagic_tools:diamond_boots_orange", "green", "mymagic_tools:diamond_boots_green"},
|
|
|
|
{"mymagic_tools:diamond_helmet_green", "blue", "mymagic_tools:diamond_helmet_blue"},
|
|
{"mymagic_tools:diamond_chestplate_green", "blue", "mymagic_tools:diamond_chestplate_blue"},
|
|
{"mymagic_tools:diamond_leggings_green", "blue", "mymagic_tools:diamond_leggings_blue"},
|
|
{"mymagic_tools:diamond_boots_green", "blue", "mymagic_tools:diamond_boots_blue"},
|
|
|
|
{"mymagic_tools:diamond_helmet_blue", "red", "mymagic_tools:diamond_helmet_red"},
|
|
{"mymagic_tools:diamond_chestplate_blue", "red", "mymagic_tools:diamond_chestplate_red"},
|
|
{"mymagic_tools:diamond_leggings_blue", "red", "mymagic_tools:diamond_leggings_red"},
|
|
{"mymagic_tools:diamond_boots_blue", "red", "mymagic_tools:diamond_boots_red"},
|
|
}
|
|
|
|
for i in ipairs (tool_list) do
|
|
local tin = tool_list[i][1]
|
|
local col = tool_list[i][2]
|
|
local tout = tool_list[i][3]
|
|
|
|
if tool:get_name() == tin and
|
|
orba:get_name() == "mymagic:orb_"..col and
|
|
orbb:get_name() == "mymagic:orb_"..col and
|
|
orbc:get_name() == "mymagic:orb_"..col and
|
|
orbd:get_name() == "mymagic:orb_"..col then
|
|
enchanted_tool = tout
|
|
enchant = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local tool_wear = tool:get_wear()
|
|
if enchant == true then
|
|
|
|
inv:add_item("output",enchanted_tool)
|
|
local out = inv:get_stack("output", 1)
|
|
out:set_wear(tool_wear)
|
|
inv:set_stack("output",1,out)
|
|
|
|
orba:take_item()
|
|
inv:set_stack("orb1",1,orba)
|
|
|
|
orbb:take_item()
|
|
inv:set_stack("orb2",1,orbb)
|
|
|
|
orbc:take_item()
|
|
inv:set_stack("orb3",1,orbc)
|
|
|
|
orbd:take_item()
|
|
inv:set_stack("orb4",1,orbd)
|
|
|
|
tool:take_item()
|
|
inv:set_stack("tool",1,tool)
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_craft({
|
|
output = "mymagic:enchantment_table",
|
|
recipe = {{"default:torch","mymagic:orb_red","default:torch"},
|
|
{"default:wood","default:wood","default:wood"},
|
|
{"default:stick","","default:stick"}}
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|