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() |