Skip to content

Commit

Permalink
mixin to locale and I18n to access the key map directly to fix LangKey
Browse files Browse the repository at this point in the history
  • Loading branch information
ghzdude committed Jan 29, 2025
1 parent c2defac commit 356d490
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 1 deletion.
19 changes: 19 additions & 0 deletions src/main/java/gregtech/api/mui/LocaleAccessor.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package gregtech.api.mui;

import net.minecraft.client.resources.Locale;

public interface LocaleAccessor {

String gregtech$getRawKey(String s);

ThreadLocal<LocaleAccessor> accessor = new ThreadLocal<>();

static String getRawKey(String s) {
if (accessor.get() == null) return s;
return accessor.get().gregtech$getRawKey(s);
}

static void setLocale(Locale locale) {
accessor.set((LocaleAccessor) locale);
}
}
20 changes: 20 additions & 0 deletions src/main/java/gregtech/mixins/minecraft/L18nMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package gregtech.mixins.minecraft;

import gregtech.api.mui.LocaleAccessor;

import net.minecraft.client.resources.I18n;
import net.minecraft.client.resources.Locale;

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;

@Mixin(I18n.class)
public abstract class L18nMixin {

@Inject(method = "setLocale", at = @At("HEAD"))
private static void getLocale(Locale i18nLocaleIn, CallbackInfo ci) {
LocaleAccessor.setLocale(i18nLocaleIn);
}
}
22 changes: 22 additions & 0 deletions src/main/java/gregtech/mixins/minecraft/LocaleMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package gregtech.mixins.minecraft;

import gregtech.api.mui.LocaleAccessor;

import net.minecraft.client.resources.Locale;

import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

import java.util.Map;

@Mixin(Locale.class)
public abstract class LocaleMixin implements LocaleAccessor {

@Shadow
Map<String, String> properties;

@Override
public String gregtech$getRawKey(String s) {
return this.properties.get(s);
}
}
20 changes: 20 additions & 0 deletions src/main/java/gregtech/mixins/mui2/LangKeyMixin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package gregtech.mixins.mui2;

import gregtech.api.mui.LocaleAccessor;

import com.cleanroommc.modularui.drawable.text.BaseKey;
import com.cleanroommc.modularui.drawable.text.LangKey;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;

@Mixin(value = LangKey.class, remap = false)
public abstract class LangKeyMixin extends BaseKey {

@Redirect(method = "getFormatted",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/client/resources/I18n;format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"))
public String getTranslateKey(String translateKey, Object[] parameters) {
return LocaleAccessor.getRawKey(translateKey);
}
}
2 changes: 2 additions & 0 deletions src/main/resources/mixins.gregtech.minecraft.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@
"client": [
"BlockMixin",
"EntityRendererMixin",
"L18nMixin",
"LayerArmorBaseMixin",
"LayerCustomHeadMixin",
"LocaleMixin",
"RecipeRepairItemMixin",
"RegionRenderCacheBuilderMixin",
"RenderChunkMixin",
Expand Down
4 changes: 3 additions & 1 deletion src/main/resources/mixins.gregtech.mui2.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
"maxShiftBy": 10
},
"mixins": [],
"client": [],
"client": [
"LangKeyMixin"
],
"server": []
}

0 comments on commit 356d490

Please sign in to comment.