forked from VoxeLibre/VoxeLibre
Fix shield priv behavior
This commit is contained in:
parent
7879bfa6ce
commit
75e9899b89
|
@ -75,7 +75,11 @@ minetest.register_entity("mcl_shields:shield_entity", {
|
|||
local item = wielded_item(player, i)
|
||||
|
||||
if item ~= "mcl_shields:shield" and item ~= "mcl_shields:shield_enchanted" then
|
||||
local meta_texture = player:get_wielded_item():get_meta():get_string("mcl_shields:shield_custom_pattern_texture")
|
||||
local itemstack = player:get_wielded_item()
|
||||
if i == 1 then
|
||||
itemstack = player:get_inventory():get_stack("offhand", 1)
|
||||
end
|
||||
local meta_texture = itemstack:get_meta():get_string("mcl_shields:shield_custom_pattern_texture")
|
||||
if meta_texture ~= "" then
|
||||
shield_texture = meta_texture
|
||||
else
|
||||
|
@ -169,17 +173,23 @@ local function set_shield(player, block, i)
|
|||
end
|
||||
end
|
||||
local shield = mcl_shields.players[player].shields[i]
|
||||
if shield then
|
||||
shield:get_luaentity()._blocking = block
|
||||
end
|
||||
if not shield then return end
|
||||
local luaentity = shield:get_luaentity()
|
||||
if not luaentity then return end
|
||||
luaentity._blocking = block
|
||||
end
|
||||
|
||||
local function set_interact(player, interact)
|
||||
local player_name = player:get_player_name()
|
||||
local privs = minetest.get_player_privs(player_name)
|
||||
if privs.interact ~= interact then
|
||||
local meta = player:get_meta()
|
||||
if meta:get_int("ineract_revoked") ~= 1 then
|
||||
privs.interact = interact
|
||||
minetest.set_player_privs(player_name, privs)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local shield_hud = {}
|
||||
|
||||
|
@ -190,7 +200,12 @@ local function remove_shield_hud(player)
|
|||
set_shield(player, false, 1)
|
||||
set_shield(player, false, 2)
|
||||
end
|
||||
|
||||
local hf = player:hud_get_flags()
|
||||
if not hf.wielditem then
|
||||
player:hud_set_flags({wielditem = true})
|
||||
end
|
||||
|
||||
playerphysics.remove_physics_factor(player, "speed", "shield_speed")
|
||||
set_interact(player, true)
|
||||
end
|
||||
|
@ -452,6 +467,5 @@ minetest.register_on_joinplayer(function(player)
|
|||
shields = {},
|
||||
blocking = 0,
|
||||
}
|
||||
mcl_shields.players[player].blocking = 0
|
||||
remove_shield_hud(player)
|
||||
end)
|
|
@ -20,10 +20,26 @@ end)
|
|||
|
||||
for _, action in pairs({"grant", "revoke"}) do
|
||||
minetest["register_on_priv_" .. action](function(name, _, priv)
|
||||
if priv == "fly" then
|
||||
local player = minetest.get_player_by_name(name)
|
||||
if player then
|
||||
local meta = player:get_meta()
|
||||
|
||||
if priv == "fly" then
|
||||
meta:set_int("fly_changed", 1)
|
||||
end
|
||||
|
||||
--[[
|
||||
so e.g. hackers who have been revoked of the interact privilege
|
||||
will not automatically get the interact privilege through the mcl shields code back
|
||||
]]
|
||||
|
||||
if priv == "interact" then
|
||||
if action == "revoke" then
|
||||
meta:set_int("ineract_revoked", 1)
|
||||
else
|
||||
meta:set_int("ineract_revoked", 0)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
Loading…
Reference in New Issue