Minecraft Wiki
Registrieren
Advertisement
Chunk

Ein Chunk

Ein Chunk (von engl. Stück) ist ein 16×16 Blöcke großer und 256 Blöcke hoher Teilbereich einer Minecraft-Welt. In einem solchen Chunk werden alle Daten gespeichert, die für diesen Abschnitt der Welt relevant sind. Sowohl die aktuell geladene Spielwelt als auch die auf dem Speichermedium gesicherte Spielwelt werden als Chunks verwaltet.

Die Chunkdaten enthalten alle Blöcke, Biom-Informationen, Blockobjektdaten (z.B. Truheninhalte) und Objektdaten (Kreaturen, Fahrzeuge etc.) in einem Chunk.

Man kann sich die Chunkgrenzen mit F3+G anzeigen lassen, Details siehe Debug-Bildschirm#Weitere Debug-Tasten.

Geladene und sichtbare Chunks

Das Speichern und Laden von Daten kostet Zeit und verlangsamt das Spiel. Würde man zur Spielbeschleunigung die gesamte Welt auf einmal im Hauptspeicher halten, wäre der Hauptspeicherbedarf (RAM) zu groß und das Laden beim Start des Spiels und Speichern beim Beenden würde viel zu lange dauern. Würde man stattdessen jeden Block einzeln speichern, würde das Spiel nicht mehr flüssig ablaufen, sondern ständig ruckeln. Daher wurde die Lösung gefunden, die Welt chunkweise zu speichern und zu laden, wobei immer 32×32 Chunks in einer gemeinsamen Regiondatei enthalten sind (dies wurde im Region Format eingeführt und bislang so beibehalten).

Beim Betreten des Spiels werden der Chunk, in dem sich der Spieler befindet, und die ihn umgebenden 8 Chunks in alle Richtungen geladen. Das sind (8 + 1 + 8)2 = 289 Chunks. Sobald sich der Spieler Richtung Horizont bewegt und dabei eine Chunkgrenze überschreitet, werden die hinter ihm liegenden Chunks außerhalb des Bereiches gespeichert und der vor ihm liegende Bereich mit neuen Chunks aufgefüllt. Sollten dafür noch keine Chunks existieren, werden sie generiert, was etwas länger dauert, als sie einfach nur zu laden.

Im Menü/Optionen/Grafikeinstellungen kann man die Sichtweite von 2 bis 16 oder auf manchen Rechnern sogar bis 32 Chunks einstellen. Bei der Einstellung "2" sind 2 Chunks in alle Richtungen um den Spieler sichtbar, also (2 + 1 + 2)2 = 25 Chunks.

Geladen sind jedoch immer mindestens 8 Chunks in alle Richtungen. Bei größeren Sichtweiten sind entsprechend mehr Chunks geladen.

Das Laden und Entladen der Chunks geschieht allerdings nicht sofort, sondern zeitverzögert. Daher muss man bei Chunk-Experimenten immer lange genug warten, bis alle Chunks richtig geladen und entladen sind, sonst erhält man falsche Ergebnisse.

Blockupdates

Blockupdates finden nur innerhalb der Sichtweite statt.

Dies kann man nachweisen, indem man in jeweils 16 Blöcken Abstand z. B. ein Tropenholz mit Kakaopflanzen aufstellt und dann zum Ausgangspunkt zurückkehrt. Das Pflanzenwachstum geschieht durch zufällige Blockupdates. Nach genügend langer Wartezeit prüft man nach, bis in welche Entfernung Blockupdates stattgefunden haben, d. h. wo die Kakaopflanzen voll ausgewachsen sind.

Bei einer Sichtweite von 2 Chunks gibt es Blockupdates nur in den angrenzenden 2 Chunks, obwohl der Ladebereich 8 Chunks beträgt. Bei einer Sichtweite von 16 Chunks gibt es Blockupdates im gesamten Ladebereich von 16 Chunks.

Objektbewegungen

Objekte bewegen sich nur in geladenen Chunks, aber nicht in den Randbereichen. Nähern sie sich der Grenze des geladenen Bereichs bis auf 2 Chunks, bleiben sie stehen.

Das kann man mit einer Lore nachweisen, die man auf ein mit Antriebsschienen versorgtes Gleis setzt, das in jedem Chunk eine Sensorschiene hat, die einen Kolben auslöst, der einen Block verschiebt. Schickt man die Lore los, wartet eine angemessene Zeit und zerstört sie dann aus der Ferne mit dem Befehl /kill @e[type=minecart], kann man anhand der verschobenen Blöcke nachprüfen, wie weit sie gefahren ist.

Bei einer Sichtweite von 2 bis 8 Chunks sind es immer 6 Chunks. Bei einer größeren Sichtweite sind es (Sichtweite - 2) Chunks. Ein Güterfernverkehr über größere Strecken ohne Spielerbegleitung ist somit nicht möglich.

Drops sind auch Objekte. Man kann in jedem Chunk einen Block droppen, zum Ausgangspunkt zurückkehren und nach 5 Minuten prüfen, in welchen Chunks die Drops verschwunden sind. Das Ergebnis ist das gleiche wie bei der Lore.

Befehle

Befehle können nur auf geladene Chunks wirken.

Wendet man den Befehl /setblock an und setzt einen Block bei ~, ~16, ~32, ~48 etc., erhält man, sobald man den geladenen Bereich überschreitet, die Meldung: "Kann Block nicht außerhalb der geladenen Welt platzieren".

Das kann man nicht nur mit Blöcken, sondern auch mit Objekten testen. Platziert man z. B. in jedem Chunk ein Huhn, tötet der Befehl /kill @e[type=chicken] bei einer Sichtweite bis 8 Chunks alle Hühner in 8 Chunks Entfernung. Weiter entfernte Hühner bleiben am Leben. Bei größerer Sichtweite sind entsprechend mehr Chunks geladen und durch Befehle erreichbar.

Spawning

Das Spawnen von Monstern geschieht immer in einem Bereich von 8 Chunks Entfernung (siehe Spawn#Der Spawn-Bereich). Die Sichtweite spielt dabei keine Rolle.

Redstone-Signale

Redstone-Signale haben eine Besonderheit: Sie werden auch in Chunks weitergeleitet, die außerhalb des geladenen Bereichs liegen.

Um dies zu prüfen, kann man ein immer wieder verstärktes Redstone-Kabel beliebig weit verlegen und in jedem Chunk an einen Kolben anschließen, vor den man einen Block legt. Dann kehrt man zum Ausgangspunkt zurück, aktiviert das Signal mit einem Hebel, wartet einen Moment und deaktiviert es wieder. Dann kann man prüfen, wie weit das Signal geleitet wurde und stellt fest, dass es mehr als 32 Chunks sind (größere Entfernungen wurden bisher nicht getestet). Das kann nur funktionieren, wenn ein Chunk nachgeladen wird, sobald ein aktives Redstone-Signal hinein läuft.

Allerdings zählt ein nachgeladener Chunk nicht zum Bereich der geladenen Chunks und ist vom Ausgangspunkt aus weiterhin weder durch Befehle noch durch Objekte erreichbar.

Anders sieht es mit an dieses Kabel angeschlossenen Befehlsblöcken aus. Mit einem durchgehenden Kabel kann man auch einen Befehlsblock in weiter Entfernung aktivieren. Aufgrund der Länge des Kabels ist eine entsprechende Signalverzögerung zu beobachten.

Ebenso läuft ein Taktgeber in einem nachgeladenen Chunk nur, solange das Signal vom Ausgangspunkt in diesen Chunk hineinläuft. Sobald es beendet wird, wird der Chunk wieder entladen und der Taktgeber stoppt.

Spezielle Chunks

Ewige Chunks

In der Oberwelt sind der Chunk mit dem Spawnbereich-Mittelpunkt und die umliegenden Chunks in einem Radius bis zu 8 Chunks in gewisser Weise ewig geladen, egal wie weit man sich von ihnen entfernt. Dort platzierte Flüssigkeiten fließen weiter, Feuer breitet sich aus und herumliegende Gegenstände verschwinden. Andererseits verhalten sich diese Chunks in Bezug auf gerade entfernte Flüssigkeiten, ausgehendes Feuer sowie Zufällige Block Ticks wie ungeladene Chunks.

Im Einzelspielermodus gilt das, solange der Spieler irgendwo in der Oberwelt ist. Wechselt er die Dimension oder verlässt er das Spiel, wird auch dieser Chunk entladen.

Schleim-Spawn-Chunks

Schleime spawnen unterhalb Ebene 40 in zufällig ausgewählten Schleim-Spawn-Chunks. Die Wahrscheinlichkeit, dass ein Chunk ein spezieller Schleim-Spawn-Chunk ist, beträgt 10 %. Dazu wird für jeden neu generierten Chunk mittels einer Pseudo-Zufallsfunktion in Abhängigkeit vom Startwert ein für alle Mal festgelegt, ob dies ein Schleim-Spawn-Chunk ist oder nicht:

Random rnd = new Random(seed +
                        (long) (xPosition * xPosition * 0x4c1906) +
                        (long) (xPosition * 0x5ac0db) + 
                        (long) (zPosition * zPosition) * 0x4307a7L +
                        (long) (zPosition * 0x5f24f) ^ 0x3ad8025f);
return rnd.nextInt(10) == 0;

Die Funktion ermittelt eine Zufallszahl von 0 bis 9, indem sie auf auf die Chunk-Koordinaten und den Startwert der Welt zurückgreift. Ist diese Zahl eine 0, handelt es sich um einen Schleim-Spawn-Chunk. Chunk-Koordinaten werden übrigens gebildet, indem eine Block-Koordinate durch 16 geteilt und dann abgerundet wird.

Im Pilzland gibt es keine Schleim-Spawn-Chunks.

Mehrspielermodus

Im Mehrspielermodus hält der Server die Chunkbereiche um jeden Spieler herum in seinem Hauptspeicher. Je mehr Spieler auf der Welt verteilt sind, desto größer ist die Menge an geladenen Chunks. Jeder Spieler hält die Welt um sich herum in Bewegung, d. h. in allen geladenen Chunks berechnet der Server die Blockupdates, Objektbewegungen, Redstone-Signale etc.

Daher muss ein Server je nach Spielermenge mit einem entsprechend großen Hauptspeicher ausgestattet sein.

Erst wenn sich sämtliche Spieler von einem bestimmten Chunk entfernen, wird sein momentaner Zustand eingefroren und in den Chunkdaten gespeichert.

Im Mehrspielermodus ist man üblicherweise über eine Datenfernverbindung wie das Internet mit dem Server verbunden. Für ein flüssiges Spiel sollte dabei die übertragene Datenmenge nicht zu groß sein. Daher begrenzen manche Server die Übertragungsmenge auf beispielsweise 8 Chunks in jede Richtung. Auch wenn man eine größere Sichtweite einstellt, kann man dann nicht weiter als 8 Chunks sehen.

Der zentrale Oberwelt-Chunk ist im Mehrspielermodus immer geladen, solange der Server läuft, also auch wenn kein Spieler in der Oberwelt ist und sogar, wenn kein Spieler im Spiel ist. Dies kann man testen, indem man einen Kolben an einen langsamen Taktgeber anschließt und vor dem Kolben eine Sandsäule aufstellt, sodass der Kolben den Sand Block für Block in ein bodenloses Loch schiebt.

Chunkfehler

Wenn es durch einen Bug zu Beschädigungen eines Chunks kommt und die Welt nicht mehr geladen werden kann, hat man nur die Möglichkeit, von außen einzugreifen. Wenn der beschädigte Chunk bekannt ist, kann man versuchen, ihn mit einem Editor wie MCEditzu löschen. Das Spiel wird den fehlenden Chunk dann neu generieren, sobald er geladen wird. Der Chunk wird dabei wieder im Ursprungszustand erzeugt. Alle auf diesem Chunk vom Spieler gemachten Veränderungen sind nicht mehr vorhanden.

Chunk-error

Ein Chunkfehler

Im Mehrspielermodus entstehen manchmal Anzeigefehler durch Chunks, die fehlerhaft oder gar nicht vom Server zum Client übertragen wurden. Dort sieht man dann ein 16×16 großes Loch, das nicht betreten werden kann. Um das zu beheben, reicht es normalerweise F3 + A zu drücken um alle Chunks neu zu laden, oder den Server zu verlassen und erneut zu verbinden.

Geschichte

In diesem Blogeintrag vom 23. Februar 2010 erklärt Notch, warum er als Chunkgröße 16×16 Blöcke gewählt hat.

Versionsgeschichte der Java Edition
Infdev 0.33
  • Die Entwicklung grenzenloser Welten beginnt, die Spielstände dieser Welten werden im Alpha Level Format gespeichert, das erstmalig Chunks verwendet
Beta 1.3
  • Das neue Region Format kann die Chunkdateien deutlich schneller speichern und löst das Alpha Level Format ab
Vollversion 1.2 (12w07a)
  • Chunks sind nun doppelt so hoch (256 statt 128 Blöcke)
  • Die Chunks sind jetzt in 16×16×16 große Sektionen unterteilt
  • Sektionen, die nur aus Luft bestehen, werden nicht mehr geladen
Vollversion 1.8 (14w30a)
  • Chunks werden um ein Vielfaches schneller geladen
  • Die maximale Sichtweite beträgt nun 32 Chunks
Vollversion 1.10 (16w20a)
  • F3 + G zeigt die den Spieler umgebenden Chunk-Grenzen
Vollversion 1.12 (1.12-pre6)
  • Das Laden der Chunks wurde beschleunigt
Advertisement