diff --git a/mods/headbars/init.lua b/mods/headbars/init.lua index 2e5bdb4..aad4c3d 100644 --- a/mods/headbars/init.lua +++ b/mods/headbars/init.lua @@ -58,11 +58,16 @@ minetest.register_entity( local wielder = minetest.get_player_by_name(name) if wielder and wielder:is_player() then self._wielder = wielder + else + minetest.log("info", "[headbars] Attempted to spawn orphan HP bar entity!") + self.object:remove() + return end end, on_step = function(self, dtime) local ent = self._wielder + -- Remove orphan HP bar if ent == nil or (minetest.get_player_by_name(ent:get_player_name()) == nil) then self.object:remove() return @@ -74,6 +79,7 @@ minetest.register_entity( local hp = ent:get_hp() + -- Update displayed hearts self.object:set_properties({textures = {headbars.get_sprite("heart.png", "headbars_heart_bg.png", 20, hp)}}) end, }) diff --git a/mods/wielditem/init.lua b/mods/wielditem/init.lua index d5077a8..5b92216 100644 --- a/mods/wielditem/init.lua +++ b/mods/wielditem/init.lua @@ -9,16 +9,10 @@ wielditem = {} local update_time = 1 local timer = 10 -- needs to be more than update_time -minetest.register_craftitem( - "wielditem:null", - { - wield_image = "blank.png" - }) - minetest.register_entity( "wielditem:wielditem", { - textures = {"default:broadsword"}, + is_visible = false, visual = "wielditem", visual_size = {x = 0.17, y = 0.17}, @@ -29,10 +23,26 @@ minetest.register_entity( pointable = false, collide_with_objects = false, makes_footstep_sounds = false, + static_save = false, + _wielder = nil, + + on_activate = function(self, staticdata) + local name = staticdata + local wielder = minetest.get_player_by_name(name) + if wielder and wielder:is_player() then + self._wielder = wielder + else + -- Remove orphan wielditem + minetest.log("info", "[wielditem] Attempted to spawn orphan wielditem entity!") + self.object:remove() + end + self.object:set_armor_groups({immortal=1}) + end, on_step = function(self, dtime) - local player = self.wielder + local player = self._wielder + -- Remove orphan wielditem if player == nil or (minetest.get_player_by_name(player:get_player_name()) == nil) then self.object:remove() return @@ -41,9 +51,9 @@ minetest.register_entity( local itemname = player:get_wielded_item():get_name() if itemname ~= "" then - self.object:set_properties({textures = {itemname}}) + self.object:set_properties({textures = {itemname}, is_visible=true}) else - self.object:set_properties({textures = {"wielditem:null"}}) + self.object:set_properties({is_visible=false}) end end }) @@ -52,19 +62,17 @@ local function attach_wielditem(player) local name = player:get_player_name() local pos = player:get_pos() - wielditem[name] = minetest.add_entity(pos, "wielditem:wielditem") + wielditem[name] = minetest.add_entity(pos, "wielditem:wielditem", name) wielditem[name]:set_attach(player, "right_arm", {x = -1.5, y = 5.7, z = 2.5}, {x = 90, y = -45, z = 270}) - wielditem[name]:get_luaentity().wielder = player + wielditem[name]:get_luaentity()._wielder = player end -local function detach_wielditem(player) - local name = player:get_player_name() - - wielditem[name]:remove() - wielditem[name] = nil -end - -minetest.register_on_joinplayer(attach_wielditem) -minetest.register_on_leaveplayer(detach_wielditem) +minetest.register_on_joinplayer(function(player) + minetest.after(1, function(player) + if player and player:is_player() then + attach_wielditem(player) + end + end, player) +end) default.log("mod:wielditem", "loaded")