Skip to content
3 changes: 1 addition & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ dependencies {
includeInJar "com.formdev:flatlaf-extras:3.7.1"
includeInJar "org.apache.commons:commons-lang3:3.20.0"
includeInJar "commons-io:commons-io:2.22.0"
includeInJar "net.sf.jopt-simple:jopt-simple:5.0.4"
includeInJar "org.apache.logging.log4j:log4j-core:2.25.4"
includeInJar "org.apache.logging.log4j:log4j-slf4j2-impl:2.25.4"
includeInJar "org.jline:jansi:4.0.14"
Expand Down Expand Up @@ -106,7 +105,7 @@ dependencies {
includeInJar "dev.kastle.webrtc:webrtc-java:1.0.3:$it"
}
includeInJar "gs.mclo:api:6.2.1"
includeInJar "net.lenni0451:optconfig:1.1.1"
includeInJar "net.lenni0451.optconfig:cli:2.0.0-20260504.192228-9"

includeInJarJ8(compileOnly("xyz.wagyourtail.jvmdowngrader:jvmdowngrader:1.3.6"))
includeInJarJ8 "xyz.wagyourtail.jvmdowngrader:jvmdowngrader-java-api:1.3.6:downgraded-8"
Expand Down
13 changes: 9 additions & 4 deletions src/main/java/net/raphimc/viaproxy/ViaProxy.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import net.raphimc.viaproxy.plugins.events.ProxyStopEvent;
import net.raphimc.viaproxy.plugins.events.ViaProxyLoadedEvent;
import net.raphimc.viaproxy.protocoltranslator.ProtocolTranslator;
import net.raphimc.viaproxy.protocoltranslator.viaproxy.ViaProxyCLIConfig;
import net.raphimc.viaproxy.protocoltranslator.viaproxy.ViaProxyConfig;
import net.raphimc.viaproxy.proxy.client2proxy.Client2ProxyChannelInitializer;
import net.raphimc.viaproxy.proxy.client2proxy.Client2ProxyHandler;
Expand Down Expand Up @@ -232,7 +233,11 @@ public static void injectedMain(final String injectionMethod, final String[] arg
viaProxyConfigFile = new File(ViaProxy.getCwd(), "viaproxy.yml");
}
final boolean firstStart = !viaProxyConfigFile.exists();
CONFIG = ViaProxyConfig.create(viaProxyConfigFile);
if (useCLI) {
CONFIG = ViaProxyCLIConfig.create(viaProxyConfigFile);
} else {
CONFIG = ViaProxyConfig.create(viaProxyConfigFile);
}

if (useUI) {
progressConsumer.accept("Loading GUI");
Expand All @@ -256,7 +261,7 @@ public static void injectedMain(final String injectionMethod, final String[] arg
final String[] cliArgs = new String[args.length - 1];
System.arraycopy(args, 1, cliArgs, 0, cliArgs.length);
try {
CONFIG.loadFromArguments(cliArgs);
((ViaProxyCLIConfig) CONFIG).loadFromArguments(cliArgs);
} catch (Throwable e) {
throw new RuntimeException("Failed to load CLI arguments", e);
}
Expand Down Expand Up @@ -284,8 +289,8 @@ public static void startProxy() {
Logger.LOGGER.info("Starting proxy server");
currentProxyServer = new NetServer(new Client2ProxyChannelInitializer(() -> EVENT_MANAGER.call(new Client2ProxyHandlerCreationEvent(new Client2ProxyHandler(), false)).getHandler()));
EVENT_MANAGER.call(new ProxyStartEvent());
Logger.LOGGER.info("Binding proxy server to " + AddressUtil.toString(CONFIG.getBindAddress()));
currentProxyServer.bind(CONFIG.getBindAddress(), false);
Logger.LOGGER.info("Binding proxy server to " + AddressUtil.toString(CONFIG.getFrontend().getBindAddress()));
currentProxyServer.bind(CONFIG.getFrontend().getBindAddress(), false);
} catch (Throwable e) {
currentProxyServer = null;
throw e;
Expand Down
62 changes: 0 additions & 62 deletions src/main/java/net/raphimc/viaproxy/cli/BetterHelpFormatter.java

This file was deleted.

88 changes: 11 additions & 77 deletions src/main/java/net/raphimc/viaproxy/cli/ConsoleFormatter.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,88 +17,22 @@
*/
package net.raphimc.viaproxy.cli;

public class ConsoleFormatter {

private static final String PREFIX = "\033[";
private static final String SUFFIX = "m";
import net.lenni0451.mcstructs.text.TextComponent;
import net.lenni0451.mcstructs.text.stringformat.StringFormat;
import net.lenni0451.mcstructs.text.stringformat.handling.ColorHandling;
import net.lenni0451.mcstructs.text.stringformat.handling.SerializerUnknownHandling;

public static String convert(final String s) {
StringBuilder out = new StringBuilder();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
char next = i + 1 < chars.length ? chars[i + 1] : '\0';
if (c == '§') {
if (next != '\0') {
if (isColor(next)) out.append(convertToAnsi('r'));
out.append(convertToAnsi(next));
i++;
}
} else {
out.append(c);
}
}
return out + convertToAnsi('r');
}
public class ConsoleFormatter {

//The ANSI codes are an approximation. True color is used to get the exact color.
private static String convertToAnsi(final char color) {
switch (Character.toLowerCase(color)) {
case '0': //Black
return PREFIX + getColor("30", 0x00_00_00) + SUFFIX;
case '1': //Dark Blue
return PREFIX + getColor("34", 0x00_00_AA) + SUFFIX;
case '2': //Dark Green
return PREFIX + getColor("32", 0x00_AA_00) + SUFFIX;
case '3': //Dark Aqua
return PREFIX + getColor("36", 0x00_AA_AA) + SUFFIX;
case '4': //Dark Red
return PREFIX + getColor("31", 0xAA_00_00) + SUFFIX;
case '5': //Dark Purple
return PREFIX + getColor("35", 0xAA_00_AA) + SUFFIX;
case '6': //Gold
return PREFIX + getColor("33", 0xFF_AA_00) + SUFFIX;
case '7': //Gray
return PREFIX + getColor("37", 0xAA_AA_AA) + SUFFIX;
case '8': //Dark Gray
return PREFIX + getColor("90", 0x55_55_55) + SUFFIX;
case '9': //Blue
return PREFIX + getColor("94", 0x55_55_FF) + SUFFIX;
case 'a': //Green
return PREFIX + getColor("92", 0x55_FF_55) + SUFFIX;
case 'b': //Aqua
return PREFIX + getColor("96", 0x55_FF_FF) + SUFFIX;
case 'c': //Red
return PREFIX + getColor("91", 0xFF_55_55) + SUFFIX;
case 'd': //Light Purple
return PREFIX + getColor("95", 0xFF_55_FF) + SUFFIX;
case 'e': //Yellow
return PREFIX + getColor("93", 0xFF_FF_55) + SUFFIX;
case 'f': //White
return PREFIX + getColor("97", 0xFF_FF_FF) + SUFFIX;
case 'k': //Obfuscated
return ""; //Not supported in terminal
case 'l': //Bold
return PREFIX + "1" + SUFFIX;
case 'm': //Strikethrough
return PREFIX + "9" + SUFFIX;
case 'n': //Underline
return PREFIX + "4" + SUFFIX;
case 'o': //Italic
return PREFIX + "3" + SUFFIX;
case 'r': //Reset
default:
return PREFIX + 0 + SUFFIX;
}
}
private static final StringFormat VANILLA_FORMAT = StringFormat.vanilla();
private static final StringFormat ANSI_FORMAT = StringFormat.ansi();

private static boolean isColor(char color) {
color = Character.toLowerCase(color);
return color >= '0' && color <= '9' || color >= 'a' && color <= 'f';
public static String convert(final String legacyString) {
return VANILLA_FORMAT.convertTo(legacyString, ANSI_FORMAT);
}

private static String getColor(final String ansi, final int rgb) {
return String.format("38;2;%d;%d;%d", (rgb >> 16) & 255, (rgb >> 8) & 255, rgb & 255);
public static String convert(final TextComponent component) {
return ANSI_FORMAT.toString(component, ColorHandling.RESET, SerializerUnknownHandling.IGNORE);
}

}
21 changes: 0 additions & 21 deletions src/main/java/net/raphimc/viaproxy/cli/HelpRequestedException.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,14 @@ public void register(LiteralArgumentBuilder<CommandExecutor> builder) {
ctx.getSource().sendMessage("No accounts added yet.");
} else {
for (int i = 0; i < accounts.size(); i++) {
boolean isSelected = ViaProxy.getConfig().getAccount() == accounts.get(i);
boolean isSelected = ViaProxy.getConfig().getProxy().getAccount() == accounts.get(i);
ctx.getSource().sendMessage("[" + i + "] " + accounts.get(i).getDisplayString() + (isSelected ? " <--" : ""));
}
}
return 1;
}));
builder.then(literal("deselect").executes(ctx -> {
ViaProxy.getConfig().setAccount(null);
ViaProxy.getConfig().getProxy().setAccount(null);
ctx.getSource().sendMessage("Deselected current account.");
return 1;
}));
Expand All @@ -78,7 +78,7 @@ public void register(LiteralArgumentBuilder<CommandExecutor> builder) {
return 0;
}
Account account = ViaProxy.getSaveManager().accountsSave.getAccounts().get(index);
ViaProxy.getConfig().setAccount(account);
ViaProxy.getConfig().getProxy().setAccount(account);
ctx.getSource().sendMessage("Selected account " + index + ": " + account.getDisplayString() + ".");
return 1;
})));
Expand Down Expand Up @@ -111,8 +111,8 @@ public void register(LiteralArgumentBuilder<CommandExecutor> builder) {
Account account = ViaProxy.getSaveManager().accountsSave.getAccounts().get(index);
ViaProxy.getSaveManager().accountsSave.removeAccount(account);
ViaProxy.getSaveManager().save();
if (ViaProxy.getConfig().getAccount() == account) {
ViaProxy.getConfig().setAccount(null);
if (ViaProxy.getConfig().getProxy().getAccount() == account) {
ViaProxy.getConfig().getProxy().setAccount(null);
}
ctx.getSource().sendMessage("Removed account " + index + ": " + account.getDisplayString() + ".");
return 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public abstract class MixinProtocol1_20To1_20_2 {

@Inject(method = "lambda$queueServerboundPacket$12", at = @At("HEAD"), cancellable = true)
private static void dontQueueConfigPackets(ServerboundPackets1_20_2 packetType, PacketWrapper wrapper, CallbackInfo ci) {
if (ViaProxy.getConfig().shouldSkipConfigStatePacketQueue()) {
if (ViaProxy.getConfig().getProxy().shouldSkipConfigStatePacketQueue()) {
ci.cancel();
switch (packetType) {
case CUSTOM_PAYLOAD -> wrapper.setPacketType(ServerboundPackets1_19_4.CUSTOM_PAYLOAD);
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public ViaProxyViaCodec(UserConnection user) {

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (ViaProxy.getConfig().shouldIgnoreProtocolTranslationErrors()) {
if (ViaProxy.getConfig().getAdvanced().shouldIgnoreProtocolTranslationErrors()) {
try {
super.channelRead(ctx, msg);
} catch (Throwable e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import net.raphimc.vialegacy.protocol.release.r1_2_4_5tor1_3_1_2.provider.OldAuthProvider;
import net.raphimc.viaproxy.ViaProxy;
import net.raphimc.viaproxy.proxy.session.ProxyConnection;
import net.raphimc.viaproxy.saves.impl.accounts.ClassicAccount;

import java.nio.charset.StandardCharsets;
import java.util.HexFormat;
Expand All @@ -36,10 +37,9 @@ public class ViaProxyClassicMPPassProvider extends ClassicMPPassProvider {

@Override
public String getMpPass(UserConnection user) {
final String mppass = ProxyConnection.fromUserConnection(user).getUserOptions().classicMpPass();
if (mppass != null && !mppass.isBlank()) {
return mppass;
} else if (ViaProxy.getConfig().useBetacraftAuth()) {
if (ProxyConnection.fromUserConnection(user).getUserOptions().account() instanceof ClassicAccount classicAccount) {
return classicAccount.getMppass();
} else if (ViaProxy.getConfig().getBackend().useBetaCraftAuth()) {
try {
final HttpClient httpClient = new HttpClient();
String externalIp;
Expand Down
Loading
Loading