ClothScreenRegistry.java 5.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. * Roughly Enough Items by Danielshe.
  3. * Licensed under the MIT License.
  4. */
  5. package me.shedaniel.rei.utils;
  6. import me.shedaniel.cloth.hooks.ScreenHooks;
  7. import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
  8. import me.shedaniel.fiber2cloth.api.Fiber2Cloth;
  9. import me.shedaniel.rei.api.ConfigManager;
  10. import me.shedaniel.rei.gui.config.ItemCheatingMode;
  11. import me.shedaniel.rei.gui.config.ItemListOrderingConfig;
  12. import me.shedaniel.rei.gui.config.RecipeScreenType;
  13. import me.shedaniel.rei.gui.config.SearchFieldLocation;
  14. import me.shedaniel.rei.gui.credits.CreditsScreen;
  15. import me.zeroeightsix.fiber.exception.FiberException;
  16. import me.zeroeightsix.fiber.tree.ConfigValue;
  17. import net.minecraft.client.MinecraftClient;
  18. import net.minecraft.client.gui.screen.Screen;
  19. import net.minecraft.client.gui.widget.AbstractPressableButtonWidget;
  20. import net.minecraft.client.resource.language.I18n;
  21. import java.io.IOException;
  22. import java.util.List;
  23. import static me.shedaniel.fiber2cloth.impl.Fiber2ClothImpl.error;
  24. import static me.shedaniel.fiber2cloth.impl.Fiber2ClothImpl.splitLine;
  25. public class ClothScreenRegistry {
  26. public static Screen getConfigScreen(Screen parent) {
  27. final ConfigManager configManager = ConfigManager.getInstance();
  28. ConfigEntryBuilder configEntryBuilder = ConfigEntryBuilder.create();
  29. return Fiber2Cloth.create(parent, "roughlyenoughitems", configManager.getConfig().getConfigNode(), "config.roughlyenoughitems.title").setSaveRunnable(() -> {
  30. try {
  31. configManager.saveConfig();
  32. } catch (IOException | FiberException e) {
  33. e.printStackTrace();
  34. }
  35. }).hideTreeEntry(
  36. configManager.getConfig().getOverlayVisibleNode()
  37. ).registerNodeEntryFunction(ItemListOrderingConfig.class, o -> {
  38. ConfigValue<ItemListOrderingConfig> configValue = (ConfigValue<ItemListOrderingConfig>) o;
  39. return configEntryBuilder.startEnumSelector("config.roughlyenoughitems." + configValue.getName(), ItemListOrderingConfig.class, configValue.getValue())
  40. .setDefaultValue(configValue.getDefaultValue())
  41. .setTooltip(splitLine(configValue.getComment()))
  42. .setSaveConsumer(var -> configValue.setValue((ItemListOrderingConfig) var))
  43. .setErrorSupplier(var -> error((List) configValue.getConstraints(), var, ItemListOrderingConfig.class))
  44. .build();
  45. }).registerNodeEntryFunction(RecipeScreenType.class, o -> {
  46. ConfigValue<RecipeScreenType> configValue = (ConfigValue<RecipeScreenType>) o;
  47. return configEntryBuilder.startEnumSelector("config.roughlyenoughitems." + configValue.getName(), RecipeScreenType.class, configValue.getValue())
  48. .setDefaultValue(configValue.getDefaultValue())
  49. .setTooltip(splitLine(configValue.getComment()))
  50. .setSaveConsumer(var -> configValue.setValue((RecipeScreenType) var))
  51. .setErrorSupplier(var -> error((List) configValue.getConstraints(), var, RecipeScreenType.class))
  52. .build();
  53. }).registerNodeEntryFunction(ItemCheatingMode.class, o -> {
  54. ConfigValue<ItemCheatingMode> configValue = (ConfigValue<ItemCheatingMode>) o;
  55. return configEntryBuilder.startEnumSelector("config.roughlyenoughitems." + configValue.getName(), ItemCheatingMode.class, configValue.getValue())
  56. .setDefaultValue(configValue.getDefaultValue())
  57. .setTooltip(splitLine(configValue.getComment()))
  58. .setSaveConsumer(var -> configValue.setValue((ItemCheatingMode) var))
  59. .setErrorSupplier(var -> error((List) configValue.getConstraints(), var, ItemCheatingMode.class))
  60. .build();
  61. }).registerNodeEntryFunction(SearchFieldLocation.class, o -> {
  62. ConfigValue<SearchFieldLocation> configValue = (ConfigValue<SearchFieldLocation>) o;
  63. return configEntryBuilder.startEnumSelector("config.roughlyenoughitems." + configValue.getName(), SearchFieldLocation.class, configValue.getValue())
  64. .setDefaultValue(configValue.getDefaultValue())
  65. .setTooltip(splitLine(configValue.getComment()))
  66. .setSaveConsumer(var -> configValue.setValue((SearchFieldLocation) var))
  67. .setErrorSupplier(var -> error((List) configValue.getConstraints(), var, SearchFieldLocation.class))
  68. .build();
  69. }).setAfterInitConsumer(screen -> {
  70. ((ScreenHooks) screen).cloth_addButton(new AbstractPressableButtonWidget(screen.width - 104, 4, 100, 20, I18n.translate("text.rei.credits")) {
  71. @Override
  72. public void onPress() {
  73. MinecraftClient.getInstance().openScreen(new CreditsScreen(screen));
  74. }
  75. });
  76. }).setDefaultCategoryNode(configManager.getConfig().getGeneral()).build().getScreen();
  77. }
  78. }