From 4ebefe20c921e5ec80f7e95c6f332bf550c92006 Mon Sep 17 00:00:00 2001 From: Vanessa Dannenberg Date: Tue, 2 Apr 2019 18:04:55 -0400 Subject: updated areas (now using the minetest-mods repo), farming redo, moreblocks, and moreores --- areas/.luacheckrc | 15 +++++++++++++++ areas/api.lua | 19 ++++++++++++++++++- areas/api.md | 5 ++++- areas/hud.lua | 12 ++++++++++++ areas/internal.lua | 34 +++++++++++++++++++++++++++------- areas/pos.lua | 12 ++++++++++-- areas/settings.lua | 2 ++ 7 files changed, 88 insertions(+), 11 deletions(-) create mode 100644 areas/.luacheckrc (limited to 'areas') diff --git a/areas/.luacheckrc b/areas/.luacheckrc new file mode 100644 index 0000000..15eed66 --- /dev/null +++ b/areas/.luacheckrc @@ -0,0 +1,15 @@ +unused_args = false +allow_defined_top = true + +read_globals = { + "DIR_DELIM", + "minetest", "core", + "dump", + "vector", "nodeupdate", + "VoxelManip", "VoxelArea", + "PseudoRandom", "ItemStack", + "intllib", + "default", + table = { fields = { "copy", "getn" } } +} + diff --git a/areas/api.lua b/areas/api.lua index 730e96d..8103b84 100644 --- a/areas/api.lua +++ b/areas/api.lua @@ -1,5 +1,23 @@ local hudHandlers = {} + +areas.registered_on_adds = {} +areas.registered_on_removes = {} +areas.registered_on_moves = {} + +function areas:registerOnAdd(func) + table.insert(areas.registered_on_adds, func) +end + +function areas:registerOnRemove(func) + table.insert(areas.registered_on_removes, func) +end + +function areas:registerOnMove(func) + table.insert(areas.registered_on_moves, func) +end + + --- 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) @@ -141,4 +159,3 @@ function areas:canInteractInArea(pos1, pos2, name, allow_open) -- intersecting areas and they are all owned by the player. return true end - diff --git a/areas/api.md b/areas/api.md index c74b4c7..e243a8a 100644 --- a/areas/api.md +++ b/areas/api.md @@ -4,7 +4,10 @@ Areas mod API API list --- - * `areas.registerHudHandler(handler)` - Registers a handler to add items to the Areas HUD. See [HUD](#hud). + * `areas:registerHudHandler(handler)` - Registers a handler to add items to the Areas HUD. See [HUD](#hud). + * `areas:registerOnAdd(func(id, area))` + * `areas:registerOnRemove(func(id))` + * `areas:registerOnMove(func(id, area, pos1, pos2))` HUD diff --git a/areas/hud.lua b/areas/hud.lua index 0b7931f..b29152d 100644 --- a/areas/hud.lua +++ b/areas/hud.lua @@ -1,11 +1,23 @@ -- This is inspired by the landrush mod by Bremaweb areas.hud = {} +areas.hud.refresh = 0 minetest.register_globalstep(function(dtime) + + areas.hud.refresh = areas.hud.refresh + dtime + if areas.hud.refresh > areas.config["tick"] then + areas.hud.refresh = 0 + else + return + end + for _, player in pairs(minetest.get_connected_players()) do local name = player:get_player_name() local pos = vector.round(player:getpos()) + pos = vector.apply(pos, function(p) + return math.max(math.min(p, 2147483), -2147483) + end) local areaStrings = {} for id, area in pairs(areas:getAreasAtPos(pos)) do diff --git a/areas/internal.lua b/areas/internal.lua index bf7e92c..27f85ed 100644 --- a/areas/internal.lua +++ b/areas/internal.lua @@ -3,6 +3,18 @@ function areas:player_exists(name) return minetest.get_auth_handler().get_auth(name) ~= nil end +local safe_file_write = minetest.safe_file_write +if safe_file_write == nil then + function safe_file_write(path, content) + local file, err = io.open(path, "w") + if err then + return err + end + file:write(content) + file:close() + end +end + -- Save the areas table to a file function areas:save() local datastr = minetest.serialize(self.areas) @@ -10,12 +22,7 @@ function areas:save() minetest.log("error", "[areas] Failed to serialize area data!") return end - local file, err = io.open(self.config.filename, "w") - if err then - return err - end - file:write(datastr) - file:close() + return safe_file_write(self.config.filename, datastr) end -- Load the areas table from the save file @@ -86,6 +93,11 @@ function areas:add(owner, name, pos1, pos2, parent) owner = owner, parent = parent } + + for i=1, #areas.registered_on_adds do + areas.registered_on_adds[i](id, self.areas[id]) + end + -- Add to AreaStore if self.store then local sid = self.store:insert_area(pos1, pos2, tostring(id)) @@ -118,6 +130,10 @@ function areas:remove(id, recurse) end end + for i=1, #areas.registered_on_removes do + areas.registered_on_removes[i](id) + end + -- Remove main entry self.areas[id] = nil @@ -133,6 +149,11 @@ function areas:move(id, area, pos1, pos2) area.pos1 = pos1 area.pos2 = pos2 + + for i=1, #areas.registered_on_moves do + areas.registered_on_moves[i](id, area, pos1, pos2) + end + if self.store then self.store:remove_area(areas.store_ids[id]) local sid = self.store:insert_area(pos1, pos2, tostring(id)) @@ -282,4 +303,3 @@ function areas:isAreaOwner(id, name) end return false end - diff --git a/areas/pos.lua b/areas/pos.lua index 8d3e6fe..e97e4fc 100644 --- a/areas/pos.lua +++ b/areas/pos.lua @@ -129,13 +129,21 @@ function areas:getPos(playerName) return areas:sortPos(pos1, pos2) end +local function posLimit(pos) + return { + x = math.max(math.min(pos.x, 31000), -31000) + y = math.max(math.min(pos.y, 31000), -31000) + z = math.max(math.min(pos.z, 31000), -31000) + } +end + function areas:setPos1(playerName, pos) - areas.pos1[playerName] = pos + areas.pos1[playerName] = posLimit(pos) areas.markPos1(playerName) end function areas:setPos2(playerName, pos) - areas.pos2[playerName] = pos + areas.pos2[playerName] = posLimit(pos) areas.markPos2(playerName) end diff --git a/areas/settings.lua b/areas/settings.lua index ffb5355..feaa687 100644 --- a/areas/settings.lua +++ b/areas/settings.lua @@ -41,3 +41,5 @@ setting("number", "self_protection_max_areas_high", 32) -- legacy_table (owner_defs) compatibility. Untested and has known issues. setting("boolean", "legacy_table", false) +-- configure the refresh delay for the name displays in the HUD +setting("number", "tick", 0.5) -- cgit v1.2.3