Introduce ICraftingPatternProvider
This commit is contained in:
20
src/main/java/refinedstorage/api/autocrafting/ICraftingPatternProvider.java
Executable file
20
src/main/java/refinedstorage/api/autocrafting/ICraftingPatternProvider.java
Executable 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);
|
||||
}
|
||||
@@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user