Fix shield priv behavior

This commit is contained in:
NO411 2022-02-13 16:39:49 +01:00
parent 7879bfa6ce
commit 75e9899b89
2 changed files with 42 additions and 12 deletions

View File

@ -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,16 +173,22 @@ 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)
privs.interact = interact
minetest.set_player_privs(player_name, privs)
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
player:hud_set_flags({wielditem = true})
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)
end)

View File

@ -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)
local player = minetest.get_player_by_name(name)
if player then
local meta = player:get_meta()
meta:set_int("fly_changed", 1)
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