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
+7 -4
View File
@@ -49,7 +49,8 @@ public class CraftingTreeNode
this.job = job; this.job = job;
sim = false; 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 ) ) if ( parent == null || parent.notRecurive( details ) )
nodes.add( new CraftingTreeProcess( cc, job, details, this, depth + 1, world ) ); nodes.add( new CraftingTreeProcess( cc, job, details, this, depth + 1, world ) );
@@ -151,10 +152,12 @@ public class CraftingTreeNode
while (pro.possible && l > 0) while (pro.possible && l > 0)
{ {
pro.request( inv, pro.getTimes( l, pro.getAmountCrafted( what ).getStackSize() ), src ); IAEItemStack madeWhat = pro.getAmountCrafted( what );
what.setStackSize( l ); pro.request( inv, pro.getTimes( l, madeWhat.getStackSize() ), src );
IAEItemStack available = inv.extractItems( what, Actionable.MODULATE, src );
madeWhat.setStackSize( l );
IAEItemStack available = inv.extractItems( madeWhat, Actionable.MODULATE, src );
if ( available != null ) if ( available != null )
{ {
+11
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." ); throw new RuntimeException( "Crafting Tree construction failed." );
} }
+21 -2
View File
@@ -448,11 +448,30 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
return 0; 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 ( 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 ImmutableSet.of();
}
return res; return res;
} }
+3 -1
View File
@@ -1640,7 +1640,9 @@ public class Platform
ci.setInventorySlotContents( slot, cp ); ci.setInventorySlotContents( slot, cp );
if ( r.matches( ci, w ) && Platform.isSameItem( r.getCraftingResult( ci ), output ) ) 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 ) if ( ex != null )
{ {
energySrc.extractAEPower( 1, realForFake, PowerMultiplier.CONFIG ); energySrc.extractAEPower( 1, realForFake, PowerMultiplier.CONFIG );