Skip to content

Commit 2e00132

Browse files
authored
Merge pull request #121 from MIA-Development-Team/refactor/lang-provider
refactor: lang provider
2 parents c1f5aa2 + 2f46580 commit 2e00132

10 files changed

Lines changed: 228 additions & 193 deletions

File tree

src/generated/resources/assets/mia/lang/en_us.json

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
{
2-
"attribute.name.generic.critical_hit": "Critical Hit",
3-
"attribute.name.generic.critical_hit_damage": "Critical Hit Damage",
2+
"attribute.name.generic.critical_hit": "Critical Hit Chance",
3+
"attribute.name.generic.critical_hit_damage": "Critical Hit Damage",
4+
"biome.mia.great_fault/great_fault": "Great Fault",
5+
"biome.mia.great_fault/the_great_fault": "The Great Fault",
46
"biome.mia.the_abyss/abyss_dripstone_caves": "Abyss Dripstone Caves",
57
"biome.mia.the_abyss/abyss_lush_caves": "Abyss Lush Caves",
68
"biome.mia.the_abyss/abyss_plains": "Abyss Plains",
9+
"biome.mia.the_abyss/dense_skyfog_forest": "Dense Skyfog Forest",
10+
"biome.mia.the_abyss/fossilized_forest": "Fossilized Forest",
11+
"biome.mia.the_abyss/inverted_forest": "Inverted Forest",
712
"biome.mia.the_abyss/prasiolite_caves": "Prasiolite Caves",
13+
"biome.mia.the_abyss/rich_fossilized_forest": "Rich Fossilized Forest",
814
"biome.mia.the_abyss/skyfog_forest": "Skyfog Forest",
915
"biome.mia.the_abyss/temptation_forest": "Temptation Forest",
1016
"biome.mia.the_abyss/the_abyss": "The Abyss",
17+
"biome.mia.the_abyss/under_fossilized_forest": "Under Fossilized Forest",
1118
"block.mia.abyss_andesite": "Abyss Andesite",
1219
"block.mia.abyss_andesite_bricks": "Abyss Andesite Bricks",
1320
"block.mia.abyss_andesite_bricks_slab": "Abyss Andesite Bricks Slab",
@@ -169,7 +176,7 @@
169176
"block.mia.verdant_trapdoor": "Verdant Trapdoor",
170177
"container.mia.artifact.smithing.title": "Artifact Smithing Table",
171178
"curios.identifier.whistle": "Whistle",
172-
"curios.modifiers.whistle": "Red Whistle Attributes",
179+
"curios.modifiers.whistle": "Whistle Attributes",
173180
"emi.category.mia.lamp_tube": "Laser Catalysis",
174181
"gui.mia.disconnect": "Quit?",
175182
"item.mia.artifact_haste": "Artifact Haste",
@@ -210,7 +217,7 @@
210217
"key.mia.skill_dial": "Skill Dial",
211218
"mia.configuration.abyss_radius": "Abyss Radius Value",
212219
"mia.configuration.abyss_radius.tooltip": "Setting The Abyss Radius",
213-
"mia.configuration.auto_hook": "auto hook",
220+
"mia.configuration.auto_hook": "Auto Hook",
214221
"mia.configuration.auto_hook.tooltip": "Whether to enable auto hook",
215222
"mia.configuration.cave_explorer_beacon": "Cave Explorer Beacon",
216223
"mia.configuration.cave_explorer_beacon.tooltip": "Cave Explorer Beacon Configuration",
@@ -265,8 +272,8 @@
265272
"skill.mia.combo_skills": "Combo Skills",
266273
"skill.mia.cooldown": "Cooldown...",
267274
"skill.mia.cooldown_time": "Cooldown T-",
268-
"skill.mia.minute": ":",
269-
"skill.mia.second": " ",
275+
"skill.mia.minute": "m",
276+
"skill.mia.second": "s",
270277
"skill.mia.unskill": "Unskill",
271278
"stat.mia.interact_with_artifact_smithing_table": "Interactions with Artifact Smithing Table",
272279
"subtitle.mia.abyss_portal_ambient": "Abyss Portal: Ambient",
@@ -287,8 +294,8 @@
287294
"tooltip.mia.artifact_bundle.capacity": "Artifact Capacity: %s",
288295
"tooltip.mia.attribute_modifier": "%s %s",
289296
"tooltip.mia.description.abyss_compass": "It will point the way toward the abyss.",
297+
"tooltip.mia.description.red_whistle": "Red Whistles are novice cave raiders allowed only in the Abyss’s first layer.",
290298
"tooltip.mia.hold_shift": "Hold [%s] to show details",
291-
"tooltip.mia.item.red_whistle": "Red Whistles are novice cave raiders allowed only in the Abyss’s first layer.",
292299
"tooltip.mia.modifiers.artifact_material": "When Applying Artifact: ",
293300
"tooltip.mia.skill.cooldown_value": "Cooldown: %s",
294301
"tooltip.mia.whistle.capacity": "Capacity: %s",
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"values": [
3+
"minecraft:lapis_lazuli",
4+
"mia:prasiolite_shard",
5+
"minecraft:copper_ingot",
6+
"minecraft:emerald",
37
"minecraft:iron_ingot",
48
"minecraft:diamond",
5-
"mia:prasiolite_shard",
69
"minecraft:gold_ingot",
7-
"minecraft:lapis_lazuli",
8-
"minecraft:netherite_ingot",
9-
"minecraft:emerald",
10-
"minecraft:copper_ingot"
10+
"minecraft:netherite_ingot"
1111
]
1212
}

src/main/java/com/altnoir/mia/datagen/MiaBiomeTagsProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import net.minecraft.tags.BiomeTags;
1010
import net.minecraft.world.level.biome.Biomes;
1111
import net.neoforged.neoforge.common.data.ExistingFileHelper;
12+
import org.jetbrains.annotations.NotNull;
1213
import org.jetbrains.annotations.Nullable;
1314

1415
import java.util.concurrent.CompletableFuture;
@@ -18,8 +19,9 @@ public MiaBiomeTagsProvider(PackOutput output, CompletableFuture<HolderLookup.Pr
1819
super(output, provider, MIA.MOD_ID, existingFileHelper);
1920
}
2021

22+
@SuppressWarnings("unchecked")
2123
@Override
22-
protected void addTags(HolderLookup.Provider provider) {
24+
protected void addTags(@NotNull HolderLookup.Provider provider) {
2325
tag(MiaTags.Biomes.HAS_ISLAND)
2426
.add(Biomes.MUSHROOM_FIELDS)
2527
.addTags(BiomeTags.IS_OVERWORLD);

src/main/java/com/altnoir/mia/datagen/MiaLangProvider.java

Lines changed: 39 additions & 163 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
package com.altnoir.mia.datagen;
22

33
import com.altnoir.mia.MIA;
4-
import com.altnoir.mia.client.gui.screens.ArtifactSmithingTableScreen;
5-
import com.altnoir.mia.common.block.ArtifactSmithingTableBlock;
6-
import com.altnoir.mia.core.event.client.ClientCurseEvent;
7-
import com.altnoir.mia.core.event.client.ClientTooltipEvent;
8-
import com.altnoir.mia.core.event.client.KeyArrowEvent;
94
import com.altnoir.mia.init.*;
10-
import com.altnoir.mia.common.item.abs.AbsArtifactBundle;
11-
import com.altnoir.mia.common.item.abs.IArtifactItem;
12-
import com.altnoir.mia.common.item.abs.IArtifactSkill;
13-
import com.altnoir.mia.common.item.abs.IEArtifact;
5+
import com.altnoir.mia.util.FilesHelper;
146
import com.altnoir.mia.worldgen.biome.MiaBiomes;
157
import net.minecraft.core.registries.BuiltInRegistries;
168
import net.minecraft.data.PackOutput;
@@ -31,83 +23,27 @@ public MiaLangProvider(PackOutput output) {
3123

3224
@Override
3325
protected void addTranslations() {
34-
add("itemgroup.mia", "Memento In Abyss");
35-
add("itemgroup.mia_artifact", "Memento In Abyss: Artifact");
36-
37-
//Tooltip start
38-
add(ClientTooltipEvent.TOOLTIP_HOLD_SHIFT, "Hold [%s] to show details");
39-
add(ClientTooltipEvent.TOOLTIP_ATTRIBUTE_MODIFIER, "%s %s");
40-
add(ClientTooltipEvent.TOOLTIP_MODIFIERS_ARTIFACT_MATERIAL, "When Applying Artifact: ");
41-
42-
add("tooltip.mia.whistle.level", "Whistle Level: %s");
43-
add("tooltip.mia.whistle.capacity", "Capacity: %s");
44-
add("tooltip.mia.item.red_whistle", "Red Whistles are novice cave raiders allowed only in the Abyss’s first layer.");
45-
46-
add(IArtifactSkill.TOOLTIP_SKILL_COOLDOWN_VALUE, "Cooldown: %s");
47-
48-
add(IArtifactItem.TOOLTIP_ARTIFACT_WEIGHT, "Weight: %s");
49-
add(IArtifactItem.TOOLTIP_ARTIFACT_GRADE_S, "S");
50-
add(IArtifactItem.TOOLTIP_ARTIFACT_GRADE_A, "A");
51-
add(IArtifactItem.TOOLTIP_ARTIFACT_GRADE_B, "B");
52-
add(IArtifactItem.TOOLTIP_ARTIFACT_GRADE_C, "C");
53-
add(IArtifactItem.TOOLTIP_ARTIFACT_GRADE_D, "D");
54-
add(IArtifactItem.TOOLTIP_ARTIFACT_GRADE_UNKNOWN, "Unknown");
55-
56-
add(IEArtifact.TOOLTIP_ARTIFACT_LEVEL, "Echo: %s/%s");
57-
add(IEArtifact.TOOLTIP_ARTIFACT_MAX, "Echo: MAX");
58-
add(AbsArtifactBundle.TOOLTIP_ARTIFACT_BUNDLE_CAPACITY, "Artifact Capacity: %s");
59-
60-
add("tooltip.mia.description.abyss_compass", "It will point the way toward the abyss.");
61-
//Tooltip end
62-
63-
// Attributes
64-
add("attribute.name.generic.critical_hit", "Critical Hit");
65-
add("attribute.name.generic.critical_hit_damage", "Critical Hit Damage");
66-
67-
// Container
68-
add(ArtifactSmithingTableBlock.TITLE, "Artifact Smithing Table");
69-
70-
// Skill start
71-
add(KeyArrowEvent.SKILL_UNSKILL, "Unskill");
72-
add(KeyArrowEvent.SKILL_COMBO_SKILLS, "Combo Skills");
73-
add(KeyArrowEvent.SKILL_COOLDOWN, "Cooldown...");
74-
add(KeyArrowEvent.SKILL_COOLDOWN_TIME, "Cooldown T-");
75-
add(KeyArrowEvent.SKILL_MINUTE, ":");
76-
add(KeyArrowEvent.SKILL_SECOND, " ");
77-
// Skill end
78-
79-
// kEY start
80-
add(MiaKeyBinding.KEY_CATEGORIES_MIA, "Memento In Abyss");
81-
add(MiaKeyBinding.KEY_SKILL_DIAL, "Skill Dial");
82-
// KEY end
83-
84-
//GUI start
85-
add(ClientCurseEvent.GUI_DISCONNECT, "Quit?");
86-
//GUI end
87-
88-
//Biome start
89-
addBiome(MiaBiomes.THE_ABYSS, "The Abyss");
90-
addBiome(MiaBiomes.ABYSS_PLAINS, "Abyss Plains");
91-
addBiome(MiaBiomes.SKYFOG_FOREST, "Skyfog Forest");
92-
addBiome(MiaBiomes.PRASIOLITE_CAVES, "Prasiolite Caves");
93-
addBiome(MiaBiomes.ABYSS_LUSH_CAVES, "Abyss Lush Caves");
94-
addBiome(MiaBiomes.ABYSS_DRIPSTONE_CAVES, "Abyss Dripstone Caves");
95-
96-
addBiome(MiaBiomes.TEMPTATION_FOREST, "Temptation Forest");
97-
//Biome end
26+
addDefault("interface");
27+
addDefault("tooltip");
28+
addDefault("ponder");
29+
30+
MiaBiomes.BIOMES.forEach(biome -> {
31+
add("biome.mia." + biome.location().getPath(), formatName(biome));
32+
});
33+
34+
MiaPaintingVariants.PAINTING_VARIANTS.forEach(paintingVariant -> {
35+
add("painting.mia." + paintingVariant.location().getPath() + ".title", formatName(paintingVariant.location().getPath()));
36+
add("painting.mia." + paintingVariant.location().getPath() + ".author", "Memento In Abyss");
37+
});
9838

9939
MiaItems.ITEMS.getEntries().stream()
10040
.map(DeferredHolder::get)
10141
.filter(item -> !(item instanceof BlockItem))
102-
.forEach(item -> {
103-
add(item, formatName(BuiltInRegistries.ITEM.getKey(item).getPath()));
104-
});
42+
.forEach(item -> add(item, formatName(BuiltInRegistries.ITEM.getKey(item).getPath())));
10543

10644
MiaBlocks.BLOCKS.getEntries().stream()
10745
.map(DeferredHolder::get)
108-
.forEach(block -> {
109-
add(block, formatName(BuiltInRegistries.BLOCK.getKey(block).getPath()));
110-
});
46+
.forEach(block -> add(block, formatName(BuiltInRegistries.BLOCK.getKey(block).getPath())));
11147

11248
MiaPotions.POTIONS.getEntries().forEach(holder -> {
11349
String name = holder.getId().getPath();
@@ -118,97 +54,13 @@ protected void addTranslations() {
11854
String name = holder.getId().getPath();
11955
add("stat.mia.interact_with_" + name, "Interactions with " + formatName(name));
12056
});
121-
// Painting Variant
122-
addPainting(MiaPaintingVariants.ABYSS_MAP);
123-
addPainting(MiaPaintingVariants.THE_ABYSS);
124-
addPainting(MiaPaintingVariants.THE_ABYSS_2);
125-
addPainting(MiaPaintingVariants.FOSSIL_TREE);
126-
addPainting(MiaPaintingVariants.FORTITUDE_FLOWER);
127-
128-
// Sounds start
129-
add(MiaSoundsProvider.ABYSS_PORTAL_AMBIENT, "Abyss Portal: Ambient");
130-
add(MiaSoundsProvider.ABYSS_PORTAL_TRAVEL, "Abyss Portal: Travel");
131-
// Sounds end
132-
133-
//Config start
134-
add("mia.configuration.title", "Memento In Abyss Configuration");
135-
136-
// 通用配置
137-
add("mia.configuration.abyss_radius", "Abyss Radius Value");
138-
add("mia.configuration.abyss_radius.tooltip", "Setting The Abyss Radius");
139-
140-
// 服务端配置
141-
add("mia.configuration.curse", "Enable Curse");
142-
add("mia.configuration.curse.tooltip", "Whether to enable the Curse");
143-
add("mia.configuration.curse_god", "Curse the Creative and Spectator");
144-
add("mia.configuration.curse_god.tooltip", "Whether to Curse the Creative and Spectator");
145-
146-
add("mia.configuration.cave_explorer_beacon", "Cave Explorer Beacon");
147-
add("mia.configuration.cave_explorer_beacon.tooltip", "Cave Explorer Beacon Configuration");
148-
add("mia.configuration.cave_explorer_beacon_horizontal", "Horizontal Range");
149-
add("mia.configuration.cave_explorer_beacon_horizontal.tooltip", "Setting The Cave Explorer Beacon Horizontal Range");
150-
add("mia.configuration.cave_explorer_beacon_vertical", "Vertical Range");
151-
add("mia.configuration.cave_explorer_beacon_vertical.tooltip", "Setting The Cave Explorer Beacon Vertical Range");
152-
add("mia.configuration.cave_explorer_beacon_max_vertical", "Max Vertical Range");
153-
add("mia.configuration.cave_explorer_beacon_max_vertical.tooltip", "Setting The Cave Explorer Beacon Max Vertical");
154-
155-
// 客户端配置
156-
add("mia.configuration.curse_icon_position", "Curse Icon Position");
157-
add("mia.configuration.curse_icon_position.tooltip", "Switch Curse Icon Position");
158-
add("mia.configuration.curse_icon_position.middle", "Middle");
159-
add("mia.configuration.curse_icon_position.right", "Right");
160-
add("mia.configuration.curse_icon_position.hidden", "Hidden");
161-
add("mia.configuration.disconnect_button_state", "Disconnect Button State");
162-
add("mia.configuration.disconnect_button_state.tooltip", "Adjust the Disconnect Button");
163-
add("mia.configuration.disconnect_button_state.default", "Default");
164-
add("mia.configuration.disconnect_button_state.disabled", "Disabled");
165-
add("mia.configuration.disconnect_button_state.hidden", "Hidden");
166-
167-
add("mia.configuration.hook", "Hook");
168-
add("mia.configuration.hook.tooltip", "Hook Configuration");
169-
170-
add("mia.configuration.hook_max_distance", "Max Hook Distance");
171-
add("mia.configuration.hook_max_distance.tooltip", "Maximum hook distance in blocks");
172-
add("mia.configuration.hook_stop_distance", "Hook Pull Stop Distance");
173-
add("mia.configuration.hook_stop_distance.tooltip", "Distance at which the hook stops pulling the player");
174-
add("mia.configuration.hook_shoot_velocity", "Hook Shoot Velocity");
175-
add("mia.configuration.hook_shoot_velocity.tooltip", "Hook shoot velocity");
176-
add("mia.configuration.hook_pull_velocity", "Hook Pull Velocity");
177-
add("mia.configuration.hook_pull_velocity.tooltip", "Base pull velocity");
178-
add("mia.configuration.hook_retract_velocity", "Hook Retract Velocity");
179-
add("mia.configuration.hook_retract_velocity.tooltip", "Hook retract velocity");
180-
add("mia.configuration.hook_retract_distance", "Hook Retract Distance");
181-
add("mia.configuration.hook_retract_distance.tooltip", "Distance at which the hook automatically retracts");
182-
add("mia.configuration.hook_jump_boost", "Jump Boost Multiplier");
183-
add("mia.configuration.hook_jump_boost.tooltip", "Jump boost multiplier when using hook");
184-
185-
add("mia.configuration.auto_hook", "auto hook");
186-
add("mia.configuration.auto_hook.tooltip", "Whether to enable auto hook");
187-
//Config end
18857

18958
// Tags start
19059
add("tag.item.curios.whistle", "Whistle");
19160
add("tag.item.mia.fossilized_logs", "Fossilized Logs");
19261
add("tag.item.mia.stripped_fossilized_logs", "Stripped Fossilized Logs");
19362
add("tag.item.mia.skyfog_logs", "Skyfog Logs");
19463
// Tags end
195-
196-
add("pack.mia.music_pack.name", "Memento In Abyss: Music Pack");
197-
198-
//Compat start
199-
add("curios.identifier.whistle", "Whistle");
200-
add("curios.modifiers.whistle", "Red Whistle Attributes");
201-
add("emi.category.mia.lamp_tube", "Laser Catalysis");
202-
//Compat end
203-
}
204-
205-
private void addPainting(ResourceKey<PaintingVariant> key) {
206-
add("painting.mia." + key.location().getPath() + ".title", formatName(key.location().getPath()));
207-
add("painting.mia." + key.location().getPath() + ".author", "Memento In Abyss");
208-
}
209-
210-
private void addBiome(ResourceKey<Biome> biome, String name) {
211-
add("biome.mia." + biome.location().getPath(), name);
21264
}
21365

21466
private void addPotions(String key) {
@@ -221,6 +73,30 @@ private void addPotions(String key) {
22173
add(key3, "Lingering Potion of " + formatName(key));
22274
}
22375

76+
private void addDefault(String fileName) {
77+
var path = "assets/mia/lang/default/" + fileName + ".json";
78+
var jsonElement = FilesHelper.loadJsonResource(path);
79+
if (jsonElement == null) {
80+
throw new IllegalStateException(String.format("Could not find default lang file: %s", path));
81+
}
82+
var jsonObject = jsonElement.getAsJsonObject();
83+
for (var entry : jsonObject.entrySet()) {
84+
var key = entry.getKey();
85+
var value = entry.getValue().getAsString();
86+
add(key, value);
87+
}
88+
}
89+
90+
private String formatName(ResourceKey<Biome> key) {
91+
var path = key.location().getPath();
92+
93+
int index = path.lastIndexOf('/');
94+
if (index != -1) {
95+
path = path.substring(index + 1);
96+
}
97+
return formatName(path);
98+
}
99+
224100
private String formatName(String name) {
225101
return Arrays.stream(name.split("_"))
226102
.filter(word -> !word.isEmpty())

src/main/java/com/altnoir/mia/init/MiaPaintingVariants.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@
66
import net.minecraft.resources.ResourceKey;
77
import net.minecraft.world.entity.decoration.PaintingVariant;
88

9+
import java.util.ArrayList;
10+
import java.util.List;
11+
912
public class MiaPaintingVariants {
13+
public static final List<ResourceKey<PaintingVariant>> PAINTING_VARIANTS = new ArrayList<>();
14+
1015
public static final ResourceKey<PaintingVariant> ABYSS_MAP = create("abyss_map");
1116
public static final ResourceKey<PaintingVariant> THE_ABYSS = create("the_abyss");
1217
public static final ResourceKey<PaintingVariant> THE_ABYSS_2 = create("the_abyss2");
@@ -22,6 +27,7 @@ public static void bootstrap(BootstrapContext<PaintingVariant> context) {
2227
}
2328

2429
private static void register(BootstrapContext<PaintingVariant> context, ResourceKey<PaintingVariant> key, int width, int height) {
30+
PAINTING_VARIANTS.add(key);
2531
context.register(key, new PaintingVariant(width, height, key.location()));
2632
}
2733

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.altnoir.mia.util;
2+
3+
import com.google.gson.JsonElement;
4+
import com.google.gson.internal.Streams;
5+
import com.google.gson.stream.JsonReader;
6+
7+
import java.io.BufferedReader;
8+
import java.io.IOException;
9+
import java.io.InputStream;
10+
import java.io.InputStreamReader;
11+
12+
public class FilesHelper {
13+
private static JsonElement loadJson(InputStream inputStream) {
14+
try {
15+
JsonReader reader = new JsonReader(new BufferedReader(new InputStreamReader(inputStream)));
16+
reader.setLenient(true);
17+
JsonElement element = Streams.parse(reader);
18+
reader.close();
19+
inputStream.close();
20+
return element;
21+
} catch (IOException e) {
22+
e.printStackTrace();
23+
}
24+
return null;
25+
}
26+
27+
public static JsonElement loadJsonResource(String filepath) {
28+
return loadJson(ClassLoader.getSystemResourceAsStream(filepath));
29+
}
30+
}

0 commit comments

Comments
 (0)