Skip to content

Instantly share code, notes, and snippets.

@Kruithne
Created December 9, 2013 06:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kruithne/7868084 to your computer and use it in GitHub Desktop.
Save Kruithne/7868084 to your computer and use it in GitHub Desktop.
local world = "spawn";
local x = 9909;
local y = 62;
local function hasLeafTouching(block)
local check = Location(world, block.x + 1, block.y, block.z);
if check:getBlock() == 18 then
return true;
end
local check = Location(world, block.x - 1, block.y, block.z);
if check:getBlock() == 18 then
return true;
end
local check = Location(world, block.x, block.y, block.z + 1);
if check:getBlock() == 18 then
return true;
end
local check = Location(world, block.x, block.y, block.z - 1);
if check:getBlock() == 18 then
return true;
end
return false;
end
local function removeClay(sX, sZ, eX, eZ)
local cX = sX;
while (cX < eX) do
local cZ = sZ;
while (cZ < eZ) do
local cY = y;
while (cY < 75) do
local block = Location:new(world, cX, cY, cZ);
if block:getBlock() == 159 then
block:setBlock(0, 0);
end
cY = cY + 1;
end
cZ = cZ + 1;
end
cX = cX + 1;
end
end
local function randomColour()
local ran = math.random(1, 7);
if ran == 1 then return 1; end
if ran == 2 then return 4; end
if ran == 3 then return 5; end
if ran == 4 then return 10; end
if ran == 5 then return 11; end
if ran == 6 then return 14; end
if ran == 7 then return 3; end
end
local function decorate(sX, sZ, eX, eZ)
local cX = sX;
while (cX < eX) do
local cZ = sZ;
while (cZ < eZ) do
local cY = y;
while (cY < 75) do
local block = Location:new(world, cX, cY, cZ);
if hasLeafTouching(block) and math.random(1, 4) == 2 then
block:setBlock(159, randomColour());
end
cY = cY + 1;
end
cZ = cZ + 1;
end
cX = cX + 1;
end
end
local cloneY = 80;
local function clone(sX, sZ, eX, eZ)
local tX = 0;
local cX = sX;
while (cX < eX) do
local tZ = 0;
local cZ = sZ;
while (cZ < eZ) do
local tY = cloneY;
local cY = y;
while (cY < 75) do
local block = Location:new(world, cX, cY, cZ);
if block:getBlock() ~= 0 then
local newBlock = Location:new(world, 10076 + tX, tY, 10000 + tZ);
newBlock:setBlock(block:getBlock(), 0);
end
tY = tY + 1;
cY = cY + 1;
end
tZ = tZ + 1;
cZ = cZ + 1;
end
tX = tX + 1;
cX = cX + 1;
end
end
local function printNode(node)
print("X: " .. node.x .. " Y: " .. node.y .. " Z: " .. node.z .. " ID: " .. node.block);
end
local treeScan = {};
local function scanTree(sX, sZ, eX, eZ)
local tX = 0;
local cX = sX;
while (cX < eX) do
local tZ = 0;
local cZ = sZ;
while (cZ < eZ) do
local tY = 0;
local cY = cloneY;
while (cY < 93) do
local block = Location:new(world, cX, cY, cZ);
if block:getBlock() ~= 0 then
local node = {};
node.x = tX;
node.y = tY;
node.z = tZ;
node.block = block:getBlock();
printNode(node);
table.insert(treeScan, node);
end
tY = tY + 1;
cY = cY + 1;
end
tZ = tZ + 1;
cZ = cZ + 1;
end
tX = tX + 1;
cX = cX + 1;
end
end
local function createTree(x, z)
for key, node in pairs(treeScan) do
local cX = x + node.x;
local cY = y + node.y;
local cZ = z + node.z;
local block = Location:new(world, cX, cY, cZ);
block:setBlock(node.block, 0);
end
end
scanTree(10080 - 4, 10004 - 4, 10080 + 4, 10004 + 4);
while (x < 10117) do
local z = 9904;
while (z < 10112) do
local loc = Location:new(world, x, y, z);
if loc:getBlock() == 19 then
local startX = x - 4;
local startZ = z - 4;
local endX = x + 4;
local endZ = z + 4;
removeClay(startX, startZ, endX, endZ);
--clone(startX, startZ, endX, endZ);
createTree(startX, startZ);
decorate(startX, startZ, endX, endZ);
loc:setBlock(17, 1);
end
z = z + 1;
end
x = x + 1;
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment