diff options
| author | cheapie <no-email-for-you@example.com> | 2026-04-12 10:40:06 -0500 |
|---|---|---|
| committer | cheapie <no-email-for-you@example.com> | 2026-04-12 10:40:06 -0500 |
| commit | 2a3e24bd0f6edc1c39ab7e615a7d486c93a72018 (patch) | |
| tree | d632d1090bdba6d1aeb5da321d91df3bfa2c352a | |
| parent | 599142ca6989717ff90ec615619be57d531eb681 (diff) | |
| download | areasprotector-2a3e24bd0f6edc1c39ab7e615a7d486c93a72018.tar areasprotector-2a3e24bd0f6edc1c39ab7e615a7d486c93a72018.tar.gz areasprotector-2a3e24bd0f6edc1c39ab7e615a7d486c93a72018.tar.bz2 areasprotector-2a3e24bd0f6edc1c39ab7e615a7d486c93a72018.tar.xz areasprotector-2a3e24bd0f6edc1c39ab7e615a7d486c93a72018.zip | |
| -rw-r--r-- | .luacheckrc | 3 | ||||
| -rw-r--r-- | init.lua | 200 | ||||
| -rw-r--r-- | mod.conf | 1 |
3 files changed, 46 insertions, 158 deletions
diff --git a/.luacheckrc b/.luacheckrc index 6408e64..d5ba049 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -1,7 +1,8 @@ max_line_length = 160 read_globals = { - "minetest", + "core", "vector", "areas", + "vizlib", } @@ -1,48 +1,41 @@ -local creative_mode = minetest.settings:get_bool("creative_mode") +local creative_mode = core.settings:get_bool("creative_mode") local function cyan(str) - return minetest.colorize("#00FFFF",str) + return core.colorize("#00FFFF",str) end local function red(str) - return minetest.colorize("#FF5555",str) + return core.colorize("#FF5555",str) end -local radius_large = minetest.settings:get("areasprotector_radius_large") - or minetest.settings:get("areasprotector_radius") +local radius_large = core.settings:get("areasprotector_radius_large") + or core.settings:get("areasprotector_radius") or 16 radius_large = tonumber(radius_large) or 16 -local height_large = minetest.settings:get("areasprotector_height_large") - or minetest.settings:get("areasprotector_radius_large") - or minetest.settings:get("areasprotector_radius") +local height_large = core.settings:get("areasprotector_height_large") + or core.settings:get("areasprotector_radius_large") + or core.settings:get("areasprotector_radius") or 16 height_large = tonumber(height_large) or 16 -local radius_small = minetest.settings:get("areasprotector_radius_small") +local radius_small = core.settings:get("areasprotector_radius_small") or 7 radius_small = tonumber(radius_small) or 7 -local height_small = minetest.settings:get("areasprotector_height_small") - or minetest.settings:get("areasprotector_radius_small") +local height_small = core.settings:get("areasprotector_height_small") + or core.settings:get("areasprotector_radius_small") or 7 height_small = tonumber(height_small) or 7 -local max_protectors = minetest.settings:get("areasprotector_max_protectors") or 16 +local max_protectors = core.settings:get("areasprotector_max_protectors") or 16 max_protectors = tonumber(max_protectors) or 16 -local function remove_display(pos) - local objs = minetest.get_objects_inside_radius(pos, 0.5) - for _,o in pairs(objs) do - o:remove() - end -end - local function on_place(itemstack, player, pointed, radius, height, sizeword) local pos = pointed.above local pos1 = vector.add(pos,vector.new(radius, height, radius)) @@ -50,18 +43,18 @@ local function on_place(itemstack, player, pointed, radius, height, sizeword) local name = player:get_player_name() local perm,err = areas:canPlayerAddArea(pos1,pos2,name) if not perm then - minetest.chat_send_player(name,red("You are not allowed to protect that area: ")..err) + core.chat_send_player(name,red("You are not allowed to protect that area: ")..err) return itemstack end - local conflicts = minetest.find_nodes_in_area(pos1,pos2,{"areasprotector:protector_small","areasprotector:protector_large",}) - if conflicts and #conflicts > 0 and not minetest.check_player_privs(name,"areas") then + local conflicts = core.find_nodes_in_area(pos1,pos2,{"areasprotector:protector_small","areasprotector:protector_large",}) + if conflicts and #conflicts > 0 and not core.check_player_privs(name,"areas") then local message = red("Another protector block is too close: ").. "another protector block was found at ".. - cyan(minetest.pos_to_string(conflicts[1])).. + cyan(core.pos_to_string(conflicts[1])).. ", and this size of protector block cannot be placed within ".. cyan(tostring(radius).."m").. " of others." - minetest.chat_send_player(name,message) + core.chat_send_player(name,message) return itemstack end local userareas = 0 @@ -70,7 +63,7 @@ local function on_place(itemstack, player, pointed, radius, height, sizeword) userareas = userareas + 1 end end - if userareas >= max_protectors and not minetest.check_player_privs(name,"areas") then + if userareas >= max_protectors and not core.check_player_privs(name,"areas") then local message1 = red("You are using too many protector blocks:").. " this server allows you to use up to ".. cyan(tostring(max_protectors)).. @@ -88,16 +81,16 @@ local function on_place(itemstack, player, pointed, radius, height, sizeword) "please consider using the chat commands instead, ".. "or at the very least take the time to rename some of your areas to something more descriptive first." end - minetest.chat_send_player(name,message1) - minetest.chat_send_player(name,message2) + core.chat_send_player(name,message1) + core.chat_send_player(name,message2) return itemstack end - local id = areas:add(name,"Protected by Protector Block at "..minetest.pos_to_string(pos, 0),pos1,pos2) + local id = areas:add(name,"Protected by Protector Block at "..core.pos_to_string(pos, 0),pos1,pos2) areas:save() - local msg = string.format("The area from %s to %s has been protected as #%s",cyan(minetest.pos_to_string(pos1)),cyan(minetest.pos_to_string(pos2)),cyan(id)) - minetest.chat_send_player(name,msg) - minetest.set_node(pos,{name="areasprotector:protector_"..sizeword}) - local meta = minetest.get_meta(pos) + local msg = string.format("The area from %s to %s has been protected as #%s",cyan(core.pos_to_string(pos1)),cyan(core.pos_to_string(pos2)),cyan(id)) + core.chat_send_player(name,msg) + core.set_node(pos,{name="areasprotector:protector_"..sizeword}) + local meta = core.get_meta(pos) local infotext = string.format("Protecting area %d owned by %s",id,name) meta:set_string("infotext",infotext) meta:set_int("area_id",id) @@ -121,7 +114,7 @@ local function after_dig(oldmetadata,digger,sizeword) inv:remove_item("main", "areasprotector:protector_"..sizeword.." 1") inv:add_item("main", "default:steel_ingot 6") else - minetest.chat_send_player(playername, "No room for the replacement ingots, just digging the protector and deleting the area normally.") + core.chat_send_player(playername, "No room for the replacement ingots, just digging the protector and deleting the area normally.") areas:remove(id) areas:save() end @@ -134,53 +127,18 @@ local function after_dig(oldmetadata,digger,sizeword) end end -local function on_punch(pos,sizeword) - local objs = minetest.get_objects_inside_radius(pos,.5) -- a radius of .5 since the entity serialization seems to be not that precise - local removed = false - for _, o in pairs(objs) do - if (not o:is_player()) and o:get_luaentity().name == "areasprotector:display_"..sizeword then - o:remove() - removed = true - end - end - if not removed then -- nothing was removed: there wasn't the entity - minetest.add_entity(pos, "areasprotector:display_"..sizeword) - minetest.after(4, remove_display, pos) - end -end - -local function on_step(self,sizeword) - if minetest.get_node(self.object:get_pos()).name ~= "areasprotector:protector_"..sizeword then - self.object:remove() - return - end -end - -local function make_display_nodebox(radius, height) - local nb_radius = radius + 0.55 - local nb_height = height + 0.55 - local t = { - -- sides - { -nb_radius, -nb_height, -nb_radius, -nb_radius, nb_height, nb_radius }, - { -nb_radius, -nb_height, nb_radius, nb_radius, nb_height, nb_radius }, - { nb_radius, -nb_height, -nb_radius, nb_radius, nb_height, nb_radius }, - { -nb_radius, -nb_height, -nb_radius, nb_radius, nb_height, -nb_radius }, - -- top - { -nb_radius, nb_height, -nb_radius, nb_radius, nb_height, nb_radius }, - -- bottom - { -nb_radius, -nb_height, -nb_radius, nb_radius, -nb_height, nb_radius }, - -- middle (surround protector) - {-.55,-.55,-.55, .55,.55,.55}, - } - return t +local function on_punch(pos) + if not core.global_exists("vizlib") then return end + local meta = core.get_meta(pos) + local areaid = meta:get_int("area_id") + if not (areaid and areas.areas[areaid]) then return end + local pos1 = areas.areas[areaid].pos1 + local pos2 = areas.areas[areaid].pos2 + if not pos1 and pos2 then return end + vizlib.draw_area(pos1,pos2,{color="mulberry"}) end -local nbox = { - type = "fixed", - fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }, -} - -minetest.register_node("areasprotector:protector_large", { +core.register_node("areasprotector:protector_large", { description = "Protector Block (large volume)", groups = {cracky=1}, tiles = { @@ -189,20 +147,16 @@ minetest.register_node("areasprotector:protector_large", { "default_steel_block.png^areasprotector_large_overlay.png^basic_materials_padlock.png" }, paramtype = "light", - drawtype = "nodebox", - node_box = nbox, on_place = function(itemstack,player,pointed_thing) return on_place(itemstack,player,pointed_thing,radius_large,height_large,"large") end, after_dig_node = function(_,_,oldmetadata,digger) after_dig(oldmetadata,digger,"large") end, - on_punch = function(pos) - on_punch(pos,"large") - end + on_punch = on_punch, }) -minetest.register_node("areasprotector:protector_small", { +core.register_node("areasprotector:protector_small", { description = "Protector Block (small volume)", groups = {cracky=1}, tiles = { @@ -211,90 +165,22 @@ minetest.register_node("areasprotector:protector_small", { "default_steel_block.png^basic_materials_padlock.png" }, paramtype = "light", - drawtype = "nodebox", - node_box = nbox, on_place = function(itemstack,player,pointed_thing) return on_place(itemstack,player,pointed_thing,radius_small,height_small,"small") end, after_dig_node = function(_,_,oldmetadata,digger) after_dig(oldmetadata,digger,"small") end, - on_punch = function(pos) - on_punch(pos,"small") - end -}) - --- entities code below (and above) mostly copied-pasted from Zeg9's protector mod - --- wielditem seems to be scaled to 1.5 times original node size -local vsize = {x=1.0/1.5, y=1.0/1.5} -local ecbox = {0, 0, 0, 0, 0, 0} - -minetest.register_entity("areasprotector:display_large", { - initial_properties = { - physical = false, - collisionbox = ecbox, - visual = "wielditem", - visual_size = vsize, - textures = {"areasprotector:display_node_large"}, - }, - on_step = function(self) - on_step(self,"large") - end -}) - -minetest.register_entity("areasprotector:display_small", { - initial_properties = { - physical = false, - collisionbox = ecbox, - visual = "wielditem", - visual_size = vsize, - textures = {"areasprotector:display_node_large"}, - }, - on_step = function(self) - on_step(self,"small") - end -}) - -minetest.register_node("areasprotector:display_node_large", { - tiles = {"areasprotector_display.png"}, - walkable = false, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = make_display_nodebox(radius_large, height_large) - }, - selection_box = { - type = "regular", - }, - paramtype = "light", - groups = {dig_immediate=3,not_in_creative_inventory=1}, - drop = "" -}) - -minetest.register_node("areasprotector:display_node_small", { - tiles = {"areasprotector_display.png"}, - walkable = false, - drawtype = "nodebox", - node_box = { - type = "fixed", - fixed = make_display_nodebox(radius_small, height_small) - }, - selection_box = { - type = "regular", - }, - paramtype = "light", - groups = {dig_immediate=3,not_in_creative_inventory=1}, - drop = "" + on_punch = on_punch, }) -minetest.register_craft({ +core.register_craft({ output = "areasprotector:protector_small 2", type = "shapeless", recipe = {"default:steelblock","basic_materials:padlock"}, }) -minetest.register_craft({ +core.register_craft({ output = "areasprotector:protector_large", type = "shapeless", recipe = { @@ -309,5 +195,5 @@ minetest.register_craft({ } }) -minetest.register_alias("areasprotector:protector", "areasprotector:protector_large") -minetest.register_alias("areasprotector:display_node", "areasprotector:display_node_large") +core.register_alias("areasprotector:protector", "areasprotector:protector_large") +core.register_alias("areasprotector:display_node", "areasprotector:display_node_large") @@ -1,3 +1,4 @@ name = areasprotector description = Protector block for the areas mod depends = areas,basic_materials +optional_depends = vizlib |
