Skip to content

Commit eedc893

Browse files
committed
修复游戏首次加载时currentLanguageCode未被设置的bug 优化代码
1 parent 3a8eec3 commit eedc893

File tree

5 files changed

+35
-27
lines changed

5 files changed

+35
-27
lines changed

common/src/main/java/com/wulian/texturelocaleredirector/LangTextureCache.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
public class LangTextureCache {
1010

1111
private static final Map<Identifier, SoftReference<Boolean>> existsCache = new ConcurrentHashMap<>();
12-
private static volatile String currentLanguage = "en_us"; // 默认
12+
private static volatile String currentLanguage = "en_us";
1313

1414
public static Boolean get(Identifier id) {
1515
SoftReference<Boolean> ref = existsCache.get(id);

common/src/main/java/com/wulian/texturelocaleredirector/mixin/LanguageManagerMixin.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,22 @@
44
import net.minecraft.client.resource.language.LanguageManager;
55
import net.minecraft.resource.ResourceManager;
66
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.Shadow;
78
import org.spongepowered.asm.mixin.injection.At;
89
import org.spongepowered.asm.mixin.injection.Inject;
910
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1011

1112
@Mixin(LanguageManager.class)
12-
public class LanguageManagerMixin {
13+
public abstract class LanguageManagerMixin {
14+
15+
@Shadow
16+
private String currentLanguageCode;
17+
18+
@Inject(method = "<init>", at = @At("TAIL"))
19+
private void onInit(String languageCode, CallbackInfo ci) {
20+
LangTextureCache.setCurrentLanguage(languageCode);
21+
LangTextureCache.clear();
22+
}
1323

1424
@Inject(method = "setLanguage", at = @At("HEAD"))
1525
private void onSetLanguage(String languageCode, CallbackInfo ci) {
@@ -19,7 +29,7 @@ private void onSetLanguage(String languageCode, CallbackInfo ci) {
1929

2030
@Inject(method = "reload", at = @At("HEAD"))
2131
private void onReload(ResourceManager manager, CallbackInfo ci) {
22-
LangTextureCache.setCurrentLanguage(((LanguageManager)(Object)this).getLanguage());
32+
LangTextureCache.setCurrentLanguage(currentLanguageCode);
2333
LangTextureCache.clear();
2434
}
2535
}

common/src/main/java/com/wulian/texturelocaleredirector/mixin/ftbquests/ChapterImageMixin.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,34 @@
55
import dev.ftb.mods.ftblibrary.icon.Icon;
66
import dev.ftb.mods.ftbquests.quest.ChapterImage;
77
import org.spongepowered.asm.mixin.Mixin;
8-
import org.spongepowered.asm.mixin.Shadow;
98
import org.spongepowered.asm.mixin.injection.At;
10-
import org.spongepowered.asm.mixin.injection.Inject;
11-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
9+
import org.spongepowered.asm.mixin.injection.ModifyVariable;
1210

1311
@Mixin(value = ChapterImage.class, remap = false)
1412
public abstract class ChapterImageMixin {
15-
@Shadow private Icon image;
16-
@Inject(method = "setImage(Ldev/ftb/mods/ftblibrary/icon/Icon;)Ldev/ftb/mods/ftbquests/quest/ChapterImage;", at = @At("HEAD"), cancellable = true)
17-
private void injectLocalizedImage(Icon image, CallbackInfoReturnable<ChapterImage> cir) {
13+
14+
@ModifyVariable(
15+
method = "setImage(Ldev/ftb/mods/ftblibrary/icon/Icon;)Ldev/ftb/mods/ftbquests/quest/ChapterImage;",
16+
at = @At("HEAD"),
17+
argsOnly = true
18+
)
19+
private Icon injectLocalizedImage(Icon image) {
1820
String currentLang = LangTextureCache.getCurrentLanguage();
1921
if ("en_us".equals(currentLang)) {
20-
return;
22+
return image;
2123
}
2224

23-
String originalPath = image.toString();
24-
String localizedPath = "textures/" + currentLang + "/" + originalPath.replaceFirst("^textures/", "");
25-
Icon localizedIcon = Icon.getIcon(localizedPath);
25+
String path = image.toString();
26+
if (path.startsWith("textures/")) {
27+
String localizedPath = "textures/" + currentLang + "/" + path.substring(9);
28+
Icon localizedIcon = Icon.getIcon(localizedPath);
2629

27-
if (!localizedIcon.isEmpty()) {
28-
this.image = localizedIcon;
29-
TextureLocaleRedirector.LOGGER.info("Redirected ChapterImage icon {} -> {}", originalPath, localizedPath);
30-
cir.setReturnValue((ChapterImage) (Object) this);
30+
if (!localizedIcon.isEmpty()) {
31+
TextureLocaleRedirector.LOGGER.info("Redirected ChapterImage icon {} -> {}", path, localizedPath);
32+
return localizedIcon;
33+
}
3134
}
35+
36+
return image;
3237
}
3338
}

common/src/main/java/com/wulian/texturelocaleredirector/mixin/ftbquests/FTBQMixinPlugin.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,8 @@ public String getRefMapperConfig() {
1919

2020
@Override
2121
public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
22-
if (mixinClassName.endsWith("ChapterImageMixin")) {
23-
try {
24-
Class.forName("dev.ftb.mods.ftbquests.quest.ChapterImage");
25-
return true;
26-
} catch (ClassNotFoundException e) {
27-
return false;
28-
}
29-
}
30-
return true;
22+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
23+
return classLoader.getResource("dev/ftb/mods/ftbquests/quest/ChapterImage.class") != null;
3124
}
3225

3326
@Override

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ enabled_platforms=fabric,forge,neoforge
66
yarn_mappings=1.20.4+build.3
77

88
archives_base_name=Texture-Locale-Redirector
9-
mod_version=1.1.0
9+
mod_version=1.2.0
1010
maven_group=com.wulian.texturelocaleredirector
1111

1212
forge_version=49.2.0

0 commit comments

Comments
 (0)