From d9aeb10242173ea524968bd5c70d0bbd9e04adae Mon Sep 17 00:00:00 2001 From: Javatrix <108270039+Javatrix@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:47:19 +0100 Subject: [PATCH 01/10] Add Polish translation. --- src/main/resources/lang/I18n_pl_PL.properties | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 src/main/resources/lang/I18n_pl_PL.properties diff --git a/src/main/resources/lang/I18n_pl_PL.properties b/src/main/resources/lang/I18n_pl_PL.properties new file mode 100644 index 00000000..af85c6cb --- /dev/null +++ b/src/main/resources/lang/I18n_pl_PL.properties @@ -0,0 +1,145 @@ +lang=Polski +title=Ninjabrain Bot +waiting_f3c=Oczekiwanie na F3+C... +ender_eye_throws=Rzuty oczu +undo=Cofnij +redo=Ponw +reset=Zresetuj +lock=Zablokuj kalkulator +hide_show_window=Prze??cz widoczno?? okna +angle=K?t +error=B??d +basic=Podstawowy +detailed=Sczeg?owy +chunk=Chunk +small=Ma?y +medium=?redni +large=Du?y +settings=Ustawienia +settings.show_nether_coordinates=Poka? Netherowe koordynaty +settings.show_angle_updates=Poka? kierunek do twierdzy +settings.auto_reset=Automatycznie zresetuj po 15 minutach nieaktywno?ci +settings.auto_reset_when_world_is_reset=Automatycznie resetuj gdy aktywny ?wiat Minecrafta jest resetowany +settings.always_on_top=Zawsze na wierzchu +settings.translucent_window=P?przezroczyste okno +settings.notify_when_a_new_version_is_available=Powiadom gdy nowa wersja jest dost?pna +settings.display_stronghold_location_using=Wy?wietl lokalizacj? twierdzy u?ywaj?c +settings.view_type=Typ widoku +settings.theme=Motyw +settings.window_size=Rozmiar okna +settings.optional_features=Opcjonalne funkcje +settings.all_advancements=Wszystkie osi?gni?cia +settings.all_advancements.explanation=Pozwala na zapisanie koordynatw struktur po fragmencie any%%. Zapisa? mo?esz: +settings.all_advancements.spawn_coords=Spawn/shulker, wci?nij F3+C b?d?c na spawnie (x i z mniejsze ni? 300) podczas stania na ziemi. +settings.all_advancements.monument_coords=Podwodna ?wi?tynia, wci?nij F3+C b?d?c pod wod? (y mniejsze ni? 63). +settings.all_advancements.outpost_coords=Posterunek, spjrz w kierunku ?rodka posterunku i wci?nij F3+C. Bot obliczy w przybli?eniu lokalizacj? posterunku na podstawie tego, gdzie patrzysz. +settings.enable_all_advancements_mode=W??cz tryb wszystkich osi?gni?? +settings.all_advancements.switch_type=Prze??cz si? w tryb wszystkich osi?gni?? po +settings.all_advancements.automatic=Wej?ciu do Kresu (tylko dla Windowsa) +settings.all_advancements.hotkey=Wci?ni?ciu skrtu klawiszowego +settings.all_advancements.toggle_aa_mode_hotkey=Prze??cz skrt do wszystkich osi?gni?? +settings.standard_deviation=Standardowe odchylenie: +settings.standard_deviation_manual=Standardowe odchylenie (1.9-1.12): +settings.calibrate_standard_deviation=Kalibruj standardowe odchylenie +settings.enable_standard_deviation_toggle=W??cz prze??cznik standardowego odchylenia +settings.alt_standard_deviation=Alternatywne standardowe odchylenie: +settings.alt_std_on_last_angle=Alternatywne standardowe odchylenie po ostatnim k?cie: +settings.crosshair_correction=Korekcja celownika: +settings.show_angle_errors=Pokazuj b??dy k?tw +settings.use_advanced_stronghold_statistics=U?ywaj zaawansowanych statystyk twierdzy +settings.use_alternative_clipboard_reader=U?ywaj alternatywnego czytnika schowka +settings.tall_resolution=Wysoka rozdzielczo?? +settings.tall_resolution_explanation=Sprawia, ?e dostosowywanie pod-pikselowe dzia?a z wysok? rozdzielczo?ci?. Zamiast dodawania czy odejmowania 0.01 od k?ta, k?t zostanie zmieniony o 1 pixel dla ka?dego dostosowania. N.p. je?li twj celownik jest przesuni?ty o 4 piksele, mo?esz poprawi? k?t wciskaj?c odpowiedni skrt 4 razy. Je?li twj celownik jest przesuni?ty za bardzo w lewo, u?yj + dostosowania, i vice versa. +settings.resolution_height=Wysoko?? rozdzielczo?ci: +settings.use_precise_angle=W??cz pomiary ?dkowe +settings.sensitivity=Czu?o?? myszy (z options.txt): +settings.boat_error=Dozwolony b??d k?ta z ?dki: +settings.boat_standard_deviation=Standardowe odchylenie dla rzutw z ?dki +settings.keyboard_shortcuts=Skrty klawiszowe +settings.up_001_to_last_angle=Zmie? ostatni k?t o +0.01 +settings.down_001_to_last_angle=Zmie? ostatni k?t o -0.01 +settings.enter_boat=Wska? reset k?t? ?dki przy nast?pnym F3+C +settings.not_in_use=Nieu?ywany +settings.overlay=Nak?adka OBS +settings.overlay_explanation=Obraz wygl?daj?cy identycznie jak Ninjabrain Bot, ale automatycznie si? ukrywa, gdy niczego nie pokazuje. Dodaj do OBS u?ywaj?c ?rd?a obrazu. +settings.overlay_enable=W??cz nak?adk? +settings.overlay_auto_hide=Ukryj nak?adk? gdy nic si? nie dzieje przez jaki? czas +settings.overlay_auto_hide_duration=Op?nienie przed ukryciem (w sekundach): +settings.overlay_hide_locked=Ukryj nak?adk?, gdy kalkulator jest zablokowany +settings.language=J?zyk +settings.language.hint=Zmiana j?zyka b?dzie mia?a efekt po zrestartowaniu aplikacji. +settings.mc_version=Wersja Minecrafta +settings.mc_version.1=1.9 - 1.18 +settings.mc_version.2=1.19+ +settings.basic=Podstawowy +settings.advanced=Zaawansowany +settings.general=Oglne +settings.high_precision=Wysoka precyzja +settings.themeeditor.hex_colon=Hex: +settings.theme.createNew=Utwrz nowy motyw +settings.theme.defaultThemes=Domy?lne motywy +settings.theme.customThemes=W?asne motywy +settings.theme.deletetheme=Usu? motyw +settings.theme.areyousure=Jeste? pewien, ?e chcesz usun?? '%s'? +settings.themeeditor.themeeditor=Edytor motyww +settings.themeeditor.name_colon=Name: +settings.themeeditor.selectedcolor=Wybrany kolor +settings.themeeditor.selectpreset=Wybierz szablon +settings.themeeditor.reset_color=Zresetuj wybrany kolor do zapisanej warto?ci +settings.themeeditor.color=Kolor +settings.themeeditor.save=Zapisz motyw +settings.themeeditor.tools=Narz?dzia +settings.themeeditor.preview=Podgl?d +settings.themeeditor.any_unsaved_changes_will_be_lost=Wszystkie niezapisane zmiany zostan? utracone. +settings.themeeditor.unsaved_changes=Niezapisane zmiany +settings.themeeditor.do_you_want_to_save=Czy chcesz zapisa? swoje zmiany? +settings.themeeditor.copy_theme_string=Eksportuj (Skopiuj dane do schowka) +settings.themeeditor.paste_theme_string=Importuj (Skopiuj dane ze schowka) +settings.themeeditor.clipboard_does_not_contain_a_theme_string=Schowek nie zawiera poprawnego tekstu motywu. +settings.information.enable_mismeasure_warning=Poka? ostrze?enie, je?li kalkulator uwa?a, ?e zrobi?e? b??d w pomiarach (du?y b??d k?ta). +settings.information.enable_portal_linking_warning=Poka? ostrze?enie je?li nie mo?esz podr?owa? Netherem z powodu ??cznia portali. +settings.information.enable_combined_certainty_information=Poka? wiadomo?? je?li jest mo?liwe aby przej??Netherem pomi?dzy dwoma odst?pami dla zwi?kszonej szansy na znalezienie si? w twierdzy. +settings.information.enable_direction_help_information=Poka? wiadomo?? mwi?c?, ile blokw w bok musisz przej?? ?eby twj nast?pny rzut dostarczy? ok. 95% pewno?ci. +information.wrong_mc_version=Wykryto z?? wersj? Minecrafta, upewnij si? ?e poprawna wersja jest wybrana w ustawieniach. +information.mismeasure=Wykryto niezwykle du?e b??dy, prawdopodobnie pope?ni?e? b??d w pomiarach albo standardowe odchylenie jest zbyt niskie. +information.portal_linking=Mo?e ci si? nie uda? przej??do twierdzy Netherem z powodu ??czenia portali. +information.top_two_chunks_are_neighboring=Netherowe koordynaty (%d, %d) maj? %.1f%% szans na trafienie do twierdzy (s? pomi?dzy dwoma najpewniejszymi odst?pami). +information.go_left_x_block_or_right_y_blocks=Pjd? w lewo %d blokw, lub w prawo %d blokw, aby uzyska? ~95%% pewno?ci po nast?pnym pomiarze. +calibrator.you_moved=Ignoruj? ostatni rzut, poniewasz si? poruszy?e?. +calibrator.command_label=Upewnij si? ?e twj skrt 'Wpisywanie polecenia' w Minecrafcie jest ustawiony na K. Stwrz ?wiat w trybie kreatywnym i wci?nij F3+C. +calibrator.throw_label=Rzu? oko kresu i zmierz k?t u?ywaj?c F3+C. B?d? tak dok?adny, jakby? by? w prawdziwym speedrunie. Po wci?ni?ciu F3+C zostaniesz automatycznie przeteleportowany do nast?pnego miejsca. +calibrator.measure_label=Dalej mierz k?ty, dopki STD si? ustabilni (zazwyczaj zajmuje to 10-20 rzutw), a potem wci?nij 'Gotowe' aby zapisa? zmiany. +calibrator.title=Kalibracja +calibrator.explanation=Program okre?li jak dok?adnie mierzysz oczy. Im ni?sze standardowe odchylenie (STD), tym dok?adniejszy jeste?. Znaj?c twoje STD, kalkulator mo?e wykonywa? lepsze prognozy. +calibrator.l1=Zmierzone STD: +calibrator.done=Gotowe +notificationsframe.new_version_available=Nowa wesja dostepna! +notificationsframe.download_button=Pobierz .jar +notificationsframe.changelog_button=Otwrz dziennik zmian (w przegl?darce) +notificationsframe.update_text=Wersja %s jest dost?pna. Po pobraniu nowego pliku JAR mo?esz usun?? ten plik (twoje ustawienia automatycznie si? przenios?). To powiadomienie mo?e zosta? wy??czone w ustawieniach. +location_blocks=Lokalizacja: (%d, %d), %d blokw odleg?o?ci +chunk_blocks=Chunk: (%d, %d), %d blokw odleg?o?ci +certainty=Pewno??: +current_angle=Obecny k?t +nether_coordinates=Netherowe koordynaty: (%d, %d), %d blokw odleg?o?ci +could_not_determine=Nie uda?o si? okre?li? chunka twierdzy +you_probably_misread=Prawdopodobnie pope?ni?e? b??d w pomiarze jednego z oczu. +blind_coords=Koordynaty (%.0f, %.0f) s? +blind_excellent=dobre +blind_good_highroll=dobre na highroll +blind_okay_highroll=okay na highroll +blind_bad_in_ring=kiepskie, ale w okr?gu +blind_bad=kiepskie +blind_not_in_ring=poza okr?giem +#\u00B0 is the degree symbol +blind_direction=Skieruj si? %.0f\u00B0, %.0f blokw st?d, aby uzyska? lepsze koordynaty +fossil_number=Skamielina %d +divine=Boska: +divine_safe=Bezpieczna: +divine_highroll=Highroll: +chance_of=szansy na blind w odleg?o?ci <%d blokw +average_distance_to=?rednia odleg?o?? do twierdzy: %.0f blokw +location=Lokalizacja +dist=Dystans +nether=Nether +certainty_2=%% \ No newline at end of file From 86b46beeba2985417ac3f58dd8ad2de981cc51b8 Mon Sep 17 00:00:00 2001 From: Javatrix <108270039+Javatrix@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:48:39 +0100 Subject: [PATCH 02/10] Update LanguageResources to contain reference to the Polish translation. --- src/main/java/ninjabrainbot/io/LanguageResources.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ninjabrainbot/io/LanguageResources.java b/src/main/java/ninjabrainbot/io/LanguageResources.java index e98c837a..49a4c1ea 100644 --- a/src/main/java/ninjabrainbot/io/LanguageResources.java +++ b/src/main/java/ninjabrainbot/io/LanguageResources.java @@ -57,6 +57,7 @@ public static List getAllLanguageResourceNames() { list.add("I18n_ja_JP.properties"); list.add("I18n_ja_Ryukyuan.properties"); list.add("I18n_ko_KR.properties"); + list.add("I18n_pl_PL.properties"); list.add("I18n_pt_BR.properties"); list.add("I18n_ru_RU.properties"); list.add("I18n_zh_CN.properties"); From 3497fb46abd9d351162a1851be2d7f6765694e3b Mon Sep 17 00:00:00 2001 From: Javatrix <108270039+Javatrix@users.noreply.github.com> Date: Wed, 14 Feb 2024 10:53:20 +0100 Subject: [PATCH 03/10] Update NextDirectionProviderIntegrationTests to be compatible with translations featuring distance at other positions than [2] --- .project | 11 ++ .settings/org.eclipse.jdt.core.prefs | 7 +- ...NextDirectionProviderIntegrationTests.java | 109 ++++++++++-------- 3 files changed, 75 insertions(+), 52 deletions(-) diff --git a/.project b/.project index 9a16ab0b..eca8a2e5 100644 --- a/.project +++ b/.project @@ -26,4 +26,15 @@ org.eclipse.jdt.core.javanature org.eclipse.buildship.core.gradleprojectnature + + + 1707904144161 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index ec554411..d3a12c6e 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,8 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=11 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -11,5 +11,6 @@ org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.processAnnotations=disabled org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=11 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/src/test/java/ninjabrainbot/integrationtests/NextDirectionProviderIntegrationTests.java b/src/test/java/ninjabrainbot/integrationtests/NextDirectionProviderIntegrationTests.java index 60b0b0bf..d661afdd 100644 --- a/src/test/java/ninjabrainbot/integrationtests/NextDirectionProviderIntegrationTests.java +++ b/src/test/java/ninjabrainbot/integrationtests/NextDirectionProviderIntegrationTests.java @@ -1,5 +1,6 @@ package ninjabrainbot.integrationtests; +import java.util.Arrays; import java.util.List; import java.util.Random; @@ -16,59 +17,69 @@ public class NextDirectionProviderIntegrationTests { - @Test - void expectedCertaintyOnNextThrowIsAtLeastAsGoodAsPromised() { - Logger.enabled = false; - // Arrange - Random chunkRandom = new Random(111); - IntegrationTestBuilder testBuilder = new IntegrationTestBuilder().withProSettings(); - testBuilder.preferences.informationDirectionHelpEnabled.set(true); - RandomPlayerPositionProvider playerPositionProvider = new RandomPlayerPositionProvider(123); - NextThrowDirectionInformationProvider infoMessage = new NextThrowDirectionInformationProvider(testBuilder.dataState, testBuilder.environmentState, testBuilder.preferences); + @Test + void expectedCertaintyOnNextThrowIsAtLeastAsGoodAsPromised() { + Logger.enabled = false; + // Arrange + Random chunkRandom = new Random(111); + IntegrationTestBuilder testBuilder = new IntegrationTestBuilder().withProSettings(); + testBuilder.preferences.informationDirectionHelpEnabled.set(true); + RandomPlayerPositionProvider playerPositionProvider = new RandomPlayerPositionProvider(123); + NextThrowDirectionInformationProvider infoMessage = new NextThrowDirectionInformationProvider(testBuilder.dataState, testBuilder.environmentState, testBuilder.preferences); - // Act - double totalProbability = 0; - int samples = 0; - for (int i = 0; i < 100; i++) { - testBuilder.resetCalculator(); - IDetailedPlayerPosition firstPlayerPosition = playerPositionProvider.nextPlayerPositionFirstRing(); - testBuilder.inputDetailedPlayerPosition(firstPlayerPosition); - if (infoMessage.get() == null) - continue; - Chunk randomStrongholdChunk = sampleRandomChunk(chunkRandom, testBuilder.dataState.calculatorResult().get()); - testBuilder.inputDetailedPlayerPosition(getPlayerPositionForNextThrow(firstPlayerPosition, randomStrongholdChunk, infoMessage.get().message)); - List topChunks = testBuilder.dataState.calculatorResult().get().getTopChunks(); - double eyeSpyProbability = topChunks.get(0).weight + (topChunks.get(0).isNeighboring(topChunks.get(1)) ? topChunks.get(1).weight : 0); - totalProbability += eyeSpyProbability; - samples++; - } - System.out.println(totalProbability / samples + ", " + samples); + // Act + double totalProbability = 0; + int samples = 0; + for (int i = 0; i < 100; i++) { + testBuilder.resetCalculator(); + IDetailedPlayerPosition firstPlayerPosition = playerPositionProvider.nextPlayerPositionFirstRing(); + testBuilder.inputDetailedPlayerPosition(firstPlayerPosition); + if (infoMessage.get() == null) + continue; + Chunk randomStrongholdChunk = sampleRandomChunk(chunkRandom, testBuilder.dataState.calculatorResult().get()); + testBuilder.inputDetailedPlayerPosition(getPlayerPositionForNextThrow(firstPlayerPosition, randomStrongholdChunk, infoMessage.get().message)); + List topChunks = testBuilder.dataState.calculatorResult().get().getTopChunks(); + double eyeSpyProbability = topChunks.get(0).weight + (topChunks.get(0).isNeighboring(topChunks.get(1)) ? topChunks.get(1).weight : 0); + totalProbability += eyeSpyProbability; + samples++; + } + System.out.println(totalProbability / samples + ", " + samples); - Assert.isTrue(totalProbability / samples > 0.95, "Average certainty after second throw did not exceed 95%: " + totalProbability / samples); + Assert.isTrue(totalProbability / samples > 0.95, "Average certainty after second throw did not exceed 95%: " + totalProbability / samples); - Logger.enabled = true; - } + Logger.enabled = true; + } - private Chunk sampleRandomChunk(Random random, ICalculatorResult calculatorResult) { - List chunks = calculatorResult.getTopChunks(); - double sample = random.nextDouble(); - double cumProb = 0; - for (Chunk chunk : chunks) { - cumProb += chunk.weight; - if (cumProb > sample) - return chunk; - } - return null; - } + private Chunk sampleRandomChunk(Random random, ICalculatorResult calculatorResult) { + List chunks = calculatorResult.getTopChunks(); + double sample = random.nextDouble(); + double cumProb = 0; + for (Chunk chunk : chunks) { + cumProb += chunk.weight; + if (cumProb > sample) + return chunk; + } + return null; + } - private IDetailedPlayerPosition getPlayerPositionForNextThrow(IDetailedPlayerPosition playerPosition, Chunk stronghold, String message) { - String[] words = message.split(" "); - int leftDistance = Integer.parseInt(words[2]); - double leftAngle = playerPosition.horizontalAngle() / 180.0 * Math.PI * 2 - 0.5 * Math.PI; - double x = playerPosition.xInOverworld() + Coords.getX(leftDistance, leftAngle); - double z = playerPosition.zInOverworld() + Coords.getZ(leftDistance, leftAngle); - double horizontalAngle = Coords.getPhi(stronghold.eightEightX() - x, stronghold.eightEightZ() - z) / Math.PI * 180.0; - return new DetailedPlayerPosition(x, 80, z, horizontalAngle, -31, false); - } + private IDetailedPlayerPosition getPlayerPositionForNextThrow(IDetailedPlayerPosition playerPosition, Chunk stronghold, String message) { + String[] words = message.split(" "); + int leftDistance = getFirstInt(words); + double leftAngle = playerPosition.horizontalAngle() / 180.0 * Math.PI * 2 - 0.5 * Math.PI; + double x = playerPosition.xInOverworld() + Coords.getX(leftDistance, leftAngle); + double z = playerPosition.zInOverworld() + Coords.getZ(leftDistance, leftAngle); + double horizontalAngle = Coords.getPhi(stronghold.eightEightX() - x, stronghold.eightEightZ() - z) / Math.PI * 180.0; + return new DetailedPlayerPosition(x, 80, z, horizontalAngle, -31, false); + } + + private static int getFirstInt(String[] words) { + for (String word : words) { + try { + return Integer.parseInt(word); + } catch (NumberFormatException ignored) { + } + } + throw new NumberFormatException("Could not parse string array: " + Arrays.toString(words)); + } } From 6a78bb867e7e10be7db30301a1d923a13748d2f4 Mon Sep 17 00:00:00 2001 From: Javatrix <108270039+Javatrix@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:03:01 +0100 Subject: [PATCH 04/10] Fix Polish percentage signs. --- src/main/java/ninjabrainbot/util/I18n.java | 108 +++++++++--------- src/main/resources/lang/I18n_pl_PL.properties | 2 +- 2 files changed, 58 insertions(+), 52 deletions(-) diff --git a/src/main/java/ninjabrainbot/util/I18n.java b/src/main/java/ninjabrainbot/util/I18n.java index f7ec435c..2a8a94be 100644 --- a/src/main/java/ninjabrainbot/util/I18n.java +++ b/src/main/java/ninjabrainbot/util/I18n.java @@ -6,6 +6,7 @@ import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; +import java.util.Arrays; import java.util.Locale; import java.util.PropertyResourceBundle; import java.util.ResourceBundle; @@ -20,60 +21,65 @@ */ public class I18n { - private static final ResourceBundle BUNDLE; + private static final ResourceBundle BUNDLE; - public static final Locale LANGUAGE; + public static final Locale LANGUAGE; - static { - final Preferences preferences = Preferences.userNodeForPackage(Main.class); - final String languageTag = preferences.get("language_v2", ""); - Locale language = LanguageResources.getLocaleFromTag(languageTag); - if (language == null) { - Locale defaultLocale = Locale.getDefault(); - language = LanguageResources.isLocaleSupported(defaultLocale) ? defaultLocale : LanguageResources.getDefaultLocale(); - preferences.put("language_v2", language.toLanguageTag()); - } - LANGUAGE = language; - BUNDLE = ResourceBundle.getBundle("lang/I18n", LANGUAGE, new UTF8Control()); - } + static { + final Preferences preferences = Preferences.userNodeForPackage(Main.class); + final String languageTag = preferences.get("language_v2", ""); + Locale language = LanguageResources.getLocaleFromTag(languageTag); + if (language == null) { + Locale defaultLocale = Locale.getDefault(); + language = LanguageResources.isLocaleSupported(defaultLocale) ? defaultLocale : LanguageResources.getDefaultLocale(); + preferences.put("language_v2", language.toLanguageTag()); + } + LANGUAGE = language; + BUNDLE = ResourceBundle.getBundle("lang/I18n", LANGUAGE, new UTF8Control()); + } - public static String get(String key, Object... args) { - return String.format(BUNDLE.getString(key), args); - } + public static String get(String key, Object... args) { + try { + return String.format(BUNDLE.getString(key), args); + } catch (Throwable ex) { + System.out.println(key + ": " + Arrays.toString(args)); + } + return key; + } - public static boolean localeRequiresExtraSpace() { - return !LANGUAGE.toLanguageTag().contentEquals("en-US"); - } + public static boolean localeRequiresExtraSpace() { + return !LANGUAGE.toLanguageTag().contentEquals("en-US"); + } - public static class UTF8Control extends ResourceBundle.Control { - @Override - public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IOException { - // The below is a copy of the default implementation. - String bundleName = toBundleName(baseName, locale); - String resourceName = toResourceName(bundleName, "properties"); - ResourceBundle bundle = null; - InputStream stream = null; - if (reload) { - URL url = loader.getResource(resourceName); - if (url != null) { - URLConnection connection = url.openConnection(); - if (connection != null) { - connection.setUseCaches(false); - stream = connection.getInputStream(); - } - } - } else { - stream = loader.getResourceAsStream(resourceName); - } - if (stream != null) { - try { - // Only this line is changed to make it to read properties files as UTF-8. - bundle = new PropertyResourceBundle(new InputStreamReader(stream, StandardCharsets.UTF_8)); - } finally { - stream.close(); - } - } - return bundle; - } - } + public static class UTF8Control extends ResourceBundle.Control { + @Override + public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IOException { + // The below is a copy of the default implementation. + String bundleName = toBundleName(baseName, locale); + String resourceName = toResourceName(bundleName, "properties"); + ResourceBundle bundle = null; + InputStream stream = null; + if (reload) { + URL url = loader.getResource(resourceName); + if (url != null) { + URLConnection connection = url.openConnection(); + if (connection != null) { + connection.setUseCaches(false); + stream = connection.getInputStream(); + } + } + } else { + stream = loader.getResourceAsStream(resourceName); + } + if (stream != null) { + try { + // Only this line is changed to make it to read properties files as UTF-8. + bundle = new PropertyResourceBundle(new InputStreamReader(stream, StandardCharsets.UTF_8)); + } finally { + stream.close(); + } + } + return bundle; + } + } } diff --git a/src/main/resources/lang/I18n_pl_PL.properties b/src/main/resources/lang/I18n_pl_PL.properties index af85c6cb..917c1825 100644 --- a/src/main/resources/lang/I18n_pl_PL.properties +++ b/src/main/resources/lang/I18n_pl_PL.properties @@ -99,7 +99,7 @@ settings.themeeditor.clipboard_does_not_contain_a_theme_string=Schowek nie zawie settings.information.enable_mismeasure_warning=Poka? ostrze?enie, je?li kalkulator uwa?a, ?e zrobi?e? b??d w pomiarach (du?y b??d k?ta). settings.information.enable_portal_linking_warning=Poka? ostrze?enie je?li nie mo?esz podr?owa? Netherem z powodu ??cznia portali. settings.information.enable_combined_certainty_information=Poka? wiadomo?? je?li jest mo?liwe aby przej??Netherem pomi?dzy dwoma odst?pami dla zwi?kszonej szansy na znalezienie si? w twierdzy. -settings.information.enable_direction_help_information=Poka? wiadomo?? mwi?c?, ile blokw w bok musisz przej?? ?eby twj nast?pny rzut dostarczy? ok. 95% pewno?ci. +settings.information.enable_direction_help_information=Poka? wiadomo?? mwi?c?, ile blokw w bok musisz przej?? ?eby twj nast?pny rzut dostarczy? ok. 95%% pewno?ci. information.wrong_mc_version=Wykryto z?? wersj? Minecrafta, upewnij si? ?e poprawna wersja jest wybrana w ustawieniach. information.mismeasure=Wykryto niezwykle du?e b??dy, prawdopodobnie pope?ni?e? b??d w pomiarach albo standardowe odchylenie jest zbyt niskie. information.portal_linking=Mo?e ci si? nie uda? przej??do twierdzy Netherem z powodu ??czenia portali. From c6589ca2ad3651629c1b405636689fc30b874326 Mon Sep 17 00:00:00 2001 From: Javatrix <108270039+Javatrix@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:07:43 +0100 Subject: [PATCH 05/10] Minor fixes to Polish translation. --- src/main/resources/lang/I18n_pl_PL.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/lang/I18n_pl_PL.properties b/src/main/resources/lang/I18n_pl_PL.properties index 917c1825..31905343 100644 --- a/src/main/resources/lang/I18n_pl_PL.properties +++ b/src/main/resources/lang/I18n_pl_PL.properties @@ -69,10 +69,10 @@ settings.overlay_hide_locked=Ukryj nak?adk?, gdy kalkulator jest zablokowany settings.language=J?zyk settings.language.hint=Zmiana j?zyka b?dzie mia?a efekt po zrestartowaniu aplikacji. settings.mc_version=Wersja Minecrafta -settings.mc_version.1=1.9 - 1.18 +settings.mc_version.1=1.9 - 1.18advanced settings.mc_version.2=1.19+ -settings.basic=Podstawowy -settings.advanced=Zaawansowany +settings.basic=Podstawowe +settings.advanced=Zaawansowane settings.general=Oglne settings.high_precision=Wysoka precyzja settings.themeeditor.hex_colon=Hex: From 065a7f46b0a617e768f53d3e4b2005a3626cfb27 Mon Sep 17 00:00:00 2001 From: Javatrix <108270039+Javatrix@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:12:45 +0100 Subject: [PATCH 06/10] Fix Polish encoding issues. --- src/main/java/ninjabrainbot/util/I18n.java | 7 +- src/main/resources/lang/I18n_pl_PL.properties | 186 +++++++++--------- 2 files changed, 94 insertions(+), 99 deletions(-) diff --git a/src/main/java/ninjabrainbot/util/I18n.java b/src/main/java/ninjabrainbot/util/I18n.java index 2a8a94be..dd81120d 100644 --- a/src/main/java/ninjabrainbot/util/I18n.java +++ b/src/main/java/ninjabrainbot/util/I18n.java @@ -39,12 +39,7 @@ public class I18n { } public static String get(String key, Object... args) { - try { - return String.format(BUNDLE.getString(key), args); - } catch (Throwable ex) { - System.out.println(key + ": " + Arrays.toString(args)); - } - return key; + return String.format(BUNDLE.getString(key), args); } public static boolean localeRequiresExtraSpace() { diff --git a/src/main/resources/lang/I18n_pl_PL.properties b/src/main/resources/lang/I18n_pl_PL.properties index 31905343..3ef206e9 100644 --- a/src/main/resources/lang/I18n_pl_PL.properties +++ b/src/main/resources/lang/I18n_pl_PL.properties @@ -3,142 +3,142 @@ title=Ninjabrain Bot waiting_f3c=Oczekiwanie na F3+C... ender_eye_throws=Rzuty oczu undo=Cofnij -redo=Ponw +redo=Ponów reset=Zresetuj lock=Zablokuj kalkulator -hide_show_window=Prze??cz widoczno?? okna -angle=K?t -error=B??d +hide_show_window=Przełącz widoczność okna +angle=Kąt +error=Błąd basic=Podstawowy -detailed=Sczeg?owy +detailed=Sczegółowy chunk=Chunk -small=Ma?y -medium=?redni -large=Du?y +small=Mały +medium=Średni +large=Duży settings=Ustawienia -settings.show_nether_coordinates=Poka? Netherowe koordynaty -settings.show_angle_updates=Poka? kierunek do twierdzy -settings.auto_reset=Automatycznie zresetuj po 15 minutach nieaktywno?ci -settings.auto_reset_when_world_is_reset=Automatycznie resetuj gdy aktywny ?wiat Minecrafta jest resetowany +settings.show_nether_coordinates=Pokaż Netherowe koordynaty +settings.show_angle_updates=Pokaż kierunek do twierdzy +settings.auto_reset=Automatycznie zresetuj po 15 minutach nieaktywności +settings.auto_reset_when_world_is_reset=Automatycznie resetuj gdy aktywny świat Minecrafta jest resetowany settings.always_on_top=Zawsze na wierzchu -settings.translucent_window=P?przezroczyste okno -settings.notify_when_a_new_version_is_available=Powiadom gdy nowa wersja jest dost?pna -settings.display_stronghold_location_using=Wy?wietl lokalizacj? twierdzy u?ywaj?c +settings.translucent_window=Półprzezroczyste okno +settings.notify_when_a_new_version_is_available=Powiadom gdy nowa wersja jest dostępna +settings.display_stronghold_location_using=Wyświetl lokalizację twierdzy używając settings.view_type=Typ widoku settings.theme=Motyw settings.window_size=Rozmiar okna -settings.optional_features=Opcjonalne funkcje -settings.all_advancements=Wszystkie osi?gni?cia -settings.all_advancements.explanation=Pozwala na zapisanie koordynatw struktur po fragmencie any%%. Zapisa? mo?esz: -settings.all_advancements.spawn_coords=Spawn/shulker, wci?nij F3+C b?d?c na spawnie (x i z mniejsze ni? 300) podczas stania na ziemi. -settings.all_advancements.monument_coords=Podwodna ?wi?tynia, wci?nij F3+C b?d?c pod wod? (y mniejsze ni? 63). -settings.all_advancements.outpost_coords=Posterunek, spjrz w kierunku ?rodka posterunku i wci?nij F3+C. Bot obliczy w przybli?eniu lokalizacj? posterunku na podstawie tego, gdzie patrzysz. -settings.enable_all_advancements_mode=W??cz tryb wszystkich osi?gni?? -settings.all_advancements.switch_type=Prze??cz si? w tryb wszystkich osi?gni?? po -settings.all_advancements.automatic=Wej?ciu do Kresu (tylko dla Windowsa) -settings.all_advancements.hotkey=Wci?ni?ciu skrtu klawiszowego -settings.all_advancements.toggle_aa_mode_hotkey=Prze??cz skrt do wszystkich osi?gni?? +settings.optional_features=Opcjonalne +settings.all_advancements=Wszystkie osiągnięcia +settings.all_advancements.explanation=Pozwala na zapisanie koordynatów struktur po fragmencie any%%. Zapisać możesz: +settings.all_advancements.spawn_coords=Spawn/shulker, wciśnij F3+C będąc na spawnie (x i z mniejsze niż 300) podczas stania na ziemi. +settings.all_advancements.monument_coords=Podwodna świątynia, wciśnij F3+C będąc pod wodą (y mniejsze niż 63). +settings.all_advancements.outpost_coords=Posterunek, spójrz w kierunku środka posterunku i wciśnij F3+C. Bot obliczy w przybliżeniu lokalizację posterunku na podstawie tego, gdzie patrzysz. +settings.enable_all_advancements_mode=Włącz tryb wszystkich osiągnięć +settings.all_advancements.switch_type=Przełącz się w tryb wszystkich osiągnięć po +settings.all_advancements.automatic=Wejściu do Kresu (tylko dla Windowsa) +settings.all_advancements.hotkey=Wciśnięciu skrótu klawiszowego +settings.all_advancements.toggle_aa_mode_hotkey=Przełącz skrót do wszystkich osiągnięć settings.standard_deviation=Standardowe odchylenie: settings.standard_deviation_manual=Standardowe odchylenie (1.9-1.12): settings.calibrate_standard_deviation=Kalibruj standardowe odchylenie -settings.enable_standard_deviation_toggle=W??cz prze??cznik standardowego odchylenia +settings.enable_standard_deviation_toggle=Włącz przełącznik standardowego odchylenia settings.alt_standard_deviation=Alternatywne standardowe odchylenie: -settings.alt_std_on_last_angle=Alternatywne standardowe odchylenie po ostatnim k?cie: +settings.alt_std_on_last_angle=Alternatywne standardowe odchylenie po ostatnim kącie: settings.crosshair_correction=Korekcja celownika: -settings.show_angle_errors=Pokazuj b??dy k?tw -settings.use_advanced_stronghold_statistics=U?ywaj zaawansowanych statystyk twierdzy -settings.use_alternative_clipboard_reader=U?ywaj alternatywnego czytnika schowka -settings.tall_resolution=Wysoka rozdzielczo?? -settings.tall_resolution_explanation=Sprawia, ?e dostosowywanie pod-pikselowe dzia?a z wysok? rozdzielczo?ci?. Zamiast dodawania czy odejmowania 0.01 od k?ta, k?t zostanie zmieniony o 1 pixel dla ka?dego dostosowania. N.p. je?li twj celownik jest przesuni?ty o 4 piksele, mo?esz poprawi? k?t wciskaj?c odpowiedni skrt 4 razy. Je?li twj celownik jest przesuni?ty za bardzo w lewo, u?yj + dostosowania, i vice versa. -settings.resolution_height=Wysoko?? rozdzielczo?ci: -settings.use_precise_angle=W??cz pomiary ?dkowe -settings.sensitivity=Czu?o?? myszy (z options.txt): -settings.boat_error=Dozwolony b??d k?ta z ?dki: -settings.boat_standard_deviation=Standardowe odchylenie dla rzutw z ?dki -settings.keyboard_shortcuts=Skrty klawiszowe -settings.up_001_to_last_angle=Zmie? ostatni k?t o +0.01 -settings.down_001_to_last_angle=Zmie? ostatni k?t o -0.01 -settings.enter_boat=Wska? reset k?t? ?dki przy nast?pnym F3+C -settings.not_in_use=Nieu?ywany -settings.overlay=Nak?adka OBS -settings.overlay_explanation=Obraz wygl?daj?cy identycznie jak Ninjabrain Bot, ale automatycznie si? ukrywa, gdy niczego nie pokazuje. Dodaj do OBS u?ywaj?c ?rd?a obrazu. -settings.overlay_enable=W??cz nak?adk? -settings.overlay_auto_hide=Ukryj nak?adk? gdy nic si? nie dzieje przez jaki? czas -settings.overlay_auto_hide_duration=Op?nienie przed ukryciem (w sekundach): -settings.overlay_hide_locked=Ukryj nak?adk?, gdy kalkulator jest zablokowany -settings.language=J?zyk -settings.language.hint=Zmiana j?zyka b?dzie mia?a efekt po zrestartowaniu aplikacji. +settings.show_angle_errors=Pokazuj błędy kątów +settings.use_advanced_stronghold_statistics=Używaj zaawansowanych statystyk twierdzy +settings.use_alternative_clipboard_reader=Używaj alternatywnego czytnika schowka +settings.tall_resolution=Wysoka rozdzielczość +settings.tall_resolution_explanation=Sprawia, że dostosowywanie pod-pikselowe działa z wysoką rozdzielczością. Zamiast dodawania czy odejmowania 0.01 od kąta, kąt zostanie zmieniony o 1 pixel dla każdego dostosowania. N.p. jeśli twój celownik jest przesunięty o 4 piksele, możesz poprawić kąt wciskając odpowiedni skrót 4 razy. Jeśli twój celownik jest przesunięty za bardzo w lewo, użyj + dostosowania, i vice versa. +settings.resolution_height=Wysokość rozdzielczości: +settings.use_precise_angle=Włącz pomiary łódkowe +settings.sensitivity=Czułość myszy (z options.txt): +settings.boat_error=Dozwolony błąd kąta z łódki: +settings.boat_standard_deviation=Standardowe odchylenie dla rzutów z łódki +settings.keyboard_shortcuts=Skróty klawiszowe +settings.up_001_to_last_angle=Zmień ostatni kąt o +0.01 +settings.down_001_to_last_angle=Zmień ostatni kąt o -0.01 +settings.enter_boat=Wskaż reset kątą łódki przy następnym F3+C +settings.not_in_use=Nieużywany +settings.overlay=Nakładka OBS +settings.overlay_explanation=Obraz wyglądający identycznie jak Ninjabrain Bot, ale automatycznie się ukrywa, gdy niczego nie pokazuje. Dodaj do OBS używając źródła obrazu. +settings.overlay_enable=Włącz nakładkę +settings.overlay_auto_hide=Ukryj nakładkę gdy nic się nie dzieje przez jakiś czas +settings.overlay_auto_hide_duration=Opóźnienie przed ukryciem (w sekundach): +settings.overlay_hide_locked=Ukryj nakładkę, gdy kalkulator jest zablokowany +settings.language=Język +settings.language.hint=Zmiana języka będzie miała efekt po zrestartowaniu aplikacji. settings.mc_version=Wersja Minecrafta -settings.mc_version.1=1.9 - 1.18advanced +settings.mc_version.1=1.9 - 1.18 settings.mc_version.2=1.19+ settings.basic=Podstawowe settings.advanced=Zaawansowane -settings.general=Oglne +settings.general=Ogólne settings.high_precision=Wysoka precyzja settings.themeeditor.hex_colon=Hex: -settings.theme.createNew=Utwrz nowy motyw -settings.theme.defaultThemes=Domy?lne motywy -settings.theme.customThemes=W?asne motywy -settings.theme.deletetheme=Usu? motyw -settings.theme.areyousure=Jeste? pewien, ?e chcesz usun?? '%s'? -settings.themeeditor.themeeditor=Edytor motyww +settings.theme.createNew=Utwórz nowy motyw +settings.theme.defaultThemes=Domyślne motywy +settings.theme.customThemes=Własne motywy +settings.theme.deletetheme=Usuń motyw +settings.theme.areyousure=Jesteś pewien, że chcesz usunąć '%s'? +settings.themeeditor.themeeditor=Edytor motywów settings.themeeditor.name_colon=Name: settings.themeeditor.selectedcolor=Wybrany kolor settings.themeeditor.selectpreset=Wybierz szablon -settings.themeeditor.reset_color=Zresetuj wybrany kolor do zapisanej warto?ci +settings.themeeditor.reset_color=Zresetuj wybrany kolor do zapisanej wartości settings.themeeditor.color=Kolor settings.themeeditor.save=Zapisz motyw -settings.themeeditor.tools=Narz?dzia -settings.themeeditor.preview=Podgl?d -settings.themeeditor.any_unsaved_changes_will_be_lost=Wszystkie niezapisane zmiany zostan? utracone. +settings.themeeditor.tools=Narzędzia +settings.themeeditor.preview=Podgląd +settings.themeeditor.any_unsaved_changes_will_be_lost=Wszystkie niezapisane zmiany zostaną utracone. settings.themeeditor.unsaved_changes=Niezapisane zmiany -settings.themeeditor.do_you_want_to_save=Czy chcesz zapisa? swoje zmiany? +settings.themeeditor.do_you_want_to_save=Czy chcesz zapisać swoje zmiany? settings.themeeditor.copy_theme_string=Eksportuj (Skopiuj dane do schowka) settings.themeeditor.paste_theme_string=Importuj (Skopiuj dane ze schowka) settings.themeeditor.clipboard_does_not_contain_a_theme_string=Schowek nie zawiera poprawnego tekstu motywu. -settings.information.enable_mismeasure_warning=Poka? ostrze?enie, je?li kalkulator uwa?a, ?e zrobi?e? b??d w pomiarach (du?y b??d k?ta). -settings.information.enable_portal_linking_warning=Poka? ostrze?enie je?li nie mo?esz podr?owa? Netherem z powodu ??cznia portali. -settings.information.enable_combined_certainty_information=Poka? wiadomo?? je?li jest mo?liwe aby przej??Netherem pomi?dzy dwoma odst?pami dla zwi?kszonej szansy na znalezienie si? w twierdzy. -settings.information.enable_direction_help_information=Poka? wiadomo?? mwi?c?, ile blokw w bok musisz przej?? ?eby twj nast?pny rzut dostarczy? ok. 95%% pewno?ci. -information.wrong_mc_version=Wykryto z?? wersj? Minecrafta, upewnij si? ?e poprawna wersja jest wybrana w ustawieniach. -information.mismeasure=Wykryto niezwykle du?e b??dy, prawdopodobnie pope?ni?e? b??d w pomiarach albo standardowe odchylenie jest zbyt niskie. -information.portal_linking=Mo?e ci si? nie uda? przej??do twierdzy Netherem z powodu ??czenia portali. -information.top_two_chunks_are_neighboring=Netherowe koordynaty (%d, %d) maj? %.1f%% szans na trafienie do twierdzy (s? pomi?dzy dwoma najpewniejszymi odst?pami). -information.go_left_x_block_or_right_y_blocks=Pjd? w lewo %d blokw, lub w prawo %d blokw, aby uzyska? ~95%% pewno?ci po nast?pnym pomiarze. -calibrator.you_moved=Ignoruj? ostatni rzut, poniewasz si? poruszy?e?. -calibrator.command_label=Upewnij si? ?e twj skrt 'Wpisywanie polecenia' w Minecrafcie jest ustawiony na K. Stwrz ?wiat w trybie kreatywnym i wci?nij F3+C. -calibrator.throw_label=Rzu? oko kresu i zmierz k?t u?ywaj?c F3+C. B?d? tak dok?adny, jakby? by? w prawdziwym speedrunie. Po wci?ni?ciu F3+C zostaniesz automatycznie przeteleportowany do nast?pnego miejsca. -calibrator.measure_label=Dalej mierz k?ty, dopki STD si? ustabilni (zazwyczaj zajmuje to 10-20 rzutw), a potem wci?nij 'Gotowe' aby zapisa? zmiany. +settings.information.enable_mismeasure_warning=Pokaż ostrzeżenie, jeśli kalkulator uważa, że zrobiłeś błąd w pomiarach (duży błąd kąta). +settings.information.enable_portal_linking_warning=Pokaż ostrzeżenie jeśli nie możesz podróżować Netherem z powodu łącznia portali. +settings.information.enable_combined_certainty_information=Pokaż wiadomość jeśli jest możliwe aby przejść Netherem pomiędzy dwoma odstępami dla zwiększonej szansy na znalezienie się w twierdzy. +settings.information.enable_direction_help_information=Pokaż wiadomość mówiącą, ile bloków w bok musisz przejść żeby twój następny rzut dostarczył ok. 95%% pewności. +information.wrong_mc_version=Wykryto złą wersję Minecrafta, upewnij się że poprawna wersja jest wybrana w ustawieniach. +information.mismeasure=Wykryto niezwykle duże błędy, prawdopodobnie popełniłeś błąd w pomiarach albo standardowe odchylenie jest zbyt niskie. +information.portal_linking=Może ci się nie udać przejść do twierdzy Netherem z powodu łączenia portali. +information.top_two_chunks_are_neighboring=Netherowe koordynaty (%d, %d) mają %.1f%% szans na trafienie do twierdzy (są pomiędzy dwoma najpewniejszymi odstępami). +information.go_left_x_block_or_right_y_blocks=Pójdź w lewo %d bloków, lub w prawo %d bloków, aby uzyskać ~95%% pewności po następnym pomiarze. +calibrator.you_moved=Ignoruję ostatni rzut, poniewasz się poruszyłeś. +calibrator.command_label=Upewnij się że twój skrót 'Wpisywanie polecenia' w Minecrafcie jest ustawiony na K. Stwórz świat w trybie kreatywnym i wciśnij F3+C. +calibrator.throw_label=Rzuć oko kresu i zmierz kąt używając F3+C. Bądź tak dokładny, jakbyś był w prawdziwym speedrunie. Po wciśnięciu F3+C zostaniesz automatycznie przeteleportowany do następnego miejsca. +calibrator.measure_label=Dalej mierz kąty, dopóki STD się ustabilni (zazwyczaj zajmuje to 10-20 rzutów), a potem wciśnij 'Gotowe' aby zapisać zmiany. calibrator.title=Kalibracja -calibrator.explanation=Program okre?li jak dok?adnie mierzysz oczy. Im ni?sze standardowe odchylenie (STD), tym dok?adniejszy jeste?. Znaj?c twoje STD, kalkulator mo?e wykonywa? lepsze prognozy. +calibrator.explanation=Program określi jak dokładnie mierzysz oczy. Im niższe standardowe odchylenie (STD), tym dokładniejszy jesteś. Znając twoje STD, kalkulator może wykonywać lepsze prognozy. calibrator.l1=Zmierzone STD: calibrator.done=Gotowe notificationsframe.new_version_available=Nowa wesja dostepna! notificationsframe.download_button=Pobierz .jar -notificationsframe.changelog_button=Otwrz dziennik zmian (w przegl?darce) -notificationsframe.update_text=Wersja %s jest dost?pna. Po pobraniu nowego pliku JAR mo?esz usun?? ten plik (twoje ustawienia automatycznie si? przenios?). To powiadomienie mo?e zosta? wy??czone w ustawieniach. -location_blocks=Lokalizacja: (%d, %d), %d blokw odleg?o?ci -chunk_blocks=Chunk: (%d, %d), %d blokw odleg?o?ci -certainty=Pewno??: -current_angle=Obecny k?t -nether_coordinates=Netherowe koordynaty: (%d, %d), %d blokw odleg?o?ci -could_not_determine=Nie uda?o si? okre?li? chunka twierdzy -you_probably_misread=Prawdopodobnie pope?ni?e? b??d w pomiarze jednego z oczu. -blind_coords=Koordynaty (%.0f, %.0f) s? +notificationsframe.changelog_button=Otwórz dziennik zmian (w przeglądarce) +notificationsframe.update_text=Wersja %s jest dostępna. Po pobraniu nowego pliku JAR możesz usunąć ten plik (twoje ustawienia automatycznie się przeniosą). To powiadomienie może zostać wyłączone w ustawieniach. +location_blocks=Lokalizacja: (%d, %d), %d bloków odległości +chunk_blocks=Chunk: (%d, %d), %d bloków odległości +certainty=Pewność: +current_angle=Obecny kąt +nether_coordinates=Netherowe koordynaty: (%d, %d), %d bloków odległości +could_not_determine=Nie udało się określić chunka twierdzy +you_probably_misread=Prawdopodobnie popełniłeś błąd w pomiarze jednego z oczu. +blind_coords=Koordynaty (%.0f, %.0f) są blind_excellent=dobre blind_good_highroll=dobre na highroll blind_okay_highroll=okay na highroll -blind_bad_in_ring=kiepskie, ale w okr?gu +blind_bad_in_ring=kiepskie, ale w okręgu blind_bad=kiepskie -blind_not_in_ring=poza okr?giem +blind_not_in_ring=poza okręgiem #\u00B0 is the degree symbol -blind_direction=Skieruj si? %.0f\u00B0, %.0f blokw st?d, aby uzyska? lepsze koordynaty +blind_direction=Skieruj się %.0f\u00B0, %.0f bloków stąd, aby uzyskać lepsze koordynaty fossil_number=Skamielina %d divine=Boska: divine_safe=Bezpieczna: divine_highroll=Highroll: -chance_of=szansy na blind w odleg?o?ci <%d blokw -average_distance_to=?rednia odleg?o?? do twierdzy: %.0f blokw +chance_of=szansy na blind w odległości <%d bloków +average_distance_to=Średnia odległość do twierdzy: %.0f bloków location=Lokalizacja dist=Dystans nether=Nether From 24f2c215fb20f105aaff1c6732bd0ac407764090 Mon Sep 17 00:00:00 2001 From: Javatrix <108270039+Javatrix@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:22:45 +0100 Subject: [PATCH 07/10] Fix typos in Polish translation. --- src/main/resources/lang/I18n_pl_PL.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/lang/I18n_pl_PL.properties b/src/main/resources/lang/I18n_pl_PL.properties index 3ef206e9..f370aa7b 100644 --- a/src/main/resources/lang/I18n_pl_PL.properties +++ b/src/main/resources/lang/I18n_pl_PL.properties @@ -10,7 +10,7 @@ hide_show_window=Przełącz widoczność okna angle=Kąt error=Błąd basic=Podstawowy -detailed=Sczegółowy +detailed=Szczegółowy chunk=Chunk small=Mały medium=Średni @@ -99,10 +99,10 @@ settings.themeeditor.clipboard_does_not_contain_a_theme_string=Schowek nie zawie settings.information.enable_mismeasure_warning=Pokaż ostrzeżenie, jeśli kalkulator uważa, że zrobiłeś błąd w pomiarach (duży błąd kąta). settings.information.enable_portal_linking_warning=Pokaż ostrzeżenie jeśli nie możesz podróżować Netherem z powodu łącznia portali. settings.information.enable_combined_certainty_information=Pokaż wiadomość jeśli jest możliwe aby przejść Netherem pomiędzy dwoma odstępami dla zwiększonej szansy na znalezienie się w twierdzy. -settings.information.enable_direction_help_information=Pokaż wiadomość mówiącą, ile bloków w bok musisz przejść żeby twój następny rzut dostarczył ok. 95%% pewności. +settings.information.enable_direction_help_information=Pokaż wiadomość mówiącą, ile bloków w bok musisz przejść, aby następny rzut dostarczył ok. 95%% pewności. information.wrong_mc_version=Wykryto złą wersję Minecrafta, upewnij się że poprawna wersja jest wybrana w ustawieniach. information.mismeasure=Wykryto niezwykle duże błędy, prawdopodobnie popełniłeś błąd w pomiarach albo standardowe odchylenie jest zbyt niskie. -information.portal_linking=Może ci się nie udać przejść do twierdzy Netherem z powodu łączenia portali. +information.portal_linking=Może ci się nie udać przejść do twierdzy Netherem z powodu łączenia portali. information.top_two_chunks_are_neighboring=Netherowe koordynaty (%d, %d) mają %.1f%% szans na trafienie do twierdzy (są pomiędzy dwoma najpewniejszymi odstępami). information.go_left_x_block_or_right_y_blocks=Pójdź w lewo %d bloków, lub w prawo %d bloków, aby uzyskać ~95%% pewności po następnym pomiarze. calibrator.you_moved=Ignoruję ostatni rzut, poniewasz się poruszyłeś. From 9b8bd542c7a3e50d628d43a4b5b728af4dde8055 Mon Sep 17 00:00:00 2001 From: Javatrix <108270039+Javatrix@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:24:45 +0100 Subject: [PATCH 08/10] Optimize imports. --- src/main/java/ninjabrainbot/util/I18n.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/ninjabrainbot/util/I18n.java b/src/main/java/ninjabrainbot/util/I18n.java index dd81120d..b23380a0 100644 --- a/src/main/java/ninjabrainbot/util/I18n.java +++ b/src/main/java/ninjabrainbot/util/I18n.java @@ -1,20 +1,19 @@ package ninjabrainbot.util; +import ninjabrainbot.Main; +import ninjabrainbot.io.LanguageResources; + import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; -import java.util.Arrays; import java.util.Locale; import java.util.PropertyResourceBundle; import java.util.ResourceBundle; import java.util.prefs.Preferences; -import ninjabrainbot.Main; -import ninjabrainbot.io.LanguageResources; - /** * @author LingMuQingYu * @since 2021/12/25 14:39 From c322abe73573a0d1281d8b7e7d1e1ce89b5c432c Mon Sep 17 00:00:00 2001 From: Javatrix <108270039+Javatrix@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:31:18 +0100 Subject: [PATCH 09/10] Fix Korean percentage sign issues. --- src/main/resources/lang/I18n_ko_KR.properties | 2 +- src/main/resources/lang/I18n_pl_PL.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/lang/I18n_ko_KR.properties b/src/main/resources/lang/I18n_ko_KR.properties index c504f844..2ec60301 100644 --- a/src/main/resources/lang/I18n_ko_KR.properties +++ b/src/main/resources/lang/I18n_ko_KR.properties @@ -99,7 +99,7 @@ settings.themeeditor.clipboard_does_not_contain_a_theme_string=클립보드에 settings.information.enable_mismeasure_warning=계산기가 잘못 측정한 것을 감지하면 경고를 표시합니다.(큰 각도 오류) settings.information.enable_portal_linking_warning=포탈 연결로 인해 엔더유적을 네더를 통해 이동할 수 없는 경우 경고를 표시합니다. settings.information.enable_combined_certainty_information=엔더유적를 적중할 확률을 높이기 위해 두 오프셋 사이를 네더를 통해 이동할 수 있는 경우 정보 메시지를 표시합니다. -settings.information.enable_direction_help_information=약 95%의 정확도를 얻기 위해 다음 엔더의 눈 투척을 위해 옆으로 얼마나 많은 블록을 움직여야 하는지 알려주는 정보 메시지를 표시합니다. +settings.information.enable_direction_help_information=약 95%%의 정확도를 얻기 위해 다음 엔더의 눈 투척을 위해 옆으로 얼마나 많은 블록을 움직여야 하는지 알려주는 정보 메시지를 표시합니다. information.wrong_mc_version=잘못된 Minecraft 버전이 감지되었습니다. 설정에서 올바른 버전이 선택되었는지 확인하세요. information.mismeasure=비정상적으로 큰 값이 감지되었습니다. 잘못 측정했거나 표준 편차가 너무 낮을 수 있습니다. information.portal_linking=포털 연결로 인해 네더를 통해 엔더유적으로 이동하지 못할 수 있습니다. diff --git a/src/main/resources/lang/I18n_pl_PL.properties b/src/main/resources/lang/I18n_pl_PL.properties index f370aa7b..2fbb7625 100644 --- a/src/main/resources/lang/I18n_pl_PL.properties +++ b/src/main/resources/lang/I18n_pl_PL.properties @@ -98,7 +98,7 @@ settings.themeeditor.paste_theme_string=Importuj (Skopiuj dane ze schowka) settings.themeeditor.clipboard_does_not_contain_a_theme_string=Schowek nie zawiera poprawnego tekstu motywu. settings.information.enable_mismeasure_warning=Pokaż ostrzeżenie, jeśli kalkulator uważa, że zrobiłeś błąd w pomiarach (duży błąd kąta). settings.information.enable_portal_linking_warning=Pokaż ostrzeżenie jeśli nie możesz podróżować Netherem z powodu łącznia portali. -settings.information.enable_combined_certainty_information=Pokaż wiadomość jeśli jest możliwe aby przejść Netherem pomiędzy dwoma odstępami dla zwiększonej szansy na znalezienie się w twierdzy. +settings.information.enable_combined_certainty_information=Pokaż wiadomość jeśli jest możliwe aby przejść Netherem pomiędzy dwoma odstępami dla zwiększonej szansy na znalezienie się w twierdzy. settings.information.enable_direction_help_information=Pokaż wiadomość mówiącą, ile bloków w bok musisz przejść, aby następny rzut dostarczył ok. 95%% pewności. information.wrong_mc_version=Wykryto złą wersję Minecrafta, upewnij się że poprawna wersja jest wybrana w ustawieniach. information.mismeasure=Wykryto niezwykle duże błędy, prawdopodobnie popełniłeś błąd w pomiarach albo standardowe odchylenie jest zbyt niskie. From a4a5a69db32d680e8203ff352168b536bd3ae9b4 Mon Sep 17 00:00:00 2001 From: Filip Ryblad Date: Wed, 22 May 2024 22:21:16 +0200 Subject: [PATCH 10/10] fix indent --- .project | 11 -- src/main/java/ninjabrainbot/util/I18n.java | 108 ++++++++-------- ...NextDirectionProviderIntegrationTests.java | 116 +++++++++--------- 3 files changed, 112 insertions(+), 123 deletions(-) diff --git a/.project b/.project index eca8a2e5..9a16ab0b 100644 --- a/.project +++ b/.project @@ -26,15 +26,4 @@ org.eclipse.jdt.core.javanature org.eclipse.buildship.core.gradleprojectnature - - - 1707904144161 - - 30 - - org.eclipse.core.resources.regexFilterMatcher - node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ - - - diff --git a/src/main/java/ninjabrainbot/util/I18n.java b/src/main/java/ninjabrainbot/util/I18n.java index b23380a0..f7ec435c 100644 --- a/src/main/java/ninjabrainbot/util/I18n.java +++ b/src/main/java/ninjabrainbot/util/I18n.java @@ -1,8 +1,5 @@ package ninjabrainbot.util; -import ninjabrainbot.Main; -import ninjabrainbot.io.LanguageResources; - import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -14,66 +11,69 @@ import java.util.ResourceBundle; import java.util.prefs.Preferences; +import ninjabrainbot.Main; +import ninjabrainbot.io.LanguageResources; + /** * @author LingMuQingYu * @since 2021/12/25 14:39 */ public class I18n { - private static final ResourceBundle BUNDLE; + private static final ResourceBundle BUNDLE; - public static final Locale LANGUAGE; + public static final Locale LANGUAGE; - static { - final Preferences preferences = Preferences.userNodeForPackage(Main.class); - final String languageTag = preferences.get("language_v2", ""); - Locale language = LanguageResources.getLocaleFromTag(languageTag); - if (language == null) { - Locale defaultLocale = Locale.getDefault(); - language = LanguageResources.isLocaleSupported(defaultLocale) ? defaultLocale : LanguageResources.getDefaultLocale(); - preferences.put("language_v2", language.toLanguageTag()); - } - LANGUAGE = language; - BUNDLE = ResourceBundle.getBundle("lang/I18n", LANGUAGE, new UTF8Control()); - } + static { + final Preferences preferences = Preferences.userNodeForPackage(Main.class); + final String languageTag = preferences.get("language_v2", ""); + Locale language = LanguageResources.getLocaleFromTag(languageTag); + if (language == null) { + Locale defaultLocale = Locale.getDefault(); + language = LanguageResources.isLocaleSupported(defaultLocale) ? defaultLocale : LanguageResources.getDefaultLocale(); + preferences.put("language_v2", language.toLanguageTag()); + } + LANGUAGE = language; + BUNDLE = ResourceBundle.getBundle("lang/I18n", LANGUAGE, new UTF8Control()); + } - public static String get(String key, Object... args) { - return String.format(BUNDLE.getString(key), args); - } + public static String get(String key, Object... args) { + return String.format(BUNDLE.getString(key), args); + } - public static boolean localeRequiresExtraSpace() { - return !LANGUAGE.toLanguageTag().contentEquals("en-US"); - } + public static boolean localeRequiresExtraSpace() { + return !LANGUAGE.toLanguageTag().contentEquals("en-US"); + } - public static class UTF8Control extends ResourceBundle.Control { - @Override - public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IOException { - // The below is a copy of the default implementation. - String bundleName = toBundleName(baseName, locale); - String resourceName = toResourceName(bundleName, "properties"); - ResourceBundle bundle = null; - InputStream stream = null; - if (reload) { - URL url = loader.getResource(resourceName); - if (url != null) { - URLConnection connection = url.openConnection(); - if (connection != null) { - connection.setUseCaches(false); - stream = connection.getInputStream(); - } - } - } else { - stream = loader.getResourceAsStream(resourceName); - } - if (stream != null) { - try { - // Only this line is changed to make it to read properties files as UTF-8. - bundle = new PropertyResourceBundle(new InputStreamReader(stream, StandardCharsets.UTF_8)); - } finally { - stream.close(); - } - } - return bundle; - } - } + public static class UTF8Control extends ResourceBundle.Control { + @Override + public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) throws IOException { + // The below is a copy of the default implementation. + String bundleName = toBundleName(baseName, locale); + String resourceName = toResourceName(bundleName, "properties"); + ResourceBundle bundle = null; + InputStream stream = null; + if (reload) { + URL url = loader.getResource(resourceName); + if (url != null) { + URLConnection connection = url.openConnection(); + if (connection != null) { + connection.setUseCaches(false); + stream = connection.getInputStream(); + } + } + } else { + stream = loader.getResourceAsStream(resourceName); + } + if (stream != null) { + try { + // Only this line is changed to make it to read properties files as UTF-8. + bundle = new PropertyResourceBundle(new InputStreamReader(stream, StandardCharsets.UTF_8)); + } finally { + stream.close(); + } + } + return bundle; + } + } } diff --git a/src/test/java/ninjabrainbot/integrationtests/NextDirectionProviderIntegrationTests.java b/src/test/java/ninjabrainbot/integrationtests/NextDirectionProviderIntegrationTests.java index d661afdd..8d75727f 100644 --- a/src/test/java/ninjabrainbot/integrationtests/NextDirectionProviderIntegrationTests.java +++ b/src/test/java/ninjabrainbot/integrationtests/NextDirectionProviderIntegrationTests.java @@ -17,69 +17,69 @@ public class NextDirectionProviderIntegrationTests { - @Test - void expectedCertaintyOnNextThrowIsAtLeastAsGoodAsPromised() { - Logger.enabled = false; - // Arrange - Random chunkRandom = new Random(111); - IntegrationTestBuilder testBuilder = new IntegrationTestBuilder().withProSettings(); - testBuilder.preferences.informationDirectionHelpEnabled.set(true); - RandomPlayerPositionProvider playerPositionProvider = new RandomPlayerPositionProvider(123); - NextThrowDirectionInformationProvider infoMessage = new NextThrowDirectionInformationProvider(testBuilder.dataState, testBuilder.environmentState, testBuilder.preferences); + @Test + void expectedCertaintyOnNextThrowIsAtLeastAsGoodAsPromised() { + Logger.enabled = false; + // Arrange + Random chunkRandom = new Random(111); + IntegrationTestBuilder testBuilder = new IntegrationTestBuilder().withProSettings(); + testBuilder.preferences.informationDirectionHelpEnabled.set(true); + RandomPlayerPositionProvider playerPositionProvider = new RandomPlayerPositionProvider(123); + NextThrowDirectionInformationProvider infoMessage = new NextThrowDirectionInformationProvider(testBuilder.dataState, testBuilder.environmentState, testBuilder.preferences); - // Act - double totalProbability = 0; - int samples = 0; - for (int i = 0; i < 100; i++) { - testBuilder.resetCalculator(); - IDetailedPlayerPosition firstPlayerPosition = playerPositionProvider.nextPlayerPositionFirstRing(); - testBuilder.inputDetailedPlayerPosition(firstPlayerPosition); - if (infoMessage.get() == null) - continue; - Chunk randomStrongholdChunk = sampleRandomChunk(chunkRandom, testBuilder.dataState.calculatorResult().get()); - testBuilder.inputDetailedPlayerPosition(getPlayerPositionForNextThrow(firstPlayerPosition, randomStrongholdChunk, infoMessage.get().message)); - List topChunks = testBuilder.dataState.calculatorResult().get().getTopChunks(); - double eyeSpyProbability = topChunks.get(0).weight + (topChunks.get(0).isNeighboring(topChunks.get(1)) ? topChunks.get(1).weight : 0); - totalProbability += eyeSpyProbability; - samples++; - } - System.out.println(totalProbability / samples + ", " + samples); + // Act + double totalProbability = 0; + int samples = 0; + for (int i = 0; i < 100; i++) { + testBuilder.resetCalculator(); + IDetailedPlayerPosition firstPlayerPosition = playerPositionProvider.nextPlayerPositionFirstRing(); + testBuilder.inputDetailedPlayerPosition(firstPlayerPosition); + if (infoMessage.get() == null) + continue; + Chunk randomStrongholdChunk = sampleRandomChunk(chunkRandom, testBuilder.dataState.calculatorResult().get()); + testBuilder.inputDetailedPlayerPosition(getPlayerPositionForNextThrow(firstPlayerPosition, randomStrongholdChunk, infoMessage.get().message)); + List topChunks = testBuilder.dataState.calculatorResult().get().getTopChunks(); + double eyeSpyProbability = topChunks.get(0).weight + (topChunks.get(0).isNeighboring(topChunks.get(1)) ? topChunks.get(1).weight : 0); + totalProbability += eyeSpyProbability; + samples++; + } + System.out.println(totalProbability / samples + ", " + samples); - Assert.isTrue(totalProbability / samples > 0.95, "Average certainty after second throw did not exceed 95%: " + totalProbability / samples); + Assert.isTrue(totalProbability / samples > 0.95, "Average certainty after second throw did not exceed 95%: " + totalProbability / samples); - Logger.enabled = true; - } + Logger.enabled = true; + } - private Chunk sampleRandomChunk(Random random, ICalculatorResult calculatorResult) { - List chunks = calculatorResult.getTopChunks(); - double sample = random.nextDouble(); - double cumProb = 0; - for (Chunk chunk : chunks) { - cumProb += chunk.weight; - if (cumProb > sample) - return chunk; - } - return null; - } + private Chunk sampleRandomChunk(Random random, ICalculatorResult calculatorResult) { + List chunks = calculatorResult.getTopChunks(); + double sample = random.nextDouble(); + double cumProb = 0; + for (Chunk chunk : chunks) { + cumProb += chunk.weight; + if (cumProb > sample) + return chunk; + } + return null; + } - private IDetailedPlayerPosition getPlayerPositionForNextThrow(IDetailedPlayerPosition playerPosition, Chunk stronghold, String message) { - String[] words = message.split(" "); - int leftDistance = getFirstInt(words); - double leftAngle = playerPosition.horizontalAngle() / 180.0 * Math.PI * 2 - 0.5 * Math.PI; - double x = playerPosition.xInOverworld() + Coords.getX(leftDistance, leftAngle); - double z = playerPosition.zInOverworld() + Coords.getZ(leftDistance, leftAngle); - double horizontalAngle = Coords.getPhi(stronghold.eightEightX() - x, stronghold.eightEightZ() - z) / Math.PI * 180.0; - return new DetailedPlayerPosition(x, 80, z, horizontalAngle, -31, false); - } + private IDetailedPlayerPosition getPlayerPositionForNextThrow(IDetailedPlayerPosition playerPosition, Chunk stronghold, String message) { + String[] words = message.split(" "); + int leftDistance = getFirstInt(words); + double leftAngle = playerPosition.horizontalAngle() / 180.0 * Math.PI * 2 - 0.5 * Math.PI; + double x = playerPosition.xInOverworld() + Coords.getX(leftDistance, leftAngle); + double z = playerPosition.zInOverworld() + Coords.getZ(leftDistance, leftAngle); + double horizontalAngle = Coords.getPhi(stronghold.eightEightX() - x, stronghold.eightEightZ() - z) / Math.PI * 180.0; + return new DetailedPlayerPosition(x, 80, z, horizontalAngle, -31, false); + } - private static int getFirstInt(String[] words) { - for (String word : words) { - try { - return Integer.parseInt(word); - } catch (NumberFormatException ignored) { - } - } - throw new NumberFormatException("Could not parse string array: " + Arrays.toString(words)); - } + private static int getFirstInt(String[] words) { + for (String word : words) { + try { + return Integer.parseInt(word); + } catch (NumberFormatException ignored) { + } + } + throw new NumberFormatException("Could not parse string array: " + Arrays.toString(words)); + } }