From 3e93b939f3bae14fb7a8c3f94e8db5d8fc0b2c24 Mon Sep 17 00:00:00 2001 From: tour <129965577+a-tour-ist@users.noreply.github.com> Date: Thu, 19 Dec 2024 19:47:36 +0100 Subject: [PATCH] Validate user inputs (#39) --- moremesecons_adjustable_player_detector/init.lua | 8 +++++--- moremesecons_entity_detector/init.lua | 10 +++++----- settingtypes.txt | 4 ++++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/moremesecons_adjustable_player_detector/init.lua b/moremesecons_adjustable_player_detector/init.lua index 672f87e..3753f0f 100644 --- a/moremesecons_adjustable_player_detector/init.lua +++ b/moremesecons_adjustable_player_detector/init.lua @@ -2,6 +2,8 @@ -- Detects players in a certain radius -- The radius can be changes by right-click (by default 6) +local MAX_RADIUS = moremesecons.setting("adjustable_player_detector", "max_radius", 16, 0) + local function make_formspec(meta) meta:set_string("formspec", "size[9,5]" .. "field[0.3, 0;9,2;scanname;Comma-separated list of the names of players to scan for (empty for any):;${scanname}]".. @@ -36,7 +38,7 @@ local object_detector_scan = function (pos) local scanname = meta:get_string("scanname") local scan_all = scanname == "" local scan_names = scanname:split(',') - local radius = meta:get_int("radius") + local radius = math.min(meta:get_int("radius"), MAX_RADIUS) if radius <= 0 then radius = 6 end @@ -76,11 +78,11 @@ local object_detector_digiline = { make_formspec(meta) end end - if msg.scanname then + if type(msg.scanname) == "string" then meta:set_string("scanname", msg.scanname) make_formspec(meta) end - if msg.command and msg.command == "get" then + if msg.command == "get" then local found, name = object_detector_scan(pos) if not found then name = "" diff --git a/moremesecons_entity_detector/init.lua b/moremesecons_entity_detector/init.lua index 165e399..57783f9 100644 --- a/moremesecons_entity_detector/init.lua +++ b/moremesecons_entity_detector/init.lua @@ -2,6 +2,8 @@ -- Detects entitys in a certain radius -- The radius can be changes by right-click (by default 6) +local MAX_RADIUS = moremesecons.setting("entity_detector", "max_radius", 16, 0) + local function make_formspec(meta) meta:set_string("formspec", "size[9,5]" .. "field[0.3, 0;9,2;scanname;Comma-separated list of the names (itemstring) of entities to scan for (empty for any):;${scanname}]".. @@ -26,8 +28,7 @@ local function object_detector_on_receive_fields(pos, _, fields, player) meta:set_string("digiline_channel", fields.digiline_channel) local r = tonumber(fields.radius) if r then - local max_radius = moremesecons.setting("entity_detector", "max_radius", 16, 0) - meta:set_int("radius", math.min(r, max_radius)) + meta:set_int("radius", math.min(r, MAX_RADIUS)) end end @@ -37,8 +38,7 @@ local object_detector_scan = function (pos) local scanname = meta:get_string("scanname") local scan_all = scanname == "" local scan_names = scanname:split(',') - local max_radius = moremesecons.setting("entity_detector", "max_radius", 16, 0) - local radius = math.min(tonumber(meta:get("radius")) or 6, max_radius) + local radius = math.min(tonumber(meta:get("radius")) or 6, MAX_RADIUS) for _,obj in pairs(minetest.get_objects_inside_radius(pos, radius)) do local luaentity = obj:get_luaentity() if luaentity then @@ -62,7 +62,7 @@ local object_detector_digiline = { action = function (pos, node, channel, msg) local meta = minetest.get_meta(pos) local active_channel = meta:get_string("digiline_channel") - if channel ~= active_channel then + if channel ~= active_channel or type(msg) ~= "string" then return end meta:set_string("scanname", msg) diff --git a/settingtypes.txt b/settingtypes.txt index c54c8c2..ee7379f 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -3,6 +3,10 @@ # Minimal interval authorized. Any lower will be set to it. moremesecons_adjustable_blinky_plant.min_interval (Minimum Interval) float 0.5 +[Adjustable Player Detector] + +moremesecons_adjustable_player_detector.max_radius (Maximum adjustable player detector radius) float 16 0 + [Craftable Commandblock] # Space-separated list of authorized commands