forked from Mirrorlandia_minetest/minetest
Simplify deleteblocks chat command argument parsing
Add optional core.pos_to_string decimal place rounding Move core.string_to_pos to builtin/common/misc_helpers.lua for consistency
This commit is contained in:
parent
9736548720
commit
5aeeb219e3
@ -498,10 +498,47 @@ function core.explode_scrollbar_event(evt)
|
|||||||
end
|
end
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
function core.pos_to_string(pos)
|
function core.pos_to_string(pos, decimal_places)
|
||||||
return "(" .. pos.x .. "," .. pos.y .. "," .. pos.z .. ")"
|
local x = pos.x
|
||||||
|
local y = pos.y
|
||||||
|
local z = pos.z
|
||||||
|
if decimal_places ~= nil then
|
||||||
|
x = string.format("%." .. decimal_places .. "f", x)
|
||||||
|
y = string.format("%." .. decimal_places .. "f", y)
|
||||||
|
z = string.format("%." .. decimal_places .. "f", z)
|
||||||
|
end
|
||||||
|
return "(" .. x .. "," .. y .. "," .. z .. ")"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
function core.string_to_pos(value)
|
||||||
|
if value == nil then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local p = {}
|
||||||
|
p.x, p.y, p.z = string.match(value, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
|
||||||
|
if p.x and p.y and p.z then
|
||||||
|
p.x = tonumber(p.x)
|
||||||
|
p.y = tonumber(p.y)
|
||||||
|
p.z = tonumber(p.z)
|
||||||
|
return p
|
||||||
|
end
|
||||||
|
local p = {}
|
||||||
|
p.x, p.y, p.z = string.match(value, "^%( *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) *%)$")
|
||||||
|
if p.x and p.y and p.z then
|
||||||
|
p.x = tonumber(p.x)
|
||||||
|
p.y = tonumber(p.y)
|
||||||
|
p.z = tonumber(p.z)
|
||||||
|
return p
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
assert(core.string_to_pos("10.0, 5, -2").x == 10)
|
||||||
|
assert(core.string_to_pos("( 10.0, 5, -2)").z == -2)
|
||||||
|
assert(core.string_to_pos("asd, 5, -2)") == nil)
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
function table.copy(t, seen)
|
function table.copy(t, seen)
|
||||||
local n = {}
|
local n = {}
|
||||||
|
@ -419,24 +419,18 @@ core.register_chatcommand("deleteblocks", {
|
|||||||
p1 = player:getpos()
|
p1 = player:getpos()
|
||||||
p2 = p1
|
p2 = p1
|
||||||
else
|
else
|
||||||
p1.x, p1.y, p1.z, p2.x, p2.y, p2.z = string.match(param,
|
local pos1, pos2 = unpack(param:split(") ("))
|
||||||
"^%(([%d.-]+), *([%d.-]+), *([%d.-]+)%) *%(([%d.-]+), *([%d.-]+), *([%d.-]+)%)$")
|
p1 = core.string_to_pos(pos1 .. ")")
|
||||||
p1.x = tonumber(p1.x)
|
p2 = core.string_to_pos("(" .. pos2)
|
||||||
p1.y = tonumber(p1.y)
|
|
||||||
p1.z = tonumber(p1.z)
|
|
||||||
p2.x = tonumber(p2.x)
|
|
||||||
p2.y = tonumber(p2.y)
|
|
||||||
p2.z = tonumber(p2.z)
|
|
||||||
|
|
||||||
if p1.x == nil or p1.y == nil or p1.z == nil or
|
if p1 == nil or p2 == nil then
|
||||||
p2.x == nil or p2.y == nil or p2.z == nil then
|
|
||||||
return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)"
|
return false, "Incorrect area format. Expected: (x1,y1,z1) (x2,y2,z2)"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if core.delete_area(p1, p2) then
|
if core.delete_area(p1, p2) then
|
||||||
return true, "Successfully cleared area ranging from " ..
|
return true, "Successfully cleared area ranging from " ..
|
||||||
core.pos_to_string(p1) .. " to " .. core.pos_to_string(p2)
|
core.pos_to_string(p1, 1) .. " to " .. core.pos_to_string(p2, 1)
|
||||||
else
|
else
|
||||||
return false, "Failed to clear one or more blocks in area"
|
return false, "Failed to clear one or more blocks in area"
|
||||||
end
|
end
|
||||||
|
@ -93,30 +93,6 @@ function core.get_node_group(name, group)
|
|||||||
return core.get_item_group(name, group)
|
return core.get_item_group(name, group)
|
||||||
end
|
end
|
||||||
|
|
||||||
function core.string_to_pos(value)
|
|
||||||
local p = {}
|
|
||||||
p.x, p.y, p.z = string.match(value, "^([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+)$")
|
|
||||||
if p.x and p.y and p.z then
|
|
||||||
p.x = tonumber(p.x)
|
|
||||||
p.y = tonumber(p.y)
|
|
||||||
p.z = tonumber(p.z)
|
|
||||||
return p
|
|
||||||
end
|
|
||||||
local p = {}
|
|
||||||
p.x, p.y, p.z = string.match(value, "^%( *([%d.-]+)[, ] *([%d.-]+)[, ] *([%d.-]+) *%)$")
|
|
||||||
if p.x and p.y and p.z then
|
|
||||||
p.x = tonumber(p.x)
|
|
||||||
p.y = tonumber(p.y)
|
|
||||||
p.z = tonumber(p.z)
|
|
||||||
return p
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
assert(core.string_to_pos("10.0, 5, -2").x == 10)
|
|
||||||
assert(core.string_to_pos("( 10.0, 5, -2)").z == -2)
|
|
||||||
assert(core.string_to_pos("asd, 5, -2)") == nil)
|
|
||||||
|
|
||||||
function core.setting_get_pos(name)
|
function core.setting_get_pos(name)
|
||||||
local value = core.setting_get(name)
|
local value = core.setting_get(name)
|
||||||
if not value then
|
if not value then
|
||||||
|
Loading…
Reference in New Issue
Block a user