diff --git a/api.lua b/api.lua index 581ef11..83de26c 100644 --- a/api.lua +++ b/api.lua @@ -16,13 +16,11 @@ 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) end - function areas:getExternalHudEntries(pos) local areas = {} for _, func in pairs(hudHandlers) do @@ -113,7 +111,7 @@ end -- Note that this fails and returns false when the specified area is fully -- owned by the player, but with multiple protection zones, none of which -- cover the entire checked area. --- @param name (optional) Player name. If not specified checks for any intersecting areas. +-- @param name (optional) Player name. If not specified checks for any intersecting areas. -- @param allow_open Whether open areas should be counted as if they didn't exist. -- @return Boolean indicating whether the player can interact in that area. -- @return Un-owned intersecting area ID, if found. diff --git a/chatcommands.lua b/chatcommands.lua index 20ab291..6892c15 100644 --- a/chatcommands.lua +++ b/chatcommands.lua @@ -1,4 +1,3 @@ - minetest.register_chatcommand("protect", { params = "", description = "Protect your own area", @@ -75,7 +74,7 @@ minetest.register_chatcommand("set_owner", { minetest.register_chatcommand("add_owner", { params = " ", - description = "Give a player access to a sub-area beetween two" + description = "Give a player access to a sub-area between two" .." positions that have already been protected," .." Use set_owner if you don't want the parent to be set.", func = function(name, param) @@ -167,7 +166,12 @@ minetest.register_chatcommand("find_areas", { if str:find(param) then table.insert(matches, str) end + + if #matches > 10 then + break + end end + if #matches > 0 then return true, table.concat(matches, "\n") else @@ -193,7 +197,10 @@ minetest.register_chatcommand("list_areas", { end if #areaStrings == 0 then return true, "No visible areas." - end + elseif #areaStrings > 100 then + return true, "Too many areas to list." + end + return true, table.concat(areaStrings, "\n") end }) diff --git a/init.lua b/init.lua index 9de40dd..32cbb34 100644 --- a/init.lua +++ b/init.lua @@ -36,4 +36,3 @@ if minetest.settings:get_bool("log_mods") then local diffTime = os.clock() - areas.startTime minetest.log("action", "areas loaded in "..diffTime.."s.") end - diff --git a/internal.lua b/internal.lua index 34cbd68..6a2de6a 100644 --- a/internal.lua +++ b/internal.lua @@ -46,7 +46,7 @@ end function areas:checkAreaStoreId(sid) if not sid then minetest.log("error", "AreaStore failed to find an ID for an " - .."area! Falling back to iterative area checking.") + .."area! Falling back to iterative area checking.") self.store = nil self.store_ids = nil end @@ -237,7 +237,7 @@ function areas:canPlayerAddArea(pos1, pos2, name) self.config.self_protection_max_areas if count >= max_areas then return false, "You have reached the maximum amount of" - .." areas that you are allowed to protect." + .." areas that you are allowed to protect." end -- Check intersecting areas diff --git a/protector.lua b/protector.lua index cd5af89..8d44a89 100644 --- a/protector.lua +++ b/protector.lua @@ -8,13 +8,13 @@ local function red(str) return minetest.colorize("#FF5555", str) end -minetest.register_node(":areasprotector:protector", { +minetest.register_node("areas:protector", { description = "Protector Block", groups = {cracky = 1}, tiles = { "default_stonebrick_carved.png", "default_stonebrick_carved.png", - "default_stonebrick_carved.png^areasprotector_stone.png" + "default_stonebrick_carved.png^areas_protector_stone.png" }, paramtype = "light", drawtype = "nodebox", @@ -40,7 +40,7 @@ minetest.register_node(":areasprotector:protector", { minetest.chat_send_player(name, ("The area from %s to %s has been protected as #%s") :format(cyan(minetest.pos_to_string(pos1)), cyan(minetest.pos_to_string(pos2)), cyan(id))) - minetest.set_node(pos, {name = "areasprotector:protector"}) + minetest.set_node(pos, {name = "areas:protector"}) local meta = minetest.get_meta(pos) meta:set_string("infotext", ("Protecting area %d, Owned by %s"):format(id, name)) meta:set_int("area_id", id) @@ -66,29 +66,29 @@ minetest.register_node(":areasprotector:protector", { local objs = minetest.get_objects_inside_radius(pos, .5) -- a radius of .5 since the entity serialization seems to be not that precise local displayed = false for _, o in pairs(objs) do - if not o:is_player() and o:get_luaentity().name == "areasprotector:display" then + if not o:is_player() and o:get_luaentity().name == "areas:display" then o:remove() return end end if not displayed then -- nothing was removed: there wasn't the entity - minetest.add_entity(pos, "areasprotector:display") + minetest.add_entity(pos, "areas:display") end end }) -- entities code below (and above) mostly copied-pasted from Zeg9's protector mod -minetest.register_entity(":areasprotector:display", { +minetest.register_entity("areas:display", { physical = false, collisionbox = {0}, visual = "wielditem", visual_size = {x = 1.0 / 1.5, y = 1.0 / 1.5}, -- wielditem seems to be scaled to 1.5 times original node size - textures = {"areasprotector:display_node"}, + textures = {"areas:display_node"}, timer = 0, on_step = function(self, dtime) self.timer = self.timer + dtime - if self.timer > 4 or minetest.get_node(self.object:getpos()).name ~= "areasprotector:protector" then + if self.timer > 4 or minetest.get_node(self.object:getpos()).name ~= "areas:protector" then self.object:remove() end end @@ -96,8 +96,8 @@ minetest.register_entity(":areasprotector:display", { local nb_radius = radius + 0.55 -minetest.register_node(":areasprotector:display_node", { - tiles = {"areasprotector_display.png"}, +minetest.register_node("areas:display_node", { + tiles = {"areas_protector_display.png"}, walkable = false, drawtype = "nodebox", node_box = { @@ -123,7 +123,7 @@ minetest.register_node(":areasprotector:display_node", { }) minetest.register_craft({ - output = "areasprotector:protector", + output = "areas:protector", type = "shapeless", recipe = { "default:stonebrickcarved", "default:stonebrickcarved", "default:stonebrickcarved", @@ -131,3 +131,7 @@ minetest.register_craft({ "default:stonebrickcarved", "default:stonebrickcarved", "default:stonebrickcarved" } }) + +-- Aliases +minetest.register_alias("areasprotector:protector", "areas:protector") +minetest.register_alias("areasprotector:display_node", "areas:display_node") diff --git a/settings.lua b/settings.lua index d6db97c..da2b534 100644 --- a/settings.lua +++ b/settings.lua @@ -32,11 +32,11 @@ setting("string", "filename", world_path.."/areas.dat") -- within the maximum size and number. setting("boolean", "self_protection", true) setting("string", "self_protection_privilege", "interact") -setting("position", "self_protection_max_size", {x = 64, y = 128, z = 64}) +setting("position", "self_protection_max_size", {x = 64, y = 128, z = 64}) setting("number", "self_protection_max_areas", 4) -- For players with the areas_high_limit privilege. setting("position", "self_protection_max_size_high", {x = 512, y = 512, z = 512}) setting("number", "self_protection_max_areas_high", 32) -- configure the refresh delay for the name displays in the HUD -setting("number", "tick", 1) \ No newline at end of file +setting("number", "tick", 1) diff --git a/textures/areasprotector_display.png b/textures/areas_protector_display.png similarity index 100% rename from textures/areasprotector_display.png rename to textures/areas_protector_display.png diff --git a/textures/areasprotector_stone.png b/textures/areas_protector_stone.png similarity index 100% rename from textures/areasprotector_stone.png rename to textures/areas_protector_stone.png