Skip to content

Commit

Permalink
feat(command): LanguageInfoArgument
Browse files Browse the repository at this point in the history
  • Loading branch information
WakelessSloth56 committed Mar 29, 2022
1 parent f41bcc2 commit 196b3ac
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 7 deletions.
@@ -0,0 +1,50 @@
package org.auioc.mods.arnicalib.client.command.argument;

import java.util.SortedSet;
import java.util.concurrent.CompletableFuture;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.arguments.ArgumentType;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
import com.mojang.brigadier.suggestion.Suggestions;
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
import org.auioc.mods.arnicalib.ArnicaLib;
import org.auioc.mods.arnicalib.utils.game.TextUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.language.LanguageInfo;
import net.minecraft.commands.SharedSuggestionProvider;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

@OnlyIn(Dist.CLIENT)
public class LanguageInfoArgument implements ArgumentType<LanguageInfo> {

private static final DynamicCommandExceptionType UNKNOWN_CREATIVE_MODE_TAB = new DynamicCommandExceptionType(
(langCode) -> TextUtils.I18nText(ArnicaLib.i18n("argument.language_info.unknown"), langCode)
);

public static LanguageInfoArgument languageInfo() {
return new LanguageInfoArgument();
}

@Override
public LanguageInfo parse(StringReader reader) throws CommandSyntaxException {
String langCode = reader.readString();
return getLanguages()
.stream()
.filter((langInfo) -> langInfo.getCode().equals(langCode))
.findAny()
.orElseThrow(() -> UNKNOWN_CREATIVE_MODE_TAB.create(langCode));
}

@Override
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
return SharedSuggestionProvider.suggest(getLanguages().stream().map(LanguageInfo::getCode), builder);
}

private static SortedSet<LanguageInfo> getLanguages() {
return Minecraft.getInstance().getLanguageManager().getLanguages();
}

}
@@ -1,12 +1,9 @@
package org.auioc.mods.arnicalib.utils.game;

import java.util.List;
import com.mojang.brigadier.suggestion.SuggestionProvider;
import net.minecraft.client.Minecraft;
import net.minecraft.client.resources.language.ClientLanguage;
import net.minecraft.client.resources.language.LanguageInfo;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.SharedSuggestionProvider;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

Expand All @@ -15,10 +12,6 @@ public interface LanguageUtils {

LanguageInfo DEFAULT_LANGUAGE = new LanguageInfo("en_us", "US", "English", false);

SuggestionProvider<CommandSourceStack> ALL_LANGUAGES_SUGGESTION = (ctx, builder) -> {
return SharedSuggestionProvider.suggest(Minecraft.getInstance().getLanguageManager().getLanguages().stream().map(LanguageInfo::getCode), builder);
};

static ClientLanguage getLanguage(LanguageInfo langInfo) {
return ClientLanguage.loadFrom(
Minecraft.getInstance().getResourceManager(),
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/assets/arnicalib/lang/en_us.json
Expand Up @@ -11,6 +11,7 @@

"arnicalib.argument.damage_source.invalid": "Invalid damage source \"%s\"",
"arnicalib.argument.creative_mod_tab.unknown": "Unknown creative mod tab \"%s\"",
"arnicalib.argument.language_info.unknown": "Unknown language \"%s\"",

"arnicalib.command.version.success": "Version: %s (%s)",
"arnicalib.command.version.failure.zero": "§eCould not read the mod version. §7If this is a development environment you can ignore this message",
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/assets/arnicalib/lang/zh_cn.json
Expand Up @@ -11,6 +11,7 @@

"arnicalib.argument.damage_source.invalid": "无效的伤害类型\"%s\"",
"arnicalib.argument.creative_mod_tab.unknown": "未知的创造模式物品栏标签\"%s\"",
"arnicalib.argument.language_info.unknown": "未知的语言\"%s\"",

"arnicalib.command.version.success": "版本: %s (%s)",
"arnicalib.command.version.failure.zero": "§e无法读取模组版本。§7若处在开发环境中则您可以忽略此消息",
Expand Down

0 comments on commit 196b3ac

Please sign in to comment.