Updated the Alchemy Table recipe system so that it can provide better custom recipes

This commit is contained in:
WayofTime 2016-05-04 16:44:32 -04:00
parent a5dee50984
commit 86efa8b1a3
12 changed files with 212 additions and 218 deletions

View file

@ -2,6 +2,8 @@
Version 2.0.0-36
------------------------------------------------------
- Added JEI compat for the Alchemy Table
- Changed the Item Routing system so that it used capabilities instead
- Updated the Alchemy Table recipe system so that it can provide better custom recipes.
------------------------------------------------------
Version 2.0.0-35

View file

@ -1,5 +1,9 @@
package WayofTime.bloodmagic.api.recipe;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import lombok.Getter;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
@ -8,10 +12,6 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.oredict.OreDictionary;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class AlchemyTableRecipe
{
protected ItemStack output = null;
@ -144,4 +144,38 @@ public class AlchemyTableRecipe
{
return this.input;
}
public ItemStack[] getRemainingItems(ItemStack[] inventory)
{
ItemStack[] ret = inventory.clone();
for (int i = 0; i < ret.length; i++)
{
ret[i] = getContainerItem(inventory[i]);
}
return ret;
}
protected ItemStack getContainerItem(ItemStack stack)
{
if (stack == null)
{
return null;
}
ItemStack copyStack = stack.copy();
if (copyStack.getItem().hasContainerItem(stack))
{
return copyStack.getItem().getContainerItem(copyStack);
}
copyStack.stackSize--;
if (copyStack.stackSize <= 0)
{
return null;
}
return copyStack;
}
}

View file

@ -450,7 +450,8 @@ public class ItemLivingArmour extends ItemArmor implements ISpecialArmor, IMeshP
tag.setTag(Constants.NBT.LIVING_ARMOUR, livingTag);
}
public static LivingArmourUpgrade getUpgrade(String uniqueIdentifier, ItemStack stack)
//TODO: Add the ability to have the armour give an upgrade with a higher level
public static LivingArmourUpgrade getUpgrade(String uniqueIdentifier, ItemStack stack)
{
if (!armourMap.containsKey(stack))
{

View file

@ -1,13 +1,13 @@
package WayofTime.bloodmagic.item.routing;
import WayofTime.bloodmagic.routing.IItemFilter;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.items.IItemHandler;
import WayofTime.bloodmagic.routing.IItemFilter;
public interface IItemFilterProvider
{
IItemFilter getInputItemFilter(ItemStack stack, IInventory inventory, EnumFacing syphonDirection);
IItemFilter getInputItemFilter(ItemStack stack, TileEntity tile, IItemHandler handler);
IItemFilter getOutputItemFilter(ItemStack stack, IInventory inventory, EnumFacing syphonDirection);
IItemFilter getOutputItemFilter(ItemStack stack, TileEntity tile, IItemHandler handler);
}

View file

@ -1,25 +1,32 @@
package WayofTime.bloodmagic.item.routing;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.items.IItemHandler;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.client.IVariantProvider;
import WayofTime.bloodmagic.item.inventory.ItemInventory;
import WayofTime.bloodmagic.routing.*;
import WayofTime.bloodmagic.routing.DefaultItemFilter;
import WayofTime.bloodmagic.routing.IItemFilter;
import WayofTime.bloodmagic.routing.IgnoreNBTItemFilter;
import WayofTime.bloodmagic.routing.ModIdItemFilter;
import WayofTime.bloodmagic.routing.OreDictItemFilter;
import WayofTime.bloodmagic.routing.TestItemFilter;
import WayofTime.bloodmagic.util.GhostItemHelper;
import WayofTime.bloodmagic.util.helper.TextHelper;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import java.util.ArrayList;
import java.util.List;
public class ItemRouterFilter extends Item implements IItemFilterProvider, IVariantProvider
{
@ -58,7 +65,7 @@ public class ItemRouterFilter extends Item implements IItemFilterProvider, IVari
}
@Override
public IItemFilter getInputItemFilter(ItemStack filterStack, IInventory inventory, EnumFacing syphonDirection)
public IItemFilter getInputItemFilter(ItemStack filterStack, TileEntity tile, IItemHandler handler)
{
IItemFilter testFilter = new TestItemFilter();
@ -96,12 +103,12 @@ public class ItemRouterFilter extends Item implements IItemFilterProvider, IVari
filteredList.add(ghostStack);
}
testFilter.initializeFilter(filteredList, inventory, syphonDirection, false);
testFilter.initializeFilter(filteredList, tile, handler, false);
return testFilter;
}
@Override
public IItemFilter getOutputItemFilter(ItemStack filterStack, IInventory inventory, EnumFacing syphonDirection)
public IItemFilter getOutputItemFilter(ItemStack filterStack, TileEntity tile, IItemHandler handler)
{
IItemFilter testFilter = new TestItemFilter();
@ -143,7 +150,7 @@ public class ItemRouterFilter extends Item implements IItemFilterProvider, IVari
filteredList.add(ghostStack);
}
testFilter.initializeFilter(filteredList, inventory, syphonDirection, true);
testFilter.initializeFilter(filteredList, tile, handler, true);
return testFilter;
}

View file

@ -1,15 +1,13 @@
package WayofTime.bloodmagic.routing;
import WayofTime.bloodmagic.util.Utils;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import java.util.List;
import net.minecraftforge.items.IItemHandler;
import WayofTime.bloodmagic.util.Utils;
/**
* This particular implementation of IItemFilter allows any item to be drained
@ -21,8 +19,8 @@ import java.util.List;
*/
public class DefaultItemFilter implements IItemFilter
{
private IInventory accessedInventory;
private EnumFacing accessedSide;
protected TileEntity accessedTile;
protected IItemHandler itemHandler;
/**
* Initializes the filter so that it knows what it wants to fulfill.
@ -41,10 +39,10 @@ public class DefaultItemFilter implements IItemFilter
* initialized as an input filter.
*/
@Override
public void initializeFilter(List<ItemStack> filteredList, IInventory inventory, EnumFacing side, boolean isFilterOutput)
public void initializeFilter(List<ItemStack> filteredList, TileEntity tile, IItemHandler itemHandler, boolean isFilterOutput)
{
accessedInventory = inventory;
accessedSide = side;
this.accessedTile = tile;
this.itemHandler = itemHandler;
}
/**
@ -70,15 +68,14 @@ public class DefaultItemFilter implements IItemFilter
ItemStack testStack = inputStack.copy();
testStack.stackSize = allowedAmount;
ItemStack remainderStack = Utils.insertStackIntoInventory(testStack, accessedInventory, accessedSide);
ItemStack remainderStack = Utils.insertStackIntoTile(testStack, itemHandler);
int changeAmount = allowedAmount - (remainderStack == null ? 0 : remainderStack.stackSize);
testStack = inputStack.copy();
testStack.stackSize -= changeAmount;
TileEntity tile = (TileEntity) accessedInventory;
World world = tile.getWorld();
BlockPos pos = tile.getPos();
World world = accessedTile.getWorld();
BlockPos pos = accessedTile.getPos();
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3);
return testStack;
@ -91,36 +88,15 @@ public class DefaultItemFilter implements IItemFilter
@Override
public int transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer)
{
boolean[] canAccessSlot = new boolean[accessedInventory.getSizeInventory()];
if (accessedInventory instanceof ISidedInventory)
for (int slot = 0; slot < itemHandler.getSlots(); slot++)
{
int[] slots = ((ISidedInventory) accessedInventory).getSlotsForFace(accessedSide);
for (int slot : slots)
{
canAccessSlot[slot] = true;
}
} else
{
for (int slot = 0; slot < accessedInventory.getSizeInventory(); slot++)
{
canAccessSlot[slot] = true;
}
}
for (int slot = 0; slot < accessedInventory.getSizeInventory(); slot++)
{
if (!canAccessSlot[slot])
ItemStack inputStack = itemHandler.getStackInSlot(slot);
if (inputStack == null || itemHandler.extractItem(slot, inputStack.stackSize, true) == null)//(accessedInventory instanceof ISidedInventory && !((ISidedInventory) accessedInventory).canExtractItem(slot, inputStack, accessedSide)))
{
continue;
}
ItemStack inputStack = accessedInventory.getStackInSlot(slot);
if (inputStack == null || (accessedInventory instanceof ISidedInventory && !((ISidedInventory) accessedInventory).canExtractItem(slot, inputStack, accessedSide)))
{
continue;
}
int allowedAmount = Math.min(inputStack.stackSize, maxTransfer);
int allowedAmount = Math.min(itemHandler.extractItem(slot, inputStack.stackSize, true).stackSize, maxTransfer);
ItemStack testStack = inputStack.copy();
testStack.stackSize = allowedAmount;
@ -133,15 +109,13 @@ public class DefaultItemFilter implements IItemFilter
continue;
}
TileEntity tile = (TileEntity) accessedInventory;
World world = tile.getWorld();
BlockPos pos = tile.getPos();
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3);
inputStack.stackSize -= changeAmount;
maxTransfer -= changeAmount;
accessedInventory.setInventorySlotContents(slot, inputStack.stackSize <= 0 ? null : inputStack); //Sets the slot in the inventory
itemHandler.extractItem(slot, changeAmount, false);
World world = accessedTile.getWorld();
BlockPos pos = accessedTile.getPos();
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3);
return changeAmount;
}

View file

@ -1,14 +1,14 @@
package WayofTime.bloodmagic.routing;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.items.IItemHandler;
public interface IItemFilter
{
void initializeFilter(List<ItemStack> filteredList, IInventory inventory, EnumFacing side, boolean isFilterOutput);
void initializeFilter(List<ItemStack> filteredList, TileEntity tile, IItemHandler itemHandler, boolean isFilterOutput);
/**
* This method is only called when the output inventory this filter is

View file

@ -1,14 +1,15 @@
package WayofTime.bloodmagic.routing;
import WayofTime.bloodmagic.util.Utils;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import java.util.Iterator;
import java.util.List;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.items.IItemHandler;
import WayofTime.bloodmagic.util.Utils;
/**
* This particular implementation of IItemFilter checks to make sure that a) as
* an output filter it will fill until the requested amount and b) as an input
@ -26,17 +27,19 @@ public class TestItemFilter implements IItemFilter
* filter, it keeps track of how many can be removed.
*/
protected List<ItemStack> requestList;
protected IInventory accessedInventory;
protected EnumFacing accessedSide;
protected TileEntity accessedTile;
protected IItemHandler itemHandler;
/**
* Initializes the filter so that it knows what it wants to fulfill.
*
* @param filteredList
* - The list of ItemStacks that the filter is set to.
* @param inventory
* @param tile
* - The inventory that is being accessed. This inventory is either
* being pulled from or pushed to.
* @param itemHandler
* - The item handler
* @param side
* - The side that the inventory is being accessed from. Used for
* pulling/pushing from/to the inventory.
@ -46,37 +49,17 @@ public class TestItemFilter implements IItemFilter
* initialized as an input filter.
*/
@Override
public void initializeFilter(List<ItemStack> filteredList, IInventory inventory, EnumFacing side, boolean isFilterOutput)
public void initializeFilter(List<ItemStack> filteredList, TileEntity tile, IItemHandler itemHandler, boolean isFilterOutput)
{
this.accessedInventory = inventory;
this.accessedSide = side;
this.accessedTile = tile;
this.itemHandler = itemHandler;
if (isFilterOutput)
{
requestList = filteredList;
boolean[] canAccessSlot = new boolean[inventory.getSizeInventory()];
if (inventory instanceof ISidedInventory)
{
int[] slots = ((ISidedInventory) inventory).getSlotsForFace(side);
for (int slot : slots)
{
canAccessSlot[slot] = true;
}
} else
{
for (int slot = 0; slot < inventory.getSizeInventory(); slot++)
{
canAccessSlot[slot] = true;
}
}
for (int slot = 0; slot < inventory.getSizeInventory(); slot++)
for (int slot = 0; slot < itemHandler.getSlots(); slot++)
{
if (!canAccessSlot[slot])
{
continue;
}
ItemStack checkedStack = inventory.getStackInSlot(slot);
ItemStack checkedStack = itemHandler.getStackInSlot(slot);
if (checkedStack == null)
{
continue;
@ -105,30 +88,9 @@ public class TestItemFilter implements IItemFilter
filterStack.stackSize *= -1; //Invert the stack size so that
}
boolean[] canAccessSlot = new boolean[inventory.getSizeInventory()];
if (inventory instanceof ISidedInventory)
for (int slot = 0; slot < itemHandler.getSlots(); slot++)
{
int[] slots = ((ISidedInventory) inventory).getSlotsForFace(side);
for (int slot : slots)
{
canAccessSlot[slot] = true;
}
} else
{
for (int slot = 0; slot < inventory.getSizeInventory(); slot++)
{
canAccessSlot[slot] = true;
}
}
for (int slot = 0; slot < inventory.getSizeInventory(); slot++)
{
if (!canAccessSlot[slot])
{
continue;
}
ItemStack checkedStack = inventory.getStackInSlot(slot);
ItemStack checkedStack = itemHandler.getStackInSlot(slot);
if (checkedStack == null)
{
continue;
@ -144,7 +106,6 @@ public class TestItemFilter implements IItemFilter
}
}
}
}
Iterator<ItemStack> iterator = requestList.iterator();
@ -188,7 +149,7 @@ public class TestItemFilter implements IItemFilter
ItemStack testStack = inputStack.copy();
testStack.stackSize = allowedAmount;
ItemStack remainderStack = Utils.insertStackIntoInventory(testStack, accessedInventory, accessedSide);
ItemStack remainderStack = Utils.insertStackIntoTile(testStack, itemHandler);
int changeAmount = allowedAmount - (remainderStack == null ? 0 : remainderStack.stackSize);
testStack = inputStack.copy();
@ -208,6 +169,10 @@ public class TestItemFilter implements IItemFilter
}
}
World world = accessedTile.getWorld();
BlockPos pos = accessedTile.getPos();
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3);
return testStack;
}
@ -218,31 +183,10 @@ public class TestItemFilter implements IItemFilter
@Override
public int transferThroughInputFilter(IItemFilter outputFilter, int maxTransfer)
{
boolean[] canAccessSlot = new boolean[accessedInventory.getSizeInventory()];
if (accessedInventory instanceof ISidedInventory)
for (int slot = 0; slot < itemHandler.getSlots(); slot++)
{
int[] slots = ((ISidedInventory) accessedInventory).getSlotsForFace(accessedSide);
for (int slot : slots)
{
canAccessSlot[slot] = true;
}
} else
{
for (int slot = 0; slot < accessedInventory.getSizeInventory(); slot++)
{
canAccessSlot[slot] = true;
}
}
for (int slot = 0; slot < accessedInventory.getSizeInventory(); slot++)
{
if (!canAccessSlot[slot])
{
continue;
}
ItemStack inputStack = accessedInventory.getStackInSlot(slot);
if (inputStack == null || (accessedInventory instanceof ISidedInventory && !((ISidedInventory) accessedInventory).canExtractItem(slot, inputStack, accessedSide)))
ItemStack inputStack = itemHandler.getStackInSlot(slot);
if (inputStack == null || itemHandler.extractItem(slot, inputStack.stackSize, true) == null)//(accessedInventory instanceof ISidedInventory && !((ISidedInventory) accessedInventory).canExtractItem(slot, inputStack, accessedSide)))
{
continue;
}
@ -252,7 +196,7 @@ public class TestItemFilter implements IItemFilter
{
if (doStacksMatch(filterStack, inputStack))
{
allowedAmount = Math.min(maxTransfer, Math.min(filterStack.stackSize, inputStack.stackSize));
allowedAmount = Math.min(maxTransfer, Math.min(filterStack.stackSize, itemHandler.extractItem(slot, inputStack.stackSize, true).stackSize));
break;
}
}
@ -273,10 +217,9 @@ public class TestItemFilter implements IItemFilter
continue;
}
inputStack.stackSize -= changeAmount;
maxTransfer -= changeAmount;
accessedInventory.setInventorySlotContents(slot, inputStack.stackSize <= 0 ? null : inputStack); //Sets the slot in the inventory
itemHandler.extractItem(slot, changeAmount, false);
Iterator<ItemStack> itr = requestList.iterator();
while (itr.hasNext())
@ -292,6 +235,10 @@ public class TestItemFilter implements IItemFilter
}
}
World world = accessedTile.getWorld();
BlockPos pos = accessedTile.getPos();
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3);
return changeAmount;
}

View file

@ -379,7 +379,7 @@ public class TileAlchemyTable extends TileInventory implements ISidedInventory,
currentOutputStack.stackSize += outputStack.stackSize;
}
consumeInventory();
consumeInventory(recipe);
}
}
@ -401,26 +401,38 @@ public class TileAlchemyTable extends TileInventory implements ISidedInventory,
return 0;
}
public void consumeInventory()
public void consumeInventory(AlchemyTableRecipe recipe)
{
ItemStack[] input = new ItemStack[6];
for (int i = 0; i < 6; i++)
{
ItemStack inputStack = getStackInSlot(i);
if (inputStack != null)
{
if (inputStack.getItem().hasContainerItem(inputStack))
{
setInventorySlotContents(i, inputStack.getItem().getContainerItem(inputStack));
continue;
}
inputStack.stackSize--;
if (inputStack.stackSize <= 0)
{
setInventorySlotContents(i, null);
continue;
}
}
input[i] = getStackInSlot(i);
}
ItemStack[] result = recipe.getRemainingItems(input);
for (int i = 0; i < 6; i++)
{
setInventorySlotContents(i, result[i]);
}
// for (int i = 0; i < 6; i++)
// {
// ItemStack inputStack = getStackInSlot(i);
// if (inputStack != null)
// {
// if (inputStack.getItem().hasContainerItem(inputStack))
// {
// setInventorySlotContents(i, inputStack.getItem().getContainerItem(inputStack));
// continue;
// }
//
// inputStack.stackSize--;
// if (inputStack.stackSize <= 0)
// {
// setInventorySlotContents(i, null);
// continue;
// }
// }
// }
}
}

View file

@ -8,6 +8,8 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
public class TileInputRoutingNode extends TileFilteredRoutingNode implements IInputItemRoutingNode
{
@ -26,19 +28,23 @@ public class TileInputRoutingNode extends TileFilteredRoutingNode implements IIn
public IItemFilter getInputFilterForSide(EnumFacing side)
{
TileEntity tile = worldObj.getTileEntity(pos.offset(side));
if (tile instanceof IInventory)
if (tile != null)
{
ItemStack filterStack = this.getFilterStack(side);
if (filterStack == null || !(filterStack.getItem() instanceof IItemFilterProvider))
if (tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()))
{
IItemFilter filter = new DefaultItemFilter();
filter.initializeFilter(null, (IInventory) tile, side.getOpposite(), false);
return filter;
}
IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite());
ItemStack filterStack = this.getFilterStack(side);
IItemFilterProvider filter = (IItemFilterProvider) filterStack.getItem();
return filter.getInputItemFilter(filterStack, (IInventory) tile, side.getOpposite());
if (filterStack == null || !(filterStack.getItem() instanceof IItemFilterProvider))
{
IItemFilter filter = new DefaultItemFilter();
filter.initializeFilter(null, tile, handler, false);
return filter;
}
IItemFilterProvider filter = (IItemFilterProvider) filterStack.getItem();
return filter.getInputItemFilter(filterStack, tile, handler);
}
}
return null;

View file

@ -8,6 +8,8 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
public class TileOutputRoutingNode extends TileFilteredRoutingNode implements IOutputItemRoutingNode
{
@ -26,20 +28,23 @@ public class TileOutputRoutingNode extends TileFilteredRoutingNode implements IO
public IItemFilter getOutputFilterForSide(EnumFacing side)
{
TileEntity tile = worldObj.getTileEntity(pos.offset(side));
if (tile instanceof IInventory)
if (tile != null)
{
ItemStack filterStack = this.getFilterStack(side);
if (filterStack == null || !(filterStack.getItem() instanceof IItemFilterProvider))
if (tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite()))
{
IItemFilter filter = new DefaultItemFilter();
filter.initializeFilter(null, (IInventory) tile, side.getOpposite(), true);
return filter;
IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side.getOpposite());
ItemStack filterStack = this.getFilterStack(side);
if (filterStack == null || !(filterStack.getItem() instanceof IItemFilterProvider))
{
IItemFilter filter = new DefaultItemFilter();
filter.initializeFilter(null, tile, handler, true);
return filter;
}
IItemFilterProvider filter = (IItemFilterProvider) filterStack.getItem();
return filter.getOutputItemFilter(filterStack, tile, handler);
}
IItemFilterProvider filter = (IItemFilterProvider) filterStack.getItem();
return filter.getOutputItemFilter(filterStack, (IInventory) tile, side.getOpposite());
}
return null;

View file

@ -373,20 +373,8 @@ public class Utils
if (tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir))
{
IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, dir);
int numberOfSlots = handler.getSlots();
ItemStack copyStack = stack.copy();
for (int slot = 0; slot < numberOfSlots; slot++)
{
copyStack = handler.insertItem(slot, copyStack, false);
if (copyStack == null)
{
return null;
}
}
return copyStack;
return insertStackIntoTile(stack, handler);
} else if (tile instanceof IInventory)
{
return insertStackIntoInventory(stack, (IInventory) tile, dir);
@ -395,6 +383,24 @@ public class Utils
return stack;
}
public static ItemStack insertStackIntoTile(ItemStack stack, IItemHandler handler)
{
int numberOfSlots = handler.getSlots();
ItemStack copyStack = stack.copy();
for (int slot = 0; slot < numberOfSlots; slot++)
{
copyStack = handler.insertItem(slot, copyStack, false);
if (copyStack == null)
{
return null;
}
}
return copyStack;
}
/**
* Inserts the desired stack into the tile up to a limit for the tile.
* Respects capabilities.