summaryrefslogblamecommitdiffstats
path: root/MCServer/Plugins/ProtectionAreas/HookHandlers.lua
blob: 4f1e3755ec1a75e655f924ce34b188850e0ec4d2 (plain) (tree)

























                                                                                 
                                                       







































































                                                                                                                            

-- HookHandlers.lua
-- Implements the handlers for individual hooks





function InitializeHooks(a_Plugin)
	local PlgMgr = cRoot:Get():GetPluginManager();
	PlgMgr:AddHook(a_Plugin, cPluginManager.HOOK_DISCONNECT);
	PlgMgr:AddHook(a_Plugin, cPluginManager.HOOK_PLAYER_JOINED);
	PlgMgr:AddHook(a_Plugin, cPluginManager.HOOK_PLAYER_LEFT_CLICK);
	PlgMgr:AddHook(a_Plugin, cPluginManager.HOOK_PLAYER_RIGHT_CLICK);
end





function OnDisconnect(a_Player, a_Reason)
	-- Remove the player's cProtectionArea object
	-- TODO: What if there are two players with the same name? need to check
	g_PlayerAreas[a_Player:GetName()] = nil;
	
	-- If the player is a VIP, they had a command state, remove that as well
	g_CommandStates[a_Player:GetUniqueID()] = nil;
	
	return false;
end;





function OnPlayerJoined(a_Player)
	-- Create a new cProtectionArea for this player
	g_PlayerAreas[a_Player:GetName()] = cPlayerAreas:new();

	-- TODO: Load the protection areas for this player

	return false;
end





function OnPlayerLeftClick(a_Player, a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, a_Status)
	-- If the player has lclked with the wand; regardless of their permissions, let's set the coords:
	if (cConfig:IsWand(a_Player:GetEquippedItem())) then
		-- BlockFace < 0 means "use item", for which the coords are not given by the client
		if (a_BlockFace < 0) then
			return true;
		end

		-- Convert the clicked coords into the block space
		a_BlockX, a_BlockY, a_BlockZ = AddFaceDirection(a_BlockX, a_BlockY, a_BlockZ, a_BlockFace);

		-- Set the coords in the CommandState
		GetCommandStateForPlayer(a_Player):SetCoords1(a_BlockX, a_BlockY, a_BlockZ);
		a_Player:SendMessage("Coords1 set as {" .. a_BlockX .. ", " .. a_BlockY .. ", " .. a_BlockZ .."}.");
		return true;
	end;
	
	-- TODO: Check the player areas to see whether to disable this action
	
	return false;
end





function OnPlayerRightClick(a_Player, a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, a_CursorX, a_CursorY, a_CursorZ, a_Status)
	-- If the player has rclked with the wand; regardless of their permissions, let's set the coords
	if (cConfig:IsWand(a_Player:GetEquippedItem())) then
		-- BlockFace < 0 means "use item", for which the coords are not given by the client
		if (a_BlockFace < 0) then
			return true;
		end

		-- Convert the clicked coords into the block space
		a_BlockX, a_BlockY, a_BlockZ = AddFaceDirection(a_BlockX, a_BlockY, a_BlockZ, a_BlockFace);
		
		-- Set the coords in the CommandState
		GetCommandStateForPlayer(a_Player):SetCoords2(a_BlockX, a_BlockY, a_BlockZ);
		a_Player:SendMessage("Coords2 set as {" .. a_BlockX .. ", " .. a_BlockY .. ", " .. a_BlockZ .."}.");
		return true;
	end;
	
	-- TODO: Check the player areas to see whether to disable this action

	return false;
end