116 lines
2.9 KiB
Lua
116 lines
2.9 KiB
Lua
sf = require("structure")
|
|
local pf = require("pathfinding")
|
|
local im = require("inventorymanager")
|
|
local origin = vector.new(-15,235,120)
|
|
function build(x,y,z)
|
|
store = {height = 0}
|
|
grocerylist = {}
|
|
for h = 1,8 do
|
|
store[h] = {width = 0}
|
|
for w = 1,8 do
|
|
store[h][w] = {depth = 0}
|
|
for d = 1,8 do
|
|
bool, data = sf.blockat(x+w,z+d,y+h)
|
|
if bool then
|
|
store[h][w][d] = data
|
|
store[h][w].depth = d
|
|
grocerylist[store[h][w][d]] =
|
|
(grocerylist[store[h][w][d]] or 0)+1
|
|
end
|
|
end
|
|
if store[h][w].depth>0 then
|
|
store[h].width = w
|
|
end
|
|
end
|
|
if store[h].width>0 then
|
|
store.height = h
|
|
end
|
|
end
|
|
if store.height==0 then
|
|
--print("cell at",x,y,z,"is done")
|
|
removechunk(x,y,z)
|
|
return true
|
|
|
|
end
|
|
flag = false
|
|
for k,v in pairs(grocerylist) do
|
|
if im.count(k) < v then
|
|
print("not enough "..k.." need "..v.." of it")
|
|
flag = true
|
|
end
|
|
end
|
|
if turtle.getFuelLevel() < 2000 then
|
|
print("too lazy for that")
|
|
flag = true
|
|
end
|
|
if flag then
|
|
pf.to(vector.new(pf.home.x,position.y+8,pf.home.z))
|
|
pf.returnHome()
|
|
return false
|
|
end
|
|
pf.to(origin + vector.new(x+1,y+8,z+1))
|
|
for h = 1,8 do
|
|
print(store[h].width)
|
|
for w = 1,store[h].width do
|
|
print(store[h][w].depth)
|
|
for d = 1,store[h][w].depth do
|
|
if store[h][w][d] then
|
|
pf.to(origin+vector.new(x+w,y+h,z+d))
|
|
im.select(store[h][w][d])
|
|
turtle.placeDown()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
removechunk(x,y,z)
|
|
return true
|
|
end
|
|
|
|
function removechunk(x,y,z)
|
|
|
|
--::success::
|
|
local file = fs.open("tobuild","r")
|
|
local rest = {}
|
|
line = file.readLine()
|
|
while line do
|
|
table.insert(rest,line)
|
|
line = file.readLine()
|
|
end
|
|
file.close()
|
|
file = fs.open("tobuild","w")
|
|
str = tostring(vector.new(x,y,z))
|
|
for _,v in ipairs(rest) do
|
|
if v ~= str then
|
|
file.writeLine(v)
|
|
end
|
|
end
|
|
file.close()
|
|
end
|
|
function stringtovec(str)
|
|
parts = {}
|
|
for part in string.gmatch(str, "([^,]+)") do
|
|
table.insert(parts, part)
|
|
end
|
|
return vector.new(unpack(parts))
|
|
end
|
|
--pf.to(origin)
|
|
file=fs.open("tobuild","r")
|
|
chunk = file.readLine()
|
|
file.close()
|
|
print(chunk)
|
|
vec = stringtovec(chunk)
|
|
X1,Y1,Z1 = vec.x,vec.y,vec.z
|
|
print(X1,Y1,Z1)
|
|
while build(X1,Y1,Z1) do
|
|
-- term.clear()
|
|
print(X1,Y1,Z1)
|
|
file = fs.open("tobuild","r")
|
|
chunk = file.readLine()
|
|
vec = stringtovec(chunk)
|
|
X1,Y1,Z1 = vec.x,vec.y,vec.z
|
|
file.close()
|
|
--term.clear()
|
|
sleep(0)
|
|
end
|
|
pf.returnHome()
|
|
|