Wiki für prozedural generierte Inhalte

In einem gewöhnlichen Spiel, falls sowas überhaupt existiert, ist der entsprechende Inhalt im Spiel hinterlegt. Allerdings existieren auch Spiele welche den Inhalt erst beim Spielen des Spieles generieren. In den meisten Fällen kommen prozedurale Verfahren zum Einsatz. Beispiele für solche Spiele sind Elite, No Man’s Sky und auch Minecraft.

Die Procedural Content Generation Wiki

Wer als Entwickler solche Inhalte in ein Spiel integrieren möchte, der muss nicht bei Null anfangen, sondern kann sich im Procedural Content Generation Wiki mit entsprechenden Informationen versorgen. Dort finden sich Informationen zu Spielen, Algorithmen und vielem mehr rund um die prozedurale Generierung von Inhalten. Zu finden ist die Wiki unter pcg.wikidot.com.

Enderdrache in Minecraft per Befehl spawnen

Bis vor einigen Versionen konnte der Enderdrache in Minecraft mittels des Befehls:

/summon ender_dragon

an beliebiger Stelle im Spiel gespawnt werden. Dies funktioniert immer noch, allerdings wird nur noch ein harmloser Enderdrache gespawnt, welcher sich nicht mehr von der Stelle bewegt.

Der Enderdrache im Ende

Damit ein funktionsfähiger Enderdrache gespawt werden kann, muss stattdessen mit dem Befehl:

/summon ender_dragon ~ ~ ~ {DragonPhase:0}

gearbeitet werden. Damit wird ein Enderdrachen erzeugt, welcher sich wie ein normaler Enderdrache verhält. Allerdings erhält er im Ende keine Bossleiste. Diese Bossleiste wird durch Eigenschaften im Ende verwaltet, welche nichts mit dem Enderdrachen als solchen zu tun haben. Per Befehl kann der Enderdrache mittels:

/kill @e[type=ender_dragon]

auch wieder aus dem Spiel entfernt werden. Das ist unter anderem dann praktisch, wenn der Drache in der Oberwelt gespawnt wurde.

Minecraft-Backup partiell einspielen

Ein Backup ist immer eine gute Idee. Vor allem dann, wenn es das Backup eines Minecraft-Servers ist. Immerhin, kann es dort durchaus einmal zu Unfällen kommen. In einem solchen Fall ist es sinnvoll das vorhandene Backup einzuspielen.

Unfälle passieren; ein Backup sichert so etwas ab

Natürlich soll in den meisten Fällen nicht ein komplettes Backup, sondern nur der betroffene Teil neu eingespielt werden. In diesem Fall sollte allerdings klar sein, wo sich die betroffenen Teile befinden. Die einzelnen Chunks der Minecraft-Welt werden in sogenannten Region-Dateien zusammengefasst. Diese Region-Dateien finden sich im Ordner region, in den Minecraft-Daten.

Mit den Coordinate Tools kann anhand der Koordinaten die entsprechende Region ermittelt werden

Um herauszufinden, welche Regionen neu eingespielt werden müssen, können die Coordinate-Tools des Entwicklers Dinnerbone genutzt werden. Dazu müssen die Koordinaten der beschädigten Region über den Debug-Screen (F3) im Spiel ermittelt werden. Diese Koordinaten werden in die Coordinate-Tools eingegeben. In der Sektion Region Information finden sich anschließend der Dateiname der entsprechenden Region. Diese Datei kann dann vom Backup in den region-Ordner eingespielt werden. Der Minecraft-Server sollte vor dem Einspielen des Backups heruntergefahren und anschließend wieder hochgefahren werden.

Java-Bibliothek für das Minecraft-Protokoll

Wenn sich der Minecraft-Client mit dem entsprechenden Server verbindet, so kommunizieren diese über ein festgelegtes Protokoll. Mit einer eigenen Implementation dieses Protokolls ist es möglich sich mit einem Minecraft-Server zu verbinden und entsprechende Aktionen durchzuführen. Zum Beispiel könnte diese Möglichkeit genutzt werden um einen Bot für Minecraft zu schreiben. Eine solche Implementation des Minecraft-Protokolls ist die Java-Bibliothek MCProtocolLib von Steven Smith.

Central City auf meinem eigenen Minecraft-Server

Ein minimales Beispiel, für den Login auf dem Server (basierend auf einem Unit-Test der Bibliothek), mit besagter Bibliothek könnte dabei wie folgt aussehen:

public class SimpleBot {

    private static final String HOST = "example.org";
    private static final int PORT = 25565;
    private static final Proxy PROXY = Proxy.NO_PROXY;
    private static final Proxy AUTH_PROXY = Proxy.NO_PROXY;
    private static final String USERNAME = "user@example.org;
    private static final String PASSWORD = "password";

    public static void main(String[] args) throws FileNotFoundException, RequestException {

        MinecraftProtocol protocol = new MinecraftProtocol(USERNAME, PASSWORD);
        Client client = new Client(HOST, PORT, protocol, new TcpSessionFactory(PROXY));
        client.getSession().setFlag(MinecraftConstants.AUTH_PROXY_KEY, AUTH_PROXY);

        client.getSession().addListener(new SessionAdapter() {
            @Override
            public void packetReceived(PacketReceivedEvent event) {
                if(event.getPacket() instanceof ServerJoinGamePacket) {
                    event.getSession().send(new ClientChatPacket("Hello, World!"));
                } else if(event.getPacket() instanceof ServerChatPacket) {
                    Message message = event.getPacket().getMessage();
                    System.out.println("Received Message: " + message.getFullText());
                    if(message instanceof TranslationMessage) {
                        System.out.println("Received Translation Components: " + Arrays.toString(((TranslationMessage) message).getTranslationParams()));
                    }

                    event.getSession().disconnect("Finished");
                }
            }

            @Override
            public void disconnected(DisconnectedEvent event) {
                System.out.println("Disconnected: " + Message.fromString(event.getReason()).getFullText());
                if(event.getCause() != null) {
                    event.getCause().printStackTrace();
                }
            }
        });

        client.getSession().connect();
    }
}

In diesem Beispiel wird sich mit dem Server verbunden und nach erfolgreicher Verbindung eine Chatnachricht gesendet. Danach loggt sich der Bot wieder aus. Der Quelltext der Bibliothek ist auf GitHub zu finden. Das Projekt ist unter der MIT-Lizenz lizenziert und damit freie Software.

Freier Bildbetrachter für Windows (und andere Systeme)

Der integrierte Bildbetrachter unter Windows 10 ist nicht das Gelbe vom Ei; so dass ich mich nach einer Alternative umgeschaut habe. Schlussendlich gelandet bin ich beim freien Bildbetrachter Nomacs. Nomacs unterstützt gängige Dateiformate wie PNG, JPEG, TIFF, BMP und viele andere Formate. Neben den Funktionen zur Bildbetrachtung, verfügt Nomacs über einige Funktionalität zur Bildbearbeitung. Diese umfasst unter anderem das Beschneiden von Bildern sowie die Fähigkeit die Größe von Bildern anzupassen oder Bilder zu rotieren. Die meisten alltäglichen Aufgaben, im Zusammenhang mit Bildern, sollten sich mittels Nomacs problemlos erledigen lassen. Eine etwas ungewöhnlichere Funktionalität von Nomacs ist die Synchronisation mehrerer Instanzen des Bildbetrachters.

Nomacs in Aktion

Neben der Windows-Version ist Nomacs für unterschiedliche Linux-Distributionen (z.B. Debian, Arch Linux oder Fedora), macOS und sogar OS2 erhältlich. Lizenziert ist der Quelltext unter der GPL in Version 2; bezogen werden kann er über GitHub. Die Webseite des Projektes ist auf nomacs.org zu finden.