62 lines
2.2 KiB
Java
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()));
|
|
}
|
|
}
|