diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/GuiHandlerGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/AdvancedGuiHandlerGrid.java old mode 100755 new mode 100644 similarity index 92% rename from src/main/java/com/raoulvdberge/refinedstorage/integration/jei/GuiHandlerGrid.java rename to src/main/java/com/raoulvdberge/refinedstorage/integration/jei/AdvancedGuiHandlerGrid.java index 308850fd3..addc557c5 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/GuiHandlerGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/AdvancedGuiHandlerGrid.java @@ -7,7 +7,7 @@ import javax.annotation.Nullable; import java.awt.*; import java.util.List; -public class GuiHandlerGrid implements IAdvancedGuiHandler { +public class AdvancedGuiHandlerGrid implements IAdvancedGuiHandler { @Override public Class getGuiContainerClass() { return GuiGrid.class; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RSJEIPlugin.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RSJEIPlugin.java index a809eeac5..2297d0623 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RSJEIPlugin.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RSJEIPlugin.java @@ -17,7 +17,10 @@ public class RSJEIPlugin implements IModPlugin { registry.getRecipeTransferRegistry().addUniversalRecipeTransferHandler(new RecipeTransferHandlerGrid()); - registry.addAdvancedGuiHandlers(new GuiHandlerGrid()); + registry.addAdvancedGuiHandlers(new AdvancedGuiHandlerGrid()); + + registry.addRecipeRegistryPlugin(new RecipeRegistryPluginCover()); + registry.addRecipeRegistryPlugin(new RecipeRegistryPluginHollowCover()); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeRegistryPluginCover.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeRegistryPluginCover.java new file mode 100644 index 000000000..833b1e6ad --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeRegistryPluginCover.java @@ -0,0 +1,59 @@ +package com.raoulvdberge.refinedstorage.integration.jei; + +import com.raoulvdberge.refinedstorage.RSItems; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager; +import com.raoulvdberge.refinedstorage.item.ItemCover; +import mezz.jei.api.recipe.*; +import net.minecraft.item.ItemStack; + +import java.util.Collections; +import java.util.List; + +public class RecipeRegistryPluginCover implements IRecipeRegistryPlugin { + @Override + public List getRecipeCategoryUids(IFocus focus) { + if (focus.getValue() instanceof ItemStack) { + ItemStack stack = (ItemStack) focus.getValue(); + + if (focus.getMode() == IFocus.Mode.INPUT) { + if (CoverManager.isValidCover(stack)) { + return Collections.singletonList(VanillaRecipeCategoryUid.CRAFTING); + } + } else if (focus.getMode() == IFocus.Mode.OUTPUT) { + if (stack.getItem() == RSItems.COVER) { + return Collections.singletonList(VanillaRecipeCategoryUid.CRAFTING); + } + } + } + + return Collections.emptyList(); + } + + @Override + public List getRecipeWrappers(IRecipeCategory recipeCategory, IFocus focus) { + if (focus.getValue() instanceof ItemStack) { + ItemStack stack = (ItemStack) focus.getValue(); + + if (focus.getMode() == IFocus.Mode.INPUT) { + if (CoverManager.isValidCover(stack)) { + ItemStack cover = new ItemStack(RSItems.COVER); + + ItemCover.setItem(cover, stack); + + return Collections.singletonList((T) new RecipeWrapperCover(stack, cover)); + } + } else if (focus.getMode() == IFocus.Mode.OUTPUT) { + if (stack.getItem() == RSItems.COVER) { + return Collections.singletonList((T) new RecipeWrapperCover(ItemCover.getItem(stack), stack)); + } + } + } + + return Collections.emptyList(); + } + + @Override + public List getRecipeWrappers(IRecipeCategory recipeCategory) { + return Collections.emptyList(); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeRegistryPluginHollowCover.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeRegistryPluginHollowCover.java new file mode 100644 index 000000000..a80352f62 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeRegistryPluginHollowCover.java @@ -0,0 +1,63 @@ +package com.raoulvdberge.refinedstorage.integration.jei; + +import com.raoulvdberge.refinedstorage.RSItems; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager; +import com.raoulvdberge.refinedstorage.item.ItemCover; +import mezz.jei.api.recipe.*; +import net.minecraft.item.ItemStack; + +import java.util.Collections; +import java.util.List; + +public class RecipeRegistryPluginHollowCover implements IRecipeRegistryPlugin { + @Override + public List getRecipeCategoryUids(IFocus focus) { + if (focus.getValue() instanceof ItemStack) { + ItemStack stack = (ItemStack) focus.getValue(); + + if (focus.getMode() == IFocus.Mode.INPUT) { + if (stack.getItem() == RSItems.COVER && CoverManager.isValidCover(ItemCover.getItem(stack))) { + return Collections.singletonList(VanillaRecipeCategoryUid.CRAFTING); + } + } else if (focus.getMode() == IFocus.Mode.OUTPUT) { + if (stack.getItem() == RSItems.HOLLOW_COVER) { + return Collections.singletonList(VanillaRecipeCategoryUid.CRAFTING); + } + } + } + + return Collections.emptyList(); + } + + @Override + public List getRecipeWrappers(IRecipeCategory recipeCategory, IFocus focus) { + if (focus.getValue() instanceof ItemStack) { + ItemStack stack = (ItemStack) focus.getValue(); + + if (focus.getMode() == IFocus.Mode.INPUT) { + if (stack.getItem() == RSItems.COVER && CoverManager.isValidCover(ItemCover.getItem(stack))) { + ItemStack hollowCover = new ItemStack(RSItems.HOLLOW_COVER); + + ItemCover.setItem(hollowCover, ItemCover.getItem(stack)); + + return Collections.singletonList((T) new RecipeWrapperHollowCover(stack, hollowCover)); + } + } else if (focus.getMode() == IFocus.Mode.OUTPUT) { + if (stack.getItem() == RSItems.HOLLOW_COVER) { + ItemStack cover = new ItemStack(RSItems.COVER); + + ItemCover.setItem(cover, ItemCover.getItem(stack)); + + return Collections.singletonList((T) new RecipeWrapperHollowCover(cover, stack)); + } + } + } + + return Collections.emptyList(); + } + + @Override + public List getRecipeWrappers(IRecipeCategory recipeCategory) { + return Collections.emptyList(); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeWrapperCover.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeWrapperCover.java new file mode 100644 index 000000000..5fae5f1d9 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeWrapperCover.java @@ -0,0 +1,31 @@ +package com.raoulvdberge.refinedstorage.integration.jei; + +import com.raoulvdberge.refinedstorage.RSItems; +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.ItemHandlerHelper; + +import java.util.ArrayList; +import java.util.List; + +public class RecipeWrapperCover implements ICraftingRecipeWrapper { + private ItemStack stack; + private ItemStack cover; + + public RecipeWrapperCover(ItemStack stack, ItemStack cover) { + this.stack = ItemHandlerHelper.copyStackWithSize(stack, 1); + this.cover = ItemHandlerHelper.copyStackWithSize(cover, 6); + } + + @Override + public void getIngredients(IIngredients ingredients) { + List inputs = new ArrayList<>(); + + inputs.add(new ItemStack(RSItems.CUTTING_TOOL)); + inputs.add(stack); + + ingredients.setInputs(ItemStack.class, inputs); + ingredients.setOutput(ItemStack.class, cover); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeWrapperHollowCover.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeWrapperHollowCover.java new file mode 100644 index 000000000..5813f7de8 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RecipeWrapperHollowCover.java @@ -0,0 +1,41 @@ +package com.raoulvdberge.refinedstorage.integration.jei; + +import mezz.jei.api.ingredients.IIngredients; +import mezz.jei.api.recipe.wrapper.IShapedCraftingRecipeWrapper; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.ItemHandlerHelper; + +import java.util.ArrayList; +import java.util.List; + +public class RecipeWrapperHollowCover implements IShapedCraftingRecipeWrapper { + private ItemStack cover; + private ItemStack hollowCover; + + public RecipeWrapperHollowCover(ItemStack cover, ItemStack hollowCover) { + this.cover = ItemHandlerHelper.copyStackWithSize(cover, 1); + this.hollowCover = ItemHandlerHelper.copyStackWithSize(hollowCover, 8); + } + + @Override + public void getIngredients(IIngredients ingredients) { + List inputs = new ArrayList<>(); + + for (int i = 0; i < 9; ++i) { + inputs.add(i == 4 ? ItemStack.EMPTY : cover); + } + + ingredients.setInputs(ItemStack.class, inputs); + ingredients.setOutput(ItemStack.class, hollowCover); + } + + @Override + public int getWidth() { + return 3; + } + + @Override + public int getHeight() { + return 3; + } +}