MixinBrewingRecipeRegistry.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package me.shedaniel.rei.mixin;
  2. import com.google.common.collect.Lists;
  3. import me.shedaniel.rei.plugin.BrewingRecipe;
  4. import me.shedaniel.rei.plugin.DefaultBrewingDisplay;
  5. import me.shedaniel.rei.plugin.DefaultPlugin;
  6. import net.minecraft.item.Item;
  7. import net.minecraft.item.ItemProvider;
  8. import net.minecraft.item.PotionItem;
  9. import net.minecraft.potion.Potion;
  10. import net.minecraft.potion.PotionUtil;
  11. import net.minecraft.recipe.BrewingRecipeRegistry;
  12. import net.minecraft.recipe.Ingredient;
  13. import org.spongepowered.asm.mixin.Mixin;
  14. import org.spongepowered.asm.mixin.injection.At;
  15. import org.spongepowered.asm.mixin.injection.Inject;
  16. import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
  17. import java.util.Arrays;
  18. import java.util.List;
  19. @Mixin(BrewingRecipeRegistry.class)
  20. public class MixinBrewingRecipeRegistry {
  21. private static final List<BrewingRecipe> SELF_ITEM_RECIPES = Lists.newArrayList();
  22. private static final List<Potion> REGISTERED_POTION_TYPES = Lists.newArrayList();
  23. private static final List<Ingredient> SELF_POTION_TYPES = Lists.newArrayList();
  24. @Inject(method = "registerPotionType", at = @At("RETURN"))
  25. private static void method_8080(Item item_1, CallbackInfo ci) {
  26. if (item_1 instanceof PotionItem)
  27. SELF_POTION_TYPES.add(Ingredient.ofItems(new ItemProvider[]{item_1}));
  28. }
  29. @Inject(method = "registerItemRecipe", at = @At("RETURN"))
  30. private static void method_8071(Item item_1, Item item_2, Item item_3, CallbackInfo ci) {
  31. if (item_1 instanceof PotionItem && item_3 instanceof PotionItem)
  32. SELF_ITEM_RECIPES.add(new BrewingRecipe(item_1, Ingredient.ofItems(new ItemProvider[]{item_2}), item_3));
  33. }
  34. @Inject(method = "registerPotionRecipe", at = @At("RETURN"))
  35. private static void registerPotionRecipe(Potion potion_1, Item item_1, Potion potion_2, CallbackInfo ci) {
  36. if (!REGISTERED_POTION_TYPES.contains(potion_1))
  37. rei_registerPotionType(potion_1);
  38. if (!REGISTERED_POTION_TYPES.contains(potion_2))
  39. rei_registerPotionType(potion_2);
  40. SELF_POTION_TYPES.stream().map(Ingredient::getStackArray).forEach(itemStacks -> Arrays.stream(itemStacks).forEach(stack -> {
  41. DefaultPlugin.registerBrewingDisplay(new DefaultBrewingDisplay(PotionUtil.setPotion(stack.copy(), potion_1), Ingredient.ofItems(new ItemProvider[]{item_1}), PotionUtil.setPotion(stack.copy(), potion_2)));
  42. }));
  43. }
  44. private static void rei_registerPotionType(Potion potion) {
  45. REGISTERED_POTION_TYPES.add(potion);
  46. SELF_ITEM_RECIPES.forEach(recipe -> {
  47. DefaultPlugin.registerBrewingDisplay(new DefaultBrewingDisplay(PotionUtil.setPotion(recipe.input.getDefaultStack(), potion), recipe.ingredient, PotionUtil.setPotion(recipe.output.getDefaultStack(), potion)));
  48. });
  49. }
  50. }