016 ÜBUNG STAIRSPLUS:
In dieser Übung soll eine Abhängigkeit von einem »Mod« namens »moreblocks« hergestellt werden, so dass wir unsere bisher programmierten Blöcke mit der »circular saw« (deutsch: Kreissäge) zerschneiden können:
Einführung: Kreissäge
Im Mod-Ordner von »moreblocks« ist ein Werkzeug namens »circular saw« (deutsch: Kreissäge) enthalten, mit dem sich zahlreiche Materialien im Inventar bearbeiten lassen:
Lade Dir den »Mod« namens »moreblocks« aus der »ContentDB« herunter, kopiere ihn in den Minetest-Mod-Ordner (minetest/mods) und aktiviere ihn für Deine Welt im Startbildschirm von »Minetest« (Button »Mods auswählen«). Suche nach dem Betreten Deiner Welt im Inventar nach »saw« und füge das Werkzeug Deiner »Hotbar« hinzu. Verfahre ebenso mit »stone« und wähle hier »stonebrick« (deutsch: Steinziegel – die meisten anderen Steine und viele weitere Materialien würden aber auch funktionieren). Lege die Säge in der Welt ab und öffne sie mit Rechtsklick. Schiebe den Stein »stonebrick« in den Schacht »input material« (deutsch: Ausgangsmaterial). Rechts erscheinen jetzt alle Formen, die die Säge aus diesem Material herstellen kann.
Im Folgenden wollen wir probieren, einige unserer programmierten »Nodes« auf dieselbe Art und Weise mit der Kreissäge schneidbar zu machen.
ÜBUNGSMATERIAL HERUNTERLADEN:
optionale Abhängigkeit definieren:
Ergänze die Datei »mod.conf« in Deinem Mod-Ordner um folgende Zeile:
optional_depends = moreblocks
Das Einfügen des oben genannten Befehls ist sehr wichtig. Fehlt er, stürzt »Minetest« bei dem, was wir im Folgenden vorhaben, sofort ab.
Wie genau kann man jetzt auf die Funktionen der Kreissäge zugreifen? Gehe zum Ordner von »moreblocks« und dort in den Unterordner »stairsplus«. Hier findest Du eine Datei namens »API. md«; sie beschreibt, wie man den eigenen Quellcode ergänzen muss, um die selbst programmierten »Nodes« schneidbar zu machen:
Wie genau kann man jetzt auf die Funktionen der Kreissäge zugreifen? Gehe zum Ordner von »moreblocks« und dort in den Unterordner »stairsplus«. Hier findest Du eine Datei namens »API. md«; sie beschreibt, wie man den eigenen Quellcode ergänzen muss, um die selbst programmierten »Nodes« schneidbar zu machen:
Zu viele Informationen in der »API.md« von »stairsplus«? Dann sieh Dir die Datei »Ausschnitt Quellcode stairsplus.txt« aus dem heruntergeladenen Material an. Hier ist der Quelltext auf das Wesentliche gekürzt.
Quellcode aus der »API.md« einfügen:
Öffne eine Deiner .lua-Dateien, in die Du den ergänzenden Quellcode einfügen möchtest. Du kannst natürlich wahlweise auch eine komplett neue .lua-Datei mit neuen »Nodes« anlegen.
Füge den Quellcode-Ausschnitt am besten am Ende Deiner .lua-Datei ein. Ersetze nun alle Platzhalter im Code-Fragment passend zu den »Nodes«, die Du schneidbar machen möchtest. Achte sehr genau auf die richtige Setzung der diversen Klammern, Anführungszeichen und Kommas …
Füge den Quellcode-Ausschnitt am besten am Ende Deiner .lua-Datei ein. Ersetze nun alle Platzhalter im Code-Fragment passend zu den »Nodes«, die Du schneidbar machen möchtest. Achte sehr genau auf die richtige Setzung der diversen Klammern, Anführungszeichen und Kommas …
Platzierung des Quellcodes:
Warum ist es besser, den Quellcode-Ausschnitt ans Ende der .lua-Datei zu setzen?
Der stairsplus-Code bezieht sich ja auf andere »Nodes«. Wenn aber der stairsplus-Code ganz oben in der .lua-Datei steht, wird er möglicherweise bereits ausgeführt, obwohl die »Nodes«, auf die er sich bezieht, noch gar nicht existieren. Das produziert unter Umständen seltsame Effekte oder gar Abstürze.
In späteren Übungen wird es uns immer wieder begegnen, dass die Programmierreihenfolge eine Rolle spielen kann.
Der stairsplus-Code bezieht sich ja auf andere »Nodes«. Wenn aber der stairsplus-Code ganz oben in der .lua-Datei steht, wird er möglicherweise bereits ausgeführt, obwohl die »Nodes«, auf die er sich bezieht, noch gar nicht existieren. Das produziert unter Umständen seltsame Effekte oder gar Abstürze.
In späteren Übungen wird es uns immer wieder begegnen, dass die Programmierreihenfolge eine Rolle spielen kann.
Gefahren beim Zugriff auf andere Mods:
Wenn Du mit »optional_depends = moreblocks« eine Abhängigkeit definiert hast und es den genannten »Mod« gar nicht im Global-Mods-Ordner gibt, kann »Minetest« abstürzen. Auf dieses Problem gehen wir in einer späteren Sitzung noch einmal etwas genauer an.
»Minetest« stürzt trotzdem ständig beim Starten ab? Dann hast Du vielleicht vergessen, in der »mod.conf« die Abhängigkeit vom »Mod« zu definieren. Abgesehen natürlich von üblichen Programmierfehlern (Klammern, Kommas, Logik ...).
»Minetest« stürzt trotzdem ständig beim Starten ab? Dann hast Du vielleicht vergessen, in der »mod.conf« die Abhängigkeit vom »Mod« zu definieren. Abgesehen natürlich von üblichen Programmierfehlern (Klammern, Kommas, Logik ...).
Warum »optional_depends« und nicht einfach »depends«:
Der Begriff »optional_depends« sagt es eigentlich schon. Der angegebene »Mod« muss nicht zwangsweise vorhanden sein, anders als bei »depends«. Das Optionale erlaubt es mir als Betreiber:in einer Welt, flexibel zu entscheiden, ob ich den »Mod« installieren möchte oder nicht.
Falls es also keine zwingenden Gründe gibt, solltest Du vorzugsweise »optional_depends« in Deiner Programmierung verwenden statt »depends«.
Falls es also keine zwingenden Gründe gibt, solltest Du vorzugsweise »optional_depends« in Deiner Programmierung verwenden statt »depends«.
übervolles Inventar entlasten:
Wenn Du im »Kreativmodus« Deine Welt betrittst und das Inventar öffnest, tauchen dort immer alle Formen Deiner »Nodes« auf, die Du mit der Kreissäge schneidbar gemacht hast. Das macht das Inventar sehr schnell sehr unübersichtlich.
Du kannst das verhindern, indem Du innerhalb der stairsplus-Funktion die groups-Anweisung um folgende Codezeile erweiterst:
Du kannst das verhindern, indem Du innerhalb der stairsplus-Funktion die groups-Anweisung um folgende Codezeile erweiterst:
not_in_creative_inventory = 1
Jetzt werden nur noch die Grundformen Deiner »Nodes« im Inventar angezeigt.
mehr Abhängigkeiten definieren:
In der »ContentDB« gibt es ganze Reihe von »Mods«, die eine eigene »API« mitbringen. Kopiere die »Mods« namens »Round Tree Trunks« und »Flowerpot« in den Minetest-Mod-Ordner (»minetest/mods«) und aktiviere sie für Deine Welt im Startbildschirm von »Minetest« (Button »Mods auswählen«). Ergänze dann die Datei »mod.conf« in Deinem Mod-Ordner um die optionalen Abhängigkeiten:
Beide »Mods« enthalten eine eigene »API.txt«-Datei. Öffne sie und versuche zu verstehen, welchen Teil des Quellcodes Du in Deinen »Mod« kopieren musst und wie der Code anzupassen ist.
Hinweis: »Round Tree Trunks« funktioniert nur, wenn Deine »Node« unter groups den Eintrag wood = 1 enthält. »Flowerpot« scheint zunächst an Deiner »Node« nichts zu verändern. Wenn Du aber im Inventar nach »flowerpot« suchst und dann Deine ergänzte »Node« in den Blumentopf pflanzt, passt sie sich der Größe des Topfes an.
Hinweis: »Round Tree Trunks« funktioniert nur, wenn Deine »Node« unter groups den Eintrag wood = 1 enthält. »Flowerpot« scheint zunächst an Deiner »Node« nichts zu verändern. Wenn Du aber im Inventar nach »flowerpot« suchst und dann Deine ergänzte »Node« in den Blumentopf pflanzt, passt sie sich der Größe des Topfes an.
SCHON FERTIG?
Welche Deiner anderen »Nodes« eignen sich eventuell noch, um sie mit der Kreissäge schneidbar zu machen?
SCHON FERTIG?
Was passiert, wenn Du bei »stairsplus« in der Zeile, in der die Texturen (»tiles«) definiert werden, ganz andere Texturen nennst als in der ursprünglichen »Node«?
SCHON FERTIG?
Du hast weitere »Items« für Deinen »Mod« programmiert. Also solltest Du auch den Screenshot aktualisieren, damit man sofort erkennt, was Dein »Mod« jetzt alles an Neuigkeiten zu bieten hat.
SCHON FERTIG?
Wie sieht es mit den Dateien »mod.conf« und »README.md« aus? Sind hier vielleicht Ergänzungen nötig?
MUSTERLÖSUNG: SO KÖNNTE ES AUSSEHEN
Versuche zunächst, eine eigene Lösung für die gestellten Aufgaben zu finden. Falls Du aber alleine nicht weiterkommst, kannst Du Dir unsere Musterlösung herunterladen.
Beachte: Da es sich um eine Musterlösung handelt, kann Dein Quellcode am Ende ganz anders aussehen. Das fängt schon bei den Ordner- und Dateinamen an, die Du für Deinen »Mod« gewählt hast. Solange Dein »Mod« aber funktioniert, ist eine Lösung so gut wie die andere ...
Beachte: Da es sich um eine Musterlösung handelt, kann Dein Quellcode am Ende ganz anders aussehen. Das fängt schon bei den Ordner- und Dateinamen an, die Du für Deinen »Mod« gewählt hast. Solange Dein »Mod« aber funktioniert, ist eine Lösung so gut wie die andere ...
Verwendung dieser Inhalte - auch in Auszügen - im Schulunterricht, der Jugendarbeit und im Bildungsbereich mit dem Vermerk »© multimediamobil – Region Süd« erlaubt.