diff --git a/mods/wielditem/init.lua b/mods/wielditem/init.lua index 89f8dbe..eb49acc 100644 --- a/mods/wielditem/init.lua +++ b/mods/wielditem/init.lua @@ -9,6 +9,15 @@ local wielditem = {} local update_time = 1 local timer = 10 -- needs to be more than update_time +local function attach_wielditem(player) + local name = player:get_player_name() + local pos = player:get_pos() + + 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 +end + minetest.register_entity("wielditem:wielditem", { is_visible = false, @@ -26,47 +35,40 @@ minetest.register_entity("wielditem:wielditem", { _wielder = nil, on_activate = function(self, staticdata) - local name = staticdata - local wielder = minetest.get_player_by_name(name) + self.object:set_armor_groups({immortal=1}) + end, + on_deactivate = function(self) + -- Respawn wielditem entity if neccessary + local wielder = self._wielder if wielder and wielder:is_player() then - self._wielder = wielder - else - -- Remove orphan wielditem - minetest.log("info", "[wielditem] Attempted to spawn orphan wielditem entity!") + minetest.after(3, function(player) + if player and player:is_player() then + attach_wielditem(player) + end + end, wielder) + end + end, + on_step = function(self, dtime) + local player = self._wielder + -- Remove orphan wielditem + if player == nil or (minetest.get_player_by_name(player:get_player_name()) == nil) then + minetest.log("info", "[wielditem] Removed orphan wielditem!") self.object:remove() return end - self.object:set_armor_groups({immortal=1}) - end, - on_step = function(self, dtime) - 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 - end - local itemname = player:get_wielded_item():get_name() + local itemname = player:get_wielded_item():get_name() - if itemname ~= "" then - self.object:set_properties({textures = {itemname}, is_visible=true}) - else + if itemname ~= "" then + self.object:set_properties({wield_item = itemname, is_visible=true}) + else self.object:set_properties({is_visible=false}) - end + end end }) -local function attach_wielditem(player) - local name = player:get_player_name() - local pos = player:get_pos() - - 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 -end - minetest.register_on_joinplayer(function(player) - minetest.after(1, function(player) + minetest.after(3, function(player) if player and player:is_player() then attach_wielditem(player) end