Morgen wird Minecraft sein zehnjähriges Jubiläum feiern. Anlässlich dieses Jubiläum kann nun die frühe Version 0.0.23a_01 (alias Minecraft Classic) im Browser gespielt werden. Die Version verfügt, wie damals, nur über den Kreativmodus. Mit insgesamt 32 Blöcken kann die Welt gestaltet werden. Auch die alten Bugs wurde unverändert übernommen. Das Spiel kann mit bis zu zehn Spielern gespielt werden.
Das ursprüngliche Minecraft im Browser
Allerdings sollte die Version als Demo, denn als vollständiges Spiel betrachtet werden. Es dient eher zur Auffrischung der Nostalgie und zur Feier von zehn Jahren Minecraft. Zu finden ist die Browser-Version unter classic.minecraft.net.
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.
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.
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.
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 = ";
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.