Moved OpenAuthMod authentication into its own ViaProxy plugin

https://github.com/ViaVersionAddons/ViaProxyOpenAuthMod
OpenAuthMod is dead and rarely used
This commit is contained in:
RaphiMC 2024-11-30 19:09:02 +01:00
parent e6dc79ff61
commit b8a1a63e1c
No known key found for this signature in database
GPG Key ID: 0F6BB0657A03AC94
18 changed files with 6 additions and 176 deletions

View File

@ -490,11 +490,7 @@ public class ViaProxyConfig {
/**
* No authentication (Offline mode)
*/
NONE("tab.general.minecraft_account.option_no_account"),
/**
* Requires the OpenAuthMod client mod (https://modrinth.com/mod/openauthmod)
*/
OPENAUTHMOD("tab.general.minecraft_account.option_openauthmod");
NONE("tab.general.minecraft_account.option_no_account");
private final String guiTranslationKey;

View File

@ -230,7 +230,6 @@ public class Client2ProxyHandler extends SimpleChannelInboundHandler<Packet> {
this.proxyConnection.setUserOptions(userOptions);
this.proxyConnection.setC2pConnectionState(intendedState.getConnectionState());
this.proxyConnection.getPacketHandlers().add(new StatusPacketHandler(this.proxyConnection));
this.proxyConnection.getPacketHandlers().add(new OpenAuthModPacketHandler(this.proxyConnection));
if (ViaProxy.getConfig().shouldSupportSimpleVoiceChat() && serverVersion.newerThan(ProtocolVersion.v1_14) && clientVersion.newerThan(ProtocolVersion.v1_14)) {
this.proxyConnection.getPacketHandlers().add(new SimpleVoiceChatPacketHandler(this.proxyConnection));
}

View File

@ -24,11 +24,8 @@ import com.viaversion.viaversion.api.minecraft.signature.storage.ChatSession1_19
import com.viaversion.viaversion.api.minecraft.signature.storage.ChatSession1_19_1;
import com.viaversion.viaversion.api.minecraft.signature.storage.ChatSession1_19_3;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.raphimc.minecraftauth.step.bedrock.StepMCChain;
import net.raphimc.minecraftauth.step.java.StepPlayerCertificates;
import net.raphimc.netminecraft.packet.PacketTypes;
import net.raphimc.netminecraft.packet.impl.login.C2SLoginHelloPacket;
import net.raphimc.netminecraft.packet.impl.login.C2SLoginKeyPacket;
import net.raphimc.viabedrock.api.BedrockProtocolVersion;
@ -36,8 +33,6 @@ import net.raphimc.viabedrock.protocol.storage.AuthChainData;
import net.raphimc.viaproxy.ViaProxy;
import net.raphimc.viaproxy.plugins.events.FillPlayerDataEvent;
import net.raphimc.viaproxy.plugins.events.JoinServerRequestEvent;
import net.raphimc.viaproxy.protocoltranslator.viaproxy.ViaProxyConfig;
import net.raphimc.viaproxy.proxy.packethandler.OpenAuthModPacketHandler;
import net.raphimc.viaproxy.proxy.session.ProxyConnection;
import net.raphimc.viaproxy.proxy.util.CloseAndReturn;
import net.raphimc.viaproxy.saves.impl.accounts.Account;
@ -50,10 +45,7 @@ import java.security.PublicKey;
import java.security.SignatureException;
import java.time.Instant;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class ExternalInterface {
@ -110,15 +102,7 @@ public class ExternalInterface {
public static void joinServer(final String serverIdHash, final ProxyConnection proxyConnection) {
Logger.u_info("auth", proxyConnection, "Trying to join online mode server");
try {
if (ViaProxy.getConfig().getAuthMethod() == ViaProxyConfig.AuthMethod.OPENAUTHMOD) {
try {
final ByteBuf response = proxyConnection.getPacketHandler(OpenAuthModPacketHandler.class).sendCustomPayload(OpenAuthModConstants.JOIN_CHANNEL, PacketTypes.writeString(Unpooled.buffer(), serverIdHash)).get(6, TimeUnit.SECONDS);
if (response == null) throw new TimeoutException();
if (response.isReadable() && !response.readBoolean()) throw new TimeoutException();
} catch (TimeoutException e) {
proxyConnection.kickClient("§cAuthentication cancelled! You need to install OpenAuthMod in order to join this server.");
}
} else if (proxyConnection.getUserOptions().account() instanceof MicrosoftAccount microsoftAccount) {
if (proxyConnection.getUserOptions().account() instanceof MicrosoftAccount microsoftAccount) {
try {
AuthLibServices.SESSION_SERVICE.joinServer(microsoftAccount.getGameProfile(), microsoftAccount.getMcProfile().getMcToken().getAccessToken(), serverIdHash);
} catch (Throwable e) {
@ -135,21 +119,11 @@ public class ExternalInterface {
}
}
public static void signNonce(final byte[] nonce, final C2SLoginKeyPacket packet, final ProxyConnection proxyConnection) throws InterruptedException, ExecutionException, SignatureException {
public static void signNonce(final byte[] nonce, final C2SLoginKeyPacket packet, final ProxyConnection proxyConnection) throws SignatureException {
Logger.u_info("auth", proxyConnection, "Requesting nonce signature");
final UserConnection user = proxyConnection.getUserConnection();
if (ViaProxy.getConfig().getAuthMethod() == ViaProxyConfig.AuthMethod.OPENAUTHMOD) {
try {
final ByteBuf response = proxyConnection.getPacketHandler(OpenAuthModPacketHandler.class).sendCustomPayload(OpenAuthModConstants.SIGN_NONCE_CHANNEL, PacketTypes.writeByteArray(Unpooled.buffer(), nonce)).get(5, TimeUnit.SECONDS);
if (response == null) throw new TimeoutException();
if (!response.readBoolean()) throw new TimeoutException();
packet.salt = response.readLong();
packet.signature = PacketTypes.readByteArray(response);
} catch (TimeoutException e) {
proxyConnection.kickClient("§cAuthentication cancelled! You need to install OpenAuthMod in order to join this server.");
}
} else if (user.has(ChatSession1_19_0.class)) {
if (user.has(ChatSession1_19_0.class)) {
final long salt = ThreadLocalRandom.current().nextLong();
packet.signature = user.get(ChatSession1_19_0.class).sign(updater -> {
updater.accept(nonce);

View File

@ -157,7 +157,7 @@ public class LoginPacketHandler extends PacketHandler {
final byte[] encryptedNonce = CryptUtil.encryptData(publicKey, loginHelloPacket.nonce);
final C2SLoginKeyPacket loginKey = new C2SLoginKeyPacket(encryptedSecretKey, encryptedNonce);
if (this.proxyConnection.getServerVersion().newerThanOrEqualTo(ProtocolVersion.v1_19) && this.proxyConnection.getLoginHelloPacket().key != null) {
if (this.proxyConnection.getServerVersion().betweenInclusive(ProtocolVersion.v1_19, ProtocolVersion.v1_19_1) && this.proxyConnection.getLoginHelloPacket().key != null) {
ExternalInterface.signNonce(loginHelloPacket.nonce, loginKey, this.proxyConnection);
}
this.proxyConnection.getChannel().writeAndFlush(loginKey).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);

View File

@ -1,115 +0,0 @@
/*
* This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy
* Copyright (C) 2021-2024 RK_01/RaphiMC and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.raphimc.viaproxy.proxy.packethandler;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFutureListener;
import net.lenni0451.mcstructs.text.components.StringComponent;
import net.raphimc.netminecraft.packet.Packet;
import net.raphimc.netminecraft.packet.PacketTypes;
import net.raphimc.netminecraft.packet.impl.common.C2SCustomPayloadPacket;
import net.raphimc.netminecraft.packet.impl.login.C2SLoginCustomQueryAnswerPacket;
import net.raphimc.netminecraft.packet.impl.login.C2SLoginKeyPacket;
import net.raphimc.netminecraft.packet.impl.login.S2CLoginCustomQueryPacket;
import net.raphimc.netminecraft.packet.impl.login.S2CLoginDisconnectPacket;
import net.raphimc.netminecraft.packet.impl.play.S2CPlayCustomPayloadPacket;
import net.raphimc.viaproxy.proxy.external_interface.OpenAuthModConstants;
import net.raphimc.viaproxy.proxy.session.ProxyConnection;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
public class OpenAuthModPacketHandler extends PacketHandler {
private final AtomicInteger id = new AtomicInteger(0);
private final Map<Integer, CompletableFuture<ByteBuf>> customPayloadListener = new ConcurrentHashMap<>();
public OpenAuthModPacketHandler(ProxyConnection proxyConnection) {
super(proxyConnection);
}
@Override
public boolean handleC2P(Packet packet, List<ChannelFutureListener> listeners) {
if (packet instanceof C2SCustomPayloadPacket customPayloadPacket) {
final ByteBuf data = Unpooled.wrappedBuffer(customPayloadPacket.data);
if (customPayloadPacket.channel.equals(OpenAuthModConstants.DATA_CHANNEL) && this.handleCustomPayload(PacketTypes.readVarInt(data), data)) {
return false;
}
} else if (packet instanceof C2SLoginCustomQueryAnswerPacket loginCustomQueryAnswer) {
if (loginCustomQueryAnswer.response != null && this.handleCustomPayload(loginCustomQueryAnswer.queryId, Unpooled.wrappedBuffer(loginCustomQueryAnswer.response))) {
return false;
}
} else if (packet instanceof C2SLoginKeyPacket loginKeyPacket) {
if (this.proxyConnection.getClientVersion().olderThanOrEqualTo(ProtocolVersion.v1_12_2) && new String(loginKeyPacket.encryptedNonce, StandardCharsets.UTF_8).equals(OpenAuthModConstants.DATA_CHANNEL)) { // 1.8-1.12.2 OpenAuthMod response handling
final ByteBuf byteBuf = Unpooled.wrappedBuffer(loginKeyPacket.encryptedSecretKey);
this.handleCustomPayload(PacketTypes.readVarInt(byteBuf), byteBuf);
return false;
}
}
return true;
}
public CompletableFuture<ByteBuf> sendCustomPayload(final String channel, final ByteBuf data) {
if (channel.length() > 20) throw new IllegalStateException("Channel name can't be longer than 20 characters");
final CompletableFuture<ByteBuf> future = new CompletableFuture<>();
final int id = this.id.getAndIncrement();
switch (this.proxyConnection.getC2pConnectionState()) {
case LOGIN:
if (this.proxyConnection.getClientVersion().newerThanOrEqualTo(ProtocolVersion.v1_13)) {
this.proxyConnection.getC2P().writeAndFlush(new S2CLoginCustomQueryPacket(id, channel, PacketTypes.readReadableBytes(data))).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
} else {
final ByteBuf disconnectPacketData = Unpooled.buffer();
PacketTypes.writeString(disconnectPacketData, channel);
PacketTypes.writeVarInt(disconnectPacketData, id);
disconnectPacketData.writeBytes(data);
this.proxyConnection.getC2P().writeAndFlush(new S2CLoginDisconnectPacket(new StringComponent("§cYou need to install OpenAuthMod in order to join this server.§k\n" + Base64.getEncoder().encodeToString(ByteBufUtil.getBytes(disconnectPacketData)) + "\n" + OpenAuthModConstants.LEGACY_MAGIC_STRING))).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
}
break;
case PLAY:
final ByteBuf responseData = Unpooled.buffer();
PacketTypes.writeVarInt(responseData, id);
responseData.writeBytes(data);
this.proxyConnection.getC2P().writeAndFlush(new S2CPlayCustomPayloadPacket(channel, ByteBufUtil.getBytes(responseData))).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
break;
default:
throw new IllegalStateException("Can't send a custom payload packet during " + this.proxyConnection.getC2pConnectionState());
}
this.customPayloadListener.put(id, future);
return future;
}
private boolean handleCustomPayload(final int id, final ByteBuf data) {
if (this.customPayloadListener.containsKey(id)) {
this.customPayloadListener.remove(id).complete(data);
return true;
}
return false;
}
}

View File

@ -62,7 +62,7 @@ public class AccountsTab extends UITab {
int gridy = 0;
{
JLabel infoLabel = new JLabel("<html><p>" + I18n.get("tab.accounts.description.line1") + "</p><br><p>" + I18n.get("tab.accounts.description.line2") + "</p></html>");
JLabel infoLabel = new JLabel("<html><p>" + I18n.get("tab.accounts.description.line1") + "</p></html>");
GBC.create(body).grid(0, gridy++).weightx(1).insets(BORDER_PADDING, BORDER_PADDING, 0, BORDER_PADDING).fill(GBC.HORIZONTAL).add(infoLabel);
}
{

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=Verze serveru:
tab.general.minecraft_account.label=Minecraft Účet:
tab.general.minecraft_account.option_no_account=Nepoužívat účet
tab.general.minecraft_account.option_select_account=Použít vybraný účet
tab.general.minecraft_account.option_openauthmod=Použít OpenAuthMod
tab.general.betacraft_auth.label=BetaCraft Auth (Classic)
tab.general.betacraft_auth.tooltip=Povolování BetaCraft Authentikace vám umožní připojit se na BetaCraft servery se zapnutým online módem.
tab.general.state.loading=Načítání ViaProxy...
@ -43,7 +42,6 @@ tab.advanced.upload_latest_log.error_generic=Log nebylo možno nahrát: %s
tab.advanced.upload_latest_log.error_not_found=Log soubor nebyl nalezen.
tab.accounts.name=Účty
tab.accounts.description.line1=Pro připojení na online servery musíte přidat Microsoft účet. Můžete vybrat účet tím že na něj kliknete pravým tlačítkem myši. Vy výchozím nastavení bude vybrán první účet.
tab.accounts.description.line2=Pokud často měníte účet, můžete na svůj klient nainstalovat OpenAuthMod. Toto umožní ViaProxy použít účet který je použit na klientu.
tab.accounts.list.context_menu.select=Vybrat účet
tab.accounts.list.context_menu.remove=Vymazat
tab.accounts.list.context_menu.move_up=Posunout nahoru ↑

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=Server Version:
tab.general.minecraft_account.label=Minecraft Konto:
tab.general.minecraft_account.option_no_account=Kein Konto verwenden
tab.general.minecraft_account.option_select_account=Ausgewähltes Konto verwenden
tab.general.minecraft_account.option_openauthmod=OpenAuthMod verwenden
tab.general.betacraft_auth.label=BetaCraft Authentifizierung (Classic)
tab.general.betacraft_auth.tooltip=Wenn du die BetaCraft Authentifizierung aktivierst, kannst du auf Classic Server, die Online Mode aktiviert haben joinen.
tab.general.state.loading=Lade ViaProxy...
@ -52,7 +51,6 @@ tab.advanced.upload_latest_log.error_generic=Die Log-Datei konnte nicht hochgela
tab.advanced.upload_latest_log.error_not_found=Die Log-Datei konnte nicht gefunden werden.
tab.accounts.name=Konten
tab.accounts.description.line1=Um auf Online Mode Server zu joinen musst du ein Minecraft Konto im ViaProxy hinzufügen. Du kannst ein Konto auswählen indem du es rechtsklickst. Standardmäßig wird das erste verwendet.
tab.accounts.description.line2=Wenn du dein Konto oft änderst, kannst du stattdessen OpenAuthMod auf deinem Client installieren. Das erlaubt ViaProxy das aktuell eingeloggte Konto von deinem Client zu verwenden.
tab.accounts.list.context_menu.select=Konto auswählen
tab.accounts.list.context_menu.remove=Löschen
tab.accounts.list.context_menu.move_up=Nach oben schieben ↑

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=Server Version:
tab.general.minecraft_account.label=Minecraft Account:
tab.general.minecraft_account.option_no_account=Use no account
tab.general.minecraft_account.option_select_account=Use selected account
tab.general.minecraft_account.option_openauthmod=Use OpenAuthMod
tab.general.betacraft_auth.label=BetaCraft Auth (Classic)
tab.general.betacraft_auth.tooltip=Enabling BetaCraft Auth allows you to join classic servers which have online mode enabled.
tab.general.state.loading=Loading ViaProxy...
@ -52,7 +51,6 @@ tab.advanced.upload_latest_log.error_generic=The log file could not be uploaded:
tab.advanced.upload_latest_log.error_not_found=The log file could not be found.
tab.accounts.name=Accounts
tab.accounts.description.line1=To join online mode servers you have to add a minecraft account for ViaProxy to use. You can select an account by right clicking it. By default the first one will be used.
tab.accounts.description.line2=If you change your account frequently, you can install OpenAuthMod on your client. This allows ViaProxy to use the account you are logged in with on the client.
tab.accounts.list.context_menu.select=Select Account
tab.accounts.list.context_menu.remove=Remove
tab.accounts.list.context_menu.move_up=Move up ↑

View File

@ -7,7 +7,6 @@ tab.general.server_version.label=Vertion du serveur:
tab.general.minecraft_account.label=Compte Minecraft:
tab.general.minecraft_account.option_no_account=Pas de compte
tab.general.minecraft_account.option_select_account=compte selectionné
tab.general.minecraft_account.option_openauthmod=Utiliser OpenAuthMod
tab.general.betacraft_auth.label=BetaCraft Auth (Classic)
tab.general.betacraft_auth.tooltip=Activer BetaCraft Auth permet de se connecter a des serveurs classiques qui on le mode enligne activé.
tab.general.state.loading=Chargement de ViaProxy...
@ -51,7 +50,6 @@ tab.advanced.upload_latest_log.error_generic=Le fichier de log n'as pas pu etre
tab.advanced.upload_latest_log.error_not_found=Le fichier de log est introuvable.
tab.accounts.name=Comptes
tab.accounts.description.line1=Pour rejoindre un serveur en ligne, ViaProxy a besoin d'un compre microsoft. Vous pouver selectionner un compte en faisant un clique droit dessu. Par default, le premier est selectionné.
tab.accounts.description.line2=Si vous changez souvent de compte, vous pouver installer OpenAuthMod (client). Cela permet a ViaProxy d'utiliser le compte avec lequelle vous etes connecté dans le client.
tab.accounts.list.context_menu.select=Selectioner ce compte
tab.accounts.list.context_menu.remove=Enlever
tab.accounts.list.context_menu.move_up=Envoyer vers le haut

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=Szerver Verzió:
tab.general.minecraft_account.label=Minecraft Fiók:
tab.general.minecraft_account.option_no_account=Ne használj semmilyen fiókot
tab.general.minecraft_account.option_select_account=Kiválasztott fiók használata
tab.general.minecraft_account.option_openauthmod=OpenAuthMod Használata
tab.general.betacraft_auth.label=BetaCraft Auth(Classic)
tab.general.betacraft_auth.tooltip=BetaCraft bekapcsolása. Fel enged Classic minecraft szerverekre.
tab.general.state.loading=ViaProxy Betöltése...
@ -48,7 +47,6 @@ tab.advanced.upload_latest_log.error_generic=A naplófájlt nem sikerült feltö
tab.advanced.upload_latest_log.error_not_found=A naplófájl nem található.
tab.accounts.name=Fiókok
tab.accounts.description.line1=Az online módú szerverekhez való csatlakozáshoz hozzá kell adnod egy minecraft fiókot, hogy a ViaProxy használhassa. A fiókot jobb egérgombbal kattintva választhatod ki. Alapértelmezés szerint az elsőt fogja használni.
tab.accounts.description.line2=Ha gyakran változtatja fiókját, telepítheti az OpenAuthMod-ot az ügyfélre. Ez lehetővé teszi a ViaProxy számára, hogy azt a fiókot használja, amellyel bejelentkezett az ügyfélnél.
tab.accounts.list.context_menu.select=Fiók kiválasztása
tab.accounts.list.context_menu.remove=Törlés
tab.accounts.list.context_menu.move_up=Feljebb lépés ↑

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=サーバーバージョン:
tab.general.minecraft_account.label=Minecraftアカウント:
tab.general.minecraft_account.option_no_account=アカウントを使用しない
tab.general.minecraft_account.option_select_account=選択したアカウントを使用する
tab.general.minecraft_account.option_openauthmod=OpenAuthModを使用する
tab.general.betacraft_auth.label=BetaCraft Auth (クラシック)
tab.general.betacraft_auth.tooltip=BetaCraft Authを有効にすると、online modeが有効化されたクラシックサーバーに参加できるようになります。
tab.general.state.loading=ViaProxyをロードしています...
@ -48,7 +47,6 @@ tab.advanced.upload_latest_log.error_generic=ログをアップロードでき
tab.advanced.upload_latest_log.error_not_found=ログが見つかりませんでした。
tab.accounts.name=アカウント
tab.accounts.description.line1=オンラインモードが有効化されたサーバーにViaproxyで参加するにはMinecraftアカウントでログインしている必要があります。使用したいアカウントを右クリックすることで選択できます。デフォルトでは一番最初のものが使用されます。
tab.accounts.description.line2=アカウントを頻繁に変える場合は、OpenAuthModをクライアントにインストールすることができます。これをインストールすることでクライアントでログインしているアカウントを使ってViaProxyで接続できます。
tab.accounts.list.context_menu.select=アカウントを選択
tab.accounts.list.context_menu.remove=削除
tab.accounts.list.context_menu.move_up=上に上げる↑

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=서버 버전:
tab.general.minecraft_account.label=마인크래프트 계정:
tab.general.minecraft_account.option_no_account=계정 사용 안함
tab.general.minecraft_account.option_select_account=선택된 계정 사용
tab.general.minecraft_account.option_openauthmod=OpenAuthMod 사용
tab.general.betacraft_auth.label=Betacraft 인증(클래식)
tab.general.betacraft_auth.tooltip=Betacraft 인증을 활성화하면 클래식 정품 서버에 접속하실 수 있습니다.
tab.general.state.loading=ViaProxy를 불러오는 중...
@ -52,7 +51,6 @@ tab.advanced.upload_latest_log.error_generic=로그파일을 업로드할 수
tab.advanced.upload_latest_log.error_not_found=로그파일을 찾을 수 없습니다.
tab.accounts.name=계정
tab.accounts.description.line1=온라인 모드 서버를 플레이하려면 이 목록에서 계정을 선택해야 합니다. 오른쪽 마우스 클릭으로 계정을 선택할 수 있습니다. 기본적으로는 첫 번째 계정이 사용됩니다.
tab.accounts.description.line2=계정을 자주 바꾸는 경우, 클라이언트에 OpenAuthMod를 설치해보세요. OpenAuthMod를 쓰는 경우 ViaProxy가 클라이언트의 계정으로 로그인합니다.
tab.accounts.list.context_menu.select=계정 선택
tab.accounts.list.context_menu.remove=계정 제거
tab.accounts.list.context_menu.move_up=위 ↑

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=Wersja Serwera:
tab.general.minecraft_account.label=Konto Minecraft:
tab.general.minecraft_account.option_no_account=Nie używaj konta.
tab.general.minecraft_account.option_select_account=Użyj wybranego konta.
tab.general.minecraft_account.option_openauthmod=Użyj modyfikacji OpenAuth
tab.general.betacraft_auth.label=Autoryzacja BetaCraft (Classic)
tab.general.betacraft_auth.tooltip=Włączenie autoryzacji BetaCraft pozwoli tobie na dołączenie do serwerów klasycznych które posiadają włączony tryb online.
tab.general.state.loading=Ładowanie ViaProxy...
@ -43,7 +42,6 @@ tab.advanced.upload_latest_log.error_generic=Plik dziennika nie może zostać pr
tab.advanced.upload_latest_log.error_not_found=Plik dziennika nie został znaleziony.
tab.accounts.name=Konta
tab.accounts.description.line1=Aby dołączyć do serwerów które mają tryb online, musisz dodać oryginalne konto Minecraft. Konto możesz wybrać klikając na nie prawym przyciskiem, domyślnie pierwsze konto jest używane.
tab.accounts.description.line2=Jeśli często zmieniasz konto możesz użyć modyfikacji OpenAuth która umożliwi ViaProxy używanie konta na którym jesteś aktualnie zalogowany.
tab.accounts.list.context_menu.select=Wybierz Konto
tab.accounts.list.context_menu.remove=Usuń
tab.accounts.list.context_menu.move_up=Góra ↑

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=Версия сервера:
tab.general.minecraft_account.label=Учётная запись Minecraft:
tab.general.minecraft_account.option_no_account=Не использовать
tab.general.minecraft_account.option_select_account=Использовать выбранную
tab.general.minecraft_account.option_openauthmod=OpenAuthMod
tab.general.betacraft_auth.label=Авторизация BetaCraft (Classic)
tab.general.betacraft_auth.tooltip=Включение авторизации BetaCraft позволяет происоединяться\nк серверам Classic с включённой проверкой лицензии.
tab.general.state.loading=Загрузка ViaProxy...
@ -50,7 +49,6 @@ tab.advanced.upload_latest_log.error_generic=Не удалось загрузи
tab.advanced.upload_latest_log.error_not_found=Не удалось найти файл журнала.
tab.accounts.name=Учётные записи
tab.accounts.description.line1=Добавьте в ViaProxy учётную запись Minecraft, чтобы присоединяться к серверам с проверкой лицензии. Учётную запись можно выбрать двойным щелчком или в контекстном меню. По умолчанию будет использоваться верхняя позиция.
tab.accounts.description.line2=Если вы часто меняете учётные записи, можно установить мод OpenAuthMod. Это позволит ViaProxy использовать учётную запись вашего клиента.
tab.accounts.list.context_menu.select=Выбрать
tab.accounts.list.context_menu.remove=Удалить
tab.accounts.list.context_menu.move_up=↑ Вверх

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=Phiên bản:
tab.general.minecraft_account.label=Tài khoản Minecraft:
tab.general.minecraft_account.option_no_account=Không dùng tài khoản
tab.general.minecraft_account.option_select_account=Dùng tài khoản đã chọn
tab.general.minecraft_account.option_openauthmod=Dùng OpenAuthMod
tab.general.betacraft_auth.label=BetaCraft Auth (Classic)
tab.general.betacraft_auth.tooltip=Bật BetaCraft Auth cho phép bạn tham gia các server classic (<=1.7x) bằng tài khoản chính thức.
tab.general.state.loading=Đang tải...
@ -51,7 +50,6 @@ tab.advanced.upload_latest_log.error_generic=Không thể tải lên tập tin n
tab.advanced.upload_latest_log.error_not_found=Không tìm được tập tin nhật kí.
tab.accounts.name=Tài khoản
tab.accounts.description.line1=Để tham gia server Minecraft chính chủ, bạn phải thêm tài khoản vào ViaProxy để chơi. Bạn có thể nhấn chuột phải vào tài khoản để chọn. Theo mặc định tài khoản đầu tiên sẽ được sử dụng.
tab.accounts.description.line2=Nếu bạn thường xuyên chuyển tài khoản, bạn có thể sử dụng mod OpenAuth. Điều này cho phép ViaProxy sử dụng tài khoản bạn đã đăng nhập trên máy.
tab.accounts.list.context_menu.select=Chọn tài khoản
tab.accounts.list.context_menu.remove=Loại bỏ
tab.accounts.list.context_menu.move_up=lên ↑

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=服务器版本:
tab.general.minecraft_account.label=Minecraft账户
tab.general.minecraft_account.option_no_account=不使用账户
tab.general.minecraft_account.option_select_account=使用选定账户
tab.general.minecraft_account.option_openauthmod=使用OpenAuthMod
tab.general.betacraft_auth.label=BetaCraft验证Classic
tab.general.betacraft_auth.tooltip=启用BetaCraft验证可以让你加入启用在线模式的Classic服务器。
tab.general.state.loading=正在加载ViaProxy…
@ -52,7 +51,6 @@ tab.advanced.upload_latest_log.error_generic=无法上传日志文件:%s
tab.advanced.upload_latest_log.error_not_found=找不到日志文件。
tab.accounts.name=账户
tab.accounts.description.line1=要加入在线模式服务器你必须为ViaProxy添加一个Minecraft账户。可以通过右键点击选择账户。默认会使用首个账户。
tab.accounts.description.line2=如果需要频繁更换账户可以在客户端安装OpenAuthMod。这允许ViaProxy使用你在客户端登录的账户。
tab.accounts.list.context_menu.select=选择账户
tab.accounts.list.context_menu.remove=移除
tab.accounts.list.context_menu.move_up=上移 ↑

View File

@ -8,7 +8,6 @@ tab.general.server_version.label=伺服器版本:
tab.general.minecraft_account.label=Minecraft帳號
tab.general.minecraft_account.option_no_account=不使用帳號
tab.general.minecraft_account.option_select_account=使用選擇的帳號
tab.general.minecraft_account.option_openauthmod=使用 OpenAuthMod
tab.general.betacraft_auth.tooltip=啟用 BetaCraft Auth 可以讓你加入啟用線上模式的 Classic 伺服器。
tab.general.state.loading=正在載入 ViaProxy...
tab.general.state.start=啟動
@ -51,7 +50,6 @@ tab.advanced.upload_latest_log.error_generic=無法上傳記錄檔:%s
tab.advanced.upload_latest_log.error_not_found=找不到記錄檔。
tab.accounts.name=帳號
tab.accounts.description.line1=要加入線上模式伺服器,你必須為 ViaProxy 新增一個 Minecraft 帳號。你可以對帳號按右鍵來選擇帳號。在預設情況下,會使用第一個帳號。
tab.accounts.description.line2=如果你經常更換帳號,可以在用戶端安裝 OpenAuthMod。這會讓 ViaProxy 可以使用你在用戶端登入的帳號。
tab.accounts.list.context_menu.select=選擇帳號
tab.accounts.list.context_menu.remove=移除
tab.accounts.list.context_menu.move_up=向上移動 ↑