SHOW:
|
|
- or go back to the newest paste.
1 | --{program="aTreeFarm",version="1.04b",date="2018-01-07"} | |
2 | --------------------------------------- | |
3 | -- aTreeFarm by Kaikaku | |
4 | -- 2018-01-07, v1.04 bugfix (turtle start position) | |
5 | -- 2018-01-05, v1.03 bugfix (turtle digged drop chest) | |
6 | -- 2017-12-02, v1.02 start with craft fuel and empty to allow tHome | |
7 | -- 2015-01-31, v1.01 fixed initial refuelling | |
8 | -- 2015-01-31, v1.00 finalized UI + counter | |
9 | -- 2015-01-30, v0.80 auto set-up option | |
10 | -- 2015-01-26, v0.70 preparing for video | |
11 | -- 2014-01-12, v0.61 replant limited tries | |
12 | -- 2014-01-04, v0.60 redstone stop | |
13 | -- 2013-12-15, v0.51 initial | |
14 | --------------------------------------- | |
15 | ||
16 | ||
17 | --------------------------------------- | |
18 | ---- DESCRIPTION ---------------------- | |
19 | --------------------------------------- | |
20 | -- Turtle-automated tree farm. | |
21 | -- Details see information during program | |
22 | -- execution or YouTube video. | |
23 | ||
24 | ||
25 | --------------------------------------- | |
26 | ---- PARAMETERS ----------------------- | |
27 | --------------------------------------- | |
28 | local cVersion ="1.04" | |
29 | local cPrgName ="aTreeFarm" | |
30 | local cMinFuel = 960*2 -- 2 stacks of planks | |
31 | ||
32 | local minRandomCheckSapling=0.1 -- below this will check replant | |
33 | local actRandomCheckSapling=minRandomCheckSapling*2 | |
34 | local cIncreaseCheckSapling_Sapling=0.02 | |
35 | local cIncreaseCheckSapling_Stub=0.04 | |
36 | local cMaxCheckSapling=0.6 | |
37 | local strC="tReeTreESdig!diG;-)FaRmKaIKAKUudIgYdIgyTreEAndsOrRygUYsd" | |
38 | ||
39 | local cSlotChest=16 -- chest for crafty turtle | |
40 | local cCraftRefuelMaxItems=32 -- use how many logs to refuel at max | |
41 | local cSlotRefuel=15 -- where to put fuel | |
42 | local cExtraDigUp=1 -- go how many extra levels to reach jungle branches | |
43 | local cLoopEnd=56 -- one loop | |
44 | local cWaitingTime=20 -- if redstone signal in back is on | |
45 | ||
46 | --------------------------------------- | |
47 | ---- VARIABLES ------------------------ | |
48 | --------------------------------------- | |
49 | local strC_now="" | |
50 | local strC_next="" | |
51 | ||
52 | local tmpResult="" | |
53 | local blnAskForParameters=true | |
54 | local blnShowUsage=false | |
55 | local blnAutoSetup=false | |
56 | local strSimpleCheck="Press enter to start:" | |
57 | local intCounter=0 | |
58 | local maxCounter=0 | |
59 | ||
60 | --------------------------------------- | |
61 | ---- tArgs ---------------------------- | |
62 | --------------------------------------- | |
63 | local tArgs = {...} | |
64 | if #tArgs >= 1 then -- no error check | |
65 | blnAskForParameters=false | |
66 | if tArgs[1]=="help" then blnShowUsage=true end | |
67 | if tArgs[1]=="setup" then blnAutoSetup=true end | |
68 | if tArgs[1]=="set-up" then blnAutoSetup=true end | |
69 | if tonumber(tArgs[1])~=nil then | |
70 | maxCounter=tonumber(tArgs[1]) | |
71 | end | |
72 | end | |
73 | ||
74 | if blnShowUsage then | |
75 | print("+-------------------------------------+") | |
76 | print(" "..cPrgName..", by Kaikaku") | |
77 | print("+-------------------------------------+") | |
78 | print("Usage: aTreeFarm [setup/set-up]") | |
79 | print(" or: aTreeFarm [maxCounter]") | |
80 | print("setup or set-up:") | |
81 | print(" Will start auto set-up") | |
82 | print("maxCounter:") | |
83 | print(" 0=will farm infinitely") | |
84 | print(" x=will farm x rounds") | |
85 | print("More details on YouTube ;)") | |
86 | return | |
87 | end | |
88 | ||
89 | --------------------------------------- | |
90 | -- BASIC FUNCTIONS FOR TURTLE CONTROL - | |
91 | --------------------------------------- | |
92 | local function gf(n) | |
93 | if n==nil then n=1 end | |
94 | - | for i=1,n,1 do while not turtle.forward() do end end |
94 | + | for i=1,n,1 do while not turtle.forward() do turtle.sleep(1) end end |
95 | end | |
96 | local function gb(n) | |
97 | if n==nil then n=1 end | |
98 | - | for i=1,n,1 do while not turtle.back() do end end |
98 | + | for i=1,n,1 do while not turtle.back() do turtle.sleep(1) end end |
99 | end | |
100 | local function gu(n) | |
101 | if n==nil then n=1 end | |
102 | - | for i=1,n,1 do while not turtle.up() do end end |
102 | + | for i=1,n,1 do while not turtle.up() do turtle.sleep(1) end end |
103 | end | |
104 | local function gd(n) | |
105 | if n==nil then n=1 end | |
106 | - | for i=1,n,1 do while not turtle.down() do end end |
106 | + | for i=1,n,1 do while not turtle.down() do turtle.sleep(1) end end |
107 | end | |
108 | local function gl(n) | |
109 | if n==nil then n=1 end | |
110 | - | for i=1,n,1 do while not turtle.turnLeft() do end end |
110 | + | for i=1,n,1 do while not turtle.turnLeft() do turtle.sleep(1) end end |
111 | end | |
112 | local function gr(n) | |
113 | if n==nil then n=1 end | |
114 | - | for i=1,n,1 do while not turtle.turnRight() do end end |
114 | + | for i=1,n,1 do while not turtle.turnRight() do turtle.sleep(1) end end |
115 | end | |
116 | local function pf(n) | |
117 | -- moves backwards if n>1 | |
118 | if n==nil then n=1 end | |
119 | - | for i=1,n,1 do if i~=1 then gb() end turtle.place() end |
119 | + | for i=1,n,1 do if i~=1 then gb() end turtle.sleep(1) turtle.place() end |
120 | end | |
121 | - | local function pu() turtle.placeUp() end |
121 | + | local function pu() turtle.placeUp() turtle.sleep(1) end |
122 | - | local function pd() turtle.placeDown() end |
122 | + | local function pd() turtle.placeDown() turtle.sleep(1) end |
123 | - | local function df() return turtle.dig() end |
123 | + | local function df() return turtle.dig() turtle.sleep(1) end |
124 | - | local function du() turtle.digUp() end |
124 | + | local function du() turtle.digUp() turtle.sleep(1) end |
125 | - | local function dd() turtle.digDown() end |
125 | + | local function dd() turtle.digDown() turtle.sleep(1) end |
126 | - | local function sf() turtle.suck() end |
126 | + | local function sf() turtle.suck() turtle.sleep(1) end |
127 | - | local function su() turtle.suckUp() end |
127 | + | local function su() turtle.suckUp() turtle.sleep(1) end |
128 | local function sd(n) | |
129 | if n==nil then | |
130 | - | while turtle.suckDown() do end |
130 | + | while turtle.suckDown() do turtle.sleep(1) end |
131 | else | |
132 | for i=1,n do | |
133 | turtle.sleep(1) | |
134 | turtle.suckDown() | |
135 | end | |
136 | end | |
137 | - | local function Df() turtle.drop() end |
137 | + | |
138 | - | local function Du(n) if n==nil then n=64 end turtle.dropUp(n) end |
138 | + | local function Df() turtle.drop() turtle.sleep(1) end |
139 | - | local function Dd(n) if n==nil then n=64 end turtle.dropDown(n) end |
139 | + | local function Du(n) if n==nil then n=64 end turtle.sleep(1) turtle.dropUp(n) end |
140 | - | local function ss(s) turtle.select(s) end |
140 | + | local function Dd(n) if n==nil then n=64 end turtle.sleep(1) turtle.dropDown(n) end |
141 | local function ss(s) turtle.select(s) turtle.sleep(1) end | |
142 | ||
143 | local function askForInputText(textt) | |
144 | local at="" | |
145 | -- check prompting texts | |
146 | if textt==nil then textt="Enter text:" end | |
147 | ||
148 | -- ask for input | |
149 | write(textt) | |
150 | at=read() | |
151 | return at | |
152 | end | |
153 | ||
154 | local function checkFuel() | |
155 | local tmp=turtle.getFuelLevel() | |
156 | return tmp | |
157 | end | |
158 | ||
159 | function checkRefuel(minFuel, slotFuel) | |
160 | if slotFuel==nil then slotFuel=16 end | |
161 | if minFuel==nil then minFuel=1000 end | |
162 | local tmpFuel=0 tmpFuel2=0 | |
163 | local tmpItems=65 --turtle.getItemCount(slotFuel) | |
164 | local cSleep=5 | |
165 | ||
166 | -- step 1 check if more fuel is required | |
167 | tmpFuel=turtle.getFuelLevel() | |
168 | tmpFuel2=tmpFuel-1 -- triggers print at least once | |
169 | if tmpFuel<minFuel then | |
170 | ss(slotFuel) | |
171 | -- step 2 refuel loop | |
172 | while tmpFuel<minFuel do | |
173 | -- step 2.1 need to update fuel level? | |
174 | if tmpFuel2~=tmpFuel then --tmpItems~=turtle.getItemCount(slotFuel) then | |
175 | -- fuel still too low and there have been items consumed | |
176 | print("Need more fuel ("..tmpFuel.."/"..minFuel..") in slot "..slotFuel) | |
177 | end | |
178 | -- step 2.2 try to refuel | |
179 | if tmpItems>0 then | |
180 | - | turtle.refuel() |
180 | + | |
181 | turtle.sleep(1) | |
182 | turtle.refuel() | |
183 | else | |
184 | os.sleep(cSleep) | |
185 | end | |
186 | -- step 2.3 update variables | |
187 | tmpItems=turtle.getItemCount(slotFuel) | |
188 | tmpFuel2=tmpFuel | |
189 | tmpFuel=turtle.getFuelLevel() | |
190 | end | |
191 | end | |
192 | -- step 3 either no need to refuel | |
193 | -- or successfully refuelled | |
194 | print("Fuel level ok ("..tmpFuel.."/"..minFuel..")") | |
195 | end | |
196 | ||
197 | ||
198 | --------------------------------------- | |
199 | ---- functions ------------------------ | |
200 | --------------------------------------- | |
201 | ||
202 | local function cutTree() | |
203 | local tmpExtraDigUp=cExtraDigUp | |
204 | ||
205 | ---- assumptions | |
206 | -- turtle faces trunk one block below bottom | |
207 | ---- variables | |
208 | local intUpCount = 0 | |
209 | local intFace = 0 -- -1=left, 1=right | |
210 | local blnDigSomething=false | |
211 | ||
212 | term.write(" cutting tree: ") | |
213 | ||
214 | -- get into tree column | |
215 | df() | |
216 | while not turtle.forward() do df() end | |
217 | gr() df() gl() df() gl() df() | |
218 | local intFace=-1 | |
219 | ||
220 | -- cut and go up | |
221 | repeat | |
222 | blnDigSomething=false | |
223 | du() | |
224 | while not turtle.up() do du() turtle.sleep(1) end | |
225 | blnDigSomething=df() or blnDigSomething | |
226 | if intFace==-1 then | |
227 | turtle.sleep(1) | |
228 | gr() | |
229 | blnDigSomething=df() or blnDigSomething | |
230 | turtle.sleep(1) | |
231 | gr() | |
232 | elseif intFace==1 then | |
233 | turtle.sleep(1) | |
234 | gl() | |
235 | blnDigSomething=df() or blnDigSomething | |
236 | turtle.sleep(1) | |
237 | gl() | |
238 | end | |
239 | intFace=intFace * -1 | |
240 | blnDigSomething=df() or blnDigSomething | |
241 | intUpCount = intUpCount +1 | |
242 | term.write(".") | |
243 | - | turtle.sleep(2) |
243 | + | |
244 | -- check for 2 conditions | |
245 | -- either | |
246 | -- 1) nothing above the turtle | |
247 | -- or | |
248 | -- 2) nothing dig on the other columns blnDigSomething | |
249 | turtle.sleep(1) | |
250 | if not (turtle.detectUp() or blnDigSomething) then | |
251 | tmpExtraDigUp=tmpExtraDigUp-1 | |
252 | else | |
253 | tmpExtraDigUp=cExtraDigUp -- restore it | |
254 | end | |
255 | until tmpExtraDigUp<0 --not (turtle.detectUp() or blnDigSomething) ----- NOT kai_2 | |
256 | ||
257 | -- go off tree column | |
258 | if intFace==-1 then | |
259 | turtle.sleep(1) | |
260 | gl() | |
261 | elseif intFace==1 then | |
262 | turtle.sleep(1) | |
263 | gr() | |
264 | end | |
265 | df() | |
266 | while not turtle.forward() do turtle.sleep(1) df() end | |
267 | turtle.sleep(1) | |
268 | - | dd() df() gl(2) df() |
268 | + | |
269 | intFace = 0 | |
270 | ||
271 | intFace = 1 -- 1=forward,-1=backwards | |
272 | -- go back down | |
273 | -- hint: only digging front and back in order | |
274 | -- to not cut into larger neighbouring, | |
275 | -- as this may leave upper tree parts left | |
276 | for i = 1,intUpCount+1 do | |
277 | turtle.sleep(1) dd() turtle.sleep(1) df() turtle.sleep(1) gl(2) turtle.sleep(1) df() | |
278 | intFace=intFace* -1 | |
279 | while not turtle.down() do dd() end | |
280 | end | |
281 | - | plantTree() |
281 | + | |
282 | - | while not turtle.up() do du() end |
282 | + | |
283 | - | sd() |
283 | + | |
284 | gr() | |
285 | end | |
286 | sf() df() term.write(".") | |
287 | print(" done!") | |
288 | ||
289 | -- plant new | |
290 | turtle.sleep(1) plantTree() | |
291 | while not turtle.up() do turtle.sleep(1) du() end | |
292 | turtle.sleep(1) sd() | |
293 | end | |
294 | ||
295 | --------------------------------------- | |
296 | function plantTree() | |
297 | local tmpCount=0 | |
298 | ---- assumptions | |
299 | -- turtle faces place to plant | |
300 | ||
301 | -- check for enough saplings | |
302 | sf() | |
303 | if turtle.getItemCount(1) > 1 then | |
304 | -- plant | |
305 | print(" plant new sapling") | |
306 | while not turtle.place() do | |
307 | print(" hard to plant here...") | |
308 | tmpCount=tmpCount+1 | |
309 | if tmpCount>3 then break end | |
310 | os.sleep(1) | |
311 | end -- NOT kai_2 | |
312 | else | |
313 | -- error | |
314 | print(" Out of saplings...") -- prog name | |
315 | os.sleep(5) | |
316 | actRandomCheckSapling=cMaxCheckSapling | |
317 | return | |
318 | end | |
319 | - | df() ss(1) |
319 | + | |
320 | ||
321 | --------------------------------------- | |
322 | local function replantStub() | |
323 | ss(2) -- compare with wood in slot 2 | |
324 | turtle.sleep(1) | |
325 | if turtle.compare() then | |
326 | -- assumption: there is only a stub left, so replant | |
327 | -- if there is a tree on top of it, it will be harvested next round | |
328 | print(" Replanting a stub") | |
329 | turtle.sleep(1) df() turtle.sleep(1) ss(1) | |
330 | if pf() then | |
331 | turtle.sleep(1) | |
332 | actRandomCheckSapling=actRandomCheckSapling+cIncreaseCheckSapling_Stub | |
333 | else | |
334 | print(" failure!") | |
335 | end | |
336 | else | |
337 | turtle.sleep(1) | |
338 | ss(1) | |
339 | end | |
340 | end | |
341 | local function eS(sI,sA,eA) | |
342 | - | while not turtle.forward() do df() end |
342 | + | |
343 | local sR="" | |
344 | if sA==nil then sA=1 end | |
345 | if eA==nil then eA=string.len(sI) end | |
346 | for i=sA,eA,1 do | |
347 | sO=string.sub(sI,i,i) | |
348 | if sR~="" then break end | |
349 | if sO=="a" then | |
350 | gl() | |
351 | elseif sO=="d" then | |
352 | turtle.sleep(1) | |
353 | gr() | |
354 | - | sf() gl() sf() |
354 | + | |
355 | while not turtle.forward() do turtle.sleep(1) df() end | |
356 | - | actRandomCheckSapling=actRandomCheckSapling+cIncreaseCheckSapling_Sapling |
356 | + | |
357 | end | |
358 | - | turtle.sleep(2) |
358 | + | |
359 | end | |
360 | ||
361 | - | gl() sf() gl() sf() |
361 | + | |
362 | local function randomReplant() | |
363 | - | actRandomCheckSapling=actRandomCheckSapling+cIncreaseCheckSapling_Sapling |
363 | + | |
364 | if turtle.getItemCount(1) > 10 then | |
365 | - | turtle.sleep(2) |
365 | + | |
366 | while not turtle.down() do turtle.sleep(1) dd() end | |
367 | turtle.sleep(1) sf() turtle.sleep(1) gl() turtle.sleep(1) sf() | |
368 | - | gl() sf() |
368 | + | |
369 | turtle.sleep(1) | |
370 | actRandomCheckSapling=actRandomCheckSapling+cIncreaseCheckSapling_Sapling | |
371 | else | |
372 | turtle.sleep(1) | |
373 | if turtle.detect() then replantStub() end | |
374 | end | |
375 | turtle.sleep(1) gl() turtle.sleep(1) sf() turtle.sleep(1) gl() turtle.sleep(1) sf() | |
376 | if turtle.place() then | |
377 | - | sf() gr() sf() gr() sf() gr() sf() gr() sf() |
377 | + | turtle.sleep(1) |
378 | - | while not turtle.up() do du() end |
378 | + | actRandomCheckSapling=actRandomCheckSapling+cIncreaseCheckSapling_Sapling |
379 | else | |
380 | turtle.sleep(1) | |
381 | if turtle.detect() then replantStub() end | |
382 | end | |
383 | turtle.sleep(1) gl() turtle.sleep(1) sf() | |
384 | while not turtle.up() do du() end | |
385 | -- ensure min probability and max 100% | |
386 | turtle.sleep(1) | |
387 | actRandomCheckSapling=math.max(actRandomCheckSapling-0.01,minRandomCheckSapling) | |
388 | turtle.sleep(1) | |
389 | actRandomCheckSapling=math.min(actRandomCheckSapling,cMaxCheckSapling) | |
390 | print((actRandomCheckSapling*100).."% check probability") | |
391 | else | |
392 | -- extra suck | |
393 | while not turtle.down() do turtle.sleep(1) dd() end | |
394 | turtle.sleep(1) sf() turtle.sleep(1) gr() turtle.sleep(1) sf() turtle.sleep(1) gr() turtle.sleep(1) sf() turtle.sleep(1) gr() turtle.sleep(1) sf() turtle.sleep(1) gr() turtle.sleep(1) sf() | |
395 | while not turtle.up() do turtle.sleep(1) du() end | |
396 | turtle.sleep(1) | |
397 | sd() | |
398 | end | |
399 | - | ss(i) |
399 | + | |
400 | ||
401 | - | Du() |
401 | + | |
402 | local function craftFuel() | |
403 | local tmpFuelItems=turtle.getItemCount(2) | |
404 | - | Du(math.max(1,turtle.getItemCount(2)-cCraftRefuelMaxItems)) -- to keep the wood |
404 | + | |
405 | -- step 1 need fuel? | |
406 | if (turtle.getFuelLevel()<cMinFuel) and (turtle.getItemCount(cSlotChest)==1) then | |
407 | -- no refuelling if not exactly 1 item in slot cSlotChest (=chest) | |
408 | print("Auto refuel ("..turtle.getFuelLevel().."/"..cMinFuel..") ...") | |
409 | ||
410 | -- step 2 enough mats to refuel? | |
411 | -- assumption: slot 2 has wood | |
412 | if tmpFuelItems>1 then | |
413 | - | ss(i) |
413 | + | |
414 | ss(cSlotChest) while not turtle.placeUp() do du() end | |
415 | ||
416 | for i=1,15,1 do | |
417 | turtle.sleep(1) | |
418 | ss(i) | |
419 | if i~=2 then | |
420 | - | while turtle.suckUp() do end |
420 | + | turtle.sleep(1) |
421 | - | ss(cSlotChest) du() ss(1) |
421 | + | Du() |
422 | else | |
423 | -- cCraftRefuelMaxItems | |
424 | turtle.sleep(1) | |
425 | Du(math.max(1,turtle.getItemCount(2)-cCraftRefuelMaxItems)) -- to keep the wood | |
426 | end | |
427 | end | |
428 | ||
429 | -- step 3 craft planks! | |
430 | turtle.craft() | |
431 | turtle.sleep(1) | |
432 | - | while not turtle.down() do dd() end |
432 | + | |
433 | - | ss(2) |
433 | + | |
434 | turtle.sleep(1) | |
435 | ss(i) | |
436 | turtle.sleep(1) | |
437 | turtle.refuel() | |
438 | end | |
439 | print("New fuel level ("..turtle.getFuelLevel().."/"..cMinFuel..")") | |
440 | ||
441 | -- step 5 get back stuff! | |
442 | - | Dd(math.max(turtle.getItemCount(2)-1,0)) |
442 | + | |
443 | while turtle.suckUp() do turtle.sleep(1) end | |
444 | ss(cSlotChest) turtle.sleep(1) du() turtle.sleep(1) ss(1) | |
445 | else | |
446 | print("Ups, not enough wood for auto refuel!") | |
447 | - | ss(i) Dd() |
447 | + | |
448 | end | |
449 | end | |
450 | ||
451 | ||
452 | --------------------------------------- | |
453 | local function emptyTurtle() | |
454 | print(" Drop what I've harvested!") | |
455 | while not turtle.down() do turtle.sleep(1) dd() end | |
456 | turtle.sleep(1) | |
457 | ss(2) | |
458 | turtle.sleep(1) | |
459 | if turtle.compareTo(1) then | |
460 | print("Error: Ups, in slot 2 is the same as in slot 1??") | |
461 | --Dd() | |
462 | else | |
463 | -- if slot 2 has other item (wood) than slot 1 | |
464 | -- keep one of them for comparison | |
465 | turtle.sleep(1) | |
466 | if turtle.getItemCount(2)>1 then | |
467 | turtle.sleep(1) | |
468 | Dd(math.max(turtle.getItemCount(2)-1,0)) | |
469 | end | |
470 | end | |
471 | for i=3,15,1 do | |
472 | -- assumption slot 16 contains a chest | |
473 | turtle.sleep(1) | |
474 | ss(i) | |
475 | turtle.sleep(1) | |
476 | Dd() | |
477 | end | |
478 | os.sleep(0) | |
479 | turtle.sleep(1) | |
480 | ss(1) | |
481 | end | |
482 | ||
483 | --------------------------------------- | |
484 | ---- main ----------------------------- | |
485 | --------------------------------------- | |
486 | -- step 0 info and initial check | |
487 | term.clear() term.setCursorPos(1,1) | |
488 | repeat | |
489 | print("+-------------------------------------+") | |
490 | print("| aTreeFarm "..cVersion..", by Kaikaku (1/2) |") | |
491 | print("+-------------------------------------+") | |
492 | print("| Farm set-up: Place crafty felling |") | |
493 | print("| turtle down (e.g. bottom left |") | |
494 | print("| corner of chunk). Run program with|") | |
495 | print("| parameter 'setup' (one time). |") | |
496 | print("| Materials for auto set-up: |") | |
497 | print("| slot 3: chest (1) |") | |
498 | print("| slot 4: cobble (47) |") | |
499 | print("| slot 5: torches (8) |") | |
500 | print("+-------------------------------------+") | |
501 | ||
502 | if blnAutoSetup then | |
503 | if turtle.getItemCount(3)~=1 or turtle.getItemCount(4)<47 or turtle.getItemCount(5)<8 then | |
504 | -- inventory not ready for set-up | |
505 | strSimpleCheck="Fill in slots 3-5 and press enter:" | |
506 | else | |
507 | strSimpleCheck="Press enter to start:" | |
508 | end | |
509 | else | |
510 | strSimpleCheck="Press enter to start:" | |
511 | end | |
512 | if not blnAskForParameters and strSimpleCheck=="Press enter to start:" then break end | |
513 | until askForInputText(strSimpleCheck)=="" and strSimpleCheck=="Press enter to start:" | |
514 | ||
515 | ||
516 | ||
517 | term.clear() term.setCursorPos(1,1) | |
518 | repeat | |
519 | print("+-------------------------------------+") | |
520 | print("| aTreeFarm "..cVersion..", by Kaikaku (2/2) |") | |
521 | print("+-------------------------------------+") | |
522 | print("| Running the farm: |") | |
523 | print("| Felling turtle sits above chest |") | |
524 | print("| (as after running set-up). Turtle |") | |
525 | print("| needs some initial fuel to start. |") | |
526 | print("| Turtle inventory: |") | |
527 | print("| slot 1: saplings (20+x) |") | |
528 | print("| slot 2: wood from sapling (1+x) |") | |
529 | print("| slot 16: chest (1) |") | |
530 | print("+-------------------------------------+") | |
531 | ||
532 | if turtle.getItemCount(1)<11 or turtle.getItemCount(2)==0 or turtle.getItemCount(16)~=1 then | |
533 | -- inventory not ready | |
534 | strSimpleCheck="Provide materials and press enter:" | |
535 | else | |
536 | strSimpleCheck="Press enter to start:" | |
537 | end | |
538 | --strSimpleCheck="Press enter to start:" | |
539 | if not blnAskForParameters and strSimpleCheck=="Press enter to start:" then break end | |
540 | if blnAutoSetup then strSimpleCheck="Press enter to start:" end | |
541 | until askForInputText(strSimpleCheck)=="" and strSimpleCheck=="Press enter to start:" | |
542 | ||
543 | ||
544 | --------------------------------------- | |
545 | ---- set-up farm ---------------------- | |
546 | --------------------------------------- | |
547 | -- set-up = not running the farm | |
548 | if blnAutoSetup then | |
549 | write("Setting up tree farm...") | |
550 | checkRefuel(cMinFuel,cSlotRefuel) | |
551 | -- chest | |
552 | gf(3) gr() gf(3) gl() ss(3) dd() pd() | |
553 | -- path | |
554 | ss(4) | |
555 | for i=1,9,1 do gf() dd() pd() end gr() | |
556 | for i=1,3,1 do gf() dd() pd() end gr() | |
557 | for i=1,6,1 do gf() dd() pd() end gl() | |
558 | for i=1,3,1 do gf() dd() pd() end gl() | |
559 | for i=1,6,1 do gf() dd() pd() end gr() | |
560 | for i=1,3,1 do gf() dd() pd() end gr() | |
561 | for i=1,9,1 do gf() dd() pd() end gr() | |
562 | for i=1,8,1 do gf() dd() pd() end | |
563 | -- torches | |
564 | ss(5) gf(2) gl() pf() gu() gb(10) pd() | |
565 | gl() gf(5) pd() gf() pd() gf(5) pd() gr() gf(11) pd() | |
566 | gb(3) gr() gf(3) pd() gf(5) pd() gf(2) gr() gb(2) gd() | |
567 | print(" done!") | |
568 | print("You can now run the tree farm with: ",cPrgName) | |
569 | return | |
570 | end | |
571 | ||
572 | ||
573 | --------------------------------------- | |
574 | ---- tree farm ------------------------ | |
575 | --------------------------------------- | |
576 | strC_next=string.sub(strC,1,1) | |
577 | ||
578 | -- initial up | |
579 | - | while not turtle.up() do du() end |
579 | + | |
580 | ||
581 | while true do | |
582 | ||
583 | -- step 6 need to craft some fuel? | |
584 | craftFuel() | |
585 | ||
586 | -- step 7 empty into chest | |
587 | emptyTurtle() | |
588 | ||
589 | -- step 0 check exit | |
590 | if maxCounter>0 then | |
591 | if intCounter==maxCounter then | |
592 | print("Completed all ",maxCounter," farming rounds.") | |
593 | print("I'm awaiting new commands, master!") | |
594 | --while not turtle.up() do du() end | |
595 | return | |
596 | end | |
597 | end | |
598 | ||
599 | -- step 1 check fuel | |
600 | checkRefuel(cMinFuel,cSlotRefuel) | |
601 | ||
602 | -- step 2 wait if redstone signal | |
603 | while rs.getInput("back") do | |
604 | print("Waiting due to redstone signal ",cWaitingTime,"s.") | |
605 | os.sleep(cWaitingTime) | |
606 | - | turtle.sleep(2) |
606 | + | |
607 | ||
608 | -- step 3 new round | |
609 | while not turtle.up() do turtle.sleep(1) du() end | |
610 | ss(1) | |
611 | intCounter=intCounter+1 | |
612 | print("Starting round ",intCounter," with "..turtle.getItemCount(1).." saplings.") | |
613 | ||
614 | for i=1,cLoopEnd,1 do | |
615 | - | turtle.sleep(2) |
615 | + | |
616 | -- update commands | |
617 | strC_now=strC_next | |
618 | if i<cLoopEnd then | |
619 | strC_next=string.sub(strC,i+1,i+1) | |
620 | else | |
621 | strC_next=string.sub(strC,1,1) | |
622 | end | |
623 | ||
624 | -- step 4 one step on the road | |
625 | tmpResult=eS(strC,i,i) | |
626 | if tmpResult~="" then | |
627 | print("found special command: "..tmpResult) | |
628 | end | |
629 | ||
630 | -- step 5 check for blocks | |
631 | -- step 5.1 check left hand side | |
632 | if strC_now~="a" and strC_next~="a" then | |
633 | -- now a=>just turned left | |
634 | -- next a=>will turned left | |
635 | gl() | |
636 | turtle.sleep(1) | |
637 | if turtle.detect() then cutTree() end | |
638 | gr() | |
639 | end | |
640 | -- step 5.2 check right hand side | |
641 | if strC_now~="d" and strC_next~="d" then | |
642 | -- now d=>just turned right | |
643 | -- next d=>will turn right | |
644 | gr() | |
645 | turtle.sleep(1) | |
646 | if turtle.detect() then cutTree() end | |
647 | gl() | |
648 | end | |
649 | sd() | |
650 | ||
651 | if math.random()<=actRandomCheckSapling then | |
652 | if strC_now~="d" and strC_now~="a" then | |
653 | randomReplant() | |
654 | end | |
655 | end | |
656 | end | |
657 | end |