public IAEStack injectItems(IAEStack input, Actionable type, BaseActionSource src)
{
if ( input instanceof IAEItemStack && type == Actionable.SIMULATE )// causes crafting to lock up?
{
IAEItemStack what = (IAEItemStack) input.copy();
IAEItemStack is = waitingFor.findPrecise( what );
if ( is != null && is.getStackSize() > 0 )
{
if ( is.getStackSize() >= what.getStackSize() )
{
if ( finalOutput.equals( what ) )
{
if ( myLastLink != null )
return ((CraftingLink) myLastLink).injectItems( what.copy(), type );
return what; // ignore it.
}
return null;
}
IAEItemStack leftOver = what.copy();
leftOver.decStackSize( is.getStackSize() );
IAEItemStack used = what.copy();
used.setStackSize( is.getStackSize() );
if ( finalOutput.equals( what ) )
{
if ( myLastLink != null )
{
leftOver.add( ((CraftingLink) myLastLink).injectItems( used.copy(), type ) );
return leftOver;
}
return what; // ignore it.
}
return leftOver;
}
}
else if ( input instanceof IAEItemStack && type == Actionable.MODULATE )
{
IAEItemStack what = (IAEItemStack) input;
IAEItemStack is = waitingFor.findPrecise( what );
if ( is != null && is.getStackSize() > 0 )
{
waiting = false;
postChange( (IAEItemStack) input, src );
if ( is.getStackSize() >= input.getStackSize() )
{
is.decStackSize( input.getStackSize() );
markDirty();
postCraftingStatusChange( is );
if ( finalOutput.equals( input ) )
{
finalOutput.decStackSize( input.getStackSize() );
if ( finalOutput.getStackSize() <= 0 )
completeJob();
updateCPU();
if ( myLastLink != null )
return ((CraftingLink) myLastLink).injectItems( (IAEItemStack) input, type );
return input; // ignore it.
}
// 2000
return inventory.injectItems( what, type, src );
}
IAEItemStack insert = what.copy();
insert.setStackSize( is.getStackSize() );
what.decStackSize( is.getStackSize() );
is.setStackSize( 0 );
if ( finalOutput.equals( insert ) )
{
finalOutput.decStackSize( insert.getStackSize() );
if ( finalOutput.getStackSize() <= 0 )
completeJob();
updateCPU();
if ( myLastLink != null )
{
what.add( ((CraftingLink) myLastLink).injectItems( insert.copy(), type ) );
return what;
}
if ( myLastLink != null )
return ((CraftingLink) myLastLink).injectItems( (IAEItemStack) input, type );