Pantallas Personalizadas
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.
Creando una Pantalla
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:
- Los widgets no son creados en el constructor de la clase porque la pantalla aún no ha sido inicializada a este punto - y ciertas variables, como
width
(ancho) yheight
(altura), aún no están disponibles o no tienen valores correctos. - El método
init
es llamado cuando la pantalla es inicializada, y es el mejor lugar para crear widgets.- Agregas widgets usando el método
addDrawableChild
, el cual acepta cualquier widget dibujable.
- Agregas widgets usando el método
- El método
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.
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
Abrir La Panatalla
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.
java
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty())
);
Cerrar La Pantalla
Si quieres cerrar la pantalla, simplemente establece la pantalla actual a un valor null
(nulo):
java
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.
java
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.
java
Screen currentScreen = MinecraftClient.getInstance().currentScreen;
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty(), currentScreen)
);