• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!
  • Dies ist ein moderiertes Forum. Dein Beitrag ist für dich und andere erst sichtbar, wenn er von einem Teammitglied moderiert wurde! Wird dein Beitrag abgelehnt erhältst du eine Meldung. Bitte erstelle so lange keine neuen Beiträge! Die Freischaltung wird auch nicht durch Nachfragen bei einem Teammitglied beschleunigt.

Plugins programmieren in Python (Für die, die niemals Java schreiben können)

jhelbling

Minecrafter
Registriert
12 September 2021
Beiträge
2
Diamanten
152
Python ist die einfachste Programmiersprache überhaupt. Warum Java lernen wenn man Minecraft-Plugins auch in Python schreiben kann? WARUM?! Lest weiter unten die Antwort von JOO200 in diesem Beitrag ^^

Voraussetzungen:
  • Du kannst wirklich nur in Python programmieren!!!
Nicht geeignet für:
  • Grössere Server und die, die Java lernen können!!!

Konfiguration
Um den Server auszuführen benötigen wir Java:

Code:
sudo apt install openjdk-16-jdk

Danach erstellt man ein Verzeichnis für den Server:
Code:
mkdir ~/minecraft-server
cd ~/minecraft-server

Je nachdem welche Minecraft-Version man benutzt, lädt man den Bukkit-Server, bei unserem Beispiel die Version 1.17.1 auf https://getbukkit.org herunter und kopiert die craftbukkit-1.17.1.jar in das vorher erstellte Verzeichnis ~/minecraft-server.

Vor der erstausführung muss man eine Datei mit dem Namen ''eula.txt'' erstellen und folgender Inhalt reinschreiben:
Code:
eula=true

Danach muss man den pploader1.2.0 und jython-standalone herunterladen und extrahieren:
Code:
mkdir plugins lib
wget https://www.daniel-braun.com/wp-content/uploads/2021/03/pploader1.2.0.zip
unzip -x pploader1.2.0.zip -d plugins
wget http://search.maven.org/remotecontent?filepath=org/python/jython-standalone/2.7.0/jython-standalone-2.7.0.jar -O lib/jython.jar

Jetzt kann man den Server mit folgendem Befehl starten:
Code:
java -jar craftbukkit-1.17.1.jar
Die erstausführung dauert etwas da die Welten erstellt werden.

Hallo Welt!
Wir starten mit einem klassischen "Hallo Welt!".
Dazu geht man in das Verzeichnis ~/minecraft-server/plugins und erstellt einen Ordner mit Endung .py.dir
Code:
cd ~/minecraft-server/plugins
mkdir hallowelt.py.dir
cd hallowelt.py.dir

Ein Python-Plugin benötigt mindestens 2 Dateien:
  • plugin.py
  • plugin.yml

plugin.py:
plugin.py:
class hallowelt(PythonPlugin):
    def onCommand(self, sender, command, label, args):
        sender.sendMessage("Hallo Welt!")
        return True

plugin.yml:
plugin.yml:
name: hallowelt
main: hallowelt
version: 1.0
commands:
    hallowelt:
        usage: /hallowelt
        description: Hallo Welt ausgeben

Um dem Spieler der das Kommando /hallowelt ausführt einen Gold-Block zu geben erweitern wir unsern Code:
plugin.py:
from org.bukkit.inventory import ItemStack

class hallowelt(PythonPlugin):
    def onCommand(self, sender, command, label, args):
        sender.sendMessage("Hallo Welt!")
        sender.getInventory().addItem(ItemStack(bukkit.Material.GOLD_BLOCK,1))
        return True

Um alle verfügbaren Materialien zu sehen besucht man:
https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html

Events
Es gibt eine Menge an Events. Zum Beispiel kann man ein Event ausführen wenn jemand Schaden durch Schüsse erleidet oder angegriffen wird:
plugin.py:
from org.bukkit.event import EventPriority
from org.bukkit.event.entity import EntityDamageByEntityEvent
from org.bukkit.event.entity.EntityDamageEvent import DamageCause

class halloevent(PythonListener):
    @PythonEventHandler(EntityDamageByEntityEvent, EventPriority.NORMAL)
    def onEvent(self, event):
        if event.getCause() == DamageCause.PROJECTILE:
            opfer = event.getEntity().getName()
            event.getDamager().sendMessage("Du hast {} angeschossen!".format(opfer))
        elif event.getCause() == DamageCause.ENTITY_ATTACK:
            opfer = event.getEntity().getName()
            event.getDamager().sendMessage("Du hast {} angegriffen!".format(opfer))

class hallowelt(PythonPlugin):
    def onEnable(self):
        pm = self.getServer().getPluginManager()
        lst = halloevent()
        pm.registerEvents(lst, self)

Für weitere Schadtypen: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/entity/EntityDamageEvent.DamageCause.html

Für weitere Events: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/class-use/Event.html
 
Zuletzt bearbeitet:

JOO200

Braumeister
Registriert
18 Dezember 2016
Beiträge
439
Diamanten
229
Python ist die einfachste Programmiersprache überhaupt. Warum Java lernen wenn man Minecraft-Plugins auch in Python schreiben kann?
Da würde ich gerne einmal wider sprechen. Denn wenn man wirklich Python programmieren kann, ist der Umstieg auf Java auch kein großer Schritt. Und während für den einen Python eine einfache Sprache ist, ist es für den anderen chaotisch, da nicht typensicher und man auf jedes Leerzeichen aufpassen muss.

Und tatsächlich gibt es einen ganz guten Grund, warum man sein Plugin nicht in Python schreiben sollte: Der Overhead, der durch jython und den Python Loader entsteht ist das eine, das andere ist die Abhängigkeit zu irgendeinem anderen Plugin und einer Erweiterung, die man gar nicht braucht, wenn man sich doch die Zeit für Java nimmt.

Nicht zuletzt kann man durch eine gute Java IDE (z.B. IntelliJ) durchaus schneller programmieren, da man die Vervollständigungen von Methoden, Klassen und Attributen hat und nicht mühsam javadocs oder Java Sourcecode durchsuchen muss.

Verstehe mich bitte nicht falsch, Tutorials sind etwas feines und es ist toll, wenn Einsteiger einen Weg in die komplexe Welt des Programmierens finden. Allerdings sehe ich gerade bei einer solchen Python Variante zu viele Probleme und zu wenig Vorteile gegenüber einem Java Plugin.

PS: Craftbukkit ist ja sowas von 2015. Wenn du schon nicht die BuildTools von Spigot nutzen möchtest, um Spigot zu nutzen, nimm doch wenigstens Paper.
 

jhelbling

Minecrafter
Registriert
12 September 2021
Beiträge
2
Diamanten
152
Da würde ich gerne einmal wider sprechen. Denn wenn man wirklich Python programmieren kann, ist der Umstieg auf Java auch kein großer Schritt. Und während für den einen Python eine einfache Sprache ist, ist es für den anderen chaotisch, da nicht typensicher und man auf jedes Leerzeichen aufpassen muss.

Und tatsächlich gibt es einen ganz guten Grund, warum man sein Plugin nicht in Python schreiben sollte: Der Overhead, der durch jython und den Python Loader entsteht ist das eine, das andere ist die Abhängigkeit zu irgendeinem anderen Plugin und einer Erweiterung, die man gar nicht braucht, wenn man sich doch die Zeit für Java nimmt.

Nicht zuletzt kann man durch eine gute Java IDE (z.B. IntelliJ) durchaus schneller programmieren, da man die Vervollständigungen von Methoden, Klassen und Attributen hat und nicht mühsam javadocs oder Java Sourcecode durchsuchen muss.

Verstehe mich bitte nicht falsch, Tutorials sind etwas feines und es ist toll, wenn Einsteiger einen Weg in die komplexe Welt des Programmierens finden. Allerdings sehe ich gerade bei einer solchen Python Variante zu viele Probleme und zu wenig Vorteile gegenüber einem Java Plugin.

PS: Craftbukkit ist ja sowas von 2015. Wenn du schon nicht die BuildTools von Spigot nutzen möchtest, um Spigot zu nutzen, nimm doch wenigstens Paper.
Hört auf ihn xD Benutzt Java wenn möglich, ausser ihr könnt nur Python ^^
 
Zuletzt bearbeitet:
Oben