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));
+ }
}