1
0
cuberite-2a/MCServer/Plugins/MagicCarpet/objects.lua
madmaxoft@gmail.com f00515ba2e Updated MagicCarpet to work with current API
git-svn-id: http://mc-server.googlecode.com/svn/trunk@1185 0a769ca7-a7f5-676a-18bf-c427514a06d6
2013-02-01 20:11:12 +00:00

97 lines
2.6 KiB
Lua

-- Location object
cLocation = {}
function cLocation:new( x, y, z )
local object = { x = x, y = y, z = z }
setmetatable(object, { __index = cLocation })
return object
end
-- Offsets
cFibers = { }
function cFibers:new()
local object = {
cLocation:new( 2, -1, 2 ),
cLocation:new( 2, -1, 1 ),
cLocation:new( 2, -1, 0 ),
cLocation:new( 2, -1, -1 ),
cLocation:new( 2, -1, -2 ),
cLocation:new( 1, -1, 2 ),
cLocation:new( 1, -1, 1 ),
cLocation:new( 1, -1, 0 ),
cLocation:new( 1, -1, -1 ),
cLocation:new( 1, -1, -2 ),
cLocation:new( 0, -1, 2 ),
cLocation:new( 0, -1, 1 ),
cLocation:new( 0, -1, 0 ),
cLocation:new( 0, -1, -1 ),
cLocation:new( 0, -1, -2 ),
cLocation:new( -1, -1, 2 ),
cLocation:new( -1, -1, 1 ),
cLocation:new( -1, -1, 0 ),
cLocation:new( -1, -1, -1 ),
cLocation:new( -1, -1, -2 ),
cLocation:new( -2, -1, 2 ),
cLocation:new( -2, -1, 1 ),
cLocation:new( -2, -1, 0 ),
cLocation:new( -2, -1, -1 ),
cLocation:new( -2, -1, -2 ),
imadeit = false,
}
setmetatable(object, { __index = cFibers })
return object;
end
-- Carpet object
cCarpet = {}
function cCarpet:new()
local object = { Location = cLocation:new(0,0,0),
Fibers = cFibers:new(),
}
setmetatable(object, { __index = cCarpet })
return object
end
function cCarpet:remove()
local World = cRoot:Get():GetDefaultWorld()
for i, fib in ipairs( self.Fibers ) do
local x = self.Location.x + fib.x
local y = self.Location.y + fib.y
local z = self.Location.z + fib.z
local BlockID = World:GetBlock( x, y, z )
if( fib.imadeit == true and BlockID == E_BLOCK_GLASS ) then
World:SetBlock( x, y, z, 0, 0 )
fib.imadeit = false
end
end
end
function cCarpet:draw()
local World = cRoot:Get():GetDefaultWorld()
for i, fib in ipairs( self.Fibers ) do
local x = self.Location.x + fib.x
local y = self.Location.y + fib.y
local z = self.Location.z + fib.z
local BlockID = World:GetBlock( x, y, z )
if( BlockID == 0 ) then
fib.imadeit = true
World:SetBlock( x, y, z, E_BLOCK_GLASS, 0 )
else
fib.imadeit = false
end
end
end
function cCarpet:moveTo( NewPos )
local x = math.floor( NewPos.x )
local y = math.floor( NewPos.y )
local z = math.floor( NewPos.z )
if( self.Location.x ~= x or self.Location.y ~= y or self.Location.z ~= z ) then
self:remove()
self.Location = cLocation:new( x, y, z )
self:draw()
end
end
function cCarpet:getY()
return self.Location.y
end