Add nil checks for placer

This commit is contained in:
DTA7 2017-10-01 15:41:58 +02:00 committed by sfan5
parent ca3e807d35
commit 0216fa08ec
14 changed files with 72 additions and 53 deletions

View File

@ -49,7 +49,8 @@ function beds.register_bed(name, def)
local node = minetest.get_node(under) local node = minetest.get_node(under)
local udef = minetest.registered_nodes[node.name] local udef = minetest.registered_nodes[node.name]
if udef and udef.on_rightclick and if udef and udef.on_rightclick and
not (placer and placer:get_player_control().sneak) then not (placer and placer:is_player() and
placer:get_player_control().sneak) then
return udef.on_rightclick(under, node, placer, itemstack, return udef.on_rightclick(under, node, placer, itemstack,
pointed_thing) or itemstack pointed_thing) or itemstack
end end
@ -61,9 +62,11 @@ function beds.register_bed(name, def)
pos = pointed_thing.above pos = pointed_thing.above
end end
if minetest.is_protected(pos, placer:get_player_name()) and local player_name = placer and placer:get_player_name() or ""
not minetest.check_player_privs(placer, "protection_bypass") then
minetest.record_protection_violation(pos, placer:get_player_name()) if minetest.is_protected(pos, player_name) and
not minetest.check_player_privs(player_name, "protection_bypass") then
minetest.record_protection_violation(pos, player_name)
return itemstack return itemstack
end end
@ -72,12 +75,13 @@ function beds.register_bed(name, def)
return itemstack return itemstack
end end
local dir = minetest.dir_to_facedir(placer:get_look_dir()) local dir = placer and placer:get_look_dir() and
minetest.dir_to_facedir(placer:get_look_dir()) or 0
local botpos = vector.add(pos, minetest.facedir_to_dir(dir)) local botpos = vector.add(pos, minetest.facedir_to_dir(dir))
if minetest.is_protected(botpos, placer:get_player_name()) and if minetest.is_protected(botpos, player_name) and
not minetest.check_player_privs(placer, "protection_bypass") then not minetest.check_player_privs(player_name, "protection_bypass") then
minetest.record_protection_violation(botpos, placer:get_player_name()) minetest.record_protection_violation(botpos, player_name)
return itemstack return itemstack
end end
@ -90,7 +94,7 @@ function beds.register_bed(name, def)
minetest.set_node(botpos, {name = name .. "_top", param2 = dir}) minetest.set_node(botpos, {name = name .. "_top", param2 = dir})
if not (creative and creative.is_enabled_for if not (creative and creative.is_enabled_for
and creative.is_enabled_for(placer:get_player_name())) then and creative.is_enabled_for(player_name)) then
itemstack:take_item() itemstack:take_item()
end end
return itemstack return itemstack

View File

@ -230,7 +230,8 @@ minetest.register_craftitem("boats:boat", {
local node = minetest.get_node(under) local node = minetest.get_node(under)
local udef = minetest.registered_nodes[node.name] local udef = minetest.registered_nodes[node.name]
if udef and udef.on_rightclick and if udef and udef.on_rightclick and
not (placer and placer:get_player_control().sneak) then not (placer and placer:is_player() and
placer:get_player_control().sneak) then
return udef.on_rightclick(under, node, placer, itemstack, return udef.on_rightclick(under, node, placer, itemstack,
pointed_thing) or itemstack pointed_thing) or itemstack
end end
@ -244,9 +245,12 @@ minetest.register_craftitem("boats:boat", {
pointed_thing.under.y = pointed_thing.under.y + 0.5 pointed_thing.under.y = pointed_thing.under.y + 0.5
boat = minetest.add_entity(pointed_thing.under, "boats:boat") boat = minetest.add_entity(pointed_thing.under, "boats:boat")
if boat then if boat then
if placer then
boat:setyaw(placer:get_look_horizontal()) boat:setyaw(placer:get_look_horizontal())
if not (creative and creative.is_enabled_for end
and creative.is_enabled_for(placer:get_player_name())) then local player_name = placer and placer:get_player_name() or ""
if not (creative and creative.is_enabled_for and
creative.is_enabled_for(player_name)) then
itemstack:take_item() itemstack:take_item()
end end
end end

View File

@ -69,7 +69,8 @@ function bucket.register_liquid(source, flowing, itemname, inventory_image, name
-- Call on_rightclick if the pointed node defines it -- Call on_rightclick if the pointed node defines it
if ndef and ndef.on_rightclick and if ndef and ndef.on_rightclick and
user and not user:get_player_control().sneak then not (user and user:is_player() and
user:get_player_control().sneak) then
return ndef.on_rightclick( return ndef.on_rightclick(
pointed_thing.under, pointed_thing.under,
node, user, node, user,

View File

@ -367,7 +367,8 @@ minetest.register_craftitem("carts:cart", {
local node = minetest.get_node(under) local node = minetest.get_node(under)
local udef = minetest.registered_nodes[node.name] local udef = minetest.registered_nodes[node.name]
if udef and udef.on_rightclick and if udef and udef.on_rightclick and
not (placer and placer:get_player_control().sneak) then not (placer and placer:is_player() and
placer:get_player_control().sneak) then
return udef.on_rightclick(under, node, placer, itemstack, return udef.on_rightclick(under, node, placer, itemstack,
pointed_thing) or itemstack pointed_thing) or itemstack
end end

View File

@ -319,7 +319,7 @@ end
-- Prevent decay of placed leaves -- Prevent decay of placed leaves
default.after_place_leaves = function(pos, placer, itemstack, pointed_thing) default.after_place_leaves = function(pos, placer, itemstack, pointed_thing)
if placer and not placer:get_player_control().sneak then if placer and placer:is_player() and not placer:get_player_control().sneak then
local node = minetest.get_node(pos) local node = minetest.get_node(pos)
node.param2 = 1 node.param2 = 1
minetest.set_node(pos, node) minetest.set_node(pos, node)

View File

@ -673,9 +673,7 @@ minetest.register_node("default:apple", {
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
after_place_node = function(pos, placer, itemstack) after_place_node = function(pos, placer, itemstack)
if placer:is_player() then
minetest.set_node(pos, {name = "default:apple", param2 = 1}) minetest.set_node(pos, {name = "default:apple", param2 = 1})
end
end, end,
}) })

View File

@ -389,7 +389,8 @@ minetest.register_tool("default:key", {
local node = minetest.get_node(under) local node = minetest.get_node(under)
local def = minetest.registered_nodes[node.name] local def = minetest.registered_nodes[node.name]
if def and def.on_rightclick and if def and def.on_rightclick and
not (placer and placer:get_player_control().sneak) then not (placer and placer:is_player() and
placer:get_player_control().sneak) then
return def.on_rightclick(under, node, placer, itemstack, return def.on_rightclick(under, node, placer, itemstack,
pointed_thing) or itemstack pointed_thing) or itemstack
end end

View File

@ -63,7 +63,8 @@ minetest.register_node("default:torch", {
local node = minetest.get_node(under) local node = minetest.get_node(under)
local def = minetest.registered_nodes[node.name] local def = minetest.registered_nodes[node.name]
if def and def.on_rightclick and if def and def.on_rightclick and
((not placer) or (placer and not placer:get_player_control().sneak)) then not (placer and placer:is_player() and
placer:get_player_control().sneak) then
return def.on_rightclick(under, node, placer, itemstack, return def.on_rightclick(under, node, placer, itemstack,
pointed_thing) or itemstack pointed_thing) or itemstack
end end

View File

@ -468,7 +468,9 @@ function default.sapling_on_place(itemstack, placer, pointed_thing,
local node = minetest.get_node_or_nil(pos) local node = minetest.get_node_or_nil(pos)
local pdef = node and minetest.registered_nodes[node.name] local pdef = node and minetest.registered_nodes[node.name]
if pdef and pdef.on_rightclick and not placer:get_player_control().sneak then if pdef and pdef.on_rightclick and
not (placer and placer:is_player() and
placer:get_player_control().sneak) then
return pdef.on_rightclick(pos, node, placer, itemstack, pointed_thing) return pdef.on_rightclick(pos, node, placer, itemstack, pointed_thing)
end end
@ -481,7 +483,7 @@ function default.sapling_on_place(itemstack, placer, pointed_thing,
end end
end end
local player_name = placer:get_player_name() local player_name = placer and placer:get_player_name() or ""
-- Check sapling position for protection -- Check sapling position for protection
if minetest.is_protected(pos, player_name) then if minetest.is_protected(pos, player_name) then
minetest.record_protection_violation(pos, player_name) minetest.record_protection_violation(pos, player_name)

View File

@ -266,7 +266,8 @@ function doors.register(name, def)
local node = minetest.get_node(pointed_thing.under) local node = minetest.get_node(pointed_thing.under)
local pdef = minetest.registered_nodes[node.name] local pdef = minetest.registered_nodes[node.name]
if pdef and pdef.on_rightclick and if pdef and pdef.on_rightclick and
not placer:get_player_control().sneak then not (placer and placer:is_player() and
placer:get_player_control().sneak) then
return pdef.on_rightclick(pointed_thing.under, return pdef.on_rightclick(pointed_thing.under,
node, placer, itemstack, pointed_thing) node, placer, itemstack, pointed_thing)
end end
@ -290,12 +291,12 @@ function doors.register(name, def)
return itemstack return itemstack
end end
local pn = placer:get_player_name() local pn = placer and placer:get_player_name() or ""
if minetest.is_protected(pos, pn) or minetest.is_protected(above, pn) then if minetest.is_protected(pos, pn) or minetest.is_protected(above, pn) then
return itemstack return itemstack
end end
local dir = minetest.dir_to_facedir(placer:get_look_dir()) local dir = placer and minetest.dir_to_facedir(placer:get_look_dir()) or 0
local ref = { local ref = {
{x = -1, y = 0, z = 0}, {x = -1, y = 0, z = 0},

View File

@ -144,12 +144,14 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname)
local under = minetest.get_node(pt.under) local under = minetest.get_node(pt.under)
local above = minetest.get_node(pt.above) local above = minetest.get_node(pt.above)
if minetest.is_protected(pt.under, placer:get_player_name()) then local player_name = placer and placer:get_player_name() or ""
minetest.record_protection_violation(pt.under, placer:get_player_name())
if minetest.is_protected(pt.under, player_name) then
minetest.record_protection_violation(pt.under, player_name)
return return
end end
if minetest.is_protected(pt.above, placer:get_player_name()) then if minetest.is_protected(pt.above, player_name) then
minetest.record_protection_violation(pt.above, placer:get_player_name()) minetest.record_protection_violation(pt.above, player_name)
return return
end end
@ -180,7 +182,7 @@ farming.place_seed = function(itemstack, placer, pointed_thing, plantname)
minetest.add_node(pt.above, {name = plantname, param2 = 1}) minetest.add_node(pt.above, {name = plantname, param2 = 1})
tick(pt.above) tick(pt.above)
if not (creative and creative.is_enabled_for if not (creative and creative.is_enabled_for
and creative.is_enabled_for(placer:get_player_name())) then and creative.is_enabled_for(player_name)) then
itemstack:take_item() itemstack:take_item()
end end
return itemstack return itemstack
@ -310,7 +312,8 @@ farming.register_plant = function(name, def)
local node = minetest.get_node(under) local node = minetest.get_node(under)
local udef = minetest.registered_nodes[node.name] local udef = minetest.registered_nodes[node.name]
if udef and udef.on_rightclick and if udef and udef.on_rightclick and
not (placer and placer:get_player_control().sneak) then not (placer and placer:is_player() and
placer:get_player_control().sneak) then
return udef.on_rightclick(under, node, placer, itemstack, return udef.on_rightclick(under, node, placer, itemstack,
pointed_thing) or itemstack pointed_thing) or itemstack
end end

View File

@ -278,7 +278,7 @@ minetest.register_node("flowers:waterlily", {
local pos = pointed_thing.above local pos = pointed_thing.above
local node = minetest.get_node(pointed_thing.under) local node = minetest.get_node(pointed_thing.under)
local def = minetest.registered_nodes[node.name] local def = minetest.registered_nodes[node.name]
local player_name = placer:get_player_name() local player_name = placer and placer:get_player_name() or ""
if def and def.on_rightclick then if def and def.on_rightclick then
return def.on_rightclick(pointed_thing.under, node, placer, itemstack, return def.on_rightclick(pointed_thing.under, node, placer, itemstack,

View File

@ -85,9 +85,10 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses)
end end
local pos = pointed_thing.under local pos = pointed_thing.under
local player_name = user and user:get_player_name() or ""
if minetest.is_protected(pos, user:get_player_name()) then if minetest.is_protected(pos, player_name) then
minetest.record_protection_violation(pos, user:get_player_name()) minetest.record_protection_violation(pos, player_name)
return return
end end
@ -133,8 +134,8 @@ screwdriver.handler = function(itemstack, user, pointed_thing, mode, uses)
minetest.check_for_falling(pos) minetest.check_for_falling(pos)
end end
if not (creative and creative.is_enabled_for if not (creative and creative.is_enabled_for and
and creative.is_enabled_for(user:get_player_name())) then creative.is_enabled_for(player_name)) then
itemstack:add_wear(65535 / ((uses or 200) - 1)) itemstack:add_wear(65535 / ((uses or 200) - 1))
end end

View File

@ -22,6 +22,7 @@ local function rotate_and_place(itemstack, placer, pointed_thing)
local p1 = pointed_thing.above local p1 = pointed_thing.above
local param2 = 0 local param2 = 0
if placer then
local placer_pos = placer:getpos() local placer_pos = placer:getpos()
if placer_pos then if placer_pos then
param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos)) param2 = minetest.dir_to_facedir(vector.subtract(p1, placer_pos))
@ -39,6 +40,7 @@ local function rotate_and_place(itemstack, placer, pointed_thing)
param2 = 21 param2 = 21
end end
end end
end
return minetest.item_place(itemstack, placer, pointed_thing, param2) return minetest.item_place(itemstack, placer, pointed_thing, param2)
end end
@ -152,8 +154,9 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
on_place = function(itemstack, placer, pointed_thing) on_place = function(itemstack, placer, pointed_thing)
local under = minetest.get_node(pointed_thing.under) local under = minetest.get_node(pointed_thing.under)
local wield_item = itemstack:get_name() local wield_item = itemstack:get_name()
local player_name = placer and placer:get_player_name() or ""
local creative_enabled = (creative and creative.is_enabled_for local creative_enabled = (creative and creative.is_enabled_for
and creative.is_enabled_for(placer:get_player_name())) and creative.is_enabled_for(player_name))
if under and under.name:find("stairs:slab_") then if under and under.name:find("stairs:slab_") then
-- place slab using under node orientation -- place slab using under node orientation
@ -169,9 +172,8 @@ function stairs.register_slab(subname, recipeitem, groups, images, description,
if not recipeitem then if not recipeitem then
return itemstack return itemstack
end end
local player_name = placer:get_player_name()
if minetest.is_protected(pointed_thing.under, player_name) and not if minetest.is_protected(pointed_thing.under, player_name) and not
minetest.check_player_privs(placer, "protection_bypass") then minetest.check_player_privs(player_name, "protection_bypass") then
minetest.record_protection_violation(pointed_thing.under, minetest.record_protection_violation(pointed_thing.under,
player_name) player_name)
return return