Fix a few issues when dealing with NBT items during crafting calculation.

This commit is contained in:
AlgorithmX2 2014-08-01 23:00:12 -05:00
parent 94c8ea93d2
commit e2337a1226
4 changed files with 42 additions and 7 deletions

View file

@ -49,7 +49,8 @@ public class CraftingTreeNode
this.job = job;
sim = false;
for (ICraftingPatternDetails details : cc.getCraftingFor( what ))// in order.
for (ICraftingPatternDetails details : cc.getCraftingFor( what, parent == null ? null : parent.details, slot, world ))// in
// order.
{
if ( parent == null || parent.notRecurive( details ) )
nodes.add( new CraftingTreeProcess( cc, job, details, this, depth + 1, world ) );
@ -151,10 +152,12 @@ public class CraftingTreeNode
while (pro.possible && l > 0)
{
pro.request( inv, pro.getTimes( l, pro.getAmountCrafted( what ).getStackSize() ), src );
IAEItemStack madeWhat = pro.getAmountCrafted( what );
what.setStackSize( l );
IAEItemStack available = inv.extractItems( what, Actionable.MODULATE, src );
pro.request( inv, pro.getTimes( l, madeWhat.getStackSize() ), src );
madeWhat.setStackSize( l );
IAEItemStack available = inv.extractItems( madeWhat, Actionable.MODULATE, src );
if ( available != null )
{

View file

@ -137,6 +137,17 @@ public class CraftingTreeProcess
}
}
// more fuzzy!
for (IAEItemStack is : details.getCondencedOutputs())
{
if ( is.getItem() == what2.getItem() && (is.getItem().isDamageable() || is.getItemDamage() == what2.getItemDamage()) )
{
what2 = is.copy();
what2.setStackSize( is.getStackSize() );
return what2;
}
}
throw new RuntimeException( "Crafting Tree construction failed." );
}

View file

@ -448,11 +448,30 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
return 0;
}
public ImmutableCollection<ICraftingPatternDetails> getCraftingFor(IAEItemStack what)
@Override
public ImmutableCollection<ICraftingPatternDetails> getCraftingFor(IAEItemStack whatToCraft, ICraftingPatternDetails details, int slotIndex, World world)
{
ImmutableSet<ICraftingPatternDetails> res = craftableItems.get( what );
ImmutableSet<ICraftingPatternDetails> res = craftableItems.get( whatToCraft );
if ( res == null )
{
if ( details != null && details.isCraftable() )
{
for (IAEItemStack ais : craftableItems.keySet())
{
if ( ais.getItem() == whatToCraft.getItem() && (!ais.getItem().getHasSubtypes() || ais.getItemDamage() == whatToCraft.getItemDamage()) )
{
if ( details.isValidItemForSlot( slotIndex, ais.getItemStack(), world ) )
{
return craftableItems.get( ais );
}
}
}
}
return ImmutableSet.of();
}
return res;
}

View file

@ -1640,7 +1640,9 @@ public class Platform
ci.setInventorySlotContents( slot, cp );
if ( r.matches( ci, w ) && Platform.isSameItem( r.getCraftingResult( ci ), output ) )
{
IAEItemStack ex = src.extractItems( AEItemStack.create( cp ), realForFake, mySrc );
IAEItemStack ax = x.copy();
ax.setStackSize( 1 );
IAEItemStack ex = src.extractItems( ax, realForFake, mySrc );
if ( ex != null )
{
energySrc.extractAEPower( 1, realForFake, PowerMultiplier.CONFIG );