ctf_flag.register_on_pick_up(function(name)
	ctf_classes.update(minetest.get_player_by_name(name))
end)

ctf_flag.register_on_drop(function(name)
	ctf_classes.update(minetest.get_player_by_name(name))
end)

local old_func = ctf_flag.on_punch
local function on_punch(pos, node, player, ...)
	local class = ctf_classes.get(player)
	if not class.properties.can_capture then
		local pname = player:get_player_name()
		local flag = ctf_flag.get(pos)
		local team = ctf.player(pname).team
		if flag and flag.team and team and team ~= flag.team then
			minetest.chat_send_player(pname,
				"You need to change classes to capture the flag!")
			return
		end
	end

	return old_func(pos, node, player, ...)
end

local function show(_, _, player)
	local can_change, reason = ctf_classes.can_change(player)
	if not can_change then
		minetest.chat_send_player(player:get_player_name(), reason)
	else
		ctf_classes.show_gui(player:get_player_name(), player)
	end
end

ctf_flag.on_rightclick = show
ctf_flag.on_punch = on_punch