Fix wielditem not spawning reliably
This commit is contained in:
parent
ab2a67fa91
commit
c7e33f828f
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue