🇮🇹 Italiano (Italian)
🇮🇹 Italiano (Italian)
Aspetto
🇮🇹 Italiano (Italian)
🇮🇹 Italiano (Italian)
Aspetto
This page is written for:
1.21
This page is written for:
1.21
INFO
Questa pagina si riferisce a schermate normali, non quelle gestite - queste schermate sono quelle aperte dal giocatore sul client, non quelle gestite dal server.
Le schermate sono essenzialmente le GUI con cui il giocatore interagisce, come la schermata del titolo, la schermata di pausa ecc.
Puoi creare le tue schermate per mostrare contenuti personalizzati, un menu delle impostazioni personalizzato, e altro.
Per creare una schermata, devi estendere la classe Screen
e fare override del metodo init
- puoi anche eventualmente fare override del metodo render
- ma assicurati di chiamare il suo metodo super altrimenti non renderizzerà lo sfondo, i widget ecc.
Dovresti prendere nota del fatto che:
width
e height
, non sono ancora disponibili o non sono ancora accurate.init
viene chiamato quando lo schermo viene inizializzato, e questo è il posto migliore per creare i widget. addDrawableChild
, che accetta qualsiasi widget disegnabile.render
viene chiamato ogni frame - puoi accedere al contesto di disegno, e alla posizione del mouse da questo metodo.Ad esempio, possiamo creare una semplice schermata che ha un pulsante e un'etichetta al di sopra.
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);
}
}
Puoi aprire la schermata usando il metodo setScreen
di MinecraftClient
- puoi farlo da vari posti, come un'associazione a un tasto, un comando, o un gestore dei pacchetti del client.
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty())
);
Se vuoi chiudere lo schermo, semplicemente imposta la schermata a null
:
MinecraftClient.getInstance().setScreen(null);
Se vuoi essere sofisticato, e tornare alla schermata precedente, puoi passare la schermata corrente nel costruttore CustomScreen
e conservala in una variabile, per poi tornare alla schermata precedente usando il metodo close
.
public Screen parent;
public CustomScreen(Text title, Screen parent) {
super(title);
this.parent = parent;
}
@Override
public void close() {
this.client.setScreen(this.parent);
}
Ora, aprendo la schermata personalizzata, puoi passare la schermata corrente come secondo argomento - quindi quando chiami CustomScreen#close
- ritornerà alla schermata precedente.
Screen currentScreen = MinecraftClient.getInstance().currentScreen;
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty(), currentScreen)
);