257 lines
8.6 KiB
Lua
257 lines
8.6 KiB
Lua
local function parti(pos)
|
|
minetest.add_particlespawner(40, 1,
|
|
pos, pos,
|
|
{x=-5, y=-5, z=-5}, {x=5, y=5, z=5},
|
|
{x=-2, y=-2, z=-2}, {x=2, y=2, z=2},
|
|
0.2, 2,
|
|
0.2, 3,
|
|
false, "mymagic_magic_parti.png")
|
|
end
|
|
|
|
minetest.register_node("mymagic:gem_block",{
|
|
description = "Gem Block",
|
|
tiles = {"mymagic_gem_block_orange.png^[colorize:#000000:150"},
|
|
light_source = 10,
|
|
paramtype = "light",
|
|
groups = {cracky = 1},
|
|
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
|
--local meta = minetest.get_meta(pos)
|
|
|
|
minetest.show_formspec(placer:get_player_name(),"mymagic_fs",
|
|
"size[4,4;]"..
|
|
"image_button_exit[1,1;1,1;mymagic_crystal_orange.png;orange;]"..
|
|
"image_button_exit[1,2;1,1;mymagic_crystal_green.png;green;]"..
|
|
"image_button_exit[2,1;1,1;mymagic_crystal_blue.png;blue;]"..
|
|
"image_button_exit[2,2;1,1;mymagic_crystal_red.png;red;]")
|
|
|
|
minetest.register_on_player_receive_fields(function(player, mymagic_fs, fields)
|
|
if fields["orange"] or fields["green"] or fields["blue"] or fields["red"] then
|
|
if fields["orange"] then
|
|
minetest.remove_node(pos)
|
|
minetest.place_node(pos, {name = "mymagic:gem_block_orange"})
|
|
end
|
|
if fields["green"] then
|
|
minetest.remove_node(pos)
|
|
minetest.place_node(pos, {name = "mymagic:gem_block_green"})
|
|
end
|
|
if fields["blue"] then
|
|
minetest.remove_node(pos)
|
|
minetest.place_node(pos, {name = "mymagic:gem_block_blue"})
|
|
end
|
|
if fields["red"] then
|
|
minetest.remove_node(pos)
|
|
minetest.place_node(pos, {name = "mymagic:gem_block_red"})
|
|
end
|
|
end
|
|
end)
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("mymagic:gem_block_orange",{
|
|
description = "Orange Gem Block",
|
|
tiles = {"mymagic_gem_block_orange.png"},
|
|
light_source = 11,
|
|
paramtype2 = "facedir",
|
|
groups = {cracky = 1, not_in_creative_inventory = 1},
|
|
|
|
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
minetest.show_formspec(player:get_player_name(),"mymagic_orange_fs",
|
|
"size[4,5.5;]"..
|
|
"background[-0.5,-0.5;5,6.5;mymagic_gem_block_bg_orange.png]"..
|
|
"background[0.5,0.5;3,3;mymagic_gem_block_orange.png]"..
|
|
"listcolors[#cf7f00;#fb9c06;#000000]"..
|
|
"label[1,0;Insert Orange Crystal]"..
|
|
"list[current_name;orange_gem;1.5,1.5;1,1;]"..
|
|
"button_exit[1,3.5;2,1;orange;Activate]"..
|
|
"list[current_player;main;0,4.5;4,1;]")
|
|
local inv = meta:get_inventory()
|
|
inv:set_size("orange_gem", 1)
|
|
end,
|
|
on_receive_fields = function(pos, mymagic_orange_fs, fields, sender)
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
|
|
if fields["orange"] then
|
|
if inv:is_empty("orange_gem") then
|
|
return
|
|
end
|
|
local gem = inv:get_stack("orange_gem", 1)
|
|
|
|
if gem:get_name() == "mymagic:crystal_orange" then
|
|
local node = minetest.get_node(pos)
|
|
gem:take_item()
|
|
minetest.spawn_item({x=pos.x,y=pos.y+1,z=pos.z}, gem)
|
|
minetest.set_node(pos,{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z},{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y-2,z=pos.z},{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y-3,z=pos.z},{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y-4,z=pos.z},{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y-5,z=pos.z},{name="default:ladder",param2=2})
|
|
parti(pos)
|
|
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("mymagic:gem_block_green",{
|
|
description = "Green Gem Block",
|
|
tiles = {"mymagic_gem_block_green.png"},
|
|
light_source = 11,
|
|
paramtype2 = "facedir",
|
|
groups = {cracky = 1, not_in_creative_inventory = 1},
|
|
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
minetest.show_formspec(player:get_player_name(),"mymagic_green_fs",
|
|
"size[4,5.5;]"..
|
|
"background[-0.5,-0.5;5,6.5;mymagic_gem_block_bg_green.png]"..
|
|
"background[0.5,0.5;3,3;mymagic_gem_block_green.png]"..
|
|
"listcolors[#0d6601;#13a400;#000000]"..
|
|
"label[1,0;Insert Green Crystal]"..
|
|
"list[current_name;green_gem;1.5,1.5;1,1;]"..
|
|
"button_exit[1,3.5;2,1;green;Activate]"..
|
|
"list[current_player;main;0,4.5;4,1;]")
|
|
local inv = meta:get_inventory()
|
|
inv:set_size("green_gem", 1)
|
|
end,
|
|
on_receive_fields = function(pos, mymagic_green_fs, fields, sender)
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
|
|
if fields["green"] then
|
|
if inv:is_empty("green_gem") then
|
|
return
|
|
end
|
|
local gem = inv:get_stack("green_gem", 1)
|
|
|
|
if gem:get_name() == "mymagic:crystal_green" then
|
|
local node = minetest.get_node(pos)
|
|
gem:take_item()
|
|
minetest.spawn_item({x=pos.x,y=pos.y+1,z=pos.z}, gem)
|
|
minetest.set_node(pos,{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y+2,z=pos.z},{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y+3,z=pos.z},{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y+4,z=pos.z},{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y+5,z=pos.z},{name="default:ladder",param2=2})
|
|
minetest.set_node({x=pos.x,y=pos.y+6,z=pos.z},{name="default:ladder",param2=2})
|
|
parti(pos)
|
|
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
|
|
minetest.register_node("mymagic:gem_block_blue",{
|
|
description = "Blue Gem Block",
|
|
tiles = {"mymagic_gem_block_blue.png"},
|
|
light_source = 11,
|
|
paramtype2 = "facedir",
|
|
groups = {cracky = 1, not_in_creative_inventory = 1},
|
|
|
|
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
minetest.show_formspec(player:get_player_name(),"mymagic_orange_fs",
|
|
"size[4,5.5;]"..
|
|
"background[-0.5,-0.5;5,6.5;mymagic_gem_block_bg_blue.png]"..
|
|
"background[0.5,0.5;3,3;mymagic_gem_block_blue.png]"..
|
|
"listcolors[#030f4a;#030f7b;#000000]"..
|
|
"label[1,0;Insert Blue Crystal]"..
|
|
"list[current_name;blue_gem;1.5,1.5;1,1;]"..
|
|
"button_exit[1,3.5;2,1;blue;Activate]"..
|
|
"list[current_player;main;0,4.5;4,1;]")
|
|
local inv = meta:get_inventory()
|
|
inv:set_size("blue_gem", 1)
|
|
end,
|
|
on_receive_fields = function(pos, mymagic_orange_fs, fields, sender)
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
|
|
if fields["blue"] then
|
|
if inv:is_empty("blue_gem") then
|
|
return
|
|
end
|
|
local gem = inv:get_stack("blue_gem", 1)
|
|
|
|
if gem:get_name() == "mymagic:crystal_blue" then
|
|
local node = minetest.get_node(pos)
|
|
gem:take_item()
|
|
minetest.spawn_item({x=pos.x,y=pos.y+1,z=pos.z}, gem)
|
|
minetest.set_node(pos,{name="air",param2=node.param2})
|
|
minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z},{name="mymagic:hole1",param2=node.param2})
|
|
parti(pos)
|
|
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_node("mymagic:gem_block_red",{
|
|
description = "Red Gem Block",
|
|
tiles = {"mymagic_gem_block_red.png"},
|
|
light_source = 11,
|
|
paramtype2 = "facedir",
|
|
groups = {cracky = 1, not_in_creative_inventory = 1},
|
|
|
|
|
|
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
minetest.show_formspec(player:get_player_name(),"mymagic_red_fs",
|
|
"size[4,5.5;]"..
|
|
"background[-0.5,-0.5;5,6.5;mymagic_gem_block_bg_red.png]"..
|
|
"background[0.5,0.5;3,3;mymagic_gem_block_red.png]"..
|
|
"listcolors[#910000;#d50000;#000000]"..
|
|
"label[1,0;Insert Red Crystal]"..
|
|
"list[current_name;red_gem;1.5,1.5;1,1;]"..
|
|
"button_exit[1,3.5;2,1;red;Activate]"..
|
|
"list[current_player;main;0,4.5;4,1;]")
|
|
local inv = meta:get_inventory()
|
|
inv:set_size("red_gem", 1)
|
|
end,
|
|
on_receive_fields = function(pos, mymagic_red_fs, fields, sender)
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
|
|
if fields["red"] then
|
|
if inv:is_empty("red_gem") then
|
|
return
|
|
end
|
|
local gem = inv:get_stack("red_gem", 1)
|
|
|
|
if gem:get_name() == "mymagic:crystal_red" then
|
|
local node = minetest.get_node(pos)
|
|
gem:take_item()
|
|
minetest.spawn_item({x=pos.x,y=pos.y+1,z=pos.z}, gem)
|
|
minetest.set_node(pos,{name="air",param2=node.param2})
|
|
minetest.set_node({x=pos.x,y=pos.y-1,z=pos.z},{name="mymagic:hole2",param2=node.param2})
|
|
parti(pos)
|
|
|
|
end
|
|
end
|
|
end,
|
|
})
|
|
|
|
minetest.register_abm({
|
|
nodenames = {"mymagic:hole1","mymagic:hole2"},
|
|
interval = 0.5,
|
|
chance = 1,
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
local objs = minetest.get_objects_inside_radius(pos, 1)
|
|
for k, player in pairs(objs) do
|
|
if player:get_player_name() then
|
|
if node.name == "mymagic:hole1" then
|
|
player:setpos({x=pos.x,y=pos.y+7,z=pos.z})
|
|
elseif node.name == "mymagic:hole2" then
|
|
player:setpos({x=pos.x,y=pos.y-3,z=pos.z})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
})
|