Skip to content

Commit 26649b0

Browse files
committed
fix(ui): restore hitbox gl state and follow game scale by default
1 parent 294bbe6 commit 26649b0

6 files changed

Lines changed: 58 additions & 60 deletions

File tree

src/main/java/top/fpsmaster/features/impl/interfaces/ClientSettings.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,23 @@ public class ClientSettings extends InterfaceModule {
2424
public static ModeSetting language = new ModeSetting("Language", 1, "English", "Chinese");
2525
public static BooleanSetting blur = new BooleanSetting("blur", false);
2626
public static BindSetting keyBind = new BindSetting("ClickGuiKey", Keyboard.KEY_RSHIFT);
27-
public static BooleanSetting fixedScaleEnabled = new BooleanSetting("FixedScaleEnabled", true);
27+
public static BooleanSetting followGameScale = new BooleanSetting("FixedScaleEnabled", true);
2828
private static final double[] SCALE_VALUES = new double[]{
2929
0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 2.5, 3.0
3030
};
3131
public static ModeSetting fixedScale = new ModeSetting(
3232
"FixedScale",
33-
3,
34-
() -> fixedScaleEnabled.getValue(),
33+
2,
3534
"0.5x", "0.75x", "1x", "1.25x", "1.5x", "2x", "2.5x", "3x"
3635
);
3736
public static BooleanSetting clientCommand = new BooleanSetting("Command", true);
3837
public static final TextSetting prefix = new TextSetting("prefix", "#", () -> clientCommand.getValue());
3938

40-
public static boolean isFixedScaleEnabled() {
41-
return fixedScaleEnabled.getValue();
39+
public static boolean isFollowGameScaleEnabled() {
40+
return followGameScale.getValue();
4241
}
4342

4443
public static double getUiScaleMultiplier() {
45-
if (!fixedScaleEnabled.getValue()) {
46-
return 1.0;
47-
}
4844
int index = fixedScale.getValue();
4945
if (index < 0 || index >= SCALE_VALUES.length) {
5046
return 1.0;
@@ -57,13 +53,22 @@ public static int getVanillaGuiScaleFactor() {
5753
return scaledResolution.getScaleFactor();
5854
}
5955

56+
public static double getUiBaseScale() {
57+
return isFollowGameScaleEnabled() ? getVanillaGuiScaleFactor() : 1.0;
58+
}
59+
6060
public static double getUiScale() {
61-
return getVanillaGuiScaleFactor() * getUiScaleMultiplier();
61+
return getUiBaseScale() * getUiScaleMultiplier();
62+
}
63+
64+
public static float getUiRenderScale() {
65+
int vanillaGuiScaleFactor = Math.max(1, getVanillaGuiScaleFactor());
66+
return (float) (getUiScale() / vanillaGuiScaleFactor);
6267
}
6368

6469
public ClientSettings() {
6570
super("ClientSettings", Category.Utility);
66-
addSettings(language, keyBind, fixedScaleEnabled, fixedScale, blur, clientCommand, prefix);
71+
addSettings(language, keyBind, followGameScale, fixedScale, blur, clientCommand, prefix);
6772
EventDispatcher.registerListener(this);
6873
// get system language
6974
Locale locale = Locale.getDefault();

src/main/java/top/fpsmaster/features/impl/render/Hitboxes.java

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,30 +43,33 @@ public void onRender(EventRender3D event) {
4343
if (mc.theWorld == null) {
4444
return;
4545
}
46+
GL11.glPushAttrib(GL11.GL_ENABLE_BIT | GL11.GL_COLOR_BUFFER_BIT | GL11.GL_CURRENT_BIT | GL11.GL_LINE_BIT);
4647
GL11.glPushMatrix();
47-
GL11.glDisable(GL11.GL_TEXTURE_2D);
48-
GL11.glEnable(GL11.GL_BLEND);
49-
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
50-
GL11.glLineWidth(1.0f);
51-
Color outline = color.getColor();
52-
GL11.glColor4f(
53-
outline.getRed() / 255f,
54-
outline.getGreen() / 255f,
55-
outline.getBlue() / 255f,
56-
outline.getAlpha() / 255f
57-
);
58-
IRenderManager renderManager = (IRenderManager) mc.getRenderManager();
59-
for (Entity entity : mc.theWorld.loadedEntityList) {
60-
if (entity == mc.thePlayer) {
61-
continue;
48+
try {
49+
GL11.glDisable(GL11.GL_TEXTURE_2D);
50+
GL11.glEnable(GL11.GL_BLEND);
51+
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
52+
GL11.glLineWidth(1.0f);
53+
Color outline = color.getColor();
54+
GL11.glColor4f(
55+
outline.getRed() / 255f,
56+
outline.getGreen() / 255f,
57+
outline.getBlue() / 255f,
58+
outline.getAlpha() / 255f
59+
);
60+
IRenderManager renderManager = (IRenderManager) mc.getRenderManager();
61+
for (Entity entity : mc.theWorld.loadedEntityList) {
62+
if (entity == mc.thePlayer) {
63+
continue;
64+
}
65+
AxisAlignedBB bb = entity.getEntityBoundingBox()
66+
.offset(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ());
67+
Render3DUtils.drawBoundingBoxOutline(bb);
6268
}
63-
AxisAlignedBB bb = entity.getEntityBoundingBox()
64-
.offset(-renderManager.renderPosX(), -renderManager.renderPosY(), -renderManager.renderPosZ());
65-
Render3DUtils.drawBoundingBoxOutline(bb);
69+
} finally {
70+
GL11.glPopMatrix();
71+
GL11.glPopAttrib();
6672
}
67-
GL11.glDisable(GL11.GL_BLEND);
68-
GL11.glEnable(GL11.GL_TEXTURE_2D);
69-
GL11.glPopMatrix();
7073
}
7174
}
7275

src/main/java/top/fpsmaster/ui/screens/oobe/OobeScreen.java

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public class OobeScreen extends ScaledGuiScreen {
7676

7777
private int page;
7878
private int languageValue;
79-
private boolean fixedScaleEnabled;
79+
private boolean followGameScaleEnabled;
8080
private int fixedScaleIndex;
8181
private int tutorialIndex;
8282
private int hoveredFeature = -1;
@@ -183,7 +183,7 @@ public void initGui() {
183183
greetingCurrentText = animatedGreeting();
184184
greetingPreviousText = greetingCurrentText;
185185
greetingTransition = 1f;
186-
scaleDropdown.setItems(SCALE_LABELS).setSelectedIndex(fixedScaleIndex).setEnabled(fixedScaleEnabled);
186+
scaleDropdown.setItems(SCALE_LABELS).setSelectedIndex(fixedScaleIndex).setEnabled(true);
187187

188188
accountField = new TextField(FPSMaster.fontManager.s18, key("oobe.login.account.placeholder"),
189189
new Color(255, 255, 255, 0).getRGB(), new Color(36, 44, 60).getRGB(), 32);
@@ -331,21 +331,16 @@ private void renderScalePage(int mouseX, int mouseY) {
331331
drawBodyText(key("oobe.scale.desc"), x, topY + 58f, layoutWidth - 18f);
332332

333333
float pillY = topY + 86f;
334-
float pillW = clamp((layoutWidth - 12f) * 0.44f, 138f, 176f);
335-
renderPill(x, pillY, pillW, 34f, fixedScaleEnabled, key("oobe.scale.fixed"));
336-
renderPill(x + pillW + 12f, pillY, pillW + 12f, 34f, !fixedScaleEnabled, key("oobe.scale.follow"));
334+
float pillW = clamp(layoutWidth * 0.48f, 180f, 240f);
335+
renderPill(x, pillY, pillW, 34f, followGameScaleEnabled, key("oobe.scale.follow"));
337336

338337
if (consumePressInBounds(x, pillY, pillW, 34f, 0) != null) {
339-
fixedScaleEnabled = true;
340-
applyLiveScaleSettings();
341-
}
342-
if (consumePressInBounds(x + pillW + 12f, pillY, pillW + 12f, 34f, 0) != null) {
343-
fixedScaleEnabled = false;
338+
followGameScaleEnabled = !followGameScaleEnabled;
344339
applyLiveScaleSettings();
345340
}
346341

347342
float dropdownY = pillY + 44f;
348-
scaleDropdown.setLabel(key("oobe.scale.label")).setItems(SCALE_LABELS).setSelectedIndex(fixedScaleIndex).setEnabled(fixedScaleEnabled);
343+
scaleDropdown.setLabel(key("oobe.scale.label")).setItems(SCALE_LABELS).setSelectedIndex(fixedScaleIndex).setEnabled(true);
349344
scaleDropdown.renderInScreen(this, x, dropdownY, clamp(layoutWidth * 0.40f, 172f, 220f), 32f, mouseX, mouseY);
350345
fixedScaleIndex = scaleDropdown.getSelectedIndex();
351346
if (scaleDropdown.consumeSelectionChanged()) {
@@ -847,7 +842,7 @@ private void finishOobe() {
847842

848843
private void applySelections() {
849844
ClientSettings.language.setValue(languageValue);
850-
ClientSettings.fixedScaleEnabled.setValue(fixedScaleEnabled);
845+
ClientSettings.followGameScale.setValue(followGameScaleEnabled);
851846
ClientSettings.fixedScale.setValue(fixedScaleIndex);
852847

853848
FPSMaster.configManager.configure.background = backgroundChoice;
@@ -1990,7 +1985,7 @@ private void updateTextFieldPlaceholders() {
19901985
}
19911986

19921987
private void applyLiveScaleSettings() {
1993-
ClientSettings.fixedScaleEnabled.setValue(fixedScaleEnabled);
1988+
ClientSettings.followGameScale.setValue(followGameScaleEnabled);
19941989
ClientSettings.fixedScale.setValue(fixedScaleIndex);
19951990
}
19961991

@@ -2024,7 +2019,7 @@ private void initSessionStateIfNeeded() {
20242019
private void restoreSessionState() {
20252020
page = savedPage;
20262021
languageValue = savedLanguageValue;
2027-
fixedScaleEnabled = ClientSettings.fixedScaleEnabled.getValue();
2022+
followGameScaleEnabled = ClientSettings.followGameScale.getValue();
20282023
fixedScaleIndex = ClientSettings.fixedScale.getValue();
20292024
tutorialIndex = savedTutorialIndex;
20302025
antiCheatEnabled = savedAntiCheatEnabled;

src/main/java/top/fpsmaster/utils/render/gui/ScaledGuiScreen.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ public PointerEvent(int x, int y, int button) {
2626
public float guiWidth;
2727
public float guiHeight;
2828

29-
private float clientScaleFactor = 1.0f;
3029
private float renderScale = 1.0f;
3130
private float vanillaScaleFactor = 1.0f;
3231
private final GuiInputState inputState = new GuiInputState();
@@ -128,19 +127,15 @@ protected void mouseScrolled(int mouseX, int mouseY, int wheelDelta) {
128127
}
129128

130129
private void refreshScaleAndMetrics() {
131-
clientScaleFactor = (float) ClientSettings.getUiScaleMultiplier();
132-
if (clientScaleFactor <= 0f) {
133-
clientScaleFactor = 1.0f;
134-
}
135130
updateBaseMetrics();
136131
}
137132

138133
private void updateBaseMetrics() {
139134
Minecraft mc = Minecraft.getMinecraft();
140135
ScaledResolution scaledResolution = new ScaledResolution(mc);
141136
vanillaScaleFactor = Math.max(1, scaledResolution.getScaleFactor());
142-
scaleFactor = vanillaScaleFactor * clientScaleFactor;
143-
renderScale = clientScaleFactor;
137+
scaleFactor = (float) ClientSettings.getUiScale();
138+
renderScale = ClientSettings.getUiRenderScale();
144139
if (renderScale <= 0f) {
145140
renderScale = 1.0f;
146141
}

src/main/resources/assets/minecraft/client/lang/en_us.lang

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ oobe.language.title=Choose your language
8181
oobe.language.desc=The rest of the setup will follow your choice.
8282
oobe.language.zh=Chinese
8383
oobe.scale.title=Set interface size
84-
oobe.scale.desc=Pick the size that feels best.
85-
oobe.scale.label=UI scale
84+
oobe.scale.desc=Choose a UI scale multiplier. When follow game scale is enabled, the multiplier is applied on top of the game's GUI scale.
85+
oobe.scale.label=UI scale multiplier
8686
oobe.scale.fixed=Use fixed scale
8787
oobe.scale.follow=Follow game scale
8888
oobe.scale.preview=Gameplay placeholder
@@ -651,8 +651,8 @@ cheatersdetector.cloud=Use Shared Hacker List
651651
clientsettings=Client Settings
652652
clientsettings.desc=General client settings
653653
clientsettings.clickguikey=GUI Hotkey
654-
clientsettings.fixedscaleenabled=Fixed Scale
655-
clientsettings.fixedscale=Fixed Scale Ratio
654+
clientsettings.fixedscaleenabled=Follow Game Scale
655+
clientsettings.fixedscale=UI Scale Multiplier
656656
clientsettings.fixedscale.0.5x=0.5x
657657
clientsettings.fixedscale.0.75x=0.75x
658658
clientsettings.fixedscale.1x=1x

src/main/resources/assets/minecraft/client/lang/zh_cn.lang

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ oobe.language.title=选择你的语言
8282
oobe.language.desc=后续界面将按照当前语言显示。
8383
oobe.language.zh=简体中文
8484
oobe.scale.title=设置界面尺寸
85-
oobe.scale.desc=选择一个看起来最舒服的界面大小
86-
oobe.scale.label=UI 缩放
85+
oobe.scale.desc=选择界面缩放倍率。开启跟随游戏缩放后,会在游戏缩放的基础上继续缩放
86+
oobe.scale.label=界面缩放倍率
8787
oobe.scale.fixed=启用固定缩放
8888
oobe.scale.follow=跟随游戏缩放
8989
oobe.scale.preview=游戏画面占位图
@@ -655,8 +655,8 @@ cheatersdetector.cloud=使用所有用户共享的黑客列表
655655
clientsettings=客户端设置
656656
clientsettings.desc=调整客户端各类设置
657657
clientsettings.clickguikey=设置界面快捷键
658-
clientsettings.fixedscaleenabled=固定缩放
659-
clientsettings.fixedscale=固定缩放比例
658+
clientsettings.fixedscaleenabled=跟随游戏缩放
659+
clientsettings.fixedscale=界面缩放倍率
660660
clientsettings.fixedscale.0.5x=0.5x
661661
clientsettings.fixedscale.0.75x=0.75x
662662
clientsettings.fixedscale.1x=1x

0 commit comments

Comments
 (0)