Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
package meteordevelopment.meteorclient.mixin;

import meteordevelopment.meteorclient.gui.GuiThemes;
import meteordevelopment.meteorclient.systems.config.Config;
import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.player.NameProtect;
import meteordevelopment.meteorclient.systems.proxies.Proxies;
Expand Down Expand Up @@ -42,6 +43,15 @@ public abstract class MultiplayerScreenMixin extends Screen {
@Unique
private ButtonWidget proxies;

@Unique
private static final int BUTTON_WIDTH = 75;
@Unique
private static final int BUTTON_HEIGHT = 20;
@Unique
private static final int MARGIN = 3;
@Unique
private static final int GAP = 2;

public MultiplayerScreenMixin(Text title) {
super(title);
}
Expand All @@ -57,34 +67,78 @@ private void onInit(CallbackInfo info) {
if (accounts == null) {
accounts = addDrawableChild(
new ButtonWidget.Builder(Text.literal("Accounts"), button -> client.setScreen(GuiThemes.get().accountsScreen()))
.size(75, 20)
.size(BUTTON_WIDTH, BUTTON_HEIGHT)
.build()
);
}
accounts.setPosition(this.width - 75 - 3, 3);

if (proxies == null) {
proxies = addDrawableChild(
new ButtonWidget.Builder(Text.literal("Proxies"), button -> client.setScreen(GuiThemes.get().proxiesScreen()))
.size(75, 20)
.build()
);
new ButtonWidget.Builder(Text.literal("Proxies"), button -> client.setScreen(GuiThemes.get().proxiesScreen()))
.size(BUTTON_WIDTH, BUTTON_HEIGHT)
.build()
);
}

Config config = Config.get();
Config.ButtonPosition accountPos = config.accountButtonAnchor.get();
Config.ButtonPosition proxiesPos = config.proxiesButtonAnchor.get();
boolean accountsVisible = accountPos != Config.ButtonPosition.Hidden;
boolean proxiesVisible = proxiesPos != Config.ButtonPosition.Hidden;

accounts.visible = accountsVisible;
proxies.visible = proxiesVisible;

positionButton(accounts, accountPos, proxiesVisible && proxiesPos == accountPos, true);
positionButton(proxies, proxiesPos, accountsVisible && accountPos == proxiesPos, false);
}

@Unique
private void positionButton(ButtonWidget button, Config.ButtonPosition anchor, boolean sharingCorner, boolean isAccounts) {
int leftOffset = sharingCorner && isAccounts ? BUTTON_WIDTH + GAP : 0;
int rightOffset = sharingCorner && !isAccounts ? BUTTON_WIDTH + GAP : 0;

switch (anchor) {
case TopRight -> button.setPosition(this.width - MARGIN - BUTTON_WIDTH - rightOffset, MARGIN);
case TopLeft -> button.setPosition(MARGIN + leftOffset, MARGIN);
case BottomLeft -> button.setPosition(MARGIN + leftOffset, this.height - MARGIN - BUTTON_HEIGHT);
case BottomRight -> button.setPosition(this.width - MARGIN - BUTTON_WIDTH - rightOffset, this.height - MARGIN - BUTTON_HEIGHT);
default -> button.setPosition(this.width - MARGIN - BUTTON_WIDTH - rightOffset, MARGIN); // Top right
}
proxies.setPosition(this.width - 75 - 3 - 75 - 2, 3);
}

@Override
public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) {
super.render(context, mouseX, mouseY, deltaTicks);

int x = 3;
int y = 3;
Config config = Config.get();

if (!config.showAccountStatus.get() && !config.showProxiesStatus.get()) {
return;
}

// Shifts the top left account and proxy text to right if buttons are also top left
int x = MARGIN;
if (config.proxiesButtonAnchor.get() != Config.ButtonPosition.Hidden && config.proxiesButtonAnchor.get() == Config.ButtonPosition.TopLeft) {
x += BUTTON_WIDTH + GAP;
}
if (config.accountButtonAnchor.get() != Config.ButtonPosition.Hidden && config.accountButtonAnchor.get() == Config.ButtonPosition.TopLeft) {
x += BUTTON_WIDTH + GAP;
}

int y = MARGIN;

// Logged in as
context.drawTextWithShadow(mc.textRenderer, loggedInAs, x, y, textColor1);
context.drawTextWithShadow(mc.textRenderer, Modules.get().get(NameProtect.class).getName(client.getSession().getUsername()), x + loggedInAsLength, y, textColor2);
if (config.showAccountStatus.get()) {
context.drawTextWithShadow(mc.textRenderer, loggedInAs, x, y, textColor1);
context.drawTextWithShadow(mc.textRenderer, Modules.get().get(NameProtect.class).getName(client.getSession().getUsername()), x + loggedInAsLength, y, textColor2);

y += textRenderer.fontHeight + 2;
y += textRenderer.fontHeight + 2;
}

if (!config.showProxiesStatus.get()) {
return;
}

// Proxy
Proxy proxy = Proxies.get().getEnabled();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,34 @@ public class Config extends System<Config> {
.build()
);

public final Setting<ButtonPosition> accountButtonAnchor = sgVisual.add(new EnumSetting.Builder<ButtonPosition>()
.name("accounts-button")
.description("Controls the position and visibility of the accounts button in the multiplayer screen.")
.defaultValue(ButtonPosition.TopRight)
.build()
);

public final Setting<Boolean> showAccountStatus = sgVisual.add(new BoolSetting.Builder()
.name("account-status")
.description("Shows information about the current account in the multiplayer screen.")
.defaultValue(true)
.build()
);

public final Setting<ButtonPosition> proxiesButtonAnchor = sgVisual.add(new EnumSetting.Builder<ButtonPosition>()
.name("proxies-button")
.description("Controls the position and visibility of the proxies button in the multiplayer screen.")
.defaultValue(ButtonPosition.TopRight)
.build()
);

public final Setting<Boolean> showProxiesStatus = sgVisual.add(new BoolSetting.Builder()
.name("proxy-status")
.description("Shows information about the current proxy in the multiplayer screen.")
.defaultValue(true)
.build()
);

// Modules

public final Setting<List<Module>> hiddenModules = sgModules.add(new ModuleListSetting.Builder()
Expand Down Expand Up @@ -206,4 +234,12 @@ private List<String> listFromTag(NbtCompound tag, String key) {
for (NbtElement item : tag.getListOrEmpty(key)) list.add(item.asString().orElse(""));
return list;
}

public enum ButtonPosition {
TopLeft,
TopRight,
BottomLeft,
BottomRight,
Hidden,
}
}
Loading