mymagic_mp/mymagic/gem_blocks.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
})