diff options
author | cheapie <no-email-for-you@example.com> | 2024-09-14 20:32:07 -0500 |
---|---|---|
committer | cheapie <no-email-for-you@example.com> | 2024-09-14 20:32:07 -0500 |
commit | c92e18daaea4ab7e9358cb1f63695bee2a05a4c0 (patch) | |
tree | 11d7b72d09343c1298b0b6156d80489f2fd2c3f8 /init.lua | |
parent | d04056b1f89f5506decbc90e2a044ec136ef6944 (diff) | |
download | rgblightstone-c92e18daaea4ab7e9358cb1f63695bee2a05a4c0.tar rgblightstone-c92e18daaea4ab7e9358cb1f63695bee2a05a4c0.tar.gz rgblightstone-c92e18daaea4ab7e9358cb1f63695bee2a05a4c0.tar.bz2 rgblightstone-c92e18daaea4ab7e9358cb1f63695bee2a05a4c0.tar.xz rgblightstone-c92e18daaea4ab7e9358cb1f63695bee2a05a4c0.zip |
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 80 |
1 files changed, 44 insertions, 36 deletions
@@ -1,13 +1,5 @@ rgblightstone = {} -if type(minetest.colorize) == "function" then - rgblightstone.colorize = minetest.colorize -else - rgblightstone.colorize = function(color,text) - return text - end -end - function rgblightstone.autofill(pos,player) local name = player:get_player_name() if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, { protection_bypass = true }) then @@ -29,10 +21,19 @@ function rgblightstone.autofill(pos,player) meta:set_string("channel",channel) meta:set_string("addrx",addrx) meta:set_string("addry",addry) - minetest.chat_send_player(player:get_player_name(),rgblightstone.colorize("#55FF55","Success: ").."Auto-filled with channel "..rgblightstone.colorize("#00FFFF",channel)..", X address "..rgblightstone.colorize("#00FFFF",addrx)..", and Y address "..rgblightstone.colorize("#00FFFF",addry)..".") + local message = minetest.colorize("#55FF55","Success: ").. + "Auto-filled with channel ".. + minetest.colorize("#00FFFF",channel).. + ", X address ".. + minetest.colorize("#00FFFF",addrx).. + ", and Y address ".. + minetest.colorize("#00FFFF",addry).. + "." + minetest.chat_send_player(player:get_player_name(),message) meta:set_string("infotext","") else - minetest.chat_send_player(player:get_player_name(),rgblightstone.colorize("#FF0000","ERROR: ").."Node above is not RGB Lightstone or is not configured correctly!") + local message = minetest.colorize("#FF0000","ERROR: ").."Node above is not RGB Lightstone or is not configured correctly!" + minetest.chat_send_player(player:get_player_name(),message) end end end @@ -68,22 +69,16 @@ function rgblightstone.handle_digilines(pos,node,channel,msg,truecolor) return end --Make sure there aren't any invalid chars - local acceptable_chars = {["0"]=true,["1"]=true,["2"]=true,["3"]=true,["4"]=true,["5"]=true,["6"]=true,["7"]=true,["8"]=true,["9"]=true,["A"]=true,["B"]=true,["C"]=true,["D"]=true,["E"]=true,["F"]=true} - for i = 1,6,1 do - if not acceptable_chars[string.sub(msg,i,i)] then - return - else - end - end + if not tonumber(msg,16) then return end --Should be a valid hex color by this point - + meta:set_string("color",msg) - + --Split into three colors local r = tonumber(string.sub(msg,1,2),16) local g = tonumber(string.sub(msg,3,4),16) local b = tonumber(string.sub(msg,5,6),16) - + --Convert RGB to HSV... or at least V, for the light local v = math.max(r,g,b) v = math.floor(v/255*14) @@ -98,7 +93,7 @@ function rgblightstone.handle_digilines(pos,node,channel,msg,truecolor) r = math.floor(r/32) g = math.floor(g/32) b = math.floor(b/64) --Blue has one fewer bit - + local paletteidx = 32*g+4*r+b --Set the color @@ -108,7 +103,7 @@ function rgblightstone.handle_digilines(pos,node,channel,msg,truecolor) end end -function rgblightstone.handle_fields(pos,formname,fields,sender) +function rgblightstone.handle_fields(pos,_,fields,sender) local name = sender:get_player_name() if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, { protection_bypass = true }) then minetest.record_protection_violation(pos, name) @@ -140,15 +135,16 @@ function rgblightstone.update_entity(pos) end minetest.register_entity("rgblightstone:entity",{ - hp_max = 1, - physical = false, - collisionbox = {0,0,0,0,0,0}, - visual_size = {x=1,y=1}, - visual = "cube", - static_save = false, + initial_properties = { + physical = false, + collisionbox = {0,0,0,0,0,0}, + visual_size = {x=1,y=1}, + visual = "cube", + static_save = false, + }, }) -for i=0,14,1 do +for i=0,14,1 do minetest.register_node("rgblightstone:rgblightstone_"..i, { tiles = {"rgblightstone_white.png"}, palette = "rgblightstone_palette.png", @@ -163,15 +159,21 @@ for i=0,14,1 do end, on_construct = function(pos) local meta = minetest.get_meta(pos) - meta:set_string("formspec", "size[8,5;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;2,2;addrx;X Address;${addrx}]field[5,2;2,2;addry;Y Address;${addry}]button_exit[2.25,3;3,1;submit;Save]button_exit[2.25,4;3,1;autofill;Auto-Fill From Node Above]label[3,2;Leave address blank\nfor individual mode]") + local fs = "size[8,5]".. + "field[1,1;6,2;channel;Channel;${channel}]".. + "field[1,2;2,2;addrx;X Address;${addrx}]".. + "field[5,2;2,2;addry;Y Address;${addry}]".. + "button_exit[2.25,3;3,1;submit;Save]".. + "button_exit[2.25,4;3,1;autofill;Auto-Fill From Node Above]".. + "label[3,2;Leave address blank\nfor individual mode]" + meta:set_string("formspec",fs) meta:set_string("infotext","Not configured! Right-click to set up manually, or punch to auto-fill from the node above.") meta:set_string("color","000000") end, - on_punch = function(pos,node,player,pointed_thing) + on_punch = function(pos,_,player) rgblightstone.autofill(pos,player) end, on_receive_fields = rgblightstone.handle_fields, - light_source = 0, digiline = { wire = { rules = { @@ -191,7 +193,7 @@ for i=0,14,1 do } } }) - + minetest.register_node("rgblightstone:rgblightstone_truecolor_"..i, { tiles = {"rgblightstone_white.png^[colorize:#000000:255"}, groups = i == 0 and {cracky = 2,} or {cracky = 2,not_in_creative_inventory = 1,}, @@ -204,12 +206,19 @@ for i=0,14,1 do end, on_construct = function(pos) local meta = minetest.get_meta(pos) - meta:set_string("formspec", "size[8,5;]field[1,1;6,2;channel;Channel;${channel}]field[1,2;2,2;addrx;X Address;${addrx}]field[5,2;2,2;addry;Y Address;${addry}]button_exit[2.25,3;3,1;submit;Save]button_exit[2.25,4;3,1;autofill;Auto-Fill From Node Above]label[3,2;Leave address blank\nfor individual mode]") + local fs = "size[8,5]".. + "field[1,1;6,2;channel;Channel;${channel}]".. + "field[1,2;2,2;addrx;X Address;${addrx}]".. + "field[5,2;2,2;addry;Y Address;${addry}]".. + "button_exit[2.25,3;3,1;submit;Save]".. + "button_exit[2.25,4;3,1;autofill;Auto-Fill From Node Above]".. + "label[3,2;Leave address blank\nfor individual mode]" + meta:set_string("formspec",fs) meta:set_string("infotext","Not configured! Right-click to set up manually, or punch to auto-fill from the node above.") meta:set_string("color","000000") rgblightstone.update_entity(pos) end, - on_punch = function(pos,node,player,pointed_thing) + on_punch = function(pos,_,player) rgblightstone.autofill(pos,player) end, after_destruct = function(pos) @@ -235,7 +244,6 @@ for i=0,14,1 do fixed = {{-0.5,-0.5,-0.5,0.5,0.5,0.5}} }, on_receive_fields = rgblightstone.handle_fields, - light_source = 0, digiline = { wire = { rules = { |