マイクラのCycleButton.builderの最小実装
Minecraftのmod(forge 1.17.1-37.1.1)でCycleButtonがようやく動いた。
CycleButton.onOffBuilder
CycleButton.booleanBuilder
↑この2つは取りうる値が2種類しかなくすんなりいけたのだが、選択肢が3つ以上ある場合にハマった。
もっともJavaに慣れてる人なら簡単だったのかもしれないけど。
Screenのサブクラス内のコードは以下のような感じで。

↑スクショ。クリックするたびに表示内容が変わります(これは画像なので変わらないけど)。
なお、1.18だとどうなのかはわかりません。1.18にアップデートしたら挙動がおかしくなり結局1.17に戻していじっています、、、orz
CycleButton.onOffBuilder
CycleButton.booleanBuilder
↑この2つは取りうる値が2種類しかなくすんなりいけたのだが、選択肢が3つ以上ある場合にハマった。
もっともJavaに慣れてる人なら簡単だったのかもしれないけど。
Screenのサブクラス内のコードは以下のような感じで。
private MyMode myMode = MyMode.MODE1;
private void createView() {
this.addRenderableWidget(CycleButton.builder(MyMode::getCurrentComponent)
.withValues(MyMode.values())
.withInitialValue(myMode)
.create(x, y, width, height, new TextComponent("Mode"), (p_169299_, p_169300_) -> {
this.myMode = p_169300_;
}));
}
public static enum MyMode implements StringRepresentable {
MODE1("mode 1"),
MODE2("mode 2"),
MODE3("mode 3");
private final String name;
private MyMode(String p_59455_) {
this.name = p_59455_;
}
@Override
public String getSerializedName() {
return this.name;
}
public TextComponent getCurrentComponent() {
return new TextComponent(this.name);
}
}

↑スクショ。クリックするたびに表示内容が変わります(これは画像なので変わらないけど)。
なお、1.18だとどうなのかはわかりません。1.18にアップデートしたら挙動がおかしくなり結局1.17に戻していじっています、、、orz
スポンサーサイト
<< マイクラのmodでScreenにスライダーを置く TopPage PHPickerViewControllerで動画ファイルを選択した後、Task内だと動かない >>
トラックバック
トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1374-2e66ca7b
https://ringsbell.blog.fc2.com/tb.php/1374-2e66ca7b