ClothRegistry.java 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package me.shedaniel.rei.utils;
  2. import javafx.util.Pair;
  3. import me.shedaniel.cloth.api.ClientUtils;
  4. import me.shedaniel.cloth.api.ConfigScreenBuilder;
  5. import me.shedaniel.cloth.gui.ClothConfigScreen;
  6. import me.shedaniel.cloth.gui.entries.BooleanListEntry;
  7. import me.shedaniel.cloth.gui.entries.IntegerListEntry;
  8. import me.shedaniel.cloth.gui.entries.StringListEntry;
  9. import me.shedaniel.cloth.hooks.ClothClientHooks;
  10. import me.shedaniel.rei.RoughlyEnoughItemsCore;
  11. import me.shedaniel.rei.client.RecipeHelperImpl;
  12. import me.shedaniel.rei.client.ScreenHelper;
  13. import me.shedaniel.rei.gui.ContainerScreenOverlay;
  14. import me.shedaniel.rei.gui.config.ItemListOrderingEntry;
  15. import me.shedaniel.rei.listeners.CreativePlayerInventoryScreenHooks;
  16. import net.minecraft.client.MinecraftClient;
  17. import net.minecraft.client.gui.ContainerScreen;
  18. import net.minecraft.client.gui.Screen;
  19. import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
  20. import net.minecraft.client.gui.widget.RecipeBookButtonWidget;
  21. import net.minecraft.client.resource.language.I18n;
  22. import net.minecraft.item.ItemGroup;
  23. import net.minecraft.util.ActionResult;
  24. import java.io.IOException;
  25. public class ClothRegistry {
  26. public static void register() {
  27. ClothClientHooks.SYNC_RECIPES.register((minecraftClient, recipeManager, synchronizeRecipesS2CPacket) -> {
  28. ((RecipeHelperImpl) RoughlyEnoughItemsCore.getRecipeHelper()).recipesLoaded(recipeManager);
  29. });
  30. ClothClientHooks.SCREEN_ADD_BUTTON.register((minecraftClient, screen, abstractButtonWidget) -> {
  31. if (RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook && screen instanceof ContainerScreen && abstractButtonWidget instanceof RecipeBookButtonWidget)
  32. return ActionResult.FAIL;
  33. return ActionResult.PASS;
  34. });
  35. ClothClientHooks.SCREEN_INIT_POST.register((minecraftClient, screen, screenHooks) -> {
  36. if (screen instanceof ContainerScreen) {
  37. if (screen instanceof CreativePlayerInventoryScreen) {
  38. CreativePlayerInventoryScreenHooks creativePlayerInventoryScreenHooks = (CreativePlayerInventoryScreenHooks) screen;
  39. if (creativePlayerInventoryScreenHooks.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
  40. return;
  41. }
  42. ScreenHelper.setLastContainerScreen((ContainerScreen) screen);
  43. screenHooks.cloth_getInputListeners().add(ScreenHelper.getLastOverlay(true, false));
  44. }
  45. });
  46. ClothClientHooks.SCREEN_RENDER_POST.register((minecraftClient, screen, i, i1, v) -> {
  47. if (screen instanceof ContainerScreen) {
  48. if (screen instanceof CreativePlayerInventoryScreen) {
  49. CreativePlayerInventoryScreenHooks creativePlayerInventoryScreenHooks = (CreativePlayerInventoryScreenHooks) screen;
  50. if (creativePlayerInventoryScreenHooks.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
  51. return;
  52. }
  53. ScreenHelper.getLastOverlay().render(i, i1, v);
  54. }
  55. });
  56. ClothClientHooks.SCREEN_MOUSE_SCROLLED.register((minecraftClient, screen, v, v1, v2) -> {
  57. if (screen instanceof ContainerScreen)
  58. if (screen instanceof CreativePlayerInventoryScreen) {
  59. if (((CreativePlayerInventoryScreenHooks) screen).rei_doRenderScrollBar())
  60. return ActionResult.PASS;
  61. if (ScreenHelper.isOverlayVisible() && ScreenHelper.getLastOverlay().getRectangle().contains(ClientUtils.getMouseLocation()) && ScreenHelper.getLastOverlay().mouseScrolled(v, v1, v2))
  62. return ActionResult.SUCCESS;
  63. } else {
  64. ContainerScreenOverlay overlay = ScreenHelper.getLastOverlay();
  65. if (ScreenHelper.isOverlayVisible() && ContainerScreenOverlay.getItemListOverlay().getListArea().contains(ClientUtils.getMouseLocation()))
  66. if (overlay.mouseScrolled(v, v1, v2))
  67. return ActionResult.SUCCESS;
  68. }
  69. return ActionResult.PASS;
  70. });
  71. ClothClientHooks.SCREEN_CHAR_TYPED.register((minecraftClient, screen, character, keyCode) -> {
  72. if (screen instanceof ContainerScreen)
  73. if (screen instanceof CreativePlayerInventoryScreen) {
  74. if (((CreativePlayerInventoryScreenHooks) screen).rei_getField2888() || ((CreativePlayerInventoryScreenHooks) screen).rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
  75. return ActionResult.PASS;
  76. if (ScreenHelper.getLastOverlay().charTyped(character, keyCode))
  77. return ActionResult.SUCCESS;
  78. } else if (ScreenHelper.getLastOverlay().charTyped(character, keyCode))
  79. return ActionResult.SUCCESS;
  80. return ActionResult.PASS;
  81. });
  82. }
  83. public static void openConfigScreen(Screen parent) {
  84. ClothConfigScreen.Builder builder = new ClothConfigScreen.Builder(parent, I18n.translate("text.rei.config.title"), null);
  85. builder.addCategory("text.rei.config.general").addOption(new BooleanListEntry("text.rei.config.cheating", RoughlyEnoughItemsCore.getConfigManager().getConfig().cheating, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().cheating = bool));
  86. ConfigScreenBuilder.CategoryBuilder appearance = builder.addCategory("text.rei.config.appearance");
  87. appearance.addOption(new BooleanListEntry("text.rei.config.side_search_box", RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().sideSearchField = bool));
  88. appearance.addOption(new ItemListOrderingEntry("text.rei.config.list_ordering", new Pair<>(RoughlyEnoughItemsCore.getConfigManager().getConfig().itemListOrdering, RoughlyEnoughItemsCore.getConfigManager().getConfig().isAscending)));
  89. appearance.addOption(new BooleanListEntry("text.rei.config.mirror_rei", RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().mirrorItemPanel = bool));
  90. appearance.addOption(new IntegerListEntry("text.rei.config.max_recipes_per_page", RoughlyEnoughItemsCore.getConfigManager().getConfig().maxRecipePerPage, "text.cloth.reset_value", () -> 3, i -> RoughlyEnoughItemsCore.getConfigManager().getConfig().maxRecipePerPage = i).setMinimum(2).setMaximum(99));
  91. ConfigScreenBuilder.CategoryBuilder modules = builder.addCategory("text.rei.config.modules");
  92. modules.addOption(new BooleanListEntry("text.rei.config.enable_craftable_only", RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton, "text.cloth.reset_value", () -> true, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().enableCraftableOnlyButton = bool));
  93. modules.addOption(new BooleanListEntry("text.rei.config.enable_util_buttons", RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().showUtilsButtons = bool));
  94. modules.addOption(new BooleanListEntry("text.rei.config.disable_recipe_book", RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().disableRecipeBook = bool));
  95. ConfigScreenBuilder.CategoryBuilder advanced = builder.addCategory("text.rei.config.advanced");
  96. advanced.addOption(new StringListEntry("text.rei.give_command", RoughlyEnoughItemsCore.getConfigManager().getConfig().giveCommand, "text.cloth.reset_value", () -> "/give {player_name} {item_identifier}{nbt} {count}", s -> RoughlyEnoughItemsCore.getConfigManager().getConfig().giveCommand = s));
  97. advanced.addOption(new StringListEntry("text.rei.gamemode_command", RoughlyEnoughItemsCore.getConfigManager().getConfig().gamemodeCommand, "text.cloth.reset_value", () -> "/gamemode {gamemode}", s -> RoughlyEnoughItemsCore.getConfigManager().getConfig().gamemodeCommand = s));
  98. advanced.addOption(new StringListEntry("text.rei.weather_command", RoughlyEnoughItemsCore.getConfigManager().getConfig().weatherCommand, "text.cloth.reset_value", () -> "/weather {weather}", s -> RoughlyEnoughItemsCore.getConfigManager().getConfig().weatherCommand = s));
  99. advanced.addOption(new BooleanListEntry("text.rei.config.prefer_visible_recipes", RoughlyEnoughItemsCore.getConfigManager().getConfig().preferVisibleRecipes, "text.cloth.reset_value", () -> false, bool -> RoughlyEnoughItemsCore.getConfigManager().getConfig().preferVisibleRecipes = bool));
  100. builder.setOnSave(savedConfig -> {
  101. try {
  102. RoughlyEnoughItemsCore.getConfigManager().saveConfig();
  103. } catch (IOException e) {
  104. e.printStackTrace();
  105. }
  106. });
  107. MinecraftClient.getInstance().openScreen(builder.build());
  108. }
  109. }