diff --git a/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java b/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java index d3bceabd..07b19aba 100644 --- a/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java +++ b/src/main/java/org/betterx/bclib/client/gui/modmenu/TestScreen.java @@ -44,6 +44,25 @@ public class TestScreen extends Screen { } )); rows.addSpacer(16); + Checkbox cb1 = new Checkbox( + DynamicSize.fit(), DynamicSize.fit(), + Component.literal("Some Sub-State"), + false, true, + (checkbox, value) -> { + System.out.println(value); + } + ); + rows.add(new Checkbox( + DynamicSize.fit(), DynamicSize.fit(), + Component.literal("Some Selectable State"), + false, true, + (checkbox, value) -> { + System.out.println(value); + cb1.setEnabled(value); + } + )); + rows.add(cb1); + rows.addSpacer(16); rows.add(new Button( DynamicSize.fit(), DynamicSize.fit(), Component.literal("test"), diff --git a/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponent.java b/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponent.java index 12f1a968..912a9c4a 100644 --- a/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponent.java +++ b/src/main/java/org/betterx/ui/layout/components/AbstractVanillaComponent.java @@ -7,6 +7,8 @@ import net.minecraft.client.gui.components.AbstractWidget; public abstract class AbstractVanillaComponent> extends Component> { protected C vanillaComponent; protected final net.minecraft.network.chat.Component component; + protected float alpha = 1.0f; + protected boolean enabled = true; public AbstractVanillaComponent( DynamicSize width, @@ -24,6 +26,7 @@ public abstract class AbstractVanillaComponent { + @FunctionalInterface + public interface SelectionChanged { + void now(net.minecraft.client.gui.components.Checkbox checkBox, boolean selected); + } + + private final boolean selected; + private final boolean showLabel; + + private final SelectionChanged onSelectionChange; + + public Checkbox( + DynamicSize width, + DynamicSize height, + Component component, + boolean selected, boolean showLabel, + SelectionChanged onSelectionChange + ) { + super(width, height, new CheckboxRenderer(), component); + this.selected = selected; + this.showLabel = showLabel; + this.onSelectionChange = onSelectionChange; + } + + public boolean selected() { + if (vanillaComponent != null) return vanillaComponent.selected(); + return selected; + } + + @Override + protected net.minecraft.client.gui.components.Checkbox createVanillaComponent() { + net.minecraft.client.gui.components.Checkbox cb = new net.minecraft.client.gui.components.Checkbox( + 0, 0, + relativeBounds.width, relativeBounds.height, + component, + selected, + showLabel + ) { + @Override + public void onPress() { + super.onPress(); + onSelectionChange.now(this, this.selected()); + } + }; + + onSelectionChange.now(cb, cb.selected()); + return cb; + } +} diff --git a/src/main/java/org/betterx/ui/layout/components/render/CheckboxRenderer.java b/src/main/java/org/betterx/ui/layout/components/render/CheckboxRenderer.java new file mode 100644 index 00000000..60c4ef9b --- /dev/null +++ b/src/main/java/org/betterx/ui/layout/components/render/CheckboxRenderer.java @@ -0,0 +1,7 @@ +package org.betterx.ui.layout.components.render; + +import org.betterx.ui.layout.components.AbstractVanillaComponentRenderer; +import org.betterx.ui.layout.components.Checkbox; + +public class CheckboxRenderer extends AbstractVanillaComponentRenderer { +}