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

62 lines
2.2 KiB
Java

package net.minecraft.client.gui.screens.dialog;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Supplier;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.Tooltip;
import net.minecraft.client.gui.layouts.LayoutElement;
import net.minecraft.client.gui.screens.dialog.input.InputControlHandlers;
import net.minecraft.network.chat.ClickEvent;
import net.minecraft.network.chat.Component;
import net.minecraft.server.dialog.ActionButton;
import net.minecraft.server.dialog.CommonButtonData;
import net.minecraft.server.dialog.Input;
import net.minecraft.server.dialog.action.Action;
@Environment(EnvType.CLIENT)
public class DialogControlSet {
public static final Supplier<Optional<ClickEvent>> EMPTY_ACTION = Optional::empty;
private final DialogScreen<?> screen;
private final Map<String, Action.ValueGetter> valueGetters = new HashMap();
public DialogControlSet(DialogScreen<?> screen) {
this.screen = screen;
}
public void addInput(Input input, Consumer<LayoutElement> adder) {
String string = input.key();
InputControlHandlers.createHandler(input.control(), this.screen, (layoutElement, valueGetter) -> {
this.valueGetters.put(string, valueGetter);
adder.accept(layoutElement);
});
}
private static Button.Builder createDialogButton(CommonButtonData buttonData, Button.OnPress onPress) {
Button.Builder builder = Button.builder(buttonData.label(), onPress);
builder.width(buttonData.width());
if (buttonData.tooltip().isPresent()) {
builder = builder.tooltip(Tooltip.create((Component)buttonData.tooltip().get()));
}
return builder;
}
public Supplier<Optional<ClickEvent>> bindAction(Optional<Action> action) {
if (action.isPresent()) {
Action action2 = (Action)action.get();
return () -> action2.createAction(this.valueGetters);
} else {
return EMPTY_ACTION;
}
}
public Button.Builder createActionButton(ActionButton button) {
Supplier<Optional<ClickEvent>> supplier = this.bindAction(button.action());
return createDialogButton(button.button(), buttonx -> this.screen.runAction((Optional<ClickEvent>)supplier.get()));
}
}