Skip to content

Benutzerdefinierte Oberflächen

INFO

Diese Seite bezieht sich auf normale Oberflächen, nicht auf solche, die vom Spieler auf dem Client geöffnet werden, und nicht auf solche, die vom Server bearbeitet werden.

Oberflächen sind im Wesentlichen die grafischen Oberflächen, mit denen der Spieler interagiert, zum Beispiel der Titelbildschirm, der Pausenbildschirm usw.

Du kannst deine eigenen Oberflächen erstellen, um benutzerdefinierte Inhalte, ein benutzerdefiniertes Einstellungsmenü und vieles mehr anzuzeigen.

Eine Oberfläche erstellen

Um eine Oberfläche zu erstellen, musst du die Screen-Klasse erweitern und die init-Methode überschreiben. Optional kannst du auch die render-Methode überschreiben, aber stelle sicher, dass du die super-Methode aufrufst, sonst werden der Hintergrund, die Widgets usw. nicht gerendert.

Folgendes solltest du beachten:

  • Widgets werden nicht im Konstruktor erstellt, weil die Oberfläche zu diesem Zeitpunkt noch nicht initialisiert ist - und bestimmte Variablen, wie width (Breite) und height (Höhe), sind noch nicht verfügbar oder noch nicht genau.
  • Die init-Methode wird aufgerufen, wenn die Oberfläche initialisiert wird, und sie ist der beste Ort, um Widgets zu erstellen.
    • Du kannst Widgets mit der Methode addDrawableChild hinzufügen, die jedes zeichenbare Widget akzeptiert.
  • Die Methode render wird bei jedem Frame aufgerufen - du kannst von dieser Methode aus auf den Zeichenkontext und die Mausposition zugreifen.

Als Beispiel können wir eine einfache Oberfläche erstellen, der eine Schaltfläche und eine Beschriftung darüber enthält.

java
public class CustomScreen extends Screen {
		// :::3
		// Add a custom widget to the screen.
		// x, y, width, height
		CustomWidget customWidget = new CustomWidget(40, 80, 120, 20);
		this.addDrawableChild(customWidget);
		// :::3

Benutzerdefinierte Oberfläche 1

Die Oberfläche öffnen

Du kannst die Oberfläche mit der setScreen-Methode des MinecraftClient öffnen - du kannst dies von vielen Stellen aus tun, wie zum Beispiel einer Tastenbindung, einem Befehl oder einem Client-Paket-Handler.

java
MinecraftClient.getInstance().setScreen(
  new CustomScreen(Text.empty())
);

Eine Oberfläche schließen

Wenn du eine Oberfläche schließen möchtest, setze die Oberfläche einfach auf null:

java
MinecraftClient.getInstance().setScreen(null);

Wenn du ausgefallen sein und zum vorherigen Bildschirm zurückkehren willst, kannst du die aktuelle Oberfläche an den CustomScreen-Konstruktor übergeben und ihn in einem Attribut speichern und ihn dann verwenden, um zum vorherigen Bildschirm zurückzukehren, wenn die Methode close aufgerufen wird.

java
public Screen parent;
public CustomScreen(Text title, Screen parent) {
	super(title);
	this.parent = parent;
}

@Override
public void close() {
	this.client.setScreen(this.parent);
}

Jetzt kannst du beim Öffnen der benutzerdefinierten Oberfläche den aktuellen Bildschirm als zweites Argument übergeben - wenn du also CustomScreen#close aufrufst, wird er zur vorherigen Oberfläche zurückkehren.

java
Screen currentScreen = MinecraftClient.getInstance().currentScreen;
MinecraftClient.getInstance().setScreen(
  new CustomScreen(Text.empty(), currentScreen)
);