View difference between Paste ID: nWMDmaQs and rXUc493m
SHOW: | | - or go back to the newest paste.
1
-- ** Stripmining Programm **
2
-- ** © 2013 SemOnLP       **
3
-- **************************
4
-- Changelog
5
-- 09.09.13 - V1.0 = Veroeffentlicht
6
-- 12.02.14 - V2.0 = Einstellungen speichern, neue Anzeige
7
-- 23.07.14 - V2.1 = Fehler beim Fackeln setzten im Seitengang
8
9
--start: block der verhindert das der hautpfad unterborchen wird
10
function Sicherheitspfad()
11
	if turtle.detectDown() == false then -- wen kein block unter der turel ist
12
		turtle.select(1) -- slot 1 auswaehlen
13
    	turtle.placeDown() -- und unter die turel setzten
14
	end
15
end
16
--end: block der verhindert das der hautpfad unterborchen wird
17
18
--start: hier wird der Hauptgang gegraben
19
function Mittelgang()
20
	NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
21
	Sicherheitspfad() -- wird nur im Hauptgang gemacht, prueft ob unter der Turtel ein Block ist wen nein setzt sie einen aus slot 1
22
	KiesUp() -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
23
24
	NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
25
	Sicherheitspfad() -- wird nur im Hauptgang gemacht, prueft ob unter der Turtel ein Block ist wen nein setzt sie einen aus slot 1
26
	KiesUp() -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
27
28
	Fackel("mitte") -- fackel auf der rechten seite setzten
29
	NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
30
	Sicherheitspfad() -- wird nur im Hauptgang gemacht, prueft ob unter der Turtel ein Block ist wen nein setzt sie einen aus slot 1
31
	KiesUp() -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
32
end
33
--end: hier wird der Hauptgang gegraben
34
35
--start: baut einen Seitengang
36
function Seitengang()
37
	for i = 1, laengeSeitengang, 1 do -- grabe dich in den gang
38
		NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
39
		KiesUp() -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
40
	end
41
	
42
	turtle.turnRight() -- umdrehen
43
	turtle.turnRight() -- umdrehen
44
	for i = laengeSeitengang, 1, -1 do -- komm zur mitte zurueck
45
		if (i % fackelnSeitengang == 0 and fackelnSeitengang ~= 0) then -- wenn fackeln gesetzt werden sollen und diese dem abastand entsprechen 
46
			Fackel("seite")
47
		end
48
		NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
49
	end
50
end
51
--end: baut einen Seitengang
52
53
--start: geht 1 block nach vorne
54
function NachVorne()
55
	while turtle.detect() do -- prueft ob ein block vor der turel ist
56
		turtle.dig()
57
		sleep(0.25)
58
	end
59
	
60
	while(turtle.forward() == false) do --wenn er nicht fahren konnte
61
		turtle.dig()  -- einmal abbauen
62
		turtle.attack() -- einmal zuschlagen
63
	end
64
end
65
--end: geht 1 block nach vorne
66
67
--start: beim abbauen uebersich ob kies nachfaell, wen ja solange abbauen bis nichts mehr kommt
68
function KiesUp()
69
	while turtle.detectUp() do -- prueft ob ueber ihm noch etwas ist 
70
		turtle.digUp() -- haut den block ueber sich ab
71
		sleep(0.25) -- wartet, funktioniert nur wen der block direck nachfaellt ist ein block 
72
	end
73
end
74
--end: beim abbauen uebersich ob kis nachfaell, wen ja solange abbauen bis nichts mehr kommt
75
76
--start: plaziert die Fackel
77
function Fackel(gang) -- ueber gibt gang oder seite
78
	if (fakelanzahl1 ~= 0) then
79
		turtle.select(slotFackeln1) -- waehlt die Fackeln aus
80
		fakelanzahl1 = fakelanzahl1 - 1
81
	elseif (fakelanzahl2 ~= 0) then
82
		slotFackeln1 = 0 -- setzt die slotz zurueck zum entleeren der kiste
83
		turtle.select(slotFackeln2) -- waehlt die Fackeln aus
84
		fakelanzahl2 = fakelanzahl2 - 1
85
	elseif (fakelanzahl3 ~= 0) then
86
		slotFackeln1 = 0 -- setzt die slotz zurueck zum entleeren der kiste
87
		slotFackeln2 = 0 -- setzt die slotz zurueck zum entleeren der kiste
88
		turtle.select(slotFackeln3) -- waehlt die Fackeln aus
89
		fakelanzahl3 = fakelanzahl3 - 1
90
	else
91
		slotFackeln1 = 0 -- setzt die slotz zurueck zum entleeren der kiste
92
		slotFackeln2 = 0 -- setzt die slotz zurueck zum entleeren der kiste
93
		slotFackeln3 = 0 -- setzt die slotz zurueck zum entleeren der kiste
94
		return -- keine fackeln mehr mach nichts
95
	end
96
	
97
	if (gang == "seite") then
98
			turtle.placeUp() -- plaziert die Fackel ueber sich
99
			turtle.select(1) -- waehlt wieder slot 1 oder den ersten der dan frei ist
100
	else	
101
		if (turtle.back()) then-- plaziert die fackel wen er 1 block zurueck fahren konnte
102
			turtle.placeUp() -- plaziert die Fackel ueber sich
103
			NachVorne() -- geht wieder nach vorne
104
		end
105
	end
106
	turtle.select(1) -- waehlt wieder slot 1 oder den ersten der dan frei ist
107
end
108
--end: plaziert die Fackel
109
110
--start: Steuerung fuer Hauptgang und Seitengang
111
function Strip()
112
	Mittelgang() -- hier wird der Hauptgang gegraben
113
	turtle.turnRight() -- startposition fuer die linke seite 
114
	Seitengang() -- graebt den ersten seitengang und kommt zurueck zur mitte
115
	Seitengang() -- graebt den zweiten seitengang und kommt zurueck zur mitte
116
end
117
--end: Steuerung fuer Hauptgang und Seitengang
118
119
--start: entleere das inventar in die endertruhe
120
function enderTruhe()
121
	if (endertruhe == 0) then -- wen keine kiste ausgewaehlt ist nicht in endertruhe leeren
122
		return
123
	end
124
	while turtle.detect() do -- die Truhe braucht platz um hingestell werden zu koennen also wird solange gegraben bis platz da ist
125
		turtle.dig()
126
		sleep(0.5)
127
	end
128
	turtle.select(slotEndertruhe) -- Truhe auswaehlen
129
	turtle.place() -- Truhe plazieren
130
	for i = 1,16 do -- k dient hier als zaehler um jeden platz leer zu machen
131
		turtle.select(i)
132
		if (turtle.getItemCount(i) == 0 and i ~= slotEndertruhe and i ~= slotFackeln1 and i ~= slotFackeln2 and i ~= slotFackeln3) then -- stop beachte die fackeln umzusetzend
133
			break -- hier wird abgebrochen wenn der slot leer ist 
134
			      -- eine schneller entladung der kist ist somit gegeben ^^
135
		elseif (turtle.getItemCount(i) ~= 0 and i ~= slotEndertruhe and i ~= slotFackeln1 and i ~= slotFackeln2 and i ~= slotFackeln3) then
136
			turtle.drop() -- legt die items in aus dem slot in die truhe
137
		end
138
	end
139
	turtle.select(slotEndertruhe) -- waehlt slot 15 aus 
140
	turtle.dig() -- und nimmt die truhe wieder auf
141
	turtle.select(1) -- waehlt wieder slot 1 oder den ersten der dan frei ist
142
end
143
--end: entleere das inventar in die endertruhe
144
145
--start: graebt den Tunnel solange wie eingegeben wurde
146
function tunnel()
147
	statusBildschirm(0) -- bereinigt den Bildschirm beim Start des Tunnelgrabens
148
	kistenabstand = entleerungEndertruhe  -- nach diesem gang wird das 1 mal die truhe geleert
149
	for aktuellergang = 1, ganganzahl, 1 do -- schleife die soviele gaenge macht wie eingeben
150
		Strip() -- hier wird der hauptgang mit einem Tunnel links und rechts gegraben
151
		-- entwerder nur nach links drehen oder nach links drehen und die kiste setzten
152
		if (aktuellergang  == kistenabstand and aktuellergang ~= ganganzahl) then
153
			turtle.turnLeft() -- gehe einmal nach links 
154
			kistenabstand = kistenabstand + entleerungEndertruhe -- kistenabstand wieder 3 hoch
155
			enderTruhe() -- entleer die in die Enertrue
156
		elseif (aktuellergang  == ganganzahl) then -- letzter gang nach rechts gehen und in die Truhe entlehren
157
			turtle.turnRight() -- zurueck in gang drehen fuer die fahrt zur Ausgangsposition
158
			enderTruhe() -- es war der letzte gang, sprich stell die kist das letzte mal und entleeren
159
		else 
160
			turtle.turnLeft() -- gehe nur einmal nach lings und mach mit dem hauptgan weiter
161
		end
162
		statusBildschirm(aktuellergang) -- Aktuallisierung des Bildschirms wenn ein Gang gegraben wurde (aktuellergang muss uebergeben werden)
163
	end
164
end
165
--end: graebt den Tunnel solange wie eingegeben wurde
166
167
--start: Zurueck zur Ausgangsposition
168
function back()
169
	for a = 1,ganganzahl * 3 do
170
		NachVorne()
171
	end
172
end
173
--end: Zurueck zur Ausgangsposition
174
175
--start: Aktuallisierung des Bildschirms wenn ein Gang gegraben wurde
176
function statusBildschirm(aktuellergang)
177
	-- start: Zeigt das Fuel-Level an
178
	term.setCursorPos( 1, 3)
179
	term.clearLine()
180
	fuellevel = turtle.getFuelLevel()
181
	print("Fuel-Level: " .. fuellevel)
182
	
183
	term.setCursorPos( 1, 4)
184
	term.clearLine()
185
	if (endertruhe == 1) then
186
		print("Endertruhe: Ja")
187
	else
188
		print("Endertruhe: Nein")
189
	end		
190
	
191
	-- start: Zeigt die anzahl der Fakeln an
192
	term.setCursorPos( 1, 5)
193
	term.clearLine()
194
	fackeln = fakelanzahl1 + fakelanzahl2 + fakelanzahl3
195
	print("Fackeln   : " .. fackeln)
196
	
197
	term.setCursorPos(1,7)
198
	term.clearLine()
199
	if (aktuellergang > 0) then
200
		print("Gang " .. aktuellergang .. " von " .. ganganzahl .. " wurde fertiggestellt!")
201
	else -- wen das programm startet
202
		term.setCursorPos(1,8)
203
		term.clearLine()
204
		term.setCursorPos(1,9)
205
		term.clearLine()
206
		term.setCursorPos(1,10)
207
		term.clearLine()
208
		term.setCursorPos(1,12)
209
		term.clearLine()
210
		turtle.select(1) -- waehlt zum start slot 1 aus
211
	end
212
end
213
--end: Aktuallisierung des Bildschirms wenn ein Gang gegraben wurde
214
215
216
--START: Programmsteuerung eingabe
217
--start: Aktuellisuerung des Status fuer Fakeln, Endertruhe, und Fullevel
218
local function checkStatus()
219
	slotsAnzeige = {"_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_"}
220
	slotsAnzeige[slotEndertruhe] = "e"
221
	slotsAnzeige[slotFackeln1] = "f"
222
	slotsAnzeige[slotFackeln2] = "f"
223
	slotsAnzeige[slotFackeln3] = "f"
224
	slotsAnzeige[slotAutofuel] = "a"
225
	
226
	local blink = 0 -- wird benoetigt fuer das blinken der Warnung das das Fuellevel nidrig ist
227
	while true do --prueft endlos den status
228
		time() -- zeit die Uhrzeit oben rechts an
229
230
		-- start: Zeigt das Fuel-Level an
231
		term.setCursorPos( 1, 3)
232
		term.clearLine()
233
		fuellevel = turtle.getFuelLevel()
234
		if (fuellevel < 500 and blink == 0) then
235
  			print("Fuel-Level: " .. fuellevel .. " !! Warnung !!")
236
  			blink = 1 -- setz blinken der Warnung zurueck
237
		else
238
			print("Fuel-Level: " .. fuellevel)
239
			blink = 0 -- setz blinken der Warnung zurueck
240
		end
241
		-- end: Zeigt das Fuel-Level an
242
		-- start: Zeigt die aufladung des Fuel-Level an
243
		term.setCursorPos( 1, 7)
244
		term.clearLine()
245
		term.clearLine()
246
		ladeeinheiten = turtle.getItemCount(tonumber(slotAutofuel)) -- Einheiten zum Aufladen aus slot 13
247
		if (ladeeinheiten == 1) then
248
			print("Hinweis:                       !".. slotsAnzeige[1] .. "!".. slotsAnzeige[2] .. "!".. slotsAnzeige[3] .. "!".. slotsAnzeige[4])
249
			print("Fuelaufladung um eine Einheit  !".. slotsAnzeige[5] .. "!".. slotsAnzeige[6] .. "!".. slotsAnzeige[7] .. "!".. slotsAnzeige[8])
250
			print("                               !".. slotsAnzeige[9] .. "!".. slotsAnzeige[10] .. "!".. slotsAnzeige[11] .. "!".. slotsAnzeige[12])
251
			print("                               !".. slotsAnzeige[13] .. "!".. slotsAnzeige[14] .. "!".. slotsAnzeige[15] .. "!".. slotsAnzeige[16])
252
		elseif (ladeeinheiten > 9) then 
253
			print("Hinweis:                       !".. slotsAnzeige[1] .. "!".. slotsAnzeige[2] .. "!".. slotsAnzeige[3] .. "!".. slotsAnzeige[4])
254
			print("Fuelaufladung um " .. ladeeinheiten .. " Einheiten  !".. slotsAnzeige[5] .. "!".. slotsAnzeige[6] .. "!".. slotsAnzeige[7] .. "!".. slotsAnzeige[8])
255
			print("                               !".. slotsAnzeige[9] .. "!".. slotsAnzeige[10] .. "!".. slotsAnzeige[11] .. "!".. slotsAnzeige[12])
256
			print("                               !".. slotsAnzeige[13] .. "!".. slotsAnzeige[14] .. "!".. slotsAnzeige[15] .. "!".. slotsAnzeige[16])
257
		elseif (ladeeinheiten > 1) then 
258
			print("Hinweis:                       !".. slotsAnzeige[1] .. "!".. slotsAnzeige[2] .. "!".. slotsAnzeige[3] .. "!".. slotsAnzeige[4])
259
			print("Fuelaufladung um " .. ladeeinheiten .. " Einheiten   !".. slotsAnzeige[5] .. "!".. slotsAnzeige[6] .. "!".. slotsAnzeige[7] .. "!".. slotsAnzeige[8])
260
			print("                               !".. slotsAnzeige[9] .. "!".. slotsAnzeige[10] .. "!".. slotsAnzeige[11] .. "!".. slotsAnzeige[12])
261
			print("                               !".. slotsAnzeige[13] .. "!".. slotsAnzeige[14] .. "!".. slotsAnzeige[15] .. "!".. slotsAnzeige[16])
262
		else
263
			print("                               !".. slotsAnzeige[1] .. "!".. slotsAnzeige[2] .. "!".. slotsAnzeige[3] .. "!".. slotsAnzeige[4])
264
			print("                               !".. slotsAnzeige[5] .. "!".. slotsAnzeige[6] .. "!".. slotsAnzeige[7] .. "!".. slotsAnzeige[8])
265
			print("                               !".. slotsAnzeige[9] .. "!".. slotsAnzeige[10] .. "!".. slotsAnzeige[11] .. "!".. slotsAnzeige[12])
266
			print("                               !".. slotsAnzeige[13] .. "!".. slotsAnzeige[14] .. "!".. slotsAnzeige[15] .. "!".. slotsAnzeige[16])
267
		end
268
		-- end: Zeigt die aufladung des Fuel-Level an
269
		
270
		-- start: Pruefung fuer die Endertruhe
271
		term.setCursorPos( 1, 4)
272
		term.clearLine()
273
		endertruhe = turtle.getItemCount(tonumber(slotEndertruhe))
274
		if (endertruhe == 1) then
275
			print("Endertruhe: Ja")
276
			endertruhe = 1 --braucht man nicht ist nur zur sicherheit
277
		elseif (endertruhe > 1) then
278
			print("Endertruhe: Bitte nur 1 Kiste")
279
			endertruhe = 0
280
		else
281
			print("Endertruhe: Nein")
282
			endertruhe = 0
283
		end		
284
		-- end: Pruefung fuer die Endertruhe
285
		
286
		-- start: Zeigt die anzahl der Fakeln an
287
		term.setCursorPos( 1, 5)
288
		term.clearLine()
289
		fackeln = turtle.getItemCount(tonumber(slotFackeln1)) + turtle.getItemCount(tonumber(slotFackeln2)) + turtle.getItemCount(tonumber(slotFackeln3))
290
		if (fackeln == 0) then
291
			print("Fackeln   : Keine")
292
		elseif (fackeln == 1) then
293
			print("Fackeln   : " .. fackeln .. " (Eingabe 0 = ein Gang)")
294
		else
295
			print("Fackeln   : " .. fackeln .. " (Eingabe 0=" .. fackeln .." Gaenge)")
296
		end
297
		-- end: Zeigt die anzahl der Fakeln an
298
		
299
		term.setCursorPos(38,3)
300
		print("!a")
301
		term.setCursorPos(38,4)
302
		print("!e")
303
		term.setCursorPos(38,5)
304
		print("!f")
305
		term.setCursorPos(36, 12) -- setzt angezeigte curser zurueck zur eingabe
306
		sleep(0.4) -- minecraft minute dauert 0.8 Sekunden 
307
	end
308
end
309
--end: Aktuellisuerung des Status fuer Fakeln, Endertruhe, und Fullevel
310
311
--start: Eingabe der Fackeln und Pruefung ob 0 oder zwischen 1 und 999 oder einstellungen
312
local function eingabeTunnellaenge()
313
	while true do -- ergibt eine endlosschleife bis man auf return kommt
314
		term.setCursorPos(1, 12) -- setzt den curser hier her
315
		term.clearLine() -- loescht eventuell den Hilfetext
316
		term.setCursorPos(1, 12) -- setzt den curser hier her
317
		print("Anzahl Gaenge? (e = Einstellungen):") -- anzeige des Hilfetextes
318
		                       
319
		term.setCursorPos(36, 12) -- setzt position auf eingabe
320
		
321
		local inputstring = read() -- auswertung der eingabe
322
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
323
		   	ganganzahl = tonumber(inputstring) --macht aus dem Strin ein zahl
324
			if (ganganzahl >= 0 and ganganzahl <= 999) then -- wen die zahl zwischen 0 und 999 liegt alles ok
325
				if (ganganzahl == 0) then 
326
					ganganzahl = fackeln
327
			    end
328
				einstellung = 0
329
				return -- wenn alles ok ist, beende die eingabe
330
			end
331
		end
332
333
		if (inputstring == "e") then
334
			einstellung = 1
335
			return -- einstellung aender
336
		else
337
			term.setCursorPos(1, 12) -- setzt den curser hier her
338
			term.clearLine()
339
			print("0 = Fakelanzahl oder 1-999 moeglich")
340
			sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
341
		end
342
	end
343
end
344
--end: Eingabe der Fackeln und Pruefung ob 0 oder zwischen 1 und 999 oder einstellungen
345
346
--start: eingabe der einstellungen fuer das programm
347
local function einstellungen()
348
	for i = 3, 10, 1 do -- loesch den bilschirm ab der dritten zeile
349
		term.setCursorPos(1,i) -- zeile fuer anzeige bereinigen 
350
		term.clearLine() -- zeile fuer anzeige bereinigen 
351
	end
352
	
353
	term.setCursorPos(1,12) -- zeile fuer anzeige bereinigen 
354
	term.clearLine() -- zeile fuer anzeige bereinigen 
355
	
356
	
357
	-- anzeige fuer die einstellungen
358
	term.setCursorPos(1, 3) -- setzt den curser in zeile 3
359
	print("Slot Endertruhe        : " .. slotEndertruhe) -- anzeige des Hilfetextes
360
	term.setCursorPos(1, 4) -- setzt den curser in zeile 3
361
	print("Slot eins fuer Fackeln : " .. slotFackeln1) -- anzeige des Hilfetextes
362
	term.setCursorPos(1, 5) -- setzt den curser in zeile 3
363
	print("Slot zwei fuer Fackeln : " .. slotFackeln2) -- anzeige des Hilfetextes
364
	term.setCursorPos(1, 6) -- setzt den curser in zeile 3
365
	print("Slot drei fuer Fackeln : " .. slotFackeln3) -- anzeige des Hilfetextes
366
	term.setCursorPos(1, 7) -- setzt den curser in zeile 3
367
	print("Slot Autofuelaufladung : " .. slotAutofuel) -- anzeige des Hilfetextes
368
	term.setCursorPos(1, 8) -- setzt den curser in zeile 3
369
	print("Laenge der Seitengaenge: " .. laengeSeitengang) -- anzeige des Hilfetextes
370
	term.setCursorPos(1, 9) -- setzt den curser in zeile 3
371
	print("Fakeln in Seitengaenge : " .. fackelnSeitengang) -- anzeige des Hilfetextes
372
	term.setCursorPos(1, 10) -- setzt den curser in zeile 3
373
	print("Entleerung Enderchest  : " .. entleerungEndertruhe) -- anzeige des Hilfetextes
374
	
375
	corsor = 3 -- eingabeposition, wird gebraucht bei der zeitanzeige
376
	einstellungenEndertruhe()
377
	term.setCursorPos(1, 3) -- setzt den curser in zeile 3
378
	print("Slot Endertruhe        : " .. slotEndertruhe) -- anzeige des Hilfetextes
379
	
380
	corsor = 4 -- eingabeposition, wird gebraucht bei der zeitanzeige
381
	einstellungenFackeln1()
382
	term.setCursorPos(1, 4) -- setzt den curser in zeile 3
383
	print("Slot eins fuer Fackeln : " .. slotFackeln1) -- anzeige des Hilfetextes
384
	
385
	corsor = 5 -- eingabeposition, wird gebraucht bei der zeitanzeige
386
	einstellungenFackeln2()
387
	term.setCursorPos(1, 5) -- setzt den curser in zeile 3
388
	print("Slot zwei fuer Fackeln : " .. slotFackeln2) -- anzeige des Hilfetextes
389
	
390
	corsor = 6 -- eingabeposition, wird gebraucht bei der zeitanzeige
391
	einstellungenFackeln3()
392
	term.setCursorPos(1, 6) -- setzt den curser in zeile 3
393
	print("Slot drei fuer Fackeln : " .. slotFackeln3) -- anzeige des Hilfetextes
394
	
395
	corsor = 7 -- eingabeposition, wird gebraucht bei der zeitanzeige
396
	einstellungenAutofuel()
397
	term.setCursorPos(1, 7) -- setzt den curser in zeile 3
398
	print("Slot Autofuelaufladung : " .. slotAutofuel) -- anzeige des Hilfetextes
399
	
400
	corsor = 8 -- eingabeposition, wird gebraucht bei der zeitanzeige
401
	einstellungenLaengeSeitengang()
402
	term.setCursorPos(1, 8) -- setzt den curser in zeile 3
403
	print("Laenge der Seitengaenge: " .. laengeSeitengang) -- anzeige des Hilfetextes
404
	
405
	corsor = 9 -- eingabeposition, wird gebraucht bei der zeitanzeige
406
	einstellungenFackelnSeitengang()
407
	term.setCursorPos(1, 9) -- setzt den curser in zeile 3
408
	print("Fakeln in Seitengaenge : " .. fackelnSeitengang) -- anzeige des Hilfetextes
409
	
410
	corsor = 10 -- eingabeposition, wird gebraucht bei der zeitanzeige
411
	einstellungenEntleerungEnderchest()
412
	term.setCursorPos(1, 10) -- setzt den curser in zeile 3
413
	print("Entleerung Enderchest  : " .. entleerungEndertruhe) -- anzeige des Hilfetextes
414
end
415
416
--end: eingabe der einstellungen fuer das programm
417
418
--start: eingabe der einstellungen fuer das programm
419
function einstellungenEndertruhe()
420
	while true do -- ergibt eine endlosschleife bis man auf return kommt
421
		term.setCursorPos(1, 12) -- setzt den curser hier her
422
		term.clearLine() -- loescht eventuell den Hilfetext
423
		term.setCursorPos(1, 12) -- setzt den curser hier her
424
		print("Slot fuer die Endertruhe") -- anzeige des Hilfetextes
425
		
426
		term.setCursorPos(1, 3) -- setzt den curser in zeile 3
427
		term.clearLine()
428
		print("Slot Endertruhe        :") -- anzeige des Hilfetextes
429
		term.setCursorPos(26, 3) -- setzt position auf eingabe
430
		
431
		
432
		local inputstring1 = read() -- auswertung der eingabe
433
		if (tonumber(inputstring1) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
434
		   	slotEndertruhe = tonumber(inputstring1) --macht aus dem Strin ein zahl
435
			if (slotEndertruhe >= 0 and slotEndertruhe <= 16) then -- wen die zahl zwischen 0 und 999 liegt alles ok
436
				if (slotEndertruhe == 0) then 
437
					slotEndertruhe = 15
438
			    end
439
				return -- wenn alles ok ist, beende die eingabe
440
			end
441
		end
442
443
		term.setCursorPos(1, 12) -- setzt den curser hier her
444
		term.clearLine()
445
		print("Nur Slot 1 bis 16 moeglich, 0=Standard")
446
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
447
	end
448
end
449
450
--start: eingabe der einstellungen fuer das programm
451
function einstellungenFackeln1()
452
	while true do -- ergibt eine endlosschleife bis man auf return kommt
453
		gleichslot = 0 -- erstmal keine ueberlagerung
454
		term.setCursorPos(1, 12) -- setzt den curser hier her
455
		term.clearLine() -- loescht eventuell den Hilfetext
456
		term.setCursorPos(1, 12) -- setzt den curser hier her
457
		print("Slot eins fuer die Fackeln") -- anzeige des Hilfetextes
458
		
459
		term.setCursorPos(1, 4) -- setzt den curser in zeile 3
460
		term.clearLine()
461
		print("Slot eins fuer Fackeln :") -- anzeige des Hilfetextes
462
		term.setCursorPos(26, 4) -- setzt position auf eingabe
463
		
464
		
465
		local inputstring = read() -- auswertung der eingabe
466
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
467
		   	slotFackeln1 = tonumber(inputstring) --macht aus dem Strin ein zahl
468
			if (slotFackeln1 >= 0 and slotFackeln1 <= 16) then -- wen die zahl zwischen 0 und 999 liegt alles ok
469
				if (slotFackeln1 == 0) then 
470
					slotFackeln1 = 16
471
				end
472
473
				if (slotFackeln1 ~= slotEndertruhe) then -- gleicher slot wie die endertruhe
474
					return -- wenn alles ok ist, beende die eingabe
475
				else
476
					gleichslot = 1 -- wen sich 2 slots ueberlagern wuerden
477
				end
478
			end
479
		end
480
481
482
		term.setCursorPos(1, 12) -- setzt den curser hier her
483
		term.clearLine()
484
		if (gleichslot == 1) then
485
			print("Slot bereits in Verwendung")
486
		else
487
			print("Nur Slot 1 bis 16 moeglich, 0=Standard")
488
		end
489
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
490
	end
491
end
492
--end: 
493
--start: eingabe der einstellungen fuer das programm
494
function einstellungenFackeln2()
495
	while true do -- ergibt eine endlosschleife bis man auf return kommt
496
		gleichslot = 0 -- erstmal keine ueberlagerung
497
		term.setCursorPos(1, 12) -- setzt den curser hier her
498
		term.clearLine() -- loescht eventuell den Hilfetext
499
		term.setCursorPos(1, 12) -- setzt den curser hier her
500
		print("Slot zwei fuer die Fackeln") -- anzeige des Hilfetextes
501
		
502
		term.setCursorPos(1, 5) -- setzt den curser in zeile 3
503
		term.clearLine()
504
		print("Slot zwei fuer Fackeln :") -- anzeige des Hilfetextes
505
		term.setCursorPos(26, 5) -- setzt position auf eingabe
506
		
507
		
508
		local inputstring = read() -- auswertung der eingabe
509
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
510
		   	slotFackeln2 = tonumber(inputstring) --macht aus dem Strin ein zahl
511
			if (slotFackeln2 >= 0 and slotFackeln2 <= 16) then -- wen die zahl zwischen 0 und 999 liegt alles ok
512
				if (slotFackeln2 == 0) then 
513
					slotFackeln2 = 12
514
			    end
515
				
516
				if (slotFackeln2 ~= slotEndertruhe and slotFackeln2 ~= slotFackeln1) then -- gleicher slot wie die endertruhe
517
					return -- wenn alles ok ist, beende die eingabe
518
				else
519
					gleichslot = 1 -- wen sich 2 slots ueberlagern wuerden
520
				end
521
			end
522
		end
523
524
		term.setCursorPos(1, 12) -- setzt den curser hier her
525
		term.clearLine()
526
		if (gleichslot == 1) then
527
			print("Slot bereits in Verwendung")
528
		else
529
			print("Nur Slot 1 bis 16 moeglich, 0=Standard")
530
		end
531
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
532
	end
533
end
534
--end: 
535
--start: eingabe der einstellungen fuer das programm
536
function einstellungenFackeln3()
537
	while true do -- ergibt eine endlosschleife bis man auf return kommt
538
		term.setCursorPos(1, 12) -- setzt den curser hier her
539
		term.clearLine() -- loescht eventuell den Hilfetext
540
		term.setCursorPos(1, 12) -- setzt den curser hier her
541
		print("Slot drei fuer die Fackeln") -- anzeige des Hilfetextes
542
		
543
		term.setCursorPos(1, 6) -- setzt den curser in zeile 3
544
		term.clearLine()
545
		print("Slot drei fuer Fackeln :") -- anzeige des Hilfetextes
546
		term.setCursorPos(26, 6) -- setzt position auf eingabe
547
		
548
		
549
		local inputstring = read() -- auswertung der eingabe
550
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
551
		   	slotFackeln3 = tonumber(inputstring) --macht aus dem Strin ein zahl
552
			if (slotFackeln3 >= 0 and slotFackeln3 <= 16) then -- wen die zahl zwischen 0 und 999 liegt alles ok
553
				if (slotFackeln3 == 0) then 
554
					slotFackeln3 = 8
555
			    end
556
				if (slotFackeln3 ~= slotEndertruhe and slotFackeln3 ~= slotFackeln1 and slotFackeln3 ~= slotFackeln2) then -- gleicher slot wie die endertruhe
557
					return -- wenn alles ok ist, beende die eingabe
558
				else
559
					gleichslot = 1 -- wen sich 2 slots ueberlagern wuerden
560
				end
561
			end
562
		end
563
564
		term.setCursorPos(1, 12) -- setzt den curser hier her
565
		term.clearLine()
566
		if (gleichslot == 1) then
567
			print("Slot bereits in Verwendung")
568
		else
569
			print("Nur Slot 1 bis 16 moeglich, 0=Standard")
570
		end
571
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
572
	end
573
end
574
--end: 
575
576
--start: eingabe der einstellungen fuer das programm
577
function einstellungenAutofuel()
578
	while true do -- ergibt eine endlosschleife bis man auf return kommt
579
		term.setCursorPos(1, 12) -- setzt den curser hier her
580
		term.clearLine() -- loescht eventuell den Hilfetext
581
		term.setCursorPos(1, 12) -- setzt den curser hier her
582
		print("Slot fuer Autofuelaufladung beim Start") -- anzeige des Hilfetextes
583
		
584
		term.setCursorPos(1, 7) -- setzt den curser in zeile 3
585
		term.clearLine()
586
		print("Slot Autofuelaufladung :") -- anzeige des Hilfetextes
587
		term.setCursorPos(26, 7) -- setzt position auf eingabe
588
		
589
		
590
		local inputstring = read() -- auswertung der eingabe
591
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
592
		   	slotAutofuel = tonumber(inputstring) --macht aus dem Strin ein zahl
593
			if (slotAutofuel >= 0 and slotAutofuel <= 16) then -- wen die zahl zwischen 0 und 999 liegt alles ok
594
				if (slotAutofuel == 0) then 
595
					slotAutofuel = 13
596
			    end
597
				if (slotAutofuel ~= slotEndertruhe and slotAutofuel ~= slotFackeln1 and slotAutofuel ~= slotFackeln2 and slotAutofuel ~= slotFackeln3) then -- gleicher slot wie die endertruhe
598
					return -- wenn alles ok ist, beende die eingabe
599
				else
600
					gleichslot = 1 -- wen sich 2 slots ueberlagern wuerden
601
				end
602
			end
603
		end
604
605
		term.setCursorPos(1, 12) -- setzt den curser hier her
606
		term.clearLine()
607
		if (gleichslot == 1) then
608
			print("Slot bereits in Verwendung")
609
		else
610
			print("Nur Slot 1 bis 16 moeglich, 0=Standard")
611
		end
612
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
613
	end
614
end
615
--end: 
616
617
618
--start: eingabe der einstellungen fuer das programm
619
function einstellungenLaengeSeitengang()
620
	while true do -- ergibt eine endlosschleife bis man auf return kommt
621
		term.setCursorPos(1, 12) -- setzt den curser hier her
622
		term.clearLine() -- loescht eventuell den Hilfetext
623
		term.setCursorPos(1, 12) -- setzt den curser hier her
624
		print("Laenge eines Seitenganges") -- anzeige des Hilfetextes
625
		
626
		term.setCursorPos(1, 8) -- setzt den curser in zeile 3
627
		term.clearLine()
628
		print("Laenge der Seitengaenge:") -- anzeige des Hilfetextes
629
		term.setCursorPos(26, 8) -- setzt position auf eingabe
630
		
631
		
632
		local inputstring = read() -- auswertung der eingabe
633
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
634
		   	laengeSeitengang = tonumber(inputstring) --macht aus dem Strin ein zahl
635
			if (laengeSeitengang >= 0 and laengeSeitengang <= 999) then -- wen die zahl zwischen 0 und 999 liegt alles ok
636
				if (laengeSeitengang == 0) then 
637
					laengeSeitengang = 5
638
			    end
639
				return -- wenn alles ok ist, beende die eingabe
640
			end
641
		end
642
643
		term.setCursorPos(1, 12) -- setzt den curser hier her
644
		term.clearLine()
645
		print("Nur 0 bis 999 moeglich, 0=Standard")
646
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
647
	end
648
end
649
--end: 
650
651
--start: eingabe der einstellungen fuer das programm
652
function einstellungenFackelnSeitengang()
653
	while true do -- ergibt eine endlosschleife bis man auf return kommt
654
		term.setCursorPos(1, 12) -- setzt den curser hier her
655
		term.clearLine() -- loescht eventuell den Hilfetext
656
		term.setCursorPos(1, 12) -- setzt den curser hier her
657
		print("Abstand zwischen Fakeln im Seitengang") -- anzeige des Hilfetextes
658
		
659
		term.setCursorPos(1, 9) -- setzt den curser in zeile 3
660
		term.clearLine()
661
		print("Fakeln in Seitengaenge :") -- anzeige des Hilfetextes
662
		term.setCursorPos(26, 9) -- setzt position auf eingabe
663
		
664
		
665
		local inputstring = read() -- auswertung der eingabe
666
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
667
		   	fackelnSeitengang = tonumber(inputstring) --macht aus dem Strin ein zahl
668
			if (fackelnSeitengang <= laengeSeitengang) then -- wen die zahl zwischen 0 und 999 liegt alles ok
669
				if (fackelnSeitengang == 0) then 
670
					fackelnSeitengang = 0
671
			    end
672
				return -- wenn alles ok ist, beende die eingabe
673
			else
674
				term.setCursorPos(1, 12) -- setzt den curser hier her
675
				term.clearLine()
676
				print("Seitenganz waere zu kurz")
677
				sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
678
			end
679
		end	
680
	end
681
end
682
--end: 
683
684
--start: eingabe der einstellungen fuer das programm
685
function einstellungenEntleerungEnderchest()
686
	while true do -- ergibt eine endlosschleife bis man auf return kommt
687
		term.setCursorPos(1, 12) -- setzt den curser hier her
688
		term.clearLine() -- loescht eventuell den Hilfetext
689
		term.setCursorPos(1, 12) -- setzt den curser hier her
690
		print("Anzahl Gaenge bis zur leerung") -- anzeige des Hilfetextes
691
		
692
		term.setCursorPos(1, 10) -- setzt den curser in zeile 3
693
		term.clearLine()
694
		print("Entleerung Enderchest  :") -- anzeige des Hilfetextes
695
		term.setCursorPos(26, 10) -- setzt position auf eingabe
696
		
697
		
698
		local inputstring = read() -- auswertung der eingabe
699
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
700
		   	entleerungEndertruhe = tonumber(inputstring) --macht aus dem Strin ein zahl
701
			if (entleerungEndertruhe >= 0 and entleerungEndertruhe <= 999) then -- wen die zahl zwischen 0 und 999 liegt alles ok
702
				if (entleerungEndertruhe == 0) then 
703
					entleerungEndertruhe = 3 -- standard
704
			    end
705
				return -- wenn alles ok ist, beende die eingabe
706
			end
707
		end
708
709
		term.setCursorPos(1, 12) -- setzt den curser hier her
710
		term.clearLine()
711
		print("Nur 0 bis 999 moeglich, 0=Standard")
712
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
713
	end
714
end
715
--end: 
716
717
718
--start: Uhrzeit und Tag in Minecraft auslesen und anzeigen
719
function time()
720
	term.setCursorPos(1, 1) -- position auf Zeit setzten
721
	local day -- locale Variable fuer den Tag in Minecraft
722
	local zeit -- locale Variable fuer die Uhrzeit in Minecraft
723
	day = os.day() -- nicht im Gebrauch!
724
	zeit = textutils.formatTime(os.time(), true) -- wandelt die anzeige in das 24 Stunden Format
725
	if (string.len(zeit) == 4) then -- zeit Anzeigt vor oder nach 10 Uhr
726
		print("Systemhinweis               Zeit:  " .. zeit) -- vor 10 Uhr, es geht um die laenge
727
	else
728
		print("Systemhinweis               Zeit: " .. zeit) -- nach 10 Uhr
729
	end
730
end
731
--end: Uhrzeit und Tag in Minecraft auslesen und anzeigen
732
local function timeshow()
733
	while true do --prueft endlos den status
734
		term.setCursorPos(1, 1) -- position auf Zeit setzten
735
		local day -- locale Variable fuer den Tag in Minecraft
736
		local zeit -- locale Variable fuer die Uhrzeit in Minecraft
737
		day = os.day() -- nicht im Gebrauch!
738
		zeit = textutils.formatTime(os.time(), true) -- wandelt die anzeige in das 24 Stunden Format
739
		if (string.len(zeit) == 4) then -- zeit Anzeigt vor oder nach 10 Uhr
740
			print("Einstellungen               Zeit:  " .. zeit) -- vor 10 Uhr, es geht um die laenge
741
		else
742
			print("Einstellungen               Zeit: " .. zeit) -- nach 10 Uhr
743
		end
744
		 
745
		term.setCursorPos(26, corsor) -- setzt angezeigte curser zurueck zur eingabe
746
		sleep(0.4) -- minecraft minute dauert 0.8 Sekunden 
747
	end
748
end
749
750
--end: Programmsteuerung eingabe
751
752
--start: bereinigt den Bildschirm und baut das eingabe Fenster auf
753
function bildschirmStart()
754
	shell.run("clear") -- löscht allties auf dem Bildschirm
755
	print("Systemhinweis")
756
	print("=======================================")
757
	term.setCursorPos(1,6)
758
	term.clearLine()
759
	print("---------------------------------------")
760
	term.setCursorPos(1,11)
761
	print("---------------------------------------")
762
end
763
--end: bereinigt den Bildschirm und baut das eingabe Fenster auf
764
765
--start: zeigt an das die Turel fertig sit
766
function zeigtFertig()
767
	term.setCursorPos(1,10) -- zeile 10 fuer anzeige bereinigen 
768
	term.clearLine() -- zeile 10 fuer anzeige bereinigen 
769
	print("!!!Fertig - Programm beendet!!!") -- fertig meldung
770
	term.setCursorPos(1,12) -- letzte zeile bereinigen 
771
	term.clearLine() -- letzte zeile bereinigen 
772
end
773
--end: zeigt an das die Turel fertig sit
774
775
function einstellungenSpeichern()
776
	config = fs.open("strip.conf", "w") -- oeffent die config datei
777
	config.writeLine("slotEndertruhe       = " .. slotEndertruhe)
778
	config.writeLine("slotFackeln1         = " .. slotFackeln1)
779
	config.writeLine("slotFackeln2         = " .. slotFackeln2)
780
	config.writeLine("slotFackeln3         = " .. slotFackeln3)
781
	config.writeLine("slotAutofuel         = " .. slotAutofuel)
782
	config.writeLine("fackelnSeitengang    = " .. fackelnSeitengang) 
783
	config.writeLine("laengeSeitengang     = " .. laengeSeitengang) 
784
	config.writeLine("entleerungEndertruhe = " .. entleerungEndertruhe)
785
	config.close() -- schließt die einstellungen
786
end
787
788
789
function einstellungenLesen()
790
	config = fs.open("strip.conf", "r")
791
	if config then
792
		line = config.readLine()
793
		slotEndertruhe = tonumber(string.sub(line,24,30))
794
		line = config.readLine()
795
		slotFackeln1 = tonumber(string.sub(line,24,30))
796
		line = config.readLine()
797
		slotFackeln2 = tonumber(string.sub(line,24,30))
798
		line = config.readLine()
799
		slotFackeln3 = tonumber(string.sub(line,24,30))
800
		line = config.readLine()
801
		slotAutofuel = tonumber(string.sub(line,24,30))
802
		line = config.readLine()
803
		fackelnSeitengang = tonumber(string.sub(line,24,30))
804
		line = config.readLine()
805
		laengeSeitengang = tonumber(string.sub(line,24,30))
806
		line = config.readLine()
807
		entleerungEndertruhe = tonumber(string.sub(line,24,30))
808
		config.close()
809
	else
810
		slotEndertruhe = 15 -- Slot fuer die Endertruhe
811
		slotFackeln1 = 16    -- Slot fuer Fakeln 1
812
		slotFackeln2 = 12    -- Slot fuer Fakeln 2 stop
813
		slotFackeln3 = 8    -- Slot fuer Fakeln 3 stop
814
		slotAutofuel = 13    -- Slot fuer Autofuel
815
		fackelnSeitengang = 0 -- fackeln im seitengang, 0=keine
816
		laengeSeitengang = 5  -- laenge des seitengangs 0 = 5
817
		entleerungEndertruhe = 3 --nach wieielen gaengen wird die Endertruhe geleert, Standart 3    stop
818
	end
819
end
820
821
822
--**Hauptprogrammsteuerung
823
--Setzen der globale Variablen (diese sind ueberall verfuegbar)
824
endertruhe = 0           -- Endertruhe = nein
825
fackeln = 0              -- Fackeln = 0
826
ganganzahl = 0           -- Anzahl Gaenge = 0
827
fuellevel = 0            -- Fuel-Level = 0
828
einstellung = 0          -- keine einstellungen vornehmen
829
slotEndertruhe = 0       -- Slot fuer die Endertruhe
830
slotFackeln1 = 0         -- Slot fuer Fakeln 1
831
slotFackeln2 = 0         -- Slot fuer Fakeln 2 stop
832
slotFackeln3 = 0         -- Slot fuer Fakeln 3 stop
833
fakelanzahl1 = 0         -- anzahl der fakeln in slot 1 nach dem start
834
fakelanzahl2 = 0         -- anzahl der fakeln in slot 2 nach dem start
835
fakelanzahl3 = 0         -- anzahl der fakeln in slot 3 nach dem start
836
slotAutofuel = 0         -- Slot fuer Autofuel
837
fackelnSeitengang = 0    -- fackeln im seitengang, 0=keine
838
laengeSeitengang = 0     -- laenge des seitengangs 0 = 5
839
entleerungEndertruhe = 0 -- nach wieielen gaengen wird die Endertruhe geleert, Standart 3
840
slotsAnzeige = {"_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_"}
841
corsor = 0               -- line of the cursor
842
-- bereinigt den Bildschirm und baut das eingabe Fenster auf
843
bildschirmStart()
844
einstellungenLesen()
845
-- fuerht 2 funktionen gleichzeitig aus, eingab und aktuellisuerung der Fakeln, Endertruhe, und Fullevel
846
847
parallel.waitForAny(eingabeTunnellaenge, checkStatus) 
848
while (einstellung == 1) do
849
	parallel.waitForAny(einstellungen,timeshow) -- bearbeitung der einstellung
850
	einstellungenSpeichern()
851
	bildschirmStart()
852
	einstellungenLesen()
853
	parallel.waitForAny(eingabeTunnellaenge, checkStatus) 
854
end
855
856
--Laed die Turtel vor dem start wieder auf wen etwas in slot 13 abgelegt wurde und merke die fakeln
857
turtle.select(slotAutofuel) -- Slot 13 auswaehlen
858
turtle.refuel(turtle.getItemCount(slotAutofuel)) -- auffuellung mit der anzahl Items in Slot 13
859
860
fakelanzahl1 = turtle.getItemCount(slotFackeln1)
861
fakelanzahl2 = turtle.getItemCount(slotFackeln2)
862
fakelanzahl3 = turtle.getItemCount(slotFackeln3)
863
864
865
-- hier wird der tunnel gegraben
866
if (ganganzahl ~= 0) then -- mach das nur wen du auch wirklich was gemacht hast
867
	tunnel() -- vielleicht so oder doch ueber einen extra status anzeige
868
	back() -- hier komm die turtel wieder zurueck zum ausgangspunkt
869
end
870
--zeit an das die Turtel fertig ist
871
zeigtFertig()