diff options
author | Mattes D <github@xoft.cz> | 2015-08-26 10:58:51 +0200 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2015-09-05 22:01:21 +0200 |
commit | dac97826f7d0c9b9135c1a08c4d5f16b61494bd1 (patch) | |
tree | ec17a9703fe734956e4f151cb5306befc4fd7571 /Server/Plugins/DiamondMover/DiamondMover.lua | |
parent | Merge pull request #2459 from cuberite/fixes (diff) | |
download | cuberite-dac97826f7d0c9b9135c1a08c4d5f16b61494bd1.tar cuberite-dac97826f7d0c9b9135c1a08c4d5f16b61494bd1.tar.gz cuberite-dac97826f7d0c9b9135c1a08c4d5f16b61494bd1.tar.bz2 cuberite-dac97826f7d0c9b9135c1a08c4d5f16b61494bd1.tar.lz cuberite-dac97826f7d0c9b9135c1a08c4d5f16b61494bd1.tar.xz cuberite-dac97826f7d0c9b9135c1a08c4d5f16b61494bd1.tar.zst cuberite-dac97826f7d0c9b9135c1a08c4d5f16b61494bd1.zip |
Diffstat (limited to 'Server/Plugins/DiamondMover/DiamondMover.lua')
-rw-r--r-- | Server/Plugins/DiamondMover/DiamondMover.lua | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Server/Plugins/DiamondMover/DiamondMover.lua b/Server/Plugins/DiamondMover/DiamondMover.lua new file mode 100644 index 000000000..d3e70acfc --- /dev/null +++ b/Server/Plugins/DiamondMover/DiamondMover.lua @@ -0,0 +1,85 @@ + +-- DiamondMover.lua + +-- An example Lua plugin using the cBlockArea object +-- When a player rclks with a diamond in their hand, an area around the clicked block is moved in the direction the player is facing + + + + + +-- Global variables +MOVER_SIZE_X = 4; +MOVER_SIZE_Y = 4; +MOVER_SIZE_Z = 4; + + + + + +function Initialize(Plugin) + Plugin:SetName("DiamondMover"); + Plugin:SetVersion(1); + + cPluginManager.AddHook(cPluginManager.HOOK_PLAYER_USED_ITEM, OnPlayerUsedItem); + + LOG("Initialized " .. Plugin:GetName() .. " v." .. Plugin:GetVersion()); + return true; +end + + + + + +function OnPlayerUsedItem(Player, BlockX, BlockY, BlockZ, BlockFace, CursorX, CursorY, CursorZ) + + -- Don't check if the direction is in the air + if (BlockFace == -1) then + return false; + end; + + if (not Player:HasPermission("diamondmover.move")) then + return false; + end; + + -- Rclk with a diamond to push in the direction the player is facing + if (Player:GetEquippedItem().m_ItemType == E_ITEM_DIAMOND) then + local Area = cBlockArea(); + Area:Read(Player:GetWorld(), + BlockX - MOVER_SIZE_X, BlockX + MOVER_SIZE_X, + BlockY - MOVER_SIZE_Y, BlockY + MOVER_SIZE_Y, + BlockZ - MOVER_SIZE_Z, BlockZ + MOVER_SIZE_Z + ); + + local PlayerPitch = Player:GetPitch(); + if (PlayerPitch < -70) then -- looking up + BlockY = BlockY + 1; + else + if (PlayerPitch > 70) then -- looking down + BlockY = BlockY - 1; + else + local PlayerRot = Player:GetYaw() + 180; -- Convert [-180, 180] into [0, 360] for simpler conditions + if ((PlayerRot < 45) or (PlayerRot > 315)) then + BlockZ = BlockZ - 1; + else + if (PlayerRot < 135) then + BlockX = BlockX + 1; + else + if (PlayerRot < 225) then + BlockZ = BlockZ + 1; + else + BlockX = BlockX - 1; + end; + end; + end; + end; + end; + + Area:Write(Player:GetWorld(), BlockX - MOVER_SIZE_X, BlockY - MOVER_SIZE_Y, BlockZ - MOVER_SIZE_Z); + return false; + end +end + + + + |