dragonfire-client-dragonfire/builtin/client/util.lua

81 lines
2.1 KiB
Lua
Raw Permalink Normal View History

2020-07-06 06:50:55 -07:00
function core.parse_pos(param)
local p = {}
local playerpos = core.localplayer:get_pos()
2020-07-06 06:50:55 -07:00
p.x, p.y, p.z = string.match(param, "^([~|%d.-]+)[, ] *([~|%d.-]+)[, ] *([~|%d.-]+)$")
for k, v in pairs(p) do
if p[k] == "~" then
p[k] = playerpos[k]
2020-07-06 06:50:55 -07:00
else
p[k] = tonumber(v)
end
end
if p.x and p.y and p.z then
return true, vector.round(p)
2020-07-06 06:50:55 -07:00
end
return false, "Invalid position (" .. param .. ")"
2020-12-12 04:58:46 -08:00
end
2020-07-18 04:20:08 -07:00
function core.parse_relative_pos(param)
local success, pos = core.parse_pos(param:gsub("~", "0"))
2020-07-18 04:20:08 -07:00
if success then pos = vector.round(vector.add(core.localplayer:get_pos(), pos)) end
return success, pos
2020-12-12 04:58:46 -08:00
end
function core.find_item(item, mini, maxi)
for index, stack in ipairs(core.get_inventory("current_player").main) do
if (not mini or index >= mini) and (not maxi or index <= maxi) and stack:get_name() == item then
return index
end
end
end
function core.switch_to_item(item)
local i = core.find_item(item)
if i then
core.localplayer:set_wield_index(i)
return true
else
return false
end
end
function core.get_pointed_thing()
local pos = core.camera:get_pos()
2020-12-01 01:59:02 -08:00
local pos2 = vector.add(pos, vector.multiply(core.camera:get_look_dir(), 7))
2020-11-02 02:57:16 -08:00
local player = core.localplayer
if not player then return end
local item = player:get_wielded_item()
if not item then return end
local def = core.get_item_def(item:get_name())
local ray = core.raycast(pos, pos2, true, core.settings:get_bool("point_liquids") or def and def.liquids_pointable)
return ray and ray:next()
2020-11-28 11:13:20 -08:00
end
function core.close_formspec(formname)
return core.show_formspec(formname, "")
end
2021-01-07 07:04:06 -08:00
function core.get_nearby_objects(radius)
return core.get_objects_inside_radius(core.localplayer:get_pos(), radius)
end
-- HTTP callback interface
function core.http_add_fetch(httpenv)
httpenv.fetch = function(req, callback)
local handle = httpenv.fetch_async(req)
local function update_http_status()
local res = httpenv.fetch_async_get(handle)
if res.completed then
callback(res)
else
core.after(0, update_http_status)
end
end
core.after(0, update_http_status)
end
return httpenv
end