DialogControlSet.java

net.minecraft.client.gui.screens.dialog.DialogControlSet

信息

  • 全限定名:net.minecraft.client.gui.screens.dialog.DialogControlSet
  • 类型:public class
  • 包:net.minecraft.client.gui.screens.dialog
  • 源码路径:src/main/java/net/minecraft/client/gui/screens/dialog/DialogControlSet.java
  • 起始行号:L21
  • 职责:

    TODO

字段/常量

  • EMPTY_ACTION

    • 类型: Supplier<Optional<ClickEvent>>
    • 修饰符: public static final
    • 源码定位: L22
    • 说明:

      TODO

  • screen

    • 类型: DialogScreen<?>
    • 修饰符: private final
    • 源码定位: L23
    • 说明:

      TODO

  • valueGetters

    • 类型: Map<String,Action.ValueGetter>
    • 修饰符: private final
    • 源码定位: L24
    • 说明:

      TODO

内部类/嵌套类型

构造器

public DialogControlSet(DialogScreen<?> screen) @ L26

  • 构造器名:DialogControlSet
  • 源码定位:L26
  • 修饰符:public

参数:

  • screen: DialogScreen<?>

说明:

TODO

方法

下面的方法块按源码顺序生成。

public void addInput(Input data, Consumer<LayoutElement> output) @ L30

  • 方法名:addInput
  • 源码定位:L30
  • 返回类型:void
  • 修饰符:public

参数:

  • data: Input
  • output: Consumer

说明:

TODO

private static Button.Builder createDialogButton(CommonButtonData data, Button.OnPress clickAction) @ L38

  • 方法名:createDialogButton
  • 源码定位:L38
  • 返回类型:Button.Builder
  • 修饰符:private static

参数:

  • data: CommonButtonData
  • clickAction: Button.OnPress

说明:

TODO

public Supplier<Optional<ClickEvent>> bindAction(Optional<Action> maybeAction) @ L48

  • 方法名:bindAction
  • 源码定位:L48
  • 返回类型:Supplier<Optional>
  • 修饰符:public

参数:

  • maybeAction: Optional

说明:

TODO

public Button.Builder createActionButton(ActionButton actionButton) @ L57

  • 方法名:createActionButton
  • 源码定位:L57
  • 返回类型:Button.Builder
  • 修饰符:public

参数:

  • actionButton: ActionButton

说明:

TODO

代码

@OnlyIn(Dist.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 data, Consumer<LayoutElement> output) {
        String key = data.key();
        InputControlHandlers.createHandler(data.control(), this.screen, (element, valueGetter) -> {
            this.valueGetters.put(key, valueGetter);
            output.accept(element);
        });
    }
 
    private static Button.Builder createDialogButton(CommonButtonData data, Button.OnPress clickAction) {
        Button.Builder result = Button.builder(data.label(), clickAction);
        result.width(data.width());
        if (data.tooltip().isPresent()) {
            result = result.tooltip(Tooltip.create(data.tooltip().get()));
        }
 
        return result;
    }
 
    public Supplier<Optional<ClickEvent>> bindAction(Optional<Action> maybeAction) {
        if (maybeAction.isPresent()) {
            Action action = maybeAction.get();
            return () -> action.createAction(this.valueGetters);
        } else {
            return EMPTY_ACTION;
        }
    }
 
    public Button.Builder createActionButton(ActionButton actionButton) {
        Supplier<Optional<ClickEvent>> action = this.bindAction(actionButton.action());
        return createDialogButton(actionButton.button(), button -> this.screen.runAction(action.get()));
    }
}

引用的其他类