330 lines
13 KiB
Lua
330 lines
13 KiB
Lua
|
-- ** Stripmining Programm **
|
||
|
-- ** © 2013 SemOnLP **
|
||
|
-- **************************
|
||
|
|
||
|
--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() -- 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() -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
|
||
|
|
||
|
Fackel() -- 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() -- 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 b = 0, 4, 1 do -- grabe dich in den gang
|
||
|
NachVorne() -- 1 block nach vorne mit der pruefung ob die Turel fahren konnte
|
||
|
KiesUp() -- haut den block uebersich weg, koennt sein das dan noch kies nach faellt
|
||
|
end
|
||
|
|
||
|
turtle.turnRight() -- umdrehen
|
||
|
turtle.turnRight() -- umdrehen
|
||
|
for b = 0, 4, 1 do -- komm zur mitte zurueck
|
||
|
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()
|
||
|
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
|
||
|
end
|
||
|
--end: beim abbauen uebersich ob kis nachfaell, wen ja solange abbauen bis nichts mehr kommt
|
||
|
|
||
|
--start: plaziert die Fackel
|
||
|
function Fackel()
|
||
|
if (turtle.back()) then-- plaziert die fackel wen er 1 block zurueck fahren konnte
|
||
|
turtle.select(16) -- waehlt die Fackeln aus
|
||
|
turtle.placeUp() -- plaziert die Fackel ueber sich
|
||
|
NachVorne() -- geht wieder nach vorne
|
||
|
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(15) -- Truhe auswaehlen
|
||
|
turtle.place() -- Truhe plazieren
|
||
|
for k = 1,14 do -- k dient hier als zaehler um jeden platz leer zu machen
|
||
|
turtle.select(k)
|
||
|
if turtle.getItemCount(k) == 0 then
|
||
|
break -- hier wird abgebrochen wenn der slot leer ist
|
||
|
-- eine schneller entladung der kist ist somit gegeben ^^
|
||
|
end
|
||
|
turtle.drop() -- legt die items in aus dem slot in die truhe
|
||
|
end
|
||
|
turtle.select(15) -- 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()
|
||
|
bildschirmRun() -- bereinigt den Bildschirm beim Start des Tunnelgrabens
|
||
|
kistenabstand = 3 -- 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 + 3 -- 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)
|
||
|
|
||
|
-- start: Zeigt die anzahl der Fakeln an
|
||
|
term.setCursorPos( 1, 5)
|
||
|
term.clearLine()
|
||
|
fackeln = turtle.getItemCount(16)
|
||
|
print("Fackeln : " .. fackeln)
|
||
|
|
||
|
term.setCursorPos(1,7)
|
||
|
term.clearLine()
|
||
|
print("Gang " .. aktuellergang .. " von " .. ganganzahl .. " wurde fertiggestellt!")
|
||
|
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()
|
||
|
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(13) -- Einheiten zum Aufladen aus slot 13
|
||
|
if (ladeeinheiten == 1) then
|
||
|
print("Hinweis: Fuelaufladung um eine Einheit")
|
||
|
elseif (ladeeinheiten > 1) then
|
||
|
print("Hinweis: Fuelaufladung um " .. ladeeinheiten .. " Einheiten")
|
||
|
end
|
||
|
-- end: Zeigt die aufladung des Fuel-Level an
|
||
|
|
||
|
-- start: Pruefung fuer die Endertruhe
|
||
|
term.setCursorPos( 1, 4)
|
||
|
term.clearLine()
|
||
|
endertruhe = turtle.getItemCount(15)
|
||
|
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(16)
|
||
|
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(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
|
||
|
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? (0 = Fackelanzahl) :") -- 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
|
||
|
return -- wenn alles ok ist, beende die eingabe
|
||
|
end
|
||
|
end
|
||
|
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: Eingabe der Fackeln und Pruefung ob 0 oder zwischen 1 und 999
|
||
|
|
||
|
--start: Uhrzeit und Tag in Minecraft auslesen und anzeigen
|
||
|
function time()
|
||
|
term.setCursorPos( 29, 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("Zeit: " .. zeit) -- vor 10 Uhr, es geht um die laenge
|
||
|
else
|
||
|
print("Zeit: " .. zeit) -- nach 10 Uhr
|
||
|
end
|
||
|
end
|
||
|
--start: Uhrzeit und Tag in Minecraft auslesen und anzeigen
|
||
|
--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
|
||
|
|
||
|
--start: bereinigt den Bildschirm wen die turtel loslaeuft
|
||
|
function bildschirmRun()
|
||
|
term.setCursorPos(1,7)
|
||
|
term.clearLine()
|
||
|
term.setCursorPos(1,12)
|
||
|
term.clearLine()
|
||
|
turtle.select(1) -- waehlt zum start slot 1 aus
|
||
|
end
|
||
|
--end: bereinigt den Bildschirm wen die turtel loslaeuft
|
||
|
|
||
|
--**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
|
||
|
|
||
|
-- bereinigt den Bildschirm und baut das eingabe Fenster auf
|
||
|
bildschirmStart()
|
||
|
|
||
|
-- fuerht 2 funktionen gleichzeitig aus, eingab und aktuellisuerung der Fakeln, Endertruhe, und Fullevel
|
||
|
parallel.waitForAny(eingabeTunnellaenge, checkStatus)
|
||
|
|
||
|
--Laed die Turtel vor dem start wieder auf wen etwas in slot 13 abgelegt wurde
|
||
|
turtle.select(13) -- Slot 13 auswaehlen
|
||
|
turtle.refuel(turtle.getItemCount(13)) -- auffuellung mit der anzahl Items in Slot 13
|
||
|
|
||
|
-- 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()
|