28

Let’s Play. Programmieren lernen mit Python und Minecraft · Python Ob bewusst oder unbewusst, eine der wichtigsten Entscheidungen, die man auf dem Weg zum Programmierer zu treffen

  • Upload
    others

  • View
    22

  • Download
    0

Embed Size (px)

Citation preview

5

Inhalt

Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Kapitel 1 Minecraft-Server 15

1.1 Java installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.2.1 CraftBukkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.2.2 Spigot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

1.3 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.4 Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291.5 Verbinden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301.6 Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Kapitel 2 Python 35

2.1 Programmiersprachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352.2 Besonderheiten von Python . . . . . . . . . . . . . . . . . . . . . . . . . . . 362.3 Einrichtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.3.1 Jython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382.3.2 PPLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

2.4 Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Kapitel 3 Das erste Plugin 45

3.1 Ordner anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.2 plugin.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.3 plugin.yml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.4 Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.5 Fehler finden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.6 Entdecken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

6

Inhalt

Kapitel 4 Chat-Kommandos 51

4.1 Eigene Befehle definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524.2 Chat-Nachrichten versenden . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Kapitel 5 Variablen 57

5.1 Namen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585.2 Werte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

5.2.1 Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605.2.2 Umwandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615.2.3 Runden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

5.3 +1-Plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645.4 Listen und Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.5 Konstanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

Kapitel 6 Schleifen 73

6.1 Kürbis-Plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736.1.1 Positionierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746.1.2 Blöcke platzieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

6.2 Die verschiedenen Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . 786.2.1 for-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786.2.2 while-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836.2.3 Verschachtelte Schleifen . . . . . . . . . . . . . . . . . . . . . . . 89

Kapitel 7 Verzweigungen 93

7.1 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937.2 else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957.3 elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

Kapitel 8 Funktionen 103

8.1 Deklaration von Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 1038.2 Rückgabewerte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048.3 Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048.4 Anwendungsbeispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

7

Inhalt

Kapitel 9 Bauen 109

9.1 Notunterkunft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099.1.1 Decke und Wände . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109.1.2 Tür . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1149.1.3 Bett . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189.1.4 Fackel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

9.2 Runde Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1259.2.1 Kreise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1259.2.2 Kugeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

Kapitel 10 Schilder 133

10.1 Hängende Schilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13310.2 Stehende Schilder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13410.3 Text festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

10.3.1 Farbe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13710.3.2 Formatierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

10.4 Schilder-Plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14010.4.1 Wiederholung: Listen . . . . . . . . . . . . . . . . . . . . . . . . . . 14110.4.2 Das Plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Kapitel 11 Listener 157

11.1 Grundgerüst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15711.2 Spieler-Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15811.3 Kreaturen-Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16511.4 Block-Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16911.5 Inventar-Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17111.6 Server-Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17311.7 Fahrzeug-Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17411.8 Wetter-Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17511.9 Welt-Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

11.10 Mehrere Listener in einem Plugin . . . . . . . . . . . . . . . . . . . . . . 176

Kapitel 12 Klassen und Objekte 179

12.1 Die ganze Welt ist ein Objekt . . . . . . . . . . . . . . . . . . . . . . . . . . 17912.2 Funktionen in Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

8

Inhalt

12.3 Zugriffskontrolle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19012.4 Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19312.5 Mehrfachvererbung und mehrstufige Vererbung . . . . . . . . . . 19612.6 Bau-Plugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

Kapitel 13 Crafting-Rezepte 203

13.1 Rezepte festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20313.2 Eigene Rezepte entwerfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20613.3 Feuerschwert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20713.4 Enderbogen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

Kapitel 14 Informationen dauerhaft speichern 213

14.1 Konfigurationsdateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21314.1.1 Lesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21314.1.2 Schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

14.2 Objekte in Dateien speichern . . . . . . . . . . . . . . . . . . . . . . . . . . 218

Kapitel 15 Eigene Spielmodi entwickeln 229

15.1 Schneeballschlacht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22915.1.1 Schneebälle verteilen . . . . . . . . . . . . . . . . . . . . . . . . . . 23015.1.2 Schneebälle auffüllen . . . . . . . . . . . . . . . . . . . . . . . . . . 23315.1.3 Punkte zählen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23415.1.4 Punkte dauerhaft speichern . . . . . . . . . . . . . . . . . . . . . 23915.1.5 Highscore-Liste anzeigen . . . . . . . . . . . . . . . . . . . . . . . 24015.1.6 Vollständiger Quellcode . . . . . . . . . . . . . . . . . . . . . . . . 241

15.2 Sammelspiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24415.2.1 Aufbau des Plugins . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24415.2.2 Plugin starten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24615.2.3 Spieler betritt den Server . . . . . . . . . . . . . . . . . . . . . . . 24715.2.4 Gegenstände zählen . . . . . . . . . . . . . . . . . . . . . . . . . . . 24815.2.5 Auftrag anzeigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24915.2.6 Vollständiger Quellcode . . . . . . . . . . . . . . . . . . . . . . . . 249

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

9

Inhalt

Kapitel 16 Eigenständige Python-Programme 253

16.1 Python einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25316.2 Grundgerüst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25416.3 Ein- und Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25516.4 Quiz programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256

Anhang A Befehlsreferenz 261

Anhang B Materialien 279

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

11

Einleitung

Liebe Leserin, lieber Leser,

die Welt von Minecraft steckt voller Dinge, die es zu entdecken gilt. Verschiedene Land-schaften, Hunderte verschiedene Gegenstände und allerlei Tiere und Monster sind nureinige der Dinge, die dich erwarten.

Irgendwann ist aber selbst diese Vielzahl an Möglichkeiten erschöpft und man hat dasGefühl, alles schon einmal gesehen oder gemacht zu haben. Wenn es dir so geht, dannist dieses Buch genau richtig für dich. Denn im Verlaufe dieses Buches lernst du, wieman mithilfe von Python und dem Bukkit- oder Spigot-Server eigene Erweiterungen fürMinecraft programmiert, sogenannte Plugins, die du dann zusammen mit deinen Freun-den auf deinem eigenen Minecraft-Server ausprobieren kannst.

Egal ob du neue Crafting-Rezepte entwerfen, ganze Häuser mit einem einfachen Chat-Befehl bauen oder sogar einen eigenen Spielmodus programmieren möchtest, mit eige-nen Plugins steckt die Welt von Minecraft wieder voller Herausforderungen und Dinge, dieentdeckt werden wollen. Und ganz nebenbei lernst du auch noch zu programmieren – undwer weiß, vielleicht kommt das nächste Minecraft eines Tages von dir!

Bevor es soweit ist, liegt allerdings noch ein ordentliches Stück Weg vor dir. Die erstenbeiden Kapitel dieses Buches beschäftigen sich deshalb zunächst einmal damit, wie dudeinen Computer für das Programmieren und Testen eigener Plugins vorbereitest. Dazuwird dir erklärt, wie du den Bukkit- oder Spigot-Server installierst, der in diesem Buchverwendet wird, ihn nach deinen Wünschen konfigurierst und wie du deinen Computerso einrichtest, dass du Python-Plugins schreiben kannst.

Direkt im Anschluss geht es im dritten Kapitel ohne Umschweife direkt los mit dem Pro-grammieren deines ersten eigenen Plugins. Die ersten Schritte werden dir vielleichtnoch etwas unspektakulär vorkommen, aber mit jedem der folgenden Kapitel wirst duimmer mehr Möglichkeiten besitzen, um immer ausgeklügeltere Plugins zu program-mieren. Schon im vierten Kapitel wirst du zum Beispiel lernen, wie du eigene Chat-Be-fehle programmieren und verwenden kannst.

Die Kapitel 5 bis 8 beschäftigen sich mit grundlegenden Konzepten des Programmierensim Allgemeinen und der Programmiersprache Python im Besonderen. Was du hier liest,wird dir nicht nur beim Programmieren von Minecraft-Plugins helfen, sondern beim Pro-grammieren jedes Programms in jeder Programmiersprache. Trotzdem entstehen dabeinatürlich auch einige praktische kleine Plugins, wie zum Beispiel das Mauer-Plugin, dases dir erlaubt, mit einem einfachen Chat-Befehl auf die Schnelle eine Mauer zu bauen,wenn du möchtest, sogar aus purem Gold.

Das neunte Kapitel widmet sich dann ganz der Baukunst. Häuser, Kreise und Kugeln –hier wird kein Block auf dem anderen gelassen. Und wenn du schon einmal versucht

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

Einleitung

12

hast, eine Kugel in Minecraft von Hand zu bauen, dann wirst du ganz besonders dieDienste des Kugel-Plugins zu schätzen wissen, das dir auf Knopfdruck eine nahezu per-fekte Kugel zaubern kann. Weiter geht es danach mit dem Bau von Schildern, denen dasgesamte zehnte Kapitel gewidmet ist.

Wenn dir selbst ein Knopfdruck zum Bauen noch zu viel ist, dann wird dir das elfte Kapi-tel besonders gefallen. Dort geht es nämlich um Plugins, die vollautomatisch auf Ge-schehnisse in der Spielwelt reagieren. Egal ob ein Creeper über die Karte schleicht, einSpieler etwas isst oder ein Baum wächst, hier lernst du wie deinem Plugin nichts mehrvon dem entgeht, was auf deinem Server passiert und natürlich auch, wie du daraufreagieren kannst.

Ein sehr grundlegendes und wichtiges Konzept moderner Programmiersprachen, dieobjektorientierte Programmierung, lernst du in Kapitel 12 kennen, hier dreht sich allesum Objekte und Klassen.

Falls du dich um die umherschleichenden Creeper aber doch lieber ganz manuell küm-mern möchtest, kannst du die Informationen aus Kapitel 13 nutzen, um ganz eigene Waf-fen zu kreieren. In diesem Kapitel geht es nämlich um das Erstellen eigener Crafting-Rezepte und ein Beispiel, das dir dort begegnen wird, ist ein Rezept für ein Flam-menschwert, das alles in Brand setzt, worauf es trifft.

Das vierzehnte Kapitel ist dann wieder etwas technischer, aber nicht weniger nützlich.Hier lernst du nämlich, wie du Informationen dauerhaft speichern kannst, die auch dannerhalten bleiben, wenn der Server zwischenzeitlich ausgeschaltet wird. Das ist zum Bei-spiel praktisch, wenn du wie in Kapitel 15 eigene Spielmodi kreieren willst, also sozusa-gen ein Spiel im Spiel. Wir wäre es zum Beispiel mit einem Schneeballschlacht-Mod miteigener Highscore-Liste, die die Treffer zählt? Oder lieber ein lustiges Suchspiel, bei demder Gewinner mit Erfahrungspunkten oder wertvollen Gegenständen belohnt wird?Ganz wie du möchtest: Deiner Kreativität sind keine Grenzen gesetzt!

Im letzten Kapitel bekommst du dann noch einen kurzen Ausblick darauf, was du mit dei-nen neu gewonnenen Programmierfähigkeiten noch anstellen kannst, außer Minecraft-Plugins zu programmieren. Denn wenn du am Ende des Buches angelangt bist, hört derSpaß noch lange nicht auf: Nun hast du alle Werkzeuge und alles Wissen, das du benö-tigst, um ganz eigene Plugins ganz nach deinen Vorstellungen zu entwerfen. Dabei hel-fen dir einige Listen im Anhang des Buches, in denen du Befehle und besonders häufigbenötigte Dinge schnell nachschlagen kannst. Denn egal wie erfahren man als Program-mierer ist, alles kann und muss man nicht auswendig können, man muss nur wissen, woman es nachschlagen kann – und genau dazu dient der Anhang dieses Buches.

Falls du Fragen, Kritik oder Anregungen zum Buch oder generell zu Minecraft-Pluginshast, kannst du mich gerne jederzeit kontaktieren. Du erreichst mich per Mail an [email protected], über meine Facebook-Seite www.facebook.com/AutorDanielBraunoder über meine Website www.daniel-braun.com.

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

Einleitung

13

Mein besonderer Dank gilt Karl-Heinz Barzen, der den Entstehungsprozess dieses Bu-ches unermüdlich mit zahlreichen hilfreichen Kommentaren und Anmerkungen begleitetund damit einen wichtigen Beitrag dazu geleistet hat, dass dieses Buch möglichst ver-ständlich und einsteigerfreundlich wird.

Nun wünsche ich dir aber vor allem viel Spaß beim Lesen, Programmieren und Ent-decken!

Daniel Braun

Downloads zum BuchUnter der Webadresse buch.daniel-braun.com findest du:

• Links zu allen Downloads, die du benötigst

• Alle Plugins, die du im Rahmen des Buches programmieren wirst, falls du denCode nicht aus dem Buch abtippen möchtest

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

35

Kapitel 2

PythonOb bewusst oder unbewusst, eine der wichtigsten Entscheidungen, die man auf demWeg zum Programmierer zu treffen hat, hast du bereits getroffen: welche Programmier-sprache du lernen möchtest. Mit diesem Buch hast du dich nämlich für die Programmier-sprache Python entschieden. Bevor wir aber einen Blick auf die Besonderheiten vonPython werfen, soll es zunächst um die Frage gehen, was Programmiersprachen eigent-lich sind und warum sie benötigt werden.

2.1 ProgrammiersprachenBeim Programmieren geht es im Wesentlichen darum, dass der Programmierer demComputer eine bestimmte Aufgabe gibt, die dieser erledigen soll. Damit er das kann,braucht der Computer eine genaue Handlungsvorschrift, die auch Algorithmus genanntwird. Auch im Alltag begegnen uns oft Handlungsvorschriften, zum Beispiel in Formeines Rezepts:

1. 250 Gramm Mehl in eine Schüssel geben

2. 500 Milliliter Milch dazugeben

3. 2 Eier hinzugeben

4. Mit einer Prise Salz würzen

5. Umrühren

Fertig ist der Crêpes-Teig! Damit eine Handlungsvorschrift korrekt ausgeführt werdenkann, müssen sich beide Seiten auf eine gemeinsame Sprache einigen. Wenn dir jemandein chinesisches Rezept gibt, kannst du vermutlich nicht viel damit anfangen.

Computer »sprechen« in Einsen und Nullen, also in einer Sprache, mit der Menschennicht besonders gut umgehen können. Unsere Sprache wiederum, egal ob es sich umDeutsch, Englisch oder Chinesisch handelt, ist für den Computer viel zu ungenau. Neh-men wir zum Beispiel den Satz »Da vorne ist eine Bank.« Obwohl es sich dabei um einenvollkommen korrekten deutschen Satz handelt, ist doch nicht eindeutig klar, was mitdem Satz eigentlich gemeint ist. Steht da vorne eine Parkbank, auf die man sich setzenkann, oder ist dort die Filiale einer Bank, auf der man Geld einzahlen und abheben kann?Es wäre ein recht kostspieliger Fehler, wenn dein Computer beim Online-Shoppen ausVersehen die Deutsche Bank statt einer Bank für den Garten kauft.

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

2 Python

36

Algorithmen müssen deshalb nicht nur Handlungsvorschriften sein, sondern eindeutigeHandlungsvorschriften. Auch mit Begriffen wie »eine Prise« kann ein Computer weniganfangen, weil sie einfach zu ungenau sind. Aus diesem Grund nutzen wir Programmier-sprachen, denn sie ermöglichen es uns, eindeutige Handlungsvorschriften festzulegen.Und obwohl sie auf den ersten Blick recht kompliziert scheinen, können wir sie dochleichter lernen als eine Sprache aus Nullen und Einsen.

Viele Programmiersprachen, wie zum Beispiel C, verwenden sogenannte Compiler, diedie Programmiersprache in Maschinensprache übersetzen. Andere, wie auch Python,verwenden einen sogenannten Interpreter. Wir werden in diesem Buch einen besonde-ren Interpreter mit dem Namen Jython verwenden. Ein Vorteil des Interpreters ist, dasser den Programmcode bei jedem Ausführen neu »interpretiert«, also für den Computerübersetzt, Deshalb werden Änderungen am Programmcode bei einem Interpreter sofortwirksam, während man bei einer Compilersprache den Quellcode zuerst neu kompilie-ren muss, bevor die Änderungen auch im Programm ankommen. Außerdem sind Inter-pretersprachen unabhängiger vom Betriebssystem, deine fertigen Plugins kannst dudaher später auch problemlos an Freunde weitergeben, egal ob sie Windows, GNU/Linux oder OS X nutzen.

2.2 Besonderheiten von PythonPython wurde Anfang der 1990er-Jahre vom niederländischen Informatiker Guido vanRossum entwickelt. Die Programmiersprache ist heute weit verbreitet und dafürbekannt, dass sie besonders leicht zu erlernen ist, genau die richtige Sprache also fürden Einstieg in die Programmierung.

Python gilt aber auch als besonders übersichtlich und minimalistisch. Gut sichtbar wirddas am sogenannten »Hallo Welt!«-Programm. Programmierer nutzen »Hallo Welt!«-Programme gerne, um auf besonders einfache Weise den Aufbau einer Programmier-sprache zu verdeutlichen, denn dieses kleine Programm tut nichts anderes, als den Text»Hallo Welt!« auf dem Bildschirm auszugeben.

In Listing 2.1 kannst du den Code des »Hallo Welt!«-Programms in Java sehen, also derProgrammiersprache, in der auch Minecraft geschrieben wurde. Das sieht schon ziem-lich kompliziert aus, es gibt viele Wörter und auffällig viele sogenannte geschweifteKlammern, also { und }. Insgesamt hat das Programm eine Länge von fünf Zeilen.

Merke• Ein Algorithmus ist eine eindeutige Handlungsvorschrift.

• Ein Interpreter übersetzt Programmiersprache bei Ausführung in Maschinen-sprache.

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

2.2 Besonderheiten von Python

37

Zeilen und Zeilennummern, das wirst du später noch sehen, sind für Programmiererwichtige Informationen, denn wenn sie auf eine bestimmte Stelle in einem Programmhinweisen wollen, so tun sie das meist mithilfe der Zeilennummer. Oft sagt die Längeeines Programmes auch etwas über die Komplexität aus, zumindest aber über den Auf-wand, deshalb sind Programmierer oft bemüht, Programme möglichst kurz zu halten.

In Listing 2.2 kannst du den Code des »Hallo Welt!«-Programms in der Programmierspra-che C sehen. Obwohl das Programm wegen anderer Formatierung, sogar eine Zeile län-ger ist sieht man doch sofort, dass es schon deutlich übersichtlicher ist als sein Java-Pendant, selbst wenn man nicht weiß, wofür die Befehle eigentlichen stehen.

Formatierung, also zum Beispiel das Einrücken von Zeilen, oder das Beginnen einerneuen Zeile, ist beim Programmieren extrem wichtig, das gilt für Python noch viel mehrals für jede andere Programmiersprache. Denn wie wir später noch sehen werden,macht die Einrückung einer Zeile in Python nicht nur einen optischen Unterschied, son-dern kann auch die Funktionalität eines Programmes verändern.

Die Python-Version des »Hallo Welt!«-Programms siehst du in Listing 2.3. Mit geradeeinmal einer Zeile ist es ohne Zweifel die kürzeste der drei Versionen. Auffallend ist auchdie Abwesenheit von Sonderzeichen wie dem Semikolon und den geschweiften Klam-mern, die es in den beiden anderen Programmiersprachen gibt.

Wie du also sehen kannst, wird dir Python das Leben als Programmierer nicht unnötigschwer machen, ganz im Gegenteil, es wird dir einen einfacheren Einstieg ermöglichenals die meisten anderen Programmiersprachen. Und obwohl die Arbeit mit Pythonvergleichsweise einfach ist, wirst du trotzdem im Verlaufe des Buches alle wichtigen

class Hallo { public static void main(String[] args) { System.out.print("Hallo Welt!"); }}

Listing 2.1: »Hallo Welt!« in Java

#include <stdio.h>

int main(void){ puts("Hallo Welt!");}

Listing 2.2: »Hallo Welt!« in C

print("Hallo Welt!")

Listing 2.3: »Hallo Welt!« in Python

12345

123456

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

2 Python

38

Programmiertechniken kennenlernen, wie sie auch die anderen Programmiersprachenbieten. Da sich diese oft kaum zwischen den verschiedenen Sprachen unterscheiden,wird es dir, wenn du erst einmal Python gelernt hast, später nicht schwer fallen, nochweitere Programmiersprachen zu lernen, falls du das möchtest.

2.3 EinrichtungWie bereits erwähnt, ist Minecraft selbst in Java programmiert. Daher benötigst du,bevor du Python-Plugins auf deinem Server ausführen kannst, einen Interpreter, der dei-nen Python-Code in Java übersetzt, und ein Plugin, das diesen Interpreter an deinen Ser-ver koppelt. Beides findest du auf der Website zum Buch, unter buch.daniel-braun.comzum Download.

2.3.1 JythonZunächst solltest du von dort den Interpreter herunterladen, dieser trägt den NamenJython, ein Kofferwort aus Java und Python. Jython besteht lediglich aus einer einzelnenDatei, diese trägt den Namen jython.jar. Wenn du die Datei heruntergeladen hast,musst du nur noch einen neuen Ordner mit dem Namen lib in deinem Serververzeichniserzeugen und die Datei dorthin kopieren. Damit ist die Einrichtung des Interpretersbereits abgeschlossen.

2.3.2 PPLoaderNun fehlt nur noch das Plugin, das den Interpreter mit deinem Server, egal ob Bukkitoder Spigot, verbindet. Das benötigte Plugin trägt den Namen PPLoader, was für PythonPlugin Loader steht. Auch das Plugin besteht lediglich aus einer einzigen Datei, sie trägtden Namen pploader1.1.0.jar. Sie muss nach dem Download in den im Server-Ordner bereits vorhandenen Ordner plugins kopiert werden.

MerkeBevor du weiterliest, solltest du noch einmal überprüfen, ob du alle nötigen Schritteausgeführt hast, um deinen Server auf die Verwendung von Python-Plugins vorzube-reiten:

1. Jython herunterladen von buch.daniel-braun.com

2. Im Server-Ordner ein neues Verzeichnis lib anlegen und die jython.jar dorthinkopieren

3. PPLoader herunterladen von buch.daniel-braun.com

4. Die Datei pploader1.1.0.jar in den plugins-Ordner im Server-Verzeichniskopieren

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

2.4 Editor

39

Um zu testen, ob alles funktioniert hat, kannst du den Server über die Eingabeaufforde-rung beziehungsweise das Terminal mit dem Befehl java -jar craftbukkit-1.9.jar,beziehungsweise java -jar spigot-1.9.jar, starten. Funktioniert alles ohne Pro-bleme, so wird im Server-Fenster die in Abbildung 2.1 markierte Zeile angezeigt, diebestätigt, dass der PPLoader erfolgreich geladen wurde.

Abbildung 2.1: Erfolgreich geladener PPLoader

2.4 EditorBevor wir uns endgültig dem Programmieren von Plugins widmen, soll zunächst nochdie Frage geklärt werden, welches Programm man eigentlich verwendet, um Python-Plugins zu schreiben. Grundsätzlich kannst du dazu nahezu jedes Programm verwen-den, mit dem man Texte verfassen kann. Der mit Windows mitgelieferte EDITOR, den duim Startmenü unter ZUBEHÖR findest, ist zum Beispiel prinzipiell ausreichend. OS X bringtdas Programm TEXTEDIT mit, das sich im Ordner Programme befindet oder über die Suchegefunden werden kann.

Solltest du dich für den Windows-Editor entscheiden, so musst du beim SPEICHERN daraufachten, dass du als DATEITYP den Eintrag ALLE DATEIEN auswählst. Beim Programm TEXT-EDIT sollte nach dem Neuanlegen eines Dokuments der Menüpunkt FORMAT | IN REINEN

TEXT UMWANDELN ausgewählt werden. Und unabhängig davon, welches Programm du ver-wendest, solltest du beim Speichern an den Dateinamen die Endung .py anhängen,damit dein Computer weiß, dass es sich bei der gespeicherten Datei um Python-Codehandelt.

Du kannst dir das Leben aber auch deutlich einfacher machen, indem du einen Editorverwendest, der speziell für das Schreiben von Python-Code ausgelegt ist. Solche Edito-ren bieten oft zahlreiche Vorteile wie automatische Vervollständigung, farbliche Hervor-hebung und weitere Komfortfunktionen. Im Internet kannst du dutzende, wenn nicht garhunderte solcher Editoren finden. Eclipse und PyCharm sind zum Beispiel nur zweibekanntere Vertreter. Für Einsteiger sehr empfehlenswert ist Komodo Edit, einen Linkzum kostenlosen Download, für Windows, GNU/Linux und OS X, findest du auf der Web-site zum Buch unter buch.daniel-braun.com. Komo Edit bietet zahlreiche Komfortfunk-tionen, ist aber nicht so überladen wie zum Beispiel Eclipse und eignet sich daherbesonders für Anfänger.

Nach dem Download der Installationsdatei kann diese wie gewohnt mit einem Doppel-klick geöffnet werden. Daraufhin öffnet sich die in Abbildung 2.2 gezeigte Installations-routine.

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

2 Python

40

Abbildung 2.2: Schritt 1 der Installation

Dort kannst du mit einem Klick auf den Button NEXT zum zweiten Schritt der Installationspringen, der in Abbildung 2.3 gezeigt ist.

Abbildung 2.3: Schritt 2 der Installation

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

2.4 Editor

41

Hier werden nun die Lizenzbestimmungen angezeigt, die, nach ausführlicher Lektüre,mit einem Klick auf die Box neben I ACCEPT THE TERMS IN THE LICENSE AGREEMENT bestätigtwerden müssen, damit der Editor installiert werden kann.

Ein erneuter Klick auf den NEXT-Button bringt dich dann zum dritten und vorletztenSchritt der Installation, der in Abbildung 2.4 gezeigt ist.

Abbildung 2.4: Schritt 3 der Installation

Hier kannst du nun noch auswählen, ob du ein Desktop-Icon und eine Startmenü-Ver-knüpfung einrichten möchtest. Auch dieses Fenster kannst du wieder mit einem Klickauf den NEXT-Button verlassen, was dich zum letzten Schritt der Installation führt. Hiermusst du nun nur noch den Button INSTALL drücken und schon wird Komodo Edit auf dei-nen Computer installiert.

Beim ersten Starten des Programms erwartet dich dann das in Abbildung 2.5 gezeigteFenster.

Neben der Menüleiste am oberen Bildschirmrand besteht es im Wesentlichen aus zweiBereichen. Auf der linken Seite werden dir die Dateien und Ordner auf deinem Computerangezeigt, so kannst du schnell und bequem auf verschiedene Dateien zugreifen, imgroßen, dunklen Bereich auf der rechten Seite werden später geöffnete Datei angezeigt.

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

2 Python

42

Abbildung 2.5: Startbildschirm von Komodo Edit

Um eine neue Datei anzulegen, kannst du entweder in diesem Bereich auf NEW FILE

klicken, oder oben in der Menüleiste auf das Blatt mit dem Pluszeichen. In Abbildung 2.6kannst du sehen, wie Python-Code in Komodo Edit dargestellt wird.

Der Inhalt ist an dieser Stelle noch egal, aber im Vergleich zum Beispiel zum WindowsEditor sticht hier sofort die farbliche Hervorhebung ins Auge, außerdem gibt es eine Zei-lennummerierung und mithilfe der kleinen Dreiecke am linken Rand lassen sich einzelneTeile des Codes ein- und ausklappen.

Noch mögen dir diese Unterschiede vielleicht banal erscheinen, aber je länger du pro-grammierst, desto mehr wirst du diese kleinen Annehmlichkeiten schätzen lernen. Fürden weiteren Verlauf des Buches ist es jedoch egal, für welchen Editor du dich entschei-dest, denn in den folgenden Kapiteln werden wir uns ganz auf den Inhalt konzentrierenund der ist, unabhängig vom Editor, immer gleich.

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

2.4 Editor

43

Abbildung 2.6: Python-Code in Komodo Edit

Auch bei Komodo Edit musst du beim Speichern von Dateien darauf achten, die korrekteEndung auszuwählen. Dateien speichern kannst du wie gewohnt über das Disketten-Symbol in der oberen Symbolleiste. Daraufhin öffnet sich der in Abbildung 2.7 gezeigteSpeicherdialog. Als DATEITYP musst du hier den Eintrag ALL FILES auswählen und an denDATEINAMEN die Endung .py anhängen.

Abbildung 2.7: Speicherdialog

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

2 Python

44

Damit aber auch genug der Vorbereitungen, im nächsten Kapitel wirst du nun endlichdein erstes eigenes Plugin programmieren lernen. Und dank der bereits getroffenen Vor-bereitungen wird das vermutlich schneller gehen, als du denkst.

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

45

Kapitel 3

Das erste PluginWie bereits im letzten Kapitel erwähnt, bieten »Hallo Welt!«-Programme einen einfachenund schnellen Einstieg in eine Programmiersprache. Deshalb wird auch unser erstesPlugin ein »Hallo Welt!«-Plugin.

3.1 Ordner anlegenZunächst solltest du für jedes Plugin, das du programmieren möchtest, einen neuenOrdner anlegen. Jedes Plugin muss sich in einem eigenen Unterordner innerhalb desplugins-Ordners im Serververzeichnis befinden. Der Name des Unterordners mussimmer mit .py.dir enden, davor kann ein beliebiger Name stehen, allerdings ohneLeer- oder Sonderzeichen. Für das »Hallo Welt!«-Plugin könntest du den Ordner alsozum Beispiel hallowelt.py.dir nennen.

3.2 plugin.pyIm nächsten Schritt solltest du dann im Editor deiner Wahl eine neue Datei anlegen undsie mit den Inhalt aus Listing 3.1 füllen. Diese Datei musst du dann im eben angelegtenOrdner hallowelt.py.dir unter dem Namen plugin.py speichern.

MerkeJedes Plugin muss sich in einem eigenen Unterordner im plugins-Ordner des Server-verzeichnisses befinden. Der Name dieser Unterordner muss immer mit .py.direnden und darf keine Leer- oder Sonderzeichen enthalten.

class HalloWeltPlugin(PythonPlugin): def onEnable(self): self.getLogger().info("Hallo Welt!")

Listing 3.1: »Hallo Welt!«-Plugin

123

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

3 Das erste Plugin

46

Das sind auf den ersten Blick erst einmal ziemlich viele Wörter und Zeichen, die wenigSinn ergeben. Der Text in Listing 3.1 wird Programmcode, Sourcecode oder Quellcodegenannt. Er enthält die Handlungsvorschriften, die der Computer ausführen soll. In die-sem Fall also die Vorschrift: Zeige beim Starten des Servers die Nachricht »Hallo Welt!«an. Im Laufe der nächsten Kapitel wirst du alle Befehle genau kennen und verstehen ler-nen. Für den Anfang soll aber zunächst einmal ein grober Überblick reichen.

Wie dir sicher schon aufgefallen ist, ist das Plugin mit gerade einmal drei Zeilen zwarimmer noch sehr kurz, aber immerhin schon einmal zwei Zeilen länger als das »HalloWelt!«-Programm in Python aus dem letzten Kapitel. In der ersten Zeile wird der soge-nannte Klassenname auf HalloWeltPlugin festgelegt, für den Anfang kannst du dirdiesen einfach wie einen ganz normalen Namen vorstellen, mit dessen Hilfe das Plugingerufen werden kann. Theoretisch gibt es für diesen Namen außer einem Verbot fürLeer- und Sonderzeichen kaum Beschränkungen. In der Praxis gibt es unter Python-Programmierern aber einige ungeschriebene Gesetze oder Konventionen, die du beach-ten solltest. Zunächst einmal sollte der Name aussagekräftig sein, also eine gute Be-schreibung dessen, was das Plugin tut. Außerdem sollten Klassennamen immer miteinem Großbuchstaben beginnen. Wenn sie sich, wie bei HalloWeltPlugin, aus meh-reren Wörtern zusammensetzen, sollte außerdem der Anfangsbuchstabe jedes Wortesgroßgeschrieben werden, um die Lesbarkeit zu verbessern.

In den Klammern hinter dem Klassennamen steht außerdem noch PythonPlugin, dassagt dem Computer, dass es sich bei diesem Python-Code um ein Minecraft-Python-Plugin handelt.

TippEs ist eine gute Übung, die Programme aus dem Buch abzutippen, da du dir so dieverschiedenen Befehle schneller einprägen kannst. Allerdings musst du darauf ach-ten, dabei sehr exakt vorzugehen, denn schon ein einziger Tippfehler kann dafür sor-gen, dass dein Programm nicht mehr funktioniert. Möchtest du die Programme nichtabtippen, so findest du sie, wie bereits in der Einleitung erwähnt, unter buch.daniel-braun.com zum Download.

MerkeKonventionen für Klassennamen:

• Aussagekräftig

• Beginnen mit einem Großbuchstaben

• Bei einer Zusammensetzung mehrerer Wörter wird der erste Buchstabe jedesWortes großgeschrieben

• Keine Verwendung von Leer- und Sonderzeichen

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

3.3 plugin.yml

47

In der zweiten Zeile wird die sogenannte onEnable-Funktion definiert. Was genau eineFunktion beim Programmieren ist, damit werden wir uns später noch ausführlich be-schäftigen. onEnable ist Englisch und bedeutet so viel wie »beim Start«. Hier kannst dudem Plugin sagen, was es machen soll, wenn es gestartet wird. Wie du sehen kannst, istdie zweite Zeile eingerückt, sie steht also weiter rechts als die vorherige Zeile; das istwichtig zu beachten, denn nur so funktioniert dein Plugin später auch. In Pythonzeigen solche Einrückungen nämlich an, dass die entsprechenden Zeilen zu etwas ge-hören. In diesem Fall also zum Beispiel, dass die Funktion onEnable zum Plugin mitdem Namen HalloWeltPlugin gehört. Wie weit man die Zeilen genau einrückt, isteine Geschmacksfrage, allerdings sollte man zumindest konsistent bleiben, also dieZeilen immer gleich weit einrücken. In diesem Buch werden wir jeweils vier Leerzeichenzur Einrückung verwenden.

In der dritten und letzten Zeile steht nun endlich, was das Plugin machen soll, nämlichden Text »Hallo Welt!« anzeigen.

3.3 plugin.ymlBevor du dein erstes Plugin testen kannst, benötigst du noch eine zweite Datei, diesogenannte plugin.yml. Diese besteht, wie du in Listing 3.2 sehen kannst, ebenfallsnur aus drei Zeilen.

Die plugin.yml gibt dem Server wichtige Informationen über dein Plugin, die er schonvor dessen Start benötigt. In der ersten Zeile wird mit dem Stichwort name der Name desPlugins festgelegt. Im Gegensatz zum Klassennamen kannst du deiner Kreativität hierfreien Lauf lassen, auch Leer- und Sonderzeichen können verwendet werden.

Wichtig wird der Klassenname aber wieder in der zweiten Zeile, dort muss dieser nämlichhinter dem Stichwort main eingetragen werden und zwar exakt so, wie er in der Dateiplugin.py steht, nur so weiß der Server später, wie er dein Plugin ausführen kann.

Zu guter Letzt kannst du noch eine Versionsnummer für dein Plugin angeben, hinter demStichwort version. Solltest du eines deiner Plugins später einmal verändern oder wei-terentwickeln, so kannst du – und andere, die es benutzen – mit der Versionsnummerleicht den Überblick behalten, ob eine Kopie deines Plugins schon auf dem neuestenStand ist oder noch nicht.

name: Hallo Welt-Pluginmain: HalloWeltPluginversion: 1.0

Listing 3.2: plugin.yml für das Hallo Welt!«-Plugin

MerkeJedes Plugin besteht aus mindestens zwei Dateien, der plugin.py und der plugin.yml.

123

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

3 Das erste Plugin

48

3.4 TestenNun wird es aber Zeit, dein erstes eigenes Plugin zu testen. Praktischerweise musst dudafür einfach nur den Server starten. Solltest du Bukkit benutzen, musst du also denBefehl java -jar craftbukkit-1.9.jar eingeben, benutzt du dagegen Spigot, solautet der Befehl java -jar spigot-1.9.jar. Der PPLoader durchsucht dann auto-matisch den plugins-Ordner nach Ordnern mit der Endung .py.dir und öffnet diedarin befindlichen Plugins.

Was du dann auf dem Bildschirm sehen kannst, wenn der Server alles geladen hat,kannst du in Abbildung 3.1 sehen. Besonders interessant ist dabei die drittletzteZeile, denn hier kannst du dein Plugin in Aktion sehen, die Meldung »Hallo Welt!«wird angezeigt. Zugegebenermaßen ist das noch nicht besonders spektakulär, aberaller Anfang ist ja bekanntlich schwer und du hast damit die ersten Schritte auf demWeg, ein Programmierer zu werden, gemacht. Mit jedem der folgenden Kapitel wirstdu neue Dinge lernen, die es dir ermöglichen werden, immer spannendere Plugins zuprogrammieren.

Abbildung 3.1: Ausgabe des »Hallo Welt«-Plugins nach dem Start

3.5 Fehler findenSollte beim Starten deines Servers nicht der in Abbildung 3.1 gezeigte Text angezeigtwerden, dann liegt das höchstwahrscheinlich daran, dass du in deinem Plugin einenTippfehler hast. Computer nehmen es ziemlich genau, ein einziges falsches Zeichenkann dazu führen, dass dein komplettes Plugin nicht mehr funktioniert. In den meistenFällen wird dir dann eine lange und kryptisch wirkende Fehlermeldung wie in Listing 3.3angezeigt.

[11:29:21] [Server thread/INFO]: [PPLoader] Loading Plugin hallowelt.py.dir[11:29:22] [Server thread/WARN]: org.bukkit.plugin.InvalidPluginException: SyntaxError: ("no viable alternative at input '\\n'", ('<iostream>', 3, 29, ' self.getLogger().info("Hallo Welt!)\n'))[11:29:22] [Server thread/WARN]: at org.cyberlis.pyloader.PythonPluginLoader.loadPlugin(PythonPluginLoader.java:244)

[11:29:22] [Server thread/WARN]: at org.cyberlis.pyloader.

PythonPluginLoader.loadPlugin(PythonPluginLoader.java:118)

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

3.5 Fehler finden

49

Auch wenn es auf den ersten Blick vielleicht nicht so wirkt, sind diese Fehlermeldungenoft sehr hilfreich und können dir dabei helfen, den Fehler schnell zu finden und zu behe-ben. Die wichtigen Information stecken in aller Regel in der ersten Zeile, im Beispielalso:

[11:29:22] [Server thread/WARN]: at org.cyberlis.pyloader.

PythonPluginLoader.loadPlugin(PythonPluginLoader.java:92)

[11:29:22] [Server thread/WARN]: at org.bukkit.plugin.

SimplePluginManager.loadPlugin(SimplePluginManager.java:329)

[11:29:22] [Server thread/WARN]: at org.cyberlis.pyloader.

PythonLoader.onLoad(PythonLoader.java:85)

[11:29:22] [Server thread/WARN]: at org.bukkit.craftbukkit.

v1_9_R1.CraftServer.loadPlugins(CraftServer.java:301)

[11:29:22] [Server thread/WARN]: at net.minecraft.server.

v1_9_R1.DedicatedServer.init(DedicatedServer.java:201)

[11:29:22] [Server thread/WARN]: at net.minecraft.server.

v1_9_R1.MinecraftServer.run(MinecraftServer.java:527)

[11:29:22] [Server thread/WARN]: at java.lang.Thread.run

(Unknown Source)

[11:29:22] [Server thread/WARN]: Caused by: SyntaxError:

("no viable alternative at input '\\n'", ('<iostream>', 3, 29,

' self.getLogger().info("Hallo Welt!)\n'))

[11:29:22] [Server thread/WARN]: at org.python.core.ParserFacade.

fixParseError(ParserFacade.java:95)

[11:29:22] [Server thread/WARN]: at org.python.core.ParserFacade.

parse(ParserFacade.java:190)

[11:29:22] [Server thread/WARN]: at org.python.core.Py.compile_flags

(Py.java:1956)

[11:29:22] [Server thread/WARN]: at org.python.util.PythonInterpreter.

execfile(PythonInterpreter.java:296)

[11:29:22] [Server thread/WARN]: at org.python.util.PythonInterpreter.

execfile(PythonInterpreter.java:291)

[11:29:22] [Server thread/WARN]: at org.cyberlis.pyloader.

PythonPluginLoader.loadPlugin(PythonPluginLoader.java:215)

[11:29:22] [Server thread/WARN]: ... 8 more

Listing 3.3: Fehlermeldung beim Laden des Plugins

[11:29:22] [Server thread/WARN]: org.bukkit.plugin.InvalidPluginException: SyntaxError: ("no viable alternative at input '\\n'", ('<iostream>', 3, 29, ' self.getLogger().info("Hallo Welt!)\n')).

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

3 Das erste Plugin

50

Hier wird dir nämlich genau angezeigt, wo sich der Fehler befindet. Im Beispiel befindetsich der Fehler in Zeile 3, diese wird auch gleich nochmal komplett mit ausgegeben undlautet self.getLogger().info("Hallo Welt!)\n. Über das \n am Ende solltest dudich nicht weiter wundern, das bedeutet nur, dass danach eine neue Zeile anfängt.Wenn du die Zeile aber genau mit Listing 3.1 vergleichst, fällt dir auf, das am Ende desTextes das Anführungszeichen fehlt, also "Hallo Welt! statt "Hallo Welt!". Fügst dudieses hinzu und startest den Server neu, dann wird das Plugin ohne Probleme geladen.

Natürlich können gerade längere Plugins auch mehr als einen Fehler enthalten, trotz-dem solltest du beim Beheben von Fehlern immer nach dem gleichen Muster vorgehen:Den Server starten, in der ersten Zeile der Fehlermeldung herausfinden, wo sich der Feh-ler befindet, diesen beheben, den Server neu starten. Diesen Vorgang wiederholst dueinfach solange, bis alle Fehler im Plugin behoben wurden.

3.6 EntdeckenEs wird sicher des Öfteren vorkommen, dass deine Plugins nicht gleich beim ersten Ver-such starten, das ist ganz normal und sollte dich nicht entmutigen. Selbst Profis schrei-ben selten ein Programm, das sofort auf Anhieb funktioniert, zu leicht passiert es, dassman ein Zeichen oder eine Einrückung vergisst.

Programmieren kann man nur lernen, indem man das Gelernte auch in der Praxis anwen-det, deshalb solltest du jedes Programm in diesem Buch auch gleich ausprobieren undnicht nur den Quellcode lesen. Außerdem solltest du immer neugierig bleiben und neueDinge ausprobieren. Was passiert zum Beispiel, wenn du den Text in Zeile 3 des Pluginsveränderst? Was passiert, wenn du die in Python so wichtige Einrückung weglässt?Wenn du dir solche Fragen stellst und ihnen nachgehst, wirst du noch schneller zu einemguten Programmierer werden.

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

293

IndexSymbole^ 88!= 84& 86< 84<= 84<> 84== 84> 84>= 84| 87

AAbstraktion 180addUnsafeEnchantment

207Algorithmus 35append 68arithmetischer Operator 60Array 69Attribut 180

BBefehl 29Bett 118

Data 118Binnenmajuskel siehe

CamelCaseBogen 210break 147Bukkit siehe CraftBukkitbukkit.yml 26

CCamelCase 58cd 19Chat 51Chat-Befehl 51

Chat-Kommando siehe Chat-Befehl

Cheat siehe Befehlclass 181Client 15commands 52Compiler 36contains 231CraftBukkit 15Crafting 203

DDeklaration 57Differenz 60dump 224

EEclipse 39Editor 39Eingabeaufforderung 16elif 101else 97Enderbogen 210Enderperle 210Endlosschleife 84EntityDamageBy-

EntityEvent 235Entweder-Oder-Operator

88Ereignis siehe EventEVA-Prinzip 57Event 158

EventPriority 159PlayerJoinEvent 158setCancelled 209

exists 224

FFackel 122

Data 122

false 84Fehler 48first 231Formatierung 138, 139for-Schleife 78Funktion 103

GgetLocation() 75getRelative 119getShooter 212getState 136getTargetBlock 146getter 192getWorld() 76getYaw 147global 145

HHandlungsvorschrift siehe

Algorithmus

Iif-Verzweigung 93

elif 101else 97schachteln 100

in 142index 141init-Funktion 181input 255Instanzen 180Inventar 231

Slot 231IP-Adresse 32isinstance 94, 212ItemStack 203

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

294

Index

JJava 16Jython 36, 38

KKlasse 180Klassenmethode 188Klassennamen 46Klassenvariable 182Kommentar 62Komodo Edit 39Konfigurationsdatei 213Konkatenation 61Konstante 71Koordinate 74Kreis 125Kugel 130

LLaufbedingung 83len 142Liste 68

hinzufügen 68löschen 69

Listener 157Log-Datei 23lower() 85

MMeta-Daten 207Methode 186Methode von Horn 126Methode von Metzger 126Midpoint-Algorithmus 126mkdirs 224Mod 15Modulo siehe Restwert

NNicht-Operator 88Notunterkunft 109noz 88

OOberklasse 194Objekt 180Objektorientierte Program-

mierung 179Oder-Operator 87öffentlich 191onCommand 55onDisable 224onEnable 47OOP siehe Objektorien-

tierte Programmierung

PParameter 104pass 52PATH-Variable 17pickle 224plugin.py 45plugin.yml 47Position 74Potenz 132pow siehe PotenzPPLoader 38print 258privat 191Produkt 60Programmcode siehe

QuellcodeProgrammiersprache 35ProjectileHitEvent 211PyCharm 39.py.dir 45Python 35, 253

QQuellcode 46Quotient 60

RRadius 125randint 246Rasterung 125

raw_input 255remove 69Restwert 60Rezept 203

ShapedRecipe 204ShapelessRecipe 203

Rückgabewert 104Runden 64

kaufmännisch 64

SSchild 133

Data 134hängend 133stehend 134Text 136

Schleife 78endlose 84for 78Kopf 79Laufbedingung 83Rumpf 79schachteln 90Variable 79while 83

Schleifenkopf 79Schleifenrumpf 79Schleifenvariable 79Schneeballschlacht 229Schriftfarbe 137self 182Server 15server.properties 23setAmount 231setCancelled 209setData 114setDisplayName 207setLine 136setter 192setType() 76setTypeIdAndData 122shuffle 258Skript 253Slot 231

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795

295

Index

sort 240Sourcecode siehe Quell-

codeSpeichern 213Spielmodus 229Spigot 15spigot.yml 28String 59

vergleichen 85Summe 60Syntax 78

Tteleport 212TextEdit 39Textformatierung 138true 84Tür 114

Data 114

UUmgebungsvariable 18Und-Operator 86Unterklasse 194upper() 85usage 53

VVanilla-Server 15Variable 57

global 144lokal 144

Vererbung 193Mehrfachvererbung

196mehrstufig 196

Vergleichsoperator 84Verzauberung 207Verzweigung 93

if 93

WWahrheitstafel 86Wahrheitswert 84Wertzuweisung 59while-Schleife 83

XXOR-Operator 88

ZZeichenkette siehe StringZufallszahl 246

© des Titels »Let’s Play. Programmieren lernen mit Python und Minecraft« (ISBN 9783958457959) 2017 by mitp Verlags GmbH & Co. KG, Frechen. Nähere Informationen unter: http://www.mitp.de/795