DefaultPlugin.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. package me.shedaniel.rei.plugin;
  2. import com.google.common.collect.Lists;
  3. import me.shedaniel.rei.api.IRecipePlugin;
  4. import me.shedaniel.rei.api.SpeedCraftFunctional;
  5. import me.shedaniel.rei.client.RecipeHelper;
  6. import me.shedaniel.rei.listeners.IMixinRecipeBookGui;
  7. import net.minecraft.client.MinecraftClient;
  8. import net.minecraft.client.gui.Gui;
  9. import net.minecraft.client.gui.container.BlastFurnaceGui;
  10. import net.minecraft.client.gui.container.CraftingTableGui;
  11. import net.minecraft.client.gui.container.FurnaceGui;
  12. import net.minecraft.client.gui.container.SmokerGui;
  13. import net.minecraft.client.gui.ingame.PlayerInventoryGui;
  14. import net.minecraft.recipe.Recipe;
  15. import net.minecraft.recipe.StonecuttingRecipe;
  16. import net.minecraft.recipe.cooking.BlastingRecipe;
  17. import net.minecraft.recipe.cooking.CampfireCookingRecipe;
  18. import net.minecraft.recipe.cooking.SmeltingRecipe;
  19. import net.minecraft.recipe.cooking.SmokingRecipe;
  20. import net.minecraft.recipe.crafting.ShapedRecipe;
  21. import net.minecraft.recipe.crafting.ShapelessRecipe;
  22. import net.minecraft.util.Identifier;
  23. import java.util.List;
  24. public class DefaultPlugin implements IRecipePlugin {
  25. public static final Identifier CRAFTING = new Identifier("roughlyenoughitems", "plugins/crafting");
  26. public static final Identifier SMELTING = new Identifier("roughlyenoughitems", "plugins/smelting");
  27. public static final Identifier SMOKING = new Identifier("roughlyenoughitems", "plugins/smoking");
  28. public static final Identifier BLASTING = new Identifier("roughlyenoughitems", "plugins/blasting");
  29. public static final Identifier CAMPFIRE = new Identifier("roughlyenoughitems", "plugins/campfire");
  30. public static final Identifier STONE_CUTTING = new Identifier("roughlyenoughitems", "plugins/stone_cutting");
  31. public static final Identifier BREWING = new Identifier("roughlyenoughitems", "plugins/brewing");
  32. private static final List<DefaultBrewingDisplay> BREWING_DISPLAYS = Lists.newArrayList();
  33. public static void registerBrewingDisplay(DefaultBrewingDisplay display) {
  34. BREWING_DISPLAYS.add(display);
  35. }
  36. @Override
  37. public void registerPluginCategories() {
  38. RecipeHelper.registerCategory(new DefaultCraftingCategory());
  39. RecipeHelper.registerCategory(new DefaultSmeltingCategory());
  40. RecipeHelper.registerCategory(new DefaultSmokingCategory());
  41. RecipeHelper.registerCategory(new DefaultBlastingCategory());
  42. RecipeHelper.registerCategory(new DefaultCampfireCategory());
  43. RecipeHelper.registerCategory(new DefaultStoneCuttingCategory());
  44. RecipeHelper.registerCategory(new DefaultBrewingCategory());
  45. }
  46. @Override
  47. public void registerRecipes() {
  48. for(Recipe recipe : RecipeHelper.getRecipeManager().values())
  49. if (recipe instanceof ShapelessRecipe)
  50. RecipeHelper.registerRecipe(CRAFTING, new DefaultShapelessDisplay((ShapelessRecipe) recipe));
  51. else if (recipe instanceof ShapedRecipe)
  52. RecipeHelper.registerRecipe(CRAFTING, new DefaultShapedDisplay((ShapedRecipe) recipe));
  53. else if (recipe instanceof SmeltingRecipe)
  54. RecipeHelper.registerRecipe(SMELTING, new DefaultSmeltingDisplay((SmeltingRecipe) recipe));
  55. else if (recipe instanceof SmokingRecipe)
  56. RecipeHelper.registerRecipe(SMOKING, new DefaultSmokingDisplay((SmokingRecipe) recipe));
  57. else if (recipe instanceof BlastingRecipe)
  58. RecipeHelper.registerRecipe(BLASTING, new DefaultBlastingDisplay((BlastingRecipe) recipe));
  59. else if (recipe instanceof CampfireCookingRecipe)
  60. RecipeHelper.registerRecipe(CAMPFIRE, new DefaultCampfireDisplay((CampfireCookingRecipe) recipe));
  61. else if (recipe instanceof StonecuttingRecipe)
  62. RecipeHelper.registerRecipe(STONE_CUTTING, new DefaultStoneCuttingDisplay((StonecuttingRecipe) recipe));
  63. BREWING_DISPLAYS.forEach(display -> RecipeHelper.registerRecipe(BREWING, display));
  64. }
  65. @Override
  66. public void registerSpeedCraft() {
  67. RecipeHelper.registerSpeedCraftButtonArea(DefaultPlugin.CAMPFIRE, null);
  68. RecipeHelper.registerSpeedCraftButtonArea(DefaultPlugin.STONE_CUTTING, null);
  69. RecipeHelper.registerSpeedCraftButtonArea(DefaultPlugin.BREWING, null);
  70. RecipeHelper.registerSpeedCraftFunctional(DefaultPlugin.CRAFTING, new SpeedCraftFunctional<DefaultCraftingDisplay>() {
  71. @Override
  72. public Class[] getFunctioningFor() {
  73. return new Class[]{PlayerInventoryGui.class, CraftingTableGui.class};
  74. }
  75. @Override
  76. public boolean performAutoCraft(Gui gui, DefaultCraftingDisplay recipe) {
  77. if (gui.getClass().isAssignableFrom(CraftingTableGui.class))
  78. ((IMixinRecipeBookGui) (((CraftingTableGui) gui).getRecipeBookGui())).getGhostSlots().reset();
  79. else if (gui.getClass().isAssignableFrom(PlayerInventoryGui.class))
  80. ((IMixinRecipeBookGui) (((PlayerInventoryGui) gui).getRecipeBookGui())).getGhostSlots().reset();
  81. else
  82. return false;
  83. MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
  84. return true;
  85. }
  86. @Override
  87. public boolean acceptRecipe(Gui gui, DefaultCraftingDisplay recipe) {
  88. return gui instanceof CraftingTableGui || (gui instanceof PlayerInventoryGui && recipe.getHeight() < 3 && recipe.getWidth() < 3);
  89. }
  90. });
  91. RecipeHelper.registerSpeedCraftFunctional(DefaultPlugin.SMELTING, new SpeedCraftFunctional<DefaultSmeltingDisplay>() {
  92. @Override
  93. public Class[] getFunctioningFor() {
  94. return new Class[]{FurnaceGui.class};
  95. }
  96. @Override
  97. public boolean performAutoCraft(Gui gui, DefaultSmeltingDisplay recipe) {
  98. if (gui instanceof FurnaceGui)
  99. ((IMixinRecipeBookGui) (((FurnaceGui) gui).getRecipeBookGui())).getGhostSlots().reset();
  100. else
  101. return false;
  102. MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
  103. return true;
  104. }
  105. @Override
  106. public boolean acceptRecipe(Gui gui, DefaultSmeltingDisplay recipe) {
  107. return gui instanceof FurnaceGui;
  108. }
  109. });
  110. RecipeHelper.registerSpeedCraftFunctional(DefaultPlugin.SMOKING, new SpeedCraftFunctional<DefaultSmokingDisplay>() {
  111. @Override
  112. public Class[] getFunctioningFor() {
  113. return new Class[]{SmokerGui.class};
  114. }
  115. @Override
  116. public boolean performAutoCraft(Gui gui, DefaultSmokingDisplay recipe) {
  117. if (gui instanceof SmokerGui)
  118. ((IMixinRecipeBookGui) (((SmokerGui) gui).getRecipeBookGui())).getGhostSlots().reset();
  119. else
  120. return false;
  121. MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
  122. return true;
  123. }
  124. @Override
  125. public boolean acceptRecipe(Gui gui, DefaultSmokingDisplay recipe) {
  126. return gui instanceof SmokerGui;
  127. }
  128. });
  129. RecipeHelper.registerSpeedCraftFunctional(DefaultPlugin.BLASTING, new SpeedCraftFunctional<DefaultBlastingDisplay>() {
  130. @Override
  131. public Class[] getFunctioningFor() {
  132. return new Class[]{BlastFurnaceGui.class};
  133. }
  134. @Override
  135. public boolean performAutoCraft(Gui gui, DefaultBlastingDisplay recipe) {
  136. if (gui instanceof BlastFurnaceGui)
  137. ((IMixinRecipeBookGui) (((BlastFurnaceGui) gui).getRecipeBookGui())).getGhostSlots().reset();
  138. else
  139. return false;
  140. MinecraftClient.getInstance().interactionManager.clickRecipe(MinecraftClient.getInstance().player.container.syncId, recipe.getRecipe(), Gui.isShiftPressed());
  141. return true;
  142. }
  143. @Override
  144. public boolean acceptRecipe(Gui gui, DefaultBlastingDisplay recipe) {
  145. return gui instanceof BlastFurnaceGui;
  146. }
  147. });
  148. }
  149. @Override
  150. public int getPriority() {
  151. return -1;
  152. }
  153. }