Skip to content

Commit 5861b34

Browse files
committed
feat: (clickgui) draggable search, no-cache UI serving, and stronger NextGen group headers
The search field can now be dragged anywhere (click and hold to move) instead of being fixed over the top category. The NextGen server sends no-cache on the UI shell so a rebuilt theme always shows instead of the browser keeping a stale copy. NextGen group headers (e.g. General, Next Gen) now render as a real section bar with a background, left accent and bolder title instead of plain text.
1 parent e615291 commit 5861b34

6 files changed

Lines changed: 55 additions & 8 deletions

File tree

‎nextgen-theme/src/routes/clickgui/setting/ConfigurableSetting.svelte‎

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,23 @@
5959
.title {
6060
color: var(--clickgui-text-color);
6161
font-size: 12px;
62-
font-weight: 600;
62+
font-weight: 700;
63+
letter-spacing: 0.2px;
6364
}
6465
6566
.head {
6667
display: flex;
6768
justify-content: space-between;
69+
align-items: center;
70+
padding: 6px 9px;
71+
background-color: var(--clickgui-dropdown-trigger-background-color);
72+
border-left: solid 2px var(--clickgui-setting-group-border-color);
73+
border-radius: 3px;
74+
cursor: pointer;
6875
transition: ease margin-bottom .2s;
6976
7077
&.expanded {
71-
margin-bottom: 10px;
78+
margin-bottom: 8px;
7279
}
7380
}
7481

‎src/main/java/net/ccbluex/liquidbounce/ui/client/clickgui/ModuleSearch.kt‎

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@
66
package net.ccbluex.liquidbounce.ui.client.clickgui
77

88
import net.ccbluex.liquidbounce.features.module.Module
9+
import net.minecraft.client.Minecraft
910
import net.minecraft.client.gui.FontRenderer
1011
import net.minecraft.client.gui.Gui
12+
import net.minecraft.client.gui.ScaledResolution
1113
import net.minecraft.util.ChatAllowedCharacters
1214
import org.lwjgl.input.Keyboard
15+
import org.lwjgl.input.Mouse
1316
import java.text.Normalizer
1417
import java.util.Locale
1518

@@ -30,6 +33,13 @@ class ModuleSearch {
3033
private var fieldRight = 0
3134
private var fieldBottom = 0
3235

36+
// Draggable position: -1 means "not placed yet", fall back to the default top-center anchor.
37+
private var posX = -1
38+
private var posY = -1
39+
private var dragging = false
40+
private var dragOffsetX = 0
41+
private var dragOffsetY = 0
42+
3343
fun matches(module: Module): Boolean {
3444
if (!active) return true
3545

@@ -78,7 +88,15 @@ class ModuleSearch {
7888
/** Returns true only when the search field consumed the click. */
7989
fun mouseClicked(mouseX: Int, mouseY: Int, mouseButton: Int): Boolean {
8090
val hovered = mouseX in fieldLeft..fieldRight && mouseY in fieldTop..fieldBottom
81-
if (mouseButton == 0) focused = hovered
91+
if (mouseButton == 0) {
92+
focused = hovered
93+
if (hovered) {
94+
// Clicking grabs the field; holding and moving drags it, a plain click just focuses.
95+
dragging = true
96+
dragOffsetX = mouseX - fieldLeft
97+
dragOffsetY = mouseY - fieldTop
98+
}
99+
}
82100
if (!hovered) return false
83101

84102
if (mouseButton == 1) {
@@ -89,8 +107,27 @@ class ModuleSearch {
89107
}
90108

91109
fun draw(font: FontRenderer, screenWidth: Int, accentColor: Int) {
92-
fieldLeft = screenWidth / 2 - FIELD_WIDTH / 2
93-
fieldTop = FIELD_MARGIN
110+
val mc = Minecraft.getMinecraft()
111+
val sr = ScaledResolution(mc)
112+
113+
if (posX < 0) {
114+
posX = screenWidth / 2 - FIELD_WIDTH / 2
115+
posY = FIELD_MARGIN
116+
}
117+
118+
if (dragging) {
119+
if (Mouse.isButtonDown(0)) {
120+
val mouseX = Mouse.getX() * sr.scaledWidth / mc.displayWidth
121+
val mouseY = sr.scaledHeight - Mouse.getY() * sr.scaledHeight / mc.displayHeight - 1
122+
posX = (mouseX - dragOffsetX).coerceIn(0, screenWidth - FIELD_WIDTH)
123+
posY = (mouseY - dragOffsetY).coerceIn(0, sr.scaledHeight - FIELD_HEIGHT)
124+
} else {
125+
dragging = false
126+
}
127+
}
128+
129+
fieldLeft = posX
130+
fieldTop = posY
94131
fieldRight = fieldLeft + FIELD_WIDTH
95132
fieldBottom = fieldTop + FIELD_HEIGHT
96133

‎src/main/java/net/ccbluex/liquidbounce/ui/client/clickgui/style/styles/nextgen/NextGenClickGuiServer.kt‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,9 @@ object NextGenClickGuiServer {
391391
}
392392

393393
exchange.responseHeaders.set("Content-Type", mimeType(requested))
394+
// Never let the embedded browser cache the UI shell, otherwise a rebuilt theme keeps
395+
// showing the old markup; hashed asset names already handle their own busting.
396+
exchange.responseHeaders.set("Cache-Control", "no-cache, no-store, must-revalidate")
394397
exchange.sendResponseHeaders(200, bytes.size.toLong())
395398
exchange.responseBody.use { it.write(bytes) }
396399
}

src/main/resources/assets/minecraft/fdpclient/nextgen-clickgui/assets/index-BJrVYPmL.js renamed to src/main/resources/assets/minecraft/fdpclient/nextgen-clickgui/assets/index-CafY7L3m.js

File renamed without changes.

src/main/resources/assets/minecraft/fdpclient/nextgen-clickgui/assets/index-DS3d8o-F.css renamed to src/main/resources/assets/minecraft/fdpclient/nextgen-clickgui/assets/index-CqIkm1hY.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/main/resources/assets/minecraft/fdpclient/nextgen-clickgui/index.html‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
color: #fff;
2323
}
2424
</style>
25-
<script type="module" crossorigin src="./assets/index-BJrVYPmL.js"></script>
26-
<link rel="stylesheet" crossorigin href="./assets/index-DS3d8o-F.css">
25+
<script type="module" crossorigin src="./assets/index-CafY7L3m.js"></script>
26+
<link rel="stylesheet" crossorigin href="./assets/index-CqIkm1hY.css">
2727
</head>
2828

2929
<body>

0 commit comments

Comments
 (0)