Add protection support for many blocks
parent
5dfe65166d
commit
d63511c596
|
@ -17,6 +17,12 @@ hades_farming.hoe_on_use = function(itemstack, user, pointed_thing, uses)
|
|||
|
||||
local under = minetest.get_node(pt.under)
|
||||
local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
|
||||
local name = user:get_player_name()
|
||||
if minetest.is_protected(pt.under, name) then
|
||||
minetest.record_protection_violation(pt.under, name)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
local above = minetest.get_node(p)
|
||||
|
||||
-- return if any of the nodes is not registered
|
||||
|
@ -50,7 +56,7 @@ hades_farming.hoe_on_use = function(itemstack, user, pointed_thing, uses)
|
|||
gain = 0.5,
|
||||
}, true)
|
||||
|
||||
if not minetest.is_creative_enabled(user:get_player_name()) then
|
||||
if not minetest.is_creative_enabled(name) then
|
||||
itemstack:add_wear(65535/(uses-1))
|
||||
end
|
||||
return itemstack
|
||||
|
|
|
@ -55,6 +55,15 @@ for p=1, #plants_rotate do
|
|||
end
|
||||
end
|
||||
|
||||
-- Call minetest.set_node(pos, node), but only if pos is not protected by playername
|
||||
local set_node_protected = function(pos, node, playername)
|
||||
if not minetest.is_protected(pos, playername) then
|
||||
minetest.set_node(pos, node)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Returns an on_place function for fertilizer.
|
||||
-- 'super' parameter is true for Super Fertilizer and false for normal fertilizer
|
||||
local get_apply_fertilizer = function(super)
|
||||
|
@ -75,6 +84,11 @@ local get_apply_fertilizer = function(super)
|
|||
pointed_thing) or itemstack
|
||||
end
|
||||
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
if plant_mappings[nname] then
|
||||
if (not super) then
|
||||
-- Restrict usable plants if not super fertilizer
|
||||
|
@ -82,11 +96,15 @@ local get_apply_fertilizer = function(super)
|
|||
if math.random(1,3) == 1 then return itemstack end
|
||||
end
|
||||
-- Add plant growth stage
|
||||
minetest.set_node(pos, {name=plant_mappings[nname][1], param2=nnode.param2})
|
||||
set_node_protected(pos, {name=plant_mappings[nname][1], param2=nnode.param2}, name)
|
||||
elseif minetest.get_item_group(nname, "sapling") ~= 0 then
|
||||
if not super and math.random(1,5) ~= 1 then return itemstack end
|
||||
-- Grow sapling to tree
|
||||
hades_trees.grow_sapling(pos, false)
|
||||
if not minetest.is_protected(pos, name) then
|
||||
hades_trees.grow_sapling(pos, false)
|
||||
else
|
||||
return itemstack
|
||||
end
|
||||
elseif nname == "hades_flowerpots:flower_pot" then
|
||||
if not super then return itemstack end
|
||||
-- [SUPER] Grow random flower in empty flowerpot
|
||||
|
@ -94,7 +112,7 @@ local get_apply_fertilizer = function(super)
|
|||
"red", "white", "yellow", "orange", "yellow", "violet",
|
||||
}
|
||||
local flower = flowers[math.random(1, #flowers)]
|
||||
minetest.set_node(pos, {name="hades_flowerpots:flower_pot_"..flower})
|
||||
set_node_protected(pos, {name="hades_flowerpots:flower_pot_"..flower}, name)
|
||||
elseif minetest.get_item_group(nname, "leaves") == 1 then
|
||||
if not super then return itemstack end
|
||||
-- [SUPER] Grow leaves
|
||||
|
@ -109,7 +127,7 @@ local get_apply_fertilizer = function(super)
|
|||
for p=1, #posses do
|
||||
local ppos = vector.add(pos, posses[p])
|
||||
if minetest.get_node(ppos).name == "air" then
|
||||
minetest.set_node(ppos, {name=nname, param2=nnode.param2})
|
||||
set_node_protected(ppos, {name=nname, param2=nnode.param2}, name)
|
||||
end
|
||||
end
|
||||
elseif nname == "hades_core:papyrus" or nname == "hades_core:sugarcane" or nname == "hades_core:cactus" or minetest.get_item_group(nname, "tree") == 1 then
|
||||
|
@ -120,7 +138,7 @@ local get_apply_fertilizer = function(super)
|
|||
above = {x=pos.x,y=pos.y+i,z=pos.z}
|
||||
local node = minetest.get_node(above)
|
||||
if node.name == "air" then
|
||||
minetest.set_node(above, {name=nname})
|
||||
set_node_protected(above, {name=nname}, name)
|
||||
break
|
||||
elseif node.name ~= nname then
|
||||
break
|
||||
|
@ -137,7 +155,7 @@ local get_apply_fertilizer = function(super)
|
|||
below = {x=pos.x,y=pos.y-i,z=pos.z}
|
||||
local node = minetest.get_node(below)
|
||||
if node.name == "air" then
|
||||
minetest.set_node(below, {name=nname, param2=param2})
|
||||
set_node_protected(below, {name=nname, param2=param2}, name)
|
||||
break
|
||||
elseif node.name ~= nname then
|
||||
break
|
||||
|
@ -190,7 +208,7 @@ local get_apply_fertilizer = function(super)
|
|||
elseif nname == "walls:cobble" then
|
||||
node.name = "walls:mossycobble"
|
||||
end
|
||||
minetest.set_node(ppos, node)
|
||||
set_node_protected(ppos, node, name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -286,7 +304,7 @@ local get_apply_fertilizer = function(super)
|
|||
p2 = pdef.place_param2
|
||||
end
|
||||
local nnode = {name = plant, param2 = p2}
|
||||
minetest.set_node(pos_above, nnode)
|
||||
set_node_protected(pos_above, nnode, name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -309,7 +327,7 @@ local get_apply_fertilizer = function(super)
|
|||
minetest.registered_nodes[below_node.name].liquidtype == "source" then
|
||||
node.name = nname
|
||||
node.param2 = math.random(0,3)
|
||||
minetest.set_node(ppos, node)
|
||||
set_node_protected(ppos, node, name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -66,6 +66,10 @@ minetest.register_node("hades_flowerpots:flower_pot", {
|
|||
on_rightclick = function(pos, node, clicker, itemstack)
|
||||
local item = clicker:get_wielded_item():get_name()
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
for _, row in ipairs(flowers) do
|
||||
local flower = row[1]
|
||||
local flower_node = row[2]
|
||||
|
@ -125,7 +129,12 @@ minetest.register_node("hades_flowerpots:flower_pot_"..flower, {
|
|||
groups = {cracky = 3, oddly_breakable_by_hand = 1, not_in_creative_inventory=1, attached_node=1},
|
||||
sounds = hades_sounds.node_sound_stone_defaults(),
|
||||
on_rightclick = function(pos, item, clicker)
|
||||
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
if not minetest.is_creative_enabled(name) then
|
||||
minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, flower_node)
|
||||
end
|
||||
minetest.set_node(pos, {name="hades_flowerpots:flower_pot"})
|
||||
|
@ -163,7 +172,12 @@ minetest.register_node("hades_flowerpots:flower_pot_"..flower, {
|
|||
groups = {cracky = 3, oddly_breakable_by_hand = 1, not_in_creative_inventory=1, attached_node=1},
|
||||
sounds = hades_sounds.node_sound_stone_defaults(),
|
||||
on_rightclick = function(pos, item, clicker)
|
||||
if not minetest.is_creative_enabled(clicker:get_player_name()) then
|
||||
local name = clicker:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return
|
||||
end
|
||||
if not minetest.is_creative_enabled(name) then
|
||||
minetest.add_item({x=pos.x, y=pos.y+0.5, z=pos.z}, flower_node)
|
||||
end
|
||||
minetest.set_node(pos, {name="hades_flowerpots:flower_pot"})
|
||||
|
|
|
@ -10,7 +10,7 @@ local conv = function(pos, pos_table)
|
|||
end
|
||||
end
|
||||
|
||||
local cotrig = function(pos)
|
||||
local cotrig = function(pos, username)
|
||||
local pos_table = {}
|
||||
for dx=-4,4 do
|
||||
for dz=-4,4 do
|
||||
|
@ -20,7 +20,10 @@ local cotrig = function(pos)
|
|||
pos.z = pos.z+dz
|
||||
|
||||
if math.abs(dx)<4 and math.abs(dy)<1 and math.abs(dz)<4 then
|
||||
conv(table.copy(pos), pos_table)
|
||||
local newpos = table.copy(pos)
|
||||
if not minetest.is_protected(newpos, username) then
|
||||
conv(table.copy(newpos), pos_table)
|
||||
end
|
||||
end
|
||||
pos.x = pos.x-dx
|
||||
pos.y = pos.y-dy
|
||||
|
@ -44,6 +47,10 @@ function hades_gaia.staffgaia_on_use(itemstack, user, pointed_thing, uses)
|
|||
return
|
||||
end
|
||||
|
||||
if minetest.is_protected(pt.under, user:get_player_name()) then
|
||||
minetest.record_protection_violation(pt.under, user:get_player_name())
|
||||
return
|
||||
end
|
||||
|
||||
local under = minetest.get_node(pt.under)
|
||||
local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
|
||||
|
@ -65,7 +72,7 @@ function hades_gaia.staffgaia_on_use(itemstack, user, pointed_thing, uses)
|
|||
end
|
||||
|
||||
|
||||
cotrig(pt.under)
|
||||
cotrig(pt.under, user:get_player_name())
|
||||
if not minetest.is_creative_enabled(user:get_player_name()) then
|
||||
itemstack:add_wear(65535/(uses-1))
|
||||
end
|
||||
|
|
|
@ -9,6 +9,11 @@ minetest.register_craftitem("hades_magic_wand:magic_wand", {
|
|||
on_use = function(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type == "node" then
|
||||
local pos = pointed_thing.under
|
||||
local name = user:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return itemstack
|
||||
end
|
||||
local node = minetest.get_node(pointed_thing.under)
|
||||
local def = minetest.registered_items[node.name]
|
||||
if def and def._hades_magic_next then
|
||||
|
@ -29,6 +34,11 @@ minetest.register_craftitem("hades_magic_wand:magic_shaper", {
|
|||
on_use = function(itemstack, user, pointed_thing)
|
||||
if pointed_thing.type == "node" then
|
||||
local pos = pointed_thing.under
|
||||
local name = user:get_player_name()
|
||||
if minetest.is_protected(pos, name) then
|
||||
minetest.record_protection_violation(pos, name)
|
||||
return itemstack
|
||||
end
|
||||
local node = minetest.get_node(pointed_thing.under)
|
||||
local def = minetest.registered_items[node.name]
|
||||
if def and def._hades_shaper_next then
|
||||
|
|
|
@ -21,6 +21,8 @@ local place_seed = function(itemstack, placer, pointed_thing, nodename, surface_
|
|||
return
|
||||
end
|
||||
|
||||
local name = placer:get_player_name()
|
||||
|
||||
local under = minetest.get_node(pt.under)
|
||||
local above = minetest.get_node(pt.above)
|
||||
|
||||
|
@ -30,6 +32,11 @@ local place_seed = function(itemstack, placer, pointed_thing, nodename, surface_
|
|||
return udef.on_rightclick(pt.under, under, placer, itemstack,
|
||||
pt) or itemstack
|
||||
end
|
||||
|
||||
if minetest.is_protected(pt.under, name) then
|
||||
minetest.record_protection_violation(pt.under, name)
|
||||
return itemstack
|
||||
end
|
||||
|
||||
-- return if any of the nodes is not registered
|
||||
if not minetest.registered_nodes[under.name] then
|
||||
|
@ -59,7 +66,7 @@ local place_seed = function(itemstack, placer, pointed_thing, nodename, surface_
|
|||
-- add the node and remove 1 item from the itemstack
|
||||
local pdef = minetest.registered_nodes[nodename]
|
||||
minetest.add_node(pt.above, {name = nodename, param2 = pdef.place_param2})
|
||||
if not minetest.is_creative_enabled(placer:get_player_name()) then
|
||||
if not minetest.is_creative_enabled(name) then
|
||||
itemstack:take_item()
|
||||
end
|
||||
return itemstack
|
||||
|
|
Loading…
Reference in New Issue