🇪🇸 Español (Spanish)
🇪🇸 Español (Spanish)
Appearance
🇪🇸 Español (Spanish)
🇪🇸 Español (Spanish)
Appearance
This page is written for:
1.21
This page is written for:
1.21
INFO
Esta página se refiere a pantallas normales, y no pantallas manejadas - estas pantallas son las que son abiertas por el jugador en el cliente, no las que son manejadas por el servidor.
Las pantallas son esencialmente la interfaz gráfica con la que jugador interactúa con, como el menú principal, el menú de pausa, etc.
Puedes crear tus propios menús para mostrar contenido personalizado, un menú de configuraciones personalizado, o más.
Para crear una pantalla, necesitarás extender la clase Screen
y anular el método init
(inicializar) - opcionalmente también anular el método render
- pero asegúrate de llamar su implementación súper, de lo contrario no se renderizará el fondo, los widgets, etc.
Toma en cuenta que:
width
(ancho) y height
(altura), aún no están disponibles o no tienen valores correctos.init
es llamado cuando la pantalla es inicializada, y es el mejor lugar para crear widgets. addDrawableChild
, el cual acepta cualquier widget dibujable.render
es llamado en cada frame - puedes acceder el contexto de dibujado, y la posición del mouse desde este método.Por ejemplo, podemos crear una pantalla simple que tiene un botón y una etiqueta arriba.
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);
}
}
Puedes abrir la pantalla usando el método setScreen
de la clase MinecraftClient
- puedes hacer esto desde muchos lugares, como un key binding, un comando, o un manipulador de paquetes de cliente.
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty())
);
Si quieres cerrar la pantalla, simplemente establece la pantalla actual a un valor null
(nulo):
MinecraftClient.getInstance().setScreen(null);
Si quieres ser más elegante, y retornar a la pantalla anterior, puedes pasar la pantalla actual al constructor de la clase de CustomScreen
y guardarla en un miembro, y después puedes usarlo para volver a la pantalla anterior cuando el método close
es llamado.
public Screen parent;
public CustomScreen(Text title, Screen parent) {
super(title);
this.parent = parent;
}
@Override
public void close() {
this.client.setScreen(this.parent);
}
Ahora, cuando abramos la pantalla personalizada, puedes pasar la pantalla actual como el segundo argumento - para que cuando llames CustomScreen#close
- volverá a la pantalla anterior.
Screen currentScreen = MinecraftClient.getInstance().currentScreen;
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty(), currentScreen)
);