View difference between Paste ID: WADd471i and aJPEZ0v1
SHOW: | | - or go back to the newest paste.
1-
-- Wrapping starting peripheral
1+
-- Made by Rnen10
2
-- If problems/questions feel free to contact me
3-
inventory = peripheral.wrap("right")
3+
-- https://twitter.com/Rnen10
4
-- rnen. (Evan#7181)  on discord
5
6
--Here is a detailed view
7
--https://imgur.com/a/FMfTi
8
9-
-- checking on starting seeds
9+
--Here's a flowchart showing how it works
10-
local s1, s2, s3 = analyzer.getSpecimenStats("NORTH")
10+
--https://sketchboard.me/NAZDv63LNgBd#/
11-
p1 = s1 + s2 + s3
11+
12-
local s1, s2, s3 = analyzer.getSpecimenStats("EAST")
12+
13-
p2 = s1 + s2 + s3
13+
--Use this for automatic updates->  pastebin get fehTMGPp startup 
14
15
-- =============VARIABLES===================
16-
  -- Check if parents are mature
16+
17
18
--Plant 1 & 2
19
local p1 = nil
20
local p2 = nil
21
--Seeds in analyzer
22-
    -- Place 2nd crop stick for crossbreeding
22+
local p3 = nil
23-
    turtle.forward()
23+
--Variable for when job is done
24-
    turtle.forward()
24+
25-
    turtle.turnLeft()
25+
26-
    turtle.forward()
26+
local plantName = nil
27
28-
    sleep(1)
28+
function DEBUG()
29
	return fs.exists("seeddebug")
30
end
31-
    -- Move to 2nd analyzer
31+
32-
    turtle.forward()
32+
local posData = { ["x"] = 0, ["y"] = 0, ["rot"] = 1 }
33-
    turtle.turnLeft()
33+
-- ============VARIABLES END================
34-
    turtle.forward()
34+
35-
    turtle.turnLeft()
35+
-- ============FUNCTIONS====================
36
function NewLine(Str)
37-
    -- wait for crossbreed
37+
    local barLength = 40
38
	local tempPercentage = 0
39-
    while analyzer.isCrossCrop("SOUTH") do
39+
	term.clear()
40-
      sleep(1)
40+
    term.setCursorPos(1,2)
41
    print("-------------[SeedBot v3.8]------------")
42
    term.setCursorPos(11,5)
43-
    -- pick up new seed
43+
    write("v {Current action} v")
44-
    turtle.forward()
44+
    term.setCursorPos(21 - (math.floor(string.len(Str) / 2)),8)
45
	print(Str)
46
	if not plantName == nil then
47
		plantString = "Current Type: "..plantName
48
		term.setCursorPos(20 - (math.floor(string.len(plantString) / 2)),9)
49
		print(plantString)
50-
    turtle.forward()
50+
	end
51-
    turtle.turnRight()
51+
	if DEBUG() then
52-
    turtle.forward()
52+
		term.setCursorPos(1,11)
53-
    turtle.turnRight()
53+
		print("X: "..posData["x"].." Y: "..posData["y"].." Rot: "..posData["rot"])
54-
    turtle.turnRight()
54+
	end
55
	term.setCursorPos(12,12)
56-
    print("Back at analyzer")
56+
	write("[Current Fuel %"..(math.floor(turtle.getFuelLevel())))
57-
    -- Analyze new seed
57+
    write("]")
58
    term.setCursorPos(1,13)
59-
    --inventory.pushItem("down", 1)
59+
	barLength = turtle.getFuelLevel() / 100 * 40
60
	if barLength > 40 then barLength = 40 end
61
	if term.isColor() then
62-
    sleep(3.5)
62+
	  term.setBackgroundColor(colors.green)
63
	else
64-
    --inventory.pullItem("down", 1)
64+
	  term.setBackgroundColor(colors.white)
65
	end
66
	for i =1,(barLength) do
67-
    print("seed analyzed")
67+
	  write(" ")
68
	end
69-
  sleep(5)
69+
	if barLength < 40 then
70-
end
70+
		if term.isColor() then term.setBackgroundColor(colors.red) else term.setBackgroundColor(colors.gray) end
71
		local remainingBarLength = (40 - barLength)
72
		for i =1,(remainingBarLength) do
73
		  write(" ")
74
		end
75
	end
76
	term.setBackgroundColor(colors.black)
77
end
78
79
function ClearSeeds()
80
	analyzer = peripheral.wrap("bottom")
81
    if analyzer.hasPlant("NORTH") then
82
		Left()
83
		Forward()
84
		turtle.select(1)
85
		turtle.digDown()
86
		turtle.suckDown()
87
		turtle.select(1)
88
		turtle.placeDown()
89
		Back()
90
		Right()
91
	end
92
	if analyzer.hasPlant("EAST") then
93
		Forward()
94
		turtle.select(1)
95
		turtle.digDown()
96
		turtle.suckDown()
97
		turtle.select(1)
98
		turtle.placeDown()
99
		Back()
100
	end
101
	Empty()
102
end
103
104
105
function Empty()
106
  	if not done then NewLine("Emptying Inventory") end
107
	for i = 1,16 do
108
	  turtle.select(i)
109
	  if not turtle.dropUp() and (turtle.getItemCount()>0) then
110
		NewLine("Chest is full!")
111
		done = true
112
		break
113
	  end
114
	end
115
	turtle.select(1)
116
end
117
118
function CheckSeeds()
119
  analyzer = peripheral.wrap("bottom")
120
  if analyzer.hasPlant("NORTH") == true and analyzer.hasPlant("EAST") == true then
121
    local s1, s2, s3 = analyzer.getSpecimenStats("NORTH")
122
    p1 = s1 + s2 + s3
123
    local s1, s2, s3 = analyzer.getSpecimenStats("EAST")
124
    p2 = s1 + s2 + s3
125
    if p1==30 or p2==30 then
126
	  GetNewSeeds()
127
    end
128
  else
129
	GetNewSeeds()
130
	return
131
  end
132
end
133
134
function DuplicateSingleSeed()
135
	if analyzer.hasPlant("NORTH") or analyzer.hasPlant("EAST") then
136
		Empty() 
137
		os.reboot()
138
	else
139
		NewLine("Analyzing single Seed")
140
		turtle.select(1)
141
		analyzer = peripheral.wrap("bottom")
142
		turtle.dropDown(turtle.getItemCount())
143
		analyzer.analyze()
144
		while not analyzer.isAnalyzed() do
145
			sleep(1)
146
		end
147
		plantName = analyzer.getSpecimen()
148
		NewLine("Planting single seed")
149
		turtle.suckDown()
150
		Forward()
151
		Right()
152
		Forward()
153
		redstone.setOutput("bottom", true)
154
		while turtle.getItemCount() > 0 do turtle.dropDown(1) end
155
		sleep(2)
156
		redstone.setOutput("bottom", false)
157
		Back()
158
		Back()
159
		Left()
160
		Forward()
161
		redstone.setOutput("bottom", true)
162
		sleep(0.9)
163
		redstone.setOutput("bottom", false)
164
		Back()
165
		Right()
166
		Back()
167
		NewLine("Waiting for seed to duplicate...")
168
		while analyzer.isCrossCrop("SOUTH") do
169
			sleep(5)
170
		end
171
		NewLine("Picking up new seed")
172
		Forward()
173
		turtle.select(1)
174
		turtle.digDown()
175
		turtle.suckDown()
176
		turtle.placeDown()
177
		Forward()
178
		Left()
179
		Back()
180
		turtle.select(2)
181
		analyzer = peripheral.wrap("bottom")
182
		turtle.dropDown(turtle.getItemCount())
183
		analyzer.analyze()
184
		sleep(3.5)
185
		turtle.suckDown()
186
		Left()
187
		Forward()
188
		Forward()
189
		redstone.setOutput("bottom", true)
190
		turtle.dropDown(1)
191
		sleep(2)
192
		redstone.setOutput("bottom", false)
193
		Back()
194
		Back()
195
		Right()
196
		Empty()
197
		os.reboot()
198
	end
199
end
200
201
function GetNewSeeds()
202
	plantName = nil
203
  	NewLine("Changing out seeds")
204
	if p1 == nil or p2 == nil then
205
		p1 = 1
206
		p2 = 1
207
	elseif p1>p2 then
208
		Left()
209
		Forward()
210
		turtle.select(1)
211
		turtle.digDown()
212
		turtle.suckDown()
213
		turtle.select(1)
214
		turtle.placeDown()
215
		Back()
216
		Right()
217
		Forward()
218
		Empty()
219
		turtle.select(1)
220
		turtle.digDown()
221
		turtle.suckDown()
222
		turtle.select(1)
223
		turtle.placeDown()
224
		Back()
225
		Empty()
226
	elseif p1<p2 then
227
		Left()
228
		Forward()
229
		turtle.select(1)
230
		turtle.digDown()
231
		turtle.suckDown()
232
		turtle.select(1)
233
		turtle.placeDown()
234
		Back()
235
		Right()
236
		Empty()
237
		Forward()
238
		turtle.select(1)
239
		turtle.digDown()
240
		turtle.suckDown()
241
		turtle.select(1)
242
		turtle.placeDown()
243
		Empty()
244
		Back()
245
	else
246
		ClearSeeds()
247
		Empty()
248
	end
249
	Right()
250
	if turtle.suck() then
251
	  Left()
252
      if turtle.getItemCount() == 1 then
253
		--Empty()
254
		--os.reboot()
255
		DuplicateSingleSeed()
256
	  end
257
      analyzer = peripheral.wrap("bottom")
258
      turtle.dropDown(turtle.getItemCount())    
259
      analyzer.analyze()
260
  	  NewLine("Analyzing new seeds")
261
      while not analyzer.isAnalyzed() do 
262
		sleep(1)
263
	  end
264
	  plantName = analyzer.getSpecimen()
265
      turtle.select(2)
266
      turtle.suckDown()
267
268
  	  NewLine("Planting new seeds")
269
270
	  Forward()
271
	  Right()
272
	  Forward()
273
	  redstone.setOutput("bottom", true)
274
	  turtle.dropDown(1)
275
	  sleep(2)
276
      redstone.setOutput("bottom", false)
277
	  Back()
278
	  Left()
279
      Back()
280
      Left()
281
      Forward()
282
      Forward()
283
	  redstone.setOutput("bottom", true)
284
	  turtle.dropDown(1)
285
	  sleep(2)
286
      redstone.setOutput("bottom", false)
287
      Back()
288
      Back()
289
      Right()
290
      Empty()
291
	  CheckSeeds()
292
	else
293
	  Left()
294
  	  NewLine("Done!")
295
      done = true
296
	  ClearSeeds()
297
      return
298
	end
299
	CheckSeeds()
300
end
301
302
function CheckFuel(bool)
303
  local fuel = turtle.getFuelLevel()
304
  --Checking fuel level & fueling if low
305
  if turtle.getFuelLevel() < 25 then
306
    GetFuel()
307
	return true
308
  else
309
  return false
310
  end
311
end
312
313
function GetFuel()
314
  if not done then NewLine("Getting fuel") end
315
  --print("Current Fuel Level: "..turtle.getFuelLevel())
316
  Left()
317
  Left()
318
  turtle.select(16)
319
  while turtle.getFuelLevel() <= 100 do
320
    if not turtle.suck(1) and (turtle.getFuelLevel() <= 100) then
321
      NewLine("No fuel in fuel chest!")
322
      turtle.select(1)
323
	  done = true
324
	  break
325
    end
326
    turtle.refuel(1)
327
    turtle.drop(turtle.getItemCount(16))
328
	NewLine("Getting fuel")
329
    --print("Current Fuel Level: "..turtle.getFuelLevel())
330
  end
331
  turtle.select(1)
332
  Right()
333
  Right()
334
end
335
336
function CheckEmpty()
337
  local invItemNumber = 0
338
  NewLine("Counting Items...")
339
  for i = 1,16 do
340
	turtle.select(i) 
341
	invItemNumber = invItemNumber + turtle.getItemCount(i)
342
  end
343
  if invItemNumber > 0 then 
344
    NewLine("Not empty! Resetting") 
345
	turtle.select(1)
346
    return false 
347
  else
348
    turtle.select(1)
349
    return true
350
  end
351
end
352
353
function CheckPosition()
354
	if fs.exists("seedPos") then
355
		local file = fs.open("seedPos","r")
356
		local data = file.readAll()
357
		file.close()
358
		posData = textutils.unserialize(data)
359
	else
360
		local file = fs.open("seedPos","w")
361
		file.write(textutils.serialize(posData))
362
		file.close()
363
	end
364
end
365
366
function SavePosition()
367
	local file = fs.open("seedPos","w")
368
	file.write(textutils.serialize(posData))
369
	file.close()
370
end
371
372
function Forward()
373
	turtle.forward()
374
	if posData["rot"] == 1 then
375
		posData["x"] = posData["x"] + 1
376
	elseif posData["rot"] == 3 then
377
		posData["x"] = posData["x"] - 1
378
	elseif posData["rot"] == 0 then
379
		posData["y"] = posData["y"] - 1
380
	elseif posData["rot"] == 2 then
381
		posData["y"] = posData["y"] + 1
382
	end
383
	SavePosition()
384
end
385
386
function Right()
387
	turtle.turnRight()
388
	posData["rot"] = posData["rot"] + 1
389
	if posData["rot"] > 4 then posData["rot"] = 0 end
390
	SavePosition()
391
end
392
393
function Left()
394
	turtle.turnLeft()
395
	posData["rot"] = posData["rot"] - 1
396
	if posData["rot"] < 0 then posData["rot"] = 4 end
397
	SavePosition()
398
end
399
400
function Back()
401
	turtle.back()
402
	if posData["rot"] == 1 then
403
		posData["x"] = posData["x"] - 1
404
	elseif posData["rot"] == 3 then
405
		posData["x"] = posData["x"] + 1
406
	elseif posData["rot"] == 0 then
407
		posData["y"] = posData["y"] + 1
408
	elseif posData["rot"] == 2 then
409
		posData["y"] = posData["y"] - 1
410
	end
411
	SavePosition()
412
end
413
414
-- ===========STARTUP SEQUENCE==========
415
if turtle.getFuelLevel() > 4 then CheckPosition() end
416
CheckFuel()
417
-- ===========STARTUP SEQUENCE END======
418
419
-- ===========MAIN LOOP=================
420
while not done do
421
  --Sleep to prevent timeout
422
  --sleep(1)
423
  
424
  p1Mature = analyzer.isMature("EAST")
425
  p2Mature = analyzer.isMature("NORTH")
426
  
427
  if p1Mature and p2Mature then
428
  	NewLine("Going to cross-crop activator")
429
430
    --Place 2nd crop stick for crossbreeding
431
    Forward()
432
    Left()
433
    Forward()
434
	Right()
435
	Forward()
436
    redstone.setOutput("bottom", true)
437
    sleep(0.8)
438
    redstone.setOutput("bottom", false)
439
    
440
  	NewLine("Moving to second Analyzer")
441
442
    Back()
443
    Right()
444
	if turtle.suckDown() then
445
	  Forward()
446
	  Left()
447
	  Back()
448
      Empty()
449
	  os.reboot()
450
	else
451
      Back()
452
	end
453
454
    
455
  	NewLine("Waiting for new seed")
456
457
    analyzer = peripheral.wrap("bottom")
458
	if not analyzer.hasPlant("SOUTH") and not analyzer.isCrossCrop("SOUTH") then
459
	  NewLine("No cross crop sticks, resetting")
460
	  Forward()
461
	  Forward()
462
	  Left()
463
	  Back()
464
	  os.reboot()
465
	else
466
      while analyzer.isCrossCrop("SOUTH") do
467
        sleep(5)
468
      end
469
    end
470
  	NewLine("Picking up new seed")	
471
472
    Forward()
473
    turtle.select(1)
474
    turtle.digDown()
475
    turtle.suckDown()
476
    turtle.placeDown()
477
478
  	NewLine("Going to Analyzer 1")
479
480
    turtle.select(2)
481
    Forward()
482
    Left()
483
    Back()
484
    sleep(0.1)
485
486
	if CheckEmpty() then os.reboot() else turtle.select(2) end
487
  	NewLine("Analyzing new seed")
488
489
    analyzer = peripheral.wrap("bottom")
490
    turtle.dropDown(turtle.getItemCount())    
491
    analyzer.analyze()
492
    while not analyzer.isAnalyzed() do
493
		sleep(3.5)
494
	end
495
    local s1, s2, s3 = analyzer.getSpecimenStats()
496
    p3 = s1 + s2 + s3
497
	if p3 == 30 then
498
	  turtle.suckDown()
499
	  Forward()
500
	  Empty()
501
	  Back()
502
	  p1=nil
503
	  p2=nil
504
	  ClearSeeds()
505
	  --return
506
	else
507
      turtle.select(2)
508
      turtle.suckDown()
509
510
  	  NewLine("Removing weakest seed")
511
512
	  CheckSeeds()
513
      if p1<=p2 then
514
	    Left()
515
	    Forward()
516
	    turtle.select(1)
517
	    turtle.digDown()
518
	    turtle.suckDown()
519
	    turtle.select(1)
520
	    turtle.placeDown()
521
	    Forward()
522
	    redstone.setOutput("bottom", true)
523
	    turtle.select(2)
524
	    turtle.dropDown(1)
525
	    sleep(2)
526
        redstone.setOutput("bottom", false)
527
	    Back()
528
	    Back()
529
	    Right()
530
	    Empty()
531
      else
532
	    Forward()
533
	    turtle.select(1)
534
	    turtle.digDown()
535
	    turtle.suckDown()
536
	    Right()
537
	    turtle.select(1)
538
	    turtle.placeDown()
539
	    Forward()
540
	    redstone.setOutput("bottom", true)
541
	    turtle.select(2)
542
	    turtle.dropDown(1)
543
	    sleep(2)
544
        redstone.setOutput("bottom", false)
545
	    Back()
546
	    Left()
547
	    Back()
548
	    Empty()
549
      end
550
	end
551
  end
552
  CheckSeeds()
553
  if not done then
554
 NewLine("Waiting for growth")
555
  if not CheckFuel() then sleep(5) end
556
 end
557
end
558
-- ================Main Loop End=========================