Compare commits
8 Commits
921853eb92
...
db2c6d2d43
Author | SHA1 | Date |
---|---|---|
dependabot[bot] | db2c6d2d43 | |
RaphiMC | c31d7c5bb8 | |
RaphiMC | 2f7b134dfd | |
Lenni0451 | 50f49709b0 | |
RaphiMC | 0353a9323b | |
RK_01 | 44987bf2d3 | |
komugikotan | 8ac74bff84 | |
dependabot[bot] | e3471e6723 |
|
@ -12,7 +12,7 @@ For a full user guide go to the [Usage for Players](#usage-for-players-gui) sect
|
|||
- Classic (c0.0.15 - c0.30 including [CPE](https://wiki.vg/Classic_Protocol_Extension))
|
||||
- April Fools (3D Shareware, 20w14infinite)
|
||||
- Combat Snapshots (Combat Test 8c)
|
||||
- Bedrock Edition 1.20.70 ([Some features are missing](https://github.com/RaphiMC/ViaBedrock#features))
|
||||
- Bedrock Edition 1.20.80 ([Some features are missing](https://github.com/RaphiMC/ViaBedrock#features))
|
||||
|
||||
## Supported Client versions
|
||||
- Release (1.7.2 - 1.20.6)
|
||||
|
|
|
@ -59,7 +59,7 @@ dependencies {
|
|||
include "com.viaversion:viarewind-common:3.1.1-SNAPSHOT"
|
||||
include "net.raphimc:ViaLegacy:2.2.23-SNAPSHOT"
|
||||
include "net.raphimc:ViaAprilFools:2.0.12-SNAPSHOT"
|
||||
include("net.raphimc:ViaBedrock:0.0.6-SNAPSHOT") {
|
||||
include("net.raphimc:ViaBedrock:0.0.7-SNAPSHOT") {
|
||||
exclude group: "io.netty"
|
||||
exclude group: "io.jsonwebtoken"
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ dependencies {
|
|||
include("org.cloudburstmc.netty:netty-transport-raknet:1.0.0.CR3-SNAPSHOT") {
|
||||
exclude group: "io.netty"
|
||||
}
|
||||
include "gs.mclo:api:3.0.1"
|
||||
include "gs.mclo:api:4.0.1"
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
|
|
@ -17,12 +17,12 @@
|
|||
*/
|
||||
package net.raphimc.viaproxy.protocoltranslator.impl;
|
||||
|
||||
import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.provider.TransferProvider;
|
||||
import com.viaversion.viaversion.api.Via;
|
||||
import com.viaversion.viaversion.api.protocol.version.VersionProvider;
|
||||
import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.CompressionProvider;
|
||||
import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.HandItemProvider;
|
||||
import net.raphimc.viabedrock.protocol.providers.NettyPipelineProvider;
|
||||
import net.raphimc.viabedrock.protocol.providers.TransferProvider;
|
||||
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.providers.ClassicCustomCommandProvider;
|
||||
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.providers.ClassicMPPassProvider;
|
||||
import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.providers.ClassicWorldHeightProvider;
|
||||
|
@ -46,7 +46,7 @@ public class ViaProxyVLLoader extends VLLoader {
|
|||
Via.getManager().getProviders().use(VersionProvider.class, new ViaProxyVersionProvider());
|
||||
|
||||
// ViaBackwards
|
||||
Via.getManager().getProviders().use(com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.provider.TransferProvider.class, new ViaProxyTransferProvider());
|
||||
Via.getManager().getProviders().use(TransferProvider.class, new ViaProxyTransferProvider());
|
||||
|
||||
// ViaLegacy
|
||||
Via.getManager().getProviders().use(GameProfileFetcher.class, new ViaProxyGameProfileFetcher());
|
||||
|
@ -58,7 +58,6 @@ public class ViaProxyVLLoader extends VLLoader {
|
|||
|
||||
// ViaBedrock
|
||||
Via.getManager().getProviders().use(NettyPipelineProvider.class, new ViaProxyNettyPipelineProvider());
|
||||
Via.getManager().getProviders().use(TransferProvider.class, new ViaProxyTransferProvider());
|
||||
|
||||
// ViaProxy plugins
|
||||
ViaProxy.EVENT_MANAGER.call(new ViaLoadingEvent());
|
||||
|
|
|
@ -17,20 +17,21 @@
|
|||
*/
|
||||
package net.raphimc.viaproxy.protocoltranslator.providers;
|
||||
|
||||
import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.provider.TransferProvider;
|
||||
import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.storage.CookieStorage;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import io.netty.channel.Channel;
|
||||
import net.raphimc.viabedrock.protocol.providers.TransferProvider;
|
||||
import net.raphimc.viaproxy.proxy.session.ProxyConnection;
|
||||
import net.raphimc.viaproxy.proxy.util.CloseAndReturn;
|
||||
import net.raphimc.viaproxy.proxy.util.TransferDataHolder;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
public class ViaProxyTransferProvider extends TransferProvider implements com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.provider.TransferProvider {
|
||||
public class ViaProxyTransferProvider implements TransferProvider {
|
||||
|
||||
@Override
|
||||
public void connectToServer(UserConnection user, InetSocketAddress newAddress) {
|
||||
public void connectToServer(UserConnection user, String host, int port) {
|
||||
final InetSocketAddress newAddress = new InetSocketAddress(host, port);
|
||||
final Channel channel = ProxyConnection.fromChannel(user.getChannel()).getC2P();
|
||||
TransferDataHolder.addTempRedirect(channel, newAddress);
|
||||
if (user.has(CookieStorage.class)) {
|
||||
|
@ -42,9 +43,4 @@ public class ViaProxyTransferProvider extends TransferProvider implements com.vi
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void connectToServer(UserConnection user, String host, int port) {
|
||||
this.connectToServer(user, new InetSocketAddress(host, port));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -58,6 +58,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
|
|||
private final OptionSpec<Boolean> optionBetacraftAuth;
|
||||
private final OptionSpec<String> optionBackendProxyUrl;
|
||||
private final OptionSpec<Boolean> optionBackendHaProxy;
|
||||
private final OptionSpec<Boolean> optionFrontendHaProxy;
|
||||
private final OptionSpec<Boolean> optionChatSigning;
|
||||
private final OptionSpec<Integer> optionCompressionThreshold;
|
||||
private final OptionSpec<Boolean> optionAllowBetaPinging;
|
||||
|
@ -75,6 +76,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
|
|||
private boolean betacraftAuth = false;
|
||||
private URI backendProxyUrl = null;
|
||||
private boolean backendHaProxy = false;
|
||||
private boolean frontendHaProxy = false;
|
||||
private boolean chatSigning = true;
|
||||
private int compressionThreshold = 256;
|
||||
private boolean allowBetaPinging = false;
|
||||
|
@ -97,6 +99,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
|
|||
this.optionBetacraftAuth = this.optionParser.accepts("betacraft-auth").withRequiredArg().ofType(Boolean.class).defaultsTo(this.betacraftAuth);
|
||||
this.optionBackendProxyUrl = this.optionParser.accepts("backend-proxy-url").withRequiredArg().ofType(String.class).defaultsTo("");
|
||||
this.optionBackendHaProxy = this.optionParser.accepts("backend-haproxy").withRequiredArg().ofType(Boolean.class).defaultsTo(this.backendHaProxy);
|
||||
this.optionFrontendHaProxy = this.optionParser.accepts("frontend-haproxy").withRequiredArg().ofType(Boolean.class).defaultsTo(this.frontendHaProxy);
|
||||
this.optionChatSigning = this.optionParser.accepts("chat-signing").withRequiredArg().ofType(Boolean.class).defaultsTo(this.chatSigning);
|
||||
this.optionCompressionThreshold = this.optionParser.accepts("compression-threshold").withRequiredArg().ofType(Integer.class).defaultsTo(this.compressionThreshold);
|
||||
this.optionAllowBetaPinging = this.optionParser.accepts("allow-beta-pinging").withRequiredArg().ofType(Boolean.class).defaultsTo(this.allowBetaPinging);
|
||||
|
@ -126,6 +129,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
|
|||
this.betacraftAuth = this.getBoolean("betacraft-auth", this.betacraftAuth);
|
||||
this.backendProxyUrl = this.parseProxyUrl(this.getString("backend-proxy-url", ""));
|
||||
this.backendHaProxy = this.getBoolean("backend-haproxy", this.backendHaProxy);
|
||||
this.frontendHaProxy = this.getBoolean("frontend-haproxy", this.frontendHaProxy);
|
||||
this.chatSigning = this.getBoolean("chat-signing", this.chatSigning);
|
||||
this.compressionThreshold = this.getInt("compression-threshold", this.compressionThreshold);
|
||||
this.allowBetaPinging = this.getBoolean("allow-beta-pinging", this.allowBetaPinging);
|
||||
|
@ -159,6 +163,7 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
|
|||
this.betacraftAuth = options.valueOf(this.optionBetacraftAuth);
|
||||
this.backendProxyUrl = this.parseProxyUrl(options.valueOf(this.optionBackendProxyUrl));
|
||||
this.backendHaProxy = options.valueOf(this.optionBackendHaProxy);
|
||||
this.frontendHaProxy = options.valueOf(this.optionFrontendHaProxy);
|
||||
this.chatSigning = options.valueOf(this.optionChatSigning);
|
||||
this.compressionThreshold = options.valueOf(this.optionCompressionThreshold);
|
||||
this.allowBetaPinging = options.valueOf(this.optionAllowBetaPinging);
|
||||
|
@ -283,6 +288,15 @@ public class ViaProxyConfig extends Config implements com.viaversion.viaversion.
|
|||
this.set("backend-haproxy", backendHaProxy);
|
||||
}
|
||||
|
||||
public boolean useFrontendHaProxy() {
|
||||
return this.frontendHaProxy;
|
||||
}
|
||||
|
||||
public void setFrontendHaProxy(final boolean frontendHaProxy) {
|
||||
this.frontendHaProxy = frontendHaProxy;
|
||||
this.set("frontend-haproxy", frontendHaProxy);
|
||||
}
|
||||
|
||||
public boolean shouldSignChat() {
|
||||
return this.chatSigning;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ package net.raphimc.viaproxy.proxy.client2proxy;
|
|||
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.channel.ChannelHandler;
|
||||
import io.netty.handler.codec.haproxy.HAProxyMessageDecoder;
|
||||
import net.raphimc.netminecraft.constants.MCPipeline;
|
||||
import net.raphimc.netminecraft.netty.connection.MinecraftChannelInitializer;
|
||||
import net.raphimc.netminecraft.packet.registry.PacketRegistryUtil;
|
||||
|
@ -31,6 +32,8 @@ import java.util.function.Supplier;
|
|||
|
||||
public class Client2ProxyChannelInitializer extends MinecraftChannelInitializer {
|
||||
|
||||
public static final String VIAPROXY_HAPROXY_DECODER_NAME = "viaproxy-haproxy-decoder";
|
||||
public static final String VIAPROXY_HAPROXY_HANDLER_NAME = "viaproxy-haproxy-handler";
|
||||
public static final String LEGACY_PASSTHROUGH_INITIAL_HANDLER_NAME = "legacy-passthrough-initial-handler";
|
||||
|
||||
public Client2ProxyChannelInitializer(final Supplier<ChannelHandler> handlerSupplier) {
|
||||
|
@ -44,6 +47,10 @@ public class Client2ProxyChannelInitializer extends MinecraftChannelInitializer
|
|||
return;
|
||||
}
|
||||
|
||||
if (ViaProxy.getConfig().useFrontendHaProxy()) {
|
||||
channel.pipeline().addLast(VIAPROXY_HAPROXY_DECODER_NAME, new HAProxyMessageDecoder());
|
||||
channel.pipeline().addLast(VIAPROXY_HAPROXY_HANDLER_NAME, new HAProxyHandler());
|
||||
}
|
||||
if (ViaProxy.getConfig().shouldAllowLegacyClientPassthrough()) {
|
||||
channel.pipeline().addLast(LEGACY_PASSTHROUGH_INITIAL_HANDLER_NAME, new LegacyPassthroughInitialHandler());
|
||||
}
|
||||
|
|
|
@ -134,19 +134,21 @@ public class Client2ProxyHandler extends SimpleChannelInboundHandler<IPacket> {
|
|||
if (handshakeParts[0].toLowerCase().contains(".viaproxy.")) {
|
||||
handshakeParts[0] = handshakeParts[0].substring(0, handshakeParts[0].toLowerCase().lastIndexOf(".viaproxy."));
|
||||
} else {
|
||||
throw CloseAndReturn.INSTANCE;
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
final ArrayHelper arrayHelper = ArrayHelper.instanceOf(handshakeParts[0].split(Pattern.quote("_")));
|
||||
if (arrayHelper.getLength() < 3) {
|
||||
throw CloseAndReturn.INSTANCE;
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
final String versionString = arrayHelper.get(arrayHelper.getLength() - 1);
|
||||
serverVersion = ProtocolVersionUtil.fromNameLenient(versionString);
|
||||
if (serverVersion == null) throw CloseAndReturn.INSTANCE;
|
||||
if (serverVersion == null) {
|
||||
this.proxyConnection.kickClient("§cWrong domain syntax!\n§cUnknown server version.");
|
||||
}
|
||||
final String connectIP = arrayHelper.getAsString(0, arrayHelper.getLength() - 3, "_");
|
||||
final int connectPort = arrayHelper.getInteger(arrayHelper.getLength() - 2);
|
||||
serverAddress = AddressUtil.parse(connectIP + ":" + connectPort, serverVersion);
|
||||
} catch (CloseAndReturn e) {
|
||||
} catch (IllegalArgumentException e) {
|
||||
this.proxyConnection.kickClient("§cWrong domain syntax! §6Please use:\n§7address_port_version.viaproxy.hostname");
|
||||
}
|
||||
} else if (ViaProxy.getConfig().getWildcardDomainHandling() == ViaProxyConfig.WildcardDomainHandling.INTERNAL) {
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* 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.client2proxy;
|
||||
|
||||
import io.netty.channel.AbstractChannel;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.channel.SimpleChannelInboundHandler;
|
||||
import io.netty.handler.codec.haproxy.HAProxyCommand;
|
||||
import io.netty.handler.codec.haproxy.HAProxyMessage;
|
||||
import net.lenni0451.reflect.stream.RStream;
|
||||
|
||||
import java.net.InetSocketAddress;
|
||||
|
||||
public class HAProxyHandler extends SimpleChannelInboundHandler<HAProxyMessage> {
|
||||
|
||||
@Override
|
||||
public void channelActive(ChannelHandlerContext ctx) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void channelRead0(ChannelHandlerContext ctx, HAProxyMessage message) throws Exception {
|
||||
if (message.command() != HAProxyCommand.PROXY) {
|
||||
throw new UnsupportedOperationException("Unsupported HAProxy command: " + message.command());
|
||||
}
|
||||
if (message.sourceAddress() != null) {
|
||||
final InetSocketAddress sourceAddress = new InetSocketAddress(message.sourceAddress(), message.sourcePort());
|
||||
if (ctx.channel() instanceof AbstractChannel) {
|
||||
RStream.of(AbstractChannel.class, ctx.channel()).fields().by("remoteAddress").set(sourceAddress);
|
||||
}
|
||||
}
|
||||
|
||||
ctx.pipeline().remove(this);
|
||||
super.channelActive(ctx);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,116 @@
|
|||
# ViaProxy language file
|
||||
#
|
||||
# Language contribution guidelines:
|
||||
# - Please use the same file content structure as in the en_US language file.
|
||||
# - Use the en_US language file as a reference/template for your language file.
|
||||
# - Keep the translations understandable and precise.
|
||||
# - Do not use or rely on machine translation (Google Translate, DeepL, etc.) exclusively.
|
||||
# - Do not copy an english translation into your language file. The en_US translation will be used as a fallback automatically.
|
||||
# - Include this header (untranslated) in your language file.
|
||||
|
||||
# The display name of the language
|
||||
language.name=日本語 (日本)
|
||||
# The name of the author of the language file (Your name)
|
||||
language.author=Komugikotan
|
||||
|
||||
generic.cancel=キャンセル
|
||||
generic.could_not_open_url=次のリンクを開けませんでした: %s
|
||||
|
||||
tab.general.name=全般
|
||||
tab.general.server_address.label=サーバーアドレス:
|
||||
tab.general.server_address.tooltip=サポートされている形式:\n- アドレス\n- アドレス:ポート番号\n- ClassiCube Direct URL
|
||||
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をロードしています...
|
||||
tab.general.state.start=起動
|
||||
tab.general.state.starting=起動中...
|
||||
tab.general.state.stop=停止
|
||||
tab.general.state.running=ViaProxyが起動しました!Minecraftバージョン: %s で %s に接続してください
|
||||
tab.general.warning.ban_warning.line1=ViaProxyはバージョンの違いによるアイテムやブロック、動きの違いでアンチチート等を動作させることがあります。
|
||||
tab.general.warning.bedrock_warning.line1=ViaBedrockは現在初期開発段階であり一般的な使用には向いていません。
|
||||
tab.general.warning.risk=自己の責任において使用してください!
|
||||
tab.general.error.no_server_version_selected=サーバーバージョンを選択してください!
|
||||
tab.general.error.invalid_classicube_url=ClassiCubeのDirect URLが無効です!
|
||||
tab.general.error.invalid_server_address=サーバーアドレスが無効です!
|
||||
tab.general.error.invalid_bind_address=転送アドレスが無効です!
|
||||
tab.general.error.invalid_proxy_url=プロキシーのURLが無効です!
|
||||
tab.general.error.failed_to_start=ViaProxyの起動に失敗しました!指定されたローカルポートがすでに使われていないことを確認してからもう一度試してください。
|
||||
|
||||
tab.advanced.name=詳細設定
|
||||
tab.advanced.bind_address.label=転送アドレス:
|
||||
tab.advanced.bind_address.tooltip=ViaProxyが接続を受け付けるアドレス
|
||||
tab.advanced.proxy_url.label=プロキシのURL:
|
||||
tab.advanced.proxy_url.tooltip=TCP接続に使われるSOCKS(4/5)/HTTP(S)プロキシのURL\nサポートされている形式:\n- type://address:port\n- type://username:password@address:port
|
||||
tab.advanced.proxy_online_mode.label=プロキシのオンラインモード(認証モード)の有効化
|
||||
tab.advanced.proxy_online_mode.tooltip=プロキシのオンラインモードを有効にすることでクライアントで有効なMinecraft アカウントでログインすることが必要になります。\n有効にすることで、オンラインサーバー上でスキンと署名付きメッセージの使用が可能になります。
|
||||
tab.advanced.legacy_skin_loading.label=レガシーなスキンのロードの有効化
|
||||
tab.advanced.legacy_skin_loading.tooltip=レガシーなスキンのロードを有効化することで1.6.4以下のサーバーでスキンの使用が可能になります。
|
||||
tab.advanced.chat_signing.label=署名付きメッセージの有効化
|
||||
tab.advanced.chat_signing.tooltip=1.19以上のサーバーで署名付きメッセージを送信することを有効化します。
|
||||
tab.advanced.ignore_packet_translation_errors.label=パケットの変換エラーを無視
|
||||
tab.advanced.ignore_packet_translation_errors.tooltip=これを有効にすることでパケットの変化ネラーが発生した際、ただコンソールにエラーを吐くだけではなくクライアントが切断されることを防ぎます。\nこの機能を有効化すると変換に失敗したパケットの種類のよって問題が発生することがあります。
|
||||
tab.advanced.allow_beta_pinging.label=b1.7.3以下のバージョンでのサーバーピングを許可
|
||||
tab.advanced.allow_beta_pinging.tooltip=これを有効にすることでb1.7.3以下のサーバーでピングを送信します。頻繁な接続をブロックするサーバーでは問題が発生することがあります。
|
||||
tab.advanced.create_viaversion_dump.label=ViaVersionのダンプデーターを作成
|
||||
tab.advanced.create_viaversion_dump.success=ViaVersionのダンプデーターのリンクをクリップボードにコピーしました。
|
||||
tab.advanced.upload_latest_log.label=最新のログをアップロード
|
||||
tab.advanced.upload_latest_log.success=ログを %s にアップロードしました(クリップボードにコピーしました)。
|
||||
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=上に上げる↑
|
||||
tab.accounts.list.context_menu.move_down=下に下げる↓
|
||||
tab.accounts.add.title=アカウントを追加
|
||||
tab.accounts.add_offline.label=オフラインアカウント
|
||||
tab.accounts.add_offline.enter_username=オフラインアカウントのユーザー名を入力してください:
|
||||
tab.accounts.add_microsoft.label=Microsoftアカウント
|
||||
tab.accounts.add_bedrock.label=統合版アカウント
|
||||
tab.accounts.add.success=アカウント「 %s 」を正常に追加しました。
|
||||
tab.accounts.add.timeout=ログイン要求がタイムアウトしました。\n%s秒以内にログインしてください。
|
||||
|
||||
tab.realms.name=Realms
|
||||
tab.realms.error_generic=Realmsリクエストを処理できませんでした: %s
|
||||
tab.realms.error_generic_label=不明なエラーが発生しました。
|
||||
tab.realms.error_account=選択されたアカウントをリフレッシュできませんでした。これは有効期限を過ぎたトークンを使用しているか回数制限に達したアカウントを使用しているせいかもしれません。少し時間をおいた後もう一度試してください。問題が解決しない場合は、一度アカウントを削除してもう一度追加してください。
|
||||
tab.realms.error_account_label=アカウントエラー
|
||||
tab.realms.no_account=アカウントが選択されていません。
|
||||
tab.realms.unsupported_account=サポートされていないアカウントが選択されています。
|
||||
tab.realms.refreshing_account=アカウントをリフレッシュしています...
|
||||
tab.realms.availability_check=利用が可能か確認しています...
|
||||
tab.realms.unavailable=あなたの使用しているViaProxyのバージョンが古くMinecraft Realmsと互換性がありません。\n最新版のViaProxyを使用してください。
|
||||
tab.realms.loading_worlds=ワールドを読み込み中です...
|
||||
tab.realms.no_worlds=ワールドが見つかりませんでした。
|
||||
tab.realms.account=アカウント: %s
|
||||
tab.realms.release=リリース
|
||||
tab.realms.snapshot=スナップショット
|
||||
tab.realms.join=参加
|
||||
tab.realms.joining=参加中...
|
||||
tab.realms.accept_tos=Minecraft Realmsを使用するには利用規約に同意してください: %s
|
||||
tab.realms.expired=このRealmは期限切れです。
|
||||
tab.realms.incompatible=このRealmのMinecraftバージョンが古すぎるか新しすぎます。
|
||||
|
||||
tab.ui_settings.name=UI設定
|
||||
tab.ui_settings.language.label=言語:
|
||||
tab.ui_settings.language.completion=%s翻訳済み
|
||||
tab.ui_settings.language.author=by %s
|
||||
tab.ui_settings.language.success=言語が %s (%s)に変更されました。ViaProxyを再起動します!
|
||||
|
||||
popup.login_account.title=アカウントを追加
|
||||
popup.login_account.instructions.browser=以下のURLをブラウザで開いてください:
|
||||
popup.login_account.instructions.close=ログイン後、このポップアップは自動的に閉じられます。
|
||||
|
||||
popup.download.title=ダウンロード中...
|
||||
|
||||
popup.update.info=あなたの使用しているViaProxyは古いバージョンです!\n使用しているバージョン: %s\n最新バージョン: %s
|
||||
popup.update.question=アップデートしますか?
|
||||
popup.update.success=最新バージョンのViaProxyをダウンロードしました。ViaProxyを再起動します!
|
|
@ -36,6 +36,9 @@ backend-proxy-url: ""
|
|||
# Send HAProxy protocol messages to the target server.
|
||||
backend-haproxy: false
|
||||
#
|
||||
# Read HAProxy protocol messages from client connections.
|
||||
frontend-haproxy: false
|
||||
#
|
||||
# Enables sending signed chat messages on >= 1.19 servers.
|
||||
chat-signing: true
|
||||
#
|
||||
|
|
Loading…
Reference in New Issue