Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -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<T extends ICopyable<T> & ISerializable<T> & IScreenFactory> extends Setting<T> {
public class GenericSetting<T extends IGeneric<T>> extends Setting<T> {
public GenericSetting(String name, String description, T defaultValue, Consumer<T> onChanged, Consumer<Setting<T>> 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();
Expand Down Expand Up @@ -47,7 +50,7 @@ public T load(NbtCompound tag) {
return get();
}

public static class Builder<T extends ICopyable<T> & ISerializable<T> & IScreenFactory> extends SettingBuilder<Builder<T>, T, GenericSetting<T>> {
public static class Builder<T extends IGeneric<T>> extends SettingBuilder<Builder<T>, T, GenericSetting<T>> {
public Builder() {
super(null);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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<T extends IGeneric<T>> extends ICopyable<T>, ISerializable<T> {
WidgetScreen createScreen(GuiTheme theme, GenericSetting<T> setting);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<ESPBlockData>, ISerializable<ESPBlockData>, IChangeable, IBlockData<ESPBlockData>, IScreenFactory {
public class ESPBlockData implements IGeneric<ESPBlockData>, IChangeable, IBlockData<ESPBlockData> {
public ShapeMode shapeMode;
public SettingColor lineColor;
public SettingColor sideColor;
Expand All @@ -43,8 +42,8 @@ public WidgetScreen createScreen(GuiTheme theme, Block block, BlockDataSetting<E
}

@Override
public WidgetScreen createScreen(GuiTheme theme) {
return new ESPBlockDataScreen(theme, this, null, null);
public WidgetScreen createScreen(GuiTheme theme, GenericSetting<ESPBlockData> setting) {
return new ESPBlockDataScreen(theme, this, setting);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<ESPBlockData> setting;
private final Setting<?> setting;
private final @Nullable Runnable firstChangeConsumer;

public ESPBlockDataScreen(GuiTheme theme, ESPBlockData blockData, Block block, BlockDataSetting<ESPBlockData> setting) {
this(theme, blockData, setting, () -> setting.get().put(block, blockData));
}

public ESPBlockDataScreen(GuiTheme theme, ESPBlockData blockData, GenericSetting<ESPBlockData> 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
Expand Down Expand Up @@ -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();
}
}