🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
🇺🇦 Українська (Ukrainian - Ukraine)
🇺🇦 Українська (Ukrainian - Ukraine)
Зовнішній вигляд
Ця сторінка написана для версії:
1.21.4
Ця сторінка написана для версії:
1.21.4
INFO
Ця сторінка стосується звичайних екранів, а не оброблених – ці екрани відкриває гравець на клієнті, а не ті, що обробляються сервером.
Екрани, по суті, є графічним інтерфейсом, з яким взаємодіє гравець, наприклад, екран заголовка, екран паузи тощо.
Екрани, по суті, є графічним інтерфейсом, з яким взаємодіє гравець, наприклад, екран заголовка, екран паузи тощо.
Щоб створити екран, вам потрібно розширити клас Screen
і перевизначити метод init
- ви також можете перевизначити метод render
, але переконайтеся, що викликаєте його надметод, інакше він не показуватиме тло, віджети тощо.
Щоб створити екран, вам потрібно розширити клас Screen
і перевизначити метод init
- ви також можете перевизначити метод render
, але переконайтеся, що викликаєте його надметод, інакше він не показуватиме тло, віджети тощо.
width
і height
, ще недоступні або ще не точні.init
викликається, коли екран ініціалізується, і це найкраще місце для створення віджетів. addDrawableChild
, який приймає будь-який віджет, який можна малювати.render
називається кожним кадром - ви можете отримати доступ до контексту малювання та позиції мишки з цього методу.Як приклад, ми можемо створити простий екран із кнопкою та міткою над нею.
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);
}
}
Ви можете відкрити екран за допомогою методу setScreen
від MinecraftClient
- ви можете зробити це з багатьох місць, таких як прив'язка клавіш, команда або обробник клієнтських пакетів.
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty())
);
Якщо ви хочете закрити екран, просто встановіть для екрана значення null
:
MinecraftClient.getInstance().setScreen(null);
Якщо ви хочете, було гарно та повернутися до попереднього екрана, ви можете передати поточний екран у конструктор CustomScreen
і зберегти його в полі, а потім використовувати його для повернення до попереднього екрана, коли викликається метод close
.
public Screen parent;
public CustomScreen(Text title, Screen parent) {
super(title);
this.parent = parent;
}
@Override
public void close() {
this.client.setScreen(this.parent);
}
Тепер, відкриваючи власний екран, ви можете передати поточний екран як другий аргумент, тож коли ви викличете CustomScreen#close
, він повернеться до попереднього екрана.
Screen currentScreen = MinecraftClient.getInstance().currentScreen;
MinecraftClient.getInstance().setScreen(
new CustomScreen(Text.empty(), currentScreen)
);