Introduce ICraftingPatternProvider

This commit is contained in:
Raoul Van den Berge
2016-08-30 23:55:25 +02:00
parent cf06a707b0
commit 0d856943fa
4 changed files with 42 additions and 14 deletions

View File

@@ -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);
}

View File

@@ -13,13 +13,17 @@ import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import refinedstorage.RefinedStorageItems; 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.api.storage.CompareUtils;
import refinedstorage.apiimpl.autocrafting.CraftingPattern;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; 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_INPUTS = "Inputs";
public static final String NBT_OUTPUTS = "Outputs"; public static final String NBT_OUTPUTS = "Outputs";
public static final String NBT_BYPRODUCTS = "Byproducts"; public static final String NBT_BYPRODUCTS = "Byproducts";
@@ -173,4 +177,15 @@ public class ItemPattern extends ItemBase {
return pattern.getTagCompound().getBoolean(NBT_PROCESSING); 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)
);
}
} }

View File

@@ -21,6 +21,7 @@ import refinedstorage.RefinedStorageBlocks;
import refinedstorage.api.RefinedStorageAPI; import refinedstorage.api.RefinedStorageAPI;
import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPattern;
import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingPatternContainer;
import refinedstorage.api.autocrafting.ICraftingPatternProvider;
import refinedstorage.api.autocrafting.registry.ICraftingTaskFactory; import refinedstorage.api.autocrafting.registry.ICraftingTaskFactory;
import refinedstorage.api.autocrafting.task.ICraftingTask; import refinedstorage.api.autocrafting.task.ICraftingTask;
import refinedstorage.api.network.*; import refinedstorage.api.network.*;
@@ -50,7 +51,6 @@ import refinedstorage.integration.ic2.IControllerEnergyIC2;
import refinedstorage.integration.ic2.IntegrationIC2; import refinedstorage.integration.ic2.IntegrationIC2;
import refinedstorage.integration.tesla.ControllerEnergyTesla; import refinedstorage.integration.tesla.ControllerEnergyTesla;
import refinedstorage.integration.tesla.IntegrationTesla; import refinedstorage.integration.tesla.IntegrationTesla;
import refinedstorage.item.ItemPattern;
import refinedstorage.network.MessageGridFluidDelta; import refinedstorage.network.MessageGridFluidDelta;
import refinedstorage.network.MessageGridFluidUpdate; import refinedstorage.network.MessageGridFluidUpdate;
import refinedstorage.network.MessageGridItemDelta; import refinedstorage.network.MessageGridItemDelta;
@@ -467,16 +467,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
ICraftingPatternContainer container = (ICraftingPatternContainer) node; ICraftingPatternContainer container = (ICraftingPatternContainer) node;
for (int i = 0; i < container.getPatterns().getSlots(); ++i) { 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)) { if (stack != null) {
patterns.add(new CraftingPattern( patterns.add(((ICraftingPatternProvider) stack.getItem()).create(stack, container));
container.getPosition(),
ItemPattern.isProcessing(pattern),
ItemPattern.getInputs(pattern),
ItemPattern.getOutputs(pattern),
ItemPattern.getByproducts(pattern)
));
} }
} }
} }

View File

@@ -7,16 +7,15 @@ import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.CombinedInvWrapper;
import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingPatternContainer;
import refinedstorage.api.autocrafting.ICraftingPatternProvider;
import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkMaster;
import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.inventory.ItemHandlerUpgrade;
import refinedstorage.item.ItemPattern;
import refinedstorage.item.ItemUpgrade; import refinedstorage.item.ItemUpgrade;
public class TileCrafter extends TileNode implements ICraftingPatternContainer { 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 @Override
protected void onContentsChanged(int slot) { protected void onContentsChanged(int slot) {
super.onContentsChanged(slot); super.onContentsChanged(slot);