summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcheapie <no-email-for-you@example.com>2017-04-02 19:36:08 -0400
committercheapie <no-email-for-you@example.com>2017-04-02 18:36:08 -0500
commitcfc2c779b8d5931558f302d527469afa93f1726a (patch)
treeaee40ce73965d1ea5a1d10893f3de4ce7ec55841
parent7316ba0bf8759d218ff33fa6e367ec33a2fabe22 (diff)
downloadareasprotector-cfc2c779b8d5931558f302d527469afa93f1726a.tar
areasprotector-cfc2c779b8d5931558f302d527469afa93f1726a.tar.gz
areasprotector-cfc2c779b8d5931558f302d527469afa93f1726a.tar.bz2
areasprotector-cfc2c779b8d5931558f302d527469afa93f1726a.tar.xz
areasprotector-cfc2c779b8d5931558f302d527469afa93f1726a.zip
use an entity to show the protected area (#1)
(copied from Zeg9's mod)
-rw-r--r--init.lua76
-rw-r--r--textures/areasprotector_display.pngbin0 -> 96 bytes
2 files changed, 75 insertions, 1 deletions
diff --git a/init.lua b/init.lua
index a2d00fa..653f981 100644
--- a/init.lua
+++ b/init.lua
@@ -6,6 +6,15 @@ local function red(str)
return minetest.colorize("#FF5555",str)
end
+local radius = minetest.setting_get("areasprotector_radius") or 8
+
+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
+
minetest.register_node("areasprotector:protector",{
description = "Protector Block",
groups = {cracky=1},
@@ -14,8 +23,13 @@ minetest.register_node("areasprotector:protector",{
"default_steel_block.png",
"default_steel_block.png^areasprotector_protector.png"
},
+ paramtype = "light",
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
+ },
on_place = function(itemstack,player,pointed)
- local radius = minetest.setting_get("areasprotector_radius") or 8
local pos = pointed.above
local pos1 = vector.add(pos,vector.new(radius,radius,radius))
local pos2 = vector.add(pos,vector.new(-1*radius,-1*radius,-1*radius))
@@ -49,6 +63,66 @@ minetest.register_node("areasprotector:protector",{
areas:save()
end
end,
+ on_punch = function(pos, node, puncher)
+ 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" 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")
+ minetest.after(4, remove_display, pos)
+ end
+ end
+})
+
+-- entities code below (and above) mostly copied-pasted from Zeg9's protector mod
+
+minetest.register_entity("areasprotector:display", {
+ physical = false,
+ collisionbox = {0,0,0,0,0,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"},
+ on_step = function(self, dtime)
+ if minetest.get_node(self.object:getpos()).name ~= "areasprotector:protector" then
+ self.object:remove()
+ return
+ end
+ end,
+})
+
+local nb_radius = radius + 0.55
+
+minetest.register_node("areasprotector:display_node", {
+ tiles = {"areasprotector_display.png"},
+ walkable = false,
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ -- sides
+ { -nb_radius, -nb_radius, -nb_radius, -nb_radius, nb_radius, nb_radius },
+ { -nb_radius, -nb_radius, nb_radius, nb_radius, nb_radius, nb_radius },
+ { nb_radius, -nb_radius, -nb_radius, nb_radius, nb_radius, nb_radius },
+ { -nb_radius, -nb_radius, -nb_radius, nb_radius, nb_radius, -nb_radius },
+ -- top
+ { -nb_radius, nb_radius, -nb_radius, nb_radius, nb_radius, nb_radius },
+ -- bottom
+ { -nb_radius, -nb_radius, -nb_radius, nb_radius, -nb_radius, nb_radius },
+ -- middle (surround protector)
+ {-.55,-.55,-.55, .55,.55,.55},
+ },
+ },
+ selection_box = {
+ type = "regular",
+ },
+ paramtype = "light",
+ groups = {dig_immediate=3,not_in_creative_inventory=1},
+ drop = "",
})
minetest.register_craft({
diff --git a/textures/areasprotector_display.png b/textures/areasprotector_display.png
new file mode 100644
index 0000000..6337274
--- /dev/null
+++ b/textures/areasprotector_display.png
Binary files differ