merge areas repository and resolve conflicts

master
Juraj Vajda 2017-12-10 17:38:15 -05:00
commit d08ad0c85f
7 changed files with 80 additions and 5 deletions

View File

@ -7,7 +7,7 @@ Configuration
If you wish to specify configuration options, such as whether players are
allowed to protect their own areas with the `protect` command (disabled by
default), you should check config.lua and set the appropriate settings in your
default), you should check settings.lua and set the appropriate settings in your
server's configuration file (probably `minetest.conf`).

16
api.lua
View File

@ -1,7 +1,23 @@
local hudHandlers = {}
--- Adds a function as a HUD handler, it will be able to add items to the Areas HUD element.
function areas:registerHudHandler(handler)
table.insert(hudHandlers, handler)
end
function areas:getExternalHudEntries(pos)
local areas = {}
for _, func in pairs(hudHandlers) do
func(pos, areas)
end
return areas
end
--- Returns a list of areas that include the provided position.
function areas:getAreasAtPos(pos)
local res = {}
if self.store then
local a = self.store:get_areas_for_pos(pos, false, true)
for store_id, store_area in pairs(a) do

45
api.md Normal file
View File

@ -0,0 +1,45 @@
Areas mod API
===
API list
---
* `areas.registerHudHandler(handler)` - Registers a handler to add items to the Areas HUD. See [HUD](#hud).
HUD
---
If you are making a protection mod or a similar mod that adds invisible regions
to the world, and you would like then to show up in the areas HUD element, you
can register a callback to show your areas.
HUD handler specification:
* `handler(pos, list)`
* `pos` - The position to check.
* `list` - The list of area HUD elements, this should be modified in-place.
The area list item is a table containing a list of tables with the following fields:
* `id` - An identifier for the area. This should be a unique string in the format `mod:id`.
* `name` - The name of the area.
* `owner` - The player name of the region owner, if any.
All of the fields are optional but at least one of them must be set.
### Example
local function areas_hud_handler(pos, areas)
local val = find_my_protection(pos)
if val then
table.insert(areas, {
id = "mod:"..val.id,
name = val.name,
owner = val.owner,
})
end
end
areas:registerHudHandler(areas_hud_handler)

13
hud.lua
View File

@ -7,12 +7,25 @@ minetest.register_globalstep(function(dtime)
local name = player:get_player_name()
local pos = vector.round(player:getpos())
local areaStrings = {}
for id, area in pairs(areas:getAreasAtPos(pos)) do
table.insert(areaStrings, ("%s [%u] (%s%s)")
:format(area.name, id, area.owner,
area.open and ":open" or ""))
end
local areaString = ""
-- for i, area in pairs(areas:getExternalHudEntries(pos)) do
-- local str = ""
-- if area.name then str = area.name .. " " end
-- if area.id then str = str.."["..area.id.."] " end
-- if area.owner then str = str.."("..area.owner..")" end
-- table.insert(areaStrings, str)
-- end
-- local areaString = "Areas:"
if #areaStrings > 0 then
areaString = areaString.."\n"..
table.concat(areaStrings, "\n")

View File

@ -32,7 +32,7 @@ if not minetest.registered_privileges[areas.config.self_protection_privilege] th
})
end
if minetest.setting_getbool("log_mod") then
if minetest.settings:get_bool("log_mod") then
local diffTime = os.clock() - areas.startTime
minetest.log("action", "areas loaded in "..diffTime.."s.")
end

1
mod.conf Normal file
View File

@ -0,0 +1 @@
name = areas

View File

@ -6,13 +6,13 @@ local function setting(tp, name, default)
local full_name = "areas."..name
local value
if tp == "boolean" then
value = minetest.setting_getbool(full_name)
value = minetest.settings:get_bool(full_name)
elseif tp == "string" then
value = minetest.setting_get(full_name)
value = minetest.settings:get(full_name)
elseif tp == "position" then
value = minetest.setting_get_pos(full_name)
elseif tp == "number" then
value = tonumber(minetest.setting_get(full_name))
value = tonumber(minetest.settings:get(full_name))
else
error("Invalid setting type!")
end