Skip to content

Commit 0653c53

Browse files
ModuleList meteor rainbow. And some changes to settings
1 parent affdfef commit 0653c53

File tree

4 files changed

+126
-14
lines changed

4 files changed

+126
-14
lines changed

src/main/java/dev/heliosclient/hud/hudelements/ModuleList.java

Lines changed: 100 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,102 @@
99
import dev.heliosclient.managers.EventManager;
1010
import dev.heliosclient.managers.ModuleManager;
1111
import dev.heliosclient.module.Module_;
12-
import dev.heliosclient.util.ColorUtils;
13-
import dev.heliosclient.util.TimerUtils;
12+
import dev.heliosclient.module.settings.CycleSetting;
13+
import dev.heliosclient.module.settings.DoubleSetting;
14+
import dev.heliosclient.module.settings.SettingGroup;
1415
import dev.heliosclient.util.render.Renderer2D;
1516
import net.minecraft.client.font.TextRenderer;
1617
import net.minecraft.client.gui.DrawContext;
1718

1819
import java.awt.*;
1920
import java.util.ArrayList;
20-
import java.util.Collections;
2121
import java.util.Comparator;
22+
import java.util.List;
2223

24+
import static dev.heliosclient.hud.hudelements.ModuleList.ColorMode.METEOR;
25+
import static dev.heliosclient.hud.hudelements.ModuleList.Sort.*;
2326

27+
/**
28+
* Color credits: <a href="https://github.com/MeteorDevelopment/meteor-client/">Meteor-Client</a>
29+
*/
2430
public class ModuleList extends HudElement implements Listener {
2531

2632
private ArrayList<Module_> enabledModules = ModuleManager.INSTANCE.getEnabledModules();
2733
private Color rainbow = new Color(255, 255, 255);
2834
private double rainbowHue1;
2935
private double rainbowHue2;
3036

37+
public SettingGroup sgSettings = new SettingGroup("Settings");
38+
39+
private final CycleSetting sort = sgSettings.add(new CycleSetting.Builder()
40+
.name("Sort")
41+
.description("Sorting method used for displaying modules")
42+
.value(List.of(Sort.values()))
43+
.onSettingChange(this)
44+
.defaultListOption(Biggest)
45+
.build()
46+
);
47+
private final CycleSetting colorMode = sgSettings.add(new CycleSetting.Builder()
48+
.name("Color Mode")
49+
.description("Mode of the color displayed")
50+
.value(List.of(ColorMode.values()))
51+
.onSettingChange(this)
52+
.defaultListOption(METEOR)
53+
.build()
54+
);
55+
56+
private final DoubleSetting rainbowSpeed = sgSettings.add(new DoubleSetting.Builder()
57+
.name("Rainbow Speed")
58+
.description("Speed of rainbow")
59+
.onSettingChange(this)
60+
.min(0.001d)
61+
.max(0.2d)
62+
.roundingPlace(3)
63+
.value(0.05d)
64+
.shouldRender(()-> (ColorMode) colorMode.getOption() == METEOR)
65+
.build()
66+
);
67+
private final DoubleSetting rainbowSpread = sgSettings.add(new DoubleSetting.Builder()
68+
.name("Rainbow Spread")
69+
.description("Spread of rainbow")
70+
.onSettingChange(this)
71+
.min(0.001f)
72+
.max(0.05f)
73+
.roundingPlace(3)
74+
.value(0.1d)
75+
.shouldRender(()-> (ColorMode) colorMode.getOption() == METEOR)
76+
.build()
77+
);
78+
private final DoubleSetting rainbowSaturation = sgSettings.add(new DoubleSetting.Builder()
79+
.name("Rainbow Saturation")
80+
.description("Saturation of rainbow")
81+
.onSettingChange(this)
82+
.min(0.0)
83+
.max(1d)
84+
.roundingPlace(2)
85+
.value(1d)
86+
.defaultValue(1d)
87+
.shouldRender(()-> (ColorMode) colorMode.getOption() == METEOR)
88+
.build()
89+
);
90+
private final DoubleSetting rainbowBrightness = sgSettings.add(new DoubleSetting.Builder()
91+
.name("Rainbow Brightness")
92+
.description("Brightness of rainbow")
93+
.onSettingChange(this)
94+
.min(0.0)
95+
.max(1d)
96+
.roundingPlace(2)
97+
.value(1d)
98+
.defaultValue(1d)
99+
.shouldRender(()-> (ColorMode) colorMode.getOption() == METEOR)
100+
.build()
101+
);
102+
31103
public ModuleList() {
32104
super(DATA);
33105
this.width = 50;
34106
EventManager.register(this);
107+
addSettingGroup(sgSettings);
35108
}
36109

37110
public static HudElementData<ModuleList> DATA = new HudElementData<>("Module List", "Shows enabled modules", ModuleList::new);
@@ -46,11 +119,13 @@ public void renderElement(DrawContext drawContext, TextRenderer textRenderer) {
46119
int nameWidth = Math.round(Renderer2D.getStringWidth(m.name));
47120
maxWidth = Math.max(maxWidth, nameWidth);
48121
}
49-
rainbowHue1 += 0.01f * mc.getTickDelta();
50-
if (rainbowHue1 > 1) rainbowHue1 -= 1;
51-
else if (rainbowHue1 < -1) rainbowHue1 += 1;
122+
if(colorMode.getOption() == METEOR) {
123+
rainbowHue1 += rainbowSpeed.value * mc.getTickDelta();
124+
if (rainbowHue1 > 1) rainbowHue1 -= 1;
125+
else if (rainbowHue1 < -1) rainbowHue1 += 1;
52126

53-
rainbowHue2 = rainbowHue1;
127+
rainbowHue2 = rainbowHue1;
128+
}
54129

55130
// Render each module with a different color
56131
this.width = maxWidth + 5;
@@ -70,8 +145,10 @@ public void renderElement(DrawContext drawContext, TextRenderer textRenderer) {
70145
x - 2 + width, yOffset, 2,
71146
Math.round(Renderer2D.getStringHeight()) + 3, HeliosClient.uiColor);
72147

73-
rainbowHue2 += 2f;
74-
rainbow = new Color(Color.HSBtoRGB((float) rainbowHue2, 1f, 1f));
148+
if(colorMode.getOption() == METEOR) {
149+
rainbowHue2 += rainbowSpread.value;
150+
rainbow = new Color(Color.HSBtoRGB((float) rainbowHue2, (float) rainbowSaturation.value, (float) rainbowBrightness.value));
151+
}
75152
// Draw the module name
76153
Renderer2D.drawString(drawContext.getMatrices(), m.name,
77154
x - 4 + width - nameWidth, 1 + yOffset,
@@ -85,6 +162,19 @@ public void renderElement(DrawContext drawContext, TextRenderer textRenderer) {
85162
@SubscribeEvent
86163
public void update(TickEvent.CLIENT event) {
87164
enabledModules = ModuleManager.INSTANCE.getEnabledModules();
88-
enabledModules.sort(Comparator.comparing(module -> Renderer2D.getStringWidth(module.name), Comparator.reverseOrder()));
165+
enabledModules.sort((mod1, mod2) -> switch ((Sort)sort.getOption()) {
166+
case Alphabetical -> mod1.name.compareTo(mod2.name);
167+
case Biggest -> Double.compare( Renderer2D.getStringWidth(mod2.name), Renderer2D.getStringWidth(mod1.name));
168+
case Smallest -> Double.compare(Renderer2D.getStringWidth(mod1.name), Renderer2D.getStringWidth(mod2.name));
169+
});
170+
}
171+
172+
public enum Sort {
173+
Alphabetical,
174+
Biggest,
175+
Smallest
176+
}
177+
public enum ColorMode {
178+
METEOR
89179
}
90180
}

src/main/java/dev/heliosclient/module/settings/CycleSetting.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,11 @@ public void loadFromToml(Map<String, Object> MAP, Toml toml) {
151151
return;
152152
}
153153
}
154-
LOGGER.error("Option not found for: " + mapGet + ", " + name + " Setting during loading config: " + Config.MODULES);
154+
LOGGER.error("Option not found for: {}, {} Setting during loading config: {}", mapGet, name, Config.MODULES);
155+
}
156+
157+
public Object getOption() {
158+
return options.get(value);
155159
}
156160

157161
public static class Builder extends SettingBuilder<Builder, List<?>, CycleSetting> {
@@ -172,6 +176,15 @@ public Builder defaultListIndex(int defaultListIndex) {
172176
this.defaultListIndex = defaultListIndex;
173177
return this;
174178
}
179+
public Builder defaultListOption(Object o) {
180+
if(value == null){
181+
throw new NullPointerException("Option List is null, could not add default option");
182+
}
183+
if(value.contains(o)) {
184+
this.defaultListIndex = value.indexOf(o);
185+
}
186+
return this;
187+
}
175188

176189
/**
177190
* Option order should be corresponding to value list order

src/main/java/dev/heliosclient/module/settings/DoubleSetting.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import dev.heliosclient.util.interfaces.ISettingChange;
1212
import net.minecraft.client.font.TextRenderer;
1313
import net.minecraft.client.gui.DrawContext;
14+
import net.minecraft.util.math.MathHelper;
1415
import org.lwjgl.glfw.GLFW;
1516

1617
import java.awt.*;
@@ -44,17 +45,20 @@ public void render(DrawContext drawContext, int x, int y, int mouseX, int mouseY
4445
int defaultColor = ColorManager.INSTANCE.defaultTextColor();
4546

4647
Renderer2D.drawFixedString(drawContext.getMatrices(), name, x + 2, y + 2, defaultColor);
48+
//I dont understand these calculations.
4749
double diff = Math.min(100, Math.max(0, (mouseX - x) / 1.9));
4850

4951
if (sliding) {
50-
if (diff == 0) {
52+
if (diff <= 0) {
5153
value = min;
5254
} else {
5355
value = MathUtils.round(((diff / 100) * (max - min) + min), roundingPlace);
5456
}
5557
iSettingChange.onSettingChange(this);
5658
}
5759

60+
value = MathHelper.clamp(value,min,max);
61+
5862
float valueWidth = Renderer2D.getFxStringWidth(value + ".00") + 3;
5963

6064
inputBox.render(drawContext, (x + 180) - Math.round(valueWidth), y + 2, mouseX, mouseY, textRenderer);
@@ -91,14 +95,14 @@ public void renderCompact(DrawContext drawContext, int x, int y, int mouseX, int
9195
double diff = Math.min(moduleWidth - 10, Math.max(0, (mouseX - x)));
9296

9397
if (sliding) {
94-
if (diff == 0) {
98+
if (diff <= 0) {
9599
value = min;
96100
} else {
97101
value = MathUtils.round(((diff / (moduleWidth - 10)) * (max - min) + min), roundingPlace);
98102
}
99103
iSettingChange.onSettingChange(this);
100104
}
101-
105+
value = MathHelper.clamp(value,min,max);
102106
String valueString = "" + MathUtils.round(value, roundingPlace);
103107
FontRenderers.Small_fxfontRenderer.drawString(drawContext.getMatrices(), valueString, (x + moduleWidth - 10) - FontRenderers.Small_fxfontRenderer.getStringWidth(valueString), y + 2, ColorManager.INSTANCE.defaultTextColor());
104108
Renderer2D.drawRoundedRectangle(drawContext.getMatrices().peek().getPositionMatrix(), x + 2, y + 16, moduleWidth - 8, 2, 1, 0xFFAAAAAA);

src/main/java/dev/heliosclient/module/settings/ListSetting.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package dev.heliosclient.module.settings;
22

3+
import com.google.common.base.Enums;
34
import com.moandjiezana.toml.Toml;
5+
import de.javagl.obj.Obj;
46
import dev.heliosclient.managers.ColorManager;
57
import dev.heliosclient.ui.clickgui.ClickGUIScreen;
68
import dev.heliosclient.ui.clickgui.ListSettingScreen;
79
import dev.heliosclient.util.render.Renderer2D;
10+
import it.unimi.dsi.fastutil.Arrays;
811
import net.minecraft.client.MinecraftClient;
912
import net.minecraft.client.font.TextRenderer;
1013
import net.minecraft.client.gui.DrawContext;
@@ -15,6 +18,7 @@
1518
import java.util.Map;
1619
import java.util.function.BooleanSupplier;
1720

21+
@Deprecated
1822
public class ListSetting extends Setting<ArrayList<String>> {
1923
public ArrayList<String> options;
2024
Screen parentScreen;
@@ -85,6 +89,7 @@ public Builder options(ArrayList<String> options) {
8589
return this;
8690
}
8791

92+
8893
@Override
8994
public ListSetting build() {
9095
return new ListSetting(name, description, options, value, shouldRender, defaultValue);

0 commit comments

Comments
 (0)