Skip to content

Commit d79f58c

Browse files
authored
fix GenericSetting onChanged (#5787)
1 parent 78852cd commit d79f58c

File tree

6 files changed

+44
-31
lines changed

6 files changed

+44
-31
lines changed

src/main/java/meteordevelopment/meteorclient/gui/DefaultSettingsWidgetFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ private void providedStringW(WTable table, ProvidedStringSetting setting) {
218218

219219
private void genericW(WTable table, GenericSetting<?> setting) {
220220
WButton edit = table.add(theme.button(GuiRenderer.EDIT)).widget();
221-
edit.action = () -> mc.setScreen(setting.get().createScreen(theme));
221+
edit.action = () -> mc.setScreen(setting.createScreen(theme));
222222

223223
reset(table, setting, null);
224224
}

src/main/java/meteordevelopment/meteorclient/gui/utils/IScreenFactory.java

Lines changed: 0 additions & 13 deletions
This file was deleted.

src/main/java/meteordevelopment/meteorclient/settings/GenericSetting.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,21 @@
55

66
package meteordevelopment.meteorclient.settings;
77

8-
import meteordevelopment.meteorclient.gui.utils.IScreenFactory;
9-
import meteordevelopment.meteorclient.utils.misc.ICopyable;
10-
import meteordevelopment.meteorclient.utils.misc.ISerializable;
8+
import meteordevelopment.meteorclient.gui.GuiTheme;
9+
import meteordevelopment.meteorclient.gui.WidgetScreen;
1110
import net.minecraft.nbt.NbtCompound;
1211

1312
import java.util.function.Consumer;
1413

15-
public class GenericSetting<T extends ICopyable<T> & ISerializable<T> & IScreenFactory> extends Setting<T> {
14+
public class GenericSetting<T extends IGeneric<T>> extends Setting<T> {
1615
public GenericSetting(String name, String description, T defaultValue, Consumer<T> onChanged, Consumer<Setting<T>> onModuleActivated, IVisible visible) {
1716
super(name, description, defaultValue, onChanged, onModuleActivated, visible);
1817
}
1918

19+
public WidgetScreen createScreen(GuiTheme theme) {
20+
return this.get().createScreen(theme, this);
21+
}
22+
2023
@Override
2124
public void resetImpl() {
2225
if (value == null) value = defaultValue.copy();
@@ -47,7 +50,7 @@ public T load(NbtCompound tag) {
4750
return get();
4851
}
4952

50-
public static class Builder<T extends ICopyable<T> & ISerializable<T> & IScreenFactory> extends SettingBuilder<Builder<T>, T, GenericSetting<T>> {
53+
public static class Builder<T extends IGeneric<T>> extends SettingBuilder<Builder<T>, T, GenericSetting<T>> {
5154
public Builder() {
5255
super(null);
5356
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client).
3+
* Copyright (c) Meteor Development.
4+
*/
5+
6+
package meteordevelopment.meteorclient.settings;
7+
8+
import meteordevelopment.meteorclient.gui.GuiTheme;
9+
import meteordevelopment.meteorclient.gui.WidgetScreen;
10+
import meteordevelopment.meteorclient.utils.misc.ICopyable;
11+
import meteordevelopment.meteorclient.utils.misc.ISerializable;
12+
13+
public interface IGeneric<T extends IGeneric<T>> extends ICopyable<T>, ISerializable<T> {
14+
WidgetScreen createScreen(GuiTheme theme, GenericSetting<T> setting);
15+
}

src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPBlockData.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,17 @@
77

88
import meteordevelopment.meteorclient.gui.GuiTheme;
99
import meteordevelopment.meteorclient.gui.WidgetScreen;
10-
import meteordevelopment.meteorclient.gui.utils.IScreenFactory;
1110
import meteordevelopment.meteorclient.renderer.ShapeMode;
1211
import meteordevelopment.meteorclient.settings.BlockDataSetting;
12+
import meteordevelopment.meteorclient.settings.GenericSetting;
1313
import meteordevelopment.meteorclient.settings.IBlockData;
14+
import meteordevelopment.meteorclient.settings.IGeneric;
1415
import meteordevelopment.meteorclient.utils.misc.IChangeable;
15-
import meteordevelopment.meteorclient.utils.misc.ICopyable;
16-
import meteordevelopment.meteorclient.utils.misc.ISerializable;
1716
import meteordevelopment.meteorclient.utils.render.color.SettingColor;
1817
import net.minecraft.block.Block;
1918
import net.minecraft.nbt.NbtCompound;
2019

21-
public class ESPBlockData implements ICopyable<ESPBlockData>, ISerializable<ESPBlockData>, IChangeable, IBlockData<ESPBlockData>, IScreenFactory {
20+
public class ESPBlockData implements IGeneric<ESPBlockData>, IChangeable, IBlockData<ESPBlockData> {
2221
public ShapeMode shapeMode;
2322
public SettingColor lineColor;
2423
public SettingColor sideColor;
@@ -43,8 +42,8 @@ public WidgetScreen createScreen(GuiTheme theme, Block block, BlockDataSetting<E
4342
}
4443

4544
@Override
46-
public WidgetScreen createScreen(GuiTheme theme) {
47-
return new ESPBlockDataScreen(theme, this, null, null);
45+
public WidgetScreen createScreen(GuiTheme theme, GenericSetting<ESPBlockData> setting) {
46+
return new ESPBlockDataScreen(theme, this, setting);
4847
}
4948

5049
@Override

src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPBlockDataScreen.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,27 @@
1111
import meteordevelopment.meteorclient.settings.*;
1212
import meteordevelopment.meteorclient.utils.render.color.SettingColor;
1313
import net.minecraft.block.Block;
14+
import org.jetbrains.annotations.Nullable;
1415

1516
public class ESPBlockDataScreen extends WindowScreen {
1617
private final ESPBlockData blockData;
17-
private final Block block;
18-
private final BlockDataSetting<ESPBlockData> setting;
18+
private final Setting<?> setting;
19+
private final @Nullable Runnable firstChangeConsumer;
1920

2021
public ESPBlockDataScreen(GuiTheme theme, ESPBlockData blockData, Block block, BlockDataSetting<ESPBlockData> setting) {
22+
this(theme, blockData, setting, () -> setting.get().put(block, blockData));
23+
}
24+
25+
public ESPBlockDataScreen(GuiTheme theme, ESPBlockData blockData, GenericSetting<ESPBlockData> setting) {
26+
this(theme, blockData, setting, null);
27+
}
28+
29+
private ESPBlockDataScreen(GuiTheme theme, ESPBlockData blockData, Setting<?> setting, @Nullable Runnable firstChangeConsumer) {
2130
super(theme, "Configure Block");
2231

2332
this.blockData = blockData;
24-
this.block = block;
2533
this.setting = setting;
34+
this.firstChangeConsumer = firstChangeConsumer;
2635
}
2736

2837
@Override
@@ -106,11 +115,11 @@ public void initWidgets() {
106115
}
107116

108117
private void onChanged() {
109-
if (!blockData.isChanged() && block != null && setting != null) {
110-
setting.get().put(block, blockData);
111-
setting.onChanged();
118+
if (!blockData.isChanged() && firstChangeConsumer != null) {
119+
firstChangeConsumer.run();
112120
}
113121

122+
setting.onChanged();
114123
blockData.changed();
115124
}
116125
}

0 commit comments

Comments
 (0)