From 3723870c1171259ad4c7f5a8a9a134b3afbd59a3 Mon Sep 17 00:00:00 2001 From: cora Date: Wed, 27 Jul 2022 11:35:59 +0200 Subject: [PATCH] Single itemstring and color palette for beam --- mods/ITEMS/mcl_beacons/init.lua | 111 +++++++----------- .../textures/mcl_beacons_palette.png | Bin 0 -> 196 bytes 2 files changed, 42 insertions(+), 69 deletions(-) create mode 100644 mods/ITEMS/mcl_beacons/textures/mcl_beacons_palette.png diff --git a/mods/ITEMS/mcl_beacons/init.lua b/mods/ITEMS/mcl_beacons/init.lua index 035b25b2d..06e1856f7 100644 --- a/mods/ITEMS/mcl_beacons/init.lua +++ b/mods/ITEMS/mcl_beacons/init.lua @@ -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 diff --git a/mods/ITEMS/mcl_beacons/textures/mcl_beacons_palette.png b/mods/ITEMS/mcl_beacons/textures/mcl_beacons_palette.png new file mode 100644 index 0000000000000000000000000000000000000000..7089e32e41b6220f56694ba4619de4a9d99eb81e GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`-JULvAr`0K9yH`*bYy6|m@m|6 z%OHM%Rok)O_LYcX4ix!2QQlqNs#)v7>@1+O7(8A5T-G@yGywo3YDRYe literal 0 HcmV?d00001