forked from Mirrorlandia_minetest/minetest
Add basic protection support to builtin
This commit is contained in:
parent
2636c92075
commit
06a5eceb81
@ -218,6 +218,15 @@ function minetest.item_place_node(itemstack, placer, pointed_thing, param2)
|
|||||||
place_to = {x = under.x, y = under.y, z = under.z}
|
place_to = {x = under.x, y = under.y, z = under.z}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if minetest.is_protected(place_to, placer:get_player_name()) then
|
||||||
|
minetest.log("action", placer:get_player_name()
|
||||||
|
.. " tried to place " .. def.name
|
||||||
|
.. " at protected position "
|
||||||
|
.. minetest.pos_to_string(place_to))
|
||||||
|
minetest.record_protection_violation(place_to, placer:get_player_name())
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
minetest.log("action", placer:get_player_name() .. " places node "
|
minetest.log("action", placer:get_player_name() .. " places node "
|
||||||
.. def.name .. " at " .. minetest.pos_to_string(place_to))
|
.. def.name .. " at " .. minetest.pos_to_string(place_to))
|
||||||
|
|
||||||
@ -377,6 +386,15 @@ function minetest.node_dig(pos, node, digger)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if minetest.is_protected(pos, digger:get_player_name()) then
|
||||||
|
minetest.log("action", digger:get_player_name()
|
||||||
|
.. " tried to dig " .. node.name
|
||||||
|
.. " at protected position "
|
||||||
|
.. minetest.pos_to_string(pos))
|
||||||
|
minetest.record_protection_violation(pos, digger:get_player_name())
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
minetest.log('action', digger:get_player_name() .. " digs "
|
minetest.log('action', digger:get_player_name() .. " digs "
|
||||||
.. node.name .. " at " .. minetest.pos_to_string(pos))
|
.. node.name .. " at " .. minetest.pos_to_string(pos))
|
||||||
|
|
||||||
|
@ -106,3 +106,14 @@ function minetest.setting_get_pos(name)
|
|||||||
return minetest.string_to_pos(value)
|
return minetest.string_to_pos(value)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- To be overriden by protection mods
|
||||||
|
function minetest.is_protected(pos, name)
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
function minetest.record_protection_violation(pos, name)
|
||||||
|
for _, func in pairs(minetest.registered_on_protection_violation) do
|
||||||
|
func(pos, name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@ -344,4 +344,5 @@ minetest.registered_on_player_receive_fields, minetest.register_on_player_receiv
|
|||||||
minetest.registered_on_cheats, minetest.register_on_cheat = make_registration()
|
minetest.registered_on_cheats, minetest.register_on_cheat = make_registration()
|
||||||
minetest.registered_on_crafts, minetest.register_on_craft = make_registration()
|
minetest.registered_on_crafts, minetest.register_on_craft = make_registration()
|
||||||
minetest.registered_craft_predicts, minetest.register_craft_predict = make_registration()
|
minetest.registered_craft_predicts, minetest.register_craft_predict = make_registration()
|
||||||
|
minetest.registered_on_protection_violation, minetest.register_on_protection_violation = make_registration()
|
||||||
|
|
||||||
|
@ -1154,6 +1154,13 @@ minetest.register_on_craft(func(itemstack, player, old_craft_grid, craft_inv))
|
|||||||
minetest.register_craft_predict(func(itemstack, player, old_craft_grid, craft_inv))
|
minetest.register_craft_predict(func(itemstack, player, old_craft_grid, craft_inv))
|
||||||
^ The same as before, except that it is called before the player crafts, to make
|
^ The same as before, except that it is called before the player crafts, to make
|
||||||
^ craft prediction, and it should not change anything.
|
^ craft prediction, and it should not change anything.
|
||||||
|
minetest.register_on_protection_violation(func(pos, name))
|
||||||
|
^ Called by builtin and mods when a player violates protection at a position
|
||||||
|
(eg, digs a node or punches a protected entity).
|
||||||
|
^ The registered functions can be called using minetest.record_protection_violation
|
||||||
|
^ The provided function should check that the position is protected by the mod
|
||||||
|
calling this function before it prints a message, if it does, to allow for
|
||||||
|
multiple protection mods.
|
||||||
|
|
||||||
Other registration functions:
|
Other registration functions:
|
||||||
minetest.register_chatcommand(cmd, chatcommand definition)
|
minetest.register_chatcommand(cmd, chatcommand definition)
|
||||||
@ -1483,6 +1490,22 @@ minetest.deserialize(string) -> table
|
|||||||
^ Example: deserialize('return { ["foo"] = "bar" }') -> {foo='bar'}
|
^ Example: deserialize('return { ["foo"] = "bar" }') -> {foo='bar'}
|
||||||
^ Example: deserialize('print("foo")') -> nil (function call fails)
|
^ Example: deserialize('print("foo")') -> nil (function call fails)
|
||||||
^ error:[string "print("foo")"]:1: attempt to call global 'print' (a nil value)
|
^ error:[string "print("foo")"]:1: attempt to call global 'print' (a nil value)
|
||||||
|
minetest.is_protected(pos, name) -> bool
|
||||||
|
^ This function should be overriden by protection mods and should be used to
|
||||||
|
check if a player can interact at a position.
|
||||||
|
^ This function should call the old version of itself if the position is not
|
||||||
|
protected by the mod.
|
||||||
|
^ Example:
|
||||||
|
local old_is_protected = minetest.is_protected
|
||||||
|
function minetest.is_protected(pos, name)
|
||||||
|
if mymod:position_protected_from(pos, name) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return old_is_protected(pos, name)
|
||||||
|
end
|
||||||
|
minetest.record_protection_violation(pos, name)
|
||||||
|
^ This function calls functions registered with
|
||||||
|
minetest.register_on_protection_violation.
|
||||||
|
|
||||||
Global objects:
|
Global objects:
|
||||||
minetest.env - EnvRef of the server environment and world.
|
minetest.env - EnvRef of the server environment and world.
|
||||||
|
Loading…
Reference in New Issue
Block a user