Minecraft-Mobs in bestimmten Bereich entfernen

Für bestimmte Redstone-Schaltungen oder als letztes administratives Mittel ist man manchmal auf der Suche nach einem Minecraft-Kommando um alle Mobs in einem bestimmten Umkreis zu entfernen. Realisiert wird dies über das kill-Kommando:

/kill @e[type=!player,r=100]

Das Kommando entfernt dabei alle Entites außer solche vom Typ Player. Ändert man den Typ z.B. in creeper kann der Befehl auf bestimmte Mobs begrenzt werden.

Absturz des Minecraft-Servers wegen zu kurzer Tickzeit

In Minecraft kann man viele Dinge mit seiner Zeit anstellen. Je nach Tätigkeit und Projekt kann dies den Minecraft-Server in unterschiedlichem Maße in Anspruch nehmen. Größere TNT-Explosionen können den Server dabei durchaus an seine Leistungsgrenze bringen. Manchmal beendet sich der Minecraft-Server ohne das der Server entsprechend ausgelastet ist. Im Log sieht das ganze dann wie folgt aus:

[21:48:23] [Server Watchdog/FATAL]: A single server tick took 60,00 seconds (should be max 0,05)
[21:48:23] [Server Watchdog/FATAL]: Considering it to be crashed, server will forcibly shutdown.

Hintergrund für diese Meldung ist das der Server pro berechenbarer Zeiteinheit (eben ein Tick) Operationen ausführt. Wenn dieser Tick länger als eine bestimmte Zeit dauert, wird dies vom eingebauten Watchdog erkannt und der Server beendet; der Watchdog denkt das sich der Server aufgehangen hat und beendet ihn aus diesem Grund. Die Lösung für dieses Problem ist es nun die Zeit die ein Tick maximal dauern darf zu verlängern. Eingestellt werden kann dies in der server.properties-Datei in der Eigenschaft max-tick-time:

max-tick-time=600000

Der Standardwert ist hier 600000 und kann auf einen beliebigen Wert eingestellt werden. Nutzt man den Wert -1 so wird die Prüfung des Watchdog vollständig deaktiviert. Wenn dieser Wert auf einen ausreichend hohen Wert eingestellt wurde und der Tick schlussendlich vollständig bearbeitet werden kann sieht das im Log wie folgt aus:

[22:09:00] [Server thread/WARN]: Can't keep up! Did the system time change, or is the server overloaded? Running 222029ms behind, skipping 4440 tick(s)

Alternativ kann in bestimmten Szenarien, wie der Zündung von einer zu großen Menge TNT, ein entsprechendes Kommando zur Entfernung der gezündeten TNT-Blöcke eingesetzt werden:

/kill @e[type=PrimedTnt,r=100]

Mit Hilfe dieses Kommando ist es auch möglich Kommandoblöcke zum Schutz bestimmter Gebiete zu nutzen. Ist der Kommandoblock im Repeat-Modus kann damit verhindert werden das TNT in dem definierten Bereich gezündet werden kann.

Kittens Game

Das Land der Browsergames verfügt über eine Menge Einwohner. Darunter gibt es einige Perlen zu entdecken wie z.B. Candy Box. Eine weitere Perle im Land der Browsergames ist Kittens Game. Bei dem Spiel geht es darum Stück für Stück eine Katzenzivilisation aufzubauen. Was am Anfang simpel wirkt, weitet sich im Laufe des Spieles zu einer komplexen Simulation aus, welche das Spiel immer interessanter macht.

Kittens Game

Auf grafischen Schnickschnack wird dabei verzichtet, so das die „Textwüste“ die Fantasie anregt, wie bei alten Textadventures. Das Spiel beginnt in der Steinzeit, führt den Spieler Stück für Stück in das Mittelalter, bis man schließlich nach etlichen Spielstunden in der Neuzeit ankommt. Dort betreibt man dann ein Weltraumprogramm und verlässt den Katzenplaneten und erforscht die Weite des Alls. Der Quelltext ist auf BitBucket zu finden, allerdings ist er nicht unter einer freien Lizenz verfügbar. Stattdessen nutzt es die selbst verfasste WET PAWS LICENSE:

Kitten game is licensed under a WET PAWS LICENSE.

You are free to make any changes in the code for personal or educational purpose. 
Using the game code for commercial gain or creation of derivative works is not permitted.

Hosting a translated version of the game is permitted as long as the game retains all links.
And for god's sake please don't make huge idiotic red logos of your website. (Yes, u77 folks, I am talking about you).

Technisch basiert das Spiel auf HTML5 und dem Dojo Toolkit. Neben der Variante im Browser existieren mittlerweile Versionen für iOS und Android.

Kittens Game
Preis: 2,99 €
Kittens Game
Preis: 2,99 €

Die App-Versionen sind kompatibel zu dem Spielstand des Browsergames, so das man nahtlos auf den mobilen Geräten weiterspielen kann. Die Spielstände können hierfür exportiert werden. In den neueren Versionen von Kittens Game ist der Im- und Export mittels Dropbox möglich, so dass die Übernahme eines Spielstandes noch einfacher ist.

Bereiche in Minecraft über größere Distanzen klonen

In Minecraft gibt es eine Reihe von Kommandobefehlen, wie z.B. das clone-Kommando. Mit diesem Kommando ist es möglich einen bestimmten Bereich von A nach B zu kopieren. Allerdings gibt es hier einige Beschränkungen. Würde man den folgenden Befehl eingeben:

/clone 87 76 -74 87 76 -74 9000 100 9000

so würde man einen Block in eine sehr entfernte Region kopieren. Der Server antwortet darauf mit einem:

Cannot access blocks outside of the world

Der Hintergrund dieser Fehlermeldung ist, das der betroffende Bereiche nicht geladen wurde. Um den Spieler herum werden einige Chunks vom Festspeicher in den Arbeitsspeicher des Servers geladen. Diese Bereiche können mit dem clone-Kommando bearbeitet werden. Mit einem Trick kann man auch in entfernte Bereiche klonen. Dazu benötigt man einen zweiten Spieler, welcher sich an den Zielkoordinaten aufhält. Dadurch sind die Chunks des Zielbereiches ebenfalls im Arbeitsspeicher des Servers vorhanden, so das die clone-Operation erfolgreich ausgeführt werden. So bequem wie mit dem WorldEdit-Plugin ist das zwar nicht, aber dafür funktioniert es mit dem Vanilla-Server von Minecraft.

Enums unter JavaScript

Enums gibt es unter JavaScript nicht. Damit könnte der Artikel an dieser Stelle vorbei sein. Allerdings gibt es viele Wege um in JavaScript ein Verhalten oder die Strukturen zu simulieren, die am Ende gewünscht sind. Bei einem Enum würde dies so aussehen:

var DayOfTheWeek = {
  Monday: 1,
  Tuesday: 2,
  Wednesday: 3,
  Thursday: 4,
  Friday: 5,
  Saturday: 6,
  Sunday: 7
};

Genutzt wird das ganze dann so:

var dayOfTheWeek = DayOfTheWeek.Thursday;

Wer mehr über die Hintergründe rund um Enums unter JavaScript erfahren möchte dem sei der ausgezeichnete Blogbeitrag Enums in Javascript empfohlen.