From 82fa69611e1c635639d009e9ad6a2101d50ed604 Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Tue, 29 Sep 2026 06:04:19 -0400 Subject: [PATCH] Accurate teleport failures - Waits for the destination chunk without a wall-clock deadline so a cold first chunk no longer fails the teleport - Reports the failure cause, an unloaded dimension, an offline player or a refused teleport separately - Adds the new messages to every locale --- .../modded/command/IrisModdedCommands.java | 38 +++++++++++++-- .../localization/ModdedCommandMessages.java | 15 ++++++ .../IrisModdedCommandsTeleportTest.java | 48 +++++++++++++++++++ core/src/main/resources/languages/de_DE.toml | 3 ++ core/src/main/resources/languages/es_ES.toml | 3 ++ core/src/main/resources/languages/fi_FI.toml | 3 ++ core/src/main/resources/languages/fr_FR.toml | 3 ++ core/src/main/resources/languages/he_IL.toml | 3 ++ core/src/main/resources/languages/it_IT.toml | 3 ++ core/src/main/resources/languages/ja-JP.toml | 3 ++ core/src/main/resources/languages/ko_KR.toml | 3 ++ core/src/main/resources/languages/lt_LT.toml | 3 ++ core/src/main/resources/languages/nl_NL.toml | 3 ++ core/src/main/resources/languages/pl_PL.toml | 3 ++ core/src/main/resources/languages/pt_PT.toml | 3 ++ core/src/main/resources/languages/ru_RU.toml | 3 ++ core/src/main/resources/languages/tr_TR.toml | 3 ++ core/src/main/resources/languages/vi_VI.toml | 3 ++ core/src/main/resources/languages/zh_CN.toml | 3 ++ core/src/main/resources/languages/zh_TW.toml | 3 ++ 20 files changed, 147 insertions(+), 5 deletions(-) create mode 100644 adapters/modded-common/src/test/java/art/arcane/iris/modded/command/IrisModdedCommandsTeleportTest.java diff --git a/adapters/modded-common/src/main/java/art/arcane/iris/modded/command/IrisModdedCommands.java b/adapters/modded-common/src/main/java/art/arcane/iris/modded/command/IrisModdedCommands.java index 110654bb5..3c791cd44 100644 --- a/adapters/modded-common/src/main/java/art/arcane/iris/modded/command/IrisModdedCommands.java +++ b/adapters/modded-common/src/main/java/art/arcane/iris/modded/command/IrisModdedCommands.java @@ -60,6 +60,7 @@ import java.util.Locale; import java.util.Map; import java.util.TreeMap; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; import java.util.concurrent.TimeUnit; import art.arcane.volmlib.util.localization.MessageArgument; @@ -132,8 +133,7 @@ public final class IrisModdedCommands { String dimensionId = level.name(); NativeModdedServer server = source.server(); CompletableFuture teleport = NativeWorldTeleport.teleport(player, new NativeWorldTeleport.Destination( - server, ModdedDimensionManager.level(server, dimensionId), 8.5D, Double.MIN_VALUE, 8.5D, - System.nanoTime() + TimeUnit.SECONDS.toNanos(10L))); + server, ModdedDimensionManager.level(server, dimensionId), 8.5D, Double.MIN_VALUE, 8.5D, 0L)); teleport.whenComplete((success, failure) -> { if (Boolean.TRUE.equals(success) && failure == null) { return; @@ -142,14 +142,42 @@ public final class IrisModdedCommands { ModdedIrisLog.error("Iris teleport into '{}' failed for {}", dimensionId, player.id(), failure); } - server.execute(() -> fail(source, IrisLanguage.plain( - ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORT_FAILED_DIMENSION_IS_NOT_LOADED, - MessageArgument.untrusted("dimensionId", dimensionId)))); + server.execute(() -> fail(source, teleportFailure(dimensionId, player.name(), failure, + ModdedDimensionManager.level(server, dimensionId) != null, server.player(player.id()) != null))); }); ok(source, IrisLanguage.plain(ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORTING, MessageArgument.untrusted("value", player.name()), MessageArgument.untrusted("dimensionId", dimensionId))); return 1; } + static String teleportFailure(String dimensionId, String playerName, Throwable failure, + boolean dimensionLoaded, boolean playerOnline) { + if (failure != null) { + return IrisLanguage.plain(ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORT_FAILED_REASON, + MessageArgument.untrusted("dimensionId", dimensionId), + MessageArgument.untrusted("reason", failureReason(failure))); + } + if (!dimensionLoaded) { + return IrisLanguage.plain(ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORT_FAILED_DIMENSION_IS_NOT_LOADED, + MessageArgument.untrusted("dimensionId", dimensionId)); + } + if (!playerOnline) { + return IrisLanguage.plain(ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORT_CANCELLED_PLAYER_OFFLINE, + MessageArgument.untrusted("dimensionId", dimensionId), + MessageArgument.untrusted("value", playerName)); + } + return IrisLanguage.plain(ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORT_REFUSED, + MessageArgument.untrusted("dimensionId", dimensionId)); + } + + private static String failureReason(Throwable failure) { + Throwable cause = failure; + while (cause instanceof CompletionException && cause.getCause() != null) { + cause = cause.getCause(); + } + String message = cause.getMessage(); + return message == null || message.isBlank() ? cause.getClass().getSimpleName() : message; + } + static int evacuate(NativeCommandSource source, NativeWorld target) { NativeModdedServer server = source.server(); NativeWorld level = target != null ? target : source.world(); diff --git a/adapters/modded-common/src/main/java/art/arcane/iris/modded/localization/ModdedCommandMessages.java b/adapters/modded-common/src/main/java/art/arcane/iris/modded/localization/ModdedCommandMessages.java index e25c83ce8..f6b6779cb 100644 --- a/adapters/modded-common/src/main/java/art/arcane/iris/modded/localization/ModdedCommandMessages.java +++ b/adapters/modded-common/src/main/java/art/arcane/iris/modded/localization/ModdedCommandMessages.java @@ -71,6 +71,18 @@ public final class ModdedCommandMessages { "iris.modded.irismoddedcommands.teleport_failed_dimension_is_not_loaded", "Teleport failed: dimension " + "{dimensionId}" + " is not loaded." ); + public static final TextKey IRIS_MODDED_COMMANDS_TELEPORT_FAILED_REASON = TextKey.of( + "iris.modded.irismoddedcommands.teleport_failed_reason", + "Teleport into " + "{dimensionId}" + " failed: " + "{reason}" + ); + public static final TextKey IRIS_MODDED_COMMANDS_TELEPORT_CANCELLED_PLAYER_OFFLINE = TextKey.of( + "iris.modded.irismoddedcommands.teleport_cancelled_player_offline", + "Teleport into " + "{dimensionId}" + " cancelled: " + "{value}" + " is no longer online." + ); + public static final TextKey IRIS_MODDED_COMMANDS_TELEPORT_REFUSED = TextKey.of( + "iris.modded.irismoddedcommands.teleport_refused", + "Teleport into " + "{dimensionId}" + " was refused by the server." + ); public static final TextKey IRIS_MODDED_COMMANDS_TELEPORTING = TextKey.of( "iris.modded.irismoddedcommands.teleporting", "Teleporting " + "{value}" + " to " + "{dimensionId}" + "..." @@ -1266,6 +1278,9 @@ public final class ModdedCommandMessages { IRIS_MODDED_COMMANDS_CONSOLE_MUST_NAME_PLAYER_IRIS_TP_DIMENSION_PLAYER, IRIS_MODDED_COMMANDS_IS_NOT_GENERATED_BY_IRIS, IRIS_MODDED_COMMANDS_TELEPORT_FAILED_DIMENSION_IS_NOT_LOADED, + IRIS_MODDED_COMMANDS_TELEPORT_FAILED_REASON, + IRIS_MODDED_COMMANDS_TELEPORT_CANCELLED_PLAYER_OFFLINE, + IRIS_MODDED_COMMANDS_TELEPORT_REFUSED, IRIS_MODDED_COMMANDS_TELEPORTING, IRIS_MODDED_COMMANDS_IS_NOT_GENERATED_BY_IRIS_2, IRIS_MODDED_COMMANDS_CANNOT_EVACUATE_PRIMARY_WORLD_THERE_IS_NOWHERE_SEND_PLAYERS, diff --git a/adapters/modded-common/src/test/java/art/arcane/iris/modded/command/IrisModdedCommandsTeleportTest.java b/adapters/modded-common/src/test/java/art/arcane/iris/modded/command/IrisModdedCommandsTeleportTest.java new file mode 100644 index 000000000..5cfc72fe4 --- /dev/null +++ b/adapters/modded-common/src/test/java/art/arcane/iris/modded/command/IrisModdedCommandsTeleportTest.java @@ -0,0 +1,48 @@ +package art.arcane.iris.modded.command; + +import art.arcane.iris.localization.IrisLanguage; +import art.arcane.iris.modded.localization.ModdedCommandMessages; +import art.arcane.volmlib.util.localization.MessageArgument; +import org.junit.Test; + +import java.util.concurrent.CompletionException; +import java.util.concurrent.TimeoutException; + +import static org.junit.Assert.assertEquals; + +public class IrisModdedCommandsTeleportTest { + private static final String DIMENSION = "irisworldgen:1"; + + @Test + public void failureReportsItsRootCauseInsteadOfAnUnloadedDimension() { + String message = IrisModdedCommands.teleportFailure(DIMENSION, "Tester", + new CompletionException(new IllegalStateException("Exception generating new chunk")), true, true); + + assertEquals(IrisLanguage.plain(ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORT_FAILED_REASON, + MessageArgument.untrusted("dimensionId", DIMENSION), + MessageArgument.untrusted("reason", "Exception generating new chunk")), message); + } + + @Test + public void failureWithoutMessageNamesTheFailureType() { + String message = IrisModdedCommands.teleportFailure(DIMENSION, "Tester", new TimeoutException(), true, true); + + assertEquals(IrisLanguage.plain(ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORT_FAILED_REASON, + MessageArgument.untrusted("dimensionId", DIMENSION), + MessageArgument.untrusted("reason", "TimeoutException")), message); + } + + @Test + public void unloadedDimensionIsReportedOnlyWhenItIsGone() { + assertEquals(IrisLanguage.plain(ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORT_FAILED_DIMENSION_IS_NOT_LOADED, + MessageArgument.untrusted("dimensionId", DIMENSION)), + IrisModdedCommands.teleportFailure(DIMENSION, "Tester", null, false, true)); + assertEquals(IrisLanguage.plain(ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORT_CANCELLED_PLAYER_OFFLINE, + MessageArgument.untrusted("dimensionId", DIMENSION), + MessageArgument.untrusted("value", "Tester")), + IrisModdedCommands.teleportFailure(DIMENSION, "Tester", null, true, false)); + assertEquals(IrisLanguage.plain(ModdedCommandMessages.IRIS_MODDED_COMMANDS_TELEPORT_REFUSED, + MessageArgument.untrusted("dimensionId", DIMENSION)), + IrisModdedCommands.teleportFailure(DIMENSION, "Tester", null, true, true)); + } +} diff --git a/core/src/main/resources/languages/de_DE.toml b/core/src/main/resources/languages/de_DE.toml index 016735991..cf9ca7168 100644 --- a/core/src/main/resources/languages/de_DE.toml +++ b/core/src/main/resources/languages/de_DE.toml @@ -769,6 +769,9 @@ opening_your_editor = "Öffne {value} {value2} in deinem Editor." console_must_name_player_iris_tp_dimension_player = "Die Konsole muss einen Spieler benennen: /iris tp " is_not_generated_by_iris = "{value} wird nicht von Iris generiert." teleport_failed_dimension_is_not_loaded = "Teleportation fehlgeschlagen: Dimension {dimensionId} ist nicht geladen." +teleport_failed_reason = "Teleport nach {dimensionId} fehlgeschlagen: {reason}" +teleport_cancelled_player_offline = "Teleport nach {dimensionId} abgebrochen: {value} ist nicht mehr online." +teleport_refused = "Teleport nach {dimensionId} wurde vom Server abgelehnt." teleporting = "Teleportiere {value} nach {dimensionId}..." is_not_generated_by_iris_2 = "{value} wird nicht von Iris generiert." cannot_evacuate_primary_world_there_is_nowhere_send_players = "Die primäre Welt kann nicht evakuiert werden, da es kein Ziel für die Spieler gibt." diff --git a/core/src/main/resources/languages/es_ES.toml b/core/src/main/resources/languages/es_ES.toml index 74785879a..09341bda9 100644 --- a/core/src/main/resources/languages/es_ES.toml +++ b/core/src/main/resources/languages/es_ES.toml @@ -769,6 +769,9 @@ opening_your_editor = "Abriendo {value} {value2} en tu editor." console_must_name_player_iris_tp_dimension_player = "La consola debe indicar un jugador: /iris tp " is_not_generated_by_iris = "{value} no se genera por Iris." teleport_failed_dimension_is_not_loaded = "El teletransporte falló: la dimensión {dimensionId} no está cargada." +teleport_failed_reason = "El teletransporte a {dimensionId} falló: {reason}" +teleport_cancelled_player_offline = "Teletransporte a {dimensionId} cancelado: {value} ya no está conectado." +teleport_refused = "El servidor rechazó el teletransporte a {dimensionId}." teleporting = "Teletransportando a {value} a {dimensionId}..." is_not_generated_by_iris_2 = "{value} no se genera por Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "No se puede evacuar el mundo principal porque no hay adónde enviar a los jugadores." diff --git a/core/src/main/resources/languages/fi_FI.toml b/core/src/main/resources/languages/fi_FI.toml index e361bf777..399ec90d3 100644 --- a/core/src/main/resources/languages/fi_FI.toml +++ b/core/src/main/resources/languages/fi_FI.toml @@ -774,6 +774,9 @@ opening_your_editor = "Avaaminen {value} {value2} Päätoimittajassasi." console_must_name_player_iris_tp_dimension_player = "Konsolin on nimettävä pelaaja: /iris tp " is_not_generated_by_iris = "{value} ei ole tuotettu Iris." teleport_failed_dimension_is_not_loaded = "Teleportti epäonnistui: ulottuvuus {dimensionId} ei ole ladattu." +teleport_failed_reason = "Teleporttaus ulottuvuuteen {dimensionId} epäonnistui: {reason}" +teleport_cancelled_player_offline = "Teleporttaus ulottuvuuteen {dimensionId} peruttiin: {value} ei ole enää paikalla." +teleport_refused = "Palvelin hylkäsi teleporttauksen ulottuvuuteen {dimensionId}." teleporting = "Telesiirtäminen {value} - {dimensionId}..." is_not_generated_by_iris_2 = "{value} ei ole tuotettu Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "Ensisijaista maailmaa ei voida evakuoida; pelaajia ei voi lähettää minnekään." diff --git a/core/src/main/resources/languages/fr_FR.toml b/core/src/main/resources/languages/fr_FR.toml index 7a1a7c063..3f35a01e7 100644 --- a/core/src/main/resources/languages/fr_FR.toml +++ b/core/src/main/resources/languages/fr_FR.toml @@ -769,6 +769,9 @@ opening_your_editor = "Ouverture de {value} {value2} dans votre éditeur." console_must_name_player_iris_tp_dimension_player = "La console doit indiquer un joueur : /iris tp " is_not_generated_by_iris = "{value} n'est pas généré par Iris." teleport_failed_dimension_is_not_loaded = "Échec de la téléportation : la dimension {dimensionId} n'est pas chargée." +teleport_failed_reason = "Échec de la téléportation vers {dimensionId} : {reason}" +teleport_cancelled_player_offline = "Téléportation vers {dimensionId} annulée : {value} n'est plus connecté." +teleport_refused = "Le serveur a refusé la téléportation vers {dimensionId}." teleporting = "Téléportation de {value} vers {dimensionId}..." is_not_generated_by_iris_2 = "{value} n'est pas généré par Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "Impossible d'évacuer le monde principal, car aucun autre monde ne peut accueillir les joueurs." diff --git a/core/src/main/resources/languages/he_IL.toml b/core/src/main/resources/languages/he_IL.toml index 11c001580..4b0b85b79 100644 --- a/core/src/main/resources/languages/he_IL.toml +++ b/core/src/main/resources/languages/he_IL.toml @@ -774,6 +774,9 @@ opening_your_editor = "פתיחה {value} {value2} בעורך שלך." console_must_name_player_iris_tp_dimension_player = "הקונסולה חייבת לקרוא לשחקן: /iris tp " is_not_generated_by_iris = "{value} לא נוצר על ידי Iris." teleport_failed_dimension_is_not_loaded = "טלפורט נכשל: ממד {dimensionId} לא טעון." +teleport_failed_reason = "השיגור אל {dimensionId} נכשל: {reason}" +teleport_cancelled_player_offline = "השיגור אל {dimensionId} בוטל: {value} כבר לא מחובר." +teleport_refused = "השרת דחה את השיגור אל {dimensionId}." teleporting = "תקשורת {value} כדי {dimensionId}..." is_not_generated_by_iris_2 = "{value} לא נוצר על ידי Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "לא ניתן לפנות לעולם הראשי, אין מקום לשלוח שחקנים." diff --git a/core/src/main/resources/languages/it_IT.toml b/core/src/main/resources/languages/it_IT.toml index 71d53a917..30b6cd439 100644 --- a/core/src/main/resources/languages/it_IT.toml +++ b/core/src/main/resources/languages/it_IT.toml @@ -769,6 +769,9 @@ opening_your_editor = "Apertura di {value} {value2} nel tuo editor." console_must_name_player_iris_tp_dimension_player = "La console deve specificare un giocatore: /iris tp " is_not_generated_by_iris = "{value} non è generato da Iris." teleport_failed_dimension_is_not_loaded = "Teletrasporto non riuscito: la dimensione {dimensionId} non è caricata." +teleport_failed_reason = "Teletrasporto verso {dimensionId} non riuscito: {reason}" +teleport_cancelled_player_offline = "Teletrasporto verso {dimensionId} annullato: {value} non è più online." +teleport_refused = "Il server ha rifiutato il teletrasporto verso {dimensionId}." teleporting = "Teletrasporto di {value} verso {dimensionId}..." is_not_generated_by_iris_2 = "{value} non è generato da Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "Impossibile evacuare il mondo principale: non esiste una destinazione per i giocatori." diff --git a/core/src/main/resources/languages/ja-JP.toml b/core/src/main/resources/languages/ja-JP.toml index 29998c0d9..4c5015852 100644 --- a/core/src/main/resources/languages/ja-JP.toml +++ b/core/src/main/resources/languages/ja-JP.toml @@ -772,6 +772,9 @@ opening_your_editor = "エディターで {value} {value2} を開いています console_must_name_player_iris_tp_dimension_player = "コンソールではプレイヤーを指定してください: /iris tp " is_not_generated_by_iris = "{value} は Iris によって生成されていません。" teleport_failed_dimension_is_not_loaded = "テレポートに失敗しました: ディメンション {dimensionId} は読み込まれていません。" +teleport_failed_reason = "{dimensionId} へのテレポートに失敗しました: {reason}" +teleport_cancelled_player_offline = "{dimensionId} へのテレポートを中止しました: {value} はオフラインです。" +teleport_refused = "サーバーが {dimensionId} へのテレポートを拒否しました。" teleporting = "{value} を {dimensionId} にテレポートしています..." is_not_generated_by_iris_2 = "{value} は Iris によって生成されていません。" cannot_evacuate_primary_world_there_is_nowhere_send_players = "プライマリーワールドからは退避できません。プレイヤーの移動先がありません。" diff --git a/core/src/main/resources/languages/ko_KR.toml b/core/src/main/resources/languages/ko_KR.toml index dcb44448c..93f39434e 100644 --- a/core/src/main/resources/languages/ko_KR.toml +++ b/core/src/main/resources/languages/ko_KR.toml @@ -772,6 +772,9 @@ opening_your_editor = "편집기에서 {value} {value2} 여는 중입니다." console_must_name_player_iris_tp_dimension_player = "콘솔은 플레이어를 지정해야 합니다: /iris tp " is_not_generated_by_iris = "{value} 에 의해 생성되지 않음 Iris." teleport_failed_dimension_is_not_loaded = "Teleport 실패: 차원 {dimensionId} 로드 되지 않습니다." +teleport_failed_reason = "{dimensionId}(으)로 순간이동 실패: {reason}" +teleport_cancelled_player_offline = "{dimensionId}(으)로 순간이동 취소됨: {value} 님이 더 이상 접속해 있지 않습니다." +teleport_refused = "서버가 {dimensionId}(으)로의 순간이동을 거부했습니다." teleporting = "팟캐스트 {value} 으로 {dimensionId}..." is_not_generated_by_iris_2 = "{value} 에 의해 생성되지 않음 Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "1 차 세계를 피할 수 없습니다. 플레이어에게 보내는 곳이 없습니다." diff --git a/core/src/main/resources/languages/lt_LT.toml b/core/src/main/resources/languages/lt_LT.toml index ec28e1cb6..1775faf79 100644 --- a/core/src/main/resources/languages/lt_LT.toml +++ b/core/src/main/resources/languages/lt_LT.toml @@ -774,6 +774,9 @@ opening_your_editor = "Atidaryti {value} {value2} redaktoriuje." console_must_name_player_iris_tp_dimension_player = "Konsolė turi pavadinti žaidėją: /iris tp " is_not_generated_by_iris = "{value} generuoja ne Iris." teleport_failed_dimension_is_not_loaded = "Teleportas nepavyko: dimensija {dimensionId} neįkrauta." +teleport_failed_reason = "Teleportavimas į {dimensionId} nepavyko: {reason}" +teleport_cancelled_player_offline = "Teleportavimas į {dimensionId} atšauktas: {value} nebėra prisijungęs." +teleport_refused = "Serveris atmetė teleportavimą į {dimensionId}." teleporting = "Teleportavimas {value} iki {dimensionId}..." is_not_generated_by_iris_2 = "{value} generuoja ne Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "Negalima evakuoti pirminio pasaulio; nėra kur siųsti žaidėjų." diff --git a/core/src/main/resources/languages/nl_NL.toml b/core/src/main/resources/languages/nl_NL.toml index a204dfa86..6818e6baa 100644 --- a/core/src/main/resources/languages/nl_NL.toml +++ b/core/src/main/resources/languages/nl_NL.toml @@ -769,6 +769,9 @@ opening_your_editor = "Openen {value} {value2} in uw redacteur." console_must_name_player_iris_tp_dimension_player = "Console moet een speler een naam geven: /iris tp " is_not_generated_by_iris = "{value} wordt niet gegenereerd door Iris." teleport_failed_dimension_is_not_loaded = "Teleporteren mislukt: dimensie {dimensionId} is niet geladen." +teleport_failed_reason = "Teleporteren naar {dimensionId} mislukt: {reason}" +teleport_cancelled_player_offline = "Teleporteren naar {dimensionId} geannuleerd: {value} is niet meer online." +teleport_refused = "De server heeft het teleporteren naar {dimensionId} geweigerd." teleporting = "Teleporteren {value} tot {dimensionId}..." is_not_generated_by_iris_2 = "{value} wordt niet gegenereerd door Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "Kan de primaire wereld niet evacueren; er is geen plek om spelers te sturen." diff --git a/core/src/main/resources/languages/pl_PL.toml b/core/src/main/resources/languages/pl_PL.toml index 5936cc4ae..c08cfd8d8 100644 --- a/core/src/main/resources/languages/pl_PL.toml +++ b/core/src/main/resources/languages/pl_PL.toml @@ -774,6 +774,9 @@ opening_your_editor = "Otwarcie {value} {value2} w twoim wydawcy." console_must_name_player_iris_tp_dimension_player = "Konsola musi nazwać gracza: /iris tp " is_not_generated_by_iris = "{value} nie jest generowany przez Iris." teleport_failed_dimension_is_not_loaded = "Teleport nie powiódł się: wymiar {dimensionId} nie jest załadowany." +teleport_failed_reason = "Teleportacja do {dimensionId} nie powiodła się: {reason}" +teleport_cancelled_player_offline = "Teleportacja do {dimensionId} anulowana: {value} nie jest już online." +teleport_refused = "Serwer odrzucił teleportację do {dimensionId}." teleporting = "Teleportowanie {value} do {dimensionId}..." is_not_generated_by_iris_2 = "{value} nie jest generowany przez Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "Nie można ewakuować głównego świata; nie ma gdzie wysłać graczy." diff --git a/core/src/main/resources/languages/pt_PT.toml b/core/src/main/resources/languages/pt_PT.toml index 5627c6c21..753610da6 100644 --- a/core/src/main/resources/languages/pt_PT.toml +++ b/core/src/main/resources/languages/pt_PT.toml @@ -769,6 +769,9 @@ opening_your_editor = "Abertura {value} {value2} no seu editor." console_must_name_player_iris_tp_dimension_player = "A consola deve nomear um jogador: /iris tp " is_not_generated_by_iris = "{value} não é gerado por Iris." teleport_failed_dimension_is_not_loaded = "Falha no teletransporte: dimensão {dimensionId} não está carregada." +teleport_failed_reason = "Falha no teletransporte para {dimensionId}: {reason}" +teleport_cancelled_player_offline = "Teletransporte para {dimensionId} cancelado: {value} já não está online." +teleport_refused = "O servidor recusou o teletransporte para {dimensionId}." teleporting = "Teletransportando {value} para {dimensionId}..." is_not_generated_by_iris_2 = "{value} não é gerado por Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "Não é possível evacuar o mundo primário; não há nenhum lugar para enviar jogadores." diff --git a/core/src/main/resources/languages/ru_RU.toml b/core/src/main/resources/languages/ru_RU.toml index f305bd5f1..d5ac2aded 100644 --- a/core/src/main/resources/languages/ru_RU.toml +++ b/core/src/main/resources/languages/ru_RU.toml @@ -774,6 +774,9 @@ opening_your_editor = "Открытие {value} {value2} В вашем реда console_must_name_player_iris_tp_dimension_player = "Консоль должна называть игрока: /iris tp " is_not_generated_by_iris = "{value} не генерируется путем Iris." teleport_failed_dimension_is_not_loaded = "Телепорт провалился: измерение {dimensionId} не загружается." +teleport_failed_reason = "Не удалось телепортироваться в {dimensionId}: {reason}" +teleport_cancelled_player_offline = "Телепортация в {dimensionId} отменена: {value} больше не в сети." +teleport_refused = "Сервер отклонил телепортацию в {dimensionId}." teleporting = "телепортация {value} то {dimensionId}..." is_not_generated_by_iris_2 = "{value} не генерируется путем Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "Нельзя эвакуировать основной мир, негде отправить игроков." diff --git a/core/src/main/resources/languages/tr_TR.toml b/core/src/main/resources/languages/tr_TR.toml index 5649ccba5..02163a561 100644 --- a/core/src/main/resources/languages/tr_TR.toml +++ b/core/src/main/resources/languages/tr_TR.toml @@ -774,6 +774,9 @@ opening_your_editor = "Açılış {value} {value2} editörünüzde." console_must_name_player_iris_tp_dimension_player = "Konsol bir oyuncu adı olmalıdır: /iris tp " is_not_generated_by_iris = "{value} tarafından üretilmiyor Iris." teleport_failed_dimension_is_not_loaded = "Teleport başarısız oldu: Boyut {dimensionId} yüklenemez." +teleport_failed_reason = "{dimensionId} boyutuna ışınlanma başarısız oldu: {reason}" +teleport_cancelled_player_offline = "{dimensionId} boyutuna ışınlanma iptal edildi: {value} artık çevrimiçi değil." +teleport_refused = "Sunucu {dimensionId} boyutuna ışınlanmayı reddetti." teleporting = "Telporting {value} tom için {dimensionId}..." is_not_generated_by_iris_2 = "{value} tarafından üretilmiyor Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "birincil dünyayı tahliye edemez; oyuncuları göndermek için hiçbir yer yoktur." diff --git a/core/src/main/resources/languages/vi_VI.toml b/core/src/main/resources/languages/vi_VI.toml index 3c3b06cdb..616ac7557 100644 --- a/core/src/main/resources/languages/vi_VI.toml +++ b/core/src/main/resources/languages/vi_VI.toml @@ -772,6 +772,9 @@ opening_your_editor = "Mở {value} {value2} trong biên tập của anh." console_must_name_player_iris_tp_dimension_player = "Cần phải đặt tên người chơi: /iris tp " is_not_generated_by_iris = "{value} không được tạo ra bởi Iris." teleport_failed_dimension_is_not_loaded = "Chuyển tiếp thất bại: chiều {dimensionId} không nạp đạn." +teleport_failed_reason = "Dịch chuyển tới {dimensionId} thất bại: {reason}" +teleport_cancelled_player_offline = "Đã hủy dịch chuyển tới {dimensionId}: {value} không còn trực tuyến." +teleport_refused = "Máy chủ đã từ chối dịch chuyển tới {dimensionId}." teleporting = "Chuyển tiếp {value} phải {dimensionId}..." is_not_generated_by_iris_2 = "{value} không được tạo ra bởi Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "Không thể sơ tán thế giới chính; không có nơi nào để gửi cầu thủ." diff --git a/core/src/main/resources/languages/zh_CN.toml b/core/src/main/resources/languages/zh_CN.toml index 471381179..ec1feb7bf 100644 --- a/core/src/main/resources/languages/zh_CN.toml +++ b/core/src/main/resources/languages/zh_CN.toml @@ -772,6 +772,9 @@ opening_your_editor = "开幕 {value} {value2} 在你的编辑。" console_must_name_player_iris_tp_dimension_player = "控制台必须给玩家命名 : /iris tp " is_not_generated_by_iris = "{value} 不由 Iris." teleport_failed_dimension_is_not_loaded = "Teleport 失败: 维度 {dimensionId} 未加载。" +teleport_failed_reason = "传送到 {dimensionId} 失败:{reason}" +teleport_cancelled_player_offline = "已取消传送到 {dimensionId}:{value} 已不在线。" +teleport_refused = "服务器拒绝了传送到 {dimensionId}。" teleporting = "远程传送 {value} 改为: {dimensionId}..." is_not_generated_by_iris_2 = "{value} 不由 Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "无法撤离主世界; 没有地方可以发送玩家 。" diff --git a/core/src/main/resources/languages/zh_TW.toml b/core/src/main/resources/languages/zh_TW.toml index cb1ca9f36..400b91ce3 100644 --- a/core/src/main/resources/languages/zh_TW.toml +++ b/core/src/main/resources/languages/zh_TW.toml @@ -772,6 +772,9 @@ opening_your_editor = "開幕 {value} {value2} 在你的編輯。" console_must_name_player_iris_tp_dimension_player = "控制檯必須給玩家命名 : /iris tp " is_not_generated_by_iris = "{value} 不由 Iris." teleport_failed_dimension_is_not_loaded = "Teleport 失敗: 維度 {dimensionId} 未載入。" +teleport_failed_reason = "傳送到 {dimensionId} 失敗:{reason}" +teleport_cancelled_player_offline = "已取消傳送到 {dimensionId}:{value} 已不在線上。" +teleport_refused = "伺服器拒絕了傳送到 {dimensionId}。" teleporting = "遠端傳送 {value} 改為: {dimensionId}..." is_not_generated_by_iris_2 = "{value} 不由 Iris." cannot_evacuate_primary_world_there_is_nowhere_send_players = "無法撤離主世界; 沒有地方可以傳送玩家 。"