INFO
Ця сторінка стосується звичайних екранів, а не оброблених — ці екрани відкриває гравець на клієнті, а не ті, що обробляються сервером.
Екрани, по суті, є графічним інтерфейсом, з яким взаємодіє гравець, наприклад, екран заголовка, екран паузи тощо.
Ви можете створювати власні екрани для показу власного вмісту, меню налаштувань тощо.
Створення екрана
Щоб створити екран, вам потрібно розширити клас Screen і перевизначити метод init — ви також можете перевизначити метод render, але переконайтеся, що викликаєте його надметод, інакше він не рендеритиме фон, віджети тощо.
Ви повинні взяти до відома, що:
- Віджети не створюються в конструкторі, тому що екран ще не ініціалізовано в цей момент, а певні змінні, такі як
widthіheight, ще недоступні або ще не точні. - Метод
initвикликається, коли екран ініціалізується, і це найкраще місце для створення віджетів.- Ви додаєте віджети за допомогою методу
addRenderableWidget, який приймає будь-який віджет, який можна малювати.
- Ви додаєте віджети за допомогою методу
- Метод
renderназивається кожним кадром — ви можете отримати доступ до контексту малювання та позиції миші з цього методу.
Як приклад, ми можемо створити простий екран із кнопкою та міткою над нею.
java
public class CustomScreen extends Screen {
public CustomScreen(Component title) {
super(title);
}
@Override
protected void init() {
Button buttonWidget = Button.builder(Component.literal("Hello World"), (btn) -> {
// When the button is clicked, we can display a toast to the screen.
this.minecraft.getToastManager().addToast(
SystemToast.multiline(this.minecraft, SystemToast.SystemToastId.NARRATOR_TOGGLE, Component.nullToEmpty("Hello World!"), Component.nullToEmpty("This is a toast."))
);
}).bounds(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.addRenderableWidget(buttonWidget);
}
@Override
public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) {
super.render(graphics, 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
graphics.drawString(this.font, "Special Button", 40, 40 - this.font.lineHeight - 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 Minecraft — ви можете зробити це з багатьох місць, таких як призначення клавіш, команда або обробник клієнтських пакетів.
java
Minecraft.getInstance().setScreen(
new CustomScreen(Component.empty())
);1
2
3
2
3
Закриття екрана
Якщо ви хочете закрити екран, просто встановіть для екрана значення null:
java
Minecraft.getInstance().setScreen(null);1
Якщо ви хочете, було гарно та повернутися до попереднього екрана, ви можете передати поточний екран у конструктор CustomScreen і зберегти його в полі, а потім використовувати його для повернення до попереднього екрана, коли викликається метод close.
java
public Screen parent;
public CustomScreen(Component title, Screen parent) {
super(title);
this.parent = parent;
}
@Override
public void onClose() {
this.minecraft.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 = Minecraft.getInstance().currentScreen;
Minecraft.getInstance().setScreen(
new CustomScreen(Component.empty(), currentScreen)
);1
2
3
4
2
3
4

