Single itemstring and color palette for beam

This commit is contained in:
cora 2022-07-27 11:35:59 +02:00
parent 8e95ba85a0
commit 3723870c11
2 changed files with 42 additions and 69 deletions

View File

@ -13,68 +13,43 @@ Valid strings:
strenght
regeneration
]]--
local colors = {
"white",
"silver",
"gray",
"black",
"brown",
"red",
"orange",
"yellow",
"lime",
"green",
"cyan",
"light_blue",
"blue",
"magenta",
"purple",
"pink",
} -- the order of this array determines the index of the palette - do not change it
local color_list = {"cdf4e9","f9fcfb","7c5e3d","1826c9","16f4f4","f483fc","9712bc","ea1212","adadad","535454","19e52a","549159","ef8813","ebf704","000000","e502d6","e8e3e3"}
local function get_beacon_beam(glass_nodename)
if string.match(glass_nodename, "cyan") then
return "mcl_beacons:beacon_beam_cdf4e9"
elseif string.match(glass_nodename,"white") then
return "mcl_beacons:beacon_beam_f9fcfb"
elseif string.match(glass_nodename,"brown") then
return "mcl_beacons:beacon_beam_7c5e3d"
elseif string.match(glass_nodename,"blue") and not string.match(glass_nodename, "light") then
return "mcl_beacons:beacon_beam_1826c9"
elseif string.match(glass_nodename,"light_blue") then
return "mcl_beacons:beacon_beam_16f4f4"
elseif string.match(glass_nodename,"pink") then
return "mcl_beacons:beacon_beam_f483fc"
elseif string.match(glass_nodename, "purple") then
return "mcl_beacons:beacon_beam_9712bc"
elseif string.match(glass_nodename, "red") then
return "mcl_beacons:beacon_beam_ea1212"
elseif string.match(glass_nodename, "silver") then
return "mcl_beacons:beacon_beam_adadad"
elseif string.match(glass_nodename, "gray") then
return "mcl_beacons:beacon_beam_535454"
elseif string.match(glass_nodename, "lime") then
return "mcl_beacons:beacon_beam_19e52a"
elseif string.match(glass_nodename, "green") then
return "mcl_beacons:beacon_beam_549159"
elseif string.match(glass_nodename, "orange") then
return "mcl_beacons:beacon_beam_ef8813"
elseif string.match(glass_nodename, "yellow") then
return "mcl_beacons:beacon_beam_ebf704"
elseif string.match(glass_nodename, "black") then
return "mcl_beacons:beacon_beam_000000"
elseif string.match(glass_nodename, "magenta") then
return "mcl_beacons:beacon_beam_e502d6"
else
return "mcl_beacons:beacon_beam_e8e3e3"
end
end
for _, color in ipairs(color_list) do
minetest.register_node("mcl_beacons:beacon_beam_"..color, {
tiles = {"^[colorize:#"..color},
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.1250, -0.5000, -0.1250, 0.1250, 0.5000, 0.1250}
}
},
light_source = 15,
walkable = false,
groups = {not_in_creative_inventory=1},
_mcl_blast_resistance = 1200,
})
mesecon.register_mvps_stopper("mcl_beacons:beacon_beam_"..color)
end
minetest.register_node("mcl_beacons:beacon_beam",{
tiles = {"^[colorize:white"},
drawtype = "nodebox",
paramtype2 = "color",
palette = "mcl_beacons_palette.png",
node_box = {
type = "fixed",
fixed = {
{-0.1250, -0.5000, -0.1250, 0.1250, 0.5000, 0.1250}
}
},
light_source = 15,
walkable = false,
pointable = false,
groups = {not_in_creative_inventory=1},
_mcl_blast_resistance = 1200,
})
mesecon.register_mvps_stopper("mcl_beacons:beacon_beam")
local formspec_string=
"size[11,14]"..
@ -114,8 +89,7 @@ local function remove_beacon_beam(pos)
minetest.get_voxel_manip():read_from_map({x=pos.x,y=y,z=pos.z}, {x=pos.x,y=y,z=pos.z})
node = minetest.get_node({x=pos.x,y=y,z=pos.z})
end
if string.match(node.name,"mcl_beacons:beacon_beam_") then
if node.name == "mcl_beacons:beacon_beam" then
minetest.remove_node({x=pos.x,y=y,z=pos.z})
end
end
@ -169,7 +143,7 @@ local function globalstep_function(pos,player)
for y=pos.y+1, pos.y+301 do
local nodename = minetest.get_node({x=pos.x,y=y, z = pos.z}).name
if nodename ~= "mcl_core:bedrock" and nodename ~= "air" and nodename ~= "ignore" and nodename ~= "mcl_core:void" then --ignore means not loaded, let's just assume that's air
if not string.match(nodename,"mcl_beacons:beacon_beam_") then
if nodename ~= "mcl_beacons:beacon_beam" then
if minetest.get_item_group(nodename,"glass") == 0 then
obstructed = true
remove_beacon_beam(pos)
@ -276,24 +250,23 @@ minetest.register_node("mcl_beacons:beacon", {
input:take_item()
inv:set_stack("input",1,input)
local beam_itemstring = "mcl_beacons:beacon_beam_e8e3e3"
remove_beacon_beam(pos)
local p2 = 0
for y = pos.y +1, pos.y + 401 do
local node = minetest.get_node({x=pos.x,y=y,z=pos.z})
if node.name == ignore then
minetest.get_voxel_manip():read_from_map({x=pos.x,y=y,z=pos.z}, {x=pos.x,y=y,z=pos.z})
node = minetest.get_node({x=pos.x,y=y,z=pos.z})
end
if y == pos.y+1 then
if minetest.get_item_group(node.name, "glass") ~= 0 then
beam_itemstring = get_beacon_beam(node.name)
local c = node.name:split(":")[2]:gsub("glass_","")
p2 = table.indexof(colors,c) - 1
end
end
if node.name == "air" then
minetest.set_node({x=pos.x,y=y,z=pos.z},{name=beam_itemstring})
minetest.set_node({x=pos.x,y=y,z=pos.z},{name="mcl_beacons:beacon_beam",param2=p2})
end
end
globalstep_function(pos,sender)--call it once outside the globalstep so the player gets the effect right after selecting it

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B