ClothRegistry.java 10 KB

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