Skip to content

Commit 827ef82

Browse files
authored
Added feature to change MenuShader in main menu (#411)
1 parent c52481d commit 827ef82

File tree

3 files changed

+70
-21
lines changed

3 files changed

+70
-21
lines changed

src/main/java/com/lambda/mixin/gui/MixinGuiMainMenu.java

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
@Mixin(GuiMainMenu.class)
2020
public abstract class MixinGuiMainMenu extends GuiScreen {
2121

22-
private int widthVersion;
23-
private int widthVersionRest;
22+
private int widthWatermark;
23+
private int widthWatermarkRest;
24+
private int widthUpdate;
25+
private int widthUpdateRest;
2426

2527
@Inject(method = "initGui", at = @At("RETURN"))
2628
public void initGui$Inject$RETURN(CallbackInfo ci) {
@@ -33,29 +35,52 @@ public abstract class MixinGuiMainMenu extends GuiScreen {
3335
KamiCheck.INSTANCE.setDidDisplayWarning(true);
3436
mc.displayGuiScreen(new LambdaGuiIncompat());
3537
}
38+
39+
// Version
3640
FontRenderer fr = fontRenderer;
37-
String slogan = TextFormatting.WHITE + LambdaMod.NAME + " " + TextFormatting.GRAY + LambdaMod.VERSION;
38-
String version;
41+
String watermark = TextFormatting.WHITE + LambdaMod.NAME + " " + TextFormatting.GRAY + LambdaMod.VERSION;
42+
String update;
43+
3944
if (WebUtils.INSTANCE.isLatestVersion()) {
40-
version = "";
45+
update = "";
4146
} else {
42-
version = TextFormatting.DARK_RED + " Update Available! (" + WebUtils.INSTANCE.getLatestVersion() + ")";
47+
update = TextFormatting.DARK_RED + " Update Available! (" + WebUtils.INSTANCE.getLatestVersion() + ")";
48+
}
49+
50+
String combined = watermark + update;
51+
drawString(fr, combined, width - fr.getStringWidth(combined) - 2, height - 20, -1);
52+
53+
widthWatermark = fr.getStringWidth(watermark);
54+
widthWatermarkRest = width - widthWatermark - 2;
55+
widthUpdate = fr.getStringWidth(update);
56+
widthUpdateRest = width - widthUpdate - 2;
57+
58+
if (isInside(mouseX, mouseY, widthUpdate, widthUpdateRest)) {
59+
drawRect(widthUpdateRest, height - 11, widthUpdate + widthUpdateRest, height - 10, -1);
4360
}
44-
String combined = slogan + version;
45-
drawString(fr, combined, width - fr.getStringWidth(combined) - 2, this.height - 20, -1);
4661

47-
widthVersion = fr.getStringWidth(version);
48-
widthVersionRest = width - widthVersion - 2;
49-
if (mouseX > widthVersionRest && mouseX < widthVersionRest + widthVersion && mouseY > height - 20 && mouseY < height - 10 && Mouse.isInsideWindow()) {
50-
drawRect(widthVersionRest, height - 11, widthVersion + widthVersionRest, height - 10, -1);
62+
if (isInside(mouseX, mouseY, widthWatermark, widthWatermarkRest)) {
63+
drawRect(widthWatermarkRest, height - 11, widthWatermark + widthWatermarkRest, height - 10, -1);
5164
}
65+
5266
}
5367

5468
@Inject(method = "mouseClicked", at = @At("RETURN"))
5569
public void mouseClicked$Inject$RETURN(int mouseX, int mouseY, int mouseButton, CallbackInfo ci) {
56-
if (mouseX > widthVersionRest && mouseX < widthVersionRest + widthVersion && mouseY > height - 20 && mouseY < height - 10) {
70+
if (isInside(mouseX, mouseY, widthUpdate, widthUpdateRest)
71+
&& !WebUtils.INSTANCE.isLatestVersion()
72+
) {
5773
WebUtils.INSTANCE.openWebLink(LambdaMod.DOWNLOAD_LINK);
5874
}
75+
76+
if (isInside(mouseX, mouseY, widthWatermark, widthWatermarkRest)) {
77+
if (mouseButton == 0) {
78+
MenuShader.setNextShader();
79+
} else {
80+
MenuShader.setPreviousShader();
81+
}
82+
MenuShader.reset();
83+
}
5984
}
6085

6186
@Redirect(method = "drawScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiMainMenu;drawGradientRect(IIIIII)V"))
@@ -72,4 +97,12 @@ public abstract class MixinGuiMainMenu extends GuiScreen {
7297
ci.cancel();
7398
}
7499
}
100+
101+
private boolean isInside(int mouseX, int mouseY, int base, int rest) {
102+
return mouseX > rest
103+
&& mouseX < rest + base
104+
&& mouseY > height - 20
105+
&& mouseY < height - 10
106+
&& Mouse.isInsideWindow();
107+
}
75108
}

src/main/kotlin/com/lambda/client/commons/extension/Enum.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,9 @@ fun <E : Enum<E>> E.next(): E = declaringJavaClass.enumConstants.run {
77
get((ordinal + 1) % size)
88
}
99

10+
fun <E : Enum<E>> E.previous(): E = declaringJavaClass.enumConstants.run {
11+
get((ordinal - 1).mod(size))
12+
}
13+
1014
fun Enum<*>.readableName() = (this as? DisplayEnum)?.displayName
1115
?: name.mapEach('_') { low -> low.lowercase().capitalize() }.joinToString(" ")

src/main/kotlin/com/lambda/client/module/modules/client/MenuShader.kt

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.lambda.client.module.modules.client
22

33
import com.lambda.client.LambdaMod
4+
import com.lambda.client.commons.extension.next
5+
import com.lambda.client.commons.extension.previous
46
import com.lambda.client.module.Category
57
import com.lambda.client.module.Module
68
import com.lambda.client.util.Wrapper
@@ -20,27 +22,27 @@ object MenuShader : Module(
2022
enabledByDefault = true
2123
) {
2224
private val mode by setting("Mode", Mode.SET)
23-
private val shader by setting("Shader", ShaderEnum.CLOUDS, { mode == Mode.SET })
25+
private val shader = setting("Shader", ShaderEnum.CLOUDS, { mode == Mode.SET })
2426

2527
private enum class Mode {
2628
RANDOM, SET
2729
}
2830

2931
@Suppress("UNUSED")
3032
private enum class ShaderEnum(val path: String) {
31-
BLUEGRID("/assets/shaders/menu/bluegrid.fsh"),
32-
BLUENEBULA("/assets/shaders/menu/bluenebula.fsh"),
33-
BLUEVORTEX("/assets/shaders/menu/bluevortex.fsh"),
33+
BLUE_GRID("/assets/shaders/menu/bluegrid.fsh"),
34+
BLUE_NEBULA("/assets/shaders/menu/bluenebula.fsh"),
35+
BLUE_VORTEX("/assets/shaders/menu/bluevortex.fsh"),
3436
CAVE("/assets/shaders/menu/cave.fsh"),
3537
CLOUDS("/assets/shaders/menu/clouds.fsh"),
3638
DOUGHNUTS("/assets/shaders/menu/doughnuts.fsh"),
3739
FIRE("/assets/shaders/menu/fire.fsh"),
3840
JUPITER("/assets/shaders/menu/jupiter.fsh"),
3941
MATRIX("/assets/shaders/menu/matrix.fsh"),
4042
MINECRAFT("/assets/shaders/menu/minecraft.fsh"),
41-
PURPLEGRID("/assets/shaders/menu/purplegrid.fsh"),
42-
PURPLEMIST("/assets/shaders/menu/purplemist.fsh"),
43-
REDGLOW("/assets/shaders/menu/redglow.fsh"),
43+
PURPLE_GRID("/assets/shaders/menu/purplegrid.fsh"),
44+
PURPLE_MIST("/assets/shaders/menu/purplemist.fsh"),
45+
RED_GLOW("/assets/shaders/menu/redglow.fsh"),
4446
SKY("/assets/shaders/menu/sky.fsh"),
4547
SNAKE("/assets/shaders/menu/snake.fsh"),
4648
SPACE("/assets/shaders/menu/space.fsh"),
@@ -66,11 +68,21 @@ object MenuShader : Module(
6668
currentShader = getShader()
6769
}
6870

71+
@JvmStatic
72+
fun setNextShader() {
73+
shader.value = shader.value.next()
74+
}
75+
76+
@JvmStatic
77+
fun setPreviousShader() {
78+
shader.value = shader.value.previous()
79+
}
80+
6981
private fun getShader(): ShaderProgram {
7082
val shader = if (mode == Mode.RANDOM) {
7183
ShaderEnum.values().random()
7284
} else {
73-
shader
85+
shader.value
7486
}
7587

7688
return shaderCache.getOrPut(shader) {

0 commit comments

Comments
 (0)