
--
-- Wielditem mod
-- By Kaadmy, for Pixture
--

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,

	visual = "wielditem",
	visual_size = {x = 0.17, y = 0.17},

	hp_max = 1,

	physical = false,
	pointable = false,
	collide_with_objects = false,
	makes_footstep_sounds = false,
	static_save = false,

	_wielder = nil,

	on_activate = function(self, staticdata)
		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
			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

		local itemname = player:get_wielded_item():get_name()

		if itemname ~= "" then
			self.object:set_properties({wield_item = itemname, is_visible=true})
		else
			self.object:set_properties({is_visible=false})
		end
	end
})

minetest.register_on_joinplayer(function(player)
	minetest.after(3, function(player)
		if player and player:is_player() then
			attach_wielditem(player)
		end
	end, player)
end)

minetest.register_on_leaveplayer(function(player)
	local name = player:get_player_name()
	wielditem[name] = nil
end)

default.log("mod:wielditem", "loaded")
