diff --git a/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java b/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java index a177fd653..f41aa5483 100644 --- a/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java +++ b/libraries/localization/localization-mc11w49a-mc1.5.2/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LanguageMixin.java @@ -2,9 +2,12 @@ import java.util.Properties; +import org.objectweb.asm.Opcodes; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -51,19 +54,6 @@ public class LanguageMixin { } } - @Inject( - method = "loadLanguage", - at = @At( - value = "HEAD" - ) - ) - private void osl$localization$setLanguage(CallbackInfo ci) { - // each ServerPlayerEntity also holds an instance of this class - if ((Language) (Object) this == INSTANCE) { - Localization.getLanguageManager().setSelectedLanguage(this.currentCode); - } - } - @Inject( method = "loadLanguage", at = @At( @@ -98,13 +88,17 @@ public class LanguageMixin { @Inject( method = "loadLanguage", at = @At( - value = "TAIL" + value = "FIELD", + target = "Lnet/minecraft/locale/Language;currentCode:Ljava/lang/String;", + opcode = Opcodes.PUTFIELD, + shift = Shift.AFTER ) ) private void osl$localization$localeReloaded(CallbackInfo ci) { // each ServerPlayerEntity also holds an instance of this class if ((Language) (Object) this == INSTANCE) { Localization.getLocale().setLastUpdateTime(); + Localization.getLanguageManager().setSelectedLanguage(this.currentCode); } } } diff --git a/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java b/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java index 8b19c5da6..7e88f0f36 100644 --- a/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java +++ b/libraries/localization/localization-mc13w26a-mc18w01a/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java @@ -56,14 +56,16 @@ private void load(List resources) { } ) private void osl$localization$loadExtraTranslations(ResourceManager resourceManager, List languageCodes, CallbackInfo ci, @Local(ordinal = 0) String languageCode, @Local(ordinal = 2) String namespace) { + String languageCodeLowercase = languageCode.toLowerCase(java.util.Locale.ROOT); + String pathFormat = "lang/%s%s"; String[] paths; - if (ResourcePacks.getSupportedFormat() < 3) { + if (ResourcePacks.getSupportedFormat() < 3 && !languageCode.equals(languageCodeLowercase)) { paths = new String[] { String.format(pathFormat, languageCode, ".json"), - String.format(pathFormat, languageCode.toLowerCase(java.util.Locale.ROOT), ".lang"), - String.format(pathFormat, languageCode.toLowerCase(java.util.Locale.ROOT), ".json") + String.format(pathFormat, languageCodeLowercase, ".lang"), + String.format(pathFormat, languageCodeLowercase, ".json") }; } else { paths = new String[] { @@ -83,8 +85,7 @@ private void load(List resources) { } @Inject( method = "load(Lnet/minecraft/client/resource/manager/ResourceManager;Ljava/util/List;)V", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/client/resource/manager/ResourceManager;getResources(Lnet/minecraft/resource/Identifier;)Ljava/util/List;" + value = "TAIL" ) ) private void osl$localization$localeReloaded(CallbackInfo ci) { diff --git a/libraries/localization/localization-mc18w02a-mc1.14.4/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java b/libraries/localization/localization-mc18w02a-mc1.14.4/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java index 8d66e8a06..3cb2bbeea 100644 --- a/libraries/localization/localization-mc18w02a-mc1.14.4/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java +++ b/libraries/localization/localization-mc18w02a-mc1.14.4/src/main/java/net/ornithemc/osl/localization/impl/mixin/client/LocaleMixin.java @@ -65,8 +65,7 @@ private void load(List resources) { } @Inject( method = "load(Lnet/minecraft/resource/manager/ResourceManager;Ljava/util/List;)V", at = @At( - value = "INVOKE", - target = "Lnet/minecraft/resource/manager/ResourceManager;getResources(Lnet/minecraft/resource/Identifier;)Ljava/util/List;" + value = "TAIL" ) ) private void osl$localization$localeReloaded(CallbackInfo ci) { diff --git a/libraries/localization/localization-mcb1.0-mc11w48a/src/main/java/net/ornithemc/osl/localization/impl/LanguageReloader.java b/libraries/localization/localization-mcb1.0-mc11w48a/src/main/java/net/ornithemc/osl/localization/impl/LanguageReloader.java index d8ba66ad2..9a531cdf3 100644 --- a/libraries/localization/localization-mcb1.0-mc11w48a/src/main/java/net/ornithemc/osl/localization/impl/LanguageReloader.java +++ b/libraries/localization/localization-mcb1.0-mc11w48a/src/main/java/net/ornithemc/osl/localization/impl/LanguageReloader.java @@ -1,5 +1,6 @@ package net.ornithemc.osl.localization.impl; +import net.minecraft.locale.Language; import net.ornithemc.osl.resource.loader.api.client.ClientResourceLoaderEvents; import net.ornithemc.osl.resource.loader.api.client.resource.reload.AssetsReloaders; import net.ornithemc.osl.resource.loader.api.resource.manager.ResourceManager; @@ -18,6 +19,7 @@ public static void init() { @Override public void resourcesReloaded(ResourceManager resourceManager) { + Language.getInstance();// ensure it's loaded Localization.getLanguageManager().reloadLocale(resourceManager); } } diff --git a/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java b/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java index d33b84897..407cea6a5 100644 --- a/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java +++ b/libraries/localization/src/main/java/net/ornithemc/osl/localization/impl/Locale.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -110,12 +111,12 @@ public void reload(ResourceManager resourceManager, List languages) { } public void loadLanguage(ResourceManager resourceManager, String language) { + String languageLowercase = language.toLowerCase(java.util.Locale.ROOT); + String pathFormat = "lang/%s%s"; String[] paths; - if (ResourcePacks.getSupportedFormat() < 3) { - String languageLowercase = language.toLowerCase(java.util.Locale.ROOT); - + if (ResourcePacks.getSupportedFormat() < 3 && !language.equals(languageLowercase)) { paths = new String[] { String.format(pathFormat, language, ".lang"), String.format(pathFormat, language, ".json"), @@ -185,7 +186,7 @@ public void loadFromResource(NamespacedIdentifier location, InputStream resource } public void loadFromLang(InputStream is) throws IOException { - try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) { + try (BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) { String line; while ((line = br.readLine()) != null) { line = line.trim(); @@ -202,7 +203,7 @@ public void loadFromLang(InputStream is) throws IOException { } public void loadFromJson(InputStream is) throws IOException { - try (JsonReader reader = JsonReader.json(new InputStreamReader(is))) { + try (JsonReader reader = JsonReader.json(new InputStreamReader(is, StandardCharsets.UTF_8))) { reader.beginObject(); while (reader.hasNext()) { this.set(reader.nextName() , reader.nextString());