Skip to content

Commit 99579ab

Browse files
committed
init
1 parent 511cac4 commit 99579ab

21 files changed

Lines changed: 353 additions & 29 deletions

File tree

build.gradle

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ subprojects {
3333

3434
dependencies {
3535
minecraft "net.minecraft:minecraft:$rootProject.minecraft_version"
36-
mappings loom.officialMojangMappings()
36+
mappings loom.layered {
37+
it.mappings("net.fabricmc:yarn:$rootProject.yarn_mappings:v2")
38+
it.mappings("dev.architectury:yarn-mappings-patch-neoforge:$rootProject.yarn_mappings_patch_neoforge_version")
39+
}
3740
}
3841

3942
java {

common/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ dependencies {
88
// Do NOT use other classes from Fabric Loader.
99
modImplementation "net.fabricmc:fabric-loader:$rootProject.fabric_loader_version"
1010

11+
modImplementation "me.shedaniel.cloth:cloth-config:17.0.144"
1112
}
Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
11
package org.localizedmc.sublangview;
22

3-
public class ModConfig {
3+
import me.shedaniel.autoconfig.ConfigData;
4+
import me.shedaniel.autoconfig.annotation.Config;
5+
import me.shedaniel.autoconfig.annotation.ConfigEntry;
6+
import org.localizedmc.sublangview.helper.DisplayMode;
7+
import org.localizedmc.sublangview.helper.TextColor;
8+
9+
@Config(name = SubLangView.MOD_ID)
10+
public class ModConfig implements ConfigData {
11+
public String subLanguageCode = "en_us";
12+
13+
@ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
14+
public TextColor textColor = TextColor.GRAY;
15+
16+
@ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
17+
public DisplayMode.Tooltip itemTooltipDisplayMode = DisplayMode.Tooltip.ALL;
418
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package org.localizedmc.sublangview;
22

3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
36
public final class SubLangView {
47
public static final String MOD_ID = "sublangview";
5-
6-
public static void init() {
7-
// Write common init code here.
8-
}
8+
public static final Logger LOGGER = LoggerFactory.getLogger(SubLangView.class);
99
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,17 @@
11
package org.localizedmc.sublangview.helper;
22

3+
import me.shedaniel.autoconfig.AutoConfig;
4+
import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer;
5+
import org.localizedmc.sublangview.ModConfig;
6+
37
public class ConfigHelper {
8+
private static ModConfig modConfigs;
9+
10+
public static ModConfig getConfig() {
11+
if (modConfigs == null) {
12+
AutoConfig.register(ModConfig.class, Toml4jConfigSerializer::new);
13+
modConfigs = AutoConfig.getConfigHolder(ModConfig.class).getConfig();
14+
}
15+
return modConfigs;
16+
}
417
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,30 @@
11
package org.localizedmc.sublangview.helper;
22

3+
import net.minecraft.item.ItemStack;
4+
import net.minecraft.text.Text;
5+
6+
import java.util.List;
7+
import java.util.Objects;
8+
39
public class DisplayHelper {
10+
public static void renderItemTooltip(List<Text> list, ItemStack itemStack) {
11+
switch (Objects.requireNonNull(ConfigHelper.getConfig().itemTooltipDisplayMode)) {
12+
case ALL -> {
13+
list.add(TranslationHelper.getOriginalText(TranslationHelper.Item.getOriginalText(itemStack).getString()));
14+
list.add(TranslationHelper.getTranslationKeyText(TranslationHelper.Item.getTranslationKey(itemStack).getString()));
15+
list.add(TranslationHelper.getNamespaceText(TranslationHelper.Item.getNamespace(itemStack)));
16+
}
17+
case ORIGINAL -> {
18+
list.add(TranslationHelper.getOriginalText(TranslationHelper.Item.getOriginalText(itemStack).getString()));
19+
list.add(TranslationHelper.getNamespaceText(TranslationHelper.Item.getNamespace(itemStack)));
20+
}
21+
case TRANSLATION_KEY -> {
22+
list.add(TranslationHelper.getTranslationKeyText(itemStack.getItem().getTranslationKey()));
23+
list.add(TranslationHelper.getNamespaceText(TranslationHelper.Item.getNamespace(itemStack)));
24+
}
25+
case OFF -> {
26+
list.add(TranslationHelper.getNamespaceText(TranslationHelper.Item.getNamespace(itemStack)));
27+
}
28+
}
29+
}
430
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,41 @@
11
package org.localizedmc.sublangview.helper;
22

3+
import net.minecraft.text.Text;
4+
35
public class DisplayMode {
6+
public enum Tooltip {
7+
ORIGINAL("config.sublangview.option.original"),
8+
TRANSLATION_KEY("config.sublangview.option.translation_key"),
9+
ALL("config.sublangview.option.all"),
10+
OFF("config.sublangview.option.off");
11+
12+
final Text translatableText;
13+
14+
Tooltip(String translationKey) {
15+
this.translatableText = Text.translatable(translationKey);
16+
}
17+
18+
@Override
19+
public String toString() {
20+
return translatableText.getString();
21+
}
22+
}
23+
24+
public enum Advancement {
25+
ORIGINAL("config.sublangview.option.original"),
26+
TRANSLATION_KEY("config.sublangview.option.translation_key"),
27+
ALL("config.sublangview.option.all"),
28+
OFF("config.sublangview.option.off");
29+
30+
final Text translatableText;
31+
32+
Advancement(String translatableKey) {
33+
this.translatableText = Text.translatable(translatableKey);
34+
}
35+
36+
@Override
37+
public String toString() {
38+
return translatableText.getString();
39+
}
40+
}
441
}
Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,40 @@
11
package org.localizedmc.sublangview.helper;
22

3-
public class TextColor {
3+
import net.minecraft.text.Text;
4+
import net.minecraft.util.Formatting;
5+
6+
public enum TextColor {
7+
WHITE("config.sublangview.option.color_white", Formatting.WHITE),
8+
BLACK("config.sublangview.option.color_black", Formatting.BLACK),
9+
YELLOW("config.sublangview.option.color_yellow", Formatting.YELLOW),
10+
GOLD("config.sublangview.option.color_gold", Formatting.GOLD),
11+
GRAY("config.sublangview.option.color_gray", Formatting.GRAY),
12+
DARK_GRAY("config.sublangview.option.color_dark_gray", Formatting.DARK_GRAY),
13+
BLUE("config.sublangview.option.color_blue", Formatting.BLUE),
14+
DARK_BLUE("config.sublangview.option.color_dark_blue", Formatting.DARK_BLUE),
15+
GREEN("config.sublangview.option.color_green", Formatting.GREEN),
16+
DARK_GREEN("config.sublangview.option.color_dark_green", Formatting.DARK_GREEN),
17+
AQUA("config.sublangview.option.color_aqua", Formatting.AQUA),
18+
DARK_AQUA("config.sublangview.option.color_dark_aqua", Formatting.DARK_AQUA),
19+
RED("config.sublangview.option.color_red", Formatting.RED),
20+
DARK_RED("config.sublangview.option.color_dark_red", Formatting.DARK_RED),
21+
LIGHT_PURPLE("config.sublangview.option.color_light_purple", Formatting.LIGHT_PURPLE),
22+
DARK_PURPLE("config.sublangview.option.color_dark_purple", Formatting.DARK_PURPLE);
23+
24+
private final Text translatableText;
25+
private final Formatting textFormat;
26+
27+
TextColor(String translationKey, Formatting textFormat) {
28+
this.translatableText = Text.translatable(translationKey);
29+
this.textFormat = textFormat;
30+
}
31+
32+
public Formatting formatting() {
33+
return this.textFormat;
34+
}
35+
36+
@Override
37+
public String toString() {
38+
return translatableText.getString();
39+
}
440
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,98 @@
11
package org.localizedmc.sublangview.helper;
22

3+
import net.minecraft.client.resource.language.TranslationStorage;
4+
import net.minecraft.component.DataComponentTypes;
5+
import net.minecraft.item.ItemStack;
6+
import net.minecraft.registry.Registries;
7+
import net.minecraft.text.Text;
8+
import net.minecraft.text.TranslatableTextContent;
9+
import net.minecraft.util.Formatting;
10+
311
public class TranslationHelper {
12+
public static TranslationStorage subTranslationStorage;
13+
14+
public static boolean isMissingSubTranslation(String key) {
15+
return subTranslationStorage == null || !subTranslationStorage.hasTranslation(key);
16+
}
17+
18+
public static Text getOriginalText(String originalText) {
19+
return Text.translatable("gui.sublangview.original", ConfigHelper.getConfig().subLanguageCode, originalText).formatted(ConfigHelper.getConfig().textColor.formatting());
20+
}
21+
22+
public static Text getTranslationKeyText(String translationKey) {
23+
return Text.translatable("gui.sublangview.translation_key", translationKey).formatted(ConfigHelper.getConfig().textColor.formatting());
24+
}
25+
26+
public static Text getNamespaceText(String namespace) {
27+
return Text.translatable("gui.sublangview.namespace", namespace).formatted(ConfigHelper.getConfig().textColor.formatting());
28+
}
29+
30+
public static class Item {
31+
public static Text getOriginalText(ItemStack itemStack) {
32+
if (!isMissingSubTranslation(itemStack.getItem().getTranslationKey()) && !itemStack.hasChangedComponent(DataComponentTypes.CUSTOM_NAME)) {
33+
Text name = itemStack.getName();
34+
String subName = subTranslationStorage.get(itemStack.getItem().getTranslationKey());
35+
if (!subName.equals(name.getString()) && !subName.equals(itemStack.getItem().getTranslationKey())) {
36+
return Text.literal(subName);
37+
}
38+
}
39+
return itemStack.getName();
40+
}
41+
42+
public static Text getTranslationKey(ItemStack itemStack) {
43+
if (!itemStack.hasChangedComponent(DataComponentTypes.CUSTOM_NAME)) {
44+
String translationKey = itemStack.getItem().getTranslationKey();
45+
return Text.literal(translationKey);
46+
}
47+
return Text.literal(itemStack.getItem().getTranslationKey());
48+
}
49+
50+
public static String getNamespace(ItemStack itemStack) {
51+
return Registries.ITEM.getId(itemStack.getItem()).getNamespace();
52+
}
53+
}
54+
55+
public static class Advancement {
56+
public static Text getTitleOriginalText(Text titleText) {
57+
if (titleText instanceof TranslatableTextContent content) {
58+
if (!isMissingSubTranslation(content.getKey())) {
59+
String originalText = subTranslationStorage.get(content.getKey());
60+
if (!originalText.equals(titleText.getString()) && !originalText.equals(content.getKey())) {
61+
return Text.literal(originalText);
62+
}
63+
}
64+
}
65+
66+
return titleText;
67+
}
68+
69+
public static Text getTitleTranslationKey(Text titleText) {
70+
if (titleText instanceof TranslatableTextContent content) {
71+
return Text.literal(content.getKey());
72+
}
73+
74+
return titleText;
75+
}
76+
77+
public static Text getDescOriginalText(Text descText) {
78+
if (descText instanceof TranslatableTextContent content) {
79+
if (!isMissingSubTranslation(content.getKey())) {
80+
String originalText = subTranslationStorage.get(content.getKey());
81+
if (!originalText.equals(descText.getString()) && !originalText.equals(content.getKey())) {
82+
return Text.literal(originalText);
83+
}
84+
}
85+
}
86+
87+
return descText;
88+
}
89+
90+
public static Text getDescTranslationKey(Text descText) {
91+
if (descText instanceof TranslatableTextContent content) {
92+
return Text.literal(content.getKey());
93+
}
94+
95+
return descText;
96+
}
97+
}
498
}
Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,37 @@
11
package org.localizedmc.sublangview.mixin;
22

3-
public class LanguageManagerMixin {
3+
import com.google.common.collect.Lists;
4+
import com.llamalad7.mixinextras.sugar.Local;
5+
import net.minecraft.client.resource.language.LanguageManager;
6+
import net.minecraft.client.resource.language.TranslationStorage;
7+
import net.minecraft.resource.ResourceManager;
8+
import org.localizedmc.sublangview.SubLangView;
9+
import org.localizedmc.sublangview.helper.ConfigHelper;
10+
import org.localizedmc.sublangview.helper.TranslationHelper;
11+
import org.spongepowered.asm.mixin.Mixin;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.Inject;
14+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
15+
16+
import java.util.List;
17+
18+
@Mixin(LanguageManager.class)
19+
public abstract class LanguageManagerMixin {
20+
@Inject(
21+
method = "reload(Lnet/minecraft/resource/ResourceManager;)V",
22+
at = @At(
23+
value = "INVOKE",
24+
target = "Lnet/minecraft/client/resource/language/TranslationStorage;load(Lnet/minecraft/resource/ResourceManager;Ljava/util/List;Z)Lnet/minecraft/client/resource/language/TranslationStorage;"
25+
)
26+
)
27+
private void init(ResourceManager manager, CallbackInfo ci, @Local List<String> list) {
28+
try {
29+
String sublanguage = ConfigHelper.getConfig().subLanguageCode;
30+
list.add(1, sublanguage);
31+
TranslationHelper.subTranslationStorage = TranslationStorage.load(manager, Lists.newArrayList(sublanguage), false);
32+
SubLangView.LOGGER.info("Translation objects for the sub language have been loaded.");
33+
} catch (Exception exception) {
34+
SubLangView.LOGGER.error(new RuntimeException("Unknown sub language:" + ConfigHelper.getConfig().subLanguageCode, exception).getMessage());
35+
}
36+
}
437
}

0 commit comments

Comments
 (0)