Let’s Play
Programmieren lernen mit Python und Minecraft: Plugins erstellen ohne Vorkenntnisse
    

1. Auflage 2017, Softcover
296 Seiten, Taschenbuch
ISBN 978-3-9584-5795-9

€ 24,99

Bei Amazon kaufenVerlagsseiteDownloads

Über das Buch

Du spielst schon lange Minecraft und denkst, du hast schon alles gesehen? Kennst du schon das Feuerschwert, den Enderbogen oder den Spielmodus »Schneeballschlacht«? Du willst auf Knopfdruck Türme, Mauern oder sogar ganze Häuser bauen? Vollautomatisch auf Geschehnisse in der Spielwelt reagieren? Mit eigenen Plugins kannst du all das und noch viel mehr entdecken und ganz nebenbei auch noch programmieren lernen.

Python ist für Programmiereinsteiger besonders leicht zu lernen. Daniel Braun zeigt dir, wie du mit Python und Bukkit oder Spigot Erweiterungen für Minecraft programmierst, sogenannte Plugins, die du dann zusammen mit deinen Freunden auf deinem eigenen Minecraft-Server ausprobieren kannst. Dafür sind keine Vorkenntnisse erforderlich, du lernst alles von Anfang an.

Errata

  • S. 266 (Kapitel A.6)
    Letzte Tabellenzeile, Spalte „Befehl“: x >= y.

Neue Minecraft Versionen (>1.15)

In neueren Minecraft-Versionen haben sich die Benennung einiger Materialen, sowie manche Befehle geändert. Das führt dazu, dass das Notunterkunft-Plugin in der abgedruckten Form mit neuen Minecraft-Versionen nicht mehr kompatibel ist. Folgender Quellcode funktioniert mit den neuen Minecraft-Versionen (nicht aber mit älteren):

from org.bukkit.entity import Player
from org.bukkit.block import BlockFace
from org.bukkit.block.data import BlockData
from org.bukkit.block.data import Bisected
from org.bukkit.block.data import Directional
from org.bukkit.block.data.type import Door
from org.bukkit.block.data.type import Bed


class NotunterkunftPlugin(PythonPlugin):
    def onEnable(self):
        pass

    def onCommand(self, sender, command, label, args):
        if isinstance(sender, Player):
            spieler = sender

            #quader aussen
            position = spieler.getLocation()
            position.setX(position.getX() + 1)
            NotunterkunftPlugin.quaderBauen(self, spieler, position, 4, 10, 10, bukkit.Material.BRICKS)

            #quader innen
            position = spieler.getLocation()
            position.setX(position.getX() + 2)
            position.setZ(position.getZ() + 1)
            NotunterkunftPlugin.quaderBauen(self, spieler, position, 3, 8, 8, bukkit.Material.AIR)

            #tuer
            position = spieler.getLocation()
            position.setX(position.getX() + 1)
            position.setZ(position.getZ() + 4)
            welt = spieler.getWorld()

            tuerUnten = welt.getBlockAt(position)
            tuerUnten.setType(bukkit.Material. OAK_DOOR)

            tuerUntenDaten = tuerUnten.getBlockData()
            tuerUntenDaten.setHalf(Bisected.Half.BOTTOM)
            tuerUntenDaten.setFacing(BlockFace.WEST)
            tuerUnten.setBlockData(tuerUntenDaten)

            position.setY(position.getY() + 1)
            tuerOben = welt.getBlockAt(position)
            tuerOben.setType(bukkit.Material.OAK_DOOR, False)

            tuerObenDaten = tuerOben.getBlockData()
            tuerObenDaten.setHalf(Bisected.Half.TOP)
            tuerObenDaten.setFacing(BlockFace.WEST)
            tuerOben.setBlockData(tuerObenDaten)

            #bett
            position = spieler.getLocation()
            position.setX(position.getX() + 8)
            position.setZ(position.getZ() + 4)

            bettFuss = welt.getBlockAt(position)
            bettFuss.setType(bukkit.Material.RED_BED)
            
            bettFussDaten = bettFuss.getBlockData()
            bettFussDaten.setPart(Bed.Part.FOOT)
            bettFussDaten.setFacing(BlockFace.EAST)
            bettFuss.setBlockData(bettFussDaten)

            bettKopf = bettFuss.getRelative(BlockFace.EAST)
            bettKopf.setType(bukkit.Material.RED_BED, False)
            
            bettKopfDaten = bettKopf.getBlockData()
            bettKopfDaten.setPart(Bed.Part.HEAD)
            bettKopfDaten.setFacing(BlockFace.EAST)
            bettKopf.setBlockData(bettKopfDaten)

            #fackel
            position = spieler.getLocation()
            position.setX(position.getX() + 9)
            position.setZ(position.getZ() + 4)
            position.setY(position.getY() + 2)

            fackel = welt.getBlockAt(position)
            fackel.setType(bukkit.Material.WALL_TORCH, False)
            
            fackelDaten = fackel.getBlockData()
            fackelDaten.setFacing(BlockFace.WEST)
            fackel.setBlockData(fackelDaten)

        else:
            self.getLogger().info("Dieser Befehl kann nur von Spielern ausgefuehrt werden!")

        return True

    def quaderBauen(self, spieler, position, hoehe, breite, tiefe, material):
        welt = spieler.getWorld()

        xStart = position.getX()
        yStart = position.getY()
        zStart = position.getZ()

        for x in range (0, tiefe):
            position.setX(xStart + x)
            for y in range (0, hoehe):
                position.setY(yStart + y)
                for z in range (0, breite):
                    position.setZ(zStart + z)
                    block = welt.getBlockAt(position)
                    block.setType(material)

Downloads