INFO
Ця сторінка стосується звичайних екранів, а не оброблених – ці екрани відкриває гравець на клієнті, а не ті, що обробляються сервером.
Екрани, по суті, є графічним інтерфейсом, з яким взаємодіє гравець, наприклад, екран заголовка, екран паузи тощо.
Ви можете створювати власні екрани для показу власного вмісту, меню налаштувань тощо.
Створення екрану
Щоб створити екран, вам потрібно розширити клас Screen і перевизначити метод init - ви також можете перевизначити метод render, але переконайтеся, що викликаєте його надметод, інакше він не показуватиме тло, віджети тощо.
Ви повинні взяти до відома, що:
- Віджети не створюються в конструкторі, тому що екран ще не ініціалізовано в цей момент, а певні змінні, такі як
widthіheight, ще недоступні або ще не точні. - Метод
initвикликається, коли екран ініціалізується, і це найкраще місце для створення віджетів.- Ви додаєте віджети за допомогою методу
addDrawableChild, який приймає будь-який віджет, який можна малювати.
- Ви додаєте віджети за допомогою методу
- Метод
renderназивається кожним кадром - ви можете отримати доступ до контексту малювання та позиції мишки з цього методу.
Як приклад, ми можемо створити простий екран із кнопкою та міткою над нею.
java
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);
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

Відкриття екрану
Ви можете відкрити екран за допомогою методу setScreen від MinecraftClient - ви можете зробити це з багатьох місць, таких як прив'язка клавіш, команда або обробник клієнтських пакетів.
java
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty())
);1
2
3
2
3
Закриття екрану
Якщо ви хочете закрити екран, просто встановіть для екрана значення null:
java
MinecraftClient.getInstance().setScreen(null);1
Якщо ви хочете, було гарно та повернутися до попереднього екрана, ви можете передати поточний екран у конструктор CustomScreen і зберегти його в полі, а потім використовувати його для повернення до попереднього екрана, коли викликається метод close.
java
public Screen parent;
public CustomScreen(Text title, Screen parent) {
super(title);
this.parent = parent;
}
@Override
public void close() {
this.client.setScreen(this.parent);
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Тепер, відкриваючи власний екран, ви можете передати поточний екран як другий аргумент, тож коли ви викличете CustomScreen#close, він повернеться до попереднього екрана.
java
Screen currentScreen = MinecraftClient.getInstance().currentScreen;
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty(), currentScreen)
);1
2
3
4
2
3
4

