package joshie.harvest.core.helpers; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import joshie.harvest.api.npc.NPC; import joshie.harvest.npcs.entity.EntityNPC; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.translation.I18n; import org.apache.commons.lang3.tuple.Triple; import java.util.Random; import static joshie.harvest.core.lib.HFModInfo.MODID; public class TextHelper { private static final Cache<Triple<String, String, ResourceLocation>, Integer> TRANSLATION_CACHE = CacheBuilder.newBuilder().build(); private static final Random rand = new Random(); public static String getSpeech(EntityNPC npc, String text) { return getSpeech(npc.getNPC(), text); } public static String getSpeech(NPC npc, String text) { String key = npc.getLocalizationKey() + text; if (canTranslate(key)) return localize(key); else { String generic = npc.getGeneralLocalizationKey() + text; return canTranslate(generic) ? localize(generic) : format(MODID + ".npc.error", key, generic); } } public static String getLang() { return "en_US"; } public static String getRandomSpeech(NPC npc, final String text, final int maximumAlternatives, Object... data) { int maximum = 1; try { final Triple<String, String, ResourceLocation> key = Triple.of(getLang(), text, npc.getResource()); maximum = TRANSLATION_CACHE.get(key, () -> { int i; for (i = 1; i <= maximumAlternatives; i++) { if (!canTranslate(text + i)) break; } return i - 1; }); } catch (Exception e) {/**/} int random = 1 + (maximum >= 2? rand.nextInt(maximum): 0); return data.length > 0 ? format(text + random, data) : localize(text + random); } @SuppressWarnings("deprecation") public static String format(String key, Object... data) { return I18n.translateToLocalFormatted(key, data); } @SuppressWarnings("deprecation") public static String formatHF(String key, Object... data) { return I18n.translateToLocalFormatted(MODID + "." + key, data); } @SuppressWarnings("deprecation") public static String localize(String key) { return I18n.translateToLocal(key); } @SuppressWarnings("deprecation") public static String localizeFully(String key) { return I18n.translateToLocal(key.replace("_", ".")); } @SuppressWarnings("deprecation") public static String translate(String s) { return I18n.translateToLocal(MODID + "." + s); } @SuppressWarnings("deprecation") public static String translate(String mod, String s) { return I18n.translateToLocal(mod + "." + s); } @SuppressWarnings("deprecation") private static boolean canTranslate(String key) { return I18n.canTranslate(key); } }