summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.luacheckrc3
-rw-r--r--init.lua200
-rw-r--r--mod.conf1
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",
}
diff --git a/init.lua b/init.lua
index fcc1fb4..10247fb 100644
--- a/init.lua
+++ b/init.lua
@@ -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")
diff --git a/mod.conf b/mod.conf
index ace2de3..27c0005 100644
--- a/mod.conf
+++ b/mod.conf
@@ -1,3 +1,4 @@
name = areasprotector
description = Protector block for the areas mod
depends = areas,basic_materials
+optional_depends = vizlib