Translater/src/main/java/io/gitlab/jfronny/translater/mixin/MixinLanguage.java

44 lines
1.6 KiB
Java

package io.gitlab.jfronny.translater.mixin;
import io.gitlab.jfronny.translater.Translater;
import net.fabricmc.loader.api.FabricLoader;
import net.fabricmc.loader.api.MappingResolver;
import net.minecraft.client.resource.language.TranslationStorage;
import net.minecraft.util.Language;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.lang.reflect.Field;
import java.util.Map;
//This is where the actual magic happens
@Mixin(Language.class)
public class MixinLanguage {
private static final MappingResolver mr = FabricLoader.getInstance().getMappingResolver();
private static final Field FIELD = FieldUtils.getField(TranslationStorage.class,
mr.mapFieldName("intermediary",
"net.minecraft.class_1078",
"field_5330",
"Ljava/util/Map;"),
true);
@Inject(at = @At("HEAD"), method = "setInstance")
private static void languageSetInstance(Language language, CallbackInfo ci) {
if (FIELD == null) {
Translater.Warn("Could not set language map, field not found");
return;
}
if (language instanceof TranslationStorage) {
try {
FIELD.set(language, Translater.getMap((Map<String, String>) FIELD.get(language)));
} catch (IllegalAccessException | ClassCastException e) {
e.printStackTrace();
}
}
}
}