Skip to content

Commit

Permalink
reset to defaults button functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
AlurienFlame committed Dec 21, 2024
1 parent 091854d commit 382e593
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 58 deletions.
29 changes: 19 additions & 10 deletions src/main/java/net/balancedrecall/BalancedRecallConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,24 +33,33 @@ public BalancedRecallConfig() {
read();
}

public JsonObject getDefaults() {
JsonObject defaults = new JsonObject();
defaults.addProperty("take_damage_interrupts_recall", true);
defaults.addProperty("take_damage_puts_mirror_on_cooldown", true);
defaults.addProperty("recall_impossible_when_monsters_nearby", true);
defaults.addProperty("magic_mirror_use_time_ticks", 20);
defaults.addProperty("magic_mirror_cooldown_time_seconds", 1);
defaults.addProperty("dimensional_mirror_use_time_ticks", 20);
defaults.addProperty("dimensional_mirror_cooldown_time_seconds", 1);
defaults.addProperty("sleeping_mat_resets_phantom_timer", false);
return defaults;
}

public void setToDefaults() {
jsonObject = new JsonObject();
jsonObject.addProperty("take_damage_interrupts_recall", true);
jsonObject.addProperty("take_damage_puts_mirror_on_cooldown", true);
jsonObject.addProperty("recall_impossible_when_monsters_nearby", true);
jsonObject.addProperty("magic_mirror_use_time_ticks", 20);
jsonObject.addProperty("magic_mirror_cooldown_time_seconds", 1);
jsonObject.addProperty("dimensional_mirror_use_time_ticks", 20);
jsonObject.addProperty("dimensional_mirror_cooldown_time_seconds", 1);
jsonObject.addProperty("sleeping_mat_resets_phantom_timer", true);
jsonObject = getDefaults();
}

public Boolean areDefaults() {
return jsonObject.equals(getDefaults());
}

// Setters and getters
// TODO: validate
public void set(String key, Boolean value) {
jsonObject.addProperty(key, value);
}
public void set(String key, String value) {
// FIXME: crash on non-integer inputs
jsonObject.addProperty(key, Integer.parseInt(value));
}
public Boolean getBoolean(String key) {
Expand Down
121 changes: 73 additions & 48 deletions src/main/java/net/balancedrecall/ConfigScreen.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.CheckboxWidget;
import net.minecraft.client.gui.widget.CyclingButtonWidget;
import net.minecraft.client.gui.widget.DirectionalLayoutWidget;
import net.minecraft.client.gui.widget.GridWidget;
import net.minecraft.client.gui.widget.TextFieldWidget;
Expand All @@ -16,112 +16,128 @@ public class ConfigScreen extends Screen {
private Screen parent;
private final ThreePartsLayoutWidget layout = new ThreePartsLayoutWidget(this);
private final BalancedRecallConfig config;

private CyclingButtonWidget<Boolean> takeDamageInterruptsRecall;
private CyclingButtonWidget<Boolean> takeDamagePutsMirrorOnCooldown;
private CyclingButtonWidget<Boolean> recallImpossibleWhenMonstersNearby;
private TextFieldWidget magicMirrorUseTime;
private TextFieldWidget magicMirrorCooldownTime;
private TextFieldWidget dimensionalMirrorUseTime;
private TextFieldWidget dimensionalMirrorCooldownTime;
private CyclingButtonWidget<Boolean> sleepingMatResetsPhantomTimer;

private ButtonWidget resetButton;

public ConfigScreen(@Nullable Screen parent) {
super(Text.translatable("balancedrecall.menu.title"));
this.parent = parent;
this.config = BalancedRecall.config;
}

private void setConfig(String key, Boolean value) {
config.set(key, value);
resetButton.active = !config.areDefaults();
}
private void setConfig (String key, String value) {
config.set(key, value);
resetButton.active = !config.areDefaults();
}

@Override
protected void init() {
// TODO: lang file instead of hardcoded strings
// TODO: detect config in real code

DirectionalLayoutWidget column = DirectionalLayoutWidget.vertical().spacing(8);

// Header
layout.addHeader(new TextWidget(Text.of("Balanced Recall Configuration"), this.textRenderer));

// Footer
DirectionalLayoutWidget footer = DirectionalLayoutWidget.horizontal().spacing(8);
resetButton = ButtonWidget.builder(Text.of("Reset"), (btn) -> this.reset()).dimensions(40, 40, 120, 20).build();
footer.add(resetButton);
footer.add(ButtonWidget.builder(Text.of("Done"), (btn) -> this.close()).dimensions(40, 40, 120, 20).build());
this.layout.addFooter(footer);

// Body
DirectionalLayoutWidget body = DirectionalLayoutWidget.vertical().spacing(8);

// Mirror settings
column.add(
CheckboxWidget
.builder(Text.of("Taking damage interrupts recall"), this.textRenderer)
.checked(config.getBoolean("take_damage_interrupts_recall"))
.callback((checkbox, checked)->config.set("take_damage_interrupts_recall", checked))
.build()
);
column.add(
CheckboxWidget
.builder(Text.of("Taking damage puts mirror on cooldown"), this.textRenderer)
.checked(config.getBoolean("take_damage_puts_mirror_on_cooldown"))
.callback((checkbox, checked)->config.set("take_damage_puts_mirror_on_cooldown", checked))
.build()
);
column.add(
CheckboxWidget
.builder(Text.of("Recalling is impossible when mosters are nearby"), this.textRenderer)
.checked(config.getBoolean("recall_impossible_when_monsters_nearby"))
.callback((checkbox, checked)->config.set("recall_impossible_when_monsters_nearby", checked))
.build()
);
takeDamageInterruptsRecall = CyclingButtonWidget
.onOffBuilder(Text.of("Enabled"), Text.of("Disabled"))
.initially(config.getBoolean("take_damage_interrupts_recall"))
.build(Text.of("Taking damage interrupts recall"), (button, value)->setConfig("take_damage_interrupts_recall", value));
body.add(takeDamageInterruptsRecall);

takeDamagePutsMirrorOnCooldown = CyclingButtonWidget
.onOffBuilder(Text.of("Enabled"), Text.of("Disabled"))
.initially(config.getBoolean("take_damage_puts_mirror_on_cooldown"))
.build(Text.of("Taking damage puts mirror on cooldown"), (button, value)->setConfig("take_damage_puts_mirror_on_cooldown", value));
body.add(takeDamagePutsMirrorOnCooldown);

recallImpossibleWhenMonstersNearby = CyclingButtonWidget
.onOffBuilder(Text.of("Enabled"), Text.of("Disabled"))
.initially(config.getBoolean("recall_impossible_when_monsters_nearby"))
.build(Text.of("Recall impossible when monsters nearby"), (button, value)->setConfig("recall_impossible_when_monsters_nearby", value));
body.add(recallImpossibleWhenMonstersNearby);

GridWidget grid = new GridWidget();
grid.getMainPositioner().margin(4).alignHorizontalCenter();
GridWidget.Adder adder = grid.createAdder(2);
adder.getMainPositioner().alignLeft().alignVerticalCenter();

adder.add(new TextWidget(Text.of("Magic Mirror Use Time"), this.textRenderer));
TextFieldWidget magicMirrorUseTime = new TextFieldWidget(
magicMirrorUseTime = new TextFieldWidget(
this.textRenderer,
100,
20,
Text.of("Magic Mirror Use Time")
);
magicMirrorUseTime.setChangedListener((value)->config.set("magic_mirror_use_time_ticks", value));
magicMirrorUseTime.setChangedListener((value)->setConfig("magic_mirror_use_time_ticks", value));
magicMirrorUseTime.setText(config.getInteger("magic_mirror_use_time_ticks"));
adder.add(magicMirrorUseTime);

adder.add(new TextWidget(Text.of("Magic Mirror Cooldown Time"), this.textRenderer));
TextFieldWidget magicMirrorCooldownTime = new TextFieldWidget(
magicMirrorCooldownTime = new TextFieldWidget(
this.textRenderer,
100,
20,
Text.of("Magic Mirror Cooldown Time")
);
magicMirrorCooldownTime.setChangedListener((value)->config.set("magic_mirror_cooldown_time_seconds", value));
magicMirrorCooldownTime.setChangedListener((value)->setConfig("magic_mirror_cooldown_time_seconds", value));
magicMirrorCooldownTime.setText(config.getInteger("magic_mirror_cooldown_time_seconds"));
adder.add(magicMirrorCooldownTime);

adder.add(new TextWidget(Text.of("Dimensional Mirror Use Time"), this.textRenderer));
TextFieldWidget dimensionalMirrorUseTime = new TextFieldWidget(
dimensionalMirrorUseTime = new TextFieldWidget(
this.textRenderer,
100,
20,
Text.of("Dimensional Mirror Use Time")
);
dimensionalMirrorUseTime.setChangedListener((value)->config.set("dimensional_mirror_use_time_ticks", value));
dimensionalMirrorUseTime.setChangedListener((value)->setConfig("dimensional_mirror_use_time_ticks", value));
dimensionalMirrorUseTime.setText(config.getInteger("dimensional_mirror_use_time_ticks"));
adder.add(dimensionalMirrorUseTime);

adder.add(new TextWidget(Text.of("Dimensional Mirror Cooldown Time"), this.textRenderer));
TextFieldWidget dimensionalMirrorCooldownTime = new TextFieldWidget(
dimensionalMirrorCooldownTime = new TextFieldWidget(
this.textRenderer,
100,
20,
Text.of("Dimensional Mirror Cooldown Time")
);
dimensionalMirrorCooldownTime.setChangedListener((value)->config.set("dimensional_mirror_cooldown_time_seconds", value));
dimensionalMirrorCooldownTime.setChangedListener((value)->setConfig("dimensional_mirror_cooldown_time_seconds", value));
dimensionalMirrorCooldownTime.setText(config.getInteger("dimensional_mirror_cooldown_time_seconds"));
adder.add(dimensionalMirrorCooldownTime);

column.add(grid);
body.add(grid);

// Mat settings
column.add(
CheckboxWidget
.builder(Text.of("Sleeping mat resets phantom timer"), this.textRenderer)
.checked(config.getBoolean("sleeping_mat_resets_phantom_timer"))
.callback((checkbox, checked)->config.set("sleeping_mat_resets_phantom_timer", checked))
.build()
);

this.layout.addBody(column);

// Config screen buttons
DirectionalLayoutWidget footer = DirectionalLayoutWidget.horizontal().spacing(8);
footer.add(ButtonWidget.builder(Text.of("Reset"), (btn) -> this.reset()).dimensions(40, 40, 120, 20).build());
footer.add(ButtonWidget.builder(Text.of("Done"), (btn) -> this.close()).dimensions(40, 40, 120, 20).build());
this.layout.addFooter(footer);
sleepingMatResetsPhantomTimer = CyclingButtonWidget
.onOffBuilder(Text.of("Enabled"), Text.of("Disabled"))
.initially(config.getBoolean("sleeping_mat_resets_phantom_timer"))
.build(Text.of("Sleeping mat resets phantom timer"), (button, value)->setConfig("sleeping_mat_resets_phantom_timer", value));
body.add(sleepingMatResetsPhantomTimer);
this.layout.addBody(body);

this.layout.forEachChild(child -> {
this.addDrawableChild(child);
Expand All @@ -136,6 +152,15 @@ protected void refreshWidgetPositions() {

private void reset() {
config.setToDefaults();
takeDamageInterruptsRecall.setValue(config.getBoolean("take_damage_interrupts_recall"));
takeDamagePutsMirrorOnCooldown.setValue(config.getBoolean("take_damage_puts_mirror_on_cooldown"));
recallImpossibleWhenMonstersNearby.setValue(config.getBoolean("recall_impossible_when_monsters_nearby"));
magicMirrorUseTime.setText(config.getInteger("magic_mirror_use_time_ticks"));
magicMirrorCooldownTime.setText(config.getInteger("magic_mirror_cooldown_time_seconds"));
dimensionalMirrorUseTime.setText(config.getInteger("dimensional_mirror_use_time_ticks"));
dimensionalMirrorCooldownTime.setText(config.getInteger("dimensional_mirror_cooldown_time_seconds"));
sleepingMatResetsPhantomTimer.setValue(config.getBoolean("sleeping_mat_resets_phantom_timer"));
resetButton.active = !config.areDefaults();
}

@Override
Expand Down

0 comments on commit 382e593

Please sign in to comment.