Add support for Minetest protection API
This commit is contained in:
parent
74d2970add
commit
1d9e7a44ae
@ -18,10 +18,14 @@ for b=1, #water_buckets do
|
|||||||
liquids_pointable = true,
|
liquids_pointable = true,
|
||||||
groups = { bucket = 2, bucket_water = 1 },
|
groups = { bucket = 2, bucket_water = 1 },
|
||||||
on_place = function(itemstack, user, pointed_thing)
|
on_place = function(itemstack, user, pointed_thing)
|
||||||
if pointed_thing.type ~= "node" then return end
|
if pointed_thing.type ~= "node" then return itemstack end
|
||||||
|
|
||||||
local pos_protected = minetest.get_pointed_thing_position(pointed_thing, true)
|
local pos_protected = minetest.get_pointed_thing_position(pointed_thing, true)
|
||||||
if minetest.is_protected(pos_protected, user) then return end
|
if minetest.is_protected(pos_protected, user:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(user, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos_protected, user:get_player_name())
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
local inv=user:get_inventory()
|
local inv=user:get_inventory()
|
||||||
|
|
||||||
@ -69,6 +73,13 @@ minetest.register_craftitem(
|
|||||||
on_use = function(itemstack, user, pointed_thing)
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
if pointed_thing.type ~= "node" then return end
|
if pointed_thing.type ~= "node" then return end
|
||||||
|
|
||||||
|
local pos_protected = minetest.get_pointed_thing_position(pointed_thing, true)
|
||||||
|
if minetest.is_protected(pos_protected, user:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(user, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos_protected, user:get_player_name())
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local nodename=minetest.get_node(pointed_thing.under).name
|
local nodename=minetest.get_node(pointed_thing.under).name
|
||||||
|
|
||||||
local replace_bucket = function(itemstack, new_bucket)
|
local replace_bucket = function(itemstack, new_bucket)
|
||||||
|
@ -1,5 +1,24 @@
|
|||||||
local S = minetest.get_translator("default")
|
local S = minetest.get_translator("default")
|
||||||
|
|
||||||
|
local protection_check_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local protection_check_put_take = function(pos, listname, index, stack, player)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return stack:get_count()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Chest and bookshelf
|
-- Chest and bookshelf
|
||||||
|
|
||||||
minetest.register_node(
|
minetest.register_node(
|
||||||
@ -22,6 +41,9 @@ minetest.register_node(
|
|||||||
|
|
||||||
inv:set_size("main", 8 * 4)
|
inv:set_size("main", 8 * 4)
|
||||||
end,
|
end,
|
||||||
|
-- Unlike other inventory nodes in this game, chests are NOT subject to protection.
|
||||||
|
-- This is done to allow something like "public chests" in protected areas.
|
||||||
|
-- To protect their belongings, players are supposed locked chests instead.
|
||||||
can_dig = function(pos, player)
|
can_dig = function(pos, player)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
@ -66,6 +88,9 @@ minetest.register_node(
|
|||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
inv:set_size("main", 4*2)
|
inv:set_size("main", 4*2)
|
||||||
end,
|
end,
|
||||||
|
allow_metadata_inventory_move = protection_check_move,
|
||||||
|
allow_metadata_inventory_put = protection_check_put_take,
|
||||||
|
allow_metadata_inventory_take = protection_check_put_take,
|
||||||
can_dig = function(pos,player)
|
can_dig = function(pos,player)
|
||||||
local meta = minetest.get_meta(pos);
|
local meta = minetest.get_meta(pos);
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
|
@ -96,6 +96,13 @@ minetest.register_craftitem(
|
|||||||
on_place = function(itemstack, user, pointed_thing)
|
on_place = function(itemstack, user, pointed_thing)
|
||||||
local pos = pointed_thing.above
|
local pos = pointed_thing.above
|
||||||
|
|
||||||
|
local pos_protected = minetest.get_pointed_thing_position(pointed_thing, true)
|
||||||
|
if minetest.is_protected(pos_protected, user:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(user, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos_protected, user:get_player_name())
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
local undernode = minetest.get_node(pointed_thing.under)
|
local undernode = minetest.get_node(pointed_thing.under)
|
||||||
|
|
||||||
local diff = vector.subtract(pointed_thing.above, pointed_thing.under)
|
local diff = vector.subtract(pointed_thing.above, pointed_thing.under)
|
||||||
|
@ -61,6 +61,25 @@ form_furnace = form_furnace .. "image[3.25,1.75;1,1;ui_arrow_bg.png^[transformR2
|
|||||||
|
|
||||||
default.ui.register_page("default_furnace_inactive", form_furnace)
|
default.ui.register_page("default_furnace_inactive", form_furnace)
|
||||||
|
|
||||||
|
local protection_check_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local protection_check_put_take = function(pos, listname, index, stack, player)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return stack:get_count()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_node(
|
minetest.register_node(
|
||||||
"default:furnace",
|
"default:furnace",
|
||||||
{
|
{
|
||||||
@ -81,6 +100,9 @@ minetest.register_node(
|
|||||||
inv:set_size("src", 1)
|
inv:set_size("src", 1)
|
||||||
inv:set_size("dst", 4)
|
inv:set_size("dst", 4)
|
||||||
end,
|
end,
|
||||||
|
allow_metadata_inventory_move = protection_check_move,
|
||||||
|
allow_metadata_inventory_put = protection_check_put_take,
|
||||||
|
allow_metadata_inventory_take = protection_check_put_take,
|
||||||
can_dig = function(pos,player)
|
can_dig = function(pos,player)
|
||||||
local meta = minetest.get_meta(pos);
|
local meta = minetest.get_meta(pos);
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
@ -117,6 +139,9 @@ minetest.register_node(
|
|||||||
inv:set_size("src", 1)
|
inv:set_size("src", 1)
|
||||||
inv:set_size("dst", 4)
|
inv:set_size("dst", 4)
|
||||||
end,
|
end,
|
||||||
|
allow_metadata_inventory_move = protection_check_move,
|
||||||
|
allow_metadata_inventory_put = protection_check_put_take,
|
||||||
|
allow_metadata_inventory_take = protection_check_put_take,
|
||||||
can_dig = function(pos,player)
|
can_dig = function(pos,player)
|
||||||
local meta = minetest.get_meta(pos);
|
local meta = minetest.get_meta(pos);
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
|
@ -33,6 +33,11 @@ minetest.register_node(
|
|||||||
end,
|
end,
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
on_receive_fields = function(pos, formname, fields, sender)
|
||||||
if fields.text == nil then return end
|
if fields.text == nil then return end
|
||||||
|
if minetest.is_protected(pos, sender:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(sender, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, sender:get_player_name())
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local text = fields.text
|
local text = fields.text
|
||||||
if string.len(text) > SIGN_MAX_TEXT_LENGTH then
|
if string.len(text) > SIGN_MAX_TEXT_LENGTH then
|
||||||
|
@ -709,6 +709,12 @@ minetest.register_tool(
|
|||||||
if pointed_thing.type ~= "node" then return end
|
if pointed_thing.type ~= "node" then return end
|
||||||
|
|
||||||
local pos = pointed_thing.under
|
local pos = pointed_thing.under
|
||||||
|
if minetest.is_protected(pos, user:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(user, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, user:get_player_name())
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
local nodename = node.name
|
local nodename = node.name
|
||||||
|
|
||||||
|
@ -184,6 +184,25 @@ minetest.register_craftitem(
|
|||||||
|
|
||||||
-- Nodes
|
-- Nodes
|
||||||
|
|
||||||
|
local protection_check_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local protection_check_put_take = function(pos, listname, index, stack, player)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return stack:get_count()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_node(
|
minetest.register_node(
|
||||||
"jewels:bench",
|
"jewels:bench",
|
||||||
{
|
{
|
||||||
@ -209,10 +228,18 @@ minetest.register_node(
|
|||||||
|
|
||||||
return inv:is_empty("main")
|
return inv:is_empty("main")
|
||||||
end,
|
end,
|
||||||
|
allow_metadata_inventory_move = protection_check_move,
|
||||||
|
allow_metadata_inventory_put = protection_check_put_take,
|
||||||
|
allow_metadata_inventory_take = protection_check_put_take,
|
||||||
on_punch = function(pos, node, player, pointed_thing)
|
on_punch = function(pos, node, player, pointed_thing)
|
||||||
local itemstack = player:get_wielded_item()
|
local itemstack = player:get_wielded_item()
|
||||||
|
local itemstack_changed = false
|
||||||
if itemstack:get_name() == "jewels:jewel" then
|
if itemstack:get_name() == "jewels:jewel" then
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return
|
||||||
|
end
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
|
|
||||||
@ -223,6 +250,7 @@ minetest.register_node(
|
|||||||
|
|
||||||
if not minetest.settings:get_bool("creative_mode") then
|
if not minetest.settings:get_bool("creative_mode") then
|
||||||
itemstack:take_item()
|
itemstack:take_item()
|
||||||
|
itemstack_changed = true
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.sound_play({name="jewels_jewelling_a_tool"}, {gain=0.8, pos=pos, max_hear_distance=8})
|
minetest.sound_play({name="jewels_jewelling_a_tool"}, {gain=0.8, pos=pos, max_hear_distance=8})
|
||||||
@ -233,7 +261,9 @@ minetest.register_node(
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if itemstack_changed then
|
||||||
player:set_wielded_item(itemstack)
|
player:set_wielded_item(itemstack)
|
||||||
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -63,6 +63,12 @@ minetest.register_tool(
|
|||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
local pos = pointed_thing.under
|
local pos = pointed_thing.under
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
if minetest.get_item_group(node.name, "locked") == 0 then
|
if minetest.get_item_group(node.name, "locked") == 0 then
|
||||||
return itemstack
|
return itemstack
|
||||||
@ -197,6 +203,11 @@ minetest.register_node(
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_move = function(pos, from_l, from_i, to_l, to_i, cnt, player)
|
allow_metadata_inventory_move = function(pos, from_l, from_i, to_l, to_i, cnt, player)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return 0
|
||||||
|
end
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
if locks.is_locked(meta, player) then
|
if locks.is_locked(meta, player) then
|
||||||
return 0
|
return 0
|
||||||
@ -204,6 +215,11 @@ minetest.register_node(
|
|||||||
return cnt
|
return cnt
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_put = function(pos, listname, index, itemstack, player)
|
allow_metadata_inventory_put = function(pos, listname, index, itemstack, player)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return 0
|
||||||
|
end
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
if locks.is_locked(meta, player) then
|
if locks.is_locked(meta, player) then
|
||||||
return 0
|
return 0
|
||||||
@ -211,6 +227,11 @@ minetest.register_node(
|
|||||||
return itemstack:get_count()
|
return itemstack:get_count()
|
||||||
end,
|
end,
|
||||||
allow_metadata_inventory_take = function(pos, listname, index, itemstack, player)
|
allow_metadata_inventory_take = function(pos, listname, index, itemstack, player)
|
||||||
|
if minetest.is_protected(pos, player:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(player, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, player:get_player_name())
|
||||||
|
return 0
|
||||||
|
end
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
if locks.is_locked(meta, player) then
|
if locks.is_locked(meta, player) then
|
||||||
return 0
|
return 0
|
||||||
|
@ -1600,8 +1600,13 @@ function mobs:register_egg(mob, desc, background)
|
|||||||
return itemstack
|
return itemstack
|
||||||
end
|
end
|
||||||
local pos = pointed_thing.above
|
local pos = pointed_thing.above
|
||||||
if pointed_thing.above
|
if pointed_thing.above then
|
||||||
and not minetest.is_protected(pos, placer:get_player_name()) then
|
if minetest.is_protected(pos, placer:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(placer, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, placer:get_player_name())
|
||||||
|
return itemstack
|
||||||
|
end
|
||||||
|
|
||||||
pos.y = pos.y + 0.5
|
pos.y = pos.y + 0.5
|
||||||
local mob = minetest.add_entity(pos, mob)
|
local mob = minetest.add_entity(pos, mob)
|
||||||
local ent = mob:get_luaentity()
|
local ent = mob:get_luaentity()
|
||||||
|
@ -135,7 +135,12 @@ if minetest.settings:get_bool("music_enable") then
|
|||||||
music.stop(pos)
|
music.stop(pos)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_rightclick = function(pos)
|
on_rightclick = function(pos, node, clicker)
|
||||||
|
if minetest.is_protected(pos, clicker:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(clicker, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, clicker:get_player_name())
|
||||||
|
return
|
||||||
|
end
|
||||||
music.toggle(pos)
|
music.toggle(pos)
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
@ -265,6 +265,11 @@ minetest.register_node(
|
|||||||
local itemname = item:get_name()
|
local itemname = item:get_name()
|
||||||
|
|
||||||
if itemname == "default:flint_and_steel" then
|
if itemname == "default:flint_and_steel" then
|
||||||
|
if minetest.is_protected(pos, puncher:get_player_name()) and
|
||||||
|
not minetest.check_player_privs(puncher, "protection_bypass") then
|
||||||
|
minetest.record_protection_violation(pos, puncher:get_player_name())
|
||||||
|
return
|
||||||
|
end
|
||||||
if not minetest.settings:get_bool("creative_mode") then
|
if not minetest.settings:get_bool("creative_mode") then
|
||||||
item:add_wear(800)
|
item:add_wear(800)
|
||||||
puncher:set_wielded_item(item)
|
puncher:set_wielded_item(item)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user