summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-05-26 21:21:24 +0200
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2013-05-26 21:21:24 +0200
commit9a25f76697c2cf9c48e0ae7ff63b574436e45478 (patch)
tree869870fd8f7dedfc694f222c4c15146240938a72
parentProtectionAreas: Initial project import, skeleton code (diff)
downloadcuberite-9a25f76697c2cf9c48e0ae7ff63b574436e45478.tar
cuberite-9a25f76697c2cf9c48e0ae7ff63b574436e45478.tar.gz
cuberite-9a25f76697c2cf9c48e0ae7ff63b574436e45478.tar.bz2
cuberite-9a25f76697c2cf9c48e0ae7ff63b574436e45478.tar.lz
cuberite-9a25f76697c2cf9c48e0ae7ff63b574436e45478.tar.xz
cuberite-9a25f76697c2cf9c48e0ae7ff63b574436e45478.tar.zst
cuberite-9a25f76697c2cf9c48e0ae7ff63b574436e45478.zip
-rw-r--r--MCServer/Plugins/ProtectionAreas/CommandState.lua89
-rw-r--r--MCServer/Plugins/ProtectionAreas/Config.lua33
2 files changed, 122 insertions, 0 deletions
diff --git a/MCServer/Plugins/ProtectionAreas/CommandState.lua b/MCServer/Plugins/ProtectionAreas/CommandState.lua
new file mode 100644
index 000000000..f9d0e28db
--- /dev/null
+++ b/MCServer/Plugins/ProtectionAreas/CommandState.lua
@@ -0,0 +1,89 @@
+
+-- CommandState.lua
+
+-- Implements the cCommandState class representing a command state for each VIP player
+
+--[[
+The command state holds internal info, such as the coords they selected using the wand
+The command state needs to be held in a per-entity manner, so that we can support multiple logins
+from the same account (just for the fun of it)
+The OOP class implementation follows the PiL 16.1
+
+Also, a global table g_CommandStates is the map of PlayerEntityID -> cCommandState
+--]]
+
+
+
+
+
+cCommandState = {
+ -- Default coords
+ m_Coords1 = {x = 0, y = 0, z = 0};
+ m_Coords2 = {x = 0, y = 0, z = 0};
+};
+
+g_CommandStates = {};
+
+
+
+
+
+function cCommandState:new(obj)
+ obj = obj or {};
+ setmetatable(obj, self);
+ self.__index = self;
+ return obj;
+end
+
+
+
+
+
+--- Returns the current coord pair as a cCuboid object
+function cCommandState.GetCurrentCuboid()
+ local res = cCuboid(
+ self.Coords1.x, self.Coords1.y, self.Coords1.z,
+ self.Coords2.x, self.Coords2.y, self.Coords2.z
+ );
+ res:Sort();
+ return res;
+end
+
+
+
+
+--- Sets the first set of coords (upon rclk with a wand)
+function cCommandState:SetCoords1(a_BlockX, a_BlockY, a_BlockZ)
+ self.m_Coords1.x = a_BlockX;
+ self.m_Coords1.y = a_BlockY;
+ self.m_Coords1.z = a_BlockZ;
+end
+
+
+
+
+
+--- Sets the second set of coords (upon lclk with a wand)
+function cCommandState:SetCoords2(a_BlockX, a_BlockY, a_BlockZ)
+ self.m_Coords2.x = a_BlockX;
+ self.m_Coords2.y = a_BlockY;
+ self.m_Coords2.z = a_BlockZ;
+end
+
+
+
+
+
+--- Returns the cCommandState for the specified player; creates one if not existant
+function GetCommandStateForPlayer(a_Player)
+ local res = g_CommandStates[a_Player:GetUniqueID()];
+ if (res == nil) then
+ res = cCommandState:new();
+ g_CommandStates[a_Player:GetUniqueID()] = res;
+ end
+ return res;
+end;
+
+
+
+
diff --git a/MCServer/Plugins/ProtectionAreas/Config.lua b/MCServer/Plugins/ProtectionAreas/Config.lua
new file mode 100644
index 000000000..c9b131f5c
--- /dev/null
+++ b/MCServer/Plugins/ProtectionAreas/Config.lua
@@ -0,0 +1,33 @@
+
+-- Config.lua
+
+-- Implements the cConfig class that holds the general plugin configuration
+
+
+
+
+
+cConfig = {
+ m_Wand = cItem(E_ITEM_STICK, 1, 1); -- TODO: Make this configurable by loading it from an INI file
+};
+
+
+
+
+
+--- Returns true if a_Item is the wand tool item
+function cConfig:IsWand(a_Item)
+ return (
+ (a_Item.m_ItemType == self.m_Wand.m_ItemType) and
+ (a_Item.m_ItemDamage == self.m_Wand.m_ItemDamage)
+ );
+end
+
+
+
+
+
+--- Returns the wand tool item as a cItem object
+function cConfig:GetWandItem()
+ return self.m_Wand;
+end \ No newline at end of file