mirror of
https://github.com/ViaVersion/ViaProxy.git
synced 2024-12-22 16:38:04 +01:00
Moved OpenAuthMod authentication into its own ViaProxy plugin
https://github.com/ViaVersionAddons/ViaProxyOpenAuthMod OpenAuthMod is dead and rarely used
This commit is contained in:
parent
e6dc79ff61
commit
b8a1a63e1c
@ -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;
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
{
|
||||
|
@ -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 ↑
|
||||
|
@ -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 ↑
|
||||
|
@ -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 ↑
|
||||
|
@ -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
|
||||
|
@ -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 ↑
|
||||
|
@ -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=上に上げる↑
|
||||
|
@ -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=위 ↑
|
||||
|
@ -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 ↑
|
||||
|
@ -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=↑ Вверх
|
||||
|
@ -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 ↑
|
||||
|
@ -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=上移 ↑
|
||||
|
@ -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=向上移動 ↑
|
||||
|
Loading…
Reference in New Issue
Block a user