TranslationKey.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package me.lortseam.completeconfig.text;
  2. import me.lortseam.completeconfig.data.Config;
  3. import net.fabricmc.api.EnvType;
  4. import net.fabricmc.api.Environment;
  5. import net.minecraft.client.resource.language.I18n;
  6. import net.minecraft.text.Text;
  7. import net.minecraft.text.TranslatableText;
  8. import org.apache.commons.lang3.ArrayUtils;
  9. import java.util.ArrayList;
  10. import java.util.Arrays;
  11. import java.util.List;
  12. import java.util.Optional;
  13. import java.util.regex.Pattern;
  14. public final class TranslationKey {
  15. private static final String DELIMITER = ".";
  16. public static TranslationKey from(Config config) {
  17. return new TranslationKey("config" + DELIMITER + config.getMod().getId());
  18. }
  19. private final String modKey;
  20. private final String[] keyParts;
  21. @Environment(EnvType.CLIENT)
  22. private TranslationKey(String modKey, String... keyParts) {
  23. this.modKey = modKey;
  24. this.keyParts = keyParts;
  25. }
  26. private String getKey() {
  27. StringBuilder builder = new StringBuilder(modKey);
  28. for (String keyPart : keyParts) {
  29. builder.append(DELIMITER);
  30. builder.append(keyPart);
  31. }
  32. return builder.toString();
  33. }
  34. public TranslationKey root() {
  35. return new TranslationKey(modKey);
  36. }
  37. public boolean exists() {
  38. return I18n.hasTranslation(getKey());
  39. }
  40. public Text toText(Object... args) {
  41. return new TranslatableText(getKey(), args);
  42. }
  43. public TranslationKey append(String... subKeys) {
  44. return new TranslationKey(modKey, ArrayUtils.addAll(keyParts, Arrays.stream(subKeys).map(subKey -> {
  45. return subKey.split(Pattern.quote(DELIMITER));
  46. }).flatMap(Arrays::stream).toArray(String[]::new)));
  47. }
  48. public Optional<TranslationKey[]> appendTooltip() {
  49. TranslationKey baseTranslation = append("tooltip");
  50. if (baseTranslation.exists()) {
  51. return Optional.of(new TranslationKey[] {baseTranslation});
  52. } else {
  53. List<TranslationKey> multiLineTranslation = new ArrayList<>();
  54. for(int i = 0;; i++) {
  55. TranslationKey key = baseTranslation.append(Integer.toString(i));
  56. if(key.exists()) {
  57. multiLineTranslation.add(key);
  58. } else {
  59. if (!multiLineTranslation.isEmpty()) {
  60. return Optional.of(multiLineTranslation.toArray(new TranslationKey[0]));
  61. }
  62. break;
  63. }
  64. }
  65. }
  66. return Optional.empty();
  67. }
  68. }