diff options
Diffstat (limited to '')
-rw-r--r-- | MCServer/Plugins/ProtectionAreas/HookHandlers.lua | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/MCServer/Plugins/ProtectionAreas/HookHandlers.lua b/MCServer/Plugins/ProtectionAreas/HookHandlers.lua new file mode 100644 index 000000000..21ac6ef4d --- /dev/null +++ b/MCServer/Plugins/ProtectionAreas/HookHandlers.lua @@ -0,0 +1,99 @@ +
+-- 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
+ 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
+
+
+
+
|