View difference between Paste ID: v7WTk5Tt and uUkZBnqD
SHOW: | | - or go back to the newest paste.
1
-- ** Stripmining Programm **
2
-- ** © 2013 SemOnLP       **
3
-- **************************
4
5
--start: block der verhindert das der hautpfad unterborchen wird
6
function Sicherheitspfad()
7
	if turtle.detectDown() == false then -- wen kein block unter der turel ist
8
		turtle.select(1) -- slot 1 auswaehlen
9
    	turtle.placeDown() -- und unter die turel setzten
10
	end
11
end
12
--end: block der verhindert das der hautpfad unterborchen wird
13
14
--start: hier wird der Hauptgang gegraben
15
function Mittelgang()
16
	NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
17
	Sicherheitspfad() -- wird nur im Hauptgang gemacht, prueft ob unter der Turtel ein Block ist wen nein setzt sie einen aus slot 1
18
	KiesUp() -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
19
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
	Fackel() -- fackel auf der rechten seite setzten
25
	NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
26
	Sicherheitspfad() -- wird nur im Hauptgang gemacht, prueft ob unter der Turtel ein Block ist wen nein setzt sie einen aus slot 1
27
	KiesUp() -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
28
end
29
--end: hier wird der Hauptgang gegraben
30
31
--start: baut einen Seitengang
32
function Seitengang()
33
	for b = 0, 4, 1 do -- grabe dich in den gang
34
		NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
35
		KiesUp() -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
36
	end
37
	
38
	turtle.turnRight() -- umdrehen
39
	turtle.turnRight() -- umdrehen
40
	for b = 0, 4, 1 do -- komm zur mitte zurueck
41
		NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
42
	end
43
end
44
--end: baut einen Seitengang
45
46
--start: geht 1 block nach vorne
47
function NachVorne()
48
	while turtle.detect() do -- prueft ob ein block vor der turel ist
49
		turtle.dig()
50
		sleep(0.25)
51
	end
52
	
53
	while(turtle.forward() == false) do --wenn er nicht fahren konnte
54
		turtle.dig()  -- einmal abbauen
55
		turtle.attack() -- einmal zuschlagen
56
	end
57
end
58
--end: geht 1 block nach vorne
59
60
--start: beim abbauen uebersich ob kies nachfaell, wen ja solange abbauen bis nichts mehr kommt
61
function KiesUp()
62
	while turtle.detectUp() do -- prueft ob ueber ihm noch etwas ist 
63
		turtle.digUp() -- haut den block ueber sich ab
64
		sleep(0.25) -- wartet, funktioniert nur wen der block direck nachfaellt ist ein block 
65
	end
66
end
67
--end: beim abbauen uebersich ob kis nachfaell, wen ja solange abbauen bis nichts mehr kommt
68
69
--start: plaziert die Fackel
70
function Fackel()
71
	if (turtle.back()) then-- plaziert die fackel wen er 1 block zurueck fahren konnte
72
		turtle.select(16) -- waehlt die Fackeln aus
73
		turtle.placeUp() -- plaziert die Fackel ueber sich
74
		NachVorne() -- geht wieder nach vorne
75
	end
76
	turtle.select(1) -- waehlt wieder slot 1 oder den ersten der dan frei ist
77
end
78
--end: plaziert die Fackel
79
80
--start: Steuerung fuer Hauptgang und Seitengang
81
function Strip()
82
	Mittelgang() -- hier wird der Hauptgang gegraben
83
	turtle.turnRight() -- startposition fuer die linke seite 
84
	Seitengang() -- graebt den ersten seitengang und kommt zurueck zur mitte
85
	Seitengang() -- graebt den zweiten seitengang und kommt zurueck zur mitte
86
end
87
--end: Steuerung fuer Hauptgang und Seitengang
88
89
--start: entleere das inventar in die endertruhe
90
function enderTruhe()
91
	if (endertruhe == 0) then -- wen keine kiste ausgewaehlt ist nicht in endertruhe leeren
92
		return
93
	end
94
	while turtle.detect() do -- die Truhe braucht platz um hingestell werden zu koennen also wird solange gegraben bis platz da ist
95
		turtle.dig()
96
		sleep(0.5)
97
	end
98
	turtle.select(15) -- Truhe auswaehlen
99
	turtle.place() -- Truhe plazieren
100
	for k = 1,14 do -- k dient hier als zaehler um jeden platz leer zu machen
101
		turtle.select(k)
102
		if turtle.getItemCount(k) == 0 then
103
			break -- hier wird abgebrochen wenn der slot leer ist 
104
			      -- eine schneller entladung der kist ist somit gegeben ^^
105
		end
106
		turtle.drop() -- legt die items in aus dem slot in die truhe
107
	end
108
	turtle.select(15) -- waehlt slot 15 aus 
109
	turtle.dig() -- und nimmt die truhe wieder auf
110
	turtle.select(1) -- waehlt wieder slot 1 oder den ersten der dan frei ist
111
end
112
--end: entleere das inventar in die endertruhe
113
114
--start: graebt den Tunnel solange wie eingegeben wurde
115
function tunnel()
116
	bildschirmRun() -- bereinigt den Bildschirm beim Start des Tunnelgrabens
117
	kistenabstand = 3 -- nach diesem gang wird das 1 mal die truhe geleert
118
	for aktuellergang = 1, ganganzahl, 1 do -- schleife die soviele gaenge macht wie eingeben
119
		Strip() -- hier wird der hauptgang mit einem Tunnel links und rechts gegraben
120
		-- entwerder nur nach links drehen oder nach links drehen und die kiste setzten
121
		if (aktuellergang  == kistenabstand and aktuellergang ~= ganganzahl) then
122
			turtle.turnLeft() -- gehe einmal nach links 
123
			kistenabstand = kistenabstand + 3 -- kistenabstand wieder 3 hoch
124
			enderTruhe() -- entleer die in die Enertrue
125
		elseif (aktuellergang  == ganganzahl) then -- letzter gang nach rechts gehen und in die Truhe entlehren
126
			turtle.turnRight() -- zurueck in gang drehen fuer die fahrt zur Ausgangsposition
127
			enderTruhe() -- es war der letzte gang, sprich stell die kist das letzte mal und entleeren
128
		else 
129
			turtle.turnLeft() -- gehe nur einmal nach lings und mach mit dem hauptgan weiter
130
		end
131
		statusBildschirm(aktuellergang) -- Aktuallisierung des Bildschirms wenn ein Gang gegraben wurde (aktuellergang muss uebergeben werden)
132
	end
133
end
134
--end: graebt den Tunnel solange wie eingegeben wurde
135
136
--start: Zurueck zur Ausgangsposition
137
function back()
138
	for a = 1,ganganzahl * 3 do
139
		NachVorne()
140
	end
141
end
142
--end: Zurueck zur Ausgangsposition
143
144
--start: Aktuallisierung des Bildschirms wenn ein Gang gegraben wurde
145
function statusBildschirm(aktuellergang)
146
	-- start: Zeigt das Fuel-Level an
147
	term.setCursorPos( 1, 3)
148
	term.clearLine()
149
	fuellevel = turtle.getFuelLevel()
150
	print("Fuel-Level: " .. fuellevel)
151
	
152
	-- start: Zeigt die anzahl der Fakeln an
153
	term.setCursorPos( 1, 5)
154
	term.clearLine()
155
	fackeln = turtle.getItemCount(16)
156
	print("Fackeln   : " .. fackeln)
157
	
158
	term.setCursorPos(1,7)
159
	term.clearLine()
160
	print("Gang " .. aktuellergang .. " von " .. ganganzahl .. " wurde fertiggestellt!")
161
end
162
--end: Aktuallisierung des Bildschirms wenn ein Gang gegraben wurde
163
164
165
--START: Programmsteuerung eingabe
166
--start: Aktuellisuerung des Status fuer Fakeln, Endertruhe, und Fullevel
167
local function checkStatus()
168
	local blink = 0 -- wird benoetigt fuer das blinken der Warnung das das Fuellevel nidrig ist
169
	while true do --prueft endlos den status
170
		time() -- zeit die Uhrzeit oben rechts an
171
172
		-- start: Zeigt das Fuel-Level an
173
		term.setCursorPos( 1, 3)
174
		term.clearLine()
175
		fuellevel = turtle.getFuelLevel()
176
		if (fuellevel < 500 and blink == 0) then
177
  			print("Fuel-Level: " .. fuellevel .. " !! Warnung !!")
178
  			blink = 1 -- setz blinken der Warnung zurueck
179
		else
180
			print("Fuel-Level: " .. fuellevel)
181
			blink = 0 -- setz blinken der Warnung zurueck
182
		end
183
		-- end: Zeigt das Fuel-Level an
184
		-- start: Zeigt die aufladung des Fuel-Level an
185
		term.setCursorPos( 1, 7)
186
		term.clearLine()
187
		term.clearLine()
188
		ladeeinheiten = turtle.getItemCount(13) -- Einheiten zum Aufladen aus slot 13
189
		if (ladeeinheiten == 1) then
190
			print("Hinweis: Fuelaufladung um eine Einheit")
191
		elseif (ladeeinheiten > 1) then 
192
			print("Hinweis: Fuelaufladung um " .. ladeeinheiten .. " Einheiten")
193
		end
194
		-- end: Zeigt die aufladung des Fuel-Level an
195
		
196
		-- start: Pruefung fuer die Endertruhe
197
		term.setCursorPos( 1, 4)
198
		term.clearLine()
199
		endertruhe = turtle.getItemCount(15)
200
		if (endertruhe == 1) then
201
			print("Endertruhe: Ja")
202
			endertruhe = 1 --braucht man nicht ist nur zur sicherheit
203
		elseif (endertruhe > 1) then
204
			print("Endertruhe: Bitte nur 1 Kiste")
205
			endertruhe = 0
206
		else
207
			print("Endertruhe: Nein")
208
			endertruhe = 0
209
		end		
210
		-- end: Pruefung fuer die Endertruhe
211
		
212
		-- start: Zeigt die anzahl der Fakeln an
213
		term.setCursorPos( 1, 5)
214
		term.clearLine()
215
		fackeln = turtle.getItemCount(16)
216
		if (fackeln == 0) then
217
			print("Fackeln   : Keine")
218
		elseif (fackeln == 1) then
219
			print("Fackeln   : " .. fackeln .. " (Eingabe 0 = ein Gang)")
220
		else
221
			print("Fackeln   : " .. fackeln .. " (Eingabe 0 = " .. fackeln .." Gaenge)")
222
		end
223
		-- end: Zeigt die anzahl der Fakeln an
224
		
225
		term.setCursorPos(36, 12) -- setzt angezeigte curser zurueck zur eingabe
226
		sleep(0.4) -- minecraft minute dauert 0.8 Sekunden 
227
	end
228
end
229
--end: Aktuellisuerung des Status fuer Fakeln, Endertruhe, und Fullevel
230
231
--start: Eingabe der Fackeln und Pruefung ob 0 oder zwischen 1 und 999
232
local function eingabeTunnellaenge()
233
	while true do -- ergibt eine endlosschleife bis man auf return kommt
234
		term.setCursorPos(1, 12) -- setzt den curser hier her
235
		term.clearLine() -- loescht eventuell den Hilfetext
236
		term.setCursorPos(1, 12) -- setzt den curser hier her
237
		print("Anzahl Gaenge? (0 = Fackelanzahl) :") -- anzeige des Hilfetextes
238
		term.setCursorPos(36, 12) -- setzt position auf eingabe
239
		
240
		local inputstring = read() -- auswertung der eingabe
241
		if (tonumber(inputstring) ~= nil) then -- prueft ob eine Zahl eingegeben wurde
242
		   	ganganzahl = tonumber(inputstring) --macht aus dem Strin ein zahl
243
			if (ganganzahl >= 0 and ganganzahl <= 999) then -- wen die zahl zwischen 0 und 999 liegt alles ok
244
				if (ganganzahl == 0) then 
245
					ganganzahl = fackeln
246
			    end
247
				return -- wenn alles ok ist, beende die eingabe
248
			end
249
		end
250
		term.setCursorPos(1, 12) -- setzt den curser hier her
251
		term.clearLine()
252
		print("0 = Fakelanzahl oder 1-999 moeglich")
253
		sleep(1.5) -- zeit fuer die anzeigt des Hilfetextets
254
	end
255
end
256
--end: Eingabe der Fackeln und Pruefung ob 0 oder zwischen 1 und 999
257
258
--start: Uhrzeit und Tag in Minecraft auslesen und anzeigen
259
function time()
260
	term.setCursorPos( 29, 1) -- position auf Zeit setzten
261
	local day -- locale Variable fuer den Tag in Minecraft
262
	local zeit -- locale Variable fuer die Uhrzeit in Minecraft
263
	day = os.day() -- nicht im Gebrauch!
264
	zeit = textutils.formatTime(os.time(), true) -- wandelt die anzeige in das 24 Stunden Format
265
	if (string.len(zeit) == 4) then -- zeit Anzeigt vor oder nach 10 Uhr
266
		print("Zeit:  " .. zeit) -- vor 10 Uhr, es geht um die laenge
267
	else
268
		print("Zeit: " .. zeit) -- nach 10 Uhr
269
	end
270
end
271
--start: Uhrzeit und Tag in Minecraft auslesen und anzeigen
272
--end: Programmsteuerung eingabe
273
274
--start: bereinigt den Bildschirm und baut das eingabe Fenster auf
275
function bildschirmStart()
276
	shell.run("clear") -- löscht allties auf dem Bildschirm
277
	print("Systemhinweis")
278
	print("=======================================")
279
	term.setCursorPos(1,6)
280
	term.clearLine()
281
	print("---------------------------------------")
282
	term.setCursorPos(1,11)
283
	print("---------------------------------------")
284
end
285
--end: bereinigt den Bildschirm und baut das eingabe Fenster auf
286
287
--start: zeigt an das die Turel fertig sit
288
function zeigtFertig()
289
	term.setCursorPos(1,10) -- zeile 10 fuer anzeige bereinigen 
290
	term.clearLine() -- zeile 10 fuer anzeige bereinigen 
291
	print("!!!Fertig - Programm beendet!!!") -- fertig meldung
292
	term.setCursorPos(1,12) -- letzte zeile bereinigen 
293
	term.clearLine() -- letzte zeile bereinigen 
294
end
295
--end: zeigt an das die Turel fertig sit
296
297
--start: bereinigt den Bildschirm wen die turtel loslaeuft
298
function bildschirmRun()
299
	term.setCursorPos(1,7)
300
	term.clearLine()
301
	term.setCursorPos(1,12)
302
	term.clearLine()
303
	turtle.select(1) -- waehlt zum start slot 1 aus
304
end
305
--end: bereinigt den Bildschirm wen die turtel loslaeuft
306
307
--**Hauptprogrammsteuerung
308
--Setzen der globale Variablen (diese sind ueberall verfuegbar)
309
endertruhe = 0    -- Endertruhe = nein
310
fackeln = 0       -- Fackeln = 0
311
ganganzahl = 0    -- Anzahl Gaenge = 0
312
fuellevel = 0     -- Fuel-Level = 0
313
314
-- bereinigt den Bildschirm und baut das eingabe Fenster auf
315
bildschirmStart()
316
317
-- fuerht 2 funktionen gleichzeitig aus, eingab und aktuellisuerung der Fakeln, Endertruhe, und Fullevel
318
parallel.waitForAny(eingabeTunnellaenge, checkStatus) 
319
320
--Laed die Turtel vor dem start wieder auf wen etwas in slot 13 abgelegt wurde
321
	turtle.select(13) -- Slot 13 auswaehlen
322
	turtle.refuel(turtle.getItemCount(13)) -- auffuellung mit der anzahl Items in Slot 13
323
324
-- hier wird der tunnel gegraben
325
if (ganganzahl ~= 0) then -- mach das nur wen du auch wirklich was gemacht hast
326
	tunnel() -- vielleicht so oder doch ueber einen extra status anzeige
327
	back() -- hier komm die turtel wieder zurueck zum ausgangspunkt
328
end
329
--zeit an das die Turtel fertig ist
330
zeigtFertig()