diff --git a/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternProvider.java b/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternProvider.java new file mode 100755 index 000000000..7397911ba --- /dev/null +++ b/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternProvider.java @@ -0,0 +1,20 @@ +package refinedstorage.api.autocrafting; + +import net.minecraft.item.ItemStack; + +/** + * Implement this interface on pattern items. + * When you implement this interface on your patterns, they will be insertable in crafters. + * + * @todo: Serialization from controller! + */ +public interface ICraftingPatternProvider { + /** + * Creates a crafting pattern. + * + * @param stack The pattern stack + * @param container The container where the pattern is in + * @return The crafting pattern + */ + ICraftingPattern create(ItemStack stack, ICraftingPatternContainer container); +} diff --git a/src/main/java/refinedstorage/item/ItemPattern.java b/src/main/java/refinedstorage/item/ItemPattern.java index 3ab1897aa..0cfaa9d20 100755 --- a/src/main/java/refinedstorage/item/ItemPattern.java +++ b/src/main/java/refinedstorage/item/ItemPattern.java @@ -13,13 +13,17 @@ import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import refinedstorage.RefinedStorageItems; +import refinedstorage.api.autocrafting.ICraftingPattern; +import refinedstorage.api.autocrafting.ICraftingPatternContainer; +import refinedstorage.api.autocrafting.ICraftingPatternProvider; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.apiimpl.autocrafting.CraftingPattern; import java.util.HashSet; import java.util.List; import java.util.Set; -public class ItemPattern extends ItemBase { +public class ItemPattern extends ItemBase implements ICraftingPatternProvider { public static final String NBT_INPUTS = "Inputs"; public static final String NBT_OUTPUTS = "Outputs"; public static final String NBT_BYPRODUCTS = "Byproducts"; @@ -173,4 +177,15 @@ public class ItemPattern extends ItemBase { return pattern.getTagCompound().getBoolean(NBT_PROCESSING); } + + @Override + public ICraftingPattern create(ItemStack stack, ICraftingPatternContainer container) { + return new CraftingPattern( + container.getPosition(), + isProcessing(stack), + getInputs(stack), + getOutputs(stack), + getByproducts(stack) + ); + } } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index ca10c0fdc..6be05c886 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -21,6 +21,7 @@ import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.RefinedStorageAPI; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPatternContainer; +import refinedstorage.api.autocrafting.ICraftingPatternProvider; import refinedstorage.api.autocrafting.registry.ICraftingTaskFactory; import refinedstorage.api.autocrafting.task.ICraftingTask; import refinedstorage.api.network.*; @@ -50,7 +51,6 @@ import refinedstorage.integration.ic2.IControllerEnergyIC2; import refinedstorage.integration.ic2.IntegrationIC2; import refinedstorage.integration.tesla.ControllerEnergyTesla; import refinedstorage.integration.tesla.IntegrationTesla; -import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridFluidDelta; import refinedstorage.network.MessageGridFluidUpdate; import refinedstorage.network.MessageGridItemDelta; @@ -467,16 +467,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ICraftingPatternContainer container = (ICraftingPatternContainer) node; for (int i = 0; i < container.getPatterns().getSlots(); ++i) { - ItemStack pattern = container.getPatterns().getStackInSlot(i); + ItemStack stack = container.getPatterns().getStackInSlot(i); - if (pattern != null && ItemPattern.isValid(pattern)) { - patterns.add(new CraftingPattern( - container.getPosition(), - ItemPattern.isProcessing(pattern), - ItemPattern.getInputs(pattern), - ItemPattern.getOutputs(pattern), - ItemPattern.getByproducts(pattern) - )); + if (stack != null) { + patterns.add(((ICraftingPatternProvider) stack.getItem()).create(stack, container)); } } } diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index 7b8e5f69b..aad5a4481 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -7,16 +7,15 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageItems; import refinedstorage.api.autocrafting.ICraftingPatternContainer; +import refinedstorage.api.autocrafting.ICraftingPatternProvider; import refinedstorage.api.network.INetworkMaster; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; -import refinedstorage.item.ItemPattern; import refinedstorage.item.ItemUpgrade; public class TileCrafter extends TileNode implements ICraftingPatternContainer { - private ItemHandlerBasic patterns = new ItemHandlerBasic(9, this, stack -> (stack.getItem() == RefinedStorageItems.PATTERN && ItemPattern.isValid(stack))) { + private ItemHandlerBasic patterns = new ItemHandlerBasic(9, this, stack -> stack.getItem() instanceof ICraftingPatternProvider) { @Override protected void onContentsChanged(int slot) { super.onContentsChanged(slot);