Check out the Pastebin Gadgets Shop. We have thousands of fun, geeky & affordable gadgets on sale :-)Want more features on Pastebin? Sign Up, it's FREE!
tweet

# Turtle Builder

By: TeddyJ on Feb 16th, 2013  |  syntax: Lua  |  size: 4.23 KB  |  views: 925  |  expires: Never
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
1. local empty={}
2. local x,y,z,d= 0,0,0,0
3. local FUEL,FRAME,FILLER,WINDOW,FLOOR,TRASH = 1,2,3,4,5,6
4.
5. print "Welcome to TeddyJ's turtle builder"
6. print "Please ensure your chests and turtles are"
7. print "arranged as follows:"
8. print "            [T]"
9. print "[5][4][3][2][1]"
10. print "T=turtle, 1..5 chests containing Floor/Window/Filler/Frame/Fuel materials"
11. print ""
12. print "How big is the gap between chests (0 for no gap)?"
14. print "How many panels long would you like the building?"
16. print "How many panels wide would you like the building?"
18. print "How many storeys high would you like the building?"
20.
21. function goUp(n)
22.         checkFuel()
23.         if n==nil then n=1 end
24.         y=y+n
25.         for _=1,n do
26.                 turtle.digUp()
27.                 turtle.up()
28.         end
29. end
30.
31. function placeDown(n)
32.         if turtle.detectDown() then
33.                 turtle.select(TRASH)
34.                 turtle.digDown()
35.                 turtle.drop()
36.         end
37.         turtle.select(n)
38.         if turtle.getItemCount(n)==0 then
39.                 refill(n)
40.         end
41.         turtle.placeDown()
42. end
43.
44. function refill(n)
45.         if not(empty[n]) then
46.                 goToChestAndRestock(n)
47.                 goToLastPlace()
48.         end
49. end
50.
51. function goToChestAndRestock(n)
52.         for _=1,6 do
53.                 turtle.digUp()
54.                 turtle.up()
55.         end
56.         for _=1,d+3 do
57.                 turtle.turnLeft()
58.         end
59.         for _=1,x do
60.                 turtle.dig()
61.                 turtle.forward()
62.         end
63.         turtle.turnRight()
64.         for _=0,z do
65.                 turtle.dig()
66.                 turtle.forward()
67.         end
68.         for _=1,(y+5) do
69.                 turtle.down()
70.         end
71.         turtle.turnRight()
72.         if n>1 then
73.                 for _=2,n do
74.                         for i=0,chest_gap do
75.                                 turtle.forward()
76.                         end
77.                 end
78.                 content=turtle.suckDown()
79.                 for _=2,n do
80.                         for i=0,chest_gap do
81.                                 turtle.back()
82.                         end
83.                 end
84.         else
85.                 content=turtle.suckDown()
86.         end
87.         if not(content) then empty[n]=true end
88.         turtle.turnRight()
89. end
90.
91. function goToLastPlace()
92.         for _=1,(y+5) do
93.                 turtle.up()
94.         end
95.         for _=0,z do
96.                 turtle.forward()
97.         end
98.         turtle.turnLeft()
99.         for _=1,x do
100.                 turtle.forward()
101.         end
102.         for _=1,6 do
103.                 turtle.down()
104.         end
105.         for _=1,d+5 do
106.                 turtle.turnRight()
107.         end
108. end
109.
110. function goDown(n)
111.         checkFuel()
112.         if n==nil then n=1 end
113.         y=y-n
114.         for _=1,n do
115.                 turtle.digDown()
116.                 turtle.down()
117.         end
118. end
119.
120. function turnLeft()
121.         d=d-1
122.         if d==-1 then d=3 end
123.         turtle.turnLeft()
124. end
125.
126. function turnRight()
127.         d=d+1
128.         if d==4 then d=0 end
129.         turtle.turnRight()
130. end
131.
132. function checkFuel()
133.         if tonumber(turtle.getFuelLevel())~= nil and turtle.getFuelLevel()<80 then
134.                 print "Fuel low"
135.                 if turtle.getItemCount(FUEL)==0 then
136.                         print "No fuel available, restocking"
137.                         refill(FUEL)
138.                 end
139.                 print "Refueling"
140.                 turtle.select(FUEL)
141.                 if not(turtle.refuel()) then
142.                         print "No fuel in slot 1! Press enter when filled"
144.                 end
145.         end
146. end
147.
148. function goForward(n)
149.         checkFuel()
150.         if n==nil then n=1 end
151.         if d==0 then z=z+n end
152.         if d==1 then x=x-n end
153.         if d==2 then z=z-n end
154.         if d==3 then x=x+n end
155.         for _=1,n do
156.                 turtle.dig()
157.                 turtle.forward()
158.         end
159. end
160.
161. function goBack(n)
162.         if n==nil then n=1 end
163.         if d==0 then z=z-n end
164.         if d==1 then x=x+n end
165.         if d==2 then z=z+n end
166.         if d==3 then x=x-n end
167.         for _=1,n do
168.                 turtle.back()
169.         end
170. end
171.
172.
173. function getBlockType(i,j)
174.         if i==5 or j==5 then
175.                 return FRAME
176.         end
177.         if j==2 or j==3 then
178.                 if (i==2 or i==3) then
179.                         return WINDOW
180.                 else
181.                         return FILLER
182.                 end
183.         end
184.         return FILLER
185. end
186.
187. function doSide(panels, isFinalSide)
188.         for _=1,panels do
189.                 doPanel()
190.         end
191.         if not(isFinalSide) then
192.                 turnLeft()
193.                 goForward()
194.                 turnLeft()
195.                 goForward()
196.                 turnRight()
197.         end
198. end
199.
200. function doPanel()
201.         checkFuel()
202.         for i=1,5 do
203.                 goUp()
204.                 for j=1,5 do
205.                         b=getBlockType(i,j)
206.                         placeDown(b)
207.                         goForward()
208.                 end
209.                 if i<5 then
210.                         goBack(5)
211.                 end
212.         end
213.         goDown(5)
214. end
215.
216. function doFloor()
217.         turnLeft()
218.         goForward()
219.         turnRight()
220.         floor_width=(width*5)-1
221.         floor_length=(length*5)-1
222.         for i=1,floor_width do
223.                 for i=1,floor_length do
224.                         placeDown(FLOOR)
225.                         goForward()
226.                 end
227.                 goBack(floor_length)
228.                 turnLeft()
229.                 goForward()
230.                 turnRight()
231.         end
232.         turnRight()
233.         goForward(floor_width+1)
234.         turnLeft()
235. end
236.
237. function doStorey()
238.         goForward()
239.         doFloor()
240.         doSide(length)
241.         doSide(width)
242.         doSide(length)
243.         doSide(width,true)
244.         goUp(6)
245.         goBack()
246.         turnLeft()
247.         goDown()
248. end
249.
250. goForward()
251. for _=1,storeys do
252.         doStorey()
253. end
254. goForward()
255. doFloor()
clone this paste RAW Paste Data
Top