minecraft-src/net/minecraft/client/gui/screens/dialog/ButtonListDialogScreen.java
2025-09-18 12:27:44 +00:00

35 lines
1.8 KiB
Java

package net.minecraft.client.gui.screens.dialog;
import java.util.List;
import java.util.stream.Stream;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.layouts.HeaderAndFooterLayout;
import net.minecraft.client.gui.layouts.LinearLayout;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.server.dialog.ActionButton;
import net.minecraft.server.dialog.ButtonListDialog;
import org.jetbrains.annotations.Nullable;
@Environment(EnvType.CLIENT)
public abstract class ButtonListDialogScreen<T extends ButtonListDialog> extends DialogScreen<T> {
public static final int FOOTER_MARGIN = 5;
public ButtonListDialogScreen(@Nullable Screen previousScreen, T dialog, DialogConnectionAccess connectionAccess) {
super(previousScreen, dialog, connectionAccess);
}
protected void populateBodyElements(LinearLayout layout, DialogControlSet controls, T dialog, DialogConnectionAccess connectionAccess) {
super.populateBodyElements(layout, controls, dialog, connectionAccess);
List<Button> list = this.createListActions(dialog, connectionAccess).map(actionButton -> controls.createActionButton(actionButton).build()).toList();
layout.addChild(packControlsIntoColumns(list, dialog.columns()));
}
protected abstract Stream<ActionButton> createListActions(T dialog, DialogConnectionAccess connectionAccess);
protected void updateHeaderAndFooter(HeaderAndFooterLayout layout, DialogControlSet controls, T dialog, DialogConnectionAccess connectionAccess) {
super.updateHeaderAndFooter(layout, controls, dialog, connectionAccess);
dialog.exitAction().ifPresentOrElse(actionButton -> layout.addToFooter(controls.createActionButton(actionButton).build()), () -> layout.setFooterHeight(5));
}
}