DefaultRecipeBookHandler.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Roughly Enough Items by Danielshe.
  3. * Licensed under the MIT License.
  4. */
  5. package me.shedaniel.rei.plugin.autocrafting;
  6. import me.shedaniel.rei.api.AutoTransferHandler;
  7. import me.shedaniel.rei.api.RecipeDisplay;
  8. import me.shedaniel.rei.api.TransferRecipeDisplay;
  9. import me.shedaniel.rei.impl.ScreenHelper;
  10. import me.shedaniel.rei.listeners.RecipeBookGuiHooks;
  11. import me.shedaniel.rei.plugin.cooking.DefaultCookingDisplay;
  12. import me.shedaniel.rei.plugin.crafting.DefaultCraftingDisplay;
  13. import net.minecraft.client.gui.screen.Screen;
  14. import net.minecraft.client.gui.screen.recipebook.RecipeBookProvider;
  15. import net.minecraft.client.resource.language.I18n;
  16. import net.minecraft.container.CraftingContainer;
  17. import net.minecraft.container.CraftingTableContainer;
  18. import net.minecraft.container.PlayerContainer;
  19. import net.minecraft.recipe.Recipe;
  20. public class DefaultRecipeBookHandler implements AutoTransferHandler {
  21. @SuppressWarnings("deprecation")
  22. @Override
  23. public Result handle(Context context) {
  24. if (context.getRecipe() instanceof TransferRecipeDisplay && DefaultCategoryHandler.canUseMovePackets())
  25. return Result.createNotApplicable();
  26. RecipeDisplay display = context.getRecipe();
  27. if (!(context.getContainer() instanceof CraftingContainer))
  28. return Result.createNotApplicable();
  29. CraftingContainer<?> container = (CraftingContainer<?>) context.getContainer();
  30. if (display instanceof DefaultCraftingDisplay) {
  31. DefaultCraftingDisplay craftingDisplay = (DefaultCraftingDisplay) display;
  32. if (craftingDisplay.getOptionalRecipe().isPresent()) {
  33. int h = -1, w = -1;
  34. if (container instanceof CraftingTableContainer) {
  35. h = 3;
  36. w = 3;
  37. } else if (container instanceof PlayerContainer) {
  38. h = 2;
  39. w = 2;
  40. }
  41. if (h == -1 || w == -1)
  42. return Result.createNotApplicable();
  43. Recipe<?> recipe = (craftingDisplay).getOptionalRecipe().get();
  44. if (craftingDisplay.getHeight() > h || craftingDisplay.getWidth() > w)
  45. return Result.createFailed(I18n.translate("error.rei.transfer.too_small", h, w));
  46. if (!context.getMinecraft().player.getRecipeBook().contains(recipe))
  47. return Result.createFailed(I18n.translate("error.rei.recipe.not.unlocked"));
  48. if (!context.isActuallyCrafting())
  49. return Result.createSuccessful();
  50. context.getMinecraft().openScreen(context.getContainerScreen());
  51. if (context.getContainerScreen() instanceof RecipeBookProvider)
  52. ((RecipeBookGuiHooks) ((RecipeBookProvider) context.getContainerScreen()).getRecipeBookGui()).rei_getGhostSlots().reset();
  53. context.getMinecraft().interactionManager.clickRecipe(container.syncId, recipe, Screen.hasShiftDown());
  54. ScreenHelper.getLastOverlay().init();
  55. }
  56. } else if (display instanceof DefaultCookingDisplay) {
  57. DefaultCookingDisplay defaultDisplay = (DefaultCookingDisplay) display;
  58. if (defaultDisplay.getOptionalRecipe().isPresent()) {
  59. Recipe<?> recipe = (defaultDisplay).getOptionalRecipe().get();
  60. if (!context.getMinecraft().player.getRecipeBook().contains(recipe))
  61. return Result.createFailed(I18n.translate("error.rei.recipe.not.unlocked"));
  62. if (!context.isActuallyCrafting())
  63. return Result.createSuccessful();
  64. context.getMinecraft().openScreen(context.getContainerScreen());
  65. if (context.getContainerScreen() instanceof RecipeBookProvider)
  66. ((RecipeBookGuiHooks) ((RecipeBookProvider) context.getContainerScreen()).getRecipeBookGui()).rei_getGhostSlots().reset();
  67. context.getMinecraft().interactionManager.clickRecipe(container.syncId, recipe, Screen.hasShiftDown());
  68. ScreenHelper.getLastOverlay().init();
  69. }
  70. }
  71. return Result.createNotApplicable();
  72. }
  73. @Override
  74. public double getPriority() {
  75. return -20;
  76. }
  77. }