From 75e9899b89bd894c2b7957e13fa6be3759b10045 Mon Sep 17 00:00:00 2001 From: NO411 Date: Sun, 13 Feb 2022 16:39:49 +0100 Subject: [PATCH] Fix shield priv behavior --- mods/ITEMS/mcl_shields/init.lua | 32 +++++++++++++++++++++++--------- mods/MISC/mcl_privs/init.lua | 22 +++++++++++++++++++--- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/mods/ITEMS/mcl_shields/init.lua b/mods/ITEMS/mcl_shields/init.lua index 27aa0fe4d..ac9451b80 100644 --- a/mods/ITEMS/mcl_shields/init.lua +++ b/mods/ITEMS/mcl_shields/init.lua @@ -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) \ No newline at end of file diff --git a/mods/MISC/mcl_privs/init.lua b/mods/MISC/mcl_privs/init.lua index f06ff3582..aa17ba785 100644 --- a/mods/MISC/mcl_privs/init.lua +++ b/mods/MISC/mcl_privs/init.lua @@ -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 \ No newline at end of file