🇩🇪 Deutsch (German)
🇩🇪 Deutsch (German)
Erscheinungsbild
🇩🇪 Deutsch (German)
🇩🇪 Deutsch (German)
Erscheinungsbild
This page is written for:
1.21
This page is written for:
1.21
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.
Um eine Oberfläche zu erstellen, musst du die Screen
-Klasse erweitern und die init
-Methode überschreiben.
Folgendes solltest du beachten:
width
(Breite) und height
(Höhe), sind noch nicht verfügbar oder noch nicht genau.init
-Methode wird aufgerufen, wenn die Oberfläche initialisiert wird, und sie ist der beste Ort, um Widgets zu erstellen. addDrawableChild
hinzufügen, die jedes zeichenbare Widget akzeptiert.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.
public class CustomScreen extends Screen {
public CustomScreen(Text title) {
super(title);
}
@Override
protected void init() {
ButtonWidget buttonWidget = ButtonWidget.builder(Text.of("Hello World"), (btn) -> {
// When the button is clicked, we can display a toast to the screen.
this.client.getToastManager().add(
SystemToast.create(this.client, SystemToast.Type.NARRATOR_TOGGLE, Text.of("Hello World!"), Text.of("This is a toast."))
);
}).dimensions(40, 40, 120, 20).build();
// x, y, width, height
// It's recommended to use the fixed height of 20 to prevent rendering issues with the button
// textures.
// Register the button widget.
this.addDrawableChild(buttonWidget);
}
@Override
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
super.render(context, mouseX, mouseY, delta);
// Minecraft doesn't have a "label" widget, so we'll have to draw our own text.
// We'll subtract the font height from the Y position to make the text appear above the button.
// Subtracting an extra 10 pixels will give the text some padding.
// textRenderer, text, x, y, color, hasShadow
context.drawText(this.textRenderer, "Special Button", 40, 40 - this.textRenderer.fontHeight - 10, 0xFFFFFFFF, true);
}
}
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.
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty())
);
Wenn du eine Oberfläche schließen möchtest, setze die Oberfläche einfach auf null
:
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.
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.
Screen currentScreen = MinecraftClient.getInstance().currentScreen;
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty(), currentScreen)
);