diff --git a/src/main/java/com/lambda/mixin/gui/MixinGuiMainMenu.java b/src/main/java/com/lambda/mixin/gui/MixinGuiMainMenu.java index a357edfca..045116257 100644 --- a/src/main/java/com/lambda/mixin/gui/MixinGuiMainMenu.java +++ b/src/main/java/com/lambda/mixin/gui/MixinGuiMainMenu.java @@ -19,8 +19,10 @@ @Mixin(GuiMainMenu.class) public abstract class MixinGuiMainMenu extends GuiScreen { - private int widthVersion; - private int widthVersionRest; + private int widthWatermark; + private int widthWatermarkRest; + private int widthUpdate; + private int widthUpdateRest; @Inject(method = "initGui", at = @At("RETURN")) public void initGui$Inject$RETURN(CallbackInfo ci) { @@ -33,29 +35,52 @@ public abstract class MixinGuiMainMenu extends GuiScreen { KamiCheck.INSTANCE.setDidDisplayWarning(true); mc.displayGuiScreen(new LambdaGuiIncompat()); } + + // Version FontRenderer fr = fontRenderer; - String slogan = TextFormatting.WHITE + LambdaMod.NAME + " " + TextFormatting.GRAY + LambdaMod.VERSION; - String version; + String watermark = TextFormatting.WHITE + LambdaMod.NAME + " " + TextFormatting.GRAY + LambdaMod.VERSION; + String update; + if (WebUtils.INSTANCE.isLatestVersion()) { - version = ""; + update = ""; } else { - version = TextFormatting.DARK_RED + " Update Available! (" + WebUtils.INSTANCE.getLatestVersion() + ")"; + update = TextFormatting.DARK_RED + " Update Available! (" + WebUtils.INSTANCE.getLatestVersion() + ")"; + } + + String combined = watermark + update; + drawString(fr, combined, width - fr.getStringWidth(combined) - 2, height - 20, -1); + + widthWatermark = fr.getStringWidth(watermark); + widthWatermarkRest = width - widthWatermark - 2; + widthUpdate = fr.getStringWidth(update); + widthUpdateRest = width - widthUpdate - 2; + + if (isInside(mouseX, mouseY, widthUpdate, widthUpdateRest)) { + drawRect(widthUpdateRest, height - 11, widthUpdate + widthUpdateRest, height - 10, -1); } - String combined = slogan + version; - drawString(fr, combined, width - fr.getStringWidth(combined) - 2, this.height - 20, -1); - widthVersion = fr.getStringWidth(version); - widthVersionRest = width - widthVersion - 2; - if (mouseX > widthVersionRest && mouseX < widthVersionRest + widthVersion && mouseY > height - 20 && mouseY < height - 10 && Mouse.isInsideWindow()) { - drawRect(widthVersionRest, height - 11, widthVersion + widthVersionRest, height - 10, -1); + if (isInside(mouseX, mouseY, widthWatermark, widthWatermarkRest)) { + drawRect(widthWatermarkRest, height - 11, widthWatermark + widthWatermarkRest, height - 10, -1); } + } @Inject(method = "mouseClicked", at = @At("RETURN")) public void mouseClicked$Inject$RETURN(int mouseX, int mouseY, int mouseButton, CallbackInfo ci) { - if (mouseX > widthVersionRest && mouseX < widthVersionRest + widthVersion && mouseY > height - 20 && mouseY < height - 10) { + if (isInside(mouseX, mouseY, widthUpdate, widthUpdateRest) + && !WebUtils.INSTANCE.isLatestVersion() + ) { WebUtils.INSTANCE.openWebLink(LambdaMod.DOWNLOAD_LINK); } + + if (isInside(mouseX, mouseY, widthWatermark, widthWatermarkRest)) { + if (mouseButton == 0) { + MenuShader.setNextShader(); + } else { + MenuShader.setPreviousShader(); + } + MenuShader.reset(); + } } @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 { ci.cancel(); } } + + private boolean isInside(int mouseX, int mouseY, int base, int rest) { + return mouseX > rest + && mouseX < rest + base + && mouseY > height - 20 + && mouseY < height - 10 + && Mouse.isInsideWindow(); + } } diff --git a/src/main/kotlin/com/lambda/client/commons/extension/Enum.kt b/src/main/kotlin/com/lambda/client/commons/extension/Enum.kt index c69b6a481..d361d17a0 100644 --- a/src/main/kotlin/com/lambda/client/commons/extension/Enum.kt +++ b/src/main/kotlin/com/lambda/client/commons/extension/Enum.kt @@ -7,5 +7,9 @@ fun > E.next(): E = declaringJavaClass.enumConstants.run { get((ordinal + 1) % size) } +fun > E.previous(): E = declaringJavaClass.enumConstants.run { + get((ordinal - 1).mod(size)) +} + fun Enum<*>.readableName() = (this as? DisplayEnum)?.displayName ?: name.mapEach('_') { low -> low.lowercase().capitalize() }.joinToString(" ") \ No newline at end of file diff --git a/src/main/kotlin/com/lambda/client/module/modules/client/MenuShader.kt b/src/main/kotlin/com/lambda/client/module/modules/client/MenuShader.kt index ced1142da..58bc430e6 100644 --- a/src/main/kotlin/com/lambda/client/module/modules/client/MenuShader.kt +++ b/src/main/kotlin/com/lambda/client/module/modules/client/MenuShader.kt @@ -1,6 +1,8 @@ package com.lambda.client.module.modules.client import com.lambda.client.LambdaMod +import com.lambda.client.commons.extension.next +import com.lambda.client.commons.extension.previous import com.lambda.client.module.Category import com.lambda.client.module.Module import com.lambda.client.util.Wrapper @@ -20,7 +22,7 @@ object MenuShader : Module( enabledByDefault = true ) { private val mode by setting("Mode", Mode.SET) - private val shader by setting("Shader", ShaderEnum.CLOUDS, { mode == Mode.SET }) + private val shader = setting("Shader", ShaderEnum.CLOUDS, { mode == Mode.SET }) private enum class Mode { RANDOM, SET @@ -28,9 +30,9 @@ object MenuShader : Module( @Suppress("UNUSED") private enum class ShaderEnum(val path: String) { - BLUEGRID("/assets/shaders/menu/bluegrid.fsh"), - BLUENEBULA("/assets/shaders/menu/bluenebula.fsh"), - BLUEVORTEX("/assets/shaders/menu/bluevortex.fsh"), + BLUE_GRID("/assets/shaders/menu/bluegrid.fsh"), + BLUE_NEBULA("/assets/shaders/menu/bluenebula.fsh"), + BLUE_VORTEX("/assets/shaders/menu/bluevortex.fsh"), CAVE("/assets/shaders/menu/cave.fsh"), CLOUDS("/assets/shaders/menu/clouds.fsh"), DOUGHNUTS("/assets/shaders/menu/doughnuts.fsh"), @@ -38,9 +40,9 @@ object MenuShader : Module( JUPITER("/assets/shaders/menu/jupiter.fsh"), MATRIX("/assets/shaders/menu/matrix.fsh"), MINECRAFT("/assets/shaders/menu/minecraft.fsh"), - PURPLEGRID("/assets/shaders/menu/purplegrid.fsh"), - PURPLEMIST("/assets/shaders/menu/purplemist.fsh"), - REDGLOW("/assets/shaders/menu/redglow.fsh"), + PURPLE_GRID("/assets/shaders/menu/purplegrid.fsh"), + PURPLE_MIST("/assets/shaders/menu/purplemist.fsh"), + RED_GLOW("/assets/shaders/menu/redglow.fsh"), SKY("/assets/shaders/menu/sky.fsh"), SNAKE("/assets/shaders/menu/snake.fsh"), SPACE("/assets/shaders/menu/space.fsh"), @@ -66,11 +68,21 @@ object MenuShader : Module( currentShader = getShader() } + @JvmStatic + fun setNextShader() { + shader.value = shader.value.next() + } + + @JvmStatic + fun setPreviousShader() { + shader.value = shader.value.previous() + } + private fun getShader(): ShaderProgram { val shader = if (mode == Mode.RANDOM) { ShaderEnum.values().random() } else { - shader + shader.value } return shaderCache.getOrPut(shader) {