summaryrefslogtreecommitdiff
path: root/areas
diff options
context:
space:
mode:
authorVanessa Dannenberg <vanessa.e.dannenberg@gmail.com>2019-04-02 18:04:55 -0400
committerVanessa Dannenberg <vanessa.e.dannenberg@gmail.com>2019-04-02 18:04:55 -0400
commit4ebefe20c921e5ec80f7e95c6f332bf550c92006 (patch)
tree648e84a224ccf1c0dadeb00ce5183db410949219 /areas
parent8555f75acc050f29508d88f1e57159f79cb948d1 (diff)
downloaddreambuilder_modpack-4ebefe20c921e5ec80f7e95c6f332bf550c92006.tar
dreambuilder_modpack-4ebefe20c921e5ec80f7e95c6f332bf550c92006.tar.gz
dreambuilder_modpack-4ebefe20c921e5ec80f7e95c6f332bf550c92006.tar.bz2
dreambuilder_modpack-4ebefe20c921e5ec80f7e95c6f332bf550c92006.tar.xz
dreambuilder_modpack-4ebefe20c921e5ec80f7e95c6f332bf550c92006.zip
updated areas (now using the minetest-mods repo), farming redo,
moreblocks, and moreores
Diffstat (limited to 'areas')
-rw-r--r--areas/.luacheckrc15
-rw-r--r--areas/api.lua19
-rw-r--r--areas/api.md5
-rw-r--r--areas/hud.lua12
-rw-r--r--areas/internal.lua34
-rw-r--r--areas/pos.lua12
-rw-r--r--areas/settings.lua2
7 files changed, 88 insertions, 11 deletions
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)