GuiBuilder.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package me.lortseam.completeconfig.gui;
  2. import lombok.Getter;
  3. import lombok.Setter;
  4. import me.lortseam.completeconfig.Config;
  5. import me.lortseam.completeconfig.ConfigManager;
  6. import me.lortseam.completeconfig.collection.Collection;
  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.minecraft.client.gui.screen.Screen;
  13. import net.minecraft.text.TranslatableText;
  14. import java.util.ArrayList;
  15. import java.util.List;
  16. import java.util.Optional;
  17. import java.util.function.Supplier;
  18. public class GuiBuilder {
  19. private final ConfigManager manager;
  20. private final Config config;
  21. @Setter
  22. private Supplier<ConfigBuilder> supplier = ConfigBuilder::create;
  23. @Getter
  24. private final GuiRegistry registry = new GuiRegistry();
  25. public GuiBuilder(ConfigManager manager, Config config) {
  26. this.manager = manager;
  27. this.config = config;
  28. }
  29. public Screen buildScreen(Screen parentScreen, Runnable savingRunnable) {
  30. ConfigBuilder builder = supplier.get();
  31. builder.setParentScreen(parentScreen)
  32. .setTitle(new TranslatableText(config.getModTranslationKey() + ".title"))
  33. .setSavingRunnable(savingRunnable);
  34. config.values().forEach(collection -> {
  35. ConfigCategory configCategory = builder.getOrCreateCategory(collection.getText());
  36. for (AbstractConfigListEntry<?> entry : buildCollection(collection)) {
  37. configCategory.addEntry(entry);
  38. }
  39. });
  40. return builder.build();
  41. }
  42. private List<AbstractConfigListEntry> buildCollection(Collection collection) {
  43. List<AbstractConfigListEntry> collectionGui = new ArrayList<>();
  44. collection.getEntries().values().forEach(entry -> collectionGui.add(((Optional<GuiProvider>) manager.getGuiRegistry().getProvider(entry)).orElseGet(() -> {
  45. throw new UnsupportedOperationException("Could not find gui provider for field " + entry.getField());
  46. }).build(entry.getText(), entry.getField(), entry.getValue(), entry.getDefaultValue(), entry.getTooltip(), entry.getExtras(), entry::setValue)));
  47. collection.getCollections().values().forEach(c -> {
  48. SubCategoryBuilder subBuilder = ConfigEntryBuilder.create().startSubCategory(c.getText());
  49. subBuilder.addAll(buildCollection(c));
  50. collectionGui.add(subBuilder.build());
  51. });
  52. return collectionGui;
  53. }
  54. }