ComputerCraft Archive

mining

turtle mining Poeschl github

Description

based on Stripmining Programm © 2013 SemOnLPs

Installation

Copy one of these commands into your ComputerCraft terminal:

wget:wget https://raw.githubusercontent.com/Poeschl/computercraft-scripts/main/mining.lua mining
Archive:wget https://cc.shobie.xyz/cc/get/gh-Poeschl-computercraft-scripts-mining mining
Quick Install: wget https://cc.shobie.xyz/cc/get/gh-Poeschl-computercraft-scripts-mining mining

Usage

Run: mining

Tags

turtlemining

Source

View Original Source

Code Preview

-- based on Stripmining Programm © 2013 SemOnLPs

--start: block der verhindert das der hautpfad unterborchen wird
function Sicherheitspfad()
	if turtle.detectDown() == false then -- wen kein block unter der turel ist
		turtle.select(1) -- slot 1 auswaehlen
    	turtle.placeDown() -- und unter die turel setzten
	end
end
--end: block der verhindert das der hautpfad unterborchen wird

--start: hier wird der Hauptgang gegraben
function Mittelgang()
	NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
	Sicherheitspfad() -- wird nur im Hauptgang gemacht, prueft ob unter der Turtel ein Block ist wen nein setzt sie einen aus slot 1
	KiesUp(ganghoehe - 1) -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt

	NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
	Sicherheitspfad() -- wird nur im Hauptgang gemacht, prueft ob unter der Turtel ein Block ist wen nein setzt sie einen aus slot 1
	KiesUp(ganghoehe - 1) -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt

	Fackel("mitte") -- fackel auf der rechten seite setzten
	NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
	Sicherheitspfad() -- wird nur im Hauptgang gemacht, prueft ob unter der Turtel ein Block ist wen nein setzt sie einen aus slot 1
	KiesUp(ganghoehe - 1) -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
end
--end: hier wird der Hauptgang gegraben

--start: baut einen Seitengang
function Seitengang()
	for i = 1, laengeSeitengang, 1 do -- grabe dich in den gang
		NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
		KiesUp(ganghoehe - 1) -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
	end
	
	turtle.turnRight() -- umdrehen
	turtle.turnRight() -- umdrehen
	for i = laengeSeitengang, 1, -1 do -- komm zur mitte zurueck
		if (i % fackelnSeitengang == 0 and fackelnSeitengang ~= 0) then -- wenn fackeln gesetzt werden sollen und diese dem abastand entsprechen 
			Fackel("seite")
		end
		NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
	end
end
--end: baut einen Seitengang

--start: geht 1 block nach vorne
function NachVorne()
	while turtle.detect() do -- prueft ob ein block vor der turel ist
		turtle.dig()
		sleep(0.25)
	end
	
	while(turtle.forward() == false) do --wenn er nicht fahren konnte
		turtle.dig()  -- einmal abbauen
		turtle.attack() -- einmal zuschlagen
	end
end
--end: geht 1 block nach vorne

--start: beim abbauen uebersich ob kies nachfaell, wen ja solange abbauen bis nichts mehr kommt
function KiesUp(hoehe)
	while turtle.detectUp() do -- prueft ob ueber ihm noch etwas ist 
		turtle.digUp() -- haut den block ueber sich ab
		sleep(0.25) -- wartet, funktioniert nur wen der block direck nachfaellt ist ein block 
	end
	if hoehe > 1 then
		turtle.up()
		KiesUp(hoehe-1)
		turtle.down()
	end
end
--end: beim abbauen uebersich ob kis nachfaell, wen ja solange abbauen bis nichts mehr kommt

--start: plaziert die Fackel
function Fackel(gang) -- ueber gibt gang oder seite
	if (fakelanzahl1 ~= 0) then
		turtle.select(slotFackeln1) -- waehlt die Fackeln aus
		fakelanzahl1 = fakelanzahl1 - 1
	elseif (fakelanzahl2 ~= 0) then
		slotFackeln1 = 0 -- setzt die slotz zurueck zum entleeren der kiste
		turtle.select(slotFackeln2) -- waehlt die Fackeln aus
		fakelanzahl2 = fakelanzahl2 - 1
	elseif (fakelanzahl3 ~= 0) then
		slotFackeln1 = 0 -- setzt die slotz zurueck zum entleeren der kiste
		slotFackeln2 = 0 -- setzt die slotz zurueck zum entleeren der kiste
		turtle.select(slotFackeln3) -- waehlt die Fackeln aus
		fakelanzahl3 = fakelanzahl3 - 1
	else
		slotFackeln1 = 0 -- setzt die slotz zurueck zum entleeren der kiste
		slotFackeln2 = 0 -- setzt die slotz zurueck zum entleeren der kiste
		slotFackeln3 = 0 -- setzt die slotz zurueck zum entleeren der kiste
		return -- keine fackeln mehr mach nichts
	end
	
	if (gang == "seite") then
			turtle.placeUp() -- plaziert die Fackel ueber sich
			turtle.select(1) -- waehlt wieder slot 1 oder den ersten der dan frei ist
	else	
		if (turtle.back()) then-- plaziert die fackel wen er 1 block zurueck fahren konnte
			turtle.placeUp() -- plaziert die Fackel ueber sich
			NachVorne() -- geht wieder nach vorne
		end
	end
	turtle.select(1) -- waehlt wieder slot 1 oder den ersten der dan frei ist
end
--end: plaziert die Fackel

--start: Steuerung fuer Hauptgang und Seitengang
function Strip()
	Mittelgang() -- hier wird der Hauptgang gegraben
	turtle.turnRight() -- startposition fuer die linke seite 
	Seitengang() -- graebt den ersten seitengang und kommt zurueck zur mitte
	Seitengang() -- graebt den zweiten seitengang und kommt zurueck zur mitte
end
--end: Steuerung fuer Hauptgang und Seitengang

--start: entleere das inventar in die endertruhe
function enderTruhe()
	if (endertruhe == 0) then -- wen keine kiste ausgewaehlt ist nicht in endertruhe leeren
		return
	end
	while turtle.detect() do -- die Truhe braucht platz um hingestell werden zu koennen also wird solange gegraben bis platz da ist
		turtle.dig()
		sleep(0.5)
	end
	turtle.select(slotEndertruhe) -- Truhe auswaehlen
	turtle.place() -- Truhe plazieren
	for i = 1,16 do -- k dient hier als zaehler um jeden platz leer zu machen
		turtle.select(i)
		if (turtle.getItemCount(i) == 0 and i ~= slotEndertruhe and i ~= slotFackeln1 and i ~= slotFackeln2 and i ~= slotFackeln3) then -- stop beachte die fackeln umzusetzend
			break -- hier wird abgebrochen wenn der slot leer ist 
			      -- eine schneller entladung der kist ist somit gegeben ^^
		elseif (turtle.getItemCount(i) ~= 0 and i ~= slotEndertruhe and i ~= slotFackeln1 and i ~= slotFackeln2 and i ~= slotFackeln3) then
			turtle.drop() -- legt die items in aus dem slot in die truhe
		end
	end
	turtle.select(slotEndertruhe) -- waehlt slot 15 aus 
	turtle.dig() -- und nimmt die truhe wieder auf
	turtle.select(1) -- waehlt wieder slot 1 oder den ersten der dan frei ist
end
--end: entleere das inventar in die endertruhe

--start: graebt den Tunnel solange wie eingegeben wurde
function tunnel()
	statusBildschirm(0) -- bereinigt den Bildschirm beim Start des Tunnelgrabens
	kistenabstand = entleerungEndertruhe  -- nach diesem gang wird das 1 mal die truhe geleert
	for aktuellergang = 1, ganganzahl, 1 do -- schleife die soviele gaenge macht wie eingeben
		Strip() -- hier wird der hauptgang mit einem Tunnel links und rechts gegraben
		-- entwerder nur nach links drehen oder nach links drehen und die kiste setzten
		if (aktuellergang  == kistenabstand and aktuellergang ~= ganganzahl) then
			turtle.turnLeft() -- gehe einmal nach links 
			kistenabstand = kistenabstand + entleerungEndertruhe -- kistenabstand wieder 3 hoch
			enderTruhe() -- entleer die in die Enertrue
		elseif (aktuellergang  == ganganzahl) then -- letzter gang nach rechts gehen und in die Truhe entlehren
			turtle.turnRight() -- zurueck in gang drehen fuer die fahrt zur Ausgangsposition
			enderTruhe() -- es war der letzte gang, sprich stell die kist das letzte mal und entleeren
		else 
			turtle.turnLeft() -- gehe nur einmal nach lings und mach mit dem hauptgan weiter
		end
		statusBildschirm(aktuellergang) -- Aktuallisierung des Bildschirms wenn ein Gang gegraben wurde (aktuellergang muss uebergeben werden)
	end
end
--end: graebt den Tunnel solange wie eingegeben wurde

--start: Zurueck zur Ausgangsposition
function back()
	for a = 1,ganganzahl * 3 do
		NachVorne()
	end
end
--end: Zurueck zur Ausgangsposition

--start: Aktuallisierung des Bildschirms wenn ein Gang gegraben wurde
function statusBildschirm(aktuellergang)
	-- start: Zeigt das Fuel-Level an
	term.setCursorPos( 1, 3)
	term.clearLine()
	fuellevel = turtle.getFuelLevel()
	print("Fuel-Level: " .. fuellevel)
	
	term.setCursorPos( 1, 4)
	term.clearLine()
	if (endertruhe == 1) then
		print("Endertruhe: Ja")
	else
		print("Endertruhe: Nein")
	end		
	
	-- start: Zeigt die anzahl der Fakeln an
	term.setCursorPos( 1, 5)
	term.clearLine()
	fackeln = fakelanzahl1 + fakelanzahl2 + fakelanzahl3
	print("Fackeln   : " .. fackeln)
	
	term.setCursorPos(1,7)
	term.clearLine()
	if (aktuellergang > 0) then
		print("Gang " .. aktuellergang .. " von " .. ganganzahl .. " wurde fertiggestellt!")
	else -- wen das programm startet
		term.setCursorPos(1,8)
		term.clearLine()
		term.setCursorPos(1,9)
		term.clearLine()
		term.setCursorPos(1,10)
		term.clearLine()
		term.setCursorPos(1,12)
		term.clearLine()
		turtle.select(1) -- waehlt zum start slot 1 aus
	end
end
--end: Aktuallisierung des Bildschirms wenn ein Gang gegraben wurde


--START: Programmsteuerung eingabe
--start: Aktuellisuerung des Status fuer Fakeln, Endertruhe, und Fullevel
local function checkStatus()
	slotsAnzeige = {"_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_"}
	slotsAnzeige[slotEndertruhe] = "e"
	slotsAnzeige[slotFackeln1] = "f"
	slotsAnzeige[slotFackeln2] = "f"
	slotsAnzeige[slotFackeln3] = "f"
	slotsAnzeige[slotAutofuel] = "a"
	
	local blink = 0 -- wird benoetigt fuer das blinken der Warnung das das Fuellevel nidrig ist
	while true do --prueft endlos den status
		time() -- zeit die Uhrzeit oben rechts an

		-- start: Zeigt das Fuel-Level an
		term.setCursorPos( 1, 3)
		term.clearLine()
		fuellevel = turtle.getFuelLevel()
		if (fuellevel < 500 and blink == 0) then
  			print("Fuel-Level: " .. fuellevel .. " !! Warnung !!")
  			blink = 1 -- setz blinken der Warnung zurueck
		else
			print("Fuel-Level: " .. fuellevel)
			blink = 0 -- setz blinken der Warnung zurueck
		end
		-- end: Zeigt das Fuel-Level an
		-- start: Zeigt die aufladung des Fuel-Level an
		term.setCursorPos( 1, 7)
		term.clearLine()
		term.clearLine()
		ladeeinheiten = turtle.getItemCount(tonumber(slotAutofuel)) -- Einheiten zum Aufladen aus slot 13
		if (ladeeinheiten == 1) then
			print("Hinweis:                       !".. slotsAnzeige[1] .. "!".. slotsAnzeige[2] .. "!".. slotsAnzeige[3] .. "!".. slotsAnzeige[4])
			print("Fuelaufladung um eine Einheit  !".. slotsAnzeige[5] .. "!".. slotsAnzeige[6] .. "!".. slotsAnzeige[7] .. "!".. slotsAnzeige[8])
			print("                               !".. slotsAnzeige[9] .. "!".. slotsAnzeige[10] .. "!".. slotsAnzeige[11] .. "!".. slotsAnzeige[12])
			print("                               !".. slotsAnzeige[13] .. "!".. slotsAnzeige[14] .. "!".. slotsAnzeige[15] .. "!".. slotsAnzeige[16])
		elseif (ladeeinheiten > 9) then 
			print("Hinweis:                       !".. slotsAnzeige[1] .. "!".. slotsAnzeige[2] .. "!".. slotsAnzeige[3] .. "!".. slotsAnzeige[4])
			print("Fuelaufladung um " .. ladeeinheiten .. " Einheiten  !".. slotsAnzeige[5] .. "!".. slotsAnzeige[6] .. "!".. slotsAnzeige[7] .. "!".. slotsAnzeige[8])
			print("                               !".. slotsAnzeige[9] .. "!".. slotsAnzeige[10] .. "!".. slotsAnzeige[11] .. "!".. slotsAnzeige[12])
			print("                               !".. slotsAnzeige[13] .. "!".. slotsAnzeige[14] .. "!".. slotsAnzeige[15] .. "!".. slotsAnzeige[16])
		elseif (ladeeinheiten > 1) then 
			print("Hinweis:                       !".. slotsAnzeige[1] .. "!".. slotsAnzeige[2] .. "!".. slotsAnzeige[3] .. "!".. slotsAnzeige[4])
			print("Fuelaufladung um " .. ladeeinheiten .. " Einheiten   !".. slotsAnzeige[5] .. "!".. slotsAnzeige[6] .. "!".. slotsAnzeige[7] .. "!".. slotsAnzeige[8])
			print("                               !".. slotsAnzeige[9] .. "!".. slotsAnzeige[10] .. "!".. slotsAnzeige[11] .. "!".. slotsAnzeige[12])
			print("                               !".. slotsAnzeige[13] .. "!".. slotsAnzeige[14] .. "!".. slotsAnzeige[15] .. "!".. slotsAnzeige[16])
		else
			print("                               !".. slotsAnzeige[1] .. "!".. slotsAnzeige[2] .. "!".. slotsAnzeige[3] .. "!".. slotsAnzeige[4])
			print("                               !".. slotsAnzeige[5] .. "!".. slotsAnzeige[6] .. "!".. slotsAnzeige[7] .. "!".. slotsAnzeige[8])
			print("                               !".. slotsAnzeige[9] .. "!".. slotsAnzeige[10] .. "!".. slotsAnzeige[11] .. "!".. slotsAnzeige[12])
			print("                               !".. slotsAnzeige[13] .. "!".. slotsAnzeige[14] .. "!".. slotsAnzeige[15] .. "!".. slotsAnzeige[16])
		end
		-- end: Zeigt die aufladung des Fuel-Level an
		
		-- start: Pruefung fuer die Endertruhe
		term.setCursorPos( 1, 4)
		term.clearLine()
		endertruhe = turtle.getItemCount(tonumber(slotEndertruhe))
		if (endertruhe == 1) then
			print("Endertruhe: Ja")
			endertruhe = 1 --braucht man nicht ist nur zur sicherheit
		elseif (endertruhe > 1) then
			print("Endertruhe: Bitte nur 1 Kiste")
			endertruhe = 0
		else
			print("Endertruhe: Nein")
			endertruhe = 0
		end		
		-- end: Pruefung fuer die Endertruhe
		
		-- start: Zeigt die anzahl der Fakeln an
		term.setCursorPos( 1, 5)
		term.clearLine()
		fackeln = turtle.getItemCount(tonumber(slotFackeln1)) + turtle.getItemCount(tonumber(slotFackeln2)) + turtle.getItemCount(tonumber(slotFackeln3))
		if (fackeln == 0) then
			print("Fackeln   : Keine")
		elseif (fackeln == 1) then
			print("Fackeln   : " .. fackeln .. " (Eingabe 0 = ein Gang)")
		else
			print("Fackeln   : " .. fackeln .. " (Eingabe 0=" .. fackeln .." Gaenge)")
		end
		-- end: Zeigt die anzahl der Fakeln an
		
		term.setCursorPos(38,3)
		print("!a")
		term.setCursorPos(38,4)
		print("!e")
		term.setCursorPos(38,5)
		print("!f")
		term.setCursorPos(36, 12) -- setzt angezeigte curser zurueck zur eingabe
		sleep(0.4) -- minecraft minute dauert 0.8 Sekunden 
	end
end
--end: Aktuellisuerung des Status fuer Fakeln, Endertruhe, und Fullevel

--start: Eingabe der Fackeln und Pruefung ob 0 oder zwischen 1 und 999 oder einstellungen
local function eingabeTunnellaenge()
	while true do -- ergibt eine endlosschleife bis man auf return kommt
		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine() -- loescht eventuell den Hilfetext
		term.setCursorPos(1, 12) -- setzt den curser hier her
		print("Anzahl Gaenge? (e = Einstellungen):") -- anzeige des Hilfetextes
		                       
		term.setCursorPos(36, 12) -- setzt position auf eingabe
		
		local inputstring = read() -- auswertung der eingabe
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
		   	ganganzahl = tonumber(inputstring) --macht aus dem Strin ein zahl
			if (ganganzahl >= 0 and ganganzahl <= 999) then -- wen die zahl zwischen 0 und 999 liegt alles ok
				if (ganganzahl == 0) then 
					ganganzahl = fackeln
			    end
				einstellung = 0
				return -- wenn alles ok ist, beende die eingabe
			end
		end

		if (inputstring == "e") then
			einstellung = 1
			return -- einstellung aender
		else
			term.setCursorPos(1, 12) -- setzt den curser hier her
			term.clearLine()
			print("0 = Fakelanzahl oder 1-999 moeglich")
			sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
		end
	end
end
--end: Eingabe der Fackeln und Pruefung ob 0 oder zwischen 1 und 999 oder einstellungen

--start: eingabe der einstellungen fuer das programm
local function einstellungen()
	for i = 3, 10, 1 do -- loesch den bilschirm ab der dritten zeile
		term.setCursorPos(1,i) -- zeile fuer anzeige bereinigen 
		term.clearLine() -- zeile fuer anzeige bereinigen 
	end
	
	term.setCursorPos(1,12) -- zeile fuer anzeige bereinigen 
	term.clearLine() -- zeile fuer anzeige bereinigen 
	
	
	-- anzeige fuer die einstellungen
	term.setCursorPos(1, 3) -- setzt den curser in zeile 3
	print("Slot Endertruhe        : " .. slotEndertruhe) -- anzeige des Hilfetextes
	term.setCursorPos(1, 4) -- setzt den curser in zeile 3
	print("Slot eins fuer Fackeln : " .. slotFackeln1) -- anzeige des Hilfetextes
	term.setCursorPos(1, 5) -- setzt den curser in zeile 3
	print("Slot zwei fuer Fackeln : " .. slotFackeln2) -- anzeige des Hilfetextes
	term.setCursorPos(1, 6) -- setzt den curser in zeile 3
	print("Slot drei fuer Fackeln : " .. slotFackeln3) -- anzeige des Hilfetextes
	term.setCursorPos(1, 7) -- setzt den curser in zeile 3
	print("Slot Autofuelaufladung : " .. slotAutofuel) -- anzeige des Hilfetextes
	term.setCursorPos(1, 8) -- setzt den curser in zeile 3
	print("Laenge der Seitengaenge: " .. laengeSeitengang) -- anzeige des Hilfetextes
	term.setCursorPos(1, 9) -- setzt den curser in zeile 3
	print("Fakeln in Seitengaenge : " .. fackelnSeitengang) -- anzeige des Hilfetextes
	term.setCursorPos(1, 10) -- setzt den curser in zeile 3
	print("Entleerung Enderchest  : " .. entleerungEndertruhe) -- anzeige des Hilfetextes
	
	corsor = 3 -- eingabeposition, wird gebraucht bei der zeitanzeige
	einstellungenEndertruhe()
	term.setCursorPos(1, 3) -- setzt den curser in zeile 3
	print("Slot Endertruhe        : " .. slotEndertruhe) -- anzeige des Hilfetextes
	
	corsor = 4 -- eingabeposition, wird gebraucht bei der zeitanzeige
	einstellungenFackeln1()
	term.setCursorPos(1, 4) -- setzt den curser in zeile 3
	print("Slot eins fuer Fackeln : " .. slotFackeln1) -- anzeige des Hilfetextes
	
	corsor = 5 -- eingabeposition, wird gebraucht bei der zeitanzeige
	einstellungenFackeln2()
	term.setCursorPos(1, 5) -- setzt den curser in zeile 3
	print("Slot zwei fuer Fackeln : " .. slotFackeln2) -- anzeige des Hilfetextes
	
	corsor = 6 -- eingabeposition, wird gebraucht bei der zeitanzeige
	einstellungenFackeln3()
	term.setCursorPos(1, 6) -- setzt den curser in zeile 3
	print("Slot drei fuer Fackeln : " .. slotFackeln3) -- anzeige des Hilfetextes
	
	corsor = 7 -- eingabeposition, wird gebraucht bei der zeitanzeige
	einstellungenAutofuel()
	term.setCursorPos(1, 7) -- setzt den curser in zeile 3
	print("Slot Autofuelaufladung : " .. slotAutofuel) -- anzeige des Hilfetextes
	
	corsor = 8 -- eingabeposition, wird gebraucht bei der zeitanzeige
	einstellungenLaengeSeitengang()
	term.setCursorPos(1, 8) -- setzt den curser in zeile 3
	print("Laenge der Seitengaenge: " .. laengeSeitengang) -- anzeige des Hilfetextes
	
	corsor = 9 -- eingabeposition, wird gebraucht bei der zeitanzeige
	einstellungenFackelnSeitengang()
	term.setCursorPos(1, 9) -- setzt den curser in zeile 3
	print("Fakeln in Seitengaenge : " .. fackelnSeitengang) -- anzeige des Hilfetextes
	
	corsor = 10 -- eingabeposition, wird gebraucht bei der zeitanzeige
	einstellungenEntleerungEnderchest()
	term.setCursorPos(1, 10) -- setzt den curser in zeile 3
	print("Entleerung Enderchest  : " .. entleerungEndertruhe) -- anzeige des Hilfetextes
end

--end: eingabe der einstellungen fuer das programm

--start: eingabe der einstellungen fuer das programm
function einstellungenEndertruhe()
	while true do -- ergibt eine endlosschleife bis man auf return kommt
		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine() -- loescht eventuell den Hilfetext
		term.setCursorPos(1, 12) -- setzt den curser hier her
		print("Slot fuer die Endertruhe") -- anzeige des Hilfetextes
		
		term.setCursorPos(1, 3) -- setzt den curser in zeile 3
		term.clearLine()
		print("Slot Endertruhe        :") -- anzeige des Hilfetextes
		term.setCursorPos(26, 3) -- setzt position auf eingabe
		
		
		local inputstring1 = read() -- auswertung der eingabe
		if (tonumber(inputstring1) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
		   	slotEndertruhe = tonumber(inputstring1) --macht aus dem Strin ein zahl
			if (slotEndertruhe >= 0 and slotEndertruhe <= 16) then -- wen die zahl zwischen 0 und 999 liegt alles ok
				if (slotEndertruhe == 0) then 
					slotEndertruhe = 15
			    end
				return -- wenn alles ok ist, beende die eingabe
			end
		end

		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine()
		print("Nur Slot 1 bis 16 moeglich, 0=Standard")
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
	end
end

--start: eingabe der einstellungen fuer das programm
function einstellungenFackeln1()
	while true do -- ergibt eine endlosschleife bis man auf return kommt
		gleichslot = 0 -- erstmal keine ueberlagerung
		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine() -- loescht eventuell den Hilfetext
		term.setCursorPos(1, 12) -- setzt den curser hier her
		print("Slot eins fuer die Fackeln") -- anzeige des Hilfetextes
		
		term.setCursorPos(1, 4) -- setzt den curser in zeile 3
		term.clearLine()
		print("Slot eins fuer Fackeln :") -- anzeige des Hilfetextes
		term.setCursorPos(26, 4) -- setzt position auf eingabe
		
		
		local inputstring = read() -- auswertung der eingabe
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
		   	slotFackeln1 = tonumber(inputstring) --macht aus dem Strin ein zahl
			if (slotFackeln1 >= 0 and slotFackeln1 <= 16) then -- wen die zahl zwischen 0 und 999 liegt alles ok
				if (slotFackeln1 == 0) then 
					slotFackeln1 = 16
				end

				if (slotFackeln1 ~= slotEndertruhe) then -- gleicher slot wie die endertruhe
					return -- wenn alles ok ist, beende die eingabe
				else
					gleichslot = 1 -- wen sich 2 slots ueberlagern wuerden
				end
			end
		end


		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine()
		if (gleichslot == 1) then
			print("Slot bereits in Verwendung")
		else
			print("Nur Slot 1 bis 16 moeglich, 0=Standard")
		end
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
	end
end
--end: 
--start: eingabe der einstellungen fuer das programm
function einstellungenFackeln2()
	while true do -- ergibt eine endlosschleife bis man auf return kommt
		gleichslot = 0 -- erstmal keine ueberlagerung
		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine() -- loescht eventuell den Hilfetext
		term.setCursorPos(1, 12) -- setzt den curser hier her
		print("Slot zwei fuer die Fackeln") -- anzeige des Hilfetextes
		
		term.setCursorPos(1, 5) -- setzt den curser in zeile 3
		term.clearLine()
		print("Slot zwei fuer Fackeln :") -- anzeige des Hilfetextes
		term.setCursorPos(26, 5) -- setzt position auf eingabe
		
		
		local inputstring = read() -- auswertung der eingabe
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
		   	slotFackeln2 = tonumber(inputstring) --macht aus dem Strin ein zahl
			if (slotFackeln2 >= 0 and slotFackeln2 <= 16) then -- wen die zahl zwischen 0 und 999 liegt alles ok
				if (slotFackeln2 == 0) then 
					slotFackeln2 = 12
			    end
				
				if (slotFackeln2 ~= slotEndertruhe and slotFackeln2 ~= slotFackeln1) then -- gleicher slot wie die endertruhe
					return -- wenn alles ok ist, beende die eingabe
				else
					gleichslot = 1 -- wen sich 2 slots ueberlagern wuerden
				end
			end
		end

		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine()
		if (gleichslot == 1) then
			print("Slot bereits in Verwendung")
		else
			print("Nur Slot 1 bis 16 moeglich, 0=Standard")
		end
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
	end
end
--end: 
--start: eingabe der einstellungen fuer das programm
function einstellungenFackeln3()
	while true do -- ergibt eine endlosschleife bis man auf return kommt
		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine() -- loescht eventuell den Hilfetext
		term.setCursorPos(1, 12) -- setzt den curser hier her
		print("Slot drei fuer die Fackeln") -- anzeige des Hilfetextes
		
		term.setCursorPos(1, 6) -- setzt den curser in zeile 3
		term.clearLine()
		print("Slot drei fuer Fackeln :") -- anzeige des Hilfetextes
		term.setCursorPos(26, 6) -- setzt position auf eingabe
		
		
		local inputstring = read() -- auswertung der eingabe
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
		   	slotFackeln3 = tonumber(inputstring) --macht aus dem Strin ein zahl
			if (slotFackeln3 >= 0 and slotFackeln3 <= 16) then -- wen die zahl zwischen 0 und 999 liegt alles ok
				if (slotFackeln3 == 0) then 
					slotFackeln3 = 8
			    end
				if (slotFackeln3 ~= slotEndertruhe and slotFackeln3 ~= slotFackeln1 and slotFackeln3 ~= slotFackeln2) then -- gleicher slot wie die endertruhe
					return -- wenn alles ok ist, beende die eingabe
				else
					gleichslot = 1 -- wen sich 2 slots ueberlagern wuerden
				end
			end
		end

		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine()
		if (gleichslot == 1) then
			print("Slot bereits in Verwendung")
		else
			print("Nur Slot 1 bis 16 moeglich, 0=Standard")
		end
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
	end
end
--end: 

--start: eingabe der einstellungen fuer das programm
function einstellungenAutofuel()
	while true do -- ergibt eine endlosschleife bis man auf return kommt
		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine() -- loescht eventuell den Hilfetext
		term.setCursorPos(1, 12) -- setzt den curser hier her
		print("Slot fuer Autofuelaufladung beim Start") -- anzeige des Hilfetextes
		
		term.setCursorPos(1, 7) -- setzt den curser in zeile 3
		term.clearLine()
		print("Slot Autofuelaufladung :") -- anzeige des Hilfetextes
		term.setCursorPos(26, 7) -- setzt position auf eingabe
		
		
		local inputstring = read() -- auswertung der eingabe
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
		   	slotAutofuel = tonumber(inputstring) --macht aus dem Strin ein zahl
			if (slotAutofuel >= 0 and slotAutofuel <= 16) then -- wen die zahl zwischen 0 und 999 liegt alles ok
				if (slotAutofuel == 0) then 
					slotAutofuel = 13
			    end
				if (slotAutofuel ~= slotEndertruhe and slotAutofuel ~= slotFackeln1 and slotAutofuel ~= slotFackeln2 and slotAutofuel ~= slotFackeln3) then -- gleicher slot wie die endertruhe
					return -- wenn alles ok ist, beende die eingabe
				else
					gleichslot = 1 -- wen sich 2 slots ueberlagern wuerden
				end
			end
		end

		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine()
		if (gleichslot == 1) then
			print("Slot bereits in Verwendung")
		else
			print("Nur Slot 1 bis 16 moeglich, 0=Standard")
		end
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
	end
end
--end: 


--start: eingabe der einstellungen fuer das programm
function einstellungenLaengeSeitengang()
	while true do -- ergibt eine endlosschleife bis man auf return kommt
		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine() -- loescht eventuell den Hilfetext
		term.setCursorPos(1, 12) -- setzt den curser hier her
		print("Laenge eines Seitenganges") -- anzeige des Hilfetextes
		
		term.setCursorPos(1, 8) -- setzt den curser in zeile 3
		term.clearLine()
		print("Laenge der Seitengaenge:") -- anzeige des Hilfetextes
		term.setCursorPos(26, 8) -- setzt position auf eingabe
		
		
		local inputstring = read() -- auswertung der eingabe
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
		   	laengeSeitengang = tonumber(inputstring) --macht aus dem Strin ein zahl
			if (laengeSeitengang >= 0 and laengeSeitengang <= 999) then -- wen die zahl zwischen 0 und 999 liegt alles ok
				if (laengeSeitengang == 0) then 
					laengeSeitengang = 5
			    end
				return -- wenn alles ok ist, beende die eingabe
			end
		end

		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine()
		print("Nur 0 bis 999 moeglich, 0=Standard")
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
	end
end
--end: 

--start: eingabe der einstellungen fuer das programm
function einstellungenFackelnSeitengang()
	while true do -- ergibt eine endlosschleife bis man auf return kommt
		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine() -- loescht eventuell den Hilfetext
		term.setCursorPos(1, 12) -- setzt den curser hier her
		print("Abstand zwischen Fakeln im Seitengang") -- anzeige des Hilfetextes
		
		term.setCursorPos(1, 9) -- setzt den curser in zeile 3
		term.clearLine()
		print("Fakeln in Seitengaenge :") -- anzeige des Hilfetextes
		term.setCursorPos(26, 9) -- setzt position auf eingabe
		
		
		local inputstring = read() -- auswertung der eingabe
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
		   	fackelnSeitengang = tonumber(inputstring) --macht aus dem Strin ein zahl
			if (fackelnSeitengang <= laengeSeitengang) then -- wen die zahl zwischen 0 und 999 liegt alles ok
				if (fackelnSeitengang == 0) then 
					fackelnSeitengang = 0
			    end
				return -- wenn alles ok ist, beende die eingabe
			else
				term.setCursorPos(1, 12) -- setzt den curser hier her
				term.clearLine()
				print("Seitenganz waere zu kurz")
				sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
			end
		end	
	end
end
--end: 

--start: eingabe der einstellungen fuer das programm
function einstellungenEntleerungEnderchest()
	while true do -- ergibt eine endlosschleife bis man auf return kommt
		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine() -- loescht eventuell den Hilfetext
		term.setCursorPos(1, 12) -- setzt den curser hier her
		print("Anzahl Gaenge bis zur leerung") -- anzeige des Hilfetextes
		
		term.setCursorPos(1, 10) -- setzt den curser in zeile 3
		term.clearLine()
		print("Entleerung Enderchest  :") -- anzeige des Hilfetextes
		term.setCursorPos(26, 10) -- setzt position auf eingabe
		
		
		local inputstring = read() -- auswertung der eingabe
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
		   	entleerungEndertruhe = tonumber(inputstring) --macht aus dem Strin ein zahl
			if (entleerungEndertruhe >= 0 and entleerungEndertruhe <= 999) then -- wen die zahl zwischen 0 und 999 liegt alles ok
				if (entleerungEndertruhe == 0) then 
					entleerungEndertruhe = 3 -- standard
			    end
				return -- wenn alles ok ist, beende die eingabe
			end
		end

		term.setCursorPos(1, 12) -- setzt den curser hier her
		term.clearLine()
		print("Nur 0 bis 999 moeglich, 0=Standard")
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
	end
end
--end: 


--start: Uhrzeit und Tag in Minecraft auslesen und anzeigen
function time()
	term.setCursorPos(1, 1) -- position auf Zeit setzten
	local day -- locale Variable fuer den Tag in Minecraft
	local zeit -- locale Variable fuer die Uhrzeit in Minecraft
	day = os.day() -- nicht im Gebrauch!
	zeit = textutils.formatTime(os.time(), true) -- wandelt die anzeige in das 24 Stunden Format
	if (string.len(zeit) == 4) then -- zeit Anzeigt vor oder nach 10 Uhr
		print("Systemhinweis               Zeit:  " .. zeit) -- vor 10 Uhr, es geht um die laenge
	else
		print("Systemhinweis               Zeit: " .. zeit) -- nach 10 Uhr
	end
end
--end: Uhrzeit und Tag in Minecraft auslesen und anzeigen
local function timeshow()
	while true do --prueft endlos den status
		term.setCursorPos(1, 1) -- position auf Zeit setzten
		local day -- locale Variable fuer den Tag in Minecraft
		local zeit -- locale Variable fuer die Uhrzeit in Minecraft
		day = os.day() -- nicht im Gebrauch!
		zeit = textutils.formatTime(os.time(), true) -- wandelt die anzeige in das 24 Stunden Format
		if (string.len(zeit) == 4) then -- zeit Anzeigt vor oder nach 10 Uhr
			print("Einstellungen               Zeit:  " .. zeit) -- vor 10 Uhr, es geht um die laenge
		else
			print("Einstellungen               Zeit: " .. zeit) -- nach 10 Uhr
		end
		 
		term.setCursorPos(26, corsor) -- setzt angezeigte curser zurueck zur eingabe
		sleep(0.4) -- minecraft minute dauert 0.8 Sekunden 
	end
end

--end: Programmsteuerung eingabe

--start: bereinigt den Bildschirm und baut das eingabe Fenster auf
function bildschirmStart()
	shell.run("clear") -- löscht allties auf dem Bildschirm
	print("Systemhinweis")
	print("=======================================")
	term.setCursorPos(1,6)
	term.clearLine()
	print("---------------------------------------")
	term.setCursorPos(1,11)
	print("---------------------------------------")
end
--end: bereinigt den Bildschirm und baut das eingabe Fenster auf

--start: zeigt an das die Turel fertig sit
function zeigtFertig()
	term.setCursorPos(1,10) -- zeile 10 fuer anzeige bereinigen 
	term.clearLine() -- zeile 10 fuer anzeige bereinigen 
	print("!!!Fertig - Programm beendet!!!") -- fertig meldung
	term.setCursorPos(1,12) -- letzte zeile bereinigen 
	term.clearLine() -- letzte zeile bereinigen 
end
--end: zeigt an das die Turel fertig sit

function einstellungenSpeichern()
	config = fs.open("strip.conf", "w") -- oeffent die config datei
	config.writeLine("slotEndertruhe       = " .. slotEndertruhe)
	config.writeLine("slotFackeln1         = " .. slotFackeln1)
	config.writeLine("slotFackeln2         = " .. slotFackeln2)
	config.writeLine("slotFackeln3         = " .. slotFackeln3)
	config.writeLine("slotAutofuel         = " .. slotAutofuel)
	config.writeLine("fackelnSeitengang    = " .. fackelnSeitengang) 
	config.writeLine("laengeSeitengang     = " .. laengeSeitengang) 
	config.writeLine("entleerungEndertruhe = " .. entleerungEndertruhe)
	config.close() -- schließt die einstellungen
end


function einstellungenLesen()
	config = fs.open("strip.conf", "r")
	if config then
		line = config.readLine()
		slotEndertruhe = tonumber(string.sub(line,24,30))
		line = config.readLine()
		slotFackeln1 = tonumber(string.sub(line,24,30))
		line = config.readLine()
		slotFackeln2 = tonumber(string.sub(line,24,30))
		line = config.readLine()
		slotFackeln3 = tonumber(string.sub(line,24,30))
		line = config.readLine()
		slotAutofuel = tonumber(string.sub(line,24,30))
		line = config.readLine()
		fackelnSeitengang = tonumber(string.sub(line,24,30))
		line = config.readLine()
		laengeSeitengang = tonumber(string.sub(line,24,30))
		line = config.readLine()
		entleerungEndertruhe = tonumber(string.sub(line,24,30))
		config.close()
	else
		slotEndertruhe = 15 -- Slot fuer die Endertruhe
		slotFackeln1 = 16    -- Slot fuer Fakeln 1
		slotFackeln2 = 12    -- Slot fuer Fakeln 2 stop
		slotFackeln3 = 8    -- Slot fuer Fakeln 3 stop
		slotAutofuel = 13    -- Slot fuer Autofuel
		fackelnSeitengang = 0 -- fackeln im seitengang, 0=keine
		laengeSeitengang = 5  -- laenge des seitengangs 0 = 5
		entleerungEndertruhe = 3 --nach wieielen gaengen wird die Endertruhe geleert, Standart 3    stop
	end
end


--**Hauptprogrammsteuerung
--Setzen der globale Variablen (diese sind ueberall verfuegbar)
endertruhe = 0           -- Endertruhe = nein
fackeln = 0              -- Fackeln = 0
ganganzahl = 0           -- Anzahl Gaenge = 0
fuellevel = 0            -- Fuel-Level = 0
einstellung = 0          -- keine einstellungen vornehmen
slotEndertruhe = 0       -- Slot fuer die Endertruhe
slotFackeln1 = 0         -- Slot fuer Fakeln 1
slotFackeln2 = 0         -- Slot fuer Fakeln 2 stop
slotFackeln3 = 0         -- Slot fuer Fakeln 3 stop
fakelanzahl1 = 0         -- anzahl der fakeln in slot 1 nach dem start
fakelanzahl2 = 0         -- anzahl der fakeln in slot 2 nach dem start
fakelanzahl3 = 0         -- anzahl der fakeln in slot 3 nach dem start
slotAutofuel = 0         -- Slot fuer Autofuel
fackelnSeitengang = 0    -- fackeln im seitengang, 0=keine
laengeSeitengang = 0     -- laenge des seitengangs 0 = 5
entleerungEndertruhe = 0 -- nach wieielen gaengen wird die Endertruhe geleert, Standart 3
slotsAnzeige = {"_","_","_","_","_","_","_","_","_","_","_","_","_","_","_","_"}
corsor = 0               -- line of the cursor
ganghoehe = 3
-- bereinigt den Bildschirm und baut das eingabe Fenster auf
bildschirmStart()
einstellungenLesen()
-- fuerht 2 funktionen gleichzeitig aus, eingab und aktuellisuerung der Fakeln, Endertruhe, und Fullevel

parallel.waitForAny(eingabeTunnellaenge, checkStatus) 
while (einstellung == 1) do
	parallel.waitForAny(einstellungen,timeshow) -- bearbeitung der einstellung
	einstellungenSpeichern()
	bildschirmStart()
	einstellungenLesen()
	parallel.waitForAny(eingabeTunnellaenge, checkStatus) 
end

--Laed die Turtel vor dem start wieder auf wen etwas in slot 13 abgelegt wurde und merke die fakeln
turtle.select(slotAutofuel) -- Slot 13 auswaehlen
turtle.refuel(turtle.getItemCount(slotAutofuel)) -- auffuellung mit der anzahl Items in Slot 13

fakelanzahl1 = turtle.getItemCount(slotFackeln1)
fakelanzahl2 = turtle.getItemCount(slotFackeln2)
fakelanzahl3 = turtle.getItemCount(slotFackeln3)


-- hier wird der tunnel gegraben
if (ganganzahl ~= 0) then -- mach das nur wen du auch wirklich was gemacht hast
	tunnel() -- vielleicht so oder doch ueber einen extra status anzeige
	back() -- hier komm die turtel wieder zurueck zum ausgangspunkt
end
--zeit an das die Turtel fertig ist
zeigtFertig()