ClothGuiBuilder.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package me.lortseam.completeconfig.gui.cloth;
  2. import me.lortseam.completeconfig.data.Collection;
  3. import me.lortseam.completeconfig.data.Config;
  4. import me.lortseam.completeconfig.data.Entry;
  5. import me.lortseam.completeconfig.data.text.TranslationIdentifier;
  6. import me.lortseam.completeconfig.gui.GuiBuilder;
  7. import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
  8. import me.shedaniel.clothconfig2.api.ConfigBuilder;
  9. import me.shedaniel.clothconfig2.api.ConfigCategory;
  10. import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
  11. import me.shedaniel.clothconfig2.impl.builders.SubCategoryBuilder;
  12. import net.fabricmc.api.EnvType;
  13. import net.fabricmc.api.Environment;
  14. import net.fabricmc.loader.api.FabricLoader;
  15. import net.minecraft.client.gui.screen.Screen;
  16. import net.minecraft.text.TranslatableText;
  17. import java.util.ArrayList;
  18. import java.util.List;
  19. import java.util.function.Supplier;
  20. @Environment(EnvType.CLIENT)
  21. public class ClothGuiBuilder implements GuiBuilder {
  22. private final Supplier<ConfigBuilder> supplier;
  23. public ClothGuiBuilder(Supplier<ConfigBuilder> supplier) {
  24. this.supplier = supplier;
  25. }
  26. public ClothGuiBuilder() {
  27. this(ConfigBuilder::create);
  28. }
  29. @Override
  30. public Screen buildScreen(Screen parentScreen, Config config, Runnable savingRunnable) {
  31. ConfigBuilder builder = supplier.get()
  32. .setParentScreen(parentScreen)
  33. .setSavingRunnable(savingRunnable);
  34. TranslationIdentifier customTitle = config.getTranslation().append("title");
  35. builder.setTitle(customTitle.exists() ? customTitle.translate() : new TranslatableText("completeconfig.gui.defaultTitle", FabricLoader.getInstance().getModContainer(config.getModID()).get().getMetadata().getName()));
  36. for(Collection collection : config.values()) {
  37. ConfigCategory category = builder.getOrCreateCategory(collection.getText());
  38. //TODO: Add tooltip (description)
  39. for (AbstractConfigListEntry<?> entry : buildCollection(collection)) {
  40. category.addEntry(entry);
  41. }
  42. }
  43. return builder.build();
  44. }
  45. private List<AbstractConfigListEntry> buildCollection(Collection collection) {
  46. List<AbstractConfigListEntry> collectionGui = new ArrayList<>();
  47. for (Entry entry : collection.getEntries().values()) {
  48. collectionGui.add((GuiRegistry.getInstance().getProvider(entry)).orElseThrow(() -> {
  49. return new UnsupportedOperationException("Could not find GUI provider for field " + entry.getField());
  50. }).build(entry));
  51. }
  52. for (Collection c : collection.getCollections().values()) {
  53. SubCategoryBuilder subBuilder = ConfigEntryBuilder.create().startSubCategory(c.getText());
  54. subBuilder.addAll(buildCollection(c));
  55. collectionGui.add(subBuilder.build());
  56. }
  57. return collectionGui;
  58. }
  59. }