diff --git a/src/main/java/meteordevelopment/meteorclient/gui/DefaultSettingsWidgetFactory.java b/src/main/java/meteordevelopment/meteorclient/gui/DefaultSettingsWidgetFactory.java index 54898c2217..255fc6745e 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/DefaultSettingsWidgetFactory.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/DefaultSettingsWidgetFactory.java @@ -218,7 +218,7 @@ private void providedStringW(WTable table, ProvidedStringSetting setting) { private void genericW(WTable table, GenericSetting setting) { WButton edit = table.add(theme.button(GuiRenderer.EDIT)).widget(); - edit.action = () -> mc.setScreen(setting.get().createScreen(theme)); + edit.action = () -> mc.setScreen(setting.createScreen(theme)); reset(table, setting, null); } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/utils/IScreenFactory.java b/src/main/java/meteordevelopment/meteorclient/gui/utils/IScreenFactory.java deleted file mode 100644 index c19d01addb..0000000000 --- a/src/main/java/meteordevelopment/meteorclient/gui/utils/IScreenFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). - * Copyright (c) Meteor Development. - */ - -package meteordevelopment.meteorclient.gui.utils; - -import meteordevelopment.meteorclient.gui.GuiTheme; -import meteordevelopment.meteorclient.gui.WidgetScreen; - -public interface IScreenFactory { - WidgetScreen createScreen(GuiTheme theme); -} diff --git a/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java index 46f3a6cbb0..e36f819e15 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java @@ -5,18 +5,21 @@ package meteordevelopment.meteorclient.settings; -import meteordevelopment.meteorclient.gui.utils.IScreenFactory; -import meteordevelopment.meteorclient.utils.misc.ICopyable; -import meteordevelopment.meteorclient.utils.misc.ISerializable; +import meteordevelopment.meteorclient.gui.GuiTheme; +import meteordevelopment.meteorclient.gui.WidgetScreen; import net.minecraft.nbt.NbtCompound; import java.util.function.Consumer; -public class GenericSetting & ISerializable & IScreenFactory> extends Setting { +public class GenericSetting> extends Setting { public GenericSetting(String name, String description, T defaultValue, Consumer onChanged, Consumer> onModuleActivated, IVisible visible) { super(name, description, defaultValue, onChanged, onModuleActivated, visible); } + public WidgetScreen createScreen(GuiTheme theme) { + return this.get().createScreen(theme, this); + } + @Override public void resetImpl() { if (value == null) value = defaultValue.copy(); @@ -47,7 +50,7 @@ public T load(NbtCompound tag) { return get(); } - public static class Builder & ISerializable & IScreenFactory> extends SettingBuilder, T, GenericSetting> { + public static class Builder> extends SettingBuilder, T, GenericSetting> { public Builder() { super(null); } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/IGeneric.java b/src/main/java/meteordevelopment/meteorclient/settings/IGeneric.java new file mode 100644 index 0000000000..839c712b46 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/settings/IGeneric.java @@ -0,0 +1,15 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.settings; + +import meteordevelopment.meteorclient.gui.GuiTheme; +import meteordevelopment.meteorclient.gui.WidgetScreen; +import meteordevelopment.meteorclient.utils.misc.ICopyable; +import meteordevelopment.meteorclient.utils.misc.ISerializable; + +public interface IGeneric> extends ICopyable, ISerializable { + WidgetScreen createScreen(GuiTheme theme, GenericSetting setting); +} diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPBlockData.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPBlockData.java index db3bb6442e..1979cd3922 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPBlockData.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPBlockData.java @@ -7,18 +7,17 @@ import meteordevelopment.meteorclient.gui.GuiTheme; import meteordevelopment.meteorclient.gui.WidgetScreen; -import meteordevelopment.meteorclient.gui.utils.IScreenFactory; import meteordevelopment.meteorclient.renderer.ShapeMode; import meteordevelopment.meteorclient.settings.BlockDataSetting; +import meteordevelopment.meteorclient.settings.GenericSetting; import meteordevelopment.meteorclient.settings.IBlockData; +import meteordevelopment.meteorclient.settings.IGeneric; import meteordevelopment.meteorclient.utils.misc.IChangeable; -import meteordevelopment.meteorclient.utils.misc.ICopyable; -import meteordevelopment.meteorclient.utils.misc.ISerializable; import meteordevelopment.meteorclient.utils.render.color.SettingColor; import net.minecraft.block.Block; import net.minecraft.nbt.NbtCompound; -public class ESPBlockData implements ICopyable, ISerializable, IChangeable, IBlockData, IScreenFactory { +public class ESPBlockData implements IGeneric, IChangeable, IBlockData { public ShapeMode shapeMode; public SettingColor lineColor; public SettingColor sideColor; @@ -43,8 +42,8 @@ public WidgetScreen createScreen(GuiTheme theme, Block block, BlockDataSetting setting) { + return new ESPBlockDataScreen(theme, this, setting); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPBlockDataScreen.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPBlockDataScreen.java index 0dce2a3ade..6854d2a89a 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPBlockDataScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPBlockDataScreen.java @@ -11,18 +11,27 @@ import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.utils.render.color.SettingColor; import net.minecraft.block.Block; +import org.jetbrains.annotations.Nullable; public class ESPBlockDataScreen extends WindowScreen { private final ESPBlockData blockData; - private final Block block; - private final BlockDataSetting setting; + private final Setting setting; + private final @Nullable Runnable firstChangeConsumer; public ESPBlockDataScreen(GuiTheme theme, ESPBlockData blockData, Block block, BlockDataSetting setting) { + this(theme, blockData, setting, () -> setting.get().put(block, blockData)); + } + + public ESPBlockDataScreen(GuiTheme theme, ESPBlockData blockData, GenericSetting setting) { + this(theme, blockData, setting, null); + } + + private ESPBlockDataScreen(GuiTheme theme, ESPBlockData blockData, Setting setting, @Nullable Runnable firstChangeConsumer) { super(theme, "Configure Block"); this.blockData = blockData; - this.block = block; this.setting = setting; + this.firstChangeConsumer = firstChangeConsumer; } @Override @@ -106,11 +115,11 @@ public void initWidgets() { } private void onChanged() { - if (!blockData.isChanged() && block != null && setting != null) { - setting.get().put(block, blockData); - setting.onChanged(); + if (!blockData.isChanged() && firstChangeConsumer != null) { + firstChangeConsumer.run(); } + setting.onChanged(); blockData.changed(); } }